LCOV - code coverage report
Current view: top level - src/common - t_c_g0.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:3158929) Lines: 885 912 97.0 %
Date: 2025-07-22 22:41:15 Functions: 5 5 100.0 %

          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   145437127 :    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   145437127 :       use_gamma = .FALSE.
      92   145437127 :       upper = R**2 + 11.0_dp*R + 50.0_dp
      93   145437127 :       lower = R**2 - 11.0_dp*R + 0.0_dp
      94   145437127 :       IF (T > upper) THEN
      95     3056849 :          RES(1:NDERIV + 1) = 0.0_dp
      96     3113893 :          RETURN
      97             :       END IF
      98   144730140 :       IF (R <= 11.0_dp) THEN
      99   141955275 :          X2 = R/11.0_dp
     100   141955275 :          upper = R**2 + 11.0_dp*R + 50.0_dp
     101   141955275 :          lower = 0.0_dp
     102   141955275 :          X1 = (T - lower)/(upper - lower)
     103   141955275 :          IF (X1 <= 0.500000000000000000E+00_dp) THEN
     104   104602717 :             IF (X2 <= 0.500000000000000000E+00_dp) THEN
     105    97479265 :                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    18132825 :                   IF (X1 <= 0.250000000000000000E+00_dp) THEN
     447    13939744 :                      IF (X1 <= 0.125000000000000000E+00_dp) THEN
     448    12518978 :                         IF (X1 <= 0.625000000000000000E-01_dp) THEN
     449    10707765 :                            IF (X2 <= 0.375000000000000000E+00_dp) THEN
     450     6990263 :                               IF (X2 <= 0.312500000000000000E+00_dp) THEN
     451     4181087 :                                  IF (X1 <= 0.312500000000000000E-01_dp) THEN
     452     3284350 :                                     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     1535954 :                                        TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     458     1535954 :                                        TG2 = (2*X2 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     459     1535954 :                                        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     2809176 :                                  IF (X1 <= 0.312500000000000000E-01_dp) THEN
     474     2291351 :                                     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     1067740 :                                        TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
     480     1067740 :                                        TG2 = (2*X2 - 0.718750000000000000E+00_dp)*0.320000000000000000E+02_dp
     481     1067740 :                                        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     3717502 :                               IF (X1 <= 0.312500000000000000E-01_dp) THEN
     491     3254636 :                                  IF (X2 <= 0.437500000000000000E+00_dp) THEN
     492     2051052 :                                     IF (X1 <= 0.156250000000000000E-01_dp) THEN
     493     1849802 :                                        TG1 = (2*X1 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
     494     1849802 :                                        TG2 = (2*X2 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     495     1849802 :                                        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     1203584 :                                     IF (X1 <= 0.156250000000000000E-01_dp) THEN
     503     1089454 :                                        TG1 = (2*X1 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
     504     1089454 :                                        TG2 = (2*X2 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     505     1089454 :                                        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     7123452 :                IF (X1 <= 0.250000000000000000E+00_dp) THEN
     674     6846436 :                   IF (X1 <= 0.125000000000000000E+00_dp) THEN
     675     6585590 :                      IF (X1 <= 0.625000000000000000E-01_dp) THEN
     676     6192762 :                         IF (X1 <= 0.312500000000000000E-01_dp) THEN
     677     5916467 :                            IF (X1 <= 0.156250000000000000E-01_dp) THEN
     678     5695849 :                               IF (X1 <= 0.781250000000000000E-02_dp) THEN
     679     5535404 :                                  IF (X2 <= 0.750000000000000000E+00_dp) THEN
     680     4158545 :                                     TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
     681     4158545 :                                     TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     682     4158545 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 96))
     683             :                                  ELSE
     684     1376859 :                                     TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
     685     1376859 :                                     TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     686     1376859 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 97))
     687             :                                  END IF
     688             :                               ELSE
     689      160445 :                                  IF (X2 <= 0.750000000000000000E+00_dp) THEN
     690      107532 :                                     TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
     691      107532 :                                     TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     692      107532 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 98))
     693             :                                  ELSE
     694       52913 :                                     TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
     695       52913 :                                     TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     696       52913 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 99))
     697             :                                  END IF
     698             :                               END IF
     699             :                            ELSE
     700      220618 :                               IF (X2 <= 0.750000000000000000E+00_dp) THEN
     701      136830 :                                  TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
     702      136830 :                                  TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     703      136830 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 100))
     704             :                               ELSE
     705       83788 :                                  TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
     706       83788 :                                  TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     707       83788 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 101))
     708             :                               END IF
     709             :                            END IF
     710             :                         ELSE
     711      276295 :                            IF (X2 <= 0.750000000000000000E+00_dp) THEN
     712      247422 :                               IF (X2 <= 0.625000000000000000E+00_dp) THEN
     713      188834 :                                  TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     714      188834 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     715      188834 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 102))
     716             :                               ELSE
     717       58588 :                                  TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
     718       58588 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     719       58588 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 103))
     720             :                               END IF
     721             :                            ELSE
     722       28873 :                               IF (X1 <= 0.468750000000000000E-01_dp) THEN
     723       16512 :                                  TG1 = (2*X1 - 0.781250000000000000E-01_dp)*0.640000000000000000E+02_dp
     724       16512 :                                  TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     725       16512 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 104))
     726             :                               ELSE
     727       12361 :                                  TG1 = (2*X1 - 0.109375000000000000E+00_dp)*0.640000000000000000E+02_dp
     728       12361 :                                  TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     729       12361 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 105))
     730             :                               END IF
     731             :                            END IF
     732             :                         END IF
     733             :                      ELSE
     734      392828 :                         IF (X2 <= 0.750000000000000000E+00_dp) THEN
     735      352392 :                            IF (X2 <= 0.625000000000000000E+00_dp) THEN
     736      233261 :                               IF (X1 <= 0.937500000000000000E-01_dp) THEN
     737      139581 :                                  TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     738      139581 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     739      139581 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 106))
     740             :                               ELSE
     741       93680 :                                  TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     742       93680 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     743       93680 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 107))
     744             :                               END IF
     745             :                            ELSE
     746      119131 :                               IF (X1 <= 0.937500000000000000E-01_dp) THEN
     747       97485 :                                  TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     748       97485 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     749       97485 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 108))
     750             :                               ELSE
     751       21646 :                                  TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     752       21646 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     753       21646 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 109))
     754             :                               END IF
     755             :                            END IF
     756             :                         ELSE
     757       40436 :                            IF (X1 <= 0.937500000000000000E-01_dp) THEN
     758       26821 :                               TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
     759       26821 :                               TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     760       26821 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 110))
     761             :                            ELSE
     762       13615 :                               TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
     763       13615 :                               TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
     764       13615 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 111))
     765             :                            END IF
     766             :                         END IF
     767             :                      END IF
     768             :                   ELSE
     769      260846 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
     770      244724 :                         IF (X2 <= 0.625000000000000000E+00_dp) THEN
     771      196854 :                            IF (X1 <= 0.187500000000000000E+00_dp) THEN
     772       82957 :                               IF (X1 <= 0.156250000000000000E+00_dp) THEN
     773       38841 :                                  TG1 = (2*X1 - 0.281250000000000000E+00_dp)*0.320000000000000000E+02_dp
     774       38841 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     775       38841 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 112))
     776             :                               ELSE
     777       44116 :                                  TG1 = (2*X1 - 0.343750000000000000E+00_dp)*0.320000000000000000E+02_dp
     778       44116 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     779       44116 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 113))
     780             :                               END IF
     781             :                            ELSE
     782      113897 :                               IF (X1 <= 0.218750000000000000E+00_dp) THEN
     783       80293 :                                  TG1 = (2*X1 - 0.406250000000000000E+00_dp)*0.320000000000000000E+02_dp
     784       80293 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     785       80293 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 114))
     786             :                               ELSE
     787       33604 :                                  TG1 = (2*X1 - 0.468750000000000000E+00_dp)*0.320000000000000000E+02_dp
     788       33604 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     789       33604 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 115))
     790             :                               END IF
     791             :                            END IF
     792             :                         ELSE
     793       47870 :                            IF (X1 <= 0.187500000000000000E+00_dp) THEN
     794       24216 :                               IF (X1 <= 0.156250000000000000E+00_dp) THEN
     795        6837 :                                  TG1 = (2*X1 - 0.281250000000000000E+00_dp)*0.320000000000000000E+02_dp
     796        6837 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     797        6837 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 116))
     798             :                               ELSE
     799       17379 :                                  TG1 = (2*X1 - 0.343750000000000000E+00_dp)*0.320000000000000000E+02_dp
     800       17379 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     801       17379 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 117))
     802             :                               END IF
     803             :                            ELSE
     804       23654 :                               IF (X1 <= 0.218750000000000000E+00_dp) THEN
     805        8608 :                                  TG1 = (2*X1 - 0.406250000000000000E+00_dp)*0.320000000000000000E+02_dp
     806        8608 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     807        8608 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 118))
     808             :                               ELSE
     809       15046 :                                  TG1 = (2*X1 - 0.468750000000000000E+00_dp)*0.320000000000000000E+02_dp
     810       15046 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     811       15046 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 119))
     812             :                               END IF
     813             :                            END IF
     814             :                         END IF
     815             :                      ELSE
     816       16122 :                         IF (X1 <= 0.187500000000000000E+00_dp) THEN
     817        8262 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     818        6454 :                               TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     819        6454 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     820        6454 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 120))
     821             :                            ELSE
     822        1808 :                               TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
     823        1808 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     824        1808 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 121))
     825             :                            END IF
     826             :                         ELSE
     827        7860 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     828        6946 :                               IF (X1 <= 0.218750000000000000E+00_dp) THEN
     829        3487 :                                  TG1 = (2*X1 - 0.406250000000000000E+00_dp)*0.320000000000000000E+02_dp
     830        3487 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     831        3487 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 122))
     832             :                               ELSE
     833        3459 :                                  TG1 = (2*X1 - 0.468750000000000000E+00_dp)*0.320000000000000000E+02_dp
     834        3459 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     835        3459 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 123))
     836             :                               END IF
     837             :                            ELSE
     838         914 :                               TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
     839         914 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     840         914 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 124))
     841             :                            END IF
     842             :                         END IF
     843             :                      END IF
     844             :                   END IF
     845             :                ELSE
     846      277016 :                   IF (X1 <= 0.375000000000000000E+00_dp) THEN
     847      186146 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
     848      121422 :                         IF (X1 <= 0.312500000000000000E+00_dp) THEN
     849       64391 :                            IF (X2 <= 0.625000000000000000E+00_dp) THEN
     850       51853 :                               IF (X1 <= 0.281250000000000000E+00_dp) THEN
     851       18126 :                                  TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     852       18126 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     853       18126 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 125))
     854             :                               ELSE
     855       33727 :                                  TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     856       33727 :                                  TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     857       33727 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 126))
     858             :                               END IF
     859             :                            ELSE
     860       12538 :                               IF (X1 <= 0.281250000000000000E+00_dp) THEN
     861        4930 :                                  TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     862        4930 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     863        4930 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 127))
     864             :                               ELSE
     865        7608 :                                  TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     866        7608 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     867        7608 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 128))
     868             :                               END IF
     869             :                            END IF
     870             :                         ELSE
     871       57031 :                            IF (X2 <= 0.625000000000000000E+00_dp) THEN
     872       48536 :                               TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     873       48536 :                               TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     874       48536 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 129))
     875             :                            ELSE
     876        8495 :                               IF (X1 <= 0.343750000000000000E+00_dp) THEN
     877        2725 :                                  TG1 = (2*X1 - 0.656250000000000000E+00_dp)*0.320000000000000000E+02_dp
     878        2725 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     879        2725 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 130))
     880             :                               ELSE
     881        5770 :                                  TG1 = (2*X1 - 0.718750000000000000E+00_dp)*0.320000000000000000E+02_dp
     882        5770 :                                  TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     883        5770 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 131))
     884             :                               END IF
     885             :                            END IF
     886             :                         END IF
     887             :                      ELSE
     888       64724 :                         IF (X1 <= 0.312500000000000000E+00_dp) THEN
     889       48717 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     890       39785 :                               IF (X1 <= 0.281250000000000000E+00_dp) THEN
     891       24969 :                                  TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     892       24969 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     893       24969 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 132))
     894             :                               ELSE
     895       14816 :                                  TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     896       14816 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     897       14816 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 133))
     898             :                               END IF
     899             :                            ELSE
     900        8932 :                               IF (X1 <= 0.281250000000000000E+00_dp) THEN
     901        3970 :                                  TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
     902        3970 :                                  TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     903        3970 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 134))
     904             :                               ELSE
     905        4962 :                                  TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
     906        4962 :                                  TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     907        4962 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 135))
     908             :                               END IF
     909             :                            END IF
     910             :                         ELSE
     911       16007 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     912       12246 :                               IF (X1 <= 0.343750000000000000E+00_dp) THEN
     913        2306 :                                  TG1 = (2*X1 - 0.656250000000000000E+00_dp)*0.320000000000000000E+02_dp
     914        2306 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     915        2306 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 136))
     916             :                               ELSE
     917        9940 :                                  TG1 = (2*X1 - 0.718750000000000000E+00_dp)*0.320000000000000000E+02_dp
     918        9940 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     919        9940 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 137))
     920             :                               END IF
     921             :                            ELSE
     922        3761 :                               TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
     923        3761 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     924        3761 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 138))
     925             :                            END IF
     926             :                         END IF
     927             :                      END IF
     928             :                   ELSE
     929       90870 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
     930       55728 :                         IF (X1 <= 0.437500000000000000E+00_dp) THEN
     931       22023 :                            IF (X2 <= 0.625000000000000000E+00_dp) THEN
     932       15430 :                               TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     933       15430 :                               TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     934       15430 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 139))
     935             :                            ELSE
     936        6593 :                               TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     937        6593 :                               TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     938        6593 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 140))
     939             :                            END IF
     940             :                         ELSE
     941       33705 :                            TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     942       33705 :                            TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     943       33705 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 141))
     944             :                         END IF
     945             :                      ELSE
     946       35142 :                         IF (X1 <= 0.437500000000000000E+00_dp) THEN
     947       32886 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     948        4220 :                               TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     949        4220 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     950        4220 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 142))
     951             :                            ELSE
     952       28666 :                               TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
     953       28666 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     954       28666 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 143))
     955             :                            END IF
     956             :                         ELSE
     957        2256 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
     958         974 :                               TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     959         974 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
     960         974 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 144))
     961             :                            ELSE
     962        1282 :                               TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
     963        1282 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
     964        1282 :                               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    37352558 :             IF (X1 <= 0.750000000000000000E+00_dp) THEN
     973    31629970 :                IF (X2 <= 0.500000000000000000E+00_dp) THEN
     974    31468872 :                   IF (X1 <= 0.625000000000000000E+00_dp) THEN
     975    20056436 :                      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     3959447 :                         TG1 = (2*X1 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
     981     3959447 :                         TG2 = (2*X2 - 0.750000000000000000E+00_dp)*0.400000000000000000E+01_dp
     982     3959447 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 147))
     983             :                      END IF
     984             :                   ELSE
     985    11412436 :                      TG1 = (2*X1 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
     986    11412436 :                      TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
     987    11412436 :                      CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 148))
     988             :                   END IF
     989             :                ELSE
     990      161098 :                   IF (X1 <= 0.625000000000000000E+00_dp) THEN
     991       87861 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
     992       62501 :                         IF (X1 <= 0.562500000000000000E+00_dp) THEN
     993       31030 :                            TG1 = (2*X1 - 0.106250000000000000E+01_dp)*0.160000000000000000E+02_dp
     994       31030 :                            TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     995       31030 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 149))
     996             :                         ELSE
     997       31471 :                            TG1 = (2*X1 - 0.118750000000000000E+01_dp)*0.160000000000000000E+02_dp
     998       31471 :                            TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
     999       31471 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 150))
    1000             :                         END IF
    1001             :                      ELSE
    1002       25360 :                         IF (X1 <= 0.562500000000000000E+00_dp) THEN
    1003       13154 :                            TG1 = (2*X1 - 0.106250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1004       13154 :                            TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1005       13154 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 151))
    1006             :                         ELSE
    1007       12206 :                            TG1 = (2*X1 - 0.118750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1008       12206 :                            TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1009       12206 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 152))
    1010             :                         END IF
    1011             :                      END IF
    1012             :                   ELSE
    1013       73237 :                      IF (X1 <= 0.687500000000000000E+00_dp) THEN
    1014       40416 :                         TG1 = (2*X1 - 0.131250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1015       40416 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1016       40416 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 153))
    1017             :                      ELSE
    1018       32821 :                         TG1 = (2*X1 - 0.143750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1019       32821 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1020       32821 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 154))
    1021             :                      END IF
    1022             :                   END IF
    1023             :                END IF
    1024             :             ELSE
    1025     5722588 :                TG1 = (2*X1 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1026     5722588 :                TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1027     5722588 :                CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 155))
    1028             :             END IF
    1029             :          END IF
    1030             :       ELSE
    1031     2774865 :          IF (T < lower) THEN
    1032     2406906 :             use_gamma = .TRUE.
    1033     2406906 :             RETURN
    1034             :          END IF
    1035      367959 :          X2 = 11.0_dp/R
    1036      367959 :          X1 = (T - lower)/(upper - lower)
    1037      367959 :          IF (X1 <= 0.500000000000000000E+00_dp) THEN
    1038      323853 :             IF (X1 <= 0.250000000000000000E+00_dp) THEN
    1039       49952 :                IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1040           0 :                   IF (X1 <= 0.125000000000000000E+00_dp) THEN
    1041           0 :                      IF (X2 <= 0.250000000000000000E+00_dp) THEN
    1042           0 :                         TG1 = (2*X1 - 0.125000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1043           0 :                         TG2 = (2*X2 - 0.250000000000000000E+00_dp)*0.400000000000000000E+01_dp
    1044           0 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 156))
    1045             :                      ELSE
    1046           0 :                         TG1 = (2*X1 - 0.125000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1047           0 :                         TG2 = (2*X2 - 0.750000000000000000E+00_dp)*0.400000000000000000E+01_dp
    1048           0 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 157))
    1049             :                      END IF
    1050             :                   ELSE
    1051           0 :                      TG1 = (2*X1 - 0.375000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1052           0 :                      TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1053           0 :                      CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 158))
    1054             :                   END IF
    1055             :                ELSE
    1056       49952 :                   IF (X1 <= 0.125000000000000000E+00_dp) THEN
    1057       47154 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
    1058        4686 :                         IF (X2 <= 0.625000000000000000E+00_dp) THEN
    1059           0 :                            TG1 = (2*X1 - 0.125000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1060           0 :                            TG2 = (2*X2 - 0.112500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1061           0 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 159))
    1062             :                         ELSE
    1063        4686 :                            IF (X1 <= 0.625000000000000000E-01_dp) THEN
    1064        3868 :                               TG1 = (2*X1 - 0.625000000000000000E-01_dp)*0.160000000000000000E+02_dp
    1065        3868 :                               TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1066        3868 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 160))
    1067             :                            ELSE
    1068         818 :                               TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1069         818 :                               TG2 = (2*X2 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1070         818 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 161))
    1071             :                            END IF
    1072             :                         END IF
    1073             :                      ELSE
    1074       42468 :                         IF (X1 <= 0.625000000000000000E-01_dp) THEN
    1075       34084 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
    1076        3898 :                               IF (X1 <= 0.312500000000000000E-01_dp) THEN
    1077        2145 :                                  IF (X2 <= 0.812500000000000000E+00_dp) THEN
    1078         622 :                                     TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
    1079         622 :                                     TG2 = (2*X2 - 0.156250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1080         622 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 162))
    1081             :                                  ELSE
    1082        1523 :                                     TG1 = (2*X1 - 0.312500000000000000E-01_dp)*0.320000000000000000E+02_dp
    1083        1523 :                                     TG2 = (2*X2 - 0.168750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1084        1523 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 163))
    1085             :                                  END IF
    1086             :                               ELSE
    1087        1753 :                                  TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
    1088        1753 :                                  TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1089        1753 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 164))
    1090             :                               END IF
    1091             :                            ELSE
    1092       30186 :                               IF (X1 <= 0.312500000000000000E-01_dp) THEN
    1093       24318 :                                  IF (X2 <= 0.937500000000000000E+00_dp) THEN
    1094        2670 :                                     IF (X1 <= 0.156250000000000000E-01_dp) THEN
    1095        2340 :                                        IF (X2 <= 0.906250000000000000E+00_dp) THEN
    1096         220 :                                           TG1 = (2*X1 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
    1097         220 :                                           TG2 = (2*X2 - 0.178125000000000000E+01_dp)*0.320000000000000000E+02_dp
    1098         220 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 165))
    1099             :                                        ELSE
    1100        2120 :                                           TG1 = (2*X1 - 0.156250000000000000E-01_dp)*0.640000000000000000E+02_dp
    1101        2120 :                                           TG2 = (2*X2 - 0.184375000000000000E+01_dp)*0.320000000000000000E+02_dp
    1102        2120 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 166))
    1103             :                                        END IF
    1104             :                                     ELSE
    1105         330 :                                        TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
    1106         330 :                                        TG2 = (2*X2 - 0.181250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1107         330 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 167))
    1108             :                                     END IF
    1109             :                                  ELSE
    1110       21648 :                                     IF (X1 <= 0.156250000000000000E-01_dp) THEN
    1111        9436 :                                        IF (X2 <= 0.968750000000000000E+00_dp) THEN
    1112        4773 :                                           IF (X1 <= 0.781250000000000000E-02_dp) THEN
    1113        2064 :                                              IF (X2 <= 0.953125000000000000E+00_dp) THEN
    1114        1202 :                                                 TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
    1115        1202 :                                                 TG2 = (2*X2 - 0.189062500000000000E+01_dp)*0.640000000000000000E+02_dp
    1116        1202 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 168))
    1117             :                                              ELSE
    1118         862 :                                                 TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
    1119         862 :                                                 TG2 = (2*X2 - 0.192187500000000000E+01_dp)*0.640000000000000000E+02_dp
    1120         862 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 169))
    1121             :                                              END IF
    1122             :                                           ELSE
    1123        2709 :                                              TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
    1124        2709 :                                              TG2 = (2*X2 - 0.190625000000000000E+01_dp)*0.320000000000000000E+02_dp
    1125        2709 :                                              CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 170))
    1126             :                                           END IF
    1127             :                                        ELSE
    1128        4663 :                                           IF (X1 <= 0.781250000000000000E-02_dp) THEN
    1129        1720 :                                              IF (X2 <= 0.984375000000000000E+00_dp) THEN
    1130         659 :                                                 TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
    1131         659 :                                                 TG2 = (2*X2 - 0.195312500000000000E+01_dp)*0.640000000000000000E+02_dp
    1132         659 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 171))
    1133             :                                              ELSE
    1134        1061 :                                                 TG1 = (2*X1 - 0.781250000000000000E-02_dp)*0.128000000000000000E+03_dp
    1135        1061 :                                                 TG2 = (2*X2 - 0.198437500000000000E+01_dp)*0.640000000000000000E+02_dp
    1136        1061 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 172))
    1137             :                                              END IF
    1138             :                                           ELSE
    1139        2943 :                                              IF (X2 <= 0.984375000000000000E+00_dp) THEN
    1140         633 :                                                 TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
    1141         633 :                                                 TG2 = (2*X2 - 0.195312500000000000E+01_dp)*0.640000000000000000E+02_dp
    1142         633 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 173))
    1143             :                                              ELSE
    1144        2310 :                                                 TG1 = (2*X1 - 0.234375000000000000E-01_dp)*0.128000000000000000E+03_dp
    1145        2310 :                                                 TG2 = (2*X2 - 0.198437500000000000E+01_dp)*0.640000000000000000E+02_dp
    1146        2310 :                                                 CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 174))
    1147             :                                              END IF
    1148             :                                           END IF
    1149             :                                        END IF
    1150             :                                     ELSE
    1151       12212 :                                        IF (X2 <= 0.968750000000000000E+00_dp) THEN
    1152        2053 :                                           TG1 = (2*X1 - 0.468750000000000000E-01_dp)*0.640000000000000000E+02_dp
    1153        2053 :                                           TG2 = (2*X2 - 0.190625000000000000E+01_dp)*0.320000000000000000E+02_dp
    1154        2053 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 175))
    1155             :                                        ELSE
    1156       10159 :                                           IF (X1 <= 0.234375000000000000E-01_dp) THEN
    1157        4456 :                                              TG1 = (2*X1 - 0.390625000000000000E-01_dp)*0.128000000000000000E+03_dp
    1158        4456 :                                              TG2 = (2*X2 - 0.196875000000000000E+01_dp)*0.320000000000000000E+02_dp
    1159        4456 :                                              CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 176))
    1160             :                                           ELSE
    1161        5703 :                                              TG1 = (2*X1 - 0.546875000000000000E-01_dp)*0.128000000000000000E+03_dp
    1162        5703 :                                              TG2 = (2*X2 - 0.196875000000000000E+01_dp)*0.320000000000000000E+02_dp
    1163        5703 :                                              CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 177))
    1164             :                                           END IF
    1165             :                                        END IF
    1166             :                                     END IF
    1167             :                                  END IF
    1168             :                               ELSE
    1169        5868 :                                  IF (X2 <= 0.937500000000000000E+00_dp) THEN
    1170        1087 :                                     TG1 = (2*X1 - 0.937500000000000000E-01_dp)*0.320000000000000000E+02_dp
    1171        1087 :                                     TG2 = (2*X2 - 0.181250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1172        1087 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 178))
    1173             :                                  ELSE
    1174        4781 :                                     IF (X1 <= 0.468750000000000000E-01_dp) THEN
    1175        2780 :                                        IF (X2 <= 0.968750000000000000E+00_dp) THEN
    1176         489 :                                           TG1 = (2*X1 - 0.781250000000000000E-01_dp)*0.640000000000000000E+02_dp
    1177         489 :                                           TG2 = (2*X2 - 0.190625000000000000E+01_dp)*0.320000000000000000E+02_dp
    1178         489 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 179))
    1179             :                                        ELSE
    1180        2291 :                                           TG1 = (2*X1 - 0.781250000000000000E-01_dp)*0.640000000000000000E+02_dp
    1181        2291 :                                           TG2 = (2*X2 - 0.196875000000000000E+01_dp)*0.320000000000000000E+02_dp
    1182        2291 :                                           CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 180))
    1183             :                                        END IF
    1184             :                                     ELSE
    1185        2001 :                                        TG1 = (2*X1 - 0.109375000000000000E+00_dp)*0.640000000000000000E+02_dp
    1186        2001 :                                        TG2 = (2*X2 - 0.193750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1187        2001 :                                        CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 181))
    1188             :                                     END IF
    1189             :                                  END IF
    1190             :                               END IF
    1191             :                            END IF
    1192             :                         ELSE
    1193        8384 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
    1194        2881 :                               TG1 = (2*X1 - 0.187500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1195        2881 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1196        2881 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 182))
    1197             :                            ELSE
    1198        5503 :                               IF (X1 <= 0.937500000000000000E-01_dp) THEN
    1199        4174 :                                  IF (X2 <= 0.937500000000000000E+00_dp) THEN
    1200         925 :                                     TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
    1201         925 :                                     TG2 = (2*X2 - 0.181250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1202         925 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 183))
    1203             :                                  ELSE
    1204        3249 :                                     TG1 = (2*X1 - 0.156250000000000000E+00_dp)*0.320000000000000000E+02_dp
    1205        3249 :                                     TG2 = (2*X2 - 0.193750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1206        3249 :                                     CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 184))
    1207             :                                  END IF
    1208             :                               ELSE
    1209        1329 :                                  TG1 = (2*X1 - 0.218750000000000000E+00_dp)*0.320000000000000000E+02_dp
    1210        1329 :                                  TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1211        1329 :                                  CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 185))
    1212             :                               END IF
    1213             :                            END IF
    1214             :                         END IF
    1215             :                      END IF
    1216             :                   ELSE
    1217        2798 :                      IF (X2 <= 0.750000000000000000E+00_dp) THEN
    1218           4 :                         TG1 = (2*X1 - 0.375000000000000000E+00_dp)*0.800000000000000000E+01_dp
    1219           4 :                         TG2 = (2*X2 - 0.125000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1220           4 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 186))
    1221             :                      ELSE
    1222        2794 :                         IF (X1 <= 0.187500000000000000E+00_dp) THEN
    1223        1494 :                            IF (X2 <= 0.875000000000000000E+00_dp) THEN
    1224          51 :                               TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1225          51 :                               TG2 = (2*X2 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1226          51 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 187))
    1227             :                            ELSE
    1228        1443 :                               TG1 = (2*X1 - 0.312500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1229        1443 :                               TG2 = (2*X2 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1230        1443 :                               CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 188))
    1231             :                            END IF
    1232             :                         ELSE
    1233        1300 :                            TG1 = (2*X1 - 0.437500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1234        1300 :                            TG2 = (2*X2 - 0.175000000000000000E+01_dp)*0.400000000000000000E+01_dp
    1235        1300 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 189))
    1236             :                         END IF
    1237             :                      END IF
    1238             :                   END IF
    1239             :                END IF
    1240             :             ELSE
    1241      273901 :                IF (X1 <= 0.375000000000000000E+00_dp) THEN
    1242        3517 :                   IF (X1 <= 0.312500000000000000E+00_dp) THEN
    1243         104 :                      IF (X1 <= 0.281250000000000000E+00_dp) THEN
    1244          70 :                         TG1 = (2*X1 - 0.531250000000000000E+00_dp)*0.320000000000000000E+02_dp
    1245          70 :                         TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1246          70 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 190))
    1247             :                      ELSE
    1248          34 :                         TG1 = (2*X1 - 0.593750000000000000E+00_dp)*0.320000000000000000E+02_dp
    1249          34 :                         TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1250          34 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 191))
    1251             :                      END IF
    1252             :                   ELSE
    1253        3413 :                      IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1254           0 :                         TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1255           0 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1256           0 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 192))
    1257             :                      ELSE
    1258        3413 :                         TG1 = (2*X1 - 0.687500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1259        3413 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1260        3413 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 193))
    1261             :                      END IF
    1262             :                   END IF
    1263             :                ELSE
    1264      270384 :                   IF (X1 <= 0.437500000000000000E+00_dp) THEN
    1265       49380 :                      IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1266        1992 :                         TG1 = (2*X1 - 0.812500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1267        1992 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1268        1992 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 194))
    1269             :                      ELSE
    1270       47388 :                         IF (X1 <= 0.406250000000000000E+00_dp) THEN
    1271       14892 :                            TG1 = (2*X1 - 0.781250000000000000E+00_dp)*0.320000000000000000E+02_dp
    1272       14892 :                            TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1273       14892 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 195))
    1274             :                         ELSE
    1275       32496 :                            TG1 = (2*X1 - 0.843750000000000000E+00_dp)*0.320000000000000000E+02_dp
    1276       32496 :                            TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1277       32496 :                            CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 196))
    1278             :                         END IF
    1279             :                      END IF
    1280             :                   ELSE
    1281      221004 :                      IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1282      132588 :                         TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1283      132588 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1284      132588 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 197))
    1285             :                      ELSE
    1286       88416 :                         TG1 = (2*X1 - 0.937500000000000000E+00_dp)*0.160000000000000000E+02_dp
    1287       88416 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1288       88416 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 198))
    1289             :                      END IF
    1290             :                   END IF
    1291             :                END IF
    1292             :             END IF
    1293             :          ELSE
    1294       44106 :             IF (X1 <= 0.750000000000000000E+00_dp) THEN
    1295       26668 :                IF (X1 <= 0.625000000000000000E+00_dp) THEN
    1296       17739 :                   IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1297        3816 :                      IF (X1 <= 0.562500000000000000E+00_dp) THEN
    1298        3772 :                         TG1 = (2*X1 - 0.106250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1299        3772 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1300        3772 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 199))
    1301             :                      ELSE
    1302          44 :                         TG1 = (2*X1 - 0.118750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1303          44 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1304          44 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 200))
    1305             :                      END IF
    1306             :                   ELSE
    1307       13923 :                      IF (X1 <= 0.562500000000000000E+00_dp) THEN
    1308        7806 :                         TG1 = (2*X1 - 0.106250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1309        7806 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1310        7806 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 201))
    1311             :                      ELSE
    1312        6117 :                         TG1 = (2*X1 - 0.118750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1313        6117 :                         TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1314        6117 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 202))
    1315             :                      END IF
    1316             :                   END IF
    1317             :                ELSE
    1318        8929 :                   IF (X2 <= 0.500000000000000000E+00_dp) THEN
    1319          40 :                      IF (X1 <= 0.687500000000000000E+00_dp) THEN
    1320          28 :                         TG1 = (2*X1 - 0.131250000000000000E+01_dp)*0.160000000000000000E+02_dp
    1321          28 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1322          28 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 203))
    1323             :                      ELSE
    1324          12 :                         TG1 = (2*X1 - 0.143750000000000000E+01_dp)*0.160000000000000000E+02_dp
    1325          12 :                         TG2 = (2*X2 - 0.500000000000000000E+00_dp)*0.200000000000000000E+01_dp
    1326          12 :                         CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 204))
    1327             :                      END IF
    1328             :                   ELSE
    1329        8889 :                      TG1 = (2*X1 - 0.137500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1330        8889 :                      TG2 = (2*X2 - 0.150000000000000000E+01_dp)*0.200000000000000000E+01_dp
    1331        8889 :                      CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 205))
    1332             :                   END IF
    1333             :                END IF
    1334             :             ELSE
    1335       17438 :                IF (X1 <= 0.875000000000000000E+00_dp) THEN
    1336        6488 :                   TG1 = (2*X1 - 0.162500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1337        6488 :                   TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1338        6488 :                   CALL PD2VAL(RES, NDERIV, TG1, TG2, C0(1, 206))
    1339             :                ELSE
    1340       10950 :                   TG1 = (2*X1 - 0.187500000000000000E+01_dp)*0.800000000000000000E+01_dp
    1341       10950 :                   TG2 = (2*X2 - 0.100000000000000000E+01_dp)*0.100000000000000000E+01_dp
    1342       10950 :                   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         732 :    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         732 :       REAL(KIND=dp), ALLOCATABLE, DIMENSION(:)           :: chunk
    1363             : 
    1364         732 :       patches = 207
    1365         732 :       IF (Nder > nderiv_max) CPABORT("T_C_G0 init failed")
    1366         732 :       nderiv_init = Nder
    1367         732 :       IF (ALLOCATED(C0)) DEALLOCATE (C0)
    1368             :       ! round up to a multiple of 32 to give some generous alignment for each C0
    1369        2928 :       ALLOCATE (C0(32*((31 + (Nder + 1)*(degree + 1)*(degree + 2)/2)/32), patches))
    1370             :       ! init mpi'ed buffers to silence warnings under valgrind
    1371   113117952 :       C0 = 1.0E99_dp
    1372         732 :       IF (mepos == 0) THEN
    1373         366 :          ALLOCATE (chunk((nderiv_max + 1)*(degree + 1)*(degree + 2)/2))
    1374       76128 :          DO I = 1, patches
    1375       75762 :             READ (iunit, *) chunk
    1376    55543848 :             C0(1:(Nder + 1)*(degree + 1)*(degree + 2)/2, I) = chunk(1:(Nder + 1)*(degree + 1)*(degree + 2)/2)
    1377             :          END DO
    1378         366 :          DEALLOCATE (chunk)
    1379             :       END IF
    1380         732 :       CALL group%bcast(C0, 0)
    1381             : 
    1382         732 :    END SUBROUTINE init
    1383             : 
    1384             : ! **************************************************************************************************
    1385             : !> \brief ...
    1386             : ! **************************************************************************************************
    1387         356 :    SUBROUTINE free_C0()
    1388         356 :       IF (ALLOCATED(C0)) DEALLOCATE (C0)
    1389         356 :       nderiv_init = -1
    1390         356 :    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   142323234 :    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   142323234 :       T1(0) = 1.0_dp
    1411   142323234 :       T2(0) = 1.0_dp
    1412   142323234 :       T1(1) = SQRT2*TG1
    1413   142323234 :       T2(1) = SQRT2*TG2
    1414   142323234 :       T1(2) = 2*TG1*T1(1) - SQRT2
    1415   142323234 :       T2(2) = 2*TG2*T2(1) - SQRT2
    1416   142323234 :       T1(3) = 2*TG1*T1(2) - T1(1)
    1417   142323234 :       T2(3) = 2*TG2*T2(2) - T2(1)
    1418   142323234 :       T1(4) = 2*TG1*T1(3) - T1(2)
    1419   142323234 :       T2(4) = 2*TG2*T2(3) - T2(2)
    1420   142323234 :       T1(5) = 2*TG1*T1(4) - T1(3)
    1421   142323234 :       T2(5) = 2*TG2*T2(4) - T2(3)
    1422   142323234 :       T1(6) = 2*TG1*T1(5) - T1(4)
    1423   142323234 :       T2(6) = 2*TG2*T2(5) - T2(4)
    1424   142323234 :       T1(7) = 2*TG1*T1(6) - T1(5)
    1425   142323234 :       T2(7) = 2*TG2*T2(6) - T2(5)
    1426   142323234 :       T1(8) = 2*TG1*T1(7) - T1(6)
    1427   142323234 :       T2(8) = 2*TG2*T2(7) - T2(6)
    1428   142323234 :       T1(9) = 2*TG1*T1(8) - T1(7)
    1429   142323234 :       T2(9) = 2*TG2*T2(8) - T2(7)
    1430   142323234 :       T1(10) = 2*TG1*T1(9) - T1(8)
    1431   142323234 :       T2(10) = 2*TG2*T2(9) - T2(8)
    1432   142323234 :       T1(11) = 2*TG1*T1(10) - T1(9)
    1433   142323234 :       T2(11) = 2*TG2*T2(10) - T2(9)
    1434   142323234 :       T1(12) = 2*TG1*T1(11) - T1(10)
    1435   142323234 :       T2(12) = 2*TG2*T2(11) - T2(10)
    1436   142323234 :       T1(13) = 2*TG1*T1(12) - T1(11)
    1437   142323234 :       T2(13) = 2*TG2*T2(12) - T2(11)
    1438   526415366 :       DO K = 1, NDERIV + 1
    1439   384092132 :          RES(K) = 0.0_dp
    1440  5761381980 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:13), C0(1:14, K))*T2(0)
    1441  5377289848 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:12), C0(15:27, K))*T2(1)
    1442  4993197716 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:11), C0(28:39, K))*T2(2)
    1443  4609105584 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:10), C0(40:50, K))*T2(3)
    1444  4225013452 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:9), C0(51:60, K))*T2(4)
    1445  3840921320 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:8), C0(61:69, K))*T2(5)
    1446  3456829188 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:7), C0(70:77, K))*T2(6)
    1447  3072737056 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:6), C0(78:84, K))*T2(7)
    1448  2688644924 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:5), C0(85:90, K))*T2(8)
    1449  2304552792 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:4), C0(91:95, K))*T2(9)
    1450  1920460660 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:3), C0(96:99, K))*T2(10)
    1451  1536368528 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:2), C0(100:102, K))*T2(11)
    1452  1152276396 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:1), C0(103:104, K))*T2(12)
    1453   910507498 :          RES(K) = RES(K) + DOT_PRODUCT(T1(0:0), C0(105:105, K))*T2(13)
    1454             :       END DO
    1455   142323234 :    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 1.15