(git:374b731)
Loading...
Searching...
No Matches
t_c_g0.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8!--------------------------------------------------------------------------------------------------!
9! Copyright (c) 2008, 2009, Joost VandeVondele and Manuel Guidon !
10! All rights reserved. !
11! !
12! Redistribution and use in source and binary forms, with or without !
13! modification, are permitted provided that the following conditions are met: !
14! * Redistributions of source code must retain the above copyright !
15! notice, this list of conditions and the following disclaimer. !
16! * Redistributions in binary form must reproduce the above copyright !
17! notice, this list of conditions and the following disclaimer in the !
18! documentation and/or other materials provided with the distribution. !
19! !
20! THIS SOFTWARE IS PROVIDED BY Joost VandeVondele and Manuel Guidon AS IS AND ANY !
21! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED !
22! WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE !
23! DISCLAIMED. IN NO EVENT SHALL Joost VandeVondele or Manuel Guidon BE LIABLE FOR ANY !
24! DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES !
25! (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; !
26! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND !
27! ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT !
28! (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS !
29! SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. !
30!--------------------------------------------------------------------------------------------------!
31
32! **************************************************************************************************
33!> \brief This module computes the basic integrals for the truncated coulomb operator
34!>
35!> res(1) =G_0(R,T)= ((2*erf(sqrt(t))+erf(R-sqrt(t))-erf(R+sqrt(t)))/sqrt(t))
36!>
37!> and up to 21 derivatives with respect to T
38!>
39!> res(n+1)=(-1)**n d^n/dT^n G_0(R,T)
40!>
41!> The function is only computed for values of R,T which fulfil
42!>
43!> R**2 - 11.0_dp*R + 0.0_dp < T < R**2 + 11.0_dp*R + 50.0_dp where R>=0 T>=0
44!>
45!> for T larger than the upper bound, 0 is returned
46!> (which is accurate at least up to 1.0E-16)
47!> while for T smaller than the lower bound, the caller is instructed
48!> to use the conventional gamma function instead
49!> (i.e. the limit of above expression for R to Infinity)
50!>
51!> \author Joost VandeVondele and Manuel Guidon
52!> \par History
53!> Nov 2008, 2009 Joost VandeVondele and Manuel Guidon
54!> May 2019 A. Bussy: Added a get_maxl_init function to get current status of nderiv_init and
55!> moved the file to common (made it accessible from aobasis, same place as gamma.F).
56! **************************************************************************************************
57MODULE t_c_g0
58 USE kinds, ONLY: dp
60#include "../base/base_uses.f90"
61
62 IMPLICIT NONE
63 PRIVATE
64
66 REAL(KIND=dp), DIMENSION(:, :), ALLOCATABLE, SAVE :: c0
67 INTEGER, PARAMETER :: degree = 13
68 REAL(KIND=dp), PARAMETER :: target_error = 0.100000e-08
69 INTEGER, PARAMETER :: nderiv_max = 21
70 INTEGER, SAVE :: nderiv_init = -1
71 INTEGER, SAVE :: patches = -1
72
73CONTAINS
74
75! **************************************************************************************************
76!> \brief ...
77!> \param RES ...
78!> \param use_gamma ...
79!> \param R ...
80!> \param T ...
81!> \param NDERIV ...
82! **************************************************************************************************
83 SUBROUTINE t_c_g0_n(RES, use_gamma, R, T, NDERIV)
84 REAL(kind=dp), INTENT(OUT) :: res(*)
85 LOGICAL, INTENT(OUT) :: use_gamma
86 REAL(kind=dp), INTENT(IN) :: r, t
87 INTEGER, INTENT(IN) :: nderiv
88
89 REAL(kind=dp) :: lower, tg1, tg2, upper, x1, x2
90
91 use_gamma = .false.
92 upper = r**2 + 11.0_dp*r + 50.0_dp
93 lower = r**2 - 11.0_dp*r + 0.0_dp
94 IF (t > upper) THEN
95 res(1:nderiv + 1) = 0.0_dp
96 RETURN
97 END IF
98 IF (r <= 11.0_dp) THEN
99 x2 = r/11.0_dp
100 upper = r**2 + 11.0_dp*r + 50.0_dp
101 lower = 0.0_dp
102 x1 = (t - lower)/(upper - lower)
103 IF (x1 <= 0.500000000000000000e+00_dp) THEN
104 IF (x2 <= 0.500000000000000000e+00_dp) THEN
105 IF (x2 <= 0.250000000000000000e+00_dp) THEN
106 IF (x2 <= 0.125000000000000000e+00_dp) THEN
107 IF (x1 <= 0.250000000000000000e+00_dp) THEN
108 IF (x2 <= 0.625000000000000000e-01_dp) THEN
109 IF (x1 <= 0.125000000000000000e+00_dp) THEN
110 IF (x2 <= 0.312500000000000000e-01_dp) THEN
111 IF (x1 <= 0.625000000000000000e-01_dp) THEN
112 IF (x2 <= 0.156250000000000000e-01_dp) THEN
113 IF (x1 <= 0.312500000000000000e-01_dp) THEN
114 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
115 tg2 = (2*x2 - 0.156250000000000000e-01_dp)*0.640000000000000000e+02_dp
116 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 1))
117 ELSE
118 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
119 tg2 = (2*x2 - 0.156250000000000000e-01_dp)*0.640000000000000000e+02_dp
120 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 2))
121 END IF
122 ELSE
123 IF (x1 <= 0.312500000000000000e-01_dp) THEN
124 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
125 tg2 = (2*x2 - 0.468750000000000000e-01_dp)*0.640000000000000000e+02_dp
126 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 3))
127 ELSE
128 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
129 tg2 = (2*x2 - 0.468750000000000000e-01_dp)*0.640000000000000000e+02_dp
130 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 4))
131 END IF
132 END IF
133 ELSE
134 IF (x2 <= 0.156250000000000000e-01_dp) THEN
135 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
136 tg2 = (2*x2 - 0.156250000000000000e-01_dp)*0.640000000000000000e+02_dp
137 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 5))
138 ELSE
139 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
140 tg2 = (2*x2 - 0.468750000000000000e-01_dp)*0.640000000000000000e+02_dp
141 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 6))
142 END IF
143 END IF
144 ELSE
145 IF (x1 <= 0.625000000000000000e-01_dp) THEN
146 IF (x2 <= 0.468750000000000000e-01_dp) THEN
147 IF (x1 <= 0.312500000000000000e-01_dp) THEN
148 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
149 tg2 = (2*x2 - 0.781250000000000000e-01_dp)*0.640000000000000000e+02_dp
150 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 7))
151 ELSE
152 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
153 tg2 = (2*x2 - 0.781250000000000000e-01_dp)*0.640000000000000000e+02_dp
154 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 8))
155 END IF
156 ELSE
157 IF (x1 <= 0.312500000000000000e-01_dp) THEN
158 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
159 tg2 = (2*x2 - 0.109375000000000000e+00_dp)*0.640000000000000000e+02_dp
160 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 9))
161 ELSE
162 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
163 tg2 = (2*x2 - 0.109375000000000000e+00_dp)*0.640000000000000000e+02_dp
164 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 10))
165 END IF
166 END IF
167 ELSE
168 IF (x2 <= 0.468750000000000000e-01_dp) THEN
169 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
170 tg2 = (2*x2 - 0.781250000000000000e-01_dp)*0.640000000000000000e+02_dp
171 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 11))
172 ELSE
173 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
174 tg2 = (2*x2 - 0.109375000000000000e+00_dp)*0.640000000000000000e+02_dp
175 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 12))
176 END IF
177 END IF
178 END IF
179 ELSE
180 IF (x2 <= 0.312500000000000000e-01_dp) THEN
181 IF (x1 <= 0.187500000000000000e+00_dp) THEN
182 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
183 tg2 = (2*x2 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
184 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 13))
185 ELSE
186 tg1 = (2*x1 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
187 tg2 = (2*x2 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
188 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 14))
189 END IF
190 ELSE
191 IF (x1 <= 0.187500000000000000e+00_dp) THEN
192 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
193 tg2 = (2*x2 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
194 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 15))
195 ELSE
196 tg1 = (2*x1 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
197 tg2 = (2*x2 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
198 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 16))
199 END IF
200 END IF
201 END IF
202 ELSE
203 IF (x1 <= 0.125000000000000000e+00_dp) THEN
204 IF (x2 <= 0.937500000000000000e-01_dp) THEN
205 IF (x1 <= 0.625000000000000000e-01_dp) THEN
206 IF (x2 <= 0.781250000000000000e-01_dp) THEN
207 IF (x1 <= 0.312500000000000000e-01_dp) THEN
208 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
209 tg2 = (2*x2 - 0.140625000000000000e+00_dp)*0.640000000000000000e+02_dp
210 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 17))
211 ELSE
212 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
213 tg2 = (2*x2 - 0.140625000000000000e+00_dp)*0.640000000000000000e+02_dp
214 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 18))
215 END IF
216 ELSE
217 IF (x1 <= 0.312500000000000000e-01_dp) THEN
218 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
219 tg2 = (2*x2 - 0.171875000000000000e+00_dp)*0.640000000000000000e+02_dp
220 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 19))
221 ELSE
222 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
223 tg2 = (2*x2 - 0.171875000000000000e+00_dp)*0.640000000000000000e+02_dp
224 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 20))
225 END IF
226 END IF
227 ELSE
228 IF (x2 <= 0.781250000000000000e-01_dp) THEN
229 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
230 tg2 = (2*x2 - 0.140625000000000000e+00_dp)*0.640000000000000000e+02_dp
231 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 21))
232 ELSE
233 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
234 tg2 = (2*x2 - 0.171875000000000000e+00_dp)*0.640000000000000000e+02_dp
235 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 22))
236 END IF
237 END IF
238 ELSE
239 IF (x1 <= 0.625000000000000000e-01_dp) THEN
240 IF (x2 <= 0.109375000000000000e+00_dp) THEN
241 IF (x1 <= 0.312500000000000000e-01_dp) THEN
242 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
243 tg2 = (2*x2 - 0.203125000000000000e+00_dp)*0.640000000000000000e+02_dp
244 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 23))
245 ELSE
246 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
247 tg2 = (2*x2 - 0.203125000000000000e+00_dp)*0.640000000000000000e+02_dp
248 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 24))
249 END IF
250 ELSE
251 IF (x1 <= 0.312500000000000000e-01_dp) THEN
252 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
253 tg2 = (2*x2 - 0.234375000000000000e+00_dp)*0.640000000000000000e+02_dp
254 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 25))
255 ELSE
256 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
257 tg2 = (2*x2 - 0.234375000000000000e+00_dp)*0.640000000000000000e+02_dp
258 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 26))
259 END IF
260 END IF
261 ELSE
262 IF (x2 <= 0.109375000000000000e+00_dp) THEN
263 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
264 tg2 = (2*x2 - 0.203125000000000000e+00_dp)*0.640000000000000000e+02_dp
265 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 27))
266 ELSE
267 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
268 tg2 = (2*x2 - 0.234375000000000000e+00_dp)*0.640000000000000000e+02_dp
269 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 28))
270 END IF
271 END IF
272 END IF
273 ELSE
274 IF (x1 <= 0.187500000000000000e+00_dp) THEN
275 IF (x2 <= 0.937500000000000000e-01_dp) THEN
276 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
277 tg2 = (2*x2 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
278 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 29))
279 ELSE
280 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
281 tg2 = (2*x2 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
282 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 30))
283 END IF
284 ELSE
285 tg1 = (2*x1 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
286 tg2 = (2*x2 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
287 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 31))
288 END IF
289 END IF
290 END IF
291 ELSE
292 IF (x1 <= 0.375000000000000000e+00_dp) THEN
293 tg1 = (2*x1 - 0.625000000000000000e+00_dp)*0.800000000000000000e+01_dp
294 tg2 = (2*x2 - 0.125000000000000000e+00_dp)*0.800000000000000000e+01_dp
295 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 32))
296 ELSE
297 tg1 = (2*x1 - 0.875000000000000000e+00_dp)*0.800000000000000000e+01_dp
298 tg2 = (2*x2 - 0.125000000000000000e+00_dp)*0.800000000000000000e+01_dp
299 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 33))
300 END IF
301 END IF
302 ELSE
303 IF (x1 <= 0.250000000000000000e+00_dp) THEN
304 IF (x2 <= 0.187500000000000000e+00_dp) THEN
305 IF (x1 <= 0.125000000000000000e+00_dp) THEN
306 IF (x2 <= 0.156250000000000000e+00_dp) THEN
307 IF (x1 <= 0.625000000000000000e-01_dp) THEN
308 IF (x1 <= 0.312500000000000000e-01_dp) THEN
309 IF (x2 <= 0.140625000000000000e+00_dp) THEN
310 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
311 tg2 = (2*x2 - 0.265625000000000000e+00_dp)*0.640000000000000000e+02_dp
312 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 34))
313 ELSE
314 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
315 tg2 = (2*x2 - 0.296875000000000000e+00_dp)*0.640000000000000000e+02_dp
316 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 35))
317 END IF
318 ELSE
319 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
320 tg2 = (2*x2 - 0.281250000000000000e+00_dp)*0.320000000000000000e+02_dp
321 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 36))
322 END IF
323 ELSE
324 IF (x1 <= 0.937500000000000000e-01_dp) THEN
325 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
326 tg2 = (2*x2 - 0.281250000000000000e+00_dp)*0.320000000000000000e+02_dp
327 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 37))
328 ELSE
329 tg1 = (2*x1 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
330 tg2 = (2*x2 - 0.281250000000000000e+00_dp)*0.320000000000000000e+02_dp
331 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 38))
332 END IF
333 END IF
334 ELSE
335 IF (x1 <= 0.625000000000000000e-01_dp) THEN
336 IF (x1 <= 0.312500000000000000e-01_dp) THEN
337 IF (x2 <= 0.171875000000000000e+00_dp) THEN
338 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
339 tg2 = (2*x2 - 0.328125000000000000e+00_dp)*0.640000000000000000e+02_dp
340 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 39))
341 ELSE
342 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
343 tg2 = (2*x2 - 0.359375000000000000e+00_dp)*0.640000000000000000e+02_dp
344 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 40))
345 END IF
346 ELSE
347 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
348 tg2 = (2*x2 - 0.343750000000000000e+00_dp)*0.320000000000000000e+02_dp
349 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 41))
350 END IF
351 ELSE
352 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
353 tg2 = (2*x2 - 0.343750000000000000e+00_dp)*0.320000000000000000e+02_dp
354 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 42))
355 END IF
356 END IF
357 ELSE
358 IF (x1 <= 0.187500000000000000e+00_dp) THEN
359 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
360 tg2 = (2*x2 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
361 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 43))
362 ELSE
363 tg1 = (2*x1 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
364 tg2 = (2*x2 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
365 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 44))
366 END IF
367 END IF
368 ELSE
369 IF (x1 <= 0.125000000000000000e+00_dp) THEN
370 IF (x1 <= 0.625000000000000000e-01_dp) THEN
371 IF (x2 <= 0.218750000000000000e+00_dp) THEN
372 IF (x1 <= 0.312500000000000000e-01_dp) THEN
373 IF (x2 <= 0.203125000000000000e+00_dp) THEN
374 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
375 tg2 = (2*x2 - 0.390625000000000000e+00_dp)*0.640000000000000000e+02_dp
376 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 45))
377 ELSE
378 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
379 tg2 = (2*x2 - 0.421875000000000000e+00_dp)*0.640000000000000000e+02_dp
380 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 46))
381 END IF
382 ELSE
383 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
384 tg2 = (2*x2 - 0.406250000000000000e+00_dp)*0.320000000000000000e+02_dp
385 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 47))
386 END IF
387 ELSE
388 IF (x1 <= 0.312500000000000000e-01_dp) THEN
389 IF (x2 <= 0.234375000000000000e+00_dp) THEN
390 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
391 tg2 = (2*x2 - 0.453125000000000000e+00_dp)*0.640000000000000000e+02_dp
392 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 48))
393 ELSE
394 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
395 tg2 = (2*x2 - 0.484375000000000000e+00_dp)*0.640000000000000000e+02_dp
396 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 49))
397 END IF
398 ELSE
399 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
400 tg2 = (2*x2 - 0.468750000000000000e+00_dp)*0.320000000000000000e+02_dp
401 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 50))
402 END IF
403 END IF
404 ELSE
405 IF (x2 <= 0.218750000000000000e+00_dp) THEN
406 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
407 tg2 = (2*x2 - 0.406250000000000000e+00_dp)*0.320000000000000000e+02_dp
408 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 51))
409 ELSE
410 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
411 tg2 = (2*x2 - 0.468750000000000000e+00_dp)*0.320000000000000000e+02_dp
412 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 52))
413 END IF
414 END IF
415 ELSE
416 IF (x1 <= 0.187500000000000000e+00_dp) THEN
417 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
418 tg2 = (2*x2 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
419 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 53))
420 ELSE
421 tg1 = (2*x1 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
422 tg2 = (2*x2 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
423 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 54))
424 END IF
425 END IF
426 END IF
427 ELSE
428 IF (x1 <= 0.375000000000000000e+00_dp) THEN
429 IF (x1 <= 0.312500000000000000e+00_dp) THEN
430 tg1 = (2*x1 - 0.562500000000000000e+00_dp)*0.160000000000000000e+02_dp
431 tg2 = (2*x2 - 0.375000000000000000e+00_dp)*0.800000000000000000e+01_dp
432 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 55))
433 ELSE
434 tg1 = (2*x1 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
435 tg2 = (2*x2 - 0.375000000000000000e+00_dp)*0.800000000000000000e+01_dp
436 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 56))
437 END IF
438 ELSE
439 tg1 = (2*x1 - 0.875000000000000000e+00_dp)*0.800000000000000000e+01_dp
440 tg2 = (2*x2 - 0.375000000000000000e+00_dp)*0.800000000000000000e+01_dp
441 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 57))
442 END IF
443 END IF
444 END IF
445 ELSE
446 IF (x1 <= 0.250000000000000000e+00_dp) THEN
447 IF (x1 <= 0.125000000000000000e+00_dp) THEN
448 IF (x1 <= 0.625000000000000000e-01_dp) THEN
449 IF (x2 <= 0.375000000000000000e+00_dp) THEN
450 IF (x2 <= 0.312500000000000000e+00_dp) THEN
451 IF (x1 <= 0.312500000000000000e-01_dp) THEN
452 IF (x2 <= 0.281250000000000000e+00_dp) THEN
453 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
454 tg2 = (2*x2 - 0.531250000000000000e+00_dp)*0.320000000000000000e+02_dp
455 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 58))
456 ELSE
457 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
458 tg2 = (2*x2 - 0.593750000000000000e+00_dp)*0.320000000000000000e+02_dp
459 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 59))
460 END IF
461 ELSE
462 IF (x2 <= 0.281250000000000000e+00_dp) THEN
463 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
464 tg2 = (2*x2 - 0.531250000000000000e+00_dp)*0.320000000000000000e+02_dp
465 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 60))
466 ELSE
467 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
468 tg2 = (2*x2 - 0.593750000000000000e+00_dp)*0.320000000000000000e+02_dp
469 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 61))
470 END IF
471 END IF
472 ELSE
473 IF (x1 <= 0.312500000000000000e-01_dp) THEN
474 IF (x2 <= 0.343750000000000000e+00_dp) THEN
475 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
476 tg2 = (2*x2 - 0.656250000000000000e+00_dp)*0.320000000000000000e+02_dp
477 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 62))
478 ELSE
479 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
480 tg2 = (2*x2 - 0.718750000000000000e+00_dp)*0.320000000000000000e+02_dp
481 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 63))
482 END IF
483 ELSE
484 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
485 tg2 = (2*x2 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
486 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 64))
487 END IF
488 END IF
489 ELSE
490 IF (x1 <= 0.312500000000000000e-01_dp) THEN
491 IF (x2 <= 0.437500000000000000e+00_dp) THEN
492 IF (x1 <= 0.156250000000000000e-01_dp) THEN
493 tg1 = (2*x1 - 0.156250000000000000e-01_dp)*0.640000000000000000e+02_dp
494 tg2 = (2*x2 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
495 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 65))
496 ELSE
497 tg1 = (2*x1 - 0.468750000000000000e-01_dp)*0.640000000000000000e+02_dp
498 tg2 = (2*x2 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
499 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 66))
500 END IF
501 ELSE
502 IF (x1 <= 0.156250000000000000e-01_dp) THEN
503 tg1 = (2*x1 - 0.156250000000000000e-01_dp)*0.640000000000000000e+02_dp
504 tg2 = (2*x2 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
505 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 67))
506 ELSE
507 tg1 = (2*x1 - 0.468750000000000000e-01_dp)*0.640000000000000000e+02_dp
508 tg2 = (2*x2 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
509 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 68))
510 END IF
511 END IF
512 ELSE
513 IF (x2 <= 0.437500000000000000e+00_dp) THEN
514 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
515 tg2 = (2*x2 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
516 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 69))
517 ELSE
518 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
519 tg2 = (2*x2 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
520 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 70))
521 END IF
522 END IF
523 END IF
524 ELSE
525 IF (x2 <= 0.375000000000000000e+00_dp) THEN
526 IF (x2 <= 0.312500000000000000e+00_dp) THEN
527 IF (x1 <= 0.937500000000000000e-01_dp) THEN
528 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
529 tg2 = (2*x2 - 0.562500000000000000e+00_dp)*0.160000000000000000e+02_dp
530 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 71))
531 ELSE
532 tg1 = (2*x1 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
533 tg2 = (2*x2 - 0.562500000000000000e+00_dp)*0.160000000000000000e+02_dp
534 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 72))
535 END IF
536 ELSE
537 IF (x1 <= 0.937500000000000000e-01_dp) THEN
538 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
539 tg2 = (2*x2 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
540 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 73))
541 ELSE
542 tg1 = (2*x1 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
543 tg2 = (2*x2 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
544 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 74))
545 END IF
546 END IF
547 ELSE
548 IF (x1 <= 0.937500000000000000e-01_dp) THEN
549 IF (x2 <= 0.437500000000000000e+00_dp) THEN
550 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
551 tg2 = (2*x2 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
552 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 75))
553 ELSE
554 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
555 tg2 = (2*x2 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
556 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 76))
557 END IF
558 ELSE
559 IF (x2 <= 0.437500000000000000e+00_dp) THEN
560 tg1 = (2*x1 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
561 tg2 = (2*x2 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
562 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 77))
563 ELSE
564 tg1 = (2*x1 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
565 tg2 = (2*x2 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
566 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 78))
567 END IF
568 END IF
569 END IF
570 END IF
571 ELSE
572 IF (x2 <= 0.375000000000000000e+00_dp) THEN
573 IF (x1 <= 0.187500000000000000e+00_dp) THEN
574 IF (x2 <= 0.312500000000000000e+00_dp) THEN
575 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
576 tg2 = (2*x2 - 0.562500000000000000e+00_dp)*0.160000000000000000e+02_dp
577 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 79))
578 ELSE
579 IF (x1 <= 0.156250000000000000e+00_dp) THEN
580 tg1 = (2*x1 - 0.281250000000000000e+00_dp)*0.320000000000000000e+02_dp
581 tg2 = (2*x2 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
582 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 80))
583 ELSE
584 tg1 = (2*x1 - 0.343750000000000000e+00_dp)*0.320000000000000000e+02_dp
585 tg2 = (2*x2 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
586 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 81))
587 END IF
588 END IF
589 ELSE
590 IF (x2 <= 0.312500000000000000e+00_dp) THEN
591 tg1 = (2*x1 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
592 tg2 = (2*x2 - 0.562500000000000000e+00_dp)*0.160000000000000000e+02_dp
593 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 82))
594 ELSE
595 tg1 = (2*x1 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
596 tg2 = (2*x2 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
597 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 83))
598 END IF
599 END IF
600 ELSE
601 IF (x1 <= 0.187500000000000000e+00_dp) THEN
602 IF (x2 <= 0.437500000000000000e+00_dp) THEN
603 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
604 tg2 = (2*x2 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
605 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 84))
606 ELSE
607 IF (x1 <= 0.156250000000000000e+00_dp) THEN
608 tg1 = (2*x1 - 0.281250000000000000e+00_dp)*0.320000000000000000e+02_dp
609 tg2 = (2*x2 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
610 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 85))
611 ELSE
612 tg1 = (2*x1 - 0.343750000000000000e+00_dp)*0.320000000000000000e+02_dp
613 tg2 = (2*x2 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
614 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 86))
615 END IF
616 END IF
617 ELSE
618 IF (x1 <= 0.218750000000000000e+00_dp) THEN
619 tg1 = (2*x1 - 0.406250000000000000e+00_dp)*0.320000000000000000e+02_dp
620 tg2 = (2*x2 - 0.875000000000000000e+00_dp)*0.800000000000000000e+01_dp
621 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 87))
622 ELSE
623 tg1 = (2*x1 - 0.468750000000000000e+00_dp)*0.320000000000000000e+02_dp
624 tg2 = (2*x2 - 0.875000000000000000e+00_dp)*0.800000000000000000e+01_dp
625 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 88))
626 END IF
627 END IF
628 END IF
629 END IF
630 ELSE
631 IF (x1 <= 0.375000000000000000e+00_dp) THEN
632 IF (x2 <= 0.375000000000000000e+00_dp) THEN
633 IF (x1 <= 0.312500000000000000e+00_dp) THEN
634 tg1 = (2*x1 - 0.562500000000000000e+00_dp)*0.160000000000000000e+02_dp
635 tg2 = (2*x2 - 0.625000000000000000e+00_dp)*0.800000000000000000e+01_dp
636 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 89))
637 ELSE
638 tg1 = (2*x1 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
639 tg2 = (2*x2 - 0.625000000000000000e+00_dp)*0.800000000000000000e+01_dp
640 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 90))
641 END IF
642 ELSE
643 IF (x1 <= 0.312500000000000000e+00_dp) THEN
644 IF (x1 <= 0.281250000000000000e+00_dp) THEN
645 tg1 = (2*x1 - 0.531250000000000000e+00_dp)*0.320000000000000000e+02_dp
646 tg2 = (2*x2 - 0.875000000000000000e+00_dp)*0.800000000000000000e+01_dp
647 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 91))
648 ELSE
649 tg1 = (2*x1 - 0.593750000000000000e+00_dp)*0.320000000000000000e+02_dp
650 tg2 = (2*x2 - 0.875000000000000000e+00_dp)*0.800000000000000000e+01_dp
651 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 92))
652 END IF
653 ELSE
654 tg1 = (2*x1 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
655 tg2 = (2*x2 - 0.875000000000000000e+00_dp)*0.800000000000000000e+01_dp
656 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 93))
657 END IF
658 END IF
659 ELSE
660 IF (x1 <= 0.437500000000000000e+00_dp) THEN
661 tg1 = (2*x1 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
662 tg2 = (2*x2 - 0.750000000000000000e+00_dp)*0.400000000000000000e+01_dp
663 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 94))
664 ELSE
665 tg1 = (2*x1 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
666 tg2 = (2*x2 - 0.750000000000000000e+00_dp)*0.400000000000000000e+01_dp
667 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 95))
668 END IF
669 END IF
670 END IF
671 END IF
672 ELSE
673 IF (x1 <= 0.250000000000000000e+00_dp) THEN
674 IF (x1 <= 0.125000000000000000e+00_dp) THEN
675 IF (x1 <= 0.625000000000000000e-01_dp) THEN
676 IF (x1 <= 0.312500000000000000e-01_dp) THEN
677 IF (x1 <= 0.156250000000000000e-01_dp) THEN
678 IF (x1 <= 0.781250000000000000e-02_dp) THEN
679 IF (x2 <= 0.750000000000000000e+00_dp) THEN
680 tg1 = (2*x1 - 0.781250000000000000e-02_dp)*0.128000000000000000e+03_dp
681 tg2 = (2*x2 - 0.125000000000000000e+01_dp)*0.400000000000000000e+01_dp
682 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 96))
683 ELSE
684 tg1 = (2*x1 - 0.781250000000000000e-02_dp)*0.128000000000000000e+03_dp
685 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
686 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 97))
687 END IF
688 ELSE
689 IF (x2 <= 0.750000000000000000e+00_dp) THEN
690 tg1 = (2*x1 - 0.234375000000000000e-01_dp)*0.128000000000000000e+03_dp
691 tg2 = (2*x2 - 0.125000000000000000e+01_dp)*0.400000000000000000e+01_dp
692 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 98))
693 ELSE
694 tg1 = (2*x1 - 0.234375000000000000e-01_dp)*0.128000000000000000e+03_dp
695 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
696 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 99))
697 END IF
698 END IF
699 ELSE
700 IF (x2 <= 0.750000000000000000e+00_dp) THEN
701 tg1 = (2*x1 - 0.468750000000000000e-01_dp)*0.640000000000000000e+02_dp
702 tg2 = (2*x2 - 0.125000000000000000e+01_dp)*0.400000000000000000e+01_dp
703 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 100))
704 ELSE
705 tg1 = (2*x1 - 0.468750000000000000e-01_dp)*0.640000000000000000e+02_dp
706 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
707 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 101))
708 END IF
709 END IF
710 ELSE
711 IF (x2 <= 0.750000000000000000e+00_dp) THEN
712 IF (x2 <= 0.625000000000000000e+00_dp) THEN
713 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
714 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
715 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 102))
716 ELSE
717 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
718 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
719 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 103))
720 END IF
721 ELSE
722 IF (x1 <= 0.468750000000000000e-01_dp) THEN
723 tg1 = (2*x1 - 0.781250000000000000e-01_dp)*0.640000000000000000e+02_dp
724 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
725 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 104))
726 ELSE
727 tg1 = (2*x1 - 0.109375000000000000e+00_dp)*0.640000000000000000e+02_dp
728 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
729 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 105))
730 END IF
731 END IF
732 END IF
733 ELSE
734 IF (x2 <= 0.750000000000000000e+00_dp) THEN
735 IF (x2 <= 0.625000000000000000e+00_dp) THEN
736 IF (x1 <= 0.937500000000000000e-01_dp) THEN
737 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
738 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
739 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 106))
740 ELSE
741 tg1 = (2*x1 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
742 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
743 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 107))
744 END IF
745 ELSE
746 IF (x1 <= 0.937500000000000000e-01_dp) THEN
747 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
748 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
749 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 108))
750 ELSE
751 tg1 = (2*x1 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
752 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
753 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 109))
754 END IF
755 END IF
756 ELSE
757 IF (x1 <= 0.937500000000000000e-01_dp) THEN
758 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
759 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
760 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 110))
761 ELSE
762 tg1 = (2*x1 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
763 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
764 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 111))
765 END IF
766 END IF
767 END IF
768 ELSE
769 IF (x2 <= 0.750000000000000000e+00_dp) THEN
770 IF (x2 <= 0.625000000000000000e+00_dp) THEN
771 IF (x1 <= 0.187500000000000000e+00_dp) THEN
772 IF (x1 <= 0.156250000000000000e+00_dp) THEN
773 tg1 = (2*x1 - 0.281250000000000000e+00_dp)*0.320000000000000000e+02_dp
774 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
775 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 112))
776 ELSE
777 tg1 = (2*x1 - 0.343750000000000000e+00_dp)*0.320000000000000000e+02_dp
778 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
779 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 113))
780 END IF
781 ELSE
782 IF (x1 <= 0.218750000000000000e+00_dp) THEN
783 tg1 = (2*x1 - 0.406250000000000000e+00_dp)*0.320000000000000000e+02_dp
784 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
785 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 114))
786 ELSE
787 tg1 = (2*x1 - 0.468750000000000000e+00_dp)*0.320000000000000000e+02_dp
788 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
789 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 115))
790 END IF
791 END IF
792 ELSE
793 IF (x1 <= 0.187500000000000000e+00_dp) THEN
794 IF (x1 <= 0.156250000000000000e+00_dp) THEN
795 tg1 = (2*x1 - 0.281250000000000000e+00_dp)*0.320000000000000000e+02_dp
796 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
797 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 116))
798 ELSE
799 tg1 = (2*x1 - 0.343750000000000000e+00_dp)*0.320000000000000000e+02_dp
800 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
801 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 117))
802 END IF
803 ELSE
804 IF (x1 <= 0.218750000000000000e+00_dp) THEN
805 tg1 = (2*x1 - 0.406250000000000000e+00_dp)*0.320000000000000000e+02_dp
806 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
807 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 118))
808 ELSE
809 tg1 = (2*x1 - 0.468750000000000000e+00_dp)*0.320000000000000000e+02_dp
810 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
811 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 119))
812 END IF
813 END IF
814 END IF
815 ELSE
816 IF (x1 <= 0.187500000000000000e+00_dp) THEN
817 IF (x2 <= 0.875000000000000000e+00_dp) THEN
818 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
819 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
820 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 120))
821 ELSE
822 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
823 tg2 = (2*x2 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
824 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 121))
825 END IF
826 ELSE
827 IF (x2 <= 0.875000000000000000e+00_dp) THEN
828 IF (x1 <= 0.218750000000000000e+00_dp) THEN
829 tg1 = (2*x1 - 0.406250000000000000e+00_dp)*0.320000000000000000e+02_dp
830 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
831 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 122))
832 ELSE
833 tg1 = (2*x1 - 0.468750000000000000e+00_dp)*0.320000000000000000e+02_dp
834 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
835 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 123))
836 END IF
837 ELSE
838 tg1 = (2*x1 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
839 tg2 = (2*x2 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
840 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 124))
841 END IF
842 END IF
843 END IF
844 END IF
845 ELSE
846 IF (x1 <= 0.375000000000000000e+00_dp) THEN
847 IF (x2 <= 0.750000000000000000e+00_dp) THEN
848 IF (x1 <= 0.312500000000000000e+00_dp) THEN
849 IF (x2 <= 0.625000000000000000e+00_dp) THEN
850 IF (x1 <= 0.281250000000000000e+00_dp) THEN
851 tg1 = (2*x1 - 0.531250000000000000e+00_dp)*0.320000000000000000e+02_dp
852 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
853 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 125))
854 ELSE
855 tg1 = (2*x1 - 0.593750000000000000e+00_dp)*0.320000000000000000e+02_dp
856 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
857 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 126))
858 END IF
859 ELSE
860 IF (x1 <= 0.281250000000000000e+00_dp) THEN
861 tg1 = (2*x1 - 0.531250000000000000e+00_dp)*0.320000000000000000e+02_dp
862 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
863 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 127))
864 ELSE
865 tg1 = (2*x1 - 0.593750000000000000e+00_dp)*0.320000000000000000e+02_dp
866 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
867 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 128))
868 END IF
869 END IF
870 ELSE
871 IF (x2 <= 0.625000000000000000e+00_dp) THEN
872 tg1 = (2*x1 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
873 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
874 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 129))
875 ELSE
876 IF (x1 <= 0.343750000000000000e+00_dp) THEN
877 tg1 = (2*x1 - 0.656250000000000000e+00_dp)*0.320000000000000000e+02_dp
878 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
879 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 130))
880 ELSE
881 tg1 = (2*x1 - 0.718750000000000000e+00_dp)*0.320000000000000000e+02_dp
882 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
883 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 131))
884 END IF
885 END IF
886 END IF
887 ELSE
888 IF (x1 <= 0.312500000000000000e+00_dp) THEN
889 IF (x2 <= 0.875000000000000000e+00_dp) THEN
890 IF (x1 <= 0.281250000000000000e+00_dp) THEN
891 tg1 = (2*x1 - 0.531250000000000000e+00_dp)*0.320000000000000000e+02_dp
892 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
893 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 132))
894 ELSE
895 tg1 = (2*x1 - 0.593750000000000000e+00_dp)*0.320000000000000000e+02_dp
896 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
897 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 133))
898 END IF
899 ELSE
900 IF (x1 <= 0.281250000000000000e+00_dp) THEN
901 tg1 = (2*x1 - 0.531250000000000000e+00_dp)*0.320000000000000000e+02_dp
902 tg2 = (2*x2 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
903 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 134))
904 ELSE
905 tg1 = (2*x1 - 0.593750000000000000e+00_dp)*0.320000000000000000e+02_dp
906 tg2 = (2*x2 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
907 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 135))
908 END IF
909 END IF
910 ELSE
911 IF (x2 <= 0.875000000000000000e+00_dp) THEN
912 IF (x1 <= 0.343750000000000000e+00_dp) THEN
913 tg1 = (2*x1 - 0.656250000000000000e+00_dp)*0.320000000000000000e+02_dp
914 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
915 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 136))
916 ELSE
917 tg1 = (2*x1 - 0.718750000000000000e+00_dp)*0.320000000000000000e+02_dp
918 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
919 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 137))
920 END IF
921 ELSE
922 tg1 = (2*x1 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
923 tg2 = (2*x2 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
924 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 138))
925 END IF
926 END IF
927 END IF
928 ELSE
929 IF (x2 <= 0.750000000000000000e+00_dp) THEN
930 IF (x1 <= 0.437500000000000000e+00_dp) THEN
931 IF (x2 <= 0.625000000000000000e+00_dp) THEN
932 tg1 = (2*x1 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
933 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
934 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 139))
935 ELSE
936 tg1 = (2*x1 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
937 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
938 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 140))
939 END IF
940 ELSE
941 tg1 = (2*x1 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
942 tg2 = (2*x2 - 0.125000000000000000e+01_dp)*0.400000000000000000e+01_dp
943 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 141))
944 END IF
945 ELSE
946 IF (x1 <= 0.437500000000000000e+00_dp) THEN
947 IF (x2 <= 0.875000000000000000e+00_dp) THEN
948 tg1 = (2*x1 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
949 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
950 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 142))
951 ELSE
952 tg1 = (2*x1 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
953 tg2 = (2*x2 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
954 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 143))
955 END IF
956 ELSE
957 IF (x2 <= 0.875000000000000000e+00_dp) THEN
958 tg1 = (2*x1 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
959 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
960 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 144))
961 ELSE
962 tg1 = (2*x1 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
963 tg2 = (2*x2 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
964 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 145))
965 END IF
966 END IF
967 END IF
968 END IF
969 END IF
970 END IF
971 ELSE
972 IF (x1 <= 0.750000000000000000e+00_dp) THEN
973 IF (x2 <= 0.500000000000000000e+00_dp) THEN
974 IF (x1 <= 0.625000000000000000e+00_dp) THEN
975 IF (x2 <= 0.250000000000000000e+00_dp) THEN
976 tg1 = (2*x1 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
977 tg2 = (2*x2 - 0.250000000000000000e+00_dp)*0.400000000000000000e+01_dp
978 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 146))
979 ELSE
980 tg1 = (2*x1 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
981 tg2 = (2*x2 - 0.750000000000000000e+00_dp)*0.400000000000000000e+01_dp
982 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 147))
983 END IF
984 ELSE
985 tg1 = (2*x1 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
986 tg2 = (2*x2 - 0.500000000000000000e+00_dp)*0.200000000000000000e+01_dp
987 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 148))
988 END IF
989 ELSE
990 IF (x1 <= 0.625000000000000000e+00_dp) THEN
991 IF (x2 <= 0.750000000000000000e+00_dp) THEN
992 IF (x1 <= 0.562500000000000000e+00_dp) THEN
993 tg1 = (2*x1 - 0.106250000000000000e+01_dp)*0.160000000000000000e+02_dp
994 tg2 = (2*x2 - 0.125000000000000000e+01_dp)*0.400000000000000000e+01_dp
995 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 149))
996 ELSE
997 tg1 = (2*x1 - 0.118750000000000000e+01_dp)*0.160000000000000000e+02_dp
998 tg2 = (2*x2 - 0.125000000000000000e+01_dp)*0.400000000000000000e+01_dp
999 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 150))
1000 END IF
1001 ELSE
1002 IF (x1 <= 0.562500000000000000e+00_dp) THEN
1003 tg1 = (2*x1 - 0.106250000000000000e+01_dp)*0.160000000000000000e+02_dp
1004 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
1005 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 151))
1006 ELSE
1007 tg1 = (2*x1 - 0.118750000000000000e+01_dp)*0.160000000000000000e+02_dp
1008 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
1009 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 152))
1010 END IF
1011 END IF
1012 ELSE
1013 IF (x1 <= 0.687500000000000000e+00_dp) THEN
1014 tg1 = (2*x1 - 0.131250000000000000e+01_dp)*0.160000000000000000e+02_dp
1015 tg2 = (2*x2 - 0.150000000000000000e+01_dp)*0.200000000000000000e+01_dp
1016 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 153))
1017 ELSE
1018 tg1 = (2*x1 - 0.143750000000000000e+01_dp)*0.160000000000000000e+02_dp
1019 tg2 = (2*x2 - 0.150000000000000000e+01_dp)*0.200000000000000000e+01_dp
1020 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 154))
1021 END IF
1022 END IF
1023 END IF
1024 ELSE
1025 tg1 = (2*x1 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
1026 tg2 = (2*x2 - 0.100000000000000000e+01_dp)*0.100000000000000000e+01_dp
1027 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 155))
1028 END IF
1029 END IF
1030 ELSE
1031 IF (t < lower) THEN
1032 use_gamma = .true.
1033 RETURN
1034 END IF
1035 x2 = 11.0_dp/r
1036 x1 = (t - lower)/(upper - lower)
1037 IF (x1 <= 0.500000000000000000e+00_dp) THEN
1038 IF (x1 <= 0.250000000000000000e+00_dp) THEN
1039 IF (x2 <= 0.500000000000000000e+00_dp) THEN
1040 IF (x1 <= 0.125000000000000000e+00_dp) THEN
1041 IF (x2 <= 0.250000000000000000e+00_dp) THEN
1042 tg1 = (2*x1 - 0.125000000000000000e+00_dp)*0.800000000000000000e+01_dp
1043 tg2 = (2*x2 - 0.250000000000000000e+00_dp)*0.400000000000000000e+01_dp
1044 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 156))
1045 ELSE
1046 tg1 = (2*x1 - 0.125000000000000000e+00_dp)*0.800000000000000000e+01_dp
1047 tg2 = (2*x2 - 0.750000000000000000e+00_dp)*0.400000000000000000e+01_dp
1048 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 157))
1049 END IF
1050 ELSE
1051 tg1 = (2*x1 - 0.375000000000000000e+00_dp)*0.800000000000000000e+01_dp
1052 tg2 = (2*x2 - 0.500000000000000000e+00_dp)*0.200000000000000000e+01_dp
1053 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 158))
1054 END IF
1055 ELSE
1056 IF (x1 <= 0.125000000000000000e+00_dp) THEN
1057 IF (x2 <= 0.750000000000000000e+00_dp) THEN
1058 IF (x2 <= 0.625000000000000000e+00_dp) THEN
1059 tg1 = (2*x1 - 0.125000000000000000e+00_dp)*0.800000000000000000e+01_dp
1060 tg2 = (2*x2 - 0.112500000000000000e+01_dp)*0.800000000000000000e+01_dp
1061 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 159))
1062 ELSE
1063 IF (x1 <= 0.625000000000000000e-01_dp) THEN
1064 tg1 = (2*x1 - 0.625000000000000000e-01_dp)*0.160000000000000000e+02_dp
1065 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
1066 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 160))
1067 ELSE
1068 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
1069 tg2 = (2*x2 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
1070 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 161))
1071 END IF
1072 END IF
1073 ELSE
1074 IF (x1 <= 0.625000000000000000e-01_dp) THEN
1075 IF (x2 <= 0.875000000000000000e+00_dp) THEN
1076 IF (x1 <= 0.312500000000000000e-01_dp) THEN
1077 IF (x2 <= 0.812500000000000000e+00_dp) THEN
1078 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
1079 tg2 = (2*x2 - 0.156250000000000000e+01_dp)*0.160000000000000000e+02_dp
1080 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 162))
1081 ELSE
1082 tg1 = (2*x1 - 0.312500000000000000e-01_dp)*0.320000000000000000e+02_dp
1083 tg2 = (2*x2 - 0.168750000000000000e+01_dp)*0.160000000000000000e+02_dp
1084 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 163))
1085 END IF
1086 ELSE
1087 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
1088 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
1089 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 164))
1090 END IF
1091 ELSE
1092 IF (x1 <= 0.312500000000000000e-01_dp) THEN
1093 IF (x2 <= 0.937500000000000000e+00_dp) THEN
1094 IF (x1 <= 0.156250000000000000e-01_dp) THEN
1095 IF (x2 <= 0.906250000000000000e+00_dp) THEN
1096 tg1 = (2*x1 - 0.156250000000000000e-01_dp)*0.640000000000000000e+02_dp
1097 tg2 = (2*x2 - 0.178125000000000000e+01_dp)*0.320000000000000000e+02_dp
1098 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 165))
1099 ELSE
1100 tg1 = (2*x1 - 0.156250000000000000e-01_dp)*0.640000000000000000e+02_dp
1101 tg2 = (2*x2 - 0.184375000000000000e+01_dp)*0.320000000000000000e+02_dp
1102 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 166))
1103 END IF
1104 ELSE
1105 tg1 = (2*x1 - 0.468750000000000000e-01_dp)*0.640000000000000000e+02_dp
1106 tg2 = (2*x2 - 0.181250000000000000e+01_dp)*0.160000000000000000e+02_dp
1107 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 167))
1108 END IF
1109 ELSE
1110 IF (x1 <= 0.156250000000000000e-01_dp) THEN
1111 IF (x2 <= 0.968750000000000000e+00_dp) THEN
1112 IF (x1 <= 0.781250000000000000e-02_dp) THEN
1113 IF (x2 <= 0.953125000000000000e+00_dp) THEN
1114 tg1 = (2*x1 - 0.781250000000000000e-02_dp)*0.128000000000000000e+03_dp
1115 tg2 = (2*x2 - 0.189062500000000000e+01_dp)*0.640000000000000000e+02_dp
1116 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 168))
1117 ELSE
1118 tg1 = (2*x1 - 0.781250000000000000e-02_dp)*0.128000000000000000e+03_dp
1119 tg2 = (2*x2 - 0.192187500000000000e+01_dp)*0.640000000000000000e+02_dp
1120 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 169))
1121 END IF
1122 ELSE
1123 tg1 = (2*x1 - 0.234375000000000000e-01_dp)*0.128000000000000000e+03_dp
1124 tg2 = (2*x2 - 0.190625000000000000e+01_dp)*0.320000000000000000e+02_dp
1125 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 170))
1126 END IF
1127 ELSE
1128 IF (x1 <= 0.781250000000000000e-02_dp) THEN
1129 IF (x2 <= 0.984375000000000000e+00_dp) THEN
1130 tg1 = (2*x1 - 0.781250000000000000e-02_dp)*0.128000000000000000e+03_dp
1131 tg2 = (2*x2 - 0.195312500000000000e+01_dp)*0.640000000000000000e+02_dp
1132 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 171))
1133 ELSE
1134 tg1 = (2*x1 - 0.781250000000000000e-02_dp)*0.128000000000000000e+03_dp
1135 tg2 = (2*x2 - 0.198437500000000000e+01_dp)*0.640000000000000000e+02_dp
1136 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 172))
1137 END IF
1138 ELSE
1139 IF (x2 <= 0.984375000000000000e+00_dp) THEN
1140 tg1 = (2*x1 - 0.234375000000000000e-01_dp)*0.128000000000000000e+03_dp
1141 tg2 = (2*x2 - 0.195312500000000000e+01_dp)*0.640000000000000000e+02_dp
1142 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 173))
1143 ELSE
1144 tg1 = (2*x1 - 0.234375000000000000e-01_dp)*0.128000000000000000e+03_dp
1145 tg2 = (2*x2 - 0.198437500000000000e+01_dp)*0.640000000000000000e+02_dp
1146 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 174))
1147 END IF
1148 END IF
1149 END IF
1150 ELSE
1151 IF (x2 <= 0.968750000000000000e+00_dp) THEN
1152 tg1 = (2*x1 - 0.468750000000000000e-01_dp)*0.640000000000000000e+02_dp
1153 tg2 = (2*x2 - 0.190625000000000000e+01_dp)*0.320000000000000000e+02_dp
1154 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 175))
1155 ELSE
1156 IF (x1 <= 0.234375000000000000e-01_dp) THEN
1157 tg1 = (2*x1 - 0.390625000000000000e-01_dp)*0.128000000000000000e+03_dp
1158 tg2 = (2*x2 - 0.196875000000000000e+01_dp)*0.320000000000000000e+02_dp
1159 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 176))
1160 ELSE
1161 tg1 = (2*x1 - 0.546875000000000000e-01_dp)*0.128000000000000000e+03_dp
1162 tg2 = (2*x2 - 0.196875000000000000e+01_dp)*0.320000000000000000e+02_dp
1163 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 177))
1164 END IF
1165 END IF
1166 END IF
1167 END IF
1168 ELSE
1169 IF (x2 <= 0.937500000000000000e+00_dp) THEN
1170 tg1 = (2*x1 - 0.937500000000000000e-01_dp)*0.320000000000000000e+02_dp
1171 tg2 = (2*x2 - 0.181250000000000000e+01_dp)*0.160000000000000000e+02_dp
1172 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 178))
1173 ELSE
1174 IF (x1 <= 0.468750000000000000e-01_dp) THEN
1175 IF (x2 <= 0.968750000000000000e+00_dp) THEN
1176 tg1 = (2*x1 - 0.781250000000000000e-01_dp)*0.640000000000000000e+02_dp
1177 tg2 = (2*x2 - 0.190625000000000000e+01_dp)*0.320000000000000000e+02_dp
1178 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 179))
1179 ELSE
1180 tg1 = (2*x1 - 0.781250000000000000e-01_dp)*0.640000000000000000e+02_dp
1181 tg2 = (2*x2 - 0.196875000000000000e+01_dp)*0.320000000000000000e+02_dp
1182 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 180))
1183 END IF
1184 ELSE
1185 tg1 = (2*x1 - 0.109375000000000000e+00_dp)*0.640000000000000000e+02_dp
1186 tg2 = (2*x2 - 0.193750000000000000e+01_dp)*0.160000000000000000e+02_dp
1187 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 181))
1188 END IF
1189 END IF
1190 END IF
1191 END IF
1192 ELSE
1193 IF (x2 <= 0.875000000000000000e+00_dp) THEN
1194 tg1 = (2*x1 - 0.187500000000000000e+00_dp)*0.160000000000000000e+02_dp
1195 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
1196 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 182))
1197 ELSE
1198 IF (x1 <= 0.937500000000000000e-01_dp) THEN
1199 IF (x2 <= 0.937500000000000000e+00_dp) THEN
1200 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
1201 tg2 = (2*x2 - 0.181250000000000000e+01_dp)*0.160000000000000000e+02_dp
1202 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 183))
1203 ELSE
1204 tg1 = (2*x1 - 0.156250000000000000e+00_dp)*0.320000000000000000e+02_dp
1205 tg2 = (2*x2 - 0.193750000000000000e+01_dp)*0.160000000000000000e+02_dp
1206 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 184))
1207 END IF
1208 ELSE
1209 tg1 = (2*x1 - 0.218750000000000000e+00_dp)*0.320000000000000000e+02_dp
1210 tg2 = (2*x2 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
1211 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 185))
1212 END IF
1213 END IF
1214 END IF
1215 END IF
1216 ELSE
1217 IF (x2 <= 0.750000000000000000e+00_dp) THEN
1218 tg1 = (2*x1 - 0.375000000000000000e+00_dp)*0.800000000000000000e+01_dp
1219 tg2 = (2*x2 - 0.125000000000000000e+01_dp)*0.400000000000000000e+01_dp
1220 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 186))
1221 ELSE
1222 IF (x1 <= 0.187500000000000000e+00_dp) THEN
1223 IF (x2 <= 0.875000000000000000e+00_dp) THEN
1224 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
1225 tg2 = (2*x2 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
1226 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 187))
1227 ELSE
1228 tg1 = (2*x1 - 0.312500000000000000e+00_dp)*0.160000000000000000e+02_dp
1229 tg2 = (2*x2 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
1230 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 188))
1231 END IF
1232 ELSE
1233 tg1 = (2*x1 - 0.437500000000000000e+00_dp)*0.160000000000000000e+02_dp
1234 tg2 = (2*x2 - 0.175000000000000000e+01_dp)*0.400000000000000000e+01_dp
1235 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 189))
1236 END IF
1237 END IF
1238 END IF
1239 END IF
1240 ELSE
1241 IF (x1 <= 0.375000000000000000e+00_dp) THEN
1242 IF (x1 <= 0.312500000000000000e+00_dp) THEN
1243 IF (x1 <= 0.281250000000000000e+00_dp) THEN
1244 tg1 = (2*x1 - 0.531250000000000000e+00_dp)*0.320000000000000000e+02_dp
1245 tg2 = (2*x2 - 0.100000000000000000e+01_dp)*0.100000000000000000e+01_dp
1246 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 190))
1247 ELSE
1248 tg1 = (2*x1 - 0.593750000000000000e+00_dp)*0.320000000000000000e+02_dp
1249 tg2 = (2*x2 - 0.100000000000000000e+01_dp)*0.100000000000000000e+01_dp
1250 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 191))
1251 END IF
1252 ELSE
1253 IF (x2 <= 0.500000000000000000e+00_dp) THEN
1254 tg1 = (2*x1 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
1255 tg2 = (2*x2 - 0.500000000000000000e+00_dp)*0.200000000000000000e+01_dp
1256 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 192))
1257 ELSE
1258 tg1 = (2*x1 - 0.687500000000000000e+00_dp)*0.160000000000000000e+02_dp
1259 tg2 = (2*x2 - 0.150000000000000000e+01_dp)*0.200000000000000000e+01_dp
1260 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 193))
1261 END IF
1262 END IF
1263 ELSE
1264 IF (x1 <= 0.437500000000000000e+00_dp) THEN
1265 IF (x2 <= 0.500000000000000000e+00_dp) THEN
1266 tg1 = (2*x1 - 0.812500000000000000e+00_dp)*0.160000000000000000e+02_dp
1267 tg2 = (2*x2 - 0.500000000000000000e+00_dp)*0.200000000000000000e+01_dp
1268 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 194))
1269 ELSE
1270 IF (x1 <= 0.406250000000000000e+00_dp) THEN
1271 tg1 = (2*x1 - 0.781250000000000000e+00_dp)*0.320000000000000000e+02_dp
1272 tg2 = (2*x2 - 0.150000000000000000e+01_dp)*0.200000000000000000e+01_dp
1273 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 195))
1274 ELSE
1275 tg1 = (2*x1 - 0.843750000000000000e+00_dp)*0.320000000000000000e+02_dp
1276 tg2 = (2*x2 - 0.150000000000000000e+01_dp)*0.200000000000000000e+01_dp
1277 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 196))
1278 END IF
1279 END IF
1280 ELSE
1281 IF (x2 <= 0.500000000000000000e+00_dp) THEN
1282 tg1 = (2*x1 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
1283 tg2 = (2*x2 - 0.500000000000000000e+00_dp)*0.200000000000000000e+01_dp
1284 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 197))
1285 ELSE
1286 tg1 = (2*x1 - 0.937500000000000000e+00_dp)*0.160000000000000000e+02_dp
1287 tg2 = (2*x2 - 0.150000000000000000e+01_dp)*0.200000000000000000e+01_dp
1288 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 198))
1289 END IF
1290 END IF
1291 END IF
1292 END IF
1293 ELSE
1294 IF (x1 <= 0.750000000000000000e+00_dp) THEN
1295 IF (x1 <= 0.625000000000000000e+00_dp) THEN
1296 IF (x2 <= 0.500000000000000000e+00_dp) THEN
1297 IF (x1 <= 0.562500000000000000e+00_dp) THEN
1298 tg1 = (2*x1 - 0.106250000000000000e+01_dp)*0.160000000000000000e+02_dp
1299 tg2 = (2*x2 - 0.500000000000000000e+00_dp)*0.200000000000000000e+01_dp
1300 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 199))
1301 ELSE
1302 tg1 = (2*x1 - 0.118750000000000000e+01_dp)*0.160000000000000000e+02_dp
1303 tg2 = (2*x2 - 0.500000000000000000e+00_dp)*0.200000000000000000e+01_dp
1304 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 200))
1305 END IF
1306 ELSE
1307 IF (x1 <= 0.562500000000000000e+00_dp) THEN
1308 tg1 = (2*x1 - 0.106250000000000000e+01_dp)*0.160000000000000000e+02_dp
1309 tg2 = (2*x2 - 0.150000000000000000e+01_dp)*0.200000000000000000e+01_dp
1310 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 201))
1311 ELSE
1312 tg1 = (2*x1 - 0.118750000000000000e+01_dp)*0.160000000000000000e+02_dp
1313 tg2 = (2*x2 - 0.150000000000000000e+01_dp)*0.200000000000000000e+01_dp
1314 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 202))
1315 END IF
1316 END IF
1317 ELSE
1318 IF (x2 <= 0.500000000000000000e+00_dp) THEN
1319 IF (x1 <= 0.687500000000000000e+00_dp) THEN
1320 tg1 = (2*x1 - 0.131250000000000000e+01_dp)*0.160000000000000000e+02_dp
1321 tg2 = (2*x2 - 0.500000000000000000e+00_dp)*0.200000000000000000e+01_dp
1322 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 203))
1323 ELSE
1324 tg1 = (2*x1 - 0.143750000000000000e+01_dp)*0.160000000000000000e+02_dp
1325 tg2 = (2*x2 - 0.500000000000000000e+00_dp)*0.200000000000000000e+01_dp
1326 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 204))
1327 END IF
1328 ELSE
1329 tg1 = (2*x1 - 0.137500000000000000e+01_dp)*0.800000000000000000e+01_dp
1330 tg2 = (2*x2 - 0.150000000000000000e+01_dp)*0.200000000000000000e+01_dp
1331 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 205))
1332 END IF
1333 END IF
1334 ELSE
1335 IF (x1 <= 0.875000000000000000e+00_dp) THEN
1336 tg1 = (2*x1 - 0.162500000000000000e+01_dp)*0.800000000000000000e+01_dp
1337 tg2 = (2*x2 - 0.100000000000000000e+01_dp)*0.100000000000000000e+01_dp
1338 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 206))
1339 ELSE
1340 tg1 = (2*x1 - 0.187500000000000000e+01_dp)*0.800000000000000000e+01_dp
1341 tg2 = (2*x2 - 0.100000000000000000e+01_dp)*0.100000000000000000e+01_dp
1342 CALL pd2val(res, nderiv, tg1, tg2, c0(1, 207))
1343 END IF
1344 END IF
1345 END IF
1346 END IF
1347 END SUBROUTINE t_c_g0_n
1348
1349! **************************************************************************************************
1350!> \brief ...
1351!> \param Nder the number of derivatives that will actually be used
1352!> \param iunit contains the data file to initialize the table
1353!> \param mepos ...
1354!> \param group ...
1355! **************************************************************************************************
1356 SUBROUTINE init(Nder, iunit, mepos, group)
1357 INTEGER, INTENT(IN) :: nder, iunit, mepos
1358
1359 CLASS(mp_comm_type), INTENT(IN) :: group
1360
1361 INTEGER :: i
1362 REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: chunk
1363
1364 patches = 207
1365 IF (nder > nderiv_max) cpabort("T_C_G0 init failed")
1366 nderiv_init = nder
1367 IF (ALLOCATED(c0)) DEALLOCATE (c0)
1368 ! round up to a multiple of 32 to give some generous alignment for each C0
1369 ALLOCATE (c0(32*((31 + (nder + 1)*(degree + 1)*(degree + 2)/2)/32), patches))
1370 ! init mpi'ed buffers to silence warnings under valgrind
1371 c0 = 1.0e99_dp
1372 IF (mepos == 0) THEN
1373 ALLOCATE (chunk((nderiv_max + 1)*(degree + 1)*(degree + 2)/2))
1374 DO i = 1, patches
1375 READ (iunit, *) chunk
1376 c0(1:(nder + 1)*(degree + 1)*(degree + 2)/2, i) = chunk(1:(nder + 1)*(degree + 1)*(degree + 2)/2)
1377 END DO
1378 DEALLOCATE (chunk)
1379 END IF
1380 CALL group%bcast(c0, 0)
1381
1382 END SUBROUTINE init
1383
1384! **************************************************************************************************
1385!> \brief ...
1386! **************************************************************************************************
1387 SUBROUTINE free_c0()
1388 IF (ALLOCATED(c0)) DEALLOCATE (c0)
1389 nderiv_init = -1
1390 END SUBROUTINE free_c0
1391
1392! **************************************************************************************************
1393!> \brief ...
1394!> \param RES ...
1395!> \param NDERIV ...
1396!> \param TG1 ...
1397!> \param TG2 ...
1398!> \param C0 ...
1399! **************************************************************************************************
1400 SUBROUTINE pd2val(RES, NDERIV, TG1, TG2, C0)
1401 REAL(kind=dp), INTENT(OUT) :: res(*)
1402 INTEGER, INTENT(IN) :: nderiv
1403 REAL(kind=dp), INTENT(IN) :: tg1, tg2, c0(105, *)
1404
1405 REAL(kind=dp), PARAMETER :: sqrt2 = 1.4142135623730950488016887242096980785696718753_dp
1406
1407 INTEGER :: k
1408 REAL(kind=dp) :: t1(0:13), t2(0:13)
1409
1410 t1(0) = 1.0_dp
1411 t2(0) = 1.0_dp
1412 t1(1) = sqrt2*tg1
1413 t2(1) = sqrt2*tg2
1414 t1(2) = 2*tg1*t1(1) - sqrt2
1415 t2(2) = 2*tg2*t2(1) - sqrt2
1416 t1(3) = 2*tg1*t1(2) - t1(1)
1417 t2(3) = 2*tg2*t2(2) - t2(1)
1418 t1(4) = 2*tg1*t1(3) - t1(2)
1419 t2(4) = 2*tg2*t2(3) - t2(2)
1420 t1(5) = 2*tg1*t1(4) - t1(3)
1421 t2(5) = 2*tg2*t2(4) - t2(3)
1422 t1(6) = 2*tg1*t1(5) - t1(4)
1423 t2(6) = 2*tg2*t2(5) - t2(4)
1424 t1(7) = 2*tg1*t1(6) - t1(5)
1425 t2(7) = 2*tg2*t2(6) - t2(5)
1426 t1(8) = 2*tg1*t1(7) - t1(6)
1427 t2(8) = 2*tg2*t2(7) - t2(6)
1428 t1(9) = 2*tg1*t1(8) - t1(7)
1429 t2(9) = 2*tg2*t2(8) - t2(7)
1430 t1(10) = 2*tg1*t1(9) - t1(8)
1431 t2(10) = 2*tg2*t2(9) - t2(8)
1432 t1(11) = 2*tg1*t1(10) - t1(9)
1433 t2(11) = 2*tg2*t2(10) - t2(9)
1434 t1(12) = 2*tg1*t1(11) - t1(10)
1435 t2(12) = 2*tg2*t2(11) - t2(10)
1436 t1(13) = 2*tg1*t1(12) - t1(11)
1437 t2(13) = 2*tg2*t2(12) - t2(11)
1438 DO k = 1, nderiv + 1
1439 res(k) = 0.0_dp
1440 res(k) = res(k) + dot_product(t1(0:13), c0(1:14, k))*t2(0)
1441 res(k) = res(k) + dot_product(t1(0:12), c0(15:27, k))*t2(1)
1442 res(k) = res(k) + dot_product(t1(0:11), c0(28:39, k))*t2(2)
1443 res(k) = res(k) + dot_product(t1(0:10), c0(40:50, k))*t2(3)
1444 res(k) = res(k) + dot_product(t1(0:9), c0(51:60, k))*t2(4)
1445 res(k) = res(k) + dot_product(t1(0:8), c0(61:69, k))*t2(5)
1446 res(k) = res(k) + dot_product(t1(0:7), c0(70:77, k))*t2(6)
1447 res(k) = res(k) + dot_product(t1(0:6), c0(78:84, k))*t2(7)
1448 res(k) = res(k) + dot_product(t1(0:5), c0(85:90, k))*t2(8)
1449 res(k) = res(k) + dot_product(t1(0:4), c0(91:95, k))*t2(9)
1450 res(k) = res(k) + dot_product(t1(0:3), c0(96:99, k))*t2(10)
1451 res(k) = res(k) + dot_product(t1(0:2), c0(100:102, k))*t2(11)
1452 res(k) = res(k) + dot_product(t1(0:1), c0(103:104, k))*t2(12)
1453 res(k) = res(k) + dot_product(t1(0:0), c0(105:105, k))*t2(13)
1454 END DO
1455 END SUBROUTINE pd2val
1456
1457! **************************************************************************************************
1458!> \brief Returns the value of nderiv_init so that one can check if opening the potential file is
1459!> worhtwhile
1460!> \return ...
1461!> \author A. Bussy, 05.2019
1462! **************************************************************************************************
1463 FUNCTION get_lmax_init() RESULT(lmax_init)
1464
1465 INTEGER :: lmax_init
1466
1467 lmax_init = nderiv_init
1468
1469 END FUNCTION get_lmax_init
1470
1471END MODULE t_c_g0
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Interface to the message passing library MPI.
This module computes the basic integrals for the truncated coulomb operator.
Definition t_c_g0.F:57
subroutine, public t_c_g0_n(res, use_gamma, r, t, nderiv)
...
Definition t_c_g0.F:84
subroutine, public init(nder, iunit, mepos, group)
...
Definition t_c_g0.F:1357
integer function, public get_lmax_init()
Returns the value of nderiv_init so that one can check if opening the potential file is worhtwhile.
Definition t_c_g0.F:1464
subroutine, public free_c0()
...
Definition t_c_g0.F:1388