LCOV - code coverage report
Current view: top level - src/common - t_c_g0.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:936074a) Lines: 98.9 % 912 902
Test Date: 2025-12-04 06:27:48 Functions: 100.0 % 5 5

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2025 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              : ! **************************************************************************************************
      57              : MODULE t_c_g0
      58              :    USE kinds,                           ONLY: dp
      59              :    USE message_passing,                 ONLY: mp_comm_type
      60              : #include "../base/base_uses.f90"
      61              : 
      62              :    IMPLICIT NONE
      63              :    PRIVATE
      64              : 
      65              :    PUBLIC :: t_c_g0_n, init, free_C0, get_lmax_init
      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              : 
      73              : CONTAINS
      74              : 
      75              : ! **************************************************************************************************
      76              : !> \brief ...
      77              : !> \param RES ...
      78              : !> \param use_gamma ...
      79              : !> \param R ...
      80              : !> \param T ...
      81              : !> \param NDERIV ...
      82              : ! **************************************************************************************************
      83    217484589 :    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    217484589 :       use_gamma = .FALSE.
      92    217484589 :       upper = R**2 + 11.0_dp*R + 50.0_dp
      93    217484589 :       lower = R**2 - 11.0_dp*R + 0.0_dp
      94    217484589 :       IF (T > upper) THEN
      95      7029165 :          RES(1:NDERIV + 1) = 0.0_dp
      96      7252026 :          RETURN
      97              :       END IF
      98    215634392 :       IF (R <= 11.0_dp) THEN
      99    177885105 :          X2 = R/11.0_dp
     100    177885105 :          upper = R**2 + 11.0_dp*R + 50.0_dp
     101    177885105 :          lower = 0.0_dp
     102    177885105 :          X1 = (T - lower)/(upper - lower)
     103    177885105 :          IF (X1 <= 0.500000000000000000E+00_dp) THEN
     104    119142526 :             IF (X2 <= 0.500000000000000000E+00_dp) THEN
     105     97483321 :                IF (X2 <= 0.250000000000000000E+00_dp) THEN
     106     79346440 :                   IF (X2 <= 0.125000000000000000E+00_dp) THEN
     107     20269013 :                      IF (X1 <= 0.250000000000000000E+00_dp) THEN
     108      9424932 :                         IF (X2 <= 0.625000000000000000E-01_dp) THEN
     109      1190480 :                            IF (X1 <= 0.125000000000000000E+00_dp) THEN
     110       612287 :                               IF (X2 <= 0.312500000000000000E-01_dp) THEN
     111        41596 :                                  IF (X1 <= 0.625000000000000000E-01_dp) THEN
     112        16419 :                                     IF (X2 <= 0.156250000000000000E-01_dp) THEN
     113            0 :                                        IF (X1 <= 0.312500000000000000E-01_dp) THEN
     114            0 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     115            0 :                                           TG2 = (2*X2 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
     116            0 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 1))
     117              :                                        ELSE
     118            0 :                                           TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     119            0 :                                           TG2 = (2*X2 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
     120            0 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 2))
     121              :                                        END IF
     122              :                                     ELSE
     123        16419 :                                        IF (X1 <= 0.312500000000000000E-01_dp) THEN
     124         8065 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     125         8065 :                                           TG2 = (2*X2 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
     126         8065 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 3))
     127              :                                        ELSE
     128         8354 :                                           TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     129         8354 :                                           TG2 = (2*X2 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
     130         8354 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 4))
     131              :                                        END IF
     132              :                                     END IF
     133              :                                  ELSE
     134        25177 :                                     IF (X2 <= 0.156250000000000000E-01_dp) THEN
     135            0 :                                        TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     136            0 :                                        TG2 = (2*X2 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
     137            0 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 5))
     138              :                                     ELSE
     139        25177 :                                        TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     140        25177 :                                        TG2 = (2*X2 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
     141        25177 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 6))
     142              :                                     END IF
     143              :                                  END IF
     144              :                               ELSE
     145       570691 :                                  IF (X1 <= 0.625000000000000000E-01_dp) THEN
     146       302127 :                                     IF (X2 <= 0.468750000000000000E-01_dp) THEN
     147       132338 :                                        IF (X1 <= 0.312500000000000000E-01_dp) THEN
     148        67988 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     149        67988 :                                           TG2 = (2*X2 - 0.781250000000000000E-01_dp)*0.640000000000000000E+02_dp
     150        67988 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 7))
     151              :                                        ELSE
     152        64350 :                                           TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     153        64350 :                                           TG2 = (2*X2 - 0.781250000000000000E-01_dp)*0.640000000000000000E+02_dp
     154        64350 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 8))
     155              :                                        END IF
     156              :                                     ELSE
     157       169789 :                                        IF (X1 <= 0.312500000000000000E-01_dp) THEN
     158       129960 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     159       129960 :                                           TG2 = (2*X2 - 0.109375000000000000E+00_dp)*0.640000000000000000E+02_dp
     160       129960 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 9))
     161              :                                        ELSE
     162        39829 :                                           TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     163        39829 :                                           TG2 = (2*X2 - 0.109375000000000000E+00_dp)*0.640000000000000000E+02_dp
     164        39829 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 10))
     165              :                                        END IF
     166              :                                     END IF
     167              :                                  ELSE
     168       268564 :                                     IF (X2 <= 0.468750000000000000E-01_dp) THEN
     169       205389 :                                        TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     170       205389 :                                        TG2 = (2*X2 - 0.781250000000000000E-01_dp)*0.640000000000000000E+02_dp
     171       205389 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 11))
     172              :                                     ELSE
     173        63175 :                                        TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     174        63175 :                                        TG2 = (2*X2 - 0.109375000000000000E+00_dp)*0.640000000000000000E+02_dp
     175        63175 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 12))
     176              :                                     END IF
     177              :                                  END IF
     178              :                               END IF
     179              :                            ELSE
     180       578193 :                               IF (X2 <= 0.312500000000000000E-01_dp) THEN
     181        50972 :                                  IF (X1 <= 0.187500000000000000E+00_dp) THEN
     182        16180 :                                     TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     183        16180 :                                     TG2 = (2*X2 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     184        16180 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 13))
     185              :                                  ELSE
     186        34792 :                                     TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     187        34792 :                                     TG2 = (2*X2 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     188        34792 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 14))
     189              :                                  END IF
     190              :                               ELSE
     191       527221 :                                  IF (X1 <= 0.187500000000000000E+00_dp) THEN
     192       283055 :                                     TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     193       283055 :                                     TG2 = (2*X2 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     194       283055 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 15))
     195              :                                  ELSE
     196       244166 :                                     TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     197       244166 :                                     TG2 = (2*X2 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     198       244166 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 16))
     199              :                                  END IF
     200              :                               END IF
     201              :                            END IF
     202              :                         ELSE
     203      8234452 :                            IF (X1 <= 0.125000000000000000E+00_dp) THEN
     204      3974786 :                               IF (X2 <= 0.937500000000000000E-01_dp) THEN
     205       929047 :                                  IF (X1 <= 0.625000000000000000E-01_dp) THEN
     206       600023 :                                     IF (X2 <= 0.781250000000000000E-01_dp) THEN
     207       272714 :                                        IF (X1 <= 0.312500000000000000E-01_dp) THEN
     208       239540 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     209       239540 :                                           TG2 = (2*X2 - 0.140625000000000000E+00_dp)*0.640000000000000000E+02_dp
     210       239540 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 17))
     211              :                                        ELSE
     212        33174 :                                           TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     213        33174 :                                           TG2 = (2*X2 - 0.140625000000000000E+00_dp)*0.640000000000000000E+02_dp
     214        33174 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 18))
     215              :                                        END IF
     216              :                                     ELSE
     217       327309 :                                        IF (X1 <= 0.312500000000000000E-01_dp) THEN
     218       237122 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     219       237122 :                                           TG2 = (2*X2 - 0.171875000000000000E+00_dp)*0.640000000000000000E+02_dp
     220       237122 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 19))
     221              :                                        ELSE
     222        90187 :                                           TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     223        90187 :                                           TG2 = (2*X2 - 0.171875000000000000E+00_dp)*0.640000000000000000E+02_dp
     224        90187 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 20))
     225              :                                        END IF
     226              :                                     END IF
     227              :                                  ELSE
     228       329024 :                                     IF (X2 <= 0.781250000000000000E-01_dp) THEN
     229        65760 :                                        TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     230        65760 :                                        TG2 = (2*X2 - 0.140625000000000000E+00_dp)*0.640000000000000000E+02_dp
     231        65760 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 21))
     232              :                                     ELSE
     233       263264 :                                        TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     234       263264 :                                        TG2 = (2*X2 - 0.171875000000000000E+00_dp)*0.640000000000000000E+02_dp
     235       263264 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 22))
     236              :                                     END IF
     237              :                                  END IF
     238              :                               ELSE
     239      3045739 :                                  IF (X1 <= 0.625000000000000000E-01_dp) THEN
     240      1560421 :                                     IF (X2 <= 0.109375000000000000E+00_dp) THEN
     241       720731 :                                        IF (X1 <= 0.312500000000000000E-01_dp) THEN
     242       512780 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     243       512780 :                                           TG2 = (2*X2 - 0.203125000000000000E+00_dp)*0.640000000000000000E+02_dp
     244       512780 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 23))
     245              :                                        ELSE
     246       207951 :                                           TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     247       207951 :                                           TG2 = (2*X2 - 0.203125000000000000E+00_dp)*0.640000000000000000E+02_dp
     248       207951 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 24))
     249              :                                        END IF
     250              :                                     ELSE
     251       839690 :                                        IF (X1 <= 0.312500000000000000E-01_dp) THEN
     252       607509 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     253       607509 :                                           TG2 = (2*X2 - 0.234375000000000000E+00_dp)*0.640000000000000000E+02_dp
     254       607509 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 25))
     255              :                                        ELSE
     256       232181 :                                           TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     257       232181 :                                           TG2 = (2*X2 - 0.234375000000000000E+00_dp)*0.640000000000000000E+02_dp
     258       232181 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 26))
     259              :                                        END IF
     260              :                                     END IF
     261              :                                  ELSE
     262      1485318 :                                     IF (X2 <= 0.109375000000000000E+00_dp) THEN
     263       614599 :                                        TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     264       614599 :                                        TG2 = (2*X2 - 0.203125000000000000E+00_dp)*0.640000000000000000E+02_dp
     265       614599 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 27))
     266              :                                     ELSE
     267       870719 :                                        TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     268       870719 :                                        TG2 = (2*X2 - 0.234375000000000000E+00_dp)*0.640000000000000000E+02_dp
     269       870719 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 28))
     270              :                                     END IF
     271              :                                  END IF
     272              :                               END IF
     273              :                            ELSE
     274      4259666 :                               IF (X1 <= 0.187500000000000000E+00_dp) THEN
     275      2052946 :                                  IF (X2 <= 0.937500000000000000E-01_dp) THEN
     276       342793 :                                     TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     277       342793 :                                     TG2 = (2*X2 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     278       342793 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 29))
     279              :                                  ELSE
     280      1710153 :                                     TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     281      1710153 :                                     TG2 = (2*X2 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     282      1710153 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 30))
     283              :                                  END IF
     284              :                               ELSE
     285      2206720 :                                  TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     286      2206720 :                                  TG2 = (2*X2 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     287      2206720 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 31))
     288              :                               END IF
     289              :                            END IF
     290              :                         END IF
     291              :                      ELSE
     292     10844081 :                         IF (X1 <= 0.375000000000000000E+00_dp) THEN
     293      5771245 :                            TG1 = (2*X1 - 0.625000000000000000E+00_dp)*0.800000000000000000E+01_dp
     294      5771245 :                            TG2 = (2*X2 - 0.125000000000000000E+00_dp)*0.800000000000000000E+01_dp
     295      5771245 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 32))
     296              :                         ELSE
     297      5072836 :                            TG1 = (2*X1 - 0.875000000000000000E+00_dp)*0.800000000000000000E+01_dp
     298      5072836 :                            TG2 = (2*X2 - 0.125000000000000000E+00_dp)*0.800000000000000000E+01_dp
     299      5072836 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 33))
     300              :                         END IF
     301              :                      END IF
     302              :                   ELSE
     303     59077427 :                      IF (X1 <= 0.250000000000000000E+00_dp) THEN
     304     27367433 :                         IF (X2 <= 0.187500000000000000E+00_dp) THEN
     305     17013846 :                            IF (X1 <= 0.125000000000000000E+00_dp) THEN
     306      8730022 :                               IF (X2 <= 0.156250000000000000E+00_dp) THEN
     307      4225337 :                                  IF (X1 <= 0.625000000000000000E-01_dp) THEN
     308      2029876 :                                     IF (X1 <= 0.312500000000000000E-01_dp) THEN
     309      1358761 :                                        IF (X2 <= 0.140625000000000000E+00_dp) THEN
     310       598659 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     311       598659 :                                           TG2 = (2*X2 - 0.265625000000000000E+00_dp)*0.640000000000000000E+02_dp
     312       598659 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 34))
     313              :                                        ELSE
     314       760102 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     315       760102 :                                           TG2 = (2*X2 - 0.296875000000000000E+00_dp)*0.640000000000000000E+02_dp
     316       760102 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 35))
     317              :                                        END IF
     318              :                                     ELSE
     319       671115 :                                        TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     320       671115 :                                        TG2 = (2*X2 - 0.281250000000000000E+00_dp)*0.320000000000000000E+02_dp
     321       671115 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 36))
     322              :                                     END IF
     323              :                                  ELSE
     324      2195461 :                                     IF (X1 <= 0.937500000000000000E-01_dp) THEN
     325       962281 :                                        TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     326       962281 :                                        TG2 = (2*X2 - 0.281250000000000000E+00_dp)*0.320000000000000000E+02_dp
     327       962281 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 37))
     328              :                                     ELSE
     329      1233180 :                                        TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     330      1233180 :                                        TG2 = (2*X2 - 0.281250000000000000E+00_dp)*0.320000000000000000E+02_dp
     331      1233180 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 38))
     332              :                                     END IF
     333              :                                  END IF
     334              :                               ELSE
     335      4504685 :                                  IF (X1 <= 0.625000000000000000E-01_dp) THEN
     336      2913125 :                                     IF (X1 <= 0.312500000000000000E-01_dp) THEN
     337      2008097 :                                        IF (X2 <= 0.171875000000000000E+00_dp) THEN
     338       818971 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     339       818971 :                                           TG2 = (2*X2 - 0.328125000000000000E+00_dp)*0.640000000000000000E+02_dp
     340       818971 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 39))
     341              :                                        ELSE
     342      1189126 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     343      1189126 :                                           TG2 = (2*X2 - 0.359375000000000000E+00_dp)*0.640000000000000000E+02_dp
     344      1189126 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 40))
     345              :                                        END IF
     346              :                                     ELSE
     347       905028 :                                        TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     348       905028 :                                        TG2 = (2*X2 - 0.343750000000000000E+00_dp)*0.320000000000000000E+02_dp
     349       905028 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 41))
     350              :                                     END IF
     351              :                                  ELSE
     352      1591560 :                                     TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     353      1591560 :                                     TG2 = (2*X2 - 0.343750000000000000E+00_dp)*0.320000000000000000E+02_dp
     354      1591560 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 42))
     355              :                                  END IF
     356              :                               END IF
     357              :                            ELSE
     358      8283824 :                               IF (X1 <= 0.187500000000000000E+00_dp) THEN
     359      4038165 :                                  TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     360      4038165 :                                  TG2 = (2*X2 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     361      4038165 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 43))
     362              :                               ELSE
     363      4245659 :                                  TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     364      4245659 :                                  TG2 = (2*X2 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     365      4245659 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 44))
     366              :                               END IF
     367              :                            END IF
     368              :                         ELSE
     369     10353587 :                            IF (X1 <= 0.125000000000000000E+00_dp) THEN
     370      7112573 :                               IF (X1 <= 0.625000000000000000E-01_dp) THEN
     371      5389473 :                                  IF (X2 <= 0.218750000000000000E+00_dp) THEN
     372      2866099 :                                     IF (X1 <= 0.312500000000000000E-01_dp) THEN
     373      2007380 :                                        IF (X2 <= 0.203125000000000000E+00_dp) THEN
     374      1027313 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     375      1027313 :                                           TG2 = (2*X2 - 0.390625000000000000E+00_dp)*0.640000000000000000E+02_dp
     376      1027313 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 45))
     377              :                                        ELSE
     378       980067 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     379       980067 :                                           TG2 = (2*X2 - 0.421875000000000000E+00_dp)*0.640000000000000000E+02_dp
     380       980067 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 46))
     381              :                                        END IF
     382              :                                     ELSE
     383       858719 :                                        TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     384       858719 :                                        TG2 = (2*X2 - 0.406250000000000000E+00_dp)*0.320000000000000000E+02_dp
     385       858719 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 47))
     386              :                                     END IF
     387              :                                  ELSE
     388      2523374 :                                     IF (X1 <= 0.312500000000000000E-01_dp) THEN
     389      1898487 :                                        IF (X2 <= 0.234375000000000000E+00_dp) THEN
     390       882088 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     391       882088 :                                           TG2 = (2*X2 - 0.453125000000000000E+00_dp)*0.640000000000000000E+02_dp
     392       882088 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 48))
     393              :                                        ELSE
     394      1016399 :                                           TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     395      1016399 :                                           TG2 = (2*X2 - 0.484375000000000000E+00_dp)*0.640000000000000000E+02_dp
     396      1016399 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 49))
     397              :                                        END IF
     398              :                                     ELSE
     399       624887 :                                        TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     400       624887 :                                        TG2 = (2*X2 - 0.468750000000000000E+00_dp)*0.320000000000000000E+02_dp
     401       624887 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 50))
     402              :                                     END IF
     403              :                                  END IF
     404              :                               ELSE
     405      1723100 :                                  IF (X2 <= 0.218750000000000000E+00_dp) THEN
     406      1075223 :                                     TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     407      1075223 :                                     TG2 = (2*X2 - 0.406250000000000000E+00_dp)*0.320000000000000000E+02_dp
     408      1075223 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 51))
     409              :                                  ELSE
     410       647877 :                                     TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
     411       647877 :                                     TG2 = (2*X2 - 0.468750000000000000E+00_dp)*0.320000000000000000E+02_dp
     412       647877 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 52))
     413              :                                  END IF
     414              :                               END IF
     415              :                            ELSE
     416      3241014 :                               IF (X1 <= 0.187500000000000000E+00_dp) THEN
     417      1581922 :                                  TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     418      1581922 :                                  TG2 = (2*X2 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     419      1581922 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 53))
     420              :                               ELSE
     421      1659092 :                                  TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     422      1659092 :                                  TG2 = (2*X2 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     423      1659092 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 54))
     424              :                               END IF
     425              :                            END IF
     426              :                         END IF
     427              :                      ELSE
     428     31709994 :                         IF (X1 <= 0.375000000000000000E+00_dp) THEN
     429     14359296 :                            IF (X1 <= 0.312500000000000000E+00_dp) THEN
     430      6611126 :                               TG1 = (2*X1 - 0.562500000000000000E+00_dp)*0.160000000000000000E+02_dp
     431      6611126 :                               TG2 = (2*X2 - 0.375000000000000000E+00_dp)*0.800000000000000000E+01_dp
     432      6611126 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 55))
     433              :                            ELSE
     434      7748170 :                               TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     435      7748170 :                               TG2 = (2*X2 - 0.375000000000000000E+00_dp)*0.800000000000000000E+01_dp
     436      7748170 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 56))
     437              :                            END IF
     438              :                         ELSE
     439     17350698 :                            TG1 = (2*X1 - 0.875000000000000000E+00_dp)*0.800000000000000000E+01_dp
     440     17350698 :                            TG2 = (2*X2 - 0.375000000000000000E+00_dp)*0.800000000000000000E+01_dp
     441     17350698 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 57))
     442              :                         END IF
     443              :                      END IF
     444              :                   END IF
     445              :                ELSE
     446     18136881 :                   IF (X1 <= 0.250000000000000000E+00_dp) THEN
     447     13943800 :                      IF (X1 <= 0.125000000000000000E+00_dp) THEN
     448     12523034 :                         IF (X1 <= 0.625000000000000000E-01_dp) THEN
     449     10711821 :                            IF (X2 <= 0.375000000000000000E+00_dp) THEN
     450      6991535 :                               IF (X2 <= 0.312500000000000000E+00_dp) THEN
     451      4182311 :                                  IF (X1 <= 0.312500000000000000E-01_dp) THEN
     452      3285574 :                                     IF (X2 <= 0.281250000000000000E+00_dp) THEN
     453      1748396 :                                        TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     454      1748396 :                                        TG2 = (2*X2 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     455      1748396 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 58))
     456              :                                     ELSE
     457      1537178 :                                        TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     458      1537178 :                                        TG2 = (2*X2 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     459      1537178 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 59))
     460              :                                     END IF
     461              :                                  ELSE
     462       896737 :                                     IF (X2 <= 0.281250000000000000E+00_dp) THEN
     463       508003 :                                        TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     464       508003 :                                        TG2 = (2*X2 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     465       508003 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 60))
     466              :                                     ELSE
     467       388734 :                                        TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     468       388734 :                                        TG2 = (2*X2 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     469       388734 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 61))
     470              :                                     END IF
     471              :                                  END IF
     472              :                               ELSE
     473      2809224 :                                  IF (X1 <= 0.312500000000000000E-01_dp) THEN
     474      2291399 :                                     IF (X2 <= 0.343750000000000000E+00_dp) THEN
     475      1223611 :                                        TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     476      1223611 :                                        TG2 = (2*X2 - 0.656250000000000000E+00_dp)*0.320000000000000000E+02_dp
     477      1223611 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 62))
     478              :                                     ELSE
     479      1067788 :                                        TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     480      1067788 :                                        TG2 = (2*X2 - 0.718750000000000000E+00_dp)*0.320000000000000000E+02_dp
     481      1067788 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 63))
     482              :                                     END IF
     483              :                                  ELSE
     484       517825 :                                     TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     485       517825 :                                     TG2 = (2*X2 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     486       517825 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 64))
     487              :                                  END IF
     488              :                               END IF
     489              :                            ELSE
     490      3720286 :                               IF (X1 <= 0.312500000000000000E-01_dp) THEN
     491      3257420 :                                  IF (X2 <= 0.437500000000000000E+00_dp) THEN
     492      2051364 :                                     IF (X1 <= 0.156250000000000000E-01_dp) THEN
     493      1850114 :                                        TG1 = (2*X1 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
     494      1850114 :                                        TG2 = (2*X2 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     495      1850114 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 65))
     496              :                                     ELSE
     497       201250 :                                        TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
     498       201250 :                                        TG2 = (2*X2 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     499       201250 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 66))
     500              :                                     END IF
     501              :                                  ELSE
     502      1206056 :                                     IF (X1 <= 0.156250000000000000E-01_dp) THEN
     503      1091926 :                                        TG1 = (2*X1 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
     504      1091926 :                                        TG2 = (2*X2 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     505      1091926 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 67))
     506              :                                     ELSE
     507       114130 :                                        TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
     508       114130 :                                        TG2 = (2*X2 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     509       114130 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 68))
     510              :                                     END IF
     511              :                                  END IF
     512              :                               ELSE
     513       462866 :                                  IF (X2 <= 0.437500000000000000E+00_dp) THEN
     514       287899 :                                     TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     515       287899 :                                     TG2 = (2*X2 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     516       287899 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 69))
     517              :                                  ELSE
     518       174967 :                                     TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     519       174967 :                                     TG2 = (2*X2 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     520       174967 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 70))
     521              :                                  END IF
     522              :                               END IF
     523              :                            END IF
     524              :                         ELSE
     525      1811213 :                            IF (X2 <= 0.375000000000000000E+00_dp) THEN
     526      1388179 :                               IF (X2 <= 0.312500000000000000E+00_dp) THEN
     527       918123 :                                  IF (X1 <= 0.937500000000000000E-01_dp) THEN
     528       614439 :                                     TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     529       614439 :                                     TG2 = (2*X2 - 0.562500000000000000E+00_dp)*0.160000000000000000E+02_dp
     530       614439 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 71))
     531              :                                  ELSE
     532       303684 :                                     TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     533       303684 :                                     TG2 = (2*X2 - 0.562500000000000000E+00_dp)*0.160000000000000000E+02_dp
     534       303684 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 72))
     535              :                                  END IF
     536              :                               ELSE
     537       470056 :                                  IF (X1 <= 0.937500000000000000E-01_dp) THEN
     538       265826 :                                     TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     539       265826 :                                     TG2 = (2*X2 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     540       265826 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 73))
     541              :                                  ELSE
     542       204230 :                                     TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     543       204230 :                                     TG2 = (2*X2 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     544       204230 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 74))
     545              :                                  END IF
     546              :                               END IF
     547              :                            ELSE
     548       423034 :                               IF (X1 <= 0.937500000000000000E-01_dp) THEN
     549       229125 :                                  IF (X2 <= 0.437500000000000000E+00_dp) THEN
     550       150249 :                                     TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     551       150249 :                                     TG2 = (2*X2 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     552       150249 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 75))
     553              :                                  ELSE
     554        78876 :                                     TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     555        78876 :                                     TG2 = (2*X2 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     556        78876 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 76))
     557              :                                  END IF
     558              :                               ELSE
     559       193909 :                                  IF (X2 <= 0.437500000000000000E+00_dp) THEN
     560       124522 :                                     TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     561       124522 :                                     TG2 = (2*X2 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     562       124522 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 77))
     563              :                                  ELSE
     564        69387 :                                     TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     565        69387 :                                     TG2 = (2*X2 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     566        69387 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 78))
     567              :                                  END IF
     568              :                               END IF
     569              :                            END IF
     570              :                         END IF
     571              :                      ELSE
     572      1420766 :                         IF (X2 <= 0.375000000000000000E+00_dp) THEN
     573      1176628 :                            IF (X1 <= 0.187500000000000000E+00_dp) THEN
     574       530910 :                               IF (X2 <= 0.312500000000000000E+00_dp) THEN
     575       291022 :                                  TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     576       291022 :                                  TG2 = (2*X2 - 0.562500000000000000E+00_dp)*0.160000000000000000E+02_dp
     577       291022 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 79))
     578              :                               ELSE
     579       239888 :                                  IF (X1 <= 0.156250000000000000E+00_dp) THEN
     580       168958 :                                     TG1 = (2*X1 - 0.281250000000000000E+00_dp)*0.320000000000000000E+02_dp
     581       168958 :                                     TG2 = (2*X2 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     582       168958 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 80))
     583              :                                  ELSE
     584        70930 :                                     TG1 = (2*X1 - 0.343750000000000000E+00_dp)*0.320000000000000000E+02_dp
     585        70930 :                                     TG2 = (2*X2 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     586        70930 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 81))
     587              :                                  END IF
     588              :                               END IF
     589              :                            ELSE
     590       645718 :                               IF (X2 <= 0.312500000000000000E+00_dp) THEN
     591       543377 :                                  TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     592       543377 :                                  TG2 = (2*X2 - 0.562500000000000000E+00_dp)*0.160000000000000000E+02_dp
     593       543377 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 82))
     594              :                               ELSE
     595       102341 :                                  TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     596       102341 :                                  TG2 = (2*X2 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     597       102341 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 83))
     598              :                               END IF
     599              :                            END IF
     600              :                         ELSE
     601       244138 :                            IF (X1 <= 0.187500000000000000E+00_dp) THEN
     602       180565 :                               IF (X2 <= 0.437500000000000000E+00_dp) THEN
     603       109479 :                                  TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     604       109479 :                                  TG2 = (2*X2 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     605       109479 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 84))
     606              :                               ELSE
     607        71086 :                                  IF (X1 <= 0.156250000000000000E+00_dp) THEN
     608        44398 :                                     TG1 = (2*X1 - 0.281250000000000000E+00_dp)*0.320000000000000000E+02_dp
     609        44398 :                                     TG2 = (2*X2 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     610        44398 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 85))
     611              :                                  ELSE
     612        26688 :                                     TG1 = (2*X1 - 0.343750000000000000E+00_dp)*0.320000000000000000E+02_dp
     613        26688 :                                     TG2 = (2*X2 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     614        26688 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 86))
     615              :                                  END IF
     616              :                               END IF
     617              :                            ELSE
     618        63573 :                               IF (X1 <= 0.218750000000000000E+00_dp) THEN
     619        38919 :                                  TG1 = (2*X1 - 0.406250000000000000E+00_dp)*0.320000000000000000E+02_dp
     620        38919 :                                  TG2 = (2*X2 - 0.875000000000000000E+00_dp)*0.800000000000000000E+01_dp
     621        38919 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 87))
     622              :                               ELSE
     623        24654 :                                  TG1 = (2*X1 - 0.468750000000000000E+00_dp)*0.320000000000000000E+02_dp
     624        24654 :                                  TG2 = (2*X2 - 0.875000000000000000E+00_dp)*0.800000000000000000E+01_dp
     625        24654 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 88))
     626              :                               END IF
     627              :                            END IF
     628              :                         END IF
     629              :                      END IF
     630              :                   ELSE
     631      4193081 :                      IF (X1 <= 0.375000000000000000E+00_dp) THEN
     632      1272210 :                         IF (X2 <= 0.375000000000000000E+00_dp) THEN
     633      1145693 :                            IF (X1 <= 0.312500000000000000E+00_dp) THEN
     634       535942 :                               TG1 = (2*X1 - 0.562500000000000000E+00_dp)*0.160000000000000000E+02_dp
     635       535942 :                               TG2 = (2*X2 - 0.625000000000000000E+00_dp)*0.800000000000000000E+01_dp
     636       535942 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 89))
     637              :                            ELSE
     638       609751 :                               TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     639       609751 :                               TG2 = (2*X2 - 0.625000000000000000E+00_dp)*0.800000000000000000E+01_dp
     640       609751 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 90))
     641              :                            END IF
     642              :                         ELSE
     643       126517 :                            IF (X1 <= 0.312500000000000000E+00_dp) THEN
     644        62977 :                               IF (X1 <= 0.281250000000000000E+00_dp) THEN
     645        30161 :                                  TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     646        30161 :                                  TG2 = (2*X2 - 0.875000000000000000E+00_dp)*0.800000000000000000E+01_dp
     647        30161 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 91))
     648              :                               ELSE
     649        32816 :                                  TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     650        32816 :                                  TG2 = (2*X2 - 0.875000000000000000E+00_dp)*0.800000000000000000E+01_dp
     651        32816 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 92))
     652              :                               END IF
     653              :                            ELSE
     654        63540 :                               TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     655        63540 :                               TG2 = (2*X2 - 0.875000000000000000E+00_dp)*0.800000000000000000E+01_dp
     656        63540 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 93))
     657              :                            END IF
     658              :                         END IF
     659              :                      ELSE
     660      2920871 :                         IF (X1 <= 0.437500000000000000E+00_dp) THEN
     661      1257537 :                            TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     662      1257537 :                            TG2 = (2*X2 - 0.750000000000000000E+00_dp)*0.400000000000000000E+01_dp
     663      1257537 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 94))
     664              :                         ELSE
     665      1663334 :                            TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     666      1663334 :                            TG2 = (2*X2 - 0.750000000000000000E+00_dp)*0.400000000000000000E+01_dp
     667      1663334 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 95))
     668              :                         END IF
     669              :                      END IF
     670              :                   END IF
     671              :                END IF
     672              :             ELSE
     673     21659205 :                IF (X1 <= 0.250000000000000000E+00_dp) THEN
     674     12053741 :                   IF (X1 <= 0.125000000000000000E+00_dp) THEN
     675      8436716 :                      IF (X1 <= 0.625000000000000000E-01_dp) THEN
     676      6865342 :                         IF (X1 <= 0.312500000000000000E-01_dp) THEN
     677      6190778 :                            IF (X1 <= 0.156250000000000000E-01_dp) THEN
     678      5819258 :                               IF (X1 <= 0.781250000000000000E-02_dp) THEN
     679      5610778 :                                  IF (X2 <= 0.750000000000000000E+00_dp) THEN
     680      4176818 :                                     TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
     681      4176818 :                                     TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     682      4176818 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 96))
     683              :                                  ELSE
     684      1433960 :                                     TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
     685      1433960 :                                     TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     686      1433960 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 97))
     687              :                                  END IF
     688              :                               ELSE
     689       208480 :                                  IF (X2 <= 0.750000000000000000E+00_dp) THEN
     690       117781 :                                     TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
     691       117781 :                                     TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     692       117781 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 98))
     693              :                                  ELSE
     694        90699 :                                     TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
     695        90699 :                                     TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     696        90699 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 99))
     697              :                                  END IF
     698              :                               END IF
     699              :                            ELSE
     700       371520 :                               IF (X2 <= 0.750000000000000000E+00_dp) THEN
     701       194492 :                                  TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
     702       194492 :                                  TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     703       194492 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 100))
     704              :                               ELSE
     705       177028 :                                  TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
     706       177028 :                                  TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     707       177028 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 101))
     708              :                               END IF
     709              :                            END IF
     710              :                         ELSE
     711       674564 :                            IF (X2 <= 0.750000000000000000E+00_dp) THEN
     712       386689 :                               IF (X2 <= 0.625000000000000000E+00_dp) THEN
     713       208730 :                                  TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     714       208730 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     715       208730 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 102))
     716              :                               ELSE
     717       177959 :                                  TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     718       177959 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     719       177959 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 103))
     720              :                               END IF
     721              :                            ELSE
     722       287875 :                               IF (X1 <= 0.468750000000000000E-01_dp) THEN
     723       131162 :                                  TG1 = (2*X1 - 0.781250000000000000E-01_dp)*0.640000000000000000E+02_dp
     724       131162 :                                  TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     725       131162 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 104))
     726              :                               ELSE
     727       156713 :                                  TG1 = (2*X1 - 0.109375000000000000E+00_dp)*0.640000000000000000E+02_dp
     728       156713 :                                  TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     729       156713 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 105))
     730              :                               END IF
     731              :                            END IF
     732              :                         END IF
     733              :                      ELSE
     734      1571374 :                         IF (X2 <= 0.750000000000000000E+00_dp) THEN
     735       753413 :                            IF (X2 <= 0.625000000000000000E+00_dp) THEN
     736       304435 :                               IF (X1 <= 0.937500000000000000E-01_dp) THEN
     737       180593 :                                  TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     738       180593 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     739       180593 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 106))
     740              :                               ELSE
     741       123842 :                                  TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     742       123842 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     743       123842 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 107))
     744              :                               END IF
     745              :                            ELSE
     746       448978 :                               IF (X1 <= 0.937500000000000000E-01_dp) THEN
     747       237225 :                                  TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     748       237225 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     749       237225 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 108))
     750              :                               ELSE
     751       211753 :                                  TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     752       211753 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     753       211753 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 109))
     754              :                               END IF
     755              :                            END IF
     756              :                         ELSE
     757       817961 :                            IF (X1 <= 0.937500000000000000E-01_dp) THEN
     758       330231 :                               TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     759       330231 :                               TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     760       330231 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 110))
     761              :                            ELSE
     762       487730 :                               TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     763       487730 :                               TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     764       487730 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 111))
     765              :                            END IF
     766              :                         END IF
     767              :                      END IF
     768              :                   ELSE
     769      3617025 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
     770      1362786 :                         IF (X2 <= 0.625000000000000000E+00_dp) THEN
     771       385872 :                            IF (X1 <= 0.187500000000000000E+00_dp) THEN
     772       177359 :                               IF (X1 <= 0.156250000000000000E+00_dp) THEN
     773        84889 :                                  TG1 = (2*X1 - 0.281250000000000000E+00_dp)*0.320000000000000000E+02_dp
     774        84889 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     775        84889 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 112))
     776              :                               ELSE
     777        92470 :                                  TG1 = (2*X1 - 0.343750000000000000E+00_dp)*0.320000000000000000E+02_dp
     778        92470 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     779        92470 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 113))
     780              :                               END IF
     781              :                            ELSE
     782       208513 :                               IF (X1 <= 0.218750000000000000E+00_dp) THEN
     783       127885 :                                  TG1 = (2*X1 - 0.406250000000000000E+00_dp)*0.320000000000000000E+02_dp
     784       127885 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     785       127885 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 114))
     786              :                               ELSE
     787        80628 :                                  TG1 = (2*X1 - 0.468750000000000000E+00_dp)*0.320000000000000000E+02_dp
     788        80628 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     789        80628 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 115))
     790              :                               END IF
     791              :                            END IF
     792              :                         ELSE
     793       976914 :                            IF (X1 <= 0.187500000000000000E+00_dp) THEN
     794       426558 :                               IF (X1 <= 0.156250000000000000E+00_dp) THEN
     795       185367 :                                  TG1 = (2*X1 - 0.281250000000000000E+00_dp)*0.320000000000000000E+02_dp
     796       185367 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     797       185367 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 116))
     798              :                               ELSE
     799       241191 :                                  TG1 = (2*X1 - 0.343750000000000000E+00_dp)*0.320000000000000000E+02_dp
     800       241191 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     801       241191 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 117))
     802              :                               END IF
     803              :                            ELSE
     804       550356 :                               IF (X1 <= 0.218750000000000000E+00_dp) THEN
     805       272142 :                                  TG1 = (2*X1 - 0.406250000000000000E+00_dp)*0.320000000000000000E+02_dp
     806       272142 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     807       272142 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 118))
     808              :                               ELSE
     809       278214 :                                  TG1 = (2*X1 - 0.468750000000000000E+00_dp)*0.320000000000000000E+02_dp
     810       278214 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     811       278214 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 119))
     812              :                               END IF
     813              :                            END IF
     814              :                         END IF
     815              :                      ELSE
     816      2254239 :                         IF (X1 <= 0.187500000000000000E+00_dp) THEN
     817      1023819 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     818       538836 :                               TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     819       538836 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     820       538836 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 120))
     821              :                            ELSE
     822       484983 :                               TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     823       484983 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     824       484983 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 121))
     825              :                            END IF
     826              :                         ELSE
     827      1230420 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     828       690786 :                               IF (X1 <= 0.218750000000000000E+00_dp) THEN
     829       344811 :                                  TG1 = (2*X1 - 0.406250000000000000E+00_dp)*0.320000000000000000E+02_dp
     830       344811 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     831       344811 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 122))
     832              :                               ELSE
     833       345975 :                                  TG1 = (2*X1 - 0.468750000000000000E+00_dp)*0.320000000000000000E+02_dp
     834       345975 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     835       345975 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 123))
     836              :                               END IF
     837              :                            ELSE
     838       539634 :                               TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     839       539634 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     840       539634 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 124))
     841              :                            END IF
     842              :                         END IF
     843              :                      END IF
     844              :                   END IF
     845              :                ELSE
     846      9605464 :                   IF (X1 <= 0.375000000000000000E+00_dp) THEN
     847      4365648 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
     848      1577612 :                         IF (X1 <= 0.312500000000000000E+00_dp) THEN
     849       743092 :                            IF (X2 <= 0.625000000000000000E+00_dp) THEN
     850       181129 :                               IF (X1 <= 0.281250000000000000E+00_dp) THEN
     851        89986 :                                  TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     852        89986 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     853        89986 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 125))
     854              :                               ELSE
     855        91143 :                                  TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     856        91143 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     857        91143 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 126))
     858              :                               END IF
     859              :                            ELSE
     860       561963 :                               IF (X1 <= 0.281250000000000000E+00_dp) THEN
     861       277534 :                                  TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     862       277534 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     863       277534 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 127))
     864              :                               ELSE
     865       284429 :                                  TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     866       284429 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     867       284429 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 128))
     868              :                               END IF
     869              :                            END IF
     870              :                         ELSE
     871       834520 :                            IF (X2 <= 0.625000000000000000E+00_dp) THEN
     872       178082 :                               TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     873       178082 :                               TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     874       178082 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 129))
     875              :                            ELSE
     876       656438 :                               IF (X1 <= 0.343750000000000000E+00_dp) THEN
     877       320773 :                                  TG1 = (2*X1 - 0.656250000000000000E+00_dp)*0.320000000000000000E+02_dp
     878       320773 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     879       320773 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 130))
     880              :                               ELSE
     881       335665 :                                  TG1 = (2*X1 - 0.718750000000000000E+00_dp)*0.320000000000000000E+02_dp
     882       335665 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     883       335665 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 131))
     884              :                               END IF
     885              :                            END IF
     886              :                         END IF
     887              :                      ELSE
     888      2788036 :                         IF (X1 <= 0.312500000000000000E+00_dp) THEN
     889      1364959 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     890       765501 :                               IF (X1 <= 0.281250000000000000E+00_dp) THEN
     891       374337 :                                  TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     892       374337 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     893       374337 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 132))
     894              :                               ELSE
     895       391164 :                                  TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     896       391164 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     897       391164 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 133))
     898              :                               END IF
     899              :                            ELSE
     900       599458 :                               IF (X1 <= 0.281250000000000000E+00_dp) THEN
     901       306372 :                                  TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     902       306372 :                                  TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     903       306372 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 134))
     904              :                               ELSE
     905       293086 :                                  TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     906       293086 :                                  TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     907       293086 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 135))
     908              :                               END IF
     909              :                            END IF
     910              :                         ELSE
     911      1423077 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     912       806680 :                               IF (X1 <= 0.343750000000000000E+00_dp) THEN
     913       353698 :                                  TG1 = (2*X1 - 0.656250000000000000E+00_dp)*0.320000000000000000E+02_dp
     914       353698 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     915       353698 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 136))
     916              :                               ELSE
     917       452982 :                                  TG1 = (2*X1 - 0.718750000000000000E+00_dp)*0.320000000000000000E+02_dp
     918       452982 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     919       452982 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 137))
     920              :                               END IF
     921              :                            ELSE
     922       616397 :                               TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     923       616397 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     924       616397 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 138))
     925              :                            END IF
     926              :                         END IF
     927              :                      END IF
     928              :                   ELSE
     929      5239816 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
     930      1752358 :                         IF (X1 <= 0.437500000000000000E+00_dp) THEN
     931       854963 :                            IF (X2 <= 0.625000000000000000E+00_dp) THEN
     932       172310 :                               TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     933       172310 :                               TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     934       172310 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 139))
     935              :                            ELSE
     936       682653 :                               TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     937       682653 :                               TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     938       682653 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 140))
     939              :                            END IF
     940              :                         ELSE
     941       897395 :                            TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     942       897395 :                            TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     943       897395 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 141))
     944              :                         END IF
     945              :                      ELSE
     946      3487458 :                         IF (X1 <= 0.437500000000000000E+00_dp) THEN
     947      1700226 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     948       954734 :                               TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     949       954734 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     950       954734 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 142))
     951              :                            ELSE
     952       745492 :                               TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     953       745492 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     954       745492 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 143))
     955              :                            END IF
     956              :                         ELSE
     957      1787232 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     958       941470 :                               TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     959       941470 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     960       941470 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 144))
     961              :                            ELSE
     962       845762 :                               TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     963       845762 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     964       845762 :                               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     58742579 :             IF (X1 <= 0.750000000000000000E+00_dp) THEN
     973     43694377 :                IF (X2 <= 0.500000000000000000E+00_dp) THEN
     974     31469232 :                   IF (X1 <= 0.625000000000000000E+00_dp) THEN
     975     20056506 :                      IF (X2 <= 0.250000000000000000E+00_dp) THEN
     976     16096989 :                         TG1 = (2*X1 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     977     16096989 :                         TG2 = (2*X2 - 0.250000000000000000E+00_dp)*0.400000000000000000E+01_dp
     978     16096989 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 146))
     979              :                      ELSE
     980      3959517 :                         TG1 = (2*X1 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     981      3959517 :                         TG2 = (2*X2 - 0.750000000000000000E+00_dp)*0.400000000000000000E+01_dp
     982      3959517 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 147))
     983              :                      END IF
     984              :                   ELSE
     985     11412726 :                      TG1 = (2*X1 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     986     11412726 :                      TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
     987     11412726 :                      CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 148))
     988              :                   END IF
     989              :                ELSE
     990     12225145 :                   IF (X1 <= 0.625000000000000000E+00_dp) THEN
     991      5938589 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
     992      2030383 :                         IF (X1 <= 0.562500000000000000E+00_dp) THEN
     993      1018521 :                            TG1 = (2*X1 - 0.106250000000000000E+01_dp)*0.160000000000000000E+02_dp
     994      1018521 :                            TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     995      1018521 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 149))
     996              :                         ELSE
     997      1011862 :                            TG1 = (2*X1 - 0.118750000000000000E+01_dp)*0.160000000000000000E+02_dp
     998      1011862 :                            TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     999      1011862 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 150))
    1000              :                         END IF
    1001              :                      ELSE
    1002      3908206 :                         IF (X1 <= 0.562500000000000000E+00_dp) THEN
    1003      1908824 :                            TG1 = (2*X1 - 0.106250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1004      1908824 :                            TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1005      1908824 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 151))
    1006              :                         ELSE
    1007      1999382 :                            TG1 = (2*X1 - 0.118750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1008      1999382 :                            TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1009      1999382 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 152))
    1010              :                         END IF
    1011              :                      END IF
    1012              :                   ELSE
    1013      6286556 :                      IF (X1 <= 0.687500000000000000E+00_dp) THEN
    1014      3144751 :                         TG1 = (2*X1 - 0.131250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1015      3144751 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1016      3144751 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 153))
    1017              :                      ELSE
    1018      3141805 :                         TG1 = (2*X1 - 0.143750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1019      3141805 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1020      3141805 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 154))
    1021              :                      END IF
    1022              :                   END IF
    1023              :                END IF
    1024              :             ELSE
    1025     15048202 :                TG1 = (2*X1 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1026     15048202 :                TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1027     15048202 :                CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 155))
    1028              :             END IF
    1029              :          END IF
    1030              :       ELSE
    1031     37749287 :          IF (T < lower) THEN
    1032      5401829 :             use_gamma = .TRUE.
    1033      5401829 :             RETURN
    1034              :          END IF
    1035     32347458 :          X2 = 11.0_dp/R
    1036     32347458 :          X1 = (T - lower)/(upper - lower)
    1037     32347458 :          IF (X1 <= 0.500000000000000000E+00_dp) THEN
    1038     13091741 :             IF (X1 <= 0.250000000000000000E+00_dp) THEN
    1039      6052996 :                IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1040       490108 :                   IF (X1 <= 0.125000000000000000E+00_dp) THEN
    1041       260569 :                      IF (X2 <= 0.250000000000000000E+00_dp) THEN
    1042         2618 :                         TG1 = (2*X1 - 0.125000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1043         2618 :                         TG2 = (2*X2 - 0.250000000000000000E+00_dp)*0.400000000000000000E+01_dp
    1044         2618 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 156))
    1045              :                      ELSE
    1046       257951 :                         TG1 = (2*X1 - 0.125000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1047       257951 :                         TG2 = (2*X2 - 0.750000000000000000E+00_dp)*0.400000000000000000E+01_dp
    1048       257951 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 157))
    1049              :                      END IF
    1050              :                   ELSE
    1051       229539 :                      TG1 = (2*X1 - 0.375000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1052       229539 :                      TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1053       229539 :                      CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 158))
    1054              :                   END IF
    1055              :                ELSE
    1056      5562888 :                   IF (X1 <= 0.125000000000000000E+00_dp) THEN
    1057      2519501 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
    1058      1192317 :                         IF (X2 <= 0.625000000000000000E+00_dp) THEN
    1059       479186 :                            TG1 = (2*X1 - 0.125000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1060       479186 :                            TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1061       479186 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 159))
    1062              :                         ELSE
    1063       713131 :                            IF (X1 <= 0.625000000000000000E-01_dp) THEN
    1064       316690 :                               TG1 = (2*X1 - 0.625000000000000000E-01_dp)*0.160000000000000000E+02_dp
    1065       316690 :                               TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1066       316690 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 160))
    1067              :                            ELSE
    1068       396441 :                               TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1069       396441 :                               TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1070       396441 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 161))
    1071              :                            END IF
    1072              :                         END IF
    1073              :                      ELSE
    1074      1327184 :                         IF (X1 <= 0.625000000000000000E-01_dp) THEN
    1075       537173 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
    1076       343190 :                               IF (X1 <= 0.312500000000000000E-01_dp) THEN
    1077       153059 :                                  IF (X2 <= 0.812500000000000000E+00_dp) THEN
    1078       106452 :                                     TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
    1079       106452 :                                     TG2 = (2*X2 - 0.156250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1080       106452 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 162))
    1081              :                                  ELSE
    1082        46607 :                                     TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
    1083        46607 :                                     TG2 = (2*X2 - 0.168750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1084        46607 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 163))
    1085              :                                  END IF
    1086              :                               ELSE
    1087       190131 :                                  TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
    1088       190131 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1089       190131 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 164))
    1090              :                               END IF
    1091              :                            ELSE
    1092       193983 :                               IF (X1 <= 0.312500000000000000E-01_dp) THEN
    1093        89577 :                                  IF (X2 <= 0.937500000000000000E+00_dp) THEN
    1094        36488 :                                     IF (X1 <= 0.156250000000000000E-01_dp) THEN
    1095        14181 :                                        IF (X2 <= 0.906250000000000000E+00_dp) THEN
    1096         6092 :                                           TG1 = (2*X1 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
    1097         6092 :                                           TG2 = (2*X2 - 0.178125000000000000E+01_dp)*0.320000000000000000E+02_dp
    1098         6092 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 165))
    1099              :                                        ELSE
    1100         8089 :                                           TG1 = (2*X1 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
    1101         8089 :                                           TG2 = (2*X2 - 0.184375000000000000E+01_dp)*0.320000000000000000E+02_dp
    1102         8089 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 166))
    1103              :                                        END IF
    1104              :                                     ELSE
    1105        22307 :                                        TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
    1106        22307 :                                        TG2 = (2*X2 - 0.181250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1107        22307 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 167))
    1108              :                                     END IF
    1109              :                                  ELSE
    1110        53089 :                                     IF (X1 <= 0.156250000000000000E-01_dp) THEN
    1111        26107 :                                        IF (X2 <= 0.968750000000000000E+00_dp) THEN
    1112        16711 :                                           IF (X1 <= 0.781250000000000000E-02_dp) THEN
    1113         8464 :                                              IF (X2 <= 0.953125000000000000E+00_dp) THEN
    1114         3170 :                                                 TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
    1115         3170 :                                                 TG2 = (2*X2 - 0.189062500000000000E+01_dp)*0.640000000000000000E+02_dp
    1116         3170 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 168))
    1117              :                                              ELSE
    1118         5294 :                                                 TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
    1119         5294 :                                                 TG2 = (2*X2 - 0.192187500000000000E+01_dp)*0.640000000000000000E+02_dp
    1120         5294 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 169))
    1121              :                                              END IF
    1122              :                                           ELSE
    1123         8247 :                                              TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
    1124         8247 :                                              TG2 = (2*X2 - 0.190625000000000000E+01_dp)*0.320000000000000000E+02_dp
    1125         8247 :                                              CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 170))
    1126              :                                           END IF
    1127              :                                        ELSE
    1128         9396 :                                           IF (X1 <= 0.781250000000000000E-02_dp) THEN
    1129         4028 :                                              IF (X2 <= 0.984375000000000000E+00_dp) THEN
    1130         1365 :                                                 TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
    1131         1365 :                                                 TG2 = (2*X2 - 0.195312500000000000E+01_dp)*0.640000000000000000E+02_dp
    1132         1365 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 171))
    1133              :                                              ELSE
    1134         2663 :                                                 TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
    1135         2663 :                                                 TG2 = (2*X2 - 0.198437500000000000E+01_dp)*0.640000000000000000E+02_dp
    1136         2663 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 172))
    1137              :                                              END IF
    1138              :                                           ELSE
    1139         5368 :                                              IF (X2 <= 0.984375000000000000E+00_dp) THEN
    1140         1371 :                                                 TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
    1141         1371 :                                                 TG2 = (2*X2 - 0.195312500000000000E+01_dp)*0.640000000000000000E+02_dp
    1142         1371 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 173))
    1143              :                                              ELSE
    1144         3997 :                                                 TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
    1145         3997 :                                                 TG2 = (2*X2 - 0.198437500000000000E+01_dp)*0.640000000000000000E+02_dp
    1146         3997 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 174))
    1147              :                                              END IF
    1148              :                                           END IF
    1149              :                                        END IF
    1150              :                                     ELSE
    1151        26982 :                                        IF (X2 <= 0.968750000000000000E+00_dp) THEN
    1152        12401 :                                           TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
    1153        12401 :                                           TG2 = (2*X2 - 0.190625000000000000E+01_dp)*0.320000000000000000E+02_dp
    1154        12401 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 175))
    1155              :                                        ELSE
    1156        14581 :                                           IF (X1 <= 0.234375000000000000E-01_dp) THEN
    1157         7016 :                                              TG1 = (2*X1 - 0.390625000000000000E-01_dp)*0.128000000000000000E+03_dp
    1158         7016 :                                              TG2 = (2*X2 - 0.196875000000000000E+01_dp)*0.320000000000000000E+02_dp
    1159         7016 :                                              CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 176))
    1160              :                                           ELSE
    1161         7565 :                                              TG1 = (2*X1 - 0.546875000000000000E-01_dp)*0.128000000000000000E+03_dp
    1162         7565 :                                              TG2 = (2*X2 - 0.196875000000000000E+01_dp)*0.320000000000000000E+02_dp
    1163         7565 :                                              CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 177))
    1164              :                                           END IF
    1165              :                                        END IF
    1166              :                                     END IF
    1167              :                                  END IF
    1168              :                               ELSE
    1169       104406 :                                  IF (X2 <= 0.937500000000000000E+00_dp) THEN
    1170        43814 :                                     TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
    1171        43814 :                                     TG2 = (2*X2 - 0.181250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1172        43814 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 178))
    1173              :                                  ELSE
    1174        60592 :                                     IF (X1 <= 0.468750000000000000E-01_dp) THEN
    1175        28531 :                                        IF (X2 <= 0.968750000000000000E+00_dp) THEN
    1176        20615 :                                           TG1 = (2*X1 - 0.781250000000000000E-01_dp)*0.640000000000000000E+02_dp
    1177        20615 :                                           TG2 = (2*X2 - 0.190625000000000000E+01_dp)*0.320000000000000000E+02_dp
    1178        20615 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 179))
    1179              :                                        ELSE
    1180         7916 :                                           TG1 = (2*X1 - 0.781250000000000000E-01_dp)*0.640000000000000000E+02_dp
    1181         7916 :                                           TG2 = (2*X2 - 0.196875000000000000E+01_dp)*0.320000000000000000E+02_dp
    1182         7916 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 180))
    1183              :                                        END IF
    1184              :                                     ELSE
    1185        32061 :                                        TG1 = (2*X1 - 0.109375000000000000E+00_dp)*0.640000000000000000E+02_dp
    1186        32061 :                                        TG2 = (2*X2 - 0.193750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1187        32061 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 181))
    1188              :                                     END IF
    1189              :                                  END IF
    1190              :                               END IF
    1191              :                            END IF
    1192              :                         ELSE
    1193       790011 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
    1194       451426 :                               TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1195       451426 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1196       451426 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 182))
    1197              :                            ELSE
    1198       338585 :                               IF (X1 <= 0.937500000000000000E-01_dp) THEN
    1199       141792 :                                  IF (X2 <= 0.937500000000000000E+00_dp) THEN
    1200        82666 :                                     TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
    1201        82666 :                                     TG2 = (2*X2 - 0.181250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1202        82666 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 183))
    1203              :                                  ELSE
    1204        59126 :                                     TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
    1205        59126 :                                     TG2 = (2*X2 - 0.193750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1206        59126 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 184))
    1207              :                                  END IF
    1208              :                               ELSE
    1209       196793 :                                  TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
    1210       196793 :                                  TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1211       196793 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 185))
    1212              :                               END IF
    1213              :                            END IF
    1214              :                         END IF
    1215              :                      END IF
    1216              :                   ELSE
    1217      3043387 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
    1218      1137346 :                         TG1 = (2*X1 - 0.375000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1219      1137346 :                         TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1220      1137346 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 186))
    1221              :                      ELSE
    1222      1906041 :                         IF (X1 <= 0.187500000000000000E+00_dp) THEN
    1223       907945 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
    1224       494181 :                               TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1225       494181 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1226       494181 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 187))
    1227              :                            ELSE
    1228       413764 :                               TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1229       413764 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1230       413764 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 188))
    1231              :                            END IF
    1232              :                         ELSE
    1233       998096 :                            TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1234       998096 :                            TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1235       998096 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 189))
    1236              :                         END IF
    1237              :                      END IF
    1238              :                   END IF
    1239              :                END IF
    1240              :             ELSE
    1241      7038745 :                IF (X1 <= 0.375000000000000000E+00_dp) THEN
    1242      2891266 :                   IF (X1 <= 0.312500000000000000E+00_dp) THEN
    1243      1421981 :                      IF (X1 <= 0.281250000000000000E+00_dp) THEN
    1244       713625 :                         TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
    1245       713625 :                         TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1246       713625 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 190))
    1247              :                      ELSE
    1248       708356 :                         TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
    1249       708356 :                         TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1250       708356 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 191))
    1251              :                      END IF
    1252              :                   ELSE
    1253      1469285 :                      IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1254        78854 :                         TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1255        78854 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1256        78854 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 192))
    1257              :                      ELSE
    1258      1390431 :                         TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1259      1390431 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1260      1390431 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 193))
    1261              :                      END IF
    1262              :                   END IF
    1263              :                ELSE
    1264      4147479 :                   IF (X1 <= 0.437500000000000000E+00_dp) THEN
    1265      1526467 :                      IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1266        65601 :                         TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1267        65601 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1268        65601 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 194))
    1269              :                      ELSE
    1270      1460866 :                         IF (X1 <= 0.406250000000000000E+00_dp) THEN
    1271       645976 :                            TG1 = (2*X1 - 0.781250000000000000E+00_dp)*0.320000000000000000E+02_dp
    1272       645976 :                            TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1273       645976 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 195))
    1274              :                         ELSE
    1275       814890 :                            TG1 = (2*X1 - 0.843750000000000000E+00_dp)*0.320000000000000000E+02_dp
    1276       814890 :                            TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1277       814890 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 196))
    1278              :                         END IF
    1279              :                      END IF
    1280              :                   ELSE
    1281      2621012 :                      IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1282       358427 :                         TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1283       358427 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1284       358427 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 197))
    1285              :                      ELSE
    1286      2262585 :                         TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1287      2262585 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1288      2262585 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 198))
    1289              :                      END IF
    1290              :                   END IF
    1291              :                END IF
    1292              :             END IF
    1293              :          ELSE
    1294     19255717 :             IF (X1 <= 0.750000000000000000E+00_dp) THEN
    1295     11509872 :                IF (X1 <= 0.625000000000000000E+00_dp) THEN
    1296      5409195 :                   IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1297       221342 :                      IF (X1 <= 0.562500000000000000E+00_dp) THEN
    1298        97171 :                         TG1 = (2*X1 - 0.106250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1299        97171 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1300        97171 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 199))
    1301              :                      ELSE
    1302       124171 :                         TG1 = (2*X1 - 0.118750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1303       124171 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1304       124171 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 200))
    1305              :                      END IF
    1306              :                   ELSE
    1307      5187853 :                      IF (X1 <= 0.562500000000000000E+00_dp) THEN
    1308      2393761 :                         TG1 = (2*X1 - 0.106250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1309      2393761 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1310      2393761 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 201))
    1311              :                      ELSE
    1312      2794092 :                         TG1 = (2*X1 - 0.118750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1313      2794092 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1314      2794092 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 202))
    1315              :                      END IF
    1316              :                   END IF
    1317              :                ELSE
    1318      6100677 :                   IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1319       558131 :                      IF (X1 <= 0.687500000000000000E+00_dp) THEN
    1320       202531 :                         TG1 = (2*X1 - 0.131250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1321       202531 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1322       202531 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 203))
    1323              :                      ELSE
    1324       355600 :                         TG1 = (2*X1 - 0.143750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1325       355600 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1326       355600 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 204))
    1327              :                      END IF
    1328              :                   ELSE
    1329      5542546 :                      TG1 = (2*X1 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1330      5542546 :                      TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1331      5542546 :                      CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 205))
    1332              :                   END IF
    1333              :                END IF
    1334              :             ELSE
    1335      7745845 :                IF (X1 <= 0.875000000000000000E+00_dp) THEN
    1336      4854744 :                   TG1 = (2*X1 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1337      4854744 :                   TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1338      4854744 :                   CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 206))
    1339              :                ELSE
    1340      2891101 :                   TG1 = (2*X1 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1341      2891101 :                   TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1342      2891101 :                   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          746 :    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          746 :       REAL(KIND=dp), ALLOCATABLE, DIMENSION(:)           :: chunk
    1363              : 
    1364          746 :       patches = 207
    1365          746 :       IF (Nder > nderiv_max) CPABORT("T_C_G0 init failed")
    1366          746 :       nderiv_init = Nder
    1367          746 :       IF (ALLOCATED(C0)) DEALLOCATE (C0)
    1368              :       ! round up to a multiple of 32 to give some generous alignment for each C0
    1369         2984 :       ALLOCATE (C0(32*((31 + (Nder + 1)*(degree + 1)*(degree + 2)/2)/32), patches))
    1370              :       ! init mpi'ed buffers to silence warnings under valgrind
    1371    114909344 :       C0 = 1.0E99_dp
    1372          746 :       IF (mepos == 0) THEN
    1373          373 :          ALLOCATE (chunk((nderiv_max + 1)*(degree + 1)*(degree + 2)/2))
    1374        77584 :          DO I = 1, patches
    1375        77211 :             READ (iunit, *) chunk
    1376     56414704 :             C0(1:(Nder + 1)*(degree + 1)*(degree + 2)/2, I) = chunk(1:(Nder + 1)*(degree + 1)*(degree + 2)/2)
    1377              :          END DO
    1378          373 :          DEALLOCATE (chunk)
    1379              :       END IF
    1380          746 :       CALL group%bcast(C0, 0)
    1381              : 
    1382          746 :    END SUBROUTINE init
    1383              : 
    1384              : ! **************************************************************************************************
    1385              : !> \brief ...
    1386              : ! **************************************************************************************************
    1387          368 :    SUBROUTINE free_C0()
    1388          368 :       IF (ALLOCATED(C0)) DEALLOCATE (C0)
    1389          368 :       nderiv_init = -1
    1390          368 :    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    210232563 :    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    210232563 :       T1(0) = 1.0_dp
    1411    210232563 :       T2(0) = 1.0_dp
    1412    210232563 :       T1(1) = SQRT2*TG1
    1413    210232563 :       T2(1) = SQRT2*TG2
    1414    210232563 :       T1(2) = 2*TG1*T1(1) - SQRT2
    1415    210232563 :       T2(2) = 2*TG2*T2(1) - SQRT2
    1416    210232563 :       T1(3) = 2*TG1*T1(2) - T1(1)
    1417    210232563 :       T2(3) = 2*TG2*T2(2) - T2(1)
    1418    210232563 :       T1(4) = 2*TG1*T1(3) - T1(2)
    1419    210232563 :       T2(4) = 2*TG2*T2(3) - T2(2)
    1420    210232563 :       T1(5) = 2*TG1*T1(4) - T1(3)
    1421    210232563 :       T2(5) = 2*TG2*T2(4) - T2(3)
    1422    210232563 :       T1(6) = 2*TG1*T1(5) - T1(4)
    1423    210232563 :       T2(6) = 2*TG2*T2(5) - T2(4)
    1424    210232563 :       T1(7) = 2*TG1*T1(6) - T1(5)
    1425    210232563 :       T2(7) = 2*TG2*T2(6) - T2(5)
    1426    210232563 :       T1(8) = 2*TG1*T1(7) - T1(6)
    1427    210232563 :       T2(8) = 2*TG2*T2(7) - T2(6)
    1428    210232563 :       T1(9) = 2*TG1*T1(8) - T1(7)
    1429    210232563 :       T2(9) = 2*TG2*T2(8) - T2(7)
    1430    210232563 :       T1(10) = 2*TG1*T1(9) - T1(8)
    1431    210232563 :       T2(10) = 2*TG2*T2(9) - T2(8)
    1432    210232563 :       T1(11) = 2*TG1*T1(10) - T1(9)
    1433    210232563 :       T2(11) = 2*TG2*T2(10) - T2(9)
    1434    210232563 :       T1(12) = 2*TG1*T1(11) - T1(10)
    1435    210232563 :       T2(12) = 2*TG2*T2(11) - T2(10)
    1436    210232563 :       T1(13) = 2*TG1*T1(12) - T1(11)
    1437    210232563 :       T2(13) = 2*TG2*T2(12) - T2(11)
    1438    746911780 :       DO K = 1, NDERIV + 1
    1439    536679217 :          RES(K) = 0.0_dp
    1440   8050188255 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:13), C0(1:14, K))*T2(0)
    1441   7513509038 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:12), C0(15:27, K))*T2(1)
    1442   6976829821 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:11), C0(28:39, K))*T2(2)
    1443   6440150604 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:10), C0(40:50, K))*T2(3)
    1444   5903471387 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:9), C0(51:60, K))*T2(4)
    1445   5366792170 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:8), C0(61:69, K))*T2(5)
    1446   4830112953 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:7), C0(70:77, K))*T2(6)
    1447   4293433736 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:6), C0(78:84, K))*T2(7)
    1448   3756754519 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:5), C0(85:90, K))*T2(8)
    1449   3220075302 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:4), C0(91:95, K))*T2(9)
    1450   2683396085 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:3), C0(96:99, K))*T2(10)
    1451   2146716868 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:2), C0(100:102, K))*T2(11)
    1452   1610037651 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:1), C0(103:104, K))*T2(12)
    1453   1283590997 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:0), C0(105:105, K))*T2(13)
    1454              :       END DO
    1455    210232563 :    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      6946907 :    FUNCTION get_lmax_init() RESULT(lmax_init)
    1464              : 
    1465              :       INTEGER                                            :: lmax_init
    1466              : 
    1467      6946907 :       lmax_init = nderiv_init
    1468              : 
    1469      6946907 :    END FUNCTION get_lmax_init
    1470              : 
    1471              : END MODULE t_c_g0
        

Generated by: LCOV version 2.0-1