50 WRITE(
err_msg,
"('Pre-Processing geometry for DES.')")
54 n_facets_des = merge(n_facets, 0,
use_stl)
56 stl_start(base_stl)=1; stl_end(base_stl)=n_facets_des
77 WRITE(
err_msg,
"('DES geometry pre-processing complete.')")
118 INTEGER :: I1, I2, II
119 INTEGER :: J1, J2, JJ
120 INTEGER :: K1, K2, KK
126 DOUBLE PRECISION:: X1,Y1,Z1
127 DOUBLE PRECISION:: X2,Y2,Z2
130 IF(.not.
allocated(facets_at_dg)) &
131 allocate(facets_at_dg(dg_ijksize2))
133 facets_at_dg(:)%COUNT = 0
135 DO nn = 1,n_facets_des
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))
147 i1 = max(iofpos(x1)-1, dg_istart2)
148 i2 = min(iofpos(x2)+1, dg_iend2)
154 j1 = max(jofpos(y1)-1, dg_jstart2)
155 j2 = min(jofpos(y2)+1, dg_jend2)
162 k1 = max(kofpos(z1)-1, dg_kstart2)
163 k2 = min(kofpos(z2)+1, dg_kend2)
171 ijk = dg_funijk(ii,jj,kk)
202 use discretelement
, only: max_radius
214 INTEGER,
INTENT(IN) :: I,J,K,IJK, N
220 DOUBLE PRECISION :: CENTER(3), HALFSIZE(3)
224 DOUBLE PRECISION :: lDX, lDY, lDZ
226 DOUBLE PRECISION :: BUFFER
228 INTEGER :: CURRENT_COUNT
230 buffer = 1.1d0*max_radius
236 center(1) = dg_xstart + (dble(i-dg_istart1)+
half)*ldx
237 halfsize(1) =
half*ldx + buffer
239 center(2) = dg_ystart + (dble(j-dg_jstart1)+
half)*ldy
240 halfsize(2) =
half*ldy + buffer
244 halfsize(3) =
half*ldz + buffer
247 halfsize(3) =
half*ldz
273 INTEGER,
INTENT(IN) :: IJK, facet_id
275 INTEGER,
ALLOCATABLE :: int_tmp(:)
276 DOUBLE PRECISION,
ALLOCATABLE :: real_tmp(:)
279 DOUBLE PRECISION :: smallest_extent, min_temp, max_temp
292 allocate(int_tmp(2*lsize)); int_tmp=0
296 allocate(int_tmp(2*lsize)); int_tmp=0
300 allocate(real_tmp(2*lsize)); real_tmp=
zero 304 allocate(real_tmp(2*lsize)); real_tmp=
zero 323 smallest_extent = huge(0.0)
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 332 smallest_extent = abs(max_temp - min_temp)
362 use discretelement
, only: xe, yn, zt
372 DOUBLE PRECISION :: lXw, lXe, lYs, lYn, lZb, lZt
377 IF(.NOT.bc_defined(bcv)) cycle
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 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))
419 use discretelement
, only: xe, yn, zt
431 DOUBLE PRECISION :: lXw, lXe, lYs, lYn, lZb, lZt
436 IF(.NOT.is_defined(isv)) cycle
438 IF(trim(is_type(isv)) ==
'IMPERMEABLE')
THEN 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))
451 WRITE(
err_msg,1000) isv, is_type(isv)
458 1000
FORMAT(
"Error 1000: DES simulations do not support the ",/ &
459 'specified IS TYPE:',/3x,
'IS: ',i3,/3x,
'IS_TYPE=',a)
482 use discretelement
, only: des_periodic_walls_x
483 use discretelement
, only: des_periodic_walls_y
484 use discretelement
, only: des_periodic_walls_z
493 IF(.NOT.des_periodic_walls_x)
THEN 494 n_facets_des = n_facets_des+1
501 n_facets_des = n_facets_des+1
509 IF(.NOT.des_periodic_walls_y)
THEN 510 n_facets_des = n_facets_des+1
517 n_facets_des = n_facets_des+1
525 IF(.NOT.des_periodic_walls_z .AND. do_k)
THEN 526 n_facets_des = n_facets_des+1
533 n_facets_des = n_facets_des+1
570 DOUBLE PRECISION,
INTENT(IN) :: pXw, pXe, pYs, pYn, pZb, pZt
integer, dimension(dimension_bc) bc_k_b
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
type(facets_to_dg), dimension(:), allocatable facets_at_dg
character(len=16), dimension(dimension_is) is_type
logical function dg_is_on_mype_plus1layers(lI, lJ, lK)
integer, parameter dimension_is
double precision, parameter one
double precision, dimension(3, 3, dim_stl) vertex
double precision dg_dyinv
integer, dimension(dimension_bc) bc_i_w
integer, dimension(dimension_is) is_i_w
integer, dimension(dimension_bc) bc_j_n
integer, dimension(4) stl_end
integer, parameter bcwalls_stl
double precision dg_zstart
subroutine convert_bc_walls_to_stl
integer, dimension(4) stl_start
integer, parameter all_stl
integer, parameter dimension_bc
integer, dimension(dimension_bc) bc_type_enum
integer, parameter base_stl
subroutine convert_default_walls_to_stl
subroutine add_facet(IJK, FACET_ID)
subroutine init_err_msg(CALLER)
integer, parameter default_stl
subroutine des_stl_preprocessing
integer, dimension(dimension_bc) bc_k_t
integer function iofpos(fpos)
double precision dg_dxinv
integer, dimension(dimension_bc) bc_j_s
integer, dimension(dimension_is) is_k_b
double precision dg_dzinv
subroutine convert_impermeable_is_to_stl
double precision, dimension(3, dim_stl) norm_face
logical, dimension(dimension_bc) bc_defined
subroutine add_facet_for_des(I, J, K, IJK, N)
double precision, parameter half
integer function kofpos(fpos)
double precision dg_ystart
logical, dimension(dimension_is) is_defined
integer, dimension(dimension_is) is_j_s
character(len=line_length), dimension(line_count) err_msg
integer function dg_funijk(fi, fj, fk)
integer function jofpos(fpos)
integer, parameter imprmbl_stl
integer, dimension(dimension_is) is_j_n
integer, dimension(dimension_is) is_i_e
integer, dimension(dimension_bc) bc_i_e
double precision, parameter zero
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)
integer, dimension(dimension_is) is_k_t