MFIX  2016-1
stl_preproc_des_mod.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! !
3 ! Module name: stl_functions_des !
4 ! Author: Rahul Garg Date: 24-Oct-13 !
5 ! !
6 ! Purpose: This module containd routines for geometric interaction !
7 ! required for STL files. !
8 ! !
9 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
11 
12  IMPLICIT NONE
13 
14 ! Use this module only to define functions and subroutines.
15  CONTAINS
16 
17 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
18 ! !
19 ! Subroutine: DES_STL_PREPROCESSING !
20 ! Author: Rahul Garg Date: 24-Oct-13 !
21 ! !
22 ! Purpose: !
23 ! !
24 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
25  SUBROUTINE des_stl_preprocessing
26 
27 ! Flag to for STL defined geometry
28  use cutcell, only: use_stl
29 ! Number of facets from STL files, (plus DES generated)
30  use stl, only: n_facets, n_facets_des
31 ! Start/End position of different STLs
32  use stl, only: stl_start, stl_end
33 ! All STLS
34  use stl, only: all_stl
35 ! STLs read from geometry files
36  use stl, only: base_stl
37 ! STLs for user specified walls (NSW, PSW, FSW)
38  use stl, only: bcwalls_stl
39 ! STLs for impermeable surfaces
40  use stl, only: imprmbl_stl
41 ! STLs for default walls
42  use stl, only: default_stl
43 
44  use stl_dbg_des
45  use error_manager
46 
47  IMPLICIT NONE
48 
49 ! Pre-procssing for the des in order to assign facets to grid cells.
50  WRITE(err_msg,"('Pre-Processing geometry for DES.')")
51  CALL flush_err_msg(header=.false., footer=.false.)
52 
53 ! Process the STL files
54  n_facets_des = merge(n_facets, 0, use_stl)
55 ! Store the Start/End of the base STLs from geometry files
56  stl_start(base_stl)=1; stl_end(base_stl)=n_facets_des
57 
58 ! Process stair-step geometries
60 ! Process stair-step geometries
62 ! Process default walls
64 
65 ! Bin the STL to the DES grid.
66  CALL bin_facets_to_dg
67 
68 ! Some functions for debugging.
69 ! CALL STL_DBG_WRITE_FACETS(BASE_STL)
70 ! CALL STL_DBG_WRITE_FACETS(BCWALLS_STL)
71 ! CALL STL_DBG_WRITE_FACETS(IMPRMBL_STL)
72 ! CALL STL_DBG_WRITE_FACETS(DEFAULT_STL)
73 ! CALL STL_DBG_WRITE_FACETS(ALL_STL)
74 ! CALL STL_DBG_WRITE_STL_FROM_DG(STL_TYPE=BASE_STL)
75 
76 ! Pre-procssing for the des in order to assign facets to grid cells.
77  WRITE(err_msg,"('DES geometry pre-processing complete.')")
78  CALL flush_err_msg(header=.false., footer=.false.)
79 
80  RETURN
81  END SUBROUTINE des_stl_preprocessing
82 
83 
84 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
85 ! !
86 ! Subroutine: BIN_FACETS_TO_DG !
87 ! Author: Rahul Garg Date: 24-Oct-13 !
88 ! !
89 ! Purpose: !
90 ! !
91 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
92  Subroutine bin_facets_to_dg
93 
94  use desgrid, only: dg_ijksize2
95  use desgrid, only: dg_iend2, dg_istart2
96  use desgrid, only: dg_jend2, dg_jstart2
97  use desgrid, only: dg_kend2, dg_kstart2
98  use desgrid, only: dg_dxinv, dg_dyinv, dg_dzinv
99 
100  use stl, only: facets_at_dg
101 
102  use geometry, only: xlength, ylength, zlength, do_k
103  use stl, only: n_facets_des
104  use stl, only: vertex
105 
106  use stl, only: tol_stl
107  use param1, only: zero, one
108 
109  use desgrid, only: dg_funijk
110  use desgrid, only: iofpos, jofpos, kofpos
112 
113  IMPLICIT NONE
114 
115 ! DES Grid cell index.
116  INTEGER :: IJK, IJK2
117 ! Loop counters:
118  INTEGER :: I1, I2, II ! X-axis
119  INTEGER :: J1, J2, JJ ! Y-axis
120  INTEGER :: K1, K2, KK ! Z-axis
121  INTEGER :: NN ! STLs
122 ! Generic accumulator
123  INTEGER :: COUNT_FAC
124 
125 ! Maximum and minimum extents of the indexed STL
126  DOUBLE PRECISION:: X1,Y1,Z1
127  DOUBLE PRECISION:: X2,Y2,Z2
128 
129 ! Allocate the data storage array.
130  IF(.not.allocated(facets_at_dg)) &
131  allocate(facets_at_dg(dg_ijksize2))
132 
133  facets_at_dg(:)%COUNT = 0
134 
135  DO nn = 1,n_facets_des
136 
137  x1 = minval(vertex(1:3,1,nn))
138  x2 = maxval(vertex(1:3,1,nn))
139  y1 = minval(vertex(1:3,2,nn))
140  y2 = maxval(vertex(1:3,2,nn))
141  z1 = minval(vertex(1:3,3,nn))
142  z2 = maxval(vertex(1:3,3,nn))
143 
144  i1 = dg_iend2
145  i2 = dg_istart2
146  IF(x2>=-tol_stl .AND. x1<=xlength+tol_stl) THEN
147  i1 = max(iofpos(x1)-1, dg_istart2)
148  i2 = min(iofpos(x2)+1, dg_iend2)
149  ENDIF
150 
151  j1 = dg_jend2
152  j2 = dg_jstart2
153  IF(y2>=-tol_stl .AND. y1<=ylength+tol_stl) THEN
154  j1 = max(jofpos(y1)-1, dg_jstart2)
155  j2 = min(jofpos(y2)+1, dg_jend2)
156  ENDIF
157 
158  k1 = dg_kend2
159  k2 = dg_kstart2
160  IF(do_k) THEN
161  IF(z2>=-tol_stl .AND. z1<=zlength+tol_stl) THEN
162  k1 = max(kofpos(z1)-1, dg_kstart2)
163  k2 = min(kofpos(z2)+1, dg_kend2)
164  ENDIF
165  ENDIF
166 
167  DO kk=k1,k2
168  DO jj=j1,j2
169  DO ii=i1,i2
170  IF(dg_is_on_mype_plus1layers(ii,jj,kk)) THEN
171  ijk = dg_funijk(ii,jj,kk)
172  CALL add_facet_for_des(ii,jj,kk,ijk,nn)
173  ENDIF
174  ENDDO
175  ENDDO
176  ENDDO
177 
178  ENDDO
179 
180  RETURN
181  END SUBROUTINE bin_facets_to_dg
182 
183 
184 
185 
186 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
187 ! !
188 ! Subroutine: ADD_FACET_FOR_DES !
189 ! Author: Rahul Garg Date: 24-Oct-13 !
190 ! !
191 ! Purpose: Add facets to DES grid cells. !
192 ! !
193 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
194  SUBROUTINE add_facet_for_des(I,J,K,IJK,N)
196  use geometry, only: do_k
197 
198  use desgrid, only: dg_dxinv, dg_xstart, dg_istart1
199  use desgrid, only: dg_dyinv, dg_ystart, dg_jstart1
200  use desgrid, only: dg_dzinv, dg_zstart, dg_kstart1
201 
202  use discretelement, only: max_radius
203 
204  use stl, only: vertex
205 
207 
208  use param1, only: zero, half, one
209  use error_manager
210 
211  IMPLICIT NONE
212 
213 ! DES grid index and facet index
214  INTEGER, INTENT(IN) :: I,J,K,IJK, N
215 
216 ! Center of DES grid cell and half size. Note that a buffer is added to
217 ! the half size to make the cell appear a little larger. This ensures
218 ! that paricles near the edge 'see' STLs that are nearby but do not
219 ! directly intersect the DES grid cell contain the particle center.
220  DOUBLE PRECISION :: CENTER(3), HALFSIZE(3)
221 ! Flag: STL intersects the DES grid cell
222  LOGICAL :: OVERLAP
223 ! DES grid cell dimensions
224  DOUBLE PRECISION :: lDX, lDY, lDZ
225 ! Buffer to ensure all particle-STL collisions are captured.
226  DOUBLE PRECISION :: BUFFER
227 ! Legacy variable - should be removed
228  INTEGER :: CURRENT_COUNT
229 
230  buffer = 1.1d0*max_radius
231 
232  ldx = one/dg_dxinv
233  ldy = one/dg_dyinv
234  ldz = one/dg_dzinv
235 
236  center(1) = dg_xstart + (dble(i-dg_istart1)+half)*ldx
237  halfsize(1) = half*ldx + buffer
238 
239  center(2) = dg_ystart + (dble(j-dg_jstart1)+half)*ldy
240  halfsize(2) = half*ldy + buffer
241 
242  IF(do_k)THEN
243  center(3) = dg_zstart + (dble(k-dg_kstart1)+half)*ldz
244  halfsize(3) = half*ldz + buffer
245  ELSE
246  center(3) = half*ldz
247  halfsize(3) = half*ldz
248  ENDIF
249 
250  CALL tri_box_overlap(center, halfsize, vertex(:,:,n), overlap)
251 
252  IF(overlap) CALL add_facet(ijk, n)
253 
254  RETURN
255  END SUBROUTINE add_facet_for_des
256 
257 
258 
259 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
260 ! !
261 ! Subroutine: ADD_FACET !
262 ! !
263 ! !
264 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
265  SUBROUTINE add_facet(IJK, FACET_ID)
267  use stl, only: vertex
268  use stl, only: facets_at_dg
269  use param1, only: zero
270 
271  implicit none
272 
273  INTEGER, INTENT(IN) :: IJK, facet_id
274 
275  INTEGER, ALLOCATABLE :: int_tmp(:)
276  DOUBLE PRECISION, ALLOCATABLE :: real_tmp(:)
277 
278  INTEGER :: lSIZE, II
279  DOUBLE PRECISION :: smallest_extent, min_temp, max_temp
280 
281 
282  IF(facets_at_dg(ijk)%COUNT > 0) THEN
283 
284  DO ii=1, facets_at_dg(ijk)%COUNT
285  IF(facet_id == facets_at_dg(ijk)%ID(ii)) RETURN
286  ENDDO
287 
288  facets_at_dg(ijk)%COUNT = facets_at_dg(ijk)%COUNT+1
289 
290  lsize = size(facets_at_dg(ijk)%ID)
291  IF(facets_at_dg(ijk)%COUNT +1> lsize) THEN
292  allocate(int_tmp(2*lsize)); int_tmp=0
293  int_tmp(1:lsize) = facets_at_dg(ijk)%ID(1:lsize)
294  call move_alloc(int_tmp,facets_at_dg(ijk)%ID)
295 
296  allocate(int_tmp(2*lsize)); int_tmp=0
297  int_tmp(1:lsize) = facets_at_dg(ijk)%DIR(1:lsize)
298  call move_alloc(int_tmp, facets_at_dg(ijk)%DIR)
299 
300  allocate(real_tmp(2*lsize)); real_tmp=zero
301  real_tmp(1:lsize) = facets_at_dg(ijk)%MIN(1:lsize)
302  call move_alloc(real_tmp, facets_at_dg(ijk)%MIN)
303 
304  allocate(real_tmp(2*lsize)); real_tmp=zero
305  real_tmp(1:lsize) = facets_at_dg(ijk)%MAX(1:lsize)
306  call move_alloc(real_tmp, facets_at_dg(ijk)%MAX)
307  ENDIF
308 
309  ELSE
310  facets_at_dg(ijk)%COUNT = 1
311  IF(.not.allocated(facets_at_dg(ijk)%ID)) &
312  allocate(facets_at_dg(ijk)%ID(4))
313  IF(.not.allocated(facets_at_dg(ijk)%DIR)) &
314  allocate(facets_at_dg(ijk)%DIR(4))
315  IF(.not.allocated(facets_at_dg(ijk)%MIN)) &
316  allocate(facets_at_dg(ijk)%MIN(4))
317  IF(.not.allocated(facets_at_dg(ijk)%MAX)) &
318  allocate(facets_at_dg(ijk)%MAX(4))
319  ENDIF
320 
321  facets_at_dg(ijk)%ID(facets_at_dg(ijk)%COUNT) = facet_id
322 
323  smallest_extent = huge(0.0)
324 
325  DO ii=1,3
326  min_temp = minval(vertex(:,ii,facet_id))
327  max_temp = maxval(vertex(:,ii,facet_id))
328  IF(abs(max_temp - min_temp) < smallest_extent ) THEN
329  facets_at_dg(ijk)%DIR(facets_at_dg(ijk)%COUNT) = ii
330  facets_at_dg(ijk)%MIN(facets_at_dg(ijk)%COUNT) = min_temp
331  facets_at_dg(ijk)%MAX(facets_at_dg(ijk)%COUNT) = max_temp
332  smallest_extent = abs(max_temp - min_temp)
333  ENDIF
334  ENDDO
335 
336  RETURN
337  END SUBROUTINE add_facet
338 
339 
340 
341 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
342 ! !
343 ! Subroutine: CONVERT_BC_WALLS_TO_STL !
344 ! Author: J.Musser Date: 03-Nov-15 !
345 ! !
346 ! Purpose: Convert user specified walls to STLs for particle-wall !
347 ! collision detection. !
348 ! !
349 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
350  Subroutine convert_bc_walls_to_stl
352  use geometry, only: zlength, do_k
353 
354  use bc, only: bc_defined, bc_type_enum, free_slip_wall, no_slip_wall, par_slip_wall
355  use bc, only: bc_i_w, bc_i_e
356  use bc, only: bc_j_s, bc_j_n
357  use bc, only: bc_k_b, bc_k_t
358 
359  use stl, only: n_facets_des
360  use stl, only: stl_start, stl_end, bcwalls_stl
361 
362  use discretelement, only: xe, yn, zt
363 
364  use param, only: dimension_bc
365  USE param1, only: zero
366 
367  IMPLICIT NONE
368 
369 ! Loop counter.
370  INTEGER :: BCV
371 ! Extents of the BC region with respect to the fluid grid.
372  DOUBLE PRECISION :: lXw, lXe, lYs, lYn, lZb, lZt
373 
374  stl_start(bcwalls_stl)=n_facets_des+1
375 
376  DO bcv=1, dimension_bc
377  IF(.NOT.bc_defined(bcv)) cycle
378 
379  IF(bc_type_enum(bcv) == free_slip_wall .OR. &
380  bc_type_enum(bcv) == no_slip_wall .OR. &
381  bc_type_enum(bcv) == par_slip_wall) THEN
382 
383  lxw = xe(bc_i_w(bcv)-1); lxe = xe(bc_i_e(bcv))
384  lys = yn(bc_j_s(bcv)-1); lyn = yn(bc_j_n(bcv))
385  IF(do_k) THEN
386  lzb = zt(bc_k_b(bcv)-1); lzt = zt(bc_k_t(bcv))
387  ELSE
388  lzb = zero; lzt = zlength
389  ENDIF
390  CALL generate_stl_box(lxw, lxe, lys, lyn, lzb, lzt)
391  ENDIF
392  ENDDO
393  stl_end(bcwalls_stl)=n_facets_des
394 
395  RETURN
396  END SUBROUTINE convert_bc_walls_to_stl
397 
398 
399 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
400 ! !
401 ! Subroutine: CONVERT_IMPERMEABLE_IS_TO_STL !
402 ! Author: J.Musser Date: 03-Nov-15 !
403 ! !
404 ! Purpose: Convert user specified impermeable surfaces to STLs for !
405 ! particle-wall collision detection. !
406 ! !
407 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
410  use geometry, only: do_k, zlength
411 
412  use is, only: is_defined, is_type
413  use is, only: is_i_w, is_i_e
414  use is, only: is_j_s, is_j_n
415  use is, only: is_k_b, is_k_t
416 
417  use stl, only: n_facets_des
418  use stl, only: stl_start, stl_end, imprmbl_stl
419  use discretelement, only: xe, yn, zt
420 
421  use param, only: dimension_is
422  USE param1, only: zero
423 
424  use error_manager
425 
426  IMPLICIT NONE
427 
428 ! Loop counter.
429  INTEGER :: ISV
430 ! Extents of the BC region with respect to the fluid grid.
431  DOUBLE PRECISION :: lXw, lXe, lYs, lYn, lZb, lZt
432 
433  stl_start(imprmbl_stl)=n_facets_des+1
434 
435  DO isv=1, dimension_is
436  IF(.NOT.is_defined(isv)) cycle
437 
438  IF(trim(is_type(isv)) == 'IMPERMEABLE') THEN
439 
440  lxw = xe(is_i_w(isv)-1); lxe = xe(is_i_e(isv))
441  lys = yn(is_j_s(isv)-1); lyn = yn(is_j_n(isv))
442  IF(do_k) THEN
443  lzb = zt(is_k_b(isv)-1); lzt = zt(is_k_t(isv))
444  ELSE
445  lzb = zero; lzt = zlength
446  ENDIF
447 
448  CALL generate_stl_box(lxw, lxe, lys, lyn, lzb, lzt)
449  ELSE
450  CALL init_err_msg('CONVERT_IMPERMEABLE_IS_TO_STL')
451  WRITE(err_msg,1000) isv, is_type(isv)
452  CALL flush_err_msg(abort=.true.)
453  ENDIF
454  ENDDO
455 
456  stl_end(imprmbl_stl)=n_facets_des
457 
458  1000 FORMAT("Error 1000: DES simulations do not support the ",/ &
459  'specified IS TYPE:',/3x,'IS: ',i3,/3x,'IS_TYPE=',a)
460 
461  RETURN
462  END SUBROUTINE convert_impermeable_is_to_stl
463 
464 
465 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
466 ! !
467 ! Subroutine: CONVERT_DEFAULT_WALLS_TO_STL !
468 ! Author: J.Musser Date: 03-Nov-15 !
469 ! !
470 ! Purpose: Convert user specified walls to STLs for particle-wall !
471 ! collision detection. !
472 ! !
473 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
476  USE geometry, only: do_k
477  USE geometry, only: xlength, ylength, zlength
478  use stl, only: vertex, norm_face
479  use stl, only: n_facets_des
480  use stl, only: stl_start, stl_end, default_stl
481 
482  use discretelement, only: des_periodic_walls_x
483  use discretelement, only: des_periodic_walls_y
484  use discretelement, only: des_periodic_walls_z
485 
486  USE param1, only: zero, one
487 
488  IMPLICIT NONE
489 
490  stl_start(default_stl)=n_facets_des+1
491 
492 ! West Face
493  IF(.NOT.des_periodic_walls_x)THEN
494  n_facets_des = n_facets_des+1
495  vertex(1,:,n_facets_des) = (/zero, zero, zero/)
496  vertex(2,:,n_facets_des) = (/zero, 2*ylength, zero/)
497  vertex(3,:,n_facets_des) = (/zero, zero, 2*zlength/)
498  norm_face(:,n_facets_des) = (/one, zero, zero/)
499 
500 ! East Face
501  n_facets_des = n_facets_des+1
502  vertex(1,:,n_facets_des) = (/xlength, zero, zero/)
503  vertex(2,:,n_facets_des) = (/xlength, 2*ylength, zero/)
504  vertex(3,:,n_facets_des) = (/xlength, zero, 2*zlength/)
505  norm_face(:,n_facets_des) = (/-one, zero, zero/)
506  ENDIF
507 
508 ! South Face
509  IF(.NOT.des_periodic_walls_y)THEN
510  n_facets_des = n_facets_des+1
511  vertex(1,:,n_facets_des) = (/zero, zero, zero/)
512  vertex(2,:,n_facets_des) = (/2*xlength, zero, zero/)
513  vertex(3,:,n_facets_des) = (/zero, zero, 2*zlength/)
514  norm_face(:,n_facets_des) = (/zero, one, zero/)
515 
516 ! North Face
517  n_facets_des = n_facets_des+1
518  vertex(1,:,n_facets_des) = (/zero, ylength, zero/)
519  vertex(2,:,n_facets_des) = (/2*xlength, ylength, zero/)
520  vertex(3,:,n_facets_des) = (/zero, ylength, 2*zlength/)
521  norm_face(:,n_facets_des) = (/zero, -one, zero/)
522  ENDIF
523 
524 ! Bottom Face
525  IF(.NOT.des_periodic_walls_z .AND. do_k) THEN
526  n_facets_des = n_facets_des+1
527  vertex(1,:,n_facets_des) = (/zero, zero, zero/)
528  vertex(2,:,n_facets_des) = (/2*xlength, zero, zero/)
529  vertex(3,:,n_facets_des) = (/zero, 2*ylength, zero/)
530  norm_face(:,n_facets_des) = (/zero, zero, one/)
531 
532 ! Top Face
533  n_facets_des = n_facets_des+1
534  vertex(1,:,n_facets_des) = (/zero, zero, zlength/)
535  vertex(2,:,n_facets_des) = (/2*xlength, zero, zlength/)
536  vertex(3,:,n_facets_des) = (/zero, 2*ylength, zlength/)
537  norm_face(:,n_facets_des) = (/zero, zero, -one/)
538  ENDIF
539 
540  stl_end(default_stl)=n_facets_des
541 
542  RETURN
543  END SUBROUTINE convert_default_walls_to_stl
544 
545  END MODULE stl_preproc_des
546 
547 
548 
549 
550 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
551 ! !
552 ! Subroutine: GENERATE_STL_BOX !
553 ! Author: J.Musser Date: 03-Nov-15 !
554 ! !
555 ! Purpose: Given the six corners of a box, create the 12 STLs needed !
556 ! to define the geometry. !
557 ! !
558 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
559  SUBROUTINE generate_stl_box(pXw, pXe, pYs, pYn, pZb, pZt)
561  use stl, only: vertex, norm_face
562  use stl, only: n_facets_des
563 
564  use geometry, only: do_k
565 
566  use param1, only: zero, one
567 
568  IMPLICIT NONE
569 
570  DOUBLE PRECISION, INTENT(IN) :: pXw, pXe, pYs, pYn, pZb, pZt
571 
572 ! West Face
574  vertex(1,:,n_facets_des) = (/pxw, pys, pzb/)
575  vertex(2,:,n_facets_des) = (/pxw, pyn, pzb/)
576  vertex(3,:,n_facets_des) = (/pxw, pyn, pzt/)
577  norm_face(:,n_facets_des) = (/-one, zero, zero/)
578 
579  IF(do_k)THEN
581  vertex(1,:,n_facets_des) = (/pxw, pys, pzt/)
582  vertex(2,:,n_facets_des) = (/pxw, pys, pzb/)
583  vertex(3,:,n_facets_des) = (/pxw, pyn, pzt/)
584  norm_face(:,n_facets_des) = (/-one, zero, zero/)
585  ENDIF
586 
587 ! East Face
589  vertex(3,:,n_facets_des) = (/pxe, pys, pzb/)
590  vertex(2,:,n_facets_des) = (/pxe, pyn, pzb/)
591  vertex(1,:,n_facets_des) = (/pxe, pyn, pzt/)
592  norm_face(:,n_facets_des) = (/one, zero, zero/)
593 
594  IF(do_k) THEN
596  vertex(3,:,n_facets_des) = (/pxe, pys, pzt/)
597  vertex(2,:,n_facets_des) = (/pxe, pys, pzb/)
598  vertex(1,:,n_facets_des) = (/pxe, pyn, pzt/)
599  norm_face(:,n_facets_des) = (/one, zero, zero/)
600  ENDIF
601 
602 ! South Face
604  vertex(1,:,n_facets_des) = (/pxw, pys, pzb/)
605  vertex(2,:,n_facets_des) = (/pxe, pys, pzb/)
606  vertex(3,:,n_facets_des) = (/pxw, pys, pzt/)
607  norm_face(:,n_facets_des) = (/zero, -one, zero/)
608 
609  IF(do_k) THEN
611  vertex(1,:,n_facets_des) = (/pxe, pys, pzt/)
612  vertex(2,:,n_facets_des) = (/pxe, pys, pzb/)
613  vertex(3,:,n_facets_des) = (/pxw, pys, pzb/)
614  norm_face(:,n_facets_des) = (/zero, -one, zero/)
615  ENDIF
616 
617 ! North Face
619  vertex(3,:,n_facets_des) = (/pxw, pyn, pzb/)
620  vertex(2,:,n_facets_des) = (/pxe, pyn, pzb/)
621  vertex(1,:,n_facets_des) = (/pxw, pyn, pzt/)
622  norm_face(:,n_facets_des) = (/zero, one, zero/)
623 
624  IF(do_k) THEN
626  vertex(3,:,n_facets_des) = (/pxe, pyn, pzt/)
627  vertex(2,:,n_facets_des) = (/pxe, pyn, pzb/)
628  vertex(1,:,n_facets_des) = (/pxw, pyn, pzb/)
629  norm_face(:,n_facets_des) = (/zero, one, zero/)
630  ENDIF
631 
632 ! Bottom Face
633  IF(do_k)THEN
635  vertex(1,:,n_facets_des) = (/pxw, pys, pzb/)
636  vertex(2,:,n_facets_des) = (/pxe, pys, pzb/)
637  vertex(3,:,n_facets_des) = (/pxe, pyn, pzb/)
638  norm_face(:,n_facets_des) = (/zero, zero, -one/)
639 
641  vertex(1,:,n_facets_des) = (/pxe, pyn, pzb/)
642  vertex(2,:,n_facets_des) = (/pxw, pyn, pzb/)
643  vertex(3,:,n_facets_des) = (/pxw, pys, pzb/)
644  norm_face(:,n_facets_des) = (/zero, zero, -one/)
645 
646 ! Top Face
648  vertex(3,:,n_facets_des) = (/pxw, pys, pzb/)
649  vertex(2,:,n_facets_des) = (/pxe, pys, pzb/)
650  vertex(1,:,n_facets_des) = (/pxe, pyn, pzb/)
651  norm_face(:,n_facets_des) = (/zero, zero, one/)
652 
654  vertex(3,:,n_facets_des) = (/pxe, pyn, pzb/)
655  vertex(2,:,n_facets_des) = (/pxw, pyn, pzb/)
656  vertex(1,:,n_facets_des) = (/pxw, pys, pzb/)
657  norm_face(:,n_facets_des) = (/zero, zero, one/)
658  ENDIF
659 
660  RETURN
661  END SUBROUTINE generate_stl_box
integer, dimension(dimension_bc) bc_k_b
Definition: bc_mod.f:70
integer n_facets
Definition: stl_mod.f:8
subroutine tri_box_overlap(pCENTER, pHALFSIZE, pVERTS, pOVERLAP)
subroutine generate_stl_box(pXw, pXe, pYs, pYn, pZb, pZt)
subroutine bin_facets_to_dg
double precision dg_xstart
Definition: desgrid_mod.f:62
type(facets_to_dg), dimension(:), allocatable facets_at_dg
Definition: stl_mod.f:76
character(len=16), dimension(dimension_is) is_type
Definition: is_mod.f:70
logical function dg_is_on_mype_plus1layers(lI, lJ, lK)
Definition: desgrid_mod.f:403
integer, parameter dimension_is
Definition: param_mod.f:63
double precision, parameter one
Definition: param1_mod.f:29
double precision, dimension(3, 3, dim_stl) vertex
Definition: stl_mod.f:20
double precision dg_dyinv
Definition: desgrid_mod.f:63
integer, dimension(dimension_bc) bc_i_w
Definition: bc_mod.f:54
integer, dimension(dimension_is) is_i_w
Definition: is_mod.f:45
integer, dimension(dimension_bc) bc_j_n
Definition: bc_mod.f:66
integer, dimension(4) stl_end
Definition: stl_mod.f:74
integer, parameter bcwalls_stl
Definition: stl_mod.f:71
integer dg_kstart2
Definition: desgrid_mod.f:53
double precision dg_zstart
Definition: desgrid_mod.f:64
subroutine convert_bc_walls_to_stl
integer, dimension(4) stl_start
Definition: stl_mod.f:74
integer, parameter all_stl
Definition: stl_mod.f:69
integer, parameter dimension_bc
Definition: param_mod.f:61
integer, dimension(dimension_bc) bc_type_enum
Definition: bc_mod.f:146
integer, parameter base_stl
Definition: stl_mod.f:70
Definition: is_mod.f:11
subroutine convert_default_walls_to_stl
integer dg_jstart1
Definition: desgrid_mod.f:49
subroutine add_facet(IJK, FACET_ID)
subroutine init_err_msg(CALLER)
integer, parameter default_stl
Definition: stl_mod.f:73
subroutine des_stl_preprocessing
integer, dimension(dimension_bc) bc_k_t
Definition: bc_mod.f:74
logical use_stl
Definition: cutcell_mod.f:428
integer dg_kend2
Definition: desgrid_mod.f:53
integer function iofpos(fpos)
Definition: desgrid_mod.f:348
double precision dg_dxinv
Definition: desgrid_mod.f:62
Definition: stl_mod.f:1
integer, dimension(dimension_bc) bc_j_s
Definition: bc_mod.f:62
integer, dimension(dimension_is) is_k_b
Definition: is_mod.f:61
double precision dg_dzinv
Definition: desgrid_mod.f:64
subroutine convert_impermeable_is_to_stl
integer dg_jstart2
Definition: desgrid_mod.f:49
double precision tol_stl
Definition: stl_mod.f:45
double precision, dimension(3, dim_stl) norm_face
Definition: stl_mod.f:22
logical, dimension(dimension_bc) bc_defined
Definition: bc_mod.f:207
subroutine add_facet_for_des(I, J, K, IJK, N)
double precision xlength
Definition: geometry_mod.f:33
double precision, parameter half
Definition: param1_mod.f:28
integer function kofpos(fpos)
Definition: desgrid_mod.f:372
double precision dg_ystart
Definition: desgrid_mod.f:63
Definition: param_mod.f:2
integer dg_iend2
Definition: desgrid_mod.f:45
logical, dimension(dimension_is) is_defined
Definition: is_mod.f:73
integer dg_ijksize2
Definition: desgrid_mod.f:57
integer n_facets_des
Definition: stl_mod.f:18
integer dg_kstart1
Definition: desgrid_mod.f:53
logical do_k
Definition: geometry_mod.f:30
integer, dimension(dimension_is) is_j_s
Definition: is_mod.f:53
integer dg_istart1
Definition: desgrid_mod.f:45
integer dg_istart2
Definition: desgrid_mod.f:45
character(len=line_length), dimension(line_count) err_msg
integer function dg_funijk(fi, fj, fk)
Definition: desgrid_mod.f:141
integer function jofpos(fpos)
Definition: desgrid_mod.f:360
integer, parameter imprmbl_stl
Definition: stl_mod.f:72
integer dg_jend2
Definition: desgrid_mod.f:49
double precision ylength
Definition: geometry_mod.f:35
integer, dimension(dimension_is) is_j_n
Definition: is_mod.f:57
integer, dimension(dimension_is) is_i_e
Definition: is_mod.f:49
integer, dimension(dimension_bc) bc_i_e
Definition: bc_mod.f:58
double precision, parameter zero
Definition: param1_mod.f:27
double precision zlength
Definition: geometry_mod.f:37
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)
Definition: bc_mod.f:23
integer, dimension(dimension_is) is_k_t
Definition: is_mod.f:65