42 INTEGER :: I, J, K, IJK, cur_ijk
44 INTEGER :: IPJK, IJPK, IJKP,&
45 IPJPK, IPJKP, IJPKP, IPJPKP
48 INTEGER :: IW, IE, JS, JN, KB, KTP
51 INTEGER,
DIMENSION(3) :: PCELL
60 DOUBLE PRECISION :: AVG_FACTOR
63 DOUBLE PRECISION,
DIMENSION(2,2,2,3) :: gst_tmp,vst_tmp
64 DOUBLE PRECISION,
DIMENSION(2,2,2) :: weight_ft
65 DOUBLE PRECISION :: velfp(3), desposnew(3)
66 DOUBLE PRECISION :: D_FORCE(3)
67 DOUBLE PRECISION,
DIMENSION(3) :: VEL_NEW
76 avg_factor = merge(0.50d0, 0.25d0,
no_k)
95 if(.not.fluid_at(ijk) .or. pinc(ijk).eq.0) cycle
106 pcell(3) = merge(1, k-1,
no_k)
111 ktp,interp_scheme,dimn,ordernew = onew)
114 DO k = 1,merge(1, onew,
no_k)
120 cur_ijk = funijk_map_c(ii,jj,kk)
121 ipjk = funijk_map_c(ii+1,jj,kk)
122 ijpk = funijk_map_c(ii,jj+1,kk)
123 ipjpk = funijk_map_c(ii+1,jj+1,kk)
125 gst_tmp(i,j,k,1) = xe(ii)
126 gst_tmp(i,j,k,2) = yn(jj)
127 gst_tmp(i,j,k,3) = merge(dz(1), zt(kk),
no_k)
128 vst_tmp(i,j,k,1) = avg_factor*(
u_g(cur_ijk)+
u_g(ijpk))
129 vst_tmp(i,j,k,2) = avg_factor*(
v_g(cur_ijk)+
v_g(ipjk))
132 ijpkp = funijk_map_c(ii,jj+1,kk+1)
133 ipjkp = funijk_map_c(ii+1,jj,kk+1)
134 ipjpkp = funijk_map_c(ii+1,jj+1,kk+1)
135 ijkp = funijk_map_c(ii,jj,kk+1)
136 vst_tmp(i,j,k,1) = vst_tmp(i,j,k,1) + avg_factor*(
u_g 141 vst_tmp(i,j,k,3) = 0.d0
148 DO nindx = 1,pinc(ijk)
149 np =
pic(ijk)%p(nindx)
151 if(is_nonexistent(np)) cycle
152 if(is_ghost(np).or.is_entering_ghost(np).or.is_exiting_ghost
164 vel_new(:) = des_vel_new(np,:)
170 d_force(1:3) = f_gp(np)*(velfp)
173 d_force(1:3) = f_gp(np)*(velfp-vel_new)
178 fc(np,:3) = fc(np,:3) + d_force(:3)
182 fc(np,:3) = fc(np,:3) + p_force(:,ijk)*pvol(np)
237 INTEGER :: I, J, K, IJK, cur_ijk
238 INTEGER :: II, JJ, KK
239 INTEGER :: IPJK, IJPK, IJKP, IMJK, IJMK, IJKM,&
240 IPJPK, IPJKP, IJPKP, IPJPKP, &
241 IMJMK, IMJKM, IJMKM, IMJMKM
244 INTEGER :: IW, IE, JS, JN, KB, KTP
247 INTEGER,
DIMENSION(3) :: PCELL
256 DOUBLE PRECISION :: OVOL
258 DOUBLE PRECISION :: VCELL
262 DOUBLE PRECISION :: AVG_FACTOR
264 DOUBLE PRECISION :: WTP
266 DOUBLE PRECISION,
DIMENSION(2,2,2,3) :: gst_tmp,vst_tmp
267 DOUBLE PRECISION,
DIMENSION(2,2,2) :: weight_ft
268 DOUBLE PRECISION :: velfp(3), desposnew(3)
269 DOUBLE PRECISION,
DIMENSION(3) :: VEL_NEW
283 avg_factor = merge(0.50d0, 0.25d0,
no_k)
300 IF(.NOT.fluid_at(ijk) .OR. pinc(ijk)==0) cycle
311 pcell(3) = merge(1, k-1,
no_k)
316 ktp,interp_scheme,dimn,ordernew = onew)
319 DO k = 1, merge(1, onew,
no_k)
325 cur_ijk = funijk_map_c(ii,jj,kk)
326 ipjk = funijk_map_c(ii+1,jj,kk)
327 ijpk = funijk_map_c(ii,jj+1,kk)
328 ipjpk = funijk_map_c(ii+1,jj+1,kk)
329 gst_tmp(i,j,k,1) = xe(ii)
330 gst_tmp(i,j,k,2) = yn(jj)
331 gst_tmp(i,j,k,3) = merge(dz(1), zt(kk),
no_k)
332 vst_tmp(i,j,k,1) = avg_factor*(
u_g(cur_ijk)+
u_g(ijpk))
333 vst_tmp(i,j,k,2) = avg_factor*(
v_g(cur_ijk)+
v_g(ipjk))
336 ijpkp = funijk_map_c(ii,jj+1,kk+1)
337 ipjkp = funijk_map_c(ii+1,jj,kk+1)
338 ipjpkp = funijk_map_c(ii+1,jj+1,kk+1)
339 ijkp = funijk_map_c(ii,jj,kk+1)
340 vst_tmp(i,j,k,1) = vst_tmp(i,j,k,1) + &
341 avg_factor*(
u_g(ijkp) +
u_g(ijpkp))
343 vst_tmp(i,j,k,2) = vst_tmp(i,j,k,2) + &
344 avg_factor*(
v_g(ijkp) +
v_g(ipjkp))
346 vst_tmp(i,j,k,3) = avg_factor*(
w_g(cur_ijk)+&
349 vst_tmp(i,j,k,3) = 0.d0
356 DO nindx = 1,pinc(ijk)
357 np =
pic(ijk)%p(nindx)
359 if(is_nonexistent(np)) cycle
360 if(is_ghost(np).or.is_entering_ghost(np).or.is_exiting_ghost
371 vel_new(:) = des_vel_new(np,:)
382 DO k = 1, merge(1, onew,
no_k)
392 cur_ijk = funijk_map_c(ii, jj, kk)
395 vcell = des_vol_node(cur_ijk)
399 drag_am(cur_ijk) = drag_am(cur_ijk) + &
400 f_gp(np)*weight_ft(i,j,k)*ovol*wtp
402 drag_bm(cur_ijk,1:3) = &
403 drag_bm(cur_ijk,1:3) + &
404 f_gp(np) * vel_new(1:3) * &
405 weight_ft(i,j,k)*ovol*wtp
426 avg_factor = merge(0.25d0, 0.125d0,
no_k)
433 IF(fluid_at(ijk))
THEN 441 imjk = funijk_map_c(i-1,j,k)
442 ijmk = funijk_map_c(i,j-1,k)
443 imjmk = funijk_map_c(i-1,j-1,k)
445 f_gds(ijk) = avg_factor*&
446 (drag_am(ijk) + drag_am(ijmk) +&
447 drag_am(imjmk) + drag_am(imjk))
450 ijkm = funijk_map_c(i,j,k-1)
451 imjkm = funijk_map_c(i-1,j,k-1)
452 ijmkm = funijk_map_c(i,j-1,k-1)
453 imjmkm = funijk_map_c(i-1,j-1,k-1)
454 f_gds(ijk) = f_gds(ijk) + avg_factor*&
455 (drag_am(ijkm) + drag_am(ijmkm) +&
456 drag_am(imjmkm)+drag_am(imjkm) )
485 DOUBLE PRECISION,
DIMENSION(2,2,2,3),
INTENT(IN):: GSTEN
486 DOUBLE PRECISION,
DIMENSION(2,2,2,3),
INTENT(IN):: VSTEN
487 DOUBLE PRECISION,
DIMENSION(3),
INTENT(IN):: DESPOS
488 DOUBLE PRECISION,
DIMENSION(3),
INTENT(OUT) :: VELFP
489 DOUBLE PRECISION,
DIMENSION(2,2,2),
INTENT(OUT) :: WEIGHTFACTOR
490 INTEGER :: II, JJ, KK
492 DOUBLE PRECISION,
DIMENSION(2) :: XXVAL, YYVAL, ZZVAL
493 DOUBLE PRECISION :: DXX, DYY, DZZ
494 DOUBLE PRECISION,
DIMENSION(3) :: ZETAA
497 dxx = gsten(2,1,1,1) - gsten(1,1,1,1)
498 dyy = gsten(1,2,1,2) - gsten(1,1,1,2)
500 zetaa(1:2) = despos(1:2) - gsten(1,1,1,1:2)
502 zetaa(1) = zetaa(1)/dxx
503 zetaa(2) = zetaa(2)/dyy
515 weightfactor(ii,jj,1) = xxval(ii)*yyval(jj)
516 velfp(1:2) = velfp(1:2) + vsten(ii,jj,1,1:2)*weightfactor
520 dzz = gsten(1,1,2,3) - gsten(1,1,1,3)
521 zetaa(3) = despos(3) - gsten(1,1,1,3)
522 zetaa(3) = zetaa(3)/dzz
528 weightfactor(ii,jj,kk) = xxval(ii)*yyval(jj)*zzval(kk)
529 velfp(1:3) = velfp(1:3) + vsten(ii,jj,kk,1:3)*weightfactor
integer, dimension(:), allocatable i_of
double precision, dimension(:), allocatable ep_g
double precision, parameter one
logical mppic_pdrag_implicit
subroutine des_drag_gp(NP, PARTICLE_VEL, FLUID_VEL, EPg)
subroutine des_addnodevalues()
subroutine, public set_interpolation_stencil(PC, IW, IE, JS, JN, KB, KTP, isch, dimprob, ordernew)
subroutine drag_interpolation(GSTEN, VSTEN, DESPOS, VELFP, WEIGHTFACTO
integer, dimension(:), allocatable k_of
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable v_g
double precision, dimension(:), allocatable w_g
subroutine, public set_interpolation_scheme(choice)
double precision, dimension(:), allocatable u_g
type(iap1), dimension(:), allocatable pic
double precision, dimension(:), allocatable des_stat_wt
double precision, parameter zero