105 COMPLEX(kind=dp),
INTENT(in) :: z
106 REAL(kind=
dp),
INTENT(in) :: err
108 INTEGER :: n, n3, n3_3
109 REAL(kind=
dp) :: a, a_pi, a_sqr, aux13, cos_2yx, del2_tmp, del3, del3_3_tmp, del3_tmp, del5, &
110 delta3, delta5, den1, erfcsy, exp1, exp2, exp3, exp3_3_den, exp3_den, exp_del1, &
111 exp_x_sqr, four_a_sqr, half_a, l_old, myerr, sigma1, sigma2, sigma3, sigma4, sigma4_5, &
112 sigma5, sin_2yx, two_a, two_a_pi, two_a_sqr, two_a_x, two_exp_x_sqr_ysqr, two_yx, v_old, &
113 x, x_sqr, xsign, y, y_sqr, ysign
121 IF (abs(x) ==
zero)
THEN
126 myerr = max(err,
eps0)
127 a = sqrt(-
pi2/log(err/2.0_dp))
135 erfcsy = erfc_scaled(abs(y))
139 y = max(
rmin, abs(y))
144 exp_x_sqr = exp(-x_sqr)
145 cos_2yx = cos(two_yx)
146 sin_2yx = sin(two_yx)
148 (erfcsy*cos_2yx + two_a_pi*sin(two_yx/2)**2/y)
149 l_old = -erfcsy + a_pi/y
164 exp2 = exp(four_a_sqr*n3 - 2*two_a_x - two_a_sqr)
165 exp3 = exp(-(two_a_sqr*n3 - two_a_x - two_a_sqr))
167 del3_tmp = exp(-(a_sqr*n3**2 - two_a_x*n3 &
168 - two_a_sqr*n3 + x_sqr + two_a_x + a_sqr))
169 del3_3_tmp = exp(a_sqr - (two_a_sqr*n3 - two_a_x))
172 IF (delta3 < myerr .AND. delta5 < myerr .AND. &
175 den1 = a_sqr*n**2 + y_sqr
176 exp_del1 = exp(-(a_sqr*n**2))/den1
177 del2_tmp = del2_tmp*exp1
179 minor:
IF (n3_3 >= 1)
THEN
180 del3_tmp = del3_tmp*exp3
181 exp3_den = del3_tmp*exp_del1* &
182 (den1/(a_sqr*n3**2 + y_sqr))
183 del3_3_tmp = del3_3_tmp*exp2
184 exp3_3_den = exp3_den*del3_3_tmp* &
185 ((a_sqr*n3**2 + y_sqr)/ &
186 (a_sqr*n3_3**2 + y_sqr))
187 del5 = n3_3*exp3_3_den + n3*exp3_den
188 del3 = exp3_3_den + exp3_den
190 del3_tmp = del3_tmp*exp3
191 del3 = del3_tmp*exp_del1* &
192 (den1/(a_sqr*n3**2 + y_sqr))
198 sigma1 = sigma1 + exp_del1
199 sigma2 = sigma2 + del2_tmp*exp_x_sqr*exp_del1
200 sigma3 = sigma3 + del3
201 sigma4 = sigma4 + n*del2_tmp*exp_x_sqr*exp_del1
202 sigma5 = sigma5 + del5
204 IF (x >= 5.0e-4_dp)
THEN
205 sigma4_5 = -sigma4 + sigma5
207 sigma4_5 = sigma4_5 + 2*n**2*two_a_x*exp_x_sqr &
208 *exp_del1*(
one + 1.666666666666667e-1_dp &
209 *(two_a_x*n)**2 + 8.333333333333333e-3_dp &
219 aux13 = y*two_a_pi* &
220 (-cos_2yx*exp_x_sqr*sigma1 +
half*(sigma2 + sigma3))
221 mumu:
IF (y <= 5.0_dp .AND. two_yx >
rmin)
THEN
223 *(sin_2yx*exp_x_sqr*(l_old + two_a_pi*y*sigma1) &
224 + two_a_pi*half_a*sigma4_5)
225 ELSE IF (y <= 5.0_dp .AND. two_yx <=
rmin)
THEN
227 *(
two*y*exp_x_sqr*(x*l_old + x*two_a_pi*y &
228 *sigma1) + two_a_pi*half_a*sigma4_5)
231 *(sin_2yx*exp_x_sqr*min(
zero, abs(l_old &
232 + (two_a_pi*y*sigma1))) + two_a_pi*half_a &
238 exp2 = exp(four_a_sqr*n3 - 2*two_a_x - two_a_sqr)
239 del3_3_tmp = exp(a_sqr + two_a_x - two_a_sqr*n3)
242 IF (delta3 < myerr .AND. delta5 < myerr .AND. &
246 exp3_den = exp(-(a*n3 - x)*(a*n3 - x)) &
247 /(a_sqr*n3**2 + y_sqr)
248 del3_3_tmp = del3_3_tmp*exp2
249 exp3_3_den = exp3_den*del3_3_tmp*((a_sqr*n3**2 + y_sqr) &
250 /(a_sqr*n3_3**2 + y_sqr))
251 del5 = n3_3*exp3_3_den + n3*exp3_den
252 del3 = exp3_3_den + exp3_den
254 del3 = exp(-(a*n3 - x)**2)/(a_sqr*n3**2 + y_sqr)
260 sigma3 = sigma3 + del3
261 sigma5 = sigma5 + del5
268 *exp_x_sqr*l_old + two_a_pi*half_a*sigma5)
274 IF (ysign <
zero)
THEN
275 two_exp_x_sqr_ysqr =
two*exp(-x_sqr + y_sqr)
321 COMPLEX(kind=dp),
INTENT(in) :: z
323 REAL(kind=
dp),
PARAMETER :: factor = 1.12837916709551257388_dp
325 INTEGER :: i, j, kapn, n, np1, nu
327 REAL(kind=
dp) :: c, daux, h, h2, qlambda, qrho, rx, ry, &
328 sx, sy, tx, ty, u, u1, u2, v, v1, v2, &
329 w1, x, xabs, xabsq, xaux, xi, xquad, &
330 xsum, y, yabs, yi, yquad, ysum
345 xquad = xabsq - yabs**2
348 a = qrho < 0.085264_dp
357 qrho = (
one - 0.85_dp*y)*sqrt(qrho)
358 n = nint(6.0_dp + 72.0_dp*qrho)
360 xsum =
one/real(j, kind=
dp)
365 xaux = (xsum*xquad - ysum*yquad)/real(i, kind=
dp)
366 ysum = (xsum*yquad + ysum*xquad)/real(i, kind=
dp)
367 xsum = xaux +
one/real(j, kind=
dp)
370 u1 = -factor*(xsum*yabs + ysum*xabs) +
one
371 v1 = factor*(xsum*xabs - ysum*yabs)
374 v2 = -daux*sin(yquad)
379 bran2:
IF (qrho >
one)
THEN
388 nu = int(3.0_dp + (1442.0_dp/(26.0_dp*qrho &
401 qrho = (
one - y)*sqrt(
one - qrho)
404 kapn = nint(7.0_dp + 34.0_dp*qrho)
405 nu = nint(16.0_dp + 26.0_dp*qrho)
414 IF (b) qlambda = h2**kapn
423 tx = yabs + h + np1*rx
425 c =
half/(tx**2 + ty**2)
428 IF (b .AND. n <= kapn)
THEN
444 IF (yabs ==
zero) u = exp(-xabs**2)
464 IF (xi >
zero) v = -v
466 IF (xi <
zero) v = -v