32#include "../base/base_uses.f90"
40 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'gfun'
54 INTEGER,
INTENT(IN) :: nmax
55 REAL(kind=
dp),
INTENT(IN) :: t
56 REAL(kind=
dp),
DIMENSION(0:nmax),
INTENT(OUT) :: g
63 IF (t <= 12.0_dp)
THEN
65 g(nmax) = gfun_taylor(nmax, t);
67 g(i - 1) = (1.0_dp - 2.0_dp*t*g(i))/(2.0_dp*i - 1.0_dp)
74 g(i + 1) = (1.0_dp - (2.0_dp*i + 1.0_dp)*g(i))/(2.0_dp*t)
86 FUNCTION gfun_taylor(n, x)
RESULT(g)
87 INTEGER,
INTENT(IN) :: n
88 REAL(kind=
dp),
INTENT(IN) :: x
91 REAL(kind=
dp),
PARAMETER :: eps = 1.e-15_dp
94 REAL(kind=
dp) :: ex, gk, tkk
98 g = ex/real(2*n + 1, kind=
dp)
100 tkk = tkk*x/real(k, kind=
dp)
101 gk = ex*tkk/real(2*n + 2*k + 1, kind=
dp)
106 cpwarn(
"gfun_taylor did not converge")
109 END FUNCTION gfun_taylor
156 REAL(kind=
dp) :: xx, daw
159 REAL(kind=
dp) :: frac, one225, p1(10), p2(10), p3(10), &
160 p4(10), q1(10), q2(9), q3(9), q4(9), &
161 six25, sump, sumq, two5, w2, x, &
162 xlarge, xmax, xsmall, y
173 DATA xsmall/1.05d-08/
174 DATA xlarge/9.49d+07/
179 DATA p1/-2.69020398788704782410d-12, 4.18572065374337710778d-10, &
180 -1.34848304455939419963d-08, 9.28264872583444852976d-07, &
181 -1.23877783329049120592d-05, 4.07205792429155826266d-04, &
182 -2.84388121441008500446d-03, 4.70139022887204722217d-02, &
183 -1.38868086253931995101d-01, 1.00000000000000000004d+00/
184 DATA q1/1.71257170854690554214d-10, 1.19266846372297253797d-08, &
185 4.32287827678631772231d-07, 1.03867633767414421898d-05, &
186 1.78910965284246249340d-04, 2.26061077235076703171d-03, &
187 2.07422774641447644725d-02, 1.32212955897210128811d-01, &
188 5.27798580412734677256d-01, 1.00000000000000000000d+00/
193 DATA p2/-1.70953804700855494930d+00, -3.79258977271042880786d+01, &
194 2.61935631268825992835d+01, 1.25808703738951251885d+01, &
195 -2.27571829525075891337d+01, 4.56604250725163310122d+00, &
196 -7.33080089896402870750d+00, 4.65842087940015295573d+01, &
197 -1.73717177843672791149d+01, 5.00260183622027967838d-01/
198 DATA q2/1.82180093313514478378d+00, 1.10067081034515532891d+03, &
199 -7.08465686676573000364d+00, 4.53642111102577727153d+02, &
200 4.06209742218935689922d+01, 3.02890110610122663923d+02, &
201 1.70641269745236227356d+02, 9.51190923960381458747d+02, &
202 2.06522691539642105009d-01/
207 DATA p3/-4.55169503255094815112d+00, -1.86647123338493852582d+01, &
208 -7.36315669126830526754d+00, -6.68407240337696756838d+01, &
209 4.84507265081491452130d+01, 2.69790586735467649969d+01, &
210 -3.35044149820592449072d+01, 7.50964459838919612289d+00, &
211 -1.48432341823343965307d+00, 4.99999810924858824981d-01/
212 DATA q3/4.47820908025971749852d+01, 9.98607198039452081913d+01, &
213 1.40238373126149385228d+01, 3.48817758822286353588d+03, &
214 -9.18871385293215873406d+00, 1.24018500009917163023d+03, &
215 -6.88024952504512254535d+01, -2.31251575385145143070d+00, &
216 2.50041492369922381761d-01/
221 DATA p4/-8.11753647558432685797d+00, -3.84043882477454453430d+01, &
222 -2.23787669028751886675d+01, -2.88301992467056105854d+01, &
223 -5.99085540418222002197d+00, -1.13867365736066102577d+01, &
224 -6.52828727526980741590d+00, -4.50002293000355585708d+00, &
225 -2.50000000088955834952d+00, 5.00000000000000488400d-01/
226 DATA q4/2.69382300417238816428d+02, 5.04198958742465752861d+01, &
227 6.11539671480115846173d+01, 2.08210246935564547889d+02, &
228 1.97325365692316183531d+01, -1.22097010558934838708d+01, &
229 -6.99732735041547247161d+00, -2.49999970104184464568d+00, &
230 7.49999999999027092188d-01/
234 IF (xlarge < abs(x))
THEN
236 IF (abs(x) <= xmax)
THEN
242 ELSE IF (abs(x) < xsmall)
THEN
257 sump = sump*y + p1(i)
258 sumq = sumq*y + q1(i)
265 ELSE IF (y < one225)
THEN
269 frac = q2(i)/(p2(i) + y + frac)
272 daw = (p2(10) + frac)/x
276 ELSE IF (y < two5)
THEN
280 frac = q3(i)/(p3(i) + y + frac)
283 daw = (p3(10) + frac)/x
293 frac = q4(i)/(p4(i) + y + frac)
297 daw = (0.5d+00 + 0.5d+00*w2*frac)/x
Calculation of the G function G_n(t) for 1/R^2 operators.
subroutine, public gfun_values(nmax, t, g)
...
Defines the basic variable types.
integer, parameter, public dp