213 SUBROUTINE calc_fx_array(n, rhoa, rhob, fx, m)
223 INTEGER,
INTENT(IN) :: n
224 REAL(KIND=
dp),
DIMENSION(*),
INTENT(IN) :: rhoa, rhob
225 REAL(KIND=
dp),
DIMENSION(:, :),
INTENT(OUT) :: fx
226 INTEGER,
INTENT(IN) :: m
229 REAL(KIND=
dp) :: rhoab, x
235 IF (m > 3) cpabort(
"Order too high.")
240 IF (
SIZE(fx, 1) < n) cpabort(
"SIZE(fx,1) too small")
241 IF (
SIZE(fx, 2) < m) cpabort(
"SIZE(fx,2) too small")
246 rhoab = rhoa(ip) + rhob(ip)
247 IF (rhoab < eps_rho)
THEN
250 x = (rhoa(ip) - rhob(ip))/rhoab
251 IF (x < -1.0_dp)
THEN
252 IF (m >= 0) fx(ip, 1) = 1.0_dp
253 IF (m >= 1) fx(ip, 2) = -f43*fxfac*2.0_dp**f13
254 IF (m >= 2) fx(ip, 3) = f13*f43*fxfac/2.0_dp**f23
255 IF (m >= 3) fx(ip, 4) = f23*f13*f43*fxfac/2.0_dp**f53
256 ELSE IF (x > 1.0_dp)
THEN
257 IF (m >= 0) fx(ip, 1) = 1.0_dp
258 IF (m >= 1) fx(ip, 2) = f43*fxfac*2.0_dp**f13
259 IF (m >= 2) fx(ip, 3) = f13*f43*fxfac/2.0_dp**f23
260 IF (m >= 3) fx(ip, 4) = -f23*f13*f43*fxfac/2.0_dp**f53
263 fx(ip, 1) = ((1.0_dp + x)**f43 + (1.0_dp - x)**f43 - 2.0_dp)*fxfac
265 fx(ip, 2) = ((1.0_dp + x)**f13 - (1.0_dp - x)**f13)*fxfac*f43
267 fx(ip, 3) = ((1.0_dp + x)**(-f23) + (1.0_dp - x)**(-f23))* &
270 fx(ip, 4) = ((1.0_dp + x)**(-f53) - (1.0_dp - x)**(-f53))* &
285 PURE SUBROUTINE calc_fx_single(rhoa, rhob, fx, m)
295 REAL(kind=
dp),
INTENT(IN) :: rhoa, rhob
296 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: fx
297 INTEGER,
INTENT(IN) :: m
299 REAL(kind=
dp) :: rhoab, x
302 IF (rhoab < eps_rho)
THEN
305 x = (rhoa - rhob)/rhoab
306 IF (x < -1.0_dp)
THEN
307 IF (m >= 0) fx(1) = 1.0_dp
308 IF (m >= 1) fx(2) = -f43*fxfac*2.0_dp**f13
309 IF (m >= 2) fx(3) = f13*f43*fxfac/2.0_dp**f23
310 IF (m >= 3) fx(4) = f23*f13*f43*fxfac/2.0_dp**f53
311 ELSE IF (x > 1.0_dp)
THEN
312 IF (m >= 0) fx(1) = 1.0_dp
313 IF (m >= 1) fx(2) = f43*fxfac*2.0_dp**f13
314 IF (m >= 2) fx(3) = f13*f43*fxfac/2.0_dp**f23
315 IF (m >= 3) fx(4) = -f23*f13*f43*fxfac/2.0_dp**f53
318 fx(1) = ((1.0_dp + x)**f43 + (1.0_dp - x)**f43 - 2.0_dp)*fxfac
320 fx(2) = ((1.0_dp + x)**f13 - (1.0_dp - x)**f13)*fxfac*f43
322 fx(3) = ((1.0_dp + x)**(-f23) + (1.0_dp - x)**(-f23))* &
325 fx(4) = ((1.0_dp + x)**(-f53) - (1.0_dp - x)**(-f53))* &