42 FUNCTION erf (x)
RESULT (value)
52 real(
r8),
intent(in) :: x
64 value=-
gammp(0.5_r8, x**2)
66 value=
gammp(0.5_r8, x**2)
72 FUNCTION erfc (x)
RESULT (value)
82 real(
r8),
intent(in) :: x
94 value=1.0_r8+
gammp(0.5_r8, x**2)
96 value=
gammq(0.5_r8, x**2)
113 real(
r8),
intent(in) :: x
117 real(
r8) :: t,
value, z
125 t=1.0_r8/(1.0_r8+0.5_r8*z)
126 value=t*exp(-z*z-1.26551223_r8+ &
127 & t*(1.00002368_r8+ &
128 & t*(0.37409196_r8+ &
129 & t*(0.09678418_r8+ &
130 & t*(-0.18628806_r8+ &
131 & t*(0.27886807_r8+ &
132 & t*(-1.13520398_r8+ &
133 & t*(1.48851587_r8+ &
134 & t*(-0.82215223_r8+ &
135 & t*.17087277)))))))))
136 IF (x.lt.0.0_r8)
value=2.0-
value
153 real(
r8),
intent(in) :: xx
159 real(
r8) :: ser, tmp, x, y
161 real(
r8),
save,
dimension(6) :: cof = &
162 & (/ 76.18009172947146_r8, &
163 & -86.50532032941677_r8, &
164 & 24.01409824083091_r8, &
165 & -1.231739572450155_r8, &
166 & 0.1208650973866179E-2_r8, &
167 & -0.5395239384953E-5_r8 /)
168 real(
r8),
save :: stp = 2.5066282746310005_r8
177 tmp=(x+0.5_r8)*log(tmp)-tmp
178 ser=1.000000000190015_r8
183 value=tmp+log(stp*ser/x)
202 real(
r8),
intent(in) :: a, x
206 real(
r8) :: gammcf, gamser, gln
213 IF ((x.lt.0.0_r8).or.(a.le.0.0_r8))
THEN
215 10
FORMAT (/,
' GAMMAP - gamma function negative argument,', &
216 &
' a = ',1pe13.6,
' x = ',1pe13.6)
220 IF (x.lt.a+1.0_r8)
THEN
221 CALL gser (gamser, a, x, gln)
224 CALL gcf (gammcf, a, x, gln)
246 real(
r8),
intent(in) :: a, x
250 real(
r8) :: gammcf, gamser, gln
257 IF ((x.lt.0.0_r8).or.(a.le.0.0_r8))
THEN
259 10
FORMAT (/,
' GAMMAQ - gamma function negative argument,', &
260 &
' a = ',1pe13.6,
' x = ',1pe13.6)
264 IF (x.lt.a+1.0_r8)
THEN
265 CALL gser (gamser, a, x, gln)
268 CALL gcf (gammcf, a, x, gln)
275 SUBROUTINE gser (gamser, a, x, gln)
290 real(r8),
intent(in) :: a, x
291 real(r8),
intent(out) :: gamser, gln
296 integer,
parameter :: ITMAX = 100
299 real(r8),
parameter :: EPS =3.0e-7_r8
300 real(r8) :: ap, del, my_sum
307 IF (x.le.0.0_r8)
THEN
310 10
FORMAT (/,
' GSER - gamma function negative argument, x = ', &
325 IF (abs(del).lt.abs(my_sum)*eps)
THEN
331 gamser=my_sum*exp(-x+a*log(x)-gln)
334 20
FORMAT (/,
' GSER - Gamma function not converged, ITMAX = ', &
335 & i4.4,/,8x,
'a is too large')
342 SUBROUTINE gcf (gammcf, a, x, gln)
357 real(r8),
intent(in) :: a, x
358 real(r8),
intent(out) :: gammcf, gln
364 integer,
parameter :: ITMAX = 100
367 real(r8),
parameter :: EPS = 3.0e-7_r8
368 real(r8),
parameter :: FPMIN = 1.0e-30_r8
369 real(r8) :: an, b, c, d, del, h
383 an=-real(i,r8)*(real(i,r8)-a)
386 IF (abs(d).lt.fpmin) d=fpmin
388 IF (abs(c).lt.fpmin) c=fpmin
392 IF (abs(del-1.0_r8).lt.eps)
THEN
398 gammcf=exp(-x+a*log(x)-gln)*h
401 10
FORMAT (/,
' GCF - Gamma function not converged, ITMAX = ', &
402 & i4.4,/,8x,
'a is too large')
409 FUNCTION aerf (arg)
RESULT (value)
427 real(
r8),
intent(in) :: arg
431 real(
r8),
parameter :: a1 = +0.254829592_r8
432 real(
r8),
parameter :: a2 = -0.284496736_r8
433 real(
r8),
parameter :: a3 = -1.421413741_r8
434 real(
r8),
parameter :: a4 = -1.453152027_r8
435 real(
r8),
parameter :: a5 = +1.061405429_r8
436 real(
r8),
parameter :: p = +0.3275911_r8
438 real(
r8) :: big, c, my_sign, t, y
448 IF (arg.lt.0.0_r8)
THEN
454 IF (arg.eq.0.0_r8)
THEN
462 t=1.0_r8/(1.0_r8+p*y)
463 c=t*(a1+t*(a2+t*(a3+t*(a4+a5*t))))
465 value=my_sign*(1.0_r8-c*exp(-y*y))
real(r8) function aerf(arg)
real(r8) function, public erfcc(x)
real(r8) function, public gammp(a, x)
subroutine gser(gamser, a, x, gln)
real(r8) function gammln(xx)
real(r8) function, public erf(x)
subroutine gcf(gammcf, a, x, gln)
real(r8) function, public erfc(x)
real(r8) function, public gammq(a, x)