25 INTEGER :: IP, LS, M, NP, IJK, LC
27 LOGICAL :: CHECK_FOR_ERRORS, OWNS
30 DOUBLE PRECISION :: DIST, POS(3)
32 DOUBLE PRECISION :: RAND(3)
35 check_for_errors = .false.
45 IF(is_exiting(np) .or. is_exiting_ghost(np)) cycle
47 CASE(
'N'); dist = des_pos_new(np,2) - yn(
bc_j_s(bcv))
48 CASE(
'S'); dist = yn(
bc_j_s(bcv)-1) - des_pos_new(np,2)
49 CASE(
'E'); dist = des_pos_new(np,1) - xe(
bc_i_w(bcv))
50 CASE(
'W'); dist = xe(
bc_i_w(bcv)-1) - des_pos_new(np,1)
51 CASE(
'T'); dist = des_pos_new(np,3) - zt(
bc_k_b(bcv))
52 CASE(
'B'); dist = zt(
bc_k_b(bcv)-1) - des_pos_new(np,3)
55 IF(dist > des_radius(np))
THEN 56 IF(is_entering(np))
CALL set_normal(np)
57 IF(is_entering_ghost(np))
CALL set_ghost(np)
64 CALL random_number(rand)
76 imax_global_id = imax_global_id + 1
82 IF(.NOT.owns) cycle ploop
88 max_pip = max(pip,max_pip)
91 np_lp:
DO np = ls, max_pip
92 IF(is_nonexistent(np))
THEN 99 iglobal_id(ls) = imax_global_id
109 check_for_errors = .true.
112 IF(check_for_errors)
THEN 148 INTEGER,
INTENT(IN) :: lBCV, lBCV_I
150 DOUBLE PRECISION,
INTENT(IN) :: lRAND(3)
152 INTEGER,
INTENT(OUT) :: lM
154 DOUBLE PRECISION,
INTENT(OUT) :: lPOS(3)
156 INTEGER,
INTENT(OUT) :: lIJKP(3)
158 LOGICAL,
INTENT(OUT) :: lOWNS
165 DOUBLE PRECISION RAND1, RAND2
171 INTEGER :: lI, lJ, lK
172 DOUBLE PRECISION :: WINDOW
176 vacancy =
dem_mi(lbcv_i)%VACANCY
177 occupants =
dem_mi(lbcv_i)%OCCUPANTS
178 dem_mi(lbcv_i)%VACANCY = mod(vacancy,occupants) + 1
187 IF(
dem_mi(lbcv_i)%POLYDISPERSE)
THEN 194 window =
dem_mi(lbcv_i)%WINDOW
203 lpos(1) =
dem_mi(lbcv_i)%P(vacancy) + rand1
204 lpos(3) =
dem_mi(lbcv_i)%Q(vacancy) + rand2
205 lpos(2) =
dem_mi(lbcv_i)%OFFSET
207 lijkp(1) =
dem_mi(lbcv_i)%W(vacancy)
208 lijkp(3) =
dem_mi(lbcv_i)%H(vacancy)
209 lijkp(2) =
dem_mi(lbcv_i)%L
213 lpos(2) =
dem_mi(lbcv_i)%P(vacancy) + rand1
214 lpos(3) =
dem_mi(lbcv_i)%Q(vacancy) + rand2
215 lpos(1) =
dem_mi(lbcv_i)%OFFSET
217 lijkp(2) =
dem_mi(lbcv_i)%W(vacancy)
218 lijkp(3) =
dem_mi(lbcv_i)%H(vacancy)
219 lijkp(1) =
dem_mi(lbcv_i)%L
223 lpos(1) =
dem_mi(lbcv_i)%P(vacancy) + rand1
224 lpos(2) =
dem_mi(lbcv_i)%Q(vacancy) + rand2
225 lpos(3) =
dem_mi(lbcv_i)%OFFSET
227 lijkp(1) =
dem_mi(lbcv_i)%W(vacancy)
228 lijkp(2) =
dem_mi(lbcv_i)%H(vacancy)
229 lijkp(3) =
dem_mi(lbcv_i)%L
283 INTEGER,
INTENT(IN) :: lBCV
285 INTEGER,
INTENT(IN) :: lM
287 INTEGER,
INTENT(IN) :: lNP
289 DOUBLE PRECISION,
INTENT(IN) :: lPOS(3)
291 INTEGER,
INTENT(IN) :: lIJKP(3)
296 INTEGER :: lI, lJ, lK
301 IF (is_ghost(lnp))
THEN 302 CALL set_entering_ghost(lnp)
304 CALL set_entering(lnp)
308 des_pos_new(lnp,:) = lpos(:)
309 ppos(lnp,:) = lpos(:)
310 des_vel_new(lnp,1) =
bc_u_s(lbcv,lm)
311 des_vel_new(lnp,2) =
bc_v_s(lbcv,lm)
312 des_vel_new(lnp,3) =
bc_w_s(lbcv,lm)
316 des_pos_old(lnp,:) = lpos(:)
317 des_vel_old(lnp,:) = des_vel_new(lnp,:)
325 IF(particle_orientation) orientation(1:3,lnp) = init_orientation
328 des_radius(lnp) =
half * d_p0(lm)
331 ro_sol(lnp) = ro_s0(lm)
334 pijk(lnp,1:3) = lijkp(:)
335 pijk(lnp,4) = funijk(lijkp(1), lijkp(2), lijkp(3))
352 pvol(lnp) = (4.0d0/3.0d0) *
pi * des_radius(lnp)**3
353 pmass(lnp) = pvol(lnp) * ro_sol(lnp)
354 omoi(lnp) = 5.d0 / (2.d0 * pmass(lnp) * des_radius(lnp)**2)
357 IF(des_explicitly_coupled) drag_fc(lnp,:) =
zero 412 INTEGER,
INTENT(IN) :: BCV_I
413 DOUBLE PRECISION,
INTENT(IN) :: ppar_pos(dimn)
414 DOUBLE PRECISION,
INTENT(IN) :: ppar_rad
415 LOGICAL,
INTENT(INOUT) :: TOUCHING
426 integer listart,liend,ljstart,ljend,lkstart,lkend
428 DOUBLE PRECISION DISTVEC(dimn), DIST, R_LM
465 IF(
ASSOCIATED(
pic(ijk)%P))
THEN 466 npg =
SIZE(
pic(ijk)%P)
469 distvec(:) = ppar_pos(:) - des_pos_new(np2,:)
470 dist = dot_product(distvec,distvec)
471 r_lm = ppar_rad + des_radius(np2)
472 IF(dist .LE. r_lm*r_lm) touching = .true.
integer, dimension(dimension_bc) bc_k_b
double precision, dimension(dim_m) c_ps0
integer, dimension(:), allocatable dem_bcmi_ijk
subroutine seed_new_particle(lBCV, lBCV_I, lRAND, lM, lPOS, lIJKP, lOWNS)
double precision, dimension(dim_m) d_p0
double precision, dimension(:), allocatable des_t_s
subroutine des_physical_prop
integer, dimension(dimension_bc) bc_i_w
double precision, dimension(dimension_bc, dim_m) bc_w_s
double precision, dimension(dimension_bc, dim_m, dim_n_s) bc_x_s
subroutine set_new_particle_props(lBCV, lM, lNP, lPOS, lIJKP)
subroutine des_new_particle_test(BCV_I, ppar_rad, ppar_pos, TOUCHING)
double precision, parameter undefined
type(iap2), dimension(:), allocatable dg_pic
double precision, dimension(:), allocatable dem_mi_time
character, dimension(dimension_bc) bc_plane
integer function iofpos(fpos)
double precision, dimension(dimension_bc, dim_m) bc_t_s
integer, dimension(dimension_bc) bc_j_s
double precision, dimension(:,:), allocatable des_x_s
integer, parameter numfrac_limit
double precision, parameter half
integer function kofpos(fpos)
double precision, dimension(dimension_bc, dim_m) bc_v_s
integer, dimension(:), allocatable dem_bcmi_ijkstart
integer, dimension(0:dim_m) nmax
integer, dimension(:), allocatable pi_factor
integer, dimension(:), allocatable dem_bcmi_ijkend
double precision, dimension(dimension_bc, dim_m) bc_u_s
integer, dimension(:), allocatable pi_count
subroutine mass_inflow_dem
integer function dg_funijk(fi, fj, fk)
type(dem_mi_), dimension(:), allocatable, target dem_mi
integer function jofpos(fpos)
double precision, dimension(dim_m) ro_s0
subroutine, public particle_grow(new_max_pip)
type(iap1), dimension(:), allocatable pic
integer, dimension(dimension_bc) dem_bcmi_map
double precision, parameter pi
integer, dimension(:,:), allocatable dem_bc_poly_layout
double precision, parameter zero