36 INTEGER :: IJK, IMJK, IJMK, IJKM
44 IF (.NOT.wall_at(ijk))
THEN 57 ltrd_s(ijk,m) = (
x_e(i)*
u_s(ijk,m)-&
108 INTEGER,
INTENT(IN) :: IJK
110 INTEGER,
INTENT(IN) :: M
118 INTEGER :: IMJK, IJMK, IJKM
121 DOUBLE PRECISION :: DEL_H,Nx,Ny,Nz
122 DOUBLE PRECISION :: dudx,dvdy,dwdz
123 DOUBLE PRECISION :: Xi,Yi,Zi,Ui,Vi,Wi,Sx,Sy,Sz
124 DOUBLE PRECISION :: UW_s,VW_s,WW_s
126 LOGICAL :: U_NODE_AT_E, U_NODE_AT_W
127 LOGICAL :: V_NODE_AT_N, V_NODE_AT_S
128 LOGICAL :: W_NODE_AT_T, W_NODE_AT_B
141 IF(flow_at(ijk))
THEN 201 IF(u_node_at_e.AND.u_node_at_w)
THEN 209 CALL get_del_h(ijk,
'SCALAR',xi,yi,zi,del_h,nx,ny,nz)
211 dudx = (
u_s(ijk,m) -
u_s(imjk,m))/sx
212 IF(noc_trds) dudx = dudx - ((ui-uw_s)/(sx*del_h)*&
228 IF(v_node_at_n.AND.v_node_at_s)
THEN 236 CALL get_del_h(ijk,
'SCALAR',xi,yi,zi,del_h,nx,ny,nz)
238 dvdy = (
v_s(ijk,m) -
v_s(ijmk,m))/sy
239 IF(noc_trds) dvdy = dvdy - ((vi-vw_s)/(sy*del_h)*&
257 IF(w_node_at_t.AND.w_node_at_b)
THEN 265 CALL get_del_h(ijk,
'SCALAR',xi,yi,zi,del_h,nx,ny,nz)
267 dwdz = (
w_s(ijk,m) -
w_s(ijkm,m))/sz
268 IF(noc_trds) dwdz = dwdz - ((wi-ww_s)/(sz*del_h)*&
278 ltrd_s(ijk,m) = dudx + dvdy + dwdz
292 vse, vsw, vsn, vss, vst, vsb, &
293 wse, wsw, wsn, wss, wst, wsb, wscc
300 use functions, only: is_at_e, is_at_n, is_at_t
302 use fun_avg, only: avg_x, avg_x_e
303 use fun_avg, only: avg_y, avg_y_n
304 use fun_avg, only: avg_z, avg_z_t
318 INTEGER,
INTENT(IN) :: IJK
320 INTEGER,
INTENT(IN) :: M
322 DOUBLE PRECISION,
INTENT(OUT) :: Us_E, UsW
324 DOUBLE PRECISION,
INTENT(OUT) :: UsN, UsS
326 DOUBLE PRECISION,
INTENT(OUT) :: UsT, UsB
329 DOUBLE PRECISION,
INTENT(OUT) :: UscC
332 DOUBLE PRECISION,
INTENT(OUT) :: VsE, VsW
334 DOUBLE PRECISION,
INTENT(OUT) :: VsN, VsS
336 DOUBLE PRECISION,
INTENT(OUT) :: VsT, VsB
339 DOUBLE PRECISION,
INTENT(OUT) :: WsE, WsW
341 DOUBLE PRECISION,
INTENT(OUT) :: WsN, WsS
343 DOUBLE PRECISION,
INTENT(OUT) :: WsT, WsB
346 DOUBLE PRECISION,
INTENT(OUT) :: WscC
351 INTEGER :: I, J, K, IM, JM, KM
352 INTEGER :: IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
353 INTEGER :: IMJPK, IMJMK, IMJKP, IMJKM, IPJKM, IPJMK
354 INTEGER :: IJMKP, IJMKM, IJPKM
356 DOUBLE PRECISION :: SRT
381 usn = avg_y(avg_x_e(
u_s(imjk, m),
u_s(ijk, m), i),&
382 avg_x_e(
u_s(imjpk, m),
u_s(ijpk, m), i), j)
383 uss = avg_y(avg_x_e(
u_s(imjmk, m),
u_s(ijmk, m), i),&
384 avg_x_e(
u_s(imjk, m),
u_s(ijk, m), i), jm)
385 ust = avg_z(avg_x_e(
u_s(imjk, m),
u_s(ijk, m), i),&
386 avg_x_e(
u_s(imjkp, m),
u_s(ijkp, m), i), k)
387 usb = avg_z(avg_x_e(
u_s(imjkm, m),
u_s(ijkm, m), i),&
388 avg_x_e(
u_s(imjk, m),
u_s(ijk, m), i), km)
394 vse = avg_x(avg_y_n(
v_s(ijmk, m),
v_s(ijk, m)),&
395 avg_y_n((
v_s(ipjmk, m) -
vsh(ipjmk) + &
397 (
v_s(ipjk, m) -
vsh(ipjk) + &
399 vsw = avg_x(avg_y_n((
v_s(imjmk, m) -
vsh(imjmk) + &
401 (
v_s(imjk, m) -
vsh(imjk) + &
403 avg_y_n(
v_s(ijmk, m),
v_s(ijk, m)), im)
405 vse = avg_x(avg_y_n(
v_s(ijmk, m),
v_s(ijk, m)),&
406 avg_y_n(
v_s(ipjmk, m),
v_s(ipjk, m)), i )
407 vsw = avg_x(avg_y_n(
v_s(imjmk, m),
v_s(imjk, m)),&
408 avg_y_n(
v_s(ijmk, m),
v_s(ijk, m)), im )
410 vst = avg_z(avg_y_n(
v_s(ijmk, m),
v_s(ijk, m)),&
411 avg_y_n(
v_s(ijmkp, m),
v_s(ijkp, m)), k )
412 vsb = avg_z(avg_y_n(
v_s(ijmkm, m),
v_s(ijkm, m)),&
413 avg_y_n(
v_s(ijmk, m),
v_s(ijk, m)), km )
417 wsn = avg_y(avg_z_t(
w_s(ijkm, m),
w_s(ijk, m)),&
418 avg_z_t(
w_s(ijpkm, m),
w_s(ijpk, m)), j )
419 wss = avg_y(avg_z_t(
w_s(ijmkm, m),
w_s(ijmk, m)),&
420 avg_z_t(
w_s(ijkm, m),
w_s(ijk, m)), jm )
421 wse = avg_x(avg_z_t(
w_s(ijkm, m),
w_s(ijk, m)),&
422 avg_z_t(
w_s(ipjkm, m),
w_s(ipjk, m)), i)
423 wsw = avg_x(avg_z_t(
w_s(imjkm, m),
w_s(imjk, m)),&
424 avg_z_t(
w_s(ijkm, m),
w_s(ijk, m)), im )
429 uscc = avg_x_e(
u_s(imjk, m),
u_s(ijk, m), i)
430 wscc = avg_z_t(
w_s(ijkm, m),
w_s(ijk, m))
438 IF(is_at_n(ijk) .AND. .NOT.wall_at(ijpk)) &
439 usn = avg_x_e(
u_s(imjk, m),
u_s(ijk, m), i)
440 IF(is_at_n(ijmk) .AND. .NOT.wall_at(ijmk)) &
441 uss = avg_x_e(
u_s(imjk, m),
u_s(ijk, m), i)
442 IF(is_at_t(ijk) .AND. .NOT.wall_at(ijkp)) &
443 ust = avg_x_e(
u_s(imjk, m),
u_s(ijk, m), i)
444 IF(is_at_t(ijkm) .AND. .NOT.wall_at(ijkm)) &
445 usb = avg_x_e(
u_s(imjk, m),
u_s(ijk, m), i)
447 IF(is_at_e(ijk) .AND. .NOT.wall_at(ipjk)) &
448 vse = avg_y_n(
v_s(ijmk, m),
v_s(ijk, m))
449 IF(is_at_e(imjk) .AND. .NOT.wall_at(imjk)) &
450 vsw = avg_y_n(
v_s(ijmk, m),
v_s(ijk, m))
451 IF(is_at_t(ijk) .AND. .NOT.wall_at(ijkp)) &
452 vst = avg_y_n(
v_s(ijmk, m),
v_s(ijk, m))
453 IF(is_at_t(ijkm) .AND. .NOT.wall_at(ijkm)) &
454 vsb = avg_y_n(
v_s(ijmk, m),
v_s(ijk, m))
456 IF(is_at_n(ijk) .AND. .NOT.wall_at(ijpk)) &
457 wsn = avg_z_t(
w_s(ijkm, m),
w_s(ijk, m))
458 IF(is_at_n(ijmk) .AND. .NOT.wall_at(ijmk)) &
459 wss = avg_z_t(
w_s(ijkm, m),
w_s(ijk, m))
460 IF(is_at_e(ijk) .AND. .NOT.wall_at(ipjk)) &
461 wse = avg_z_t(
w_s(ijkm, m),
w_s(ijk, m))
462 IF(is_at_e(imjk) .AND. .NOT.wall_at(imjk)) &
463 wsw = avg_z_t(
w_s(ijkm, m),
w_s(ijk, m))
496 INTEGER,
INTENT(IN) :: IJK
498 INTEGER,
INTENT(IN) :: M
500 DOUBLE PRECISION,
INTENT(OUT) :: lVelGradS(3,3)
502 DOUBLE PRECISION,
INTENT(OUT) :: lRateStrainS(3,3)
509 DOUBLE PRECISION :: us_e, usw, usn, uss, ust, usb, uscc
510 DOUBLE PRECISION :: vse, vsw, vsn, vss, vst, vsb
511 DOUBLE PRECISION :: wse, wsw, wsn, wss, wst, wsb, wscc
521 us_e, usw, usn, uss, ust, usb, uscc, &
522 vse, vsw, vsn, vss, vst, vsb, &
523 wse, wsw, wsn, wss, wst, wsb, wscc)
526 lvelgrads(1,1) = (us_e-usw)*odx(i)
527 lvelgrads(1,2) = (usn-uss)*ody(j)
528 lvelgrads(1,3) = (ust-usb)*(
ox(i)*odz(k))-wscc*
ox(i)
530 lvelgrads(2,1) = (vse-vsw)*odx(i)
531 lvelgrads(2,2) = (vsn-vss)*ody(j)
532 lvelgrads(2,3) = (vst-vsb)*(
ox(i)*odz(k))
534 lvelgrads(3,1) = (wse-wsw)*odx(i)
535 lvelgrads(3,2) = (wsn-wss)*ody(j)
536 lvelgrads(3,3) = (wst-wsb)*(
ox(i)*odz(k)) + uscc*
ox(i)
541 lratestrains(1,1) = (us_e-usw)*odx(i)
542 lratestrains(1,2) =
half*((usn-uss)*ody(j)+&
544 lratestrains(1,3) =
half*((wse-wsw)*odx(i)+&
545 (ust-usb)*(
ox(i)*odz(k))-&
548 lratestrains(2,1) = lratestrains(1,2)
549 lratestrains(2,2) = (vsn-vss)*ody(j)
550 lratestrains(2,3) =
half*((vst-vsb)*(
ox(i)*odz(k))+&
553 lratestrains(3,1) = lratestrains(1,3)
554 lratestrains(3,2) = lratestrains(2,3)
555 lratestrains(3,3) = (wst-wsb)*(
ox(i)*odz(k)) +&
597 INTEGER,
INTENT(IN) :: IJK
599 INTEGER,
INTENT(IN) :: M
604 DOUBLE PRECISION,
INTENT(OUT) :: lVelGradS(3,3)
606 DOUBLE PRECISION,
INTENT(OUT) :: lRateStrainS(3,3)
611 INTEGER :: I, J, K, IMJK, IJMK, IJKM
615 DOUBLE PRECISION :: DEL_H,Nx,Ny,Nz
616 DOUBLE PRECISION :: dudx,dudy,dudz
617 DOUBLE PRECISION :: dvdx,dvdy,dvdz
618 DOUBLE PRECISION :: dwdx,dwdy,dwdz
619 DOUBLE PRECISION :: Xi,Yi,Zi,Ui,Vi,Wi,Sx,Sy,Sz
620 DOUBLE PRECISION :: UW_s,VW_s,WW_s
622 LOGICAL :: U_NODE_AT_E, U_NODE_AT_W
623 LOGICAL :: V_NODE_AT_N, V_NODE_AT_S
624 LOGICAL :: W_NODE_AT_T, W_NODE_AT_B
643 IF(flow_at(ijk))
THEN 705 IF(u_node_at_e.AND.u_node_at_w)
THEN 713 CALL get_del_h(ijk,
'SCALAR',xi,yi,zi,del_h,nx,ny,nz)
714 IF(abs(sx) >
zero)
THEN 715 dudx = (
u_s(ijk,m) -
u_s(imjk,m))/sx
719 dudx = dudx - ((ui-uw_s)/(sx*del_h)*(sy*ny+sz*nz))
720 dudy = (ui-uw_s) / del_h * ny
721 dudz = (ui-uw_s) / del_h * nz
728 ELSEIF (u_node_at_e.AND.(.NOT.u_node_at_w).AND.noc_trds)
THEN 731 dudx = (
u_s(ijk,m) - uw_s) / del_h * nx
732 dudy = (
u_s(ijk,m) - uw_s) / del_h * ny
733 dudz = (
u_s(ijk,m) - uw_s) / del_h * nz
734 ELSEIF ((.NOT.u_node_at_e).AND.u_node_at_w.AND.noc_trds)
THEN 737 dudx = (
u_s(imjk,m) - uw_s) / del_h * nx
738 dudy = (
u_s(imjk,m) - uw_s) / del_h * ny
739 dudz = (
u_s(imjk,m) - uw_s) / del_h * nz
745 lvelgrads(1,1) = dudx
746 lvelgrads(1,2) = dudy
747 lvelgrads(1,3) = dudz
756 IF(v_node_at_n.AND.v_node_at_s)
THEN 764 CALL get_del_h(ijk,
'SCALAR',xi,yi,zi,del_h,nx,ny,nz)
765 IF(abs(sy) >
zero)
THEN 767 dvdy = (
v_s(ijk,m) -
v_s(ijmk,m))/sy
770 dvdx = (vi-vw_s) / del_h * nx
771 dvdy = dvdy - ((vi-vw_s)/(sy*del_h)*(sx*nx+sz*nz))
772 dvdz = (vi-vw_s) / del_h * nz
779 ELSEIF (v_node_at_n.AND.(.NOT.v_node_at_s).AND.noc_trds)
THEN 782 dvdx = (
v_s(ijk,m) - vw_s) / del_h * nx
783 dvdy = (
v_s(ijk,m) - vw_s) / del_h * ny
784 dvdz = (
v_s(ijk,m) - vw_s) / del_h * nz
785 ELSEIF ((.NOT.v_node_at_n).AND.v_node_at_s.AND.noc_trds)
THEN 788 dvdx = (
v_s(ijmk,m) - vw_s) / del_h * nx
789 dvdy = (
v_s(ijmk,m) - vw_s) / del_h * ny
790 dvdz = (
v_s(ijmk,m) - vw_s) / del_h * nz
796 lvelgrads(2,1) = dvdx
797 lvelgrads(2,2) = dvdy
798 lvelgrads(2,3) = dvdz
812 IF(w_node_at_t.AND.w_node_at_b)
THEN 820 CALL get_del_h(ijk,
'SCALAR',xi,yi,zi,del_h,nx,ny,nz)
821 IF(abs(sz) >
zero)
THEN 824 dwdz = (
w_s(ijk,m) -
w_s(ijkm,m))/sz
826 dwdx = (wi-ww_s) / del_h * nx
827 dwdy = (wi-ww_s) / del_h * ny
828 dwdz = dwdz - ((wi-ww_s)/(sz*del_h)*(sx*nx+sy*ny))
835 ELSEIF (w_node_at_t.AND.(.NOT.w_node_at_b).AND.noc_trds)
THEN 838 dwdx = (
w_s(ijk,m) - ww_s) / del_h * nx
839 dwdy = (
w_s(ijk,m) - ww_s) / del_h * ny
840 dwdz = (
w_s(ijk,m) - ww_s) / del_h * nz
841 ELSEIF ((.NOT.w_node_at_t).AND.w_node_at_b.AND.noc_trds)
THEN 844 dwdx = (
w_s(ijkm,m) - ww_s) / del_h * nx
845 dwdy = (
w_s(ijkm,m) - ww_s) / del_h * ny
846 dwdz = (
w_s(ijkm,m) - ww_s) / del_h * nz
853 lvelgrads(3,1) = dwdx
854 lvelgrads(3,2) = dwdy
855 lvelgrads(3,3) = dwdz
859 lratestrains(p,q) =
half * (lvelgrads(p,q)+lvelgrads(q,p))
subroutine calc_deriv_vel_solids(IJK, M, lVelGradS, lRateStrainS)
double precision, dimension(dimension_bc, dim_m) bc_ww_s
double precision, dimension(:,:), allocatable v_s
double precision, dimension(:), allocatable y_v
double precision, dimension(:), allocatable z_u
integer, dimension(:), allocatable i_of
logical, dimension(:), allocatable wall_u_at
double precision, dimension(dimension_bc, dim_m) bc_uw_s
double precision, dimension(:), allocatable ody
double precision, dimension(:), allocatable odx
double precision, parameter one
double precision, dimension(:,:), allocatable w_s
double precision, dimension(:), allocatable x_e
double precision, dimension(:), allocatable x_u
integer, dimension(:), allocatable im1
logical, dimension(:), allocatable wall_v_at
integer, dimension(dimension_bc) bc_type_enum
double precision, parameter undefined
double precision, dimension(:), allocatable y_w
double precision, dimension(:), allocatable z_v
double precision, dimension(:,:), allocatable u_s
double precision, dimension(:), allocatable vsh
integer, dimension(:), allocatable k_of
logical, dimension(:), allocatable blocked_w_cell_at
double precision, dimension(:), allocatable x_w
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable odx_e
integer, dimension(:), allocatable jm1
subroutine calc_cg_trd_s(IJK, M, ltrD_s)
logical, dimension(:), allocatable wall_w_at
subroutine calc_cg_deriv_vel_solids(IJK, M, lVelGradS, lRateStrain
double precision, dimension(:), allocatable ox
subroutine calc_trd_s(lTRD_S)
logical, dimension(:), allocatable blocked_u_cell_at
double precision, dimension(dimension_bc, dim_m) bc_hw_s
double precision, dimension(:), allocatable x_v
double precision, parameter half
logical, dimension(:), allocatable cut_cell_at
integer, dimension(:), allocatable km1
double precision, dimension(:), allocatable odz
integer, dimension(:), allocatable bc_id
subroutine get_face_vel_solids(IJK, M, us_e, usw, usn, uss, ust, u
integer, dimension(dimension_bc) bc_jj_ps
logical, dimension(:), allocatable blocked_v_cell_at
subroutine get_del_h(IJK, TYPE_OF_CELL, X0, Y0, Z0, Del_H, Nx, Ny, Nz)
double precision, dimension(:), allocatable z_w
double precision, dimension(dimension_bc, dim_m) bc_vw_s
double precision, dimension(:), allocatable y_u
double precision, parameter zero