22 flux_e, flux_n, flux_t, m, a_m, b_m)
38 INTEGER,
INTENT(IN) :: Disc
48 INTEGER,
INTENT(IN) :: M
58 flux_e, flux_n, flux_t, m, a_m)
60 flux_e, flux_n, flux_t, m, b_m)
66 flux_e, flux_n, flux_t, m, a_m)
69 flux_e, flux_n, flux_t, m, a_m)
95 USE functions, only: east_of, north_of, top_of
96 USE functions, only: west_of, south_of, bottom_of
100 USE fun_avg, only: avg_x_h, avg_y_h, avg_z_h
120 DOUBLE PRECISION,
INTENT(OUT) :: d_fe, d_fw
121 DOUBLE PRECISION,
INTENT(OUT) :: d_fn, d_fs
122 DOUBLE PRECISION,
INTENT(OUT) :: d_ft, d_fb
124 INTEGER,
INTENT(IN) :: ijk
129 INTEGER :: imjk, ijmk, ijkm
130 INTEGER :: ipjk, ijpk, ijkp
131 INTEGER :: i, j, k, im, jm, km
132 INTEGER :: ijke, ijkw, ijkn, ijks, ijkt, ijkb
135 DOUBLE PRECISION :: C_AE, C_AW, C_AN, C_AS, C_AT, C_AB
155 c_ae = odx_e(i)*
ayz(ijk)
156 c_aw = odx_e(im)*
ayz(imjk)
157 c_an = ody_n(j)*
axz(ijk)
158 c_as = ody_n(jm)*
axz(ijmk)
159 c_at = ox(i)*odz_t(k)*
axy(ijk)
160 c_ab = ox(i)*odz_t(km)*
axy(ijkm)
167 IF (.NOT.fluid_at(ipjk)) c_ae = odx_e(i)*dy(j)*dz(k)
168 IF (.NOT.fluid_at(imjk)) c_aw = odx_e(im)*dy(j)*dz(k)
169 IF (.NOT.fluid_at(ijpk)) c_an = ody_n(j)*dx(i)*dz(k)
170 IF (.NOT.fluid_at(ijmk)) c_as = ody_n(jm)*dx(i)*dz(k)
171 IF (.NOT.fluid_at(ijkp)) c_at = ox(i)*odz_t(k)*dx(i)*dy(j)
172 IF (.NOT.fluid_at(ijkm)) c_ab = ox(i)*odz_t(km)*dx(i)*dy(j)
176 d_fe = avg_x_h(dif(ijk),dif(ijke),i)*c_ae
179 d_fw = avg_x_h(dif(ijkw),dif(ijk),im)*c_aw
182 d_fn = avg_y_h(dif(ijk),dif(ijkn),j)*c_an
185 d_fs = avg_y_h(dif(ijks),dif(ijk),jm)*c_as
189 ijkb = bottom_of(ijk)
192 d_ft = avg_z_h(dif(ijk),dif(ijkt),k)*c_at
194 d_fb = avg_z_h(dif(ijkb),dif(ijk),km)*c_ab
215 flux_e, flux_n, flux_t, m, a_m)
240 DOUBLE PRECISION,
INTENT(IN) :: Flux_E(
dimension_3)
241 DOUBLE PRECISION,
INTENT(IN) :: Flux_N(
dimension_3)
242 DOUBLE PRECISION,
INTENT(IN) :: Flux_T(
dimension_3)
244 INTEGER,
INTENT(IN) :: M
252 INTEGER :: IPJK, IJPK, IJKP
253 INTEGER :: IMJK, IJMK, IJKM
255 DOUBLE PRECISION :: D_fe, d_fw, d_fn, d_fs, d_ft, d_fb
264 IF (fluid_at(ijk))
THEN 276 IF (uf(ijk) >=
zero)
THEN 277 a_m(ijk,
east,m) = d_fe
278 a_m(ipjk,
west,m) = d_fe + flux_e(ijk)
280 a_m(ijk,
east,m) = d_fe - flux_e(ijk)
281 a_m(ipjk,
west,m) = d_fe
284 IF (.NOT.fluid_at(imjk))
THEN 285 IF (uf(imjk) >=
zero)
THEN 286 a_m(ijk,
west,m) = d_fw + flux_e(imjk)
288 a_m(ijk,
west,m) = d_fw
294 IF (vf(ijk) >=
zero)
THEN 295 a_m(ijk,
north,m) = d_fn
296 a_m(ijpk,
south,m) = d_fn + flux_n(ijk)
298 a_m(ijk,
north,m) = d_fn - flux_n(ijk)
299 a_m(ijpk,
south,m) = d_fn
302 IF (.NOT.fluid_at(ijmk))
THEN 303 IF (vf(ijmk) >=
zero)
THEN 304 a_m(ijk,
south,m) = d_fs + flux_n(ijmk)
306 a_m(ijk,
south,m) = d_fs
316 IF (wf(ijk) >=
zero)
THEN 317 a_m(ijk,
top,m) = d_ft
318 a_m(ijkp,
bottom,m) = d_ft + flux_t(ijk)
320 a_m(ijk,
top,m) = d_ft - flux_t(ijk)
326 IF (.NOT.fluid_at(ijkm))
THEN 327 IF (wf(ijkm) >=
zero)
THEN 328 a_m(ijk,
bottom,m) = d_fb + flux_t(ijkm)
356 flux_e, flux_n, flux_t, m, b_m)
387 INTEGER,
INTENT(IN) :: Disc
393 DOUBLE PRECISION,
INTENT(IN) :: Flux_E(
dimension_3)
394 DOUBLE PRECISION,
INTENT(IN) :: Flux_N(
dimension_3)
395 DOUBLE PRECISION,
INTENT(IN) :: Flux_T(
dimension_3)
397 INTEGER,
INTENT(IN) :: M
404 INTEGER :: I, J, K, IJK
405 INTEGER :: IPJK, IJPK, IJKP, IMJK, IJMK, IJKM
406 INTEGER :: IJK4, IPPP, IPPP4, JPPP, JPPP4, KPPP, KPPP4
407 INTEGER :: IMMM, IMMM4, JMMM, JMMM4, KMMM, KMMM4
411 DOUBLE PRECISION :: PHI_HO
413 DOUBLE PRECISION :: PHI_LO
415 DOUBLE PRECISION :: EAST_DC
416 DOUBLE PRECISION :: WEST_DC
417 DOUBLE PRECISION :: NORTH_DC
418 DOUBLE PRECISION :: SOUTH_DC
419 DOUBLE PRECISION :: TOP_DC
420 DOUBLE PRECISION :: BOTTOM_DC
421 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: TMP4
423 DOUBLE PRECISION,
DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
436 tmp4(ijk4) = phi(ijk)
443 CALL calc_xsi (disc, phi, uf, vf, wf, xsi_e, xsi_n, xsi_t, incr)
452 IF (fluid_at(ijk))
THEN 462 ippp = ip_of(ip_of(ipjk))
464 immm = im_of(im_of(imjk))
466 jppp = jp_of(jp_of(ijpk))
468 jmmm = jm_of(jm_of(ijmk))
470 kppp = kp_of(kp_of(ijkp))
472 kmmm = km_of(km_of(ijkm))
477 IF(uf(ijk)>=
zero)
THEN 480 phi(imjk), phi(im_of(imjk)))
484 phi(ip_of(ipjk)), tmp4(ippp4))
486 IF (.NOT.
fpfoi) phi_ho = xsi_e(ijk)*phi(ipjk)+&
487 (1.0-xsi_e(ijk))*phi(ijk)
488 east_dc = flux_e(ijk)*(phi_lo - phi_ho)
492 IF(vf(ijk) >=
zero)
THEN 495 phi(ijmk), phi(jm_of(ijmk)))
499 phi(jp_of(ijpk)), tmp4(jppp4))
501 IF (.NOT.
fpfoi) phi_ho = xsi_n(ijk)*phi(ijpk)+&
502 (1.0-xsi_n(ijk))*phi(ijk)
503 north_dc = flux_n(ijk)*(phi_lo - phi_ho)
509 IF(wf(ijk) >=
zero)
THEN 512 phi(ijkm), phi(km_of(ijkm)))
516 phi(kp_of(ijkp)), tmp4(kppp4))
518 IF (.NOT.
fpfoi) phi_ho = xsi_t(ijk)*phi(ijkp)+&
519 (1.0-xsi_t(ijk))*phi(ijk)
520 top_dc = flux_t(ijk)*(phi_lo - phi_ho)
528 IF(uf(imjk) >=
zero)
THEN 531 phi(im_of(imjk)), tmp4(immm4))
535 phi(ipjk), phi(ip_of(ipjk)))
537 IF (.NOT.
fpfoi) phi_ho = xsi_e(imjk)*phi(ijk)+&
538 (
one-xsi_e(imjk))*phi(imjk)
539 west_dc = flux_e(imjk)*(phi_lo - phi_ho)
544 IF(vf(ijmk) >=
zero)
THEN 547 phi(jm_of(ijmk)), tmp4(jmmm4))
551 phi(ijpk), phi(jp_of(ijpk)))
553 IF (.NOT.
fpfoi) phi_ho = xsi_n(ijmk)*phi(ijk)+&
554 (
one-xsi_n(ijmk))*phi(ijmk)
555 south_dc = flux_n(ijmk)*(phi_lo - phi_ho)
561 IF(wf(ijkm) >=
zero)
THEN 564 phi(km_of(ijkm)), tmp4(kmmm4))
568 phi(ijkp), phi(kp_of(ijkp)))
570 IF (.NOT.
fpfoi) phi_ho = xsi_t(ijkm)*phi(ijk)+&
571 (1.0-xsi_t(ijkm))*phi(ijkm)
572 bottom_dc = flux_t(ijkm)*(phi_lo - phi_ho)
579 b_m(ijk,m) = b_m(ijk,m)+west_dc-east_dc+south_dc-&
580 north_dc+bottom_dc-top_dc
604 flux_e, flux_n, flux_t, m, a_m)
626 INTEGER,
INTENT(IN) :: Disc
632 DOUBLE PRECISION,
INTENT(IN) :: Flux_E(
dimension_3)
633 DOUBLE PRECISION,
INTENT(IN) :: Flux_N(
dimension_3)
634 DOUBLE PRECISION,
INTENT(IN) :: Flux_T(
dimension_3)
636 INTEGER,
INTENT(IN) :: M
644 INTEGER :: IPJK, IJPK, IJKP
645 INTEGER :: IMJK, IJMK, IJKM
649 DOUBLE PRECISION :: D_fe, d_fw, d_fn, d_fs, d_ft, d_fb
651 DOUBLE PRECISION,
DIMENSION(DIMENSION_3) :: XSI_e, XSI_n, XSI_t
657 CALL calc_xsi (disc, phi, uf, vf, wf, xsi_e, xsi_n, xsi_t, incr)
664 IF (fluid_at(ijk))
THEN 675 a_m(ijk,
east,m) = d_fe - xsi_e(ijk)*flux_e(ijk)
676 a_m(ipjk,
west,m) = d_fe + (
one - xsi_e(ijk))*flux_e(ijk)
678 IF (.NOT.fluid_at(imjk))
THEN 679 a_m(ijk,
west,m) = d_fw + (
one - xsi_e(imjk))*flux_e(imjk)
684 a_m(ijk,
north,m) = d_fn - xsi_n(ijk)*flux_n(ijk)
685 a_m(ijpk,
south,m) = d_fn + (
one - xsi_n(ijk))*flux_n(ijk)
687 IF (.NOT.fluid_at(ijmk))
THEN 688 a_m(ijk,
south,m) = d_fs + (
one - xsi_n(ijmk))*flux_n(ijmk
696 a_m(ijk,
top,m) = d_ft - xsi_t(ijk)*flux_t(ijk)
697 a_m(ijkp,
bottom,m)=d_ft + (
one-xsi_t(ijk))*flux_t(ijk)
699 IF (.NOT.fluid_at(ijkm))
THEN 700 a_m(ijk,
bottom,m) = d_fb + (
one - xsi_t(ijkm))*flux_t(ijkm
734 USE fun_avg, only: avg_x_h, avg_y_h, avg_z_h
736 USE functions, only: funijk, ip_of, jp_of, kp_of
737 USE functions, only: east_of, north_of, top_of
751 INTEGER,
INTENT(IN) :: M
758 INTEGER :: I1, I2, J1, J2, K1, K2
759 INTEGER :: I, J, K, IJK
760 INTEGER :: IJKE, IJKN, IJKT, IPJK, IJPK, IJKP
762 DOUBLE PRECISION :: D_f
767 IF (is_defined(l))
THEN 776 IF(i1.LE.
iend2) i1 = max(i1, istart2)
777 IF(j1.LE.
jend2) j1 = max(j1, jstart2)
778 IF(k1.LE.
kend2) k1 = max(k1, kstart2)
779 IF(i2.GE.istart2) i2 = min(i2,
iend2)
780 IF(j2.GE.jstart2) j2 = min(j2,
jend2)
781 IF(k2.GE.kstart2) k2 = min(k2,
kend2)
783 IF (is_plane(l) ==
'E')
THEN 787 IF (dead_cell_at(i,j,k)) cycle
792 d_f = avg_x_h(dif(ijk),dif(ijke),i)*odx_e(i)*
ayz(ijk)
793 a_m(ijk,
east,m) = a_m(ijk,
east,m) - d_f
794 a_m(ipjk,
west,m) = a_m(ipjk,
west,m) - d_f
799 ELSEIF(is_plane(l) ==
'N')
THEN 803 IF (dead_cell_at(i,j,k)) cycle
808 d_f = avg_y_h(dif(ijk),dif(ijkn),j)*ody_n(j)*
axz(ijk)
815 ELSEIF(is_plane(l) ==
'T')
THEN 823 d_f = avg_z_h(dif(ijk),dif(ijkt),k)*&
824 ox(i)*odz_t(k)*
axy(ijk)
825 a_m(ijk,
top,m) = a_m(ijk,
top,m) - d_f
integer, dimension(:), allocatable i_of
subroutine conv_dif_phi1(PHI, DIF, DISC, UF, VF, WF, Flux_E, Flux_N, Flux_T, M, A_M)
integer, parameter dimension_is
double precision, parameter one
double precision, dimension(:), allocatable axy
integer, dimension(dimension_is) is_i_w
integer, dimension(:), allocatable im1
double precision, dimension(0:dim_j) dy
subroutine calc_xsi(DISCR, PHI, U, V, W, XSI_E, XSI_N, XSI_T, incr)
subroutine conv_dif_phi0(PHI, DIF, UF, VF, WF, Flux_E, Flux_N, Flux_T, M, A_M)
double precision, dimension(0:dim_k) dz
double precision, dimension(:), allocatable ayz
character, dimension(dimension_is) is_plane
subroutine dif_phi_is(DIF, A_M, M)
subroutine conv_dif_phi_dc(PHI, DISC, UF, VF, WF, Flux_E, Flux_N, Flux_T, M, B_M)
integer, dimension(:), allocatable k_of
double precision function fpfoi_of(PHI_D, PHI_C, PHI_U, PHI_UU)
double precision, dimension(:), allocatable ody_n
logical, dimension(:,:,:), allocatable dead_cell_at
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable odx_e
integer, dimension(:), allocatable jm1
integer, dimension(dimension_is) is_k_b
double precision, dimension(:), allocatable ox
double precision, dimension(0:dim_i) dx
logical, dimension(:), allocatable cut_treatment_at
double precision, dimension(:), allocatable axz
logical, dimension(dimension_is) is_defined
integer, dimension(dimension_is) is_j_s
logical, dimension(:), allocatable cut_cell_at
integer, dimension(:), allocatable km1
subroutine conv_dif_phi(PHI, DIF, DISC, UF, VF, WF, Flux_E, Flux_N, Flux_T, M, A_M, B_M)
subroutine get_phicell_diff_terms(Dif, D_FE, D_FW, D_FN, D_FS, D_FT, D_FB, IJK)
integer, dimension(dimension_is) is_j_n
integer, dimension(dimension_is) is_i_e
double precision, dimension(:), allocatable odz_t
integer function funijk3(LI3, LJ3, LK3)
double precision, parameter zero
integer, dimension(dimension_is) is_k_t