45 INTEGER :: IJK, I, J, K
47 INTEGER :: IJKE, IJKN, IJKT
51 DOUBLE PRECISION NjC, NjE, NjN, NjT
54 DOUBLE PRECISION :: Mi, Mj
56 DOUBLE PRECISION :: Ni
58 DOUBLE PRECISION :: ropsE, ropsN, ropsT, ThetaE, ThetaN, ThetaT
59 DOUBLE PRECISION :: EPSA
61 DOUBLE PRECISION :: DiTE, DiTN, DiTT
62 DOUBLE PRECISION :: DijE, DijN, DijT
63 DOUBLE PRECISION :: DijFE, DijFN, DijFT
65 DOUBLE PRECISION :: ordinDiffTermX, ordinDiffTermY, ordinDiffTermZ
66 DOUBLE PRECISION :: massMobilityTermX, massMobilityTermY, &
68 DOUBLE PRECISION :: massMobilityTermXvelupdate, &
69 massMobilityTermYvelupdate, &
70 massMobilityTermZvelupdate
71 DOUBLE PRECISION :: thermalDiffTermX, thermalDiffTermY, &
73 DOUBLE PRECISION :: ropsme, ropsmn, ropsmt
75 DOUBLE PRECISION :: addtermx, &
77 DOUBLE PRECISION :: massMobilityTermNoDragX, &
78 massMobilityTermNoDragY, &
79 massMobilityTermNoDragZ
80 DOUBLE PRECISION :: DiTE_H, DiTE_A, DiTN_H, DiTN_A, DiTT_H, DiTT_A
81 DOUBLE PRECISION :: DijE_H, DijE_A, DijN_H, DijN_A, DijT_H, DijT_A
82 DOUBLE PRECISION :: DijFE_H, DijFE_A, DijFN_H, DijFN_A, DijFT_H, DijFT_A
93 IF ( fluid_at(ijk) )
THEN 94 mi = (
pi/6.d0)*
d_p(ijk,m)**3 *
ro_s(ijk,m)
95 ni =
rop_s(ijk,m) / mi
128 IF(min(abs(dite_h),abs(dite_a)) .eq. abs(dite_h))
THEN 136 IF(min(abs(ditn_h),abs(ditn_a)) .eq. abs(ditn_h))
THEN 144 IF(min(abs(ditt_h),abs(ditt_a)) .eq. abs(ditt_h))
THEN 172 ordindifftermx =
zero 173 ordindifftermy =
zero 174 ordindifftermz =
zero 175 massmobilitytermx =
zero 176 massmobilitytermy =
zero 177 massmobilitytermz =
zero 178 massmobilitytermxvelupdate =
zero 179 massmobilitytermyvelupdate =
zero 180 massmobilitytermzvelupdate =
zero 184 massmobilitytermnodragx =
zero 185 massmobilitytermnodragy =
zero 186 massmobilitytermnodragz =
zero 189 mj = (
pi/6.d0)*
d_p(ijk,l)**3 *
ro_s(ijk,l)
191 njc =
rop_s(ijk,l) / mj
192 nje =
rop_s(ijke,l) / mj
193 njn =
rop_s(ijkn,l) / mj
194 njt =
rop_s(ijkt,l) / mj
204 IF(min(abs(dije_h),abs(dije_a)) .eq. abs(dije_h))
THEN 229 IF(min(abs(dijn_h),abs(dijn_a)) .eq. abs(dijn_h))
THEN 254 IF(min(abs(dijt_h),abs(dijt_a)) .eq. abs(dijt_h))
THEN 273 dijfe_h = avg_x_s(
dijf(ijk,m,l),
dijf(ijke,m,l),i)
274 dijfe_a = avg_x(
dijf(ijk,m,l),
dijf(ijke,m,l),i)
275 dijfn_h = avg_y_s(
dijf(ijk,m,l),
dijf(ijkn,m,l),j)
276 dijfn_a = avg_y(
dijf(ijk,m,l),
dijf(ijkn,m,l),j)
277 dijft_h = avg_z_s(
dijf(ijk,m,l),
dijf(ijkt,m,l),k)
278 dijft_a = avg_z(
dijf(ijk,m,l),
dijf(ijkt,m,l),k)
281 IF(min(abs(dijfe_h),abs(dijfe_a)) .eq. abs(dijfe_h))
THEN 289 IF(min(abs(dijfn_h),abs(dijfn_a)) .eq. abs(dijfn_h))
THEN 297 IF(min(abs(dijft_h),abs(dijft_a)) .eq. abs(dijft_h))
THEN 324 ordindifftermx = ordindifftermx + dije * (nje - njc) *
odx_e 374 IF (ip_at_e(ijk))
joix(ijk,m) =
zero 375 IF (ip_at_n(ijk))
joiy(ijk,m) =
zero 376 IF (ip_at_t(ijk))
joiz(ijk,m) =
zero 435 INTEGER :: IJK, I, J, K
437 INTEGER :: IJKE, IJKN, IJKT, IJKW, IJKS, IJKB, IMJK, IJMK, &
442 integer :: kk, maxFluxS
443 double precision :: epgN, rogN, mugN, Vg
444 double precision :: Ur(
smax), vrelSq(
smax), vel, velup(
smax)
445 double precision :: maxFlux
446 double precision :: rosN(
smax), dp(
smax)
449 double precision :: beta_cell(
smax), beta_ij_cell(
smax,
smax)
452 double precision tolx, tolf
467 IF ( fluid_at(ijk) )
THEN 474 ijkb = bottom_of(ijk)
481 IF(.NOT.ip_at_e(ijk) .OR. .NOT.sip_at_e(ijk))
THEN 493 epgn = avg_x(
ep_g(ijk),
ep_g(ijke),i)
495 mugn = avg_x(
mu_g(ijk),
mu_g(ijke),i)
498 ur(ss) =
u_g(ijk)-
u_s(ijk,ss)
500 vrelsq(ss) = (
v_g(ijk)-
v_s(ijk,ss))**2 + (
w_g(ijk)-
w_s(ijk
506 IF(drag_type_enum .eq. hys)
THEN 513 dijn_h(ss,kk) = avg_x_s(
dijf(ijk,ss,kk),
dijf(ijke,ss,kk
516 dijn(ss,kk) = dijn_h(ss,kk)
518 dijn(ss,kk) = dijn_a(ss,kk)
521 beta_ij_cell(ss,kk)=0.d0
528 IF(drag_type_enum .eq. hys)
THEN 531 joim, beta_cell, beta_ij_cell,vel)
533 CALL urnewt(ntrial, ur,
smax, ijk, tolx, tolf, &
534 epgn, rogn, mugn, vg, vrelsq, rosn, dp, dijn, joim)
539 IF(drag_type_enum .eq. hys)
THEN 540 u_s(ijk,ss)=velup(ss)
543 u_s(ijk,ss) =
u_g(ijk) - ur(ss)
552 elseif(
smax > 2)
then 553 maxflux =
joix(ijk,1)
556 if( abs(
joix(ijk,ss)) > abs(maxflux) )
then 557 maxflux =
joix(ijk,ss)
561 joix(ijk,maxfluxs) = 0d0
563 if(ss /= maxfluxs)
joix(ijk,maxfluxs) =
joix(ijk,maxfluxs)
573 IF (.NOT.ip_at_n(ijk) .OR. .NOT.sip_at_n(ijk))
THEN 585 epgn = avg_y(
ep_g(ijk),
ep_g(ijkn),j)
587 mugn = avg_y(
mu_g(ijk),
mu_g(ijkn),j)
590 ur(ss) =
v_g(ijk)-
v_s(ijk,ss)
592 vrelsq(ss) = (
u_g(ijk)-
u_s(ijk,ss))**2 + (
w_g(ijk)-
w_s(ijk
598 IF(drag_type_enum .eq. hys)
THEN 606 dijn_h(ss,kk) = avg_y_s(
dijf(ijk,ss,kk),
dijf(ijkn,ss,kk
610 dijn(ss,kk) = dijn_h(ss,kk)
612 dijn(ss,kk) = dijn_a(ss,kk)
616 beta_ij_cell(ss,kk)=0.d0
623 IF(drag_type_enum .eq. hys)
THEN 626 beta_cell, beta_ij_cell,vel)
628 CALL urnewt(ntrial, ur,
smax, ijk, tolx, tolf, &
629 epgn, rogn, mugn, vg, vrelsq, rosn, dp, dijn, joim)
634 IF(drag_type_enum .eq. hys)
THEN 635 v_s(ijk,ss)=velup(ss)
638 v_s(ijk,ss) =
v_g(ijk) - ur(ss)
647 elseif(
smax > 2)
then 648 maxflux =
joiy(ijk,1)
651 if( abs(
joiy(ijk,ss)) > abs(maxflux) )
then 652 maxflux =
joiy(ijk,ss)
656 joiy(ijk,maxfluxs) = 0d0
658 if(ss /= maxfluxs)
joiy(ijk,maxfluxs) =
joiy(ijk,maxfluxs)
667 IF(.NOT.
no_k .AND. (.NOT.ip_at_t(ijk) .OR. .NOT.sip_at_t(ijk))
THEN 679 epgn = avg_z(
ep_g(ijk),
ep_g(ijkt),k)
681 mugn = avg_z(
mu_g(ijk),
mu_g(ijkt),k)
684 ur(ss) =
w_g(ijk)-
w_s(ijk,ss)
686 vrelsq(ss) = (
u_g(ijk)-
u_s(ijk,ss))**2 + (
v_g(ijk)-
v_s(ijk
692 IF(drag_type_enum .eq. hys)
THEN 699 dijn_h(ss,kk) = avg_z_s(
dijf(ijk,ss,kk),
dijf(ijkt,ss,kk
702 dijn(ss,kk) = dijn_h(ss,kk)
704 dijn(ss,kk) = dijn_a(ss,kk)
707 beta_ij_cell(ss,kk)=0.d0
714 IF(drag_type_enum .eq. hys)
THEN 717 joim, beta_cell, beta_ij_cell,vel)
719 CALL urnewt(ntrial, ur,
smax, ijk, tolx, tolf, &
720 epgn, rogn, mugn, vg, vrelsq, rosn, dp, dijn, joim)
725 IF(drag_type_enum .eq. hys)
THEN 726 w_s(ijk,ss)=velup(ss)
729 w_s(ijk,ss) =
w_g(ijk) - ur(ss)
738 elseif(
smax > 2)
then 739 maxflux =
joiz(ijk,1)
742 if( abs(
joiz(ijk,ss)) > abs(maxflux) )
then 743 maxflux =
joiz(ijk,ss)
747 joiz(ijk,maxfluxs) = 0d0
749 if(ss /= maxfluxs)
joiz(ijk,maxfluxs) =
joiz(ijk,maxfluxs)
771 subroutine urnewt(ntrial, x, s, ijk, tolx, tolf, epgN, rogN, &
772 mugn, vg, vrelsq, rosn, dp, dijn, joim)
779 integer,
intent(in) :: s
780 integer,
intent(in) :: ijk
781 integer,
intent(in) :: ntrial
782 double precision,
intent(in) :: tolx, tolf
784 DOUBLE PRECISION,
intent(inout) :: X(s)
785 double precision,
intent(in) :: epgN, rogN, mugN, Vg
786 double precision,
intent(in) :: vrelSq(s), rosN(s), dp(s)
787 double precision,
intent(in) :: DijN(s,s), JoiM(s)
796 INTEGER :: I, K, INDX(s)
797 DOUBLE PRECISION :: D, ERRF, ERRX, FJAC(s,s), FVEC(s), P(s)
805 errf = errf + dabs(fvec(i))
808 IF(errf <= tolf)
RETURN 811 IF(rosn(i) .eq. 0.d0)
THEN 816 CALL ludcmp(fjac, s, np, indx, d,
'UrNewt')
817 CALL lubksb(fjac, s, np, indx, p)
821 errx = errx + dabs(p(i))
824 IF(errx <= tolx)
RETURN 839 mugn, vg, vrelsq, rosn, dp, dijn, joim)
845 integer,
intent(in) :: s
846 integer,
intent(in) :: ijk
847 double precision,
intent(in) :: X(s)
849 DOUBLE PRECISION,
INTENT(OUT) :: FVEC(s), FJAC(s,s)
850 DOUBLE PRECISION,
INTENT(IN) :: epgN, rogN, mugN, Vg
851 DOUBLE PRECISION,
INTENT(IN) :: vrelSq(s), rosN(s), dp(s)
852 DOUBLE PRECISION,
INTENT(IN) :: DijN(s,s), JoiM(s)
856 double precision :: pi
857 parameter(pi=3.14159265458979323846d0)
858 double precision :: one
860 double precision :: zero
868 DOUBLE PRECISION :: RE_G, C_d, DgA, Vi, vrel
869 DOUBLE PRECISION :: FgsOni(s), dFgsdVi(s), sum(s)
873 vrel = dsqrt(vrelsq(i) + x(i)**2)
874 vi = pi * dp(i)**3 / 6d0
875 re_g = dp(i)*vrel*rogn/mugn
876 IF(re_g <= 1000d0 .and. re_g> zero)
THEN 877 c_d = (24.d0/re_g) * (one + 0.15d0 * re_g**0.687d0)
881 dga = 0.75d0 * c_d * vrel * rogn / (epgn**2.65d0 * dp(i))
885 ELSEIF(re_g <= 1000d0)
THEN 886 dfgsdvi(i) = 1.8549d0*mugn*re_g**0.687d0*vi*dabs(x(i))/ &
887 (dp(i)**2*epgn**2.65d0*vrel**2)
889 dfgsdvi(i) = 0.33d0*rogn*vi*dabs(x(i))/ &
890 (dp(i)*epgn**2.65d0*vrel)
898 sum(i) = sum(i) + dijn(i,j) * fgsoni(j) * x(j)
902 fvec(i) = sum(i) - rosn(i)*x(i) + rosn(i)*vg + joim(i)
911 fjac(i,j) = dijn(i,i) * (fgsoni(i) + dfgsdvi(i)*x(i)) - rosn
912 IF(rosn(i) .eq. 0.d0)
THEN 916 fjac(i,j) = dijn(i,j) * (fgsoni(j) + dfgsdvi(j)*x(j))
935 beta_celli, beta_ij_celli, &
944 integer,
intent (in) :: s
946 DOUBLE PRECISION,
INTENT(IN) :: rosi(s), Diji(s,s), &
947 Joii(s), beta_celli(s), &
948 beta_ij_celli(s,s), velocity
950 DOUBLE PRECISION,
INTENT(OUT) :: FVEC(s)
962 DOUBLE PRECISION :: D
964 DOUBLE PRECISION :: FJAC(s,s)
976 IF(rosi(i) .ne. 0.d0)
THEN 977 fvec(i) = rosi(i)*velocity+joii(i)
985 fjac(i,l)=fjac(i,l)+rosi(i)
986 IF(rosi(i) .eq. 0.d0)
THEN 991 fjac(i,l)=fjac(i,l)-diji(i,l)*beta_celli(l)
996 fjac(i,k)=fjac(i,k)+diji(i,l)*beta_ij_celli(l,k)
1004 CALL ludcmp(fjac, s, np, indx, d,
'velocity_update')
1005 CALL lubksb(fjac, s, np, indx, fvec)
double precision, dimension(:,:,:), allocatable beta_ij_cell_z
double precision, dimension(:,:), allocatable joix
double precision, dimension(:,:), allocatable v_s
integer, dimension(:), allocatable i_of
double precision, dimension(:), allocatable ep_g
double precision, dimension(:,:,:), allocatable beta_ij_cell_x
logical, dimension(:), allocatable dit_harme
double precision, dimension(:), allocatable ox_e
logical, dimension(:,:), allocatable dijf_harmt
logical, dimension(:), allocatable dit_harmt
double precision, dimension(:,:,:), allocatable beta_ij_cell_y
logical, dimension(:,:), allocatable dij_harmn
subroutine velocity_update(FVEC, s, rosi, Diji, Joii, beta_celli, beta_ij_celli, velocity)
double precision, dimension(:,:), allocatable w_s
double precision, dimension(:,:), allocatable joiminusdragx
double precision, dimension(:,:), allocatable fiminusdragy
subroutine updatespeciesvelocities()
double precision, dimension(:,:), allocatable deltaw
double precision, dimension(:,:), allocatable fix
subroutine ur_jacobi_eval(X, s, ijk, FVEC, FJAC, epgN, rogN, mugN, Vg, vrelSq, rosN, dp, DijN, JoiM)
double precision, dimension(:,:), allocatable u_s
double precision, dimension(:,:), allocatable beta_cell_x
integer, dimension(:), allocatable k_of
double precision, dimension(:,:), allocatable fiz
double precision, dimension(:), allocatable ody_n
double precision, dimension(:,:,:), allocatable dij
double precision, dimension(:,:), allocatable d_p
double precision, dimension(:,:), allocatable fixvel
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable odx_e
logical, dimension(:,:), allocatable dij_harme
double precision, parameter zero_ep_s
double precision, dimension(:,:), allocatable theta_m
double precision, dimension(:), allocatable v_g
logical, dimension(:), allocatable dit_harmn
double precision, dimension(:,:), allocatable joiy
double precision, dimension(:,:), allocatable beta_cell_y
double precision, dimension(:), allocatable w_g
subroutine ludcmp(a, n, np, indx, d, calledFrom)
double precision, parameter dil_ep_s
double precision, dimension(:,:), allocatable ro_s
double precision, dimension(:,:), allocatable dit
double precision, dimension(:), allocatable mu_g
subroutine urnewt(ntrial, x, s, ijk, tolx, tolf, epgN, rogN, mugN, Vg, vrelSq, rosN, dp, DijN, JoiM)
double precision, dimension(:), allocatable u_g
logical, dimension(:,:), allocatable dijf_harmn
double precision, dimension(:,:), allocatable deltau
double precision, dimension(:,:), allocatable fiminusdragx
double precision, dimension(:,:), allocatable rop_s
double precision, dimension(:,:), allocatable fiy
double precision, dimension(:,:), allocatable fiyvel
double precision, dimension(:,:), allocatable joiminusdragy
subroutine lubksb(a, n, np, indx, b)
logical, dimension(:,:), allocatable dijf_harme
double precision, dimension(:,:,:), allocatable dijf
double precision, dimension(:,:), allocatable beta_cell_z
double precision, dimension(:,:), allocatable fizvel
double precision, parameter pi
double precision, dimension(:,:), allocatable joiminusdragz
double precision, dimension(:), allocatable odz_t
double precision, dimension(:,:), allocatable deltav
double precision, dimension(:), allocatable rop_g
double precision, parameter zero
double precision, dimension(:,:), allocatable joiz
logical, dimension(:,:), allocatable dij_harmt
double precision, dimension(:,:), allocatable fiminusdragz