14 SELECT CASE(des_interp_scheme_enum)
32 use discretelement
, only: max_pip, pijk
51 DOUBLE PRECISION :: WEIGHT
53 INTEGER :: IJK, NP, LC
59 lp_bnd = merge(27,9,
do_k)
65 IF(is_nonexistent(np) .OR. .NOT.fluid_at(pijk(np,4)))
THEN 71 ELSEIF(des_interp_on)
THEN 79 avgvel(1,np) = avgvel(1,np) +
u_s(ijk,
mmax+1)*weight
80 avgvel(2,np) = avgvel(2,np) +
v_s(ijk,
mmax+1)*weight
81 avgvel(3,np) = avgvel(3,np) +
w_s(ijk,
mmax+1)*weight
83 ps_grad(:,np) = ps_grad(:,np)+ps_force_pic(:,ijk)*weight
96 ps_grad(:,np) = ps_force_pic(:,ijk)
137 INTEGER I, J, K, IJK, IPJK, IJPK, IJKP, IDIM, M
140 DOUBLE PRECISION avg_factor, VOL_TOT_VEC(3), VOL_TOT_SCAL
142 integer :: korder, iw,ie,js,jn,kb,ktp, onew, pcell(3), cur_ijk, NP
144 integer :: ii,jj,kk, ipjpk, ijpkp, ipjkp, ipjpkp
146 double precision :: vol_ijk, vol_ipjk, vol_ijpk, vol_ipjpk
147 double precision :: vol_ijkp, vol_ipjkp, vol_ijpkp, vol_ipjpkp
152 korder = merge( 1, 2,
no_k)
156 avg_factor = merge(0.5d0, 0.25d0,
no_k)
160 if(.not.fluid_at(ijk) .or. pinc(ijk).eq.0) cycle
167 pcell(3) = merge(1, k-1,
no_k)
170 ktp,interp_scheme,merge(2,3,
no_k),ordernew = onew)
173 DO k = 1, merge(1, onew,
no_k)
181 cur_ijk = funijk_map_c(ii,jj,kk)
183 ipjk = funijk_map_c(ii+1,jj,kk)
184 ijpk = funijk_map_c(ii,jj+1,kk)
185 ipjpk = funijk_map_c(ii+1,jj+1,kk)
197 IF(fluid_at(cur_ijk)) vol_ijk =
vol(cur_ijk)
198 IF(fluid_at(ipjk)) vol_ipjk =
vol(ipjk)
199 IF(fluid_at(ijpk)) vol_ijpk =
vol(ijpk)
200 IF(fluid_at(ipjpk)) vol_ipjpk =
vol(ipjpk)
203 ijkp = funijk_map_c(ii,jj,kk+1)
204 ijpkp = funijk_map_c(ii,jj+1,kk+1)
205 ipjkp = funijk_map_c(ii+1,jj,kk+1)
206 ipjpkp = funijk_map_c(ii+1,jj+1,kk+1)
208 IF(fluid_at(ijkp)) vol_ijkp =
vol(ijkp)
209 IF(fluid_at(ipjkp)) vol_ipjkp =
vol(ipjkp)
210 IF(fluid_at(ijpkp)) vol_ijpkp =
vol(ijpkp)
211 IF(fluid_at(ipjpkp)) vol_ipjpkp =
vol(ipjpkp)
214 gstencil(i,j,k,1) = xe(ii)
215 gstencil(i,j,k,2) = yn(jj)
216 gstencil(i,j,k,3) = merge(dz(1), zt(kk),
no_k)
220 vol_tot_scal = vol_ijk + vol_ipjk + vol_ijpk + vol_ipjpk + &
221 vol_ijkp + vol_ipjkp + vol_ijpkp + vol_ipjpkp
225 vol_tot_vec(1) =
vol(cur_ijk) +
vol(ijpk)
226 vol_tot_vec(2) =
vol(cur_ijk) +
vol(ipjk)
229 vel_sol_stencil(i,j,k,1,m) = &
233 vel_sol_stencil(i,j,k,2,m) = &
238 sstencil(i,j,k) =
ep_g(cur_ijk)*vol_ijk + &
239 ep_g(ipjk)*vol_ipjk +
ep_g(ijpk)*vol_ijpk + &
240 ep_g(ipjpk)*vol_ipjpk
242 psgradstencil(i,j,k,1) = &
246 psgradstencil(i,j,k,2) = &
250 vstencil(i,j,k,1) = &
253 vstencil(i,j,k,2) = &
257 vol_tot_vec(1) = vol_tot_vec(1) +
vol(ijkp) +
vol(ijpkp)
258 vol_tot_vec(2) = vol_tot_vec(2) +
vol(ijkp) +
vol(ipjkp)
262 sstencil(i,j,k) = sstencil(i,j,k) + &
263 ep_g(ijkp)*vol_ijkp +
ep_g(ipjkp)*vol_ipjkp + &
264 ep_g(ijpkp)*vol_ijpkp +
ep_g(ipjpkp)*vol_ipjpkp
266 psgradstencil(i,j,k,1) = psgradstencil(i,j,k,1) + &
270 psgradstencil(i,j,k,2) = psgradstencil(i,j,k,2) + &
274 psgradstencil(i,j,k,3) = &
280 vstencil(i,j,k,1) = vstencil(i,j,k,1) + &
283 vstencil(i,j,k,2) = vstencil(i,j,k,2) + &
286 vstencil(i,j,k,3) =
w_g(cur_ijk)*
vol(cur_ijk)+&
291 vel_sol_stencil(i,j,k,1,m) = &
292 vel_sol_stencil(i,j,k,1,m) + &
296 vel_sol_stencil(i,j,k,2, m) = &
297 vel_sol_stencil(i,j,k,2,m) + &
301 vel_sol_stencil(i,j,k,3, m) = &
308 psgradstencil(i,j,k,3) = 0.d0
309 vel_sol_stencil(i,j,k,3,
mmax+1:des_mmax+
mmax) = 0.d0
310 vstencil(i,j,k,3) = 0.d0
316 DO idim = 1, merge(2,3,
no_k)
317 IF(vol_tot_vec(idim).GT.
zero)
THEN 318 psgradstencil(i,j,k,idim) = &
319 psgradstencil(i,j,k,idim)/vol_tot_vec(idim)
321 vel_sol_stencil(i,j,k,idim,
mmax+1:des_mmax+
mmax) = &
322 vel_sol_stencil(i,j,k,idim,
mmax+1:des_mmax+
mmax)/&
325 vstencil(i,j,k,idim) = &
326 vstencil(i,j,k,idim)/vol_tot_vec(idim)
331 IF(vol_tot_scal.GT.
zero) &
332 sstencil(i,j,k) = sstencil(i,j,k)/vol_tot_scal
341 do nindx = 1,pinc(ijk)
342 np =
pic(ijk)%p(nindx)
347 call interpolator(gstencil(1:onew,1:onew,1,1:dimn), &
348 psgradstencil(1:onew,1:onew,1,1:dimn), &
349 des_pos_new(np,1:dimn),
ps_grad(1:dimn,np), &
350 onew,interp_scheme,weightp)
352 call interpolator(gstencil(1:onew,1:onew,1:onew,1:dimn),
358 do idim = 1, merge(2,3,
no_k)
360 vel_sol_stencil(:,:,:,idim,m),weightp(:,:,:))
363 epg_p(np) = array_dot_product(sstencil(:,:,:),weightp(:,:,:)
double precision, dimension(:,:), allocatable v_s
integer, dimension(:), allocatable i_of
integer, dimension(:,:), allocatable filter_cell
double precision, dimension(:), allocatable ep_g
double precision, dimension(:,:), allocatable avgsolvel_p
double precision, dimension(:,:), allocatable ps_grad
integer, parameter des_interp_garg
double precision, dimension(:,:), allocatable w_s
subroutine interpolate_pic
subroutine, public set_interpolation_stencil(PC, IW, IE, JS, JN, KB, KTP, isch, dimprob, ordernew)
double precision, dimension(:,:), allocatable pic_v_s
double precision, dimension(:,:), allocatable u_s
integer, dimension(:), allocatable k_of
double precision, dimension(:,:), allocatable filter_weight
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable v_g
double precision, dimension(:), allocatable w_g
double precision, dimension(:,:), allocatable pic_w_s
integer des_interp_scheme_enum
subroutine interpolate_pic0
subroutine, public set_interpolation_scheme(choice)
double precision, dimension(:), allocatable epg_p
double precision, dimension(:), allocatable u_g
subroutine interpolate_pic1
double precision, dimension(:,:), allocatable pic_u_s
type(iap1), dimension(:), allocatable pic
double precision, dimension(:), allocatable vol
double precision, dimension(:,:), allocatable ps_force_pic
double precision, parameter zero