19 DOUBLE PRECISION FUNCTION superbee (PHI_C)
22 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
24 DOUBLE PRECISION :: TH
26 IF (phi_c>=
zero .AND. phi_c<
one)
THEN 27 th = phi_c/(
one - phi_c)
29 ELSE IF (phi_c ==
one)
THEN 41 DOUBLE PRECISION FUNCTION smart (PHI_C)
44 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
46 DOUBLE PRECISION :: TH
48 IF (phi_c>=
zero .AND. phi_c<
one)
THEN 49 th = phi_c/(
one - phi_c)
51 ELSE IF (phi_c ==
one)
THEN 65 DOUBLE PRECISION FUNCTION chi_smart (PHI_C, Chi)
68 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
69 DOUBLE PRECISION,
INTENT(IN) :: Chi
73 elseif(chi ==
zero)
then 87 DOUBLE PRECISION FUNCTION chi4smart (PHI_C, PHIU, PHIC, PHID)
90 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
91 DOUBLE PRECISION,
INTENT(IN) :: PHIU
92 DOUBLE PRECISION,
INTENT(IN) :: PHIC
93 DOUBLE PRECISION,
INTENT(IN) :: PHID
95 IF(phi_c >
zero .AND. phi_c <= (1.d0/6.d0))
THEN 96 chi4smart = 16.d0 * phi_c/(3.d0 - 2.d0 * phi_c)
97 ELSEIF(phi_c > (1.d0/6.d0) .AND. phi_c <= (5.d0/6.d0))
THEN 99 ELSEIF(phi_c > (5.d0/6.d0) .AND. phi_c <=
one)
THEN 101 ELSEIF( (phiu < 1d-15) .AND. (phic < 1d-15) .AND. (phid < 1d-15) )
THEN 118 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
119 DOUBLE PRECISION,
INTENT(IN) :: CF
121 DOUBLE PRECISION,
PARAMETER :: FIVEOSIX = 5.d0/6.d0
122 DOUBLE PRECISION :: TH, OCF
124 ocf = max(
one,
one/max(1.d-2,cf))
125 IF (phi_c >
one)
THEN 127 ELSE IF (phi_c > fiveosix)
THEN 129 ELSE IF (phi_c > 3.d0/(8.d0*ocf - 6.d0))
THEN 130 th = phi_c/(
one - phi_c)
132 ELSE IF (phi_c >
zero)
THEN 133 th = phi_c/(
one - phi_c)
136 th = phi_c/(
one - phi_c)
146 DOUBLE PRECISION FUNCTION quickest (PHI_C, CF, ODXC, ODXUC, ODXCD)
149 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
150 DOUBLE PRECISION,
INTENT(IN) :: CF
151 DOUBLE PRECISION,
INTENT(IN) :: ODXC
152 DOUBLE PRECISION,
INTENT(IN) :: ODXUC
153 DOUBLE PRECISION,
INTENT(IN) :: ODXCD
155 DOUBLE PRECISION :: FCF, TH
157 IF (phi_c>
zero .AND. phi_c<
one)
THEN 158 fcf = -(
one - cf*cf)/3.d0
173 DOUBLE PRECISION FUNCTION muscl (PHI_C)
176 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
178 DOUBLE PRECISION :: TH
180 IF (phi_c>=
zero .AND. phi_c<
one)
THEN 181 th = phi_c/(
one - phi_c)
183 ELSE IF (phi_c ==
one)
THEN 197 DOUBLE PRECISION FUNCTION chi_muscl (PHI_C, Chi)
200 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
201 DOUBLE PRECISION,
INTENT(IN) :: Chi
205 elseif(chi ==
zero)
then 219 DOUBLE PRECISION FUNCTION chi4muscl (PHI_C, PHIU, PHIC, PHID)
222 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
223 DOUBLE PRECISION,
INTENT(IN) :: PHIU
224 DOUBLE PRECISION,
INTENT(IN) :: PHIC
225 DOUBLE PRECISION,
INTENT(IN) :: PHID
227 IF(phi_c >
zero .AND. phi_c <= 0.25d0)
THEN 229 ELSEIF(phi_c > 0.25d0 .AND. phi_c <= 0.75d0)
THEN 231 ELSEIF(phi_c > 0.75d0 .AND. phi_c <=
one)
THEN 233 ELSEIF( (phiu < 1d-15) .AND. (phic < 1d-15) .AND. (phid < 1d-15) )
THEN 247 DOUBLE PRECISION FUNCTION vanleer (PHI_C)
250 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
252 IF (phi_c>=
zero .AND. phi_c<=
one)
THEN 264 DOUBLE PRECISION FUNCTION minmod (PHI_C)
267 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
269 IF (phi_c>=
zero .AND. phi_c<=
one)
THEN 270 IF (phi_c >=
half)
THEN 291 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
301 DOUBLE PRECISION FUNCTION umist (PHI_C)
304 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
306 DOUBLE PRECISION :: TH
308 IF (phi_c>=
zero .AND. phi_c<
one)
THEN 309 th = phi_c/(
one - phi_c)
310 umist =
half*max(
zero,min(2.0d0*th,0.75d0 + 0.25d0*th,2.0d0))
311 ELSE IF (phi_c ==
one)
THEN 323 DOUBLE PRECISION FUNCTION xsi (V, DWF)
326 DOUBLE PRECISION,
INTENT(IN) :: V
327 DOUBLE PRECISION,
INTENT(IN) :: DWF
341 DOUBLE PRECISION FUNCTION phi_c_of (PHI_U, PHI_C, PHI_D)
345 DOUBLE PRECISION,
INTENT(IN) :: PHI_U
346 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
347 DOUBLE PRECISION,
INTENT(IN) :: PHI_D
349 DOUBLE PRECISION :: DEN
364 DOUBLE PRECISION FUNCTION fpfoi_of (PHI_D, PHI_C, &
367 DOUBLE PRECISION,
INTENT(IN) :: PHI_D
368 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
369 DOUBLE PRECISION,
INTENT(IN) :: PHI_U
370 DOUBLE PRECISION,
INTENT(IN) :: PHI_UU
372 fpfoi_of = phi_c + (5.0d0/16.0d0)*(phi_d - phi_c) + &
373 (1.0d0/4.0d0)*(phi_c - phi_u) - &
374 (1.0d0/16.0d0)*(phi_u - phi_uu)
391 DOUBLE PRECISION,
INTENT(IN) :: PHI_TEMP
392 DOUBLE PRECISION,
INTENT(IN) :: PHI_D
393 DOUBLE PRECISION,
INTENT(IN) :: PHI_C
394 DOUBLE PRECISION,
INTENT(IN) :: PHI_U
396 DOUBLE PRECISION :: PHI_REF, DEL, CURV
399 curv = phi_d - 2.0*phi_c + phi_u
400 IF (abs(curv) >= abs(del))
THEN 403 phi_ref = phi_u + (phi_c-phi_u)/
c_fac 406 IF (phi_temp > min(phi_ref,phi_d)) &
408 IF (phi_temp >= phi_c .AND. phi_temp <= min(phi_ref,phi_d)) &
412 IF (phi_temp < max(phi_ref,phi_d)) &
414 IF (phi_temp >= max(phi_ref,phi_d) .AND. phi_temp <= phi_c) &
logical function compare(V1, V2)
double precision, parameter one
double precision function chi_smart(PHI_C, Chi)
double precision function superbee(PHI_C)
double precision function quickest(PHI_C, CF, ODXC, ODXUC, ODXCD)
double precision function muscl(PHI_C)
double precision function univ_limiter_of(PHI_TEMP, PHI_D, PHI_C, PHI_U)
double precision function phi_c_of(PHI_U, PHI_C, PHI_D)
double precision function fpfoi_of(PHI_D, PHI_C, PHI_U, PHI_UU)
double precision, parameter small_number
double precision function ultra_quick(PHI_C, CF)
double precision function umist(PHI_C)
double precision function minmod(PHI_C)
double precision function vanleer(PHI_C)
double precision function central_scheme(PHI_C)
double precision, parameter half
double precision, parameter large_number
double precision function chi4smart(PHI_C, PHIU, PHIC, PHID)
double precision function chi4muscl(PHI_C, PHIU, PHIC, PHID)
double precision function smart(PHI_C)
double precision function chi_muscl(PHI_C, Chi)
double precision, parameter zero