MFIX  2016-1
stl_dbg_des_mod.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! !
3 ! Module name: stl_dbg_des !
4 ! Author: Rahul Garg Date: 24-Oct-13 !
5 ! !
6 ! Purpose: Random functions for debugging STLs with DES. !
7 ! !
8 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
9  MODULE stl_dbg_des
10 
11  IMPLICIT NONE
12 
13 ! Use this module only to define functions and subroutines.
14  CONTAINS
15 
16 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
17 ! !
18 ! Subroutine: STL_DBG_DG_REPORT !
19 ! Author: Rahul Garg Date: 24-Oct-13 !
20 ! !
21 ! Purpose: Reports the total number of facets in each DES grid cell. !
22 ! !
23 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
24  SUBROUTINE stl_dbg_dg_report
25 
26  use desgrid, only: dg_ijkstart2, dg_ijkend2
27 
28  use stl, only: facets_at_dg
29 
30  use compar, only: mype, numpes
31 
32  IMPLICIT NONE
33 
34  INTEGER :: IJK, TOTAL_FACETS, LC
35 
36  CHARACTER(LEN=100) :: FN
37 
38  IF(numpes == 1) THEN
39  WRITE(fn,'("FACETS_DG_GRID.DAT")')
40  ELSE
41  WRITE(fn,'("FACETS_DG_GRID_",I5.5,".DAT")') mype
42  ENDIF
43 
44  OPEN(1001, file=trim(fn))
45 
46  DO ijk=dg_ijkstart2, dg_ijkend2
47  total_facets = facets_at_dg(ijk)%COUNT
48  IF(total_facets < 1) cycle
49  WRITE(1001,2000) ijk, total_facets
50  DO lc=1, total_facets
51  WRITE(1001,'(2x,I10)') facets_at_dg(ijk)%ID(lc)
52  ENDDO
53  ENDDO
54 
55  CLOSE(1001, status = "keep")
56 
57  2000 FORMAT(2/2x,'DG CELL: ',i10,3x,'Total STLs: ',i4)
58 
59  RETURN
60  END SUBROUTINE stl_dbg_dg_report
61 
62 
63 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
64 ! !
65 ! Subroutine: STL_DBG_WRITE_FACETS !
66 ! Author: Rahul Garg Date: 24-Oct-13 !
67 ! !
68 ! Purpose: Write back out the STL files read from input files. !
69 ! !
70 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
71  SUBROUTINE stl_dbg_write_facets(STL_TYPE)
72 
73 ! Number of facets
74  use stl, only: n_facets, n_facets_des
75 ! Facet Vertices and normal
76  use stl, only: vertex, norm_face
77 ! Processor rank and rank of IO
78  use compar, only: mype, pe_io
79 ! Start/End position of different STLs
80  use stl, only: stl_start, stl_end
81 ! All STLS
82  use stl, only: all_stl
83 ! STLs read from geometry files
84  use stl, only: base_stl
85 ! STLs for user specified walls (NSW, PSW, FSW)
86  use stl, only: bcwalls_stl
87 ! STLs for impermeable surfaces
88  use stl, only: imprmbl_stl
89 ! STLs for default walls
90  use stl, only: default_stl
91 
92  use error_manager
93 
94  IMPLICIT NONE
95 
96 ! Type of STL to output
97  INTEGER, INTENT(IN) :: STL_TYPE
98 
99  INTEGER :: LC, lSTART, lEND
100  CHARACTER(len=128) :: FNAME
101 
102  IF(mype /= pe_io) RETURN
103 
104  SELECT CASE(stl_type)
105  CASE(base_stl)
106  lstart = stl_start(base_stl)
107  lend=stl_end(base_stl)
108  fname='BASE_FACETS.stl'
109  CASE(bcwalls_stl)
110  lstart = stl_start(bcwalls_stl)
111  lend=stl_end(bcwalls_stl)
112  fname='BCWALLS_FACETS.stl'
113  CASE(imprmbl_stl)
114  lstart = stl_start(imprmbl_stl)
115  lend=stl_end(imprmbl_stl)
116  fname='IMPRMBL_FACETS.stl'
117  CASE(default_stl)
118  lstart = stl_start(default_stl)
119  lend=stl_end(default_stl)
120  fname='DEFAULT_FACETS.stl'
121  CASE(all_stl)
122  lstart = 1
123  lend=n_facets_des
124  fname='ALL_FACETS.stl'
125  END SELECT
126 
127  IF(lend < lstart) THEN
128  WRITE(err_msg,"('No FACETS to report: ',A)") trim(fname)
129  CALL flush_err_msg(header=.false., footer=.false.)
130  RETURN
131  ENDIF
132 
133  OPEN(unit=444, file=trim(fname))
134 
135  WRITE(444,*) 'solid vcg'
136  DO lc = lstart, lend
137  WRITE(444,*) ' facet normal ', norm_face(:,lc)
138  WRITE(444,*) ' outer loop'
139  WRITE(444,*) ' vertex ', vertex(1,1:3,lc)
140  WRITE(444,*) ' vertex ', vertex(2,1:3,lc)
141  WRITE(444,*) ' vertex ', vertex(3,1:3,lc)
142  WRITE(444,*) ' endloop'
143  WRITE(444,*) ' endfacet'
144  ENDDO
145  WRITE(444,*)'endsolid vcg'
146 
147  CLOSE(555)
148 
149  RETURN
150  END SUBROUTINE stl_dbg_write_facets
151 
152 
153 
154 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
155 ! !
156 ! Subroutine: DEBUG_write_stl_from_grid_facet !
157 ! Author: Rahul Garg Date: 24-Oct-13 !
158 ! !
159 ! Purpose: !
160 ! !
161 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
162  SUBROUTINE stl_dbg_write_stl_from_dg(WRITE_EACH_CELL,STL_TYPE)
164 ! DES grid loop bounds
165  use desgrid, only: dg_ijkstart2, dg_ijkend2
166 ! Max numer of STLs
167  use stl, only: dim_stl
168 ! Facets binned to DES grid
169  use stl, only: facets_at_dg
170 ! Facet normal and vertex data
171  use stl, only: norm_face, vertex
172 ! Processor ID and total proc count
173  USE compar, only: mype, numpes
174 ! Start/End position of different STLs
175  use stl, only: stl_start, stl_end
176 ! STLs read from geometry files
177  use stl, only: base_stl
178 ! STLs for user specified walls (NSW, PSW, FSW)
179  use stl, only: bcwalls_stl
180 ! STLs for impermeable surfaces
181  use stl, only: imprmbl_stl
182 ! STLs for default walls
183  use stl, only: default_stl
184 ! All STLs
185  use stl, only: all_stl
186 ! Total number of STLs for DES
187  use stl, only: n_facets_des
188 
189  IMPLICIT NONE
190 
191  LOGICAL, INTENT(IN), OPTIONAL :: WRITE_EACH_CELL
192  INTEGER, INTENT(IN), OPTIONAL :: STL_TYPE
193 
194  INTEGER :: IJK, LC1, LC2
195  INTEGER :: lSTART, lEND
196  CHARACTER(LEN=8) :: FID, IDX
197  LOGICAL :: EACH_CELL
198 
199  LOGICAL, ALLOCATABLE :: WRITE_FACET(:)
200 
201 ! Initialize flag.
202  each_cell = .false.
203  IF(present(write_each_cell)) each_cell = write_each_cell
204 
205  ALLOCATE (write_facet(dim_stl))
206  write_facet = .true.
207 
208 
209  IF(present(stl_type)) THEN
210  SELECT CASE(stl_type)
211  CASE(base_stl)
212  lstart = stl_start(base_stl)
213  lend=stl_end(base_stl)
214  fid='BASE'
215  CASE(bcwalls_stl)
216  lstart = stl_start(bcwalls_stl)
217  lend=stl_end(bcwalls_stl)
218  fid='BCWALLS'
219  CASE(imprmbl_stl)
220  lstart = stl_start(imprmbl_stl)
221  lend=stl_end(imprmbl_stl)
222  fid='IMPRMBL'
223  CASE(default_stl)
224  lstart = stl_start(default_stl)
225  lend=stl_end(default_stl)
226  fid='DEFAULT'
227  CASE(all_stl)
228  lstart = 1
229  lend=n_facets_des
230  fid='ALL'
231  END SELECT
232  ELSE
233  lstart = 1
234  lend=n_facets_des
235  fid='ALL'
236  ENDIF
237 
238  IF(numpes == 1) THEN
239  OPEN(unit=444,file='DG_FACETS_'//trim(fid)//&
240  '.stl', status='UNKNOWN')
241  ELSE
242  WRITE(idx,"(I8.8)") mype
243  OPEN(unit=444,file='DG_FACETS_'//trim(fid)//&
244  '_'//idx//'.stl', status='UNKNOWN')
245  ENDIF
246 
247  write(444,*)'solid vcg'
248  DO ijk=dg_ijkstart2,dg_ijkend2
249  IF(facets_at_dg(ijk)%COUNT< 1) cycle
250 
251  IF(each_cell) CALL write_stls_this_dg(ijk, stl_type)
252 
253  DO lc1 = 1, facets_at_dg(ijk)%COUNT
254  lc2 = facets_at_dg(ijk)%ID(lc1)
255 
256  IF(lc2 < lstart .OR. lc2 > lend) &
257  write_facet(lc2) = .false.
258 
259  IF(write_facet(lc2)) THEN
260  write(444,*) ' facet normal ', norm_face(:,lc2)
261  write(444,*) ' outer loop'
262  write(444,*) ' vertex ', vertex(1,:,lc2)
263  write(444,*) ' vertex ', vertex(2,:,lc2)
264  write(444,*) ' vertex ', vertex(3,:,lc2)
265  write(444,*) ' endloop'
266  write(444,*) ' endfacet'
267  write_facet(lc2) = .false.
268  ENDIF
269  ENDDO
270  ENDDO
271  write(444,*)'endsolid vcg'
272 
273  close(444)
274 
275  DEALLOCATE (write_facet)
276 
277  RETURN
278  END SUBROUTINE stl_dbg_write_stl_from_dg
279 
280 
281 
282 
283 !----------------------------------------------------------------------!
284 ! !
285 ! !
286 ! !
287 !----------------------------------------------------------------------!
288  SUBROUTINE write_stls_this_dg(DG, STL_TYPE)
290 ! STL Vertices
291  use stl, only: vertex
292 ! STL Facet normals
293  use stl, only: norm_face
294 ! Facets binned to DES grid
295  use stl, only: facets_at_dg
296 ! Start/End position of different STLs
297  use stl, only: stl_start, stl_end
298 ! STLs read from geometry files
299  use stl, only: base_stl
300 ! STLs for user specified walls (NSW, PSW, FSW)
301  use stl, only: bcwalls_stl
302 ! STLs for impermeable surfaces
303  use stl, only: imprmbl_stl
304 ! STLs for default walls
305  use stl, only: default_stl
306 ! All STLs
307  use stl, only: all_stl
308 ! Total number of STLs for DES
309  use stl, only: n_facets_des
310 
311 
312  IMPLICIT NONE
313 !-----------------------------------------------
314  INTEGER, INTENT(IN) :: DG
315  INTEGER, INTENT(IN), OPTIONAL :: STL_TYPE
316 
317  INTEGER :: ID, FACET, lCOUNT
318  INTEGER :: lSTART, lEND
319 
320  LOGICAL :: EXISTS
321  CHARACTER(LEN=8) :: IDX, FID
322 
323  IF(present(stl_type)) THEN
324  SELECT CASE(stl_type)
325  CASE(base_stl)
326  lstart = stl_start(base_stl)
327  lend=stl_end(base_stl)
328  fid='base'
329  CASE(bcwalls_stl)
330  lstart = stl_start(bcwalls_stl)
331  lend=stl_end(bcwalls_stl)
332  fid='bcwalls'
333  CASE(imprmbl_stl)
334  lstart = stl_start(imprmbl_stl)
335  lend=stl_end(imprmbl_stl)
336  fid='imprmbl'
337  CASE(default_stl)
338  lstart = stl_start(default_stl)
339  lend=stl_end(default_stl)
340  fid='default'
341  CASE(all_stl)
342  lstart = 1
343  lend=n_facets_des
344  fid='all'
345  END SELECT
346  ELSE
347  lstart = 1
348  lend=n_facets_des
349  fid='all'
350  ENDIF
351 
352  lcount = 0
353  DO facet=1, facets_at_dg(dg)%COUNT
354  id = facets_at_dg(dg)%ID(facet)
355  IF(id >= lstart .AND. id <= lend) lcount = lcount+1
356  ENDDO
357 
358  IF(facets_at_dg(dg)%COUNT < 1) RETURN
359 
360  write(idx,"(I8.8)") dg
361  open(unit=555,file='dg_'//idx//'_'//trim(fid)//&
362  '.stl',status='UNKNOWN')
363 
364  write(555,*) 'solid vcg'
365 
366  DO facet=1, facets_at_dg(dg)%COUNT
367 
368  id = facets_at_dg(dg)%ID(facet)
369  IF(id < lstart .OR. id > lend) cycle
370 
371  write(555,*) ' facet normal ', norm_face(:,id)
372  write(555,*) ' outer loop'
373  write(555,*) ' vertex ', vertex(1,1:3,id)
374  write(555,*) ' vertex ', vertex(2,1:3,id)
375  write(555,*) ' vertex ', vertex(3,1:3,id)
376  write(555,*) ' endloop'
377  write(555,*) ' endfacet'
378  ENDDO
379  CLOSE(555)
380 
381  RETURN
382  END SUBROUTINE write_stls_this_dg
383 
384 
385 !----------------------------------------------------------------------!
386 ! !
387 ! !
388 ! !
389 !----------------------------------------------------------------------!
390  SUBROUTINE write_this_stl(this)
392 
393 ! STL Vertices
394  use stl, only: vertex
395 ! STL Facet normals
396  use stl, only: norm_face
397  use compar, only: mype
398 
399  IMPLICIT NONE
400 !-----------------------------------------------
401  integer, intent(in) :: this
402 
403  logical :: EXISTS
404  character(len=4) :: IDX
405  character(len=4) :: IPE
406 
407 
408  write(idx,"(I4.4)") this
409  write(ipe,"(I4.4)") mype
410  open(unit=555, file='idv_'//idx//'_'//ipe//'.stl',&
411  status='UNKNOWN')
412  write(555,*) 'solid vcg'
413  write(555,*) ' facet normal ', norm_face(:,this)
414  write(555,*) ' outer loop'
415  write(555,*) ' vertex ', vertex(1,1:3,this)
416  write(555,*) ' vertex ', vertex(2,1:3,this)
417  write(555,*) ' vertex ', vertex(3,1:3,this)
418  write(555,*) ' endloop'
419  write(555,*) ' endfacet'
420  close(555)
421 
422 
423  RETURN
424  END SUBROUTINE write_this_stl
425 
426  END MODULE stl_dbg_des
427 
428 
integer n_facets
Definition: stl_mod.f:8
type(facets_to_dg), dimension(:), allocatable facets_at_dg
Definition: stl_mod.f:76
integer dg_ijkend2
Definition: desgrid_mod.f:57
subroutine stl_dbg_write_stl_from_dg(WRITE_EACH_CELL, STL_TYPE)
subroutine stl_dbg_write_facets(STL_TYPE)
double precision, dimension(3, 3, dim_stl) vertex
Definition: stl_mod.f:20
integer, dimension(4) stl_end
Definition: stl_mod.f:74
integer, parameter bcwalls_stl
Definition: stl_mod.f:71
integer, dimension(4) stl_start
Definition: stl_mod.f:74
integer, parameter all_stl
Definition: stl_mod.f:69
integer, parameter base_stl
Definition: stl_mod.f:70
integer numpes
Definition: compar_mod.f:24
integer, parameter dim_stl
Definition: stl_mod.f:6
integer pe_io
Definition: compar_mod.f:30
integer, parameter default_stl
Definition: stl_mod.f:73
subroutine write_this_stl(this)
Definition: stl_mod.f:1
double precision, dimension(3, dim_stl) norm_face
Definition: stl_mod.f:22
integer n_facets_des
Definition: stl_mod.f:18
integer dg_ijkstart2
Definition: desgrid_mod.f:57
integer mype
Definition: compar_mod.f:24
character(len=line_length), dimension(line_count) err_msg
subroutine stl_dbg_dg_report
integer, parameter imprmbl_stl
Definition: stl_mod.f:72
subroutine write_stls_this_dg(DG, STL_TYPE)
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)