21 SUBROUTINE calc_xsi(DISCR, PHI, U, V, W, XSI_E, XSI_N, XSI_T, &
41 USE functions, only: east_of, west_of, north_of, south_of
66 INTEGER,
INTENT(IN) :: DISCR
78 INTEGER,
INTENT(IN) :: incr
83 INTEGER :: IJK, IJKC, IJKD, IJKU, I, J, K
85 DOUBLE PRECISION :: PHI_C
87 DOUBLE PRECISION :: dwf
89 DOUBLE PRECISION :: cf
91 DOUBLE PRECISION :: oDXc, oDXuc, oDYc, oDYuc, oDZc, oDZuc
96 call cxs(incr, discr, u, v, w, phi, xsi_e, xsi_n, xsi_t)
115 IF (u(ijk) >=
zero)
THEN 124 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
125 dwf = superbee(phi_c)
128 IF (v(ijk) >=
zero)
THEN 131 ijku = south_of(ijkc)
135 ijku = north_of(ijkc)
137 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
138 dwf = superbee(phi_c)
142 IF (w(ijk) >=
zero)
THEN 145 ijku = bottom_of(ijkc)
151 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
152 dwf = superbee(phi_c)
163 IF (u(ijk) >=
zero)
THEN 172 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
174 dwf = chi_smart(phi_c,
chi_e(ijk))
180 IF (v(ijk) >=
zero)
THEN 183 ijku = south_of(ijkc)
187 ijku = north_of(ijkc)
189 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
191 dwf = chi_smart(phi_c,
chi_n(ijk))
198 IF (w(ijk) >=
zero)
THEN 201 ijku = bottom_of(ijkc)
207 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
209 dwf = chi_smart(phi_c,
chi_t(ijk))
224 IF (u(ijk) >=
zero)
THEN 233 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
234 cf = abs(u(ijk))*
dt*odx_e(i)
235 dwf = ultra_quick(phi_c,cf)
239 IF (v(ijk) >=
zero)
THEN 242 ijku = south_of(ijkc)
246 ijku = north_of(ijkc)
248 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
249 cf = abs(v(ijk))*
dt*ody_n(j)
250 dwf = ultra_quick(phi_c,cf)
255 IF (w(ijk) >=
zero)
THEN 258 ijku = bottom_of(ijkc)
264 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
265 cf = abs(w(ijk))*
dt*
ox(i)*odz_t(k)
266 dwf = ultra_quick(phi_c,cf)
281 IF (u(ijk) >=
zero)
THEN 286 odxuc = odx_e(
im1(i))
292 odxuc = odx_e(
ip1(i))
294 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
295 cf = abs(u(ijk))*
dt*odx_e(i)
296 dwf = quickest(phi_c,cf,odxc,odxuc,odx_e(i))
300 IF (v(ijk) >=
zero)
THEN 303 ijku = south_of(ijkc)
305 odyuc = ody_n(
jm1(j))
309 ijku = north_of(ijkc)
311 odyuc = ody_n(
jp1(j))
313 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
314 cf = abs(v(ijk))*
dt*ody_n(j)
315 dwf = quickest(phi_c,cf,odyc,odyuc,ody_n(j))
320 IF (w(ijk) >=
zero)
THEN 323 ijku = bottom_of(ijkc)
325 odzuc = odz_t(
km1(k))
331 odzuc = odz_t(
kp1(k))
333 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
334 cf = abs(w(ijk))*
dt*
ox(i)*odz_t(k)
335 dwf = quickest(phi_c,cf,odzc,odzuc,odz_t(k))
346 IF (u(ijk) >=
zero)
THEN 355 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
357 dwf = chi_muscl(phi_c,
chi_e(ijk))
363 IF (v(ijk) >=
zero)
THEN 366 ijku = south_of(ijkc)
370 ijku = north_of(ijkc)
372 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
374 dwf = chi_muscl(phi_c,
chi_n(ijk))
381 IF (w(ijk) >=
zero)
THEN 384 ijku = bottom_of(ijkc)
390 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
392 dwf = chi_muscl(phi_c,
chi_t(ijk))
406 IF (u(ijk) >=
zero)
THEN 415 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
419 IF (v(ijk) >=
zero)
THEN 422 ijku = south_of(ijkc)
426 ijku = north_of(ijkc)
428 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
433 IF (w(ijk) >=
zero)
THEN 436 ijku = bottom_of(ijkc)
442 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
454 IF (u(ijk) >=
zero)
THEN 463 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
467 IF (v(ijk) >=
zero)
THEN 470 ijku = south_of(ijkc)
474 ijku = north_of(ijkc)
476 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
481 IF (w(ijk) >=
zero)
THEN 484 ijku = bottom_of(ijkc)
491 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
503 IF (u(ijk) >=
zero)
THEN 512 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
516 IF (v(ijk) >=
zero)
THEN 519 ijku = south_of(ijkc)
523 ijku = north_of(ijkc)
525 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
530 IF (w(ijk) >=
zero)
THEN 533 ijku = bottom_of(ijkc)
539 phi_c = phi_c_of(phi(ijku),phi(ijkc),phi(ijkd))
548 CALL init_err_msg(
"CALC_XSI")
549 WRITE(err_msg, 1100)
ival(discr)
550 1100
FORMAT(
'ERROR 1100: Invalid DISCRETIZE= ', a,
' The check_data ',&
551 'routines should',/,
'have already caught this error and ',&
552 'prevented the simulation from ',/,
'running. Please notify ',&
553 'the MFIX developers.')
578 SUBROUTINE cxs(INCR, DISCR, U, V, WW, PHI, XSI_E, XSI_N, XSI_T)
595 INTEGER,
INTENT(IN) :: incr
596 INTEGER,
INTENT(IN) :: DISCR
601 DOUBLE PRECISION,
INTENT(OUT) :: XSI_E(
dimension_3)
602 DOUBLE PRECISION,
INTENT(OUT) :: XSI_N(
dimension_3)
603 DOUBLE PRECISION,
INTENT(OUT) :: XSI_T(
dimension_3)
608 DOUBLE PRECISION :: SRT
609 DOUBLE PRECISION :: DWFE,DWFN,DWFT
610 DOUBLE PRECISION :: PHICU, PHIDU, PHIUU
611 DOUBLE PRECISION :: PHICV, PHIDV, PHIUV
612 DOUBLE PRECISION :: PHICW, PHIDW, PHIUW
613 INTEGER :: IJK, IJKC, IJKD, IJKU, I
616 IF (incr .eq. 2)
THEN 625 vv(ijk)=v(ijk)+
vsh(ijk)
627 IF (u(ijk) >=
zero)
THEN 632 phidu=phi(ijkd)+srt*1d0/
odx_e(i)
633 phiuu=phi(ijku)-srt*1d0/
odx_e(
im1(i))
638 phicu=phi(ijkc)+srt*1d0/
odx_e(i)
640 phiuu=phi(ijku)+srt*1d0/
odx_e(i)&
644 IF (vv(ijk) >=
zero)
THEN 661 IF (ww(ijk) >=
zero)
THEN 664 ijku = bottom_of(ijkc)
680 CALL dw(u(ijk), vv(ijk), ww(ijk), ijk, phicu, phidu, phiuu,
692 ELSEIF (incr .eq. 1)
THEN 699 vv(ijk)=v(ijk)+
vshe(ijk)
700 IF (u(ijk) >=
zero)
THEN 716 IF (vv(ijk) >=
zero)
THEN 733 IF (ww(ijk) >=
zero)
THEN 736 ijku = bottom_of(ijkc)
752 CALL dw(u(ijk), vv(ijk), ww(ijk), ijk, phicu, phidu, phiuu,
764 ELSEIF (incr .eq. 0)
THEN 771 vv(ijk)=v(ijk)+
vsh(ijk)
772 IF (u(ijk) >=
zero)
THEN 788 IF (vv(ijk) >=
zero)
THEN 805 IF (ww(ijk) >=
zero)
THEN 808 ijku = bottom_of(ijkc)
824 CALL dw(u(ijk), vv(ijk), ww(ijk), ijk, phicu, phidu, phiuu,
836 write(*,*)
'INCR ERROR' 853 SUBROUTINE dw(UU, VV, WW, IJK, PHICU, PHIDU, PHIUU, &
854 phicv, phidv, phiuv, &
855 phicw, phidw, phiuw, &
856 dwfe, dwfn, dwft, discr)
876 DOUBLE PRECISION,
INTENT(IN) :: UU, VV, WW
878 INTEGER,
INTENT(IN) :: IJK
880 DOUBLE PRECISION,
INTENT(IN) :: PHICU, PHIDU, PHIUU
881 DOUBLE PRECISION,
INTENT(IN) :: PHICV, PHIDV, PHIUV
882 DOUBLE PRECISION,
INTENT(IN) :: PHICW, PHIDW, PHIUW
884 DOUBLE PRECISION,
INTENT(OUT) :: DWFE, DWFN, DWFT
886 INTEGER,
INTENT(IN) :: DISCR
891 DOUBLE PRECISION :: PHI_C
893 DOUBLE PRECISION oDXc, oDXuc, oDYc, oDYuc, oDZc, oDZuc
894 DOUBLE PRECISION CF, DZUC
1000 phi_c =
phi_c_of(phiuv,phicv,phidv)
1003 phi_c =
phi_c_of(phiuw,phicw,phidw)
1009 phi_c =
phi_c_of(phiuu,phicu,phidu)
1011 phi_c =
phi_c_of(phiuv,phicv,phidv)
1014 phi_c =
phi_c_of(phiuw,phicw,phidw)
1020 WRITE (*,*)
'DISCRETIZE = ', discr,
' not supported.' 1039 DOUBLE PRECISION FUNCTION xsi_func(XXXv,XXXdwf)
1042 DOUBLE PRECISION,
INTENT(IN) :: XXXv, XXXdwf
1043 xsi_func = (sign(1d0,(-xxxv))+1d0)/(2d0) + &
1044 sign(1d0,xxxv)*xxxdwf
integer, dimension(:), allocatable ip1
integer, dimension(:), allocatable i_of
subroutine cxs(INCR, DISCR, U, V, WW, PHI, XSI_E, XSI_N, XSI_T)
double precision, dimension(:), allocatable ody
double precision, dimension(:), allocatable odx
integer, dimension(:), allocatable im1
double precision function chi_smart(PHI_C, Chi)
double precision function superbee(PHI_C)
subroutine calc_xsi(DISCR, PHI, U, V, W, XSI_E, XSI_N, XSI_T, incr)
double precision function quickest(PHI_C, CF, ODXC, ODXUC, ODXCD)
double precision function muscl(PHI_C)
double precision, dimension(:), allocatable vsh
double precision function phi_c_of(PHI_U, PHI_C, PHI_D)
subroutine dw(UU, VV, WW, IJK, PHICU, PHIDU, PHIUU, PHICV, PHIDV, PHIUV, PHICW, PHIDW, PHIUW, DWFE, DWFN, DWFT, DISCR)
subroutine init_err_msg(CALLER)
integer, dimension(:), allocatable k_of
double precision, dimension(:), allocatable ody_n
subroutine mfix_exit(myID, normal_termination)
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable odx_e
integer, dimension(:), allocatable jm1
double precision function ultra_quick(PHI_C, CF)
double precision, dimension(:), allocatable ox
integer, dimension(:), allocatable jp1
double precision function minmod(PHI_C)
double precision function vanleer(PHI_C)
double precision function central_scheme(PHI_C)
integer, dimension(:), allocatable kp1
double precision, dimension(:), allocatable chi_t
double precision, dimension(:), allocatable vshe
integer, dimension(:), allocatable km1
double precision, dimension(:), allocatable odz
double precision, dimension(:), allocatable chi_n
character(len=line_length), dimension(line_count) err_msg
double precision function smart(PHI_C)
double precision function chi_muscl(PHI_C, Chi)
double precision function xsi_func(XXXv, XXXdwf)
double precision, dimension(:), allocatable odz_t
double precision, dimension(:), allocatable chi_e
double precision, parameter zero
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)