LCOV - code coverage report
Current view: top level - src/xc - xc_xwpbe.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:9ccafda) Lines: 98.7 % 2373 2343
Test Date: 2026-10-15 00:55:44 Functions: 76.0 % 25 19

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief Calculates short range exchange part for wPBE functional and averaged
      10              : !>      PBE exchange-hole functional (omega = 0.0 )
      11              : !> \par History
      12              : !>      Manuel Guidon (05.2007)  : initial version
      13              : !> \author Manuel Guidon (05.2007)
      14              : ! **************************************************************************************************
      15              : MODULE xc_xwpbe
      16              :    USE bibliography, ONLY: Heyd2004, &
      17              :                            cite_reference
      18              :    USE input_section_types, ONLY: section_vals_type, &
      19              :                                   section_vals_val_get
      20              :    USE kinds, ONLY: dp
      21              :    USE mathconstants, ONLY: pi, &
      22              :                             rootpi
      23              :    USE xc_derivative_desc, ONLY: deriv_norm_drho, &
      24              :                                  deriv_norm_drhoa, &
      25              :                                  deriv_norm_drhob, &
      26              :                                  deriv_rho, &
      27              :                                  deriv_rhoa, &
      28              :                                  deriv_rhob
      29              :    USE xc_derivative_set_types, ONLY: xc_derivative_set_type, &
      30              :                                       xc_dset_get_derivative
      31              :    USE xc_derivative_types, ONLY: xc_derivative_get, &
      32              :                                   xc_derivative_type
      33              :    USE xc_rho_cflags_types, ONLY: xc_rho_cflags_type
      34              :    USE xc_rho_set_types, ONLY: xc_rho_set_get, &
      35              :                                xc_rho_set_type
      36              : #include "../base/base_uses.f90"
      37              :    #:include '../common/expint.fypp'
      38              : 
      39              :    IMPLICIT NONE
      40              : 
      41              :    PRIVATE
      42              : 
      43              : ! *** Global parameters ***
      44              : 
      45              :    PUBLIC :: xwpbe_lda_info, xwpbe_lda_eval, xwpbe_lsd_info, &
      46              :              xwpbe_lsd_eval
      47              : 
      48              :    REAL(KIND=dp), PARAMETER :: alpha1 = -1.128223946706117_dp, &
      49              :                                alpha2 = 1.452736265762971_dp, &
      50              :                                alpha3 = -1.243162299390327_dp, &
      51              :                                alpha4 = 0.971824836115601_dp, &
      52              :                                alpha5 = -0.568861079687373_dp, &
      53              :                                alpha6 = 0.246880514820192_dp, &
      54              :                                alpha7 = -0.065032363850763_dp, &
      55              :                                alpha8 = 0.008401793031216_dp
      56              :    REAL(KIND=dp), PARAMETER :: beta = 1.455915450052607_dp, &
      57              :                                beta2 = 2.0_dp
      58              :    REAL(KIND=dp), PARAMETER :: a1 = 0.00979681_dp, &
      59              :                                a2 = 0.04108340_dp, &
      60              :                                a3 = 0.18744000_dp, &
      61              :                                a4 = 0.00120824_dp, &
      62              :                                a5 = 0.0347188_dp
      63              :    REAL(KIND=dp), PARAMETER :: A = 1.0161144_dp, &
      64              :                                B = -0.37170836_dp, &
      65              :                                C = -0.077215461_dp, &
      66              :                                DD = 0.57786348_dp, &
      67              :                                E = -0.051955731_dp, &
      68              :                                F1 = 0.47965830_dp, &
      69              :                                F2 = 6.4753871_dp, &
      70              :                                clda = -0.73855876638202240588423_dp
      71              :    REAL(KIND=dp), PARAMETER :: expcutoff = 700.0_dp, &
      72              :                                exei1 = 4.0364_dp, &
      73              :                                exei2 = 1.15198_dp, &
      74              :                                exei3 = 5.03627_dp, &
      75              :                                exei4 = 4.19160_dp
      76              :    REAL(KIND=dp), PARAMETER :: smax = 8.572844_dp, &
      77              :                                sconst = 18.79622316_dp, &
      78              :                                scutoff = 8.3_dp
      79              :    REAL(KIND=dp), PARAMETER :: gcutoff = 0.08_dp, &
      80              :                                g1 = -0.02628417880_dp/E, &
      81              :                                g2 = -0.07117647788_dp/E, &
      82              :                                g3 = 0.08534541323_dp/E, &
      83              :                                g4 = 0.0_dp
      84              :    REAL(KIND=dp), PARAMETER :: wcutoff = 14.0_dp
      85              :    REAL(KIND=dp), PARAMETER :: f12 = 0.5_dp, f14 = 0.25_dp, f158 = 15.0_dp/8.0_dp, &
      86              :                                f1516 = 15.0_dp/16.0_dp, f24364 = 243.0_dp/64.0_dp, &
      87              :                                f2716 = 27.0_dp/16.0_dp, f2732 = 27.0_dp/32.0_dp, &
      88              :                                f34 = 0.75_dp, f32 = 1.5_dp, f38 = 0.375_dp, f68 = 0.75_dp, &
      89              :                                f6561512 = 6561.0_dp/512.0_dp, f8132 = 81.0_dp/32.0_dp, &
      90              :                                f8164 = 81.0_dp/64.0_dp, f729128 = 729.0_dp/128.0_dp, &
      91              :                                f52 = 2.5_dp, f94 = 9.0_dp/4.0_dp, f916 = 9.0_dp/16.0_dp, &
      92              :                                f89 = 8.0_dp/9.0_dp, f2187256 = 2187.0_dp/256.0_dp, &
      93              :                                r1 = 1.0_dp, f98 = 9.0_dp/8.0_dp, r15 = 15.0_dp, &
      94              :                                r3 = 3.0_dp, r4 = 4.0_dp, r16 = 16.0_dp, r8 = 8.0_dp, &
      95              :                                r6 = 6.0_dp, r2 = 2.0_dp
      96              : 
      97              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xc_xwpbe'
      98              : 
      99              : CONTAINS
     100              : 
     101              : ! **************************************************************************************************
     102              : !> \brief return various information on the functional
     103              : !> \param reference string with the reference of the actual functional
     104              : !> \param shortform string with the shortform of the functional name
     105              : !> \param needs the components needed by this functional are set to
     106              : !>        true (does not set the unneeded components to false)
     107              : !> \param max_deriv ...
     108              : !> \par History
     109              : !>      05.2007 created [Manuel Guidon]
     110              : !> \author Manuel Guidon
     111              : ! **************************************************************************************************
     112         2963 :    SUBROUTINE xwpbe_lda_info(reference, shortform, needs, max_deriv)
     113              :       CHARACTER(LEN=*), INTENT(OUT), OPTIONAL            :: reference, shortform
     114              :       TYPE(xc_rho_cflags_type), INTENT(inout), OPTIONAL  :: needs
     115              :       INTEGER, INTENT(out), OPTIONAL                     :: max_deriv
     116              : 
     117         2963 :       IF (PRESENT(reference)) THEN
     118            9 :          reference = "Jochen Heyd and Gustavo E. Scuseria, J. Chem. Phys., 120, 7274 {LDA version}"
     119              :       END IF
     120         2963 :       IF (PRESENT(shortform)) THEN
     121            9 :          shortform = "shortrange part of PBE exchange {LDA}"
     122              :       END IF
     123         2963 :       IF (PRESENT(needs)) THEN
     124         2954 :          needs%rho = .TRUE.
     125         2954 :          needs%norm_drho = .TRUE.
     126              :       END IF
     127              :       ! deriv > 1 are not correct
     128         2963 :       IF (PRESENT(max_deriv)) max_deriv = 1
     129         2963 :    END SUBROUTINE xwpbe_lda_info
     130              : 
     131              : ! **************************************************************************************************
     132              : !> \brief evaluates the screened hole averaged PBE exchange functional for lda
     133              : !> \param rho_set the density where you want to evaluate the functional
     134              : !> \param deriv_set place where to store the functional derivatives (they are
     135              : !>        added to the derivatives)
     136              : !> \param order maximum degree of the derivative that should be evaluated
     137              : !> \param xwpbe_params input parameters (scaling,omega)
     138              : !> \par History
     139              : !>      05.2007 created [Manuel Guidon]
     140              : !> \author Manuel Guidon
     141              : !> \note
     142              : !>      The current version provides code for derivatives up to second order.
     143              : !>      Using the maple sheet in cp2k/doc it is straightforward to produce routines
     144              : !>      for higher derivatives.
     145              : ! **************************************************************************************************
     146        18840 :    SUBROUTINE xwpbe_lda_eval(rho_set, deriv_set, order, xwpbe_params)
     147              : 
     148              :       TYPE(xc_rho_set_type), INTENT(IN)                  :: rho_set
     149              :       TYPE(xc_derivative_set_type), INTENT(IN)           :: deriv_set
     150              :       INTEGER, INTENT(IN)                                :: order
     151              :       TYPE(section_vals_type), POINTER                   :: xwpbe_params
     152              : 
     153              :       CHARACTER(len=*), PARAMETER                        :: routineN = 'xwpbe_lda_eval'
     154              : 
     155              :       INTEGER                                            :: handle, npoints
     156              :       INTEGER, DIMENSION(2, 3)                           :: bo
     157              :       REAL(kind=dp)                                      :: epsilon_norm_drho, epsilon_rho, omega, &
     158              :                                                             sx, sx0
     159              :       REAL(kind=dp), CONTIGUOUS, DIMENSION(:, :, :), &
     160         3768 :          POINTER                                         :: dummy, e_0, e_ndrho, e_rho, norm_drho, &
     161         3768 :                                                             rho
     162              :       TYPE(xc_derivative_type), POINTER                  :: deriv
     163              : 
     164         3768 :       CALL timeset(routineN, handle)
     165              : 
     166         3768 :       CALL cite_reference(Heyd2004)
     167              : 
     168         3768 :       CALL section_vals_val_get(xwpbe_params, "SCALE_X", r_val=sx)
     169         3768 :       CALL section_vals_val_get(xwpbe_params, "SCALE_X0", r_val=sx0)
     170         3768 :       CALL section_vals_val_get(xwpbe_params, "OMEGA", r_val=omega)
     171              : 
     172              :       CALL xc_rho_set_get(rho_set, rho=rho, &
     173              :                           norm_drho=norm_drho, local_bounds=bo, rho_cutoff=epsilon_rho, &
     174         3768 :                           drho_cutoff=epsilon_norm_drho)
     175         3768 :       npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
     176              : 
     177         3768 :       dummy => rho
     178              : 
     179         3768 :       e_0 => dummy
     180         3768 :       e_rho => dummy
     181         3768 :       e_ndrho => dummy
     182              : 
     183              :       deriv => xc_dset_get_derivative(deriv_set, [INTEGER::], &
     184         3768 :                                       allocate_deriv=.TRUE.)
     185         3768 :       CALL xc_derivative_get(deriv, deriv_data=e_0)
     186         3768 :       IF (order >= 1) THEN
     187              :          deriv => xc_dset_get_derivative(deriv_set, [deriv_rho], &
     188         3350 :                                          allocate_deriv=.TRUE.)
     189         3350 :          CALL xc_derivative_get(deriv, deriv_data=e_rho)
     190              :          deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drho], &
     191         3350 :                                          allocate_deriv=.TRUE.)
     192         3350 :          CALL xc_derivative_get(deriv, deriv_data=e_ndrho)
     193              :       END IF
     194         3768 :       IF (order > 1) THEN
     195            0 :          CPABORT("derivatives bigger than 1 not implemented")
     196              :       END IF
     197              : 
     198              : !$OMP     PARALLEL DEFAULT(NONE) &
     199              : !$OMP     SHARED(npoints, order, rho, norm_drho, e_0, e_rho, e_ndrho) &
     200         3768 : !$OMP     SHARED(epsilon_rho, sx, sx0, omega)
     201              : 
     202              :       CALL xwpbe_lda_calc(npoints, order, rho=rho, norm_drho=norm_drho, &
     203              :                           e_0=e_0, e_rho=e_rho, e_ndrho=e_ndrho, &
     204              :                           epsilon_rho=epsilon_rho, sx=sx, sx0=sx0, omega=omega)
     205              : 
     206              : !$OMP     END PARALLEL
     207              : 
     208         3768 :       CALL timestop(handle)
     209              : 
     210         3768 :    END SUBROUTINE xwpbe_lda_eval
     211              : 
     212              : ! **************************************************************************************************
     213              : !> \brief evaluates the screened hole averaged PBE exchange functional for lda
     214              : !> \param npoints ...
     215              : !> \param order maximum degree of the derivative that should be evaluated
     216              : !> \param rho , ndrho: density and norm of the density gradient
     217              : !> \param norm_drho ...
     218              : !> \param e_0 ...
     219              : !> \param e_rho ...
     220              : !> \param e_ndrho ...
     221              : !> \param epsilon_rho ...
     222              : !> \param sx , sx0: scaling factor for omega!=0 and omega=0
     223              : !> \param sx0 ...
     224              : !> \param omega screening parameter
     225              : !> \par History
     226              : !>      05.2007 created [Manuel Guidon]
     227              : !> \author Manuel Guidon
     228              : !> \note
     229              : !>      In order to avoid numerical instabilities, this routine calls different
     230              : !>      subroutines. There are 4 routines for the case omega!=0 and 2 routines
     231              : !>      for omega=0.
     232              : ! **************************************************************************************************
     233         3768 :    SUBROUTINE xwpbe_lda_calc(npoints, order, rho, norm_drho, e_0, e_rho, e_ndrho, &
     234              :                              epsilon_rho, sx, sx0, omega)
     235              : 
     236              :       INTEGER, INTENT(in)                                :: npoints, order
     237              :       REAL(kind=dp), DIMENSION(1:npoints), INTENT(inout) :: rho, norm_drho, e_0, e_rho, e_ndrho
     238              :       REAL(kind=dp), INTENT(in)                          :: epsilon_rho, sx, sx0, omega
     239              : 
     240              :       INTEGER                                            :: ip
     241              :       REAL(dp)                                           :: gradient_before, gradient_increment, &
     242              :                                                             my_ndrho, my_rho, pullback
     243              :       REAL(KIND=dp)                                      :: ss, ss2, sscale, t1, t2, t3, t4, t5, t6, &
     244              :                                                             t7, t8, ww
     245              : 
     246              : !$OMP     DO
     247              : 
     248              :       DO ip = 1, npoints
     249     83977303 :          my_rho = MAX(rho(ip), 0.0_dp)
     250     83977303 :          IF (my_rho > epsilon_rho) THEN
     251     69821467 :             gradient_before = e_ndrho(ip)
     252     69821467 :             my_ndrho = MAX(norm_drho(ip), 0.0_dp)
     253              : 
     254              :             !Do some precalculation in order to catch the correct branch afterwards
     255     69821467 :             sscale = 1.0_dp
     256     69821467 :             t1 = pi**2
     257     69821467 :             t2 = t1*my_rho
     258     69821467 :             t3 = t2**(0.1e1_dp/0.3e1_dp)
     259     69821467 :             t4 = 0.1e1_dp/t3
     260     69821467 :             t5 = omega*t4
     261     69821467 :             ww = 0.6933612743506347048433524e0_dp*t5
     262     69821467 :             t6 = my_ndrho*t4
     263     69821467 :             t7 = 0.1e1_dp/my_rho
     264     69821467 :             t8 = t7*sscale
     265     69821467 :             ss = 0.3466806371753173524216762e0_dp*t6*t8
     266     69821467 :             IF (ss > scutoff) THEN
     267     46741279 :                ss2 = ss*ss
     268     46741279 :                sscale = (smax*ss2 - sconst)/(ss2*ss)
     269              :             END IF
     270              : 
     271     69821467 :             IF (sx0 /= 0.0_dp) THEN
     272              :                !original PBE hole
     273     59543031 :                IF (ss*sscale > gcutoff) THEN
     274              :                   CALL xwpbe_lda_calc_0(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
     275     59263608 :                                         my_ndrho, sscale, sx0, order)
     276              :                ELSE
     277              :                   CALL xwpbe_lda_calc_01(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
     278       279423 :                                          my_ndrho, sscale, sx0, order)
     279              :                END IF
     280              :             END IF
     281              : 
     282     69821467 :             IF (sx /= 0.0_dp) THEN
     283     24513811 :                IF (omega == 0.0_dp) THEN
     284           28 :                   IF (ss*sscale > gcutoff) THEN
     285              :                      CALL xwpbe_lda_calc_0(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
     286           20 :                                            my_ndrho, sscale, sx, order)
     287              :                   ELSE
     288              :                      CALL xwpbe_lda_calc_01(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
     289            8 :                                             my_ndrho, sscale, sx, order)
     290              :                   END IF
     291     24513783 :                ELSE IF (ww < wcutoff .AND. ss*sscale > gcutoff) THEN
     292              :                   CALL xwpbe_lda_calc_1(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
     293     17846301 :                                         my_ndrho, omega, sscale, sx, order)
     294       233512 :                ELSE IF (ww < wcutoff .AND. ss*sscale <= gcutoff) THEN
     295              :                   CALL xwpbe_lda_calc_2(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
     296       233512 :                                         my_ndrho, omega, sscale, sx, order)
     297      6433970 :                ELSE IF (ww >= wcutoff .AND. ss*sscale > gcutoff) THEN
     298              :                   CALL xwpbe_lda_calc_3(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
     299      6433848 :                                         my_ndrho, omega, sscale, sx, order)
     300              :                ELSE
     301              :                   CALL xwpbe_lda_calc_4(e_0(ip), e_rho(ip), e_ndrho(ip), my_rho, &
     302          122 :                                         my_ndrho, omega, sscale, sx, order)
     303              :                END IF
     304              :             END IF
     305     69821467 :             IF (order >= 1 .AND. ss > scutoff) THEN
     306              :                ! Pull back g_eff = g*f(s), s = g/(2*k_F*rho), through the large-s scaling.
     307              :                ! The generated expressions differentiate at fixed f(s).
     308     31462880 :                pullback = (-smax*ss2 + 3.0_dp*sconst)/(smax*ss2 - sconst)
     309     31462880 :                gradient_increment = e_ndrho(ip) - gradient_before
     310     31462880 :                e_rho(ip) = e_rho(ip) - gradient_increment*(4.0_dp*my_ndrho/(3.0_dp*my_rho))*pullback
     311     31462880 :                e_ndrho(ip) = gradient_before + gradient_increment*(1.0_dp + pullback)
     312              :             END IF
     313              :          END IF
     314              :       END DO
     315              : 
     316              : !$OMP     END DO
     317              : 
     318         3768 :    END SUBROUTINE xwpbe_lda_calc
     319              : 
     320              : ! **************************************************************************************************
     321              : !> \brief Evaluates the screened hole averaged PBE exchange functional for lda
     322              : !> \param e_0 ...
     323              : !> \param e_rho ...
     324              : !> \param e_ndrho ...
     325              : !> \param rho , ndrho: density and norm of the density gradient
     326              : !> \param ndrho ...
     327              : !> \param sscale scaling factor to enforce Lieb-Oxford bound
     328              : !> \param sx0 scaling factor
     329              : !> \param order maximum degree of the derivative that should be evaluated
     330              : !> \par History
     331              : !>      05.2007 created [Manuel Guidon]
     332              : !> \author Manuel Guidon
     333              : !> \note
     334              : !>      This routine evaluates the exact functional for omega=0.
     335              : ! **************************************************************************************************
     336     87518835 :    SUBROUTINE xwpbe_lda_calc_0(e_0, e_rho, e_ndrho, rho, ndrho, sscale, sx0, order)
     337              :       REAL(KIND=dp), INTENT(INOUT)                       :: e_0, e_rho, e_ndrho
     338              :       REAL(KIND=dp), INTENT(IN)                          :: rho, ndrho, sscale, sx0
     339              :       INTEGER, INTENT(IN)                                :: order
     340              : 
     341              :       REAL(KIND=dp) :: dQndrho, dQrho, Q, t1, t10, t100, t103, t105, t106, t109, t11, t110, t111, &
     342              :                        t112, t114, t116, t117, t118, t119, t12, t120, t121, t122, t123, t125, t126, t127, t13, &
     343              :                        t130, t134, t135, t136, t138, t139, t14, t142, t143, t145, t146, t147, t148, t149, t15, &
     344              :                        t150, t152, t156, t158, t159, t16, t160, t163, t164, t165, t166, t169, t170, t172, t173, &
     345              :                        t174, t175, t176, t18, t180, t183, t184, t185, t187, t188, t19, t190, t191, t192, t193, &
     346              :                        t199, t2, t20, t200, t201, t202, t203, t207, t209, t21, t215, t218, t219, t22, t220, &
     347              :                        t222, t223, t224, t225, t227, t228, t231, t233, t236, t237, t24
     348              :       REAL(KIND=dp) :: t240, t241, t242, t245, t246, t247, t249, t25, t250, t253, t254, t258, t26, &
     349              :                        t261, t262, t263, t265, t266, t269, t272, t274, t275, t278, t28, t281, t282, t284, t285, &
     350              :                        t287, t288, t29, t290, t291, t294, t297, t3, t300, t301, t303, t304, t306, t307, t31, &
     351              :                        t314, t32, t321, t323, t326, t327, t33, t330, t334, t335, t336, t337, t338, t339, t34, &
     352              :                        t340, t342, t343, t344, t345, t347, t355, t356, t357, t358, t359, t36, t361, t362, t363, &
     353              :                        t367, t368, t37, t372, t374, t376, t377, t381, t383, t384, t387, t388, t39, t390, t391, &
     354              :                        t394, t397, t398, t4, t40, t400, t401, t402, t404, t405, t406
     355              :       REAL(KIND=dp) :: t408, t409, t410, t411, t412, t413, t414, t415, t416, t417, t418, t42, &
     356              :                        t423, t425, t426, t429, t430, t432, t433, t435, t44, t440, t443, t444, t446, t447, t449, &
     357              :                        t46, t463, t465, t47, t471, t472, t475, t476, t478, t479, t480, t484, t485, t489, t491, &
     358              :                        t495, t497, t5, t500, t501, t504, t505, t507, t508, t510, t511, t513, t514, t515, t52, &
     359              :                        t520, t53, t54, t56, t58, t59, t6, t61, t63, t65, t66, t67, t68, t69, t7, t70, t71, t72, &
     360              :                        t73, t74, t76, t77, t78, t79, t8, t80, t81, t83, t84, t86, t88, t89, t9, t91, t92, t93, &
     361              :                        t94, t95, t97, t98
     362              : 
     363     87518835 :       t1 = ndrho**2
     364     87518835 :       t2 = a1*t1
     365     87518835 :       t3 = r2**2
     366     87518835 :       t4 = 0.1e1_dp/t3
     367     87518835 :       t5 = t2*t4
     368     87518835 :       t6 = pi**2
     369     87518835 :       t7 = r3*t6
     370     87518835 :       t8 = t7*rho
     371     87518835 :       t9 = t8**(0.1e1_dp/0.3e1_dp)
     372     87518835 :       t10 = t9**2
     373     87518835 :       t11 = 0.1e1_dp/t10
     374     87518835 :       t12 = rho**2
     375     87518835 :       t13 = 0.1e1_dp/t12
     376     87518835 :       t14 = t11*t13
     377     87518835 :       t15 = sscale**2
     378     87518835 :       t16 = t14*t15
     379     87518835 :       t18 = t1**2
     380     87518835 :       t19 = a2*t18
     381     87518835 :       t20 = t3**2
     382     87518835 :       t21 = 0.1e1_dp/t20
     383     87518835 :       t22 = t19*t21
     384     87518835 :       t24 = 0.1e1_dp/t9/t8
     385     87518835 :       t25 = t12**2
     386     87518835 :       t26 = 0.1e1_dp/t25
     387     87518835 :       t28 = t15**2
     388     87518835 :       t29 = t24*t26*t28
     389     87518835 :       t31 = t5*t16 + t22*t29
     390     87518835 :       t32 = f94*t31
     391     87518835 :       t33 = a3*t18
     392     87518835 :       t34 = t33*t21
     393     87518835 :       t36 = t18*ndrho
     394     87518835 :       t37 = a4*t36
     395     87518835 :       t39 = 0.1e1_dp/t20/r2
     396     87518835 :       t40 = t37*t39
     397     87518835 :       t42 = 0.1e1_dp/t10/t8
     398     87518835 :       t44 = 0.1e1_dp/t25/rho
     399     87518835 :       t46 = t28*sscale
     400     87518835 :       t47 = t42*t44*t46
     401     87518835 :       t52 = 0.1e1_dp/t20/t3
     402     87518835 :       t53 = a5*t18*t1*t52
     403     87518835 :       t54 = r3**2
     404     87518835 :       t56 = t6**2
     405     87518835 :       t58 = 0.1e1_dp/t54/t56
     406     87518835 :       t59 = t25**2
     407     87518835 :       t61 = t28*t15
     408     87518835 :       t63 = t58/t59*t61
     409     87518835 :       t65 = r1 + t34*t29 + t40*t47 + t53*t63
     410     87518835 :       t66 = 0.1e1_dp/t65
     411     87518835 :       t67 = t66*t1
     412     87518835 :       t68 = t32*t67
     413     87518835 :       t69 = t4*t11
     414     87518835 :       t70 = t13*t15
     415     87518835 :       t71 = 0.1e1_dp/A
     416     87518835 :       t72 = t70*t71
     417     87518835 :       t73 = t69*t72
     418     87518835 :       Q = t68*t73
     419     87518835 :       t74 = rho**(0.1e1_dp/0.3e1_dp)
     420     87518835 :       t76 = t74*rho*f89
     421     87518835 :       t77 = B*f12
     422     87518835 :       t78 = t1*t4
     423     87518835 :       t79 = t78*t11
     424     87518835 :       t80 = t31*t66
     425     87518835 :       t81 = t70*t80
     426     87518835 :       t83 = t79*t81 + DD
     427     87518835 :       t84 = 0.1e1_dp/t83
     428     87518835 :       t86 = F2*t31
     429     87518835 :       t88 = F1 + t86*t66
     430     87518835 :       t89 = t70*t88
     431     87518835 :       t91 = t79*t89 + r1
     432     87518835 :       t92 = f12*t91
     433     87518835 :       t93 = t83**2
     434     87518835 :       t94 = 0.1e1_dp/t93
     435     87518835 :       t95 = C*t94
     436     87518835 :       t97 = f34*pi
     437     87518835 :       t98 = rootpi
     438     87518835 :       t100 = r6*C
     439     87518835 :       t103 = r4*B
     440     87518835 :       t105 = r8*A
     441     87518835 :       t106 = t93*t83
     442     87518835 :       t109 = t98*(r15*E + t100*t91*t83 + t103*t93 + t105*t106)
     443     87518835 :       t110 = 0.1e1_dp/r16
     444     87518835 :       t111 = SQRT(t83)
     445     87518835 :       t112 = t111*t106
     446     87518835 :       t114 = t110/t112
     447     87518835 :       t116 = SQRT(A)
     448     87518835 :       t117 = EXP(Q)
     449     87518835 :       t118 = t116*t117
     450     87518835 :       t119 = f32*ndrho
     451     87518835 :       t120 = 0.1e1_dp/r2
     452     87518835 :       t121 = t119*t120
     453     87518835 :       t122 = 0.1e1_dp/t9
     454     87518835 :       t123 = 0.1e1_dp/rho
     455     87518835 :       t125 = t80*t71
     456     87518835 :       t126 = SQRT(t125)
     457     87518835 :       t127 = sscale*t126
     458     87518835 :       t130 = erfc(t121*t122*t123*t127)
     459     87518835 :       t134 = 0.1e1_dp/f1516
     460     87518835 :       t135 = (t97 + t109*t114 - t97*t118*t130)*t134
     461     87518835 :       t136 = 0.1e1_dp/t98
     462     87518835 :       t138 = 0.1e1_dp/E
     463     87518835 :       t139 = t136*t112*t138
     464     87518835 :       t142 = (-t135*t139 + r1)*E
     465     87518835 :       t143 = 0.1e1_dp/t106
     466     87518835 :       t145 = f12*A
     467     87518835 :       t146 = exei(Q, t117)
     468     87518835 :       t147 = t78*t14
     469     87518835 :       t148 = t15*t31
     470     87518835 :       t149 = t66*t84
     471     87518835 :       t150 = t148*t149
     472     87518835 :       t152 = LOG(t147*t150)
     473              :       t156 = (t77*t84 + t92*t95 + t142*t143 + t145*(t146 + t152)) &
     474     87518835 :              *Clda
     475     87518835 :       e_0 = e_0 + (-t76*t156)*sx0
     476     87518835 :       IF (order >= 1) THEN
     477     64894530 :          t158 = t4*t42
     478     64894530 :          t159 = t2*t158
     479     64894530 :          t160 = t70*t7
     480     64894530 :          t163 = t12*rho
     481     64894530 :          t164 = 0.1e1_dp/t163
     482     64894530 :          t165 = t11*t164
     483     64894530 :          t166 = t165*t15
     484     64894530 :          t169 = t54*t56
     485     64894530 :          t170 = t169*t12
     486     64894530 :          t172 = 0.1e1_dp/t9/t170
     487     64894530 :          t173 = t21*t172
     488     64894530 :          t174 = t19*t173
     489     64894530 :          t175 = t26*t28
     490     64894530 :          t176 = t175*t7
     491     64894530 :          t180 = t24*t44*t28
     492              :          t183 = -0.2e1_dp/0.3e1_dp*t159*t160 - (2._dp*t5*t166) - 0.4e1_dp/ &
     493     64894530 :                 0.3e1_dp*t174*t176 - (4._dp*t22*t180)
     494     64894530 :          t184 = f94*t183
     495     64894530 :          t185 = t184*t67
     496     64894530 :          t187 = t65**2
     497     64894530 :          t188 = 0.1e1_dp/t187
     498     64894530 :          t190 = t188*t1*t4
     499     64894530 :          t191 = t32*t190
     500     64894530 :          t192 = t15*t71
     501     64894530 :          t193 = t33*t173
     502     64894530 :          t199 = 0.1e1_dp/t10/t170
     503     64894530 :          t200 = t39*t199
     504     64894530 :          t201 = t37*t200
     505     64894530 :          t202 = t44*t46
     506     64894530 :          t203 = t202*t7
     507     64894530 :          t207 = 0.1e1_dp/t25/t12
     508     64894530 :          t209 = t42*t207*t46
     509     64894530 :          t215 = t58/t59/rho*t61
     510              :          t218 = -0.4e1_dp/0.3e1_dp*t193*t176 - (4._dp*t34*t180) - 0.5e1_dp &
     511     64894530 :                 /0.3e1_dp*t201*t203 - (5._dp*t40*t209) - (8._dp*t53*t215)
     512     64894530 :          t219 = t192*t218
     513     64894530 :          t220 = t14*t219
     514     64894530 :          t222 = t67*t4
     515     64894530 :          t223 = t32*t222
     516     64894530 :          t224 = t42*t13
     517     64894530 :          t225 = t224*t15
     518     64894530 :          t227 = t71*r3*t6
     519     64894530 :          t228 = t225*t227
     520     64894530 :          t231 = t164*t15
     521     64894530 :          t233 = t69*t231*t71
     522              :          dQrho = t185*t73 - t191*t220 - 0.2e1_dp/0.3e1_dp*t223*t228 - (2._dp &
     523     64894530 :                                                                        *t68*t233)
     524     64894530 :          t236 = a1*ndrho
     525     64894530 :          t237 = t236*t4
     526     64894530 :          t240 = t1*ndrho
     527     64894530 :          t241 = a2*t240
     528     64894530 :          t242 = t241*t21
     529     64894530 :          t245 = 2._dp*t237*t16 + 4._dp*t242*t29
     530     64894530 :          t246 = f94*t245
     531     64894530 :          t247 = t246*t67
     532     64894530 :          t249 = a3*t240
     533     64894530 :          t250 = t249*t21
     534     64894530 :          t253 = a4*t18
     535     64894530 :          t254 = t253*t39
     536     64894530 :          t258 = a5*t36*t52
     537     64894530 :          t261 = 4._dp*t250*t29 + 5._dp*t254*t47 + 6._dp*t258*t63
     538     64894530 :          t262 = t192*t261
     539     64894530 :          t263 = t14*t262
     540     64894530 :          t265 = t66*ndrho
     541     64894530 :          t266 = t32*t265
     542     64894530 :          dQndrho = t247*t73 - t191*t263 + 2._dp*t266*t73
     543     64894530 :          t269 = t74*f89
     544     64894530 :          t272 = t78*t224
     545     64894530 :          t274 = t66*r3*t6
     546     64894530 :          t275 = t148*t274
     547     64894530 :          t278 = t231*t80
     548     64894530 :          t281 = t183*t66
     549     64894530 :          t282 = t70*t281
     550     64894530 :          t284 = t188*t218
     551     64894530 :          t285 = t148*t284
     552              :          t287 = -0.2e1_dp/0.3e1_dp*t272*t275 - (2._dp*t79*t278) + (t79 &
     553     64894530 :                                                                    *t282) - t147*t285
     554     64894530 :          t288 = t94*t287
     555     64894530 :          t290 = t15*t88
     556     64894530 :          t291 = t290*t7
     557     64894530 :          t294 = t231*t88
     558     64894530 :          t297 = F2*t183
     559     64894530 :          t300 = t297*t66 - t86*t284
     560     64894530 :          t301 = t70*t300
     561              :          t303 = -0.2e1_dp/0.3e1_dp*t272*t291 - (2._dp*t79*t294) + (t79 &
     562     64894530 :                                                                    *t301)
     563     64894530 :          t304 = f12*t303
     564     64894530 :          t306 = C*t143
     565     64894530 :          t307 = t306*t287
     566     64894530 :          t314 = t83*t287
     567              :          t321 = t98*(t100*t303*t83 + t100*t91*t287 + 2._dp*t103*t314 &
     568     64894530 :                      + 3._dp*t105*t93*t287)
     569     64894530 :          t323 = t93**2
     570     64894530 :          t326 = t110/t111/t323
     571     64894530 :          t327 = t326*t287
     572     64894530 :          t330 = t97*t116
     573     64894530 :          t334 = rootpi
     574     64894530 :          t335 = 0.1e1_dp/t334
     575     64894530 :          t336 = t117*t335
     576     64894530 :          t337 = f32**2
     577     64894530 :          t338 = t337*t1
     578     64894530 :          t339 = t338*t69
     579     64894530 :          t340 = t70*t125
     580     64894530 :          t342 = 1.0_dp/t117
     581     64894530 :          t343 = t120*t24
     582     64894530 :          t344 = t119*t343
     583     64894530 :          t345 = t123*sscale
     584     64894530 :          t347 = t126*r3*t6
     585     64894530 :          t355 = t119*t120*t122
     586     64894530 :          t356 = 0.1e1_dp/t126
     587     64894530 :          t357 = t281*t71
     588     64894530 :          t358 = t31*t188
     589     64894530 :          t359 = t71*t218
     590     64894530 :          t361 = t357 - t358*t359
     591     64894530 :          t362 = t356*t361
     592     64894530 :          t363 = t345*t362
     593              :          t367 = t342*(-t344*t345*t347/0.3e1_dp - t121*t122*t13*t127 &
     594     64894530 :                       + t355*t363/0.2e1_dp)
     595     64894530 :          t368 = t336*t367
     596              :          t372 = (t321*t114 - 0.7e1_dp/0.2e1_dp*t109*t327 - (t330*dQrho &
     597     64894530 :                                                             *t117*t130) + (2._dp*t330*t368))*t134
     598     64894530 :          t374 = t135*t136
     599     64894530 :          t376 = t111*t93*t138
     600     64894530 :          t377 = t376*t287
     601     64894530 :          t381 = (-t372*t139 - 0.7e1_dp/0.2e1_dp*t374*t377)*E
     602     64894530 :          t383 = 0.1e1_dp/t323
     603     64894530 :          t384 = t383*t287
     604     64894530 :          t387 = dexeirho(Q, dQrho, t146)
     605     64894530 :          t388 = t78*t225
     606     64894530 :          t390 = t84*r3*t6
     607     64894530 :          t391 = t80*t390
     608     64894530 :          t394 = t78*t165
     609     64894530 :          t397 = t15*t183
     610     64894530 :          t398 = t397*t149
     611     64894530 :          t400 = t188*t84
     612     64894530 :          t401 = t400*t218
     613     64894530 :          t402 = t148*t401
     614     64894530 :          t404 = t66*t94
     615     64894530 :          t405 = t404*t287
     616     64894530 :          t406 = t148*t405
     617              :          t408 = -0.2e1_dp/0.3e1_dp*t388*t391 - (2._dp*t394*t150) + t147 &
     618     64894530 :                 *t398 - t147*t402 - t147*t406
     619     64894530 :          t409 = 0.1e1_dp/t1
     620     64894530 :          t410 = t408*t409
     621     64894530 :          t411 = t3*t10
     622     64894530 :          t412 = t410*t411
     623     64894530 :          t413 = 0.1e1_dp/t15
     624     64894530 :          t414 = t12*t413
     625     64894530 :          t415 = 0.1e1_dp/t31
     626     64894530 :          t416 = t415*t65
     627     64894530 :          t417 = t416*t83
     628     64894530 :          t418 = t414*t417
     629              :          t423 = (-t77*t288 + t304*t95 - 2._dp*t92*t307 + t381*t143 - 3._dp &
     630     64894530 :                  *t142*t384 + t145*(t387 + t412*t418))*Clda
     631     64894530 :          e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t269*t156 - t76*t423)*sx0
     632     64894530 :          t425 = ndrho*t4
     633     64894530 :          t426 = t425*t11
     634     64894530 :          t429 = t245*t66
     635     64894530 :          t430 = t70*t429
     636     64894530 :          t432 = t188*t261
     637     64894530 :          t433 = t148*t432
     638     64894530 :          t435 = 2._dp*t426*t81 + t79*t430 - t147*t433
     639     64894530 :          t440 = F2*t245
     640     64894530 :          t443 = t440*t66 - t86*t432
     641     64894530 :          t444 = t70*t443
     642     64894530 :          t446 = 2._dp*t426*t89 + t79*t444
     643     64894530 :          t447 = f12*t446
     644     64894530 :          t449 = t306*t435
     645              :          t463 = t98*(t100*t446*t83 + t100*t91*t435 + 2._dp*t103*t83 &
     646     64894530 :                      *t435 + 3._dp*t105*t93*t435)
     647     64894530 :          t465 = t326*t435
     648     64894530 :          t471 = f32*t120
     649     64894530 :          t472 = t471*t122
     650     64894530 :          t475 = t429*t71
     651     64894530 :          t476 = t71*t261
     652     64894530 :          t478 = t475 - t358*t476
     653     64894530 :          t479 = t356*t478
     654     64894530 :          t480 = t345*t479
     655     64894530 :          t484 = t342*(t472*t345*t126 + t355*t480/0.2e1_dp)
     656     64894530 :          t485 = t336*t484
     657              :          t489 = (t463*t114 - 0.7e1_dp/0.2e1_dp*t109*t465 - (t330*dQndrho &
     658     64894530 :                                                             *t117*t130) + (2._dp*t330*t485))*t134
     659     64894530 :          t491 = t376*t435
     660     64894530 :          t495 = (-t489*t139 - 0.7e1_dp/0.2e1_dp*t374*t491)*E
     661     64894530 :          t497 = t383*t435
     662     64894530 :          t500 = dexeindrho(Q, dQndrho, t146)
     663     64894530 :          t501 = t425*t14
     664     64894530 :          t504 = t15*t245
     665     64894530 :          t505 = t504*t149
     666     64894530 :          t507 = t400*t261
     667     64894530 :          t508 = t148*t507
     668     64894530 :          t510 = t404*t435
     669     64894530 :          t511 = t148*t510
     670     64894530 :          t513 = 2._dp*t501*t150 + t147*t505 - t147*t508 - t147*t511
     671     64894530 :          t514 = t513*t409
     672     64894530 :          t515 = t514*t411
     673              :          t520 = (-t77*t94*t435 + t447*t95 - 2._dp*t92*t449 + t495*t143 &
     674     64894530 :                  - 3._dp*t142*t497 + t145*(t500 + t515*t418))*Clda
     675     64894530 :          e_ndrho = e_ndrho + (-t76*t520)*sx0
     676              :       END IF
     677              : 
     678     87518835 :    END SUBROUTINE xwpbe_lda_calc_0
     679              : 
     680              : ! **************************************************************************************************
     681              : !> \brief Evaluates the screened hole averaged PBE exchange functional for lda
     682              : !> \param e_0 ...
     683              : !> \param e_rho ...
     684              : !> \param e_ndrho ...
     685              : !> \param rho , ndrho: density and norm of the density gradient
     686              : !> \param ndrho ...
     687              : !> \param sscale scaling factor to enforce Lieb-Oxford bound
     688              : !> \param sx0 scaling factor
     689              : !> \param order maximum degree of the derivative that should be evaluated
     690              : !> \par History
     691              : !>      05.2007 created [Manuel Guidon]
     692              : !> \author Manuel Guidon
     693              : !> \note
     694              : !>      This routine evaluates the functional for omega=0 using a taylor
     695              : !>      expansion for the parameter G.
     696              : ! **************************************************************************************************
     697       307195 :    SUBROUTINE xwpbe_lda_calc_01(e_0, e_rho, e_ndrho, rho, ndrho, sscale, sx0, order)
     698              :       REAL(KIND=dp), INTENT(INOUT)                       :: e_0, e_rho, e_ndrho
     699              :       REAL(KIND=dp), INTENT(IN)                          :: rho, ndrho, sscale, sx0
     700              :       INTEGER, INTENT(IN)                                :: order
     701              : 
     702              :       REAL(KIND=dp) :: dQndrho, dQrho, Q, t1, t10, t100, t101, t103, t104, t107, t109, t11, t111, &
     703              :                        t112, t113, t114, t115, t116, t118, t12, t122, t124, t125, t126, t129, t13, t130, t131, &
     704              :                        t132, t135, t136, t139, t14, t140, t141, t142, t146, t149, t15, t150, t151, t153, t154, &
     705              :                        t156, t157, t158, t159, t16, t165, t166, t167, t168, t169, t173, t175, t18, t181, t184, &
     706              :                        t185, t186, t188, t189, t19, t190, t191, t193, t194, t197, t199, t2, t20, t202, t203, &
     707              :                        t206, t207, t208, t21, t211, t212, t213, t215, t216, t219, t22, t220, t224, t227, t228, &
     708              :                        t229, t231, t232, t235, t238, t24, t240, t241, t244, t247, t248
     709              :       REAL(KIND=dp) :: t25, t250, t251, t253, t254, t256, t257, t26, t260, t263, t266, t267, t270, &
     710              :                        t272, t273, t276, t277, t28, t280, t283, t288, t29, t293, t294, t297, t299, t3, t300, &
     711              :                        t301, t304, t305, t307, t308, t31, t311, t314, t315, t317, t318, t319, t32, t321, t322, &
     712              :                        t323, t325, t326, t327, t328, t329, t33, t330, t331, t332, t333, t334, t335, t34, t340, &
     713              :                        t342, t343, t346, t347, t349, t350, t352, t357, t36, t360, t361, t364, t366, t37, t371, &
     714              :                        t372, t375, t376, t379, t380, t383, t385, t388, t389, t39, t392, t393, t395, t396, t398, &
     715              :                        t399, t4, t40, t401, t402, t403, t408, t42, t44, t46, t47, t5
     716              :       REAL(KIND=dp) :: t52, t53, t54, t56, t58, t59, t6, t61, t63, t65, t66, t67, t68, t69, t7, &
     717              :                        t70, t71, t72, t73, t74, t76, t77, t78, t79, t8, t80, t81, t83, t84, t86, t88, t89, t9, &
     718              :                        t92, t93, t94, t95, t97, t98
     719              : 
     720       307195 :       IF (ndrho == 0.0_dp) THEN
     721              :          ! The cancelling exp(Q)*E1(Q)+log(Q) terms tend to -Euler's constant.
     722              :          t1 = -f89*clda*(B/(2.0_dp*DD) + C/(2.0_dp*DD**2) + E/DD**3 + &
     723          102 :                          0.5_dp*A*(-0.577215664901532860606512_dp + LOG(A/(f94*DD))))
     724          102 :          e_0 = e_0 + sx0*t1*rho**(4.0_dp/3.0_dp)
     725          102 :          IF (order >= 1) e_rho = e_rho + sx0*(4.0_dp/3.0_dp)*t1*rho**(1.0_dp/3.0_dp)
     726          102 :          RETURN
     727              :       END IF
     728              : 
     729       307093 :       t1 = ndrho**2
     730       307093 :       t2 = a1*t1
     731       307093 :       t3 = r2**2
     732       307093 :       t4 = 0.1e1_dp/t3
     733       307093 :       t5 = t2*t4
     734       307093 :       t6 = pi**2
     735       307093 :       t7 = r3*t6
     736       307093 :       t8 = t7*rho
     737       307093 :       t9 = t8**(0.1e1_dp/0.3e1_dp)
     738       307093 :       t10 = t9**2
     739       307093 :       t11 = 0.1e1_dp/t10
     740       307093 :       t12 = rho**2
     741       307093 :       t13 = 0.1e1_dp/t12
     742       307093 :       t14 = t11*t13
     743       307093 :       t15 = sscale**2
     744       307093 :       t16 = t14*t15
     745       307093 :       t18 = t1**2
     746       307093 :       t19 = a2*t18
     747       307093 :       t20 = t3**2
     748       307093 :       t21 = 0.1e1_dp/t20
     749       307093 :       t22 = t19*t21
     750       307093 :       t24 = 0.1e1_dp/t9/t8
     751       307093 :       t25 = t12**2
     752       307093 :       t26 = 0.1e1_dp/t25
     753       307093 :       t28 = t15**2
     754       307093 :       t29 = t24*t26*t28
     755       307093 :       t31 = t5*t16 + t22*t29
     756       307093 :       t32 = f94*t31
     757       307093 :       t33 = a3*t18
     758       307093 :       t34 = t33*t21
     759       307093 :       t36 = t18*ndrho
     760       307093 :       t37 = a4*t36
     761       307093 :       t39 = 0.1e1_dp/t20/r2
     762       307093 :       t40 = t37*t39
     763       307093 :       t42 = 0.1e1_dp/t10/t8
     764       307093 :       t44 = 0.1e1_dp/t25/rho
     765       307093 :       t46 = t28*sscale
     766       307093 :       t47 = t42*t44*t46
     767       307093 :       t52 = 0.1e1_dp/t20/t3
     768       307093 :       t53 = a5*t18*t1*t52
     769       307093 :       t54 = r3**2
     770       307093 :       t56 = t6**2
     771       307093 :       t58 = 0.1e1_dp/t54/t56
     772       307093 :       t59 = t25**2
     773       307093 :       t61 = t28*t15
     774       307093 :       t63 = t58/t59*t61
     775       307093 :       t65 = r1 + t34*t29 + t40*t47 + t53*t63
     776       307093 :       t66 = 0.1e1_dp/t65
     777       307093 :       t67 = t66*t1
     778       307093 :       t68 = t32*t67
     779       307093 :       t69 = t4*t11
     780       307093 :       t70 = t13*t15
     781       307093 :       t71 = 0.1e1_dp/A
     782       307093 :       t72 = t70*t71
     783       307093 :       t73 = t69*t72
     784       307093 :       Q = t68*t73
     785       307093 :       t74 = rho**(0.1e1_dp/0.3e1_dp)
     786       307093 :       t76 = t74*rho*f89
     787       307093 :       t77 = B*f12
     788       307093 :       t78 = t1*t4
     789       307093 :       t79 = t78*t11
     790       307093 :       t80 = t31*t66
     791       307093 :       t81 = t70*t80
     792       307093 :       t83 = t79*t81 + DD
     793       307093 :       t84 = 0.1e1_dp/t83
     794       307093 :       t86 = F2*t31
     795       307093 :       t88 = F1 + t86*t66
     796       307093 :       t89 = t70*t88
     797       307093 :       t92 = f12*(t79*t89 + r1)
     798       307093 :       t93 = t83**2
     799       307093 :       t94 = 0.1e1_dp/t93
     800       307093 :       t95 = C*t94
     801       307093 :       t97 = g2*t1
     802       307093 :       t98 = t97*t4
     803       307093 :       t100 = g3*t18
     804       307093 :       t101 = t100*t21
     805       307093 :       t103 = g1 + t98*t16 + t101*t29
     806       307093 :       t104 = t70*t103
     807       307093 :       t107 = (t79*t104 + r1)*E
     808       307093 :       t109 = 0.1e1_dp/t93/t83
     809       307093 :       t111 = f12*A
     810       307093 :       t112 = exei(Q)
     811       307093 :       t113 = t78*t14
     812       307093 :       t114 = t15*t31
     813       307093 :       t115 = t66*t84
     814       307093 :       t116 = t114*t115
     815       307093 :       t118 = LOG(t113*t116)
     816              :       t122 = (t77*t84 + t92*t95 + t107*t109 + t111*(t112 + t118)) &
     817       307093 :              *Clda
     818       307093 :       e_0 = e_0 + (-t76*t122)*sx0
     819       307093 :       IF (order >= 1) THEN
     820       300256 :          t124 = t4*t42
     821       300256 :          t125 = t2*t124
     822       300256 :          t126 = t70*t7
     823       300256 :          t129 = t12*rho
     824       300256 :          t130 = 0.1e1_dp/t129
     825       300256 :          t131 = t11*t130
     826       300256 :          t132 = t131*t15
     827       300256 :          t135 = t54*t56
     828       300256 :          t136 = t135*t12
     829       300256 :          t139 = t21/t9/t136
     830       300256 :          t140 = t19*t139
     831       300256 :          t141 = t26*t28
     832       300256 :          t142 = t141*t7
     833       300256 :          t146 = t24*t44*t28
     834              :          t149 = -0.2e1_dp/0.3e1_dp*t125*t126 - (2._dp*t5*t132) - 0.4e1_dp/ &
     835       300256 :                 0.3e1_dp*t140*t142 - (4._dp*t22*t146)
     836       300256 :          t150 = f94*t149
     837       300256 :          t151 = t150*t67
     838       300256 :          t153 = t65**2
     839       300256 :          t154 = 0.1e1_dp/t153
     840       300256 :          t156 = t154*t1*t4
     841       300256 :          t157 = t32*t156
     842       300256 :          t158 = t15*t71
     843       300256 :          t159 = t33*t139
     844       300256 :          t165 = 0.1e1_dp/t10/t136
     845       300256 :          t166 = t39*t165
     846       300256 :          t167 = t37*t166
     847       300256 :          t168 = t44*t46
     848       300256 :          t169 = t168*t7
     849       300256 :          t173 = 0.1e1_dp/t25/t12
     850       300256 :          t175 = t42*t173*t46
     851       300256 :          t181 = t58/t59/rho*t61
     852              :          t184 = -0.4e1_dp/0.3e1_dp*t159*t142 - (4._dp*t34*t146) - 0.5e1_dp &
     853       300256 :                 /0.3e1_dp*t167*t169 - (5._dp*t40*t175) - (8._dp*t53*t181)
     854       300256 :          t185 = t158*t184
     855       300256 :          t186 = t14*t185
     856       300256 :          t188 = t67*t4
     857       300256 :          t189 = t32*t188
     858       300256 :          t190 = t42*t13
     859       300256 :          t191 = t190*t15
     860       300256 :          t193 = t71*r3*t6
     861       300256 :          t194 = t191*t193
     862       300256 :          t197 = t130*t15
     863       300256 :          t199 = t69*t197*t71
     864              :          dQrho = t151*t73 - t157*t186 - 0.2e1_dp/0.3e1_dp*t189*t194 - (2._dp &
     865       300256 :                                                                        *t68*t199)
     866       300256 :          t202 = a1*ndrho
     867       300256 :          t203 = t202*t4
     868       300256 :          t206 = t1*ndrho
     869       300256 :          t207 = a2*t206
     870       300256 :          t208 = t207*t21
     871       300256 :          t211 = 2._dp*t203*t16 + 4._dp*t208*t29
     872       300256 :          t212 = f94*t211
     873       300256 :          t213 = t212*t67
     874       300256 :          t215 = a3*t206
     875       300256 :          t216 = t215*t21
     876       300256 :          t219 = a4*t18
     877       300256 :          t220 = t219*t39
     878       300256 :          t224 = a5*t36*t52
     879       300256 :          t227 = 4._dp*t216*t29 + 5._dp*t220*t47 + 6._dp*t224*t63
     880       300256 :          t228 = t158*t227
     881       300256 :          t229 = t14*t228
     882       300256 :          t231 = t66*ndrho
     883       300256 :          t232 = t32*t231
     884       300256 :          dQndrho = t213*t73 - t157*t229 + 2._dp*t232*t73
     885       300256 :          t235 = t74*f89
     886       300256 :          t238 = t78*t190
     887       300256 :          t240 = t66*r3*t6
     888       300256 :          t241 = t114*t240
     889       300256 :          t244 = t197*t80
     890       300256 :          t247 = t149*t66
     891       300256 :          t248 = t70*t247
     892       300256 :          t250 = t154*t184
     893       300256 :          t251 = t114*t250
     894              :          t253 = -0.2e1_dp/0.3e1_dp*t238*t241 - (2._dp*t79*t244) + (t79 &
     895       300256 :                                                                    *t248) - t113*t251
     896       300256 :          t254 = t94*t253
     897       300256 :          t256 = t15*t88
     898       300256 :          t257 = t256*t7
     899       300256 :          t260 = t197*t88
     900       300256 :          t263 = F2*t149
     901       300256 :          t266 = t263*t66 - t86*t250
     902       300256 :          t267 = t70*t266
     903              :          t270 = f12*(-0.2e1_dp/0.3e1_dp*t238*t257 - (2._dp*t79*t260) + &
     904       300256 :                      (t79*t267))
     905       300256 :          t272 = C*t109
     906       300256 :          t273 = t272*t253
     907       300256 :          t276 = t15*t103
     908       300256 :          t277 = t276*t7
     909       300256 :          t280 = t197*t103
     910       300256 :          t283 = t97*t124
     911       300256 :          t288 = t100*t139
     912              :          t293 = -0.2e1_dp/0.3e1_dp*t283*t126 - (2._dp*t98*t132) - 0.4e1_dp &
     913       300256 :                 /0.3e1_dp*t288*t142 - (4._dp*t101*t146)
     914       300256 :          t294 = t70*t293
     915              :          t297 = (-0.2e1_dp/0.3e1_dp*t238*t277 - (2._dp*t79*t280) + (t79 &
     916       300256 :                                                                     *t294))*E
     917       300256 :          t299 = t93**2
     918       300256 :          t300 = 0.1e1_dp/t299
     919       300256 :          t301 = t300*t253
     920       300256 :          t304 = dexeirho(Q, dQrho, t112)
     921       300256 :          t305 = t78*t191
     922       300256 :          t307 = t84*r3*t6
     923       300256 :          t308 = t80*t307
     924       300256 :          t311 = t78*t131
     925       300256 :          t314 = t15*t149
     926       300256 :          t315 = t314*t115
     927       300256 :          t317 = t154*t84
     928       300256 :          t318 = t317*t184
     929       300256 :          t319 = t114*t318
     930       300256 :          t321 = t66*t94
     931       300256 :          t322 = t321*t253
     932       300256 :          t323 = t114*t322
     933              :          t325 = -0.2e1_dp/0.3e1_dp*t305*t308 - (2._dp*t311*t116) + t113 &
     934       300256 :                 *t315 - t113*t319 - t113*t323
     935       300256 :          t326 = 0.1e1_dp/t1
     936       300256 :          t327 = t325*t326
     937       300256 :          t328 = t3*t10
     938       300256 :          t329 = t327*t328
     939       300256 :          t330 = 0.1e1_dp/t15
     940       300256 :          t331 = t12*t330
     941       300256 :          t332 = 0.1e1_dp/t31
     942       300256 :          t333 = t332*t65
     943       300256 :          t334 = t333*t83
     944       300256 :          t335 = t331*t334
     945              :          t340 = (-t77*t254 + t270*t95 - 2._dp*t92*t273 + t297*t109 - 3._dp &
     946       300256 :                  *t107*t301 + t111*(t304 + t329*t335))*Clda
     947       300256 :          e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t235*t122 - t76*t340)*sx0
     948       300256 :          t342 = ndrho*t4
     949       300256 :          t343 = t342*t11
     950       300256 :          t346 = t211*t66
     951       300256 :          t347 = t70*t346
     952       300256 :          t349 = t154*t227
     953       300256 :          t350 = t114*t349
     954       300256 :          t352 = 2._dp*t343*t81 + t79*t347 - t113*t350
     955       300256 :          t357 = F2*t211
     956       300256 :          t360 = t357*t66 - t86*t349
     957       300256 :          t361 = t70*t360
     958       300256 :          t364 = f12*(2._dp*t343*t89 + t79*t361)
     959       300256 :          t366 = t272*t352
     960       300256 :          t371 = g2*ndrho
     961       300256 :          t372 = t371*t4
     962       300256 :          t375 = g3*t206
     963       300256 :          t376 = t375*t21
     964       300256 :          t379 = 2._dp*t372*t16 + 4._dp*t376*t29
     965       300256 :          t380 = t70*t379
     966       300256 :          t383 = (2._dp*t343*t104 + t79*t380)*E
     967       300256 :          t385 = t300*t352
     968       300256 :          t388 = dexeindrho(Q, dQndrho, t112)
     969       300256 :          t389 = t342*t14
     970       300256 :          t392 = t15*t211
     971       300256 :          t393 = t392*t115
     972       300256 :          t395 = t317*t227
     973       300256 :          t396 = t114*t395
     974       300256 :          t398 = t321*t352
     975       300256 :          t399 = t114*t398
     976       300256 :          t401 = 2._dp*t389*t116 + t113*t393 - t113*t396 - t113*t399
     977       300256 :          t402 = t401*t326
     978       300256 :          t403 = t402*t328
     979              :          t408 = (-t77*t94*t352 + t364*t95 - 2._dp*t92*t366 + t383*t109 &
     980       300256 :                  - 3._dp*t107*t385 + t111*(t388 + t403*t335))*Clda
     981       300256 :          e_ndrho = e_ndrho + (-t76*t408)*sx0
     982              :       END IF
     983              : 
     984              :    END SUBROUTINE xwpbe_lda_calc_01
     985              : 
     986              : ! **************************************************************************************************
     987              : !> \brief Evaluates the screened hole averaged PBE exchange functional for lda.
     988              : !> \param e_0 ...
     989              : !> \param e_rho ...
     990              : !> \param e_ndrho ...
     991              : !> \param rho , ndrho: density and norm of the density gradient
     992              : !> \param ndrho ...
     993              : !> \param omega scaling factor
     994              : !> \param sscale scaling factor to enforce Lieb-Oxford bound
     995              : !> \param sx scaling factor
     996              : !> \param order maximum degree of the derivative that should be evaluated
     997              : !> \par History
     998              : !>      05.2007 created [Manuel Guidon]
     999              : !> \author Manuel Guidon
    1000              : !> \note
    1001              : !>      This routine evaluates the exact functional for omega!=0.
    1002              : ! **************************************************************************************************
    1003     24453786 :    SUBROUTINE xwpbe_lda_calc_1(e_0, e_rho, e_ndrho, rho, ndrho, omega, sscale, sx, order)
    1004              :       REAL(KIND=dp), INTENT(INOUT)                       :: e_0, e_rho, e_ndrho
    1005              :       REAL(KIND=dp), INTENT(IN)                          :: rho, ndrho, omega, sscale, sx
    1006              :       INTEGER, INTENT(IN)                                :: order
    1007              : 
    1008              :       REAL(KIND=dp) :: dQndrho, dQrho, Q, t1, t10, t1001, t1009, t1011, t102, t1024, t1035, t104, &
    1009              :                        t105, t1052, t1066, t1068, t1069, t108, t109, t11, t110, t111, t113, t115, t116, t117, &
    1010              :                        t118, t119, t12, t120, t121, t123, t124, t125, t126, t127, t128, t129, t13, t131, t132, &
    1011              :                        t133, t136, t14, t140, t141, t142, t144, t145, t147, t148, t149, t15, t150, t151, t152, &
    1012              :                        t153, t154, t155, t156, t157, t158, t159, t16, t162, t163, t166, t167, t168, t169, t17, &
    1013              :                        t170, t174, t176, t177, t18, t180, t181, t185, t186, t189, t19, t190, t192, t193, t194, &
    1014              :                        t195, t197, t198, t199, t2, t200, t202, t205, t209, t21, t210
    1015              :       REAL(KIND=dp) :: t213, t214, t219, t22, t221, t222, t223, t224, t227, t228, t23, t233, t237, &
    1016              :                        t239, t24, t241, t243, t246, t247, t25, t250, t251, t252, t253, t255, t256, t257, t258, &
    1017              :                        t263, t264, t265, t267, t27, t270, t271, t273, t275, t276, t28, t280, t284, t285, t286, &
    1018              :                        t288, t289, t29, t290, t293, t294, t295, t298, t3, t303, t305, t307, t31, t310, t311, &
    1019              :                        t312, t313, t315, t316, t318, t319, t32, t321, t326, t329, t330, t332, t333, t335, t336, &
    1020              :                        t338, t339, t34, t340, t342, t343, t345, t346, t347, t348, t349, t35, t351, t352, t353, &
    1021              :                        t354, t357, t358, t36, t361, t362, t363, t364, t368, t371, t372
    1022              :       REAL(KIND=dp) :: t373, t374, t375, t376, t377, t378, t38, t383, t384, t385, t386, t39, t390, &
    1023              :                        t392, t398, t4, t401, t402, t403, t404, t406, t409, t41, t411, t412, t415, t416, t419, &
    1024              :                        t42, t420, t421, t424, t425, t426, t428, t429, t432, t433, t437, t44, t440, t441, t442, &
    1025              :                        t444, t446, t449, t452, t453, t454, t457, t46, t461, t463, t465, t468, t469, t472, t475, &
    1026              :                        t478, t479, t48, t481, t486, t49, t493, t495, t498, t499, t5, t502, t503, t504, t507, &
    1027              :                        t508, t509, t510, t511, t513, t514, t515, t517, t518, t522, t525, t529, t530, t531, t532, &
    1028              :                        t533, t534, t535, t537, t538, t539, t54, t540, t542, t55, t550
    1029              :       REAL(KIND=dp) :: t551, t552, t553, t554, t556, t557, t558, t56, t562, t563, t567, t569, &
    1030              :                        t571, t572, t575, t576, t577, t578, t58, t581, t582, t583, t587, t588, t589, t592, t596, &
    1031              :                        t597, t6, t60, t602, t603, t608, t61, t613, t617, t620, t621, t624, t626, t629, t63, &
    1032              :                        t631, t634, t638, t639, t644, t645, t65, t653, t655, t656, t657, t658, t659, t663, t666, &
    1033              :                        t669, t67, t673, t679, t68, t681, t685, t689, t69, t690, t691, t697, t698, t7, t70, t701, &
    1034              :                        t71, t711, t713, t717, t718, t72, t721, t728, t73, t735, t736, t739, t74, t740, t746, &
    1035              :                        t747, t748, t75, t752, t753, t754, t755, t759, t761, t763, t765, t769
    1036              :       REAL(KIND=dp) :: t77, t771, t772, t779, t78, t780, t781, t783, t784, t787, t791, t792, t799, &
    1037              :                        t8, t80, t800, t801, t803, t804, t808, t81, t810, t812, t815, t816, t817, t82, t820, &
    1038              :                        t823, t826, t83, t832, t834, t836, t84, t842, t845, t846, t848, t849, t85, t851, t865, &
    1039              :                        t867, t87, t870, t871, t873, t874, t876, t877, t88, t880, t884, t885, t888, t889, t891, &
    1040              :                        t892, t893, t897, t898, t9, t90, t902, t904, t907, t908, t909, t91, t910, t916, t918, &
    1041              :                        t919, t92, t93, t930, t932, t933, t937, t94, t942, t945, t95, t951, t954, t958, t96, &
    1042              :                        t962, t965, t968, t97, t971, t972, t979, t982, t988, t99
    1043              : 
    1044     24453786 :       t1 = ndrho**2
    1045     24453786 :       t2 = r2**2
    1046     24453786 :       t3 = 0.1e1_dp/t2
    1047     24453786 :       t4 = t1*t3
    1048     24453786 :       t5 = pi**2
    1049     24453786 :       t6 = r3*t5
    1050     24453786 :       t7 = t6*rho
    1051     24453786 :       t8 = t7**(0.1e1_dp/0.3e1_dp)
    1052     24453786 :       t9 = t8**2
    1053     24453786 :       t10 = 0.1e1_dp/t9
    1054     24453786 :       t11 = t4*t10
    1055     24453786 :       t12 = rho**2
    1056     24453786 :       t13 = 0.1e1_dp/t12
    1057     24453786 :       t14 = sscale**2
    1058     24453786 :       t15 = t13*t14
    1059     24453786 :       t16 = a1*t1
    1060     24453786 :       t17 = t16*t3
    1061     24453786 :       t18 = t10*t13
    1062     24453786 :       t19 = t18*t14
    1063     24453786 :       t21 = t1**2
    1064     24453786 :       t22 = a2*t21
    1065     24453786 :       t23 = t2**2
    1066     24453786 :       t24 = 0.1e1_dp/t23
    1067     24453786 :       t25 = t22*t24
    1068     24453786 :       t27 = 0.1e1_dp/t8/t7
    1069     24453786 :       t28 = t12**2
    1070     24453786 :       t29 = 0.1e1_dp/t28
    1071     24453786 :       t31 = t14**2
    1072     24453786 :       t32 = t27*t29*t31
    1073     24453786 :       t34 = t17*t19 + t25*t32
    1074     24453786 :       t35 = a3*t21
    1075     24453786 :       t36 = t35*t24
    1076     24453786 :       t38 = t21*ndrho
    1077     24453786 :       t39 = a4*t38
    1078     24453786 :       t41 = 0.1e1_dp/t23/r2
    1079     24453786 :       t42 = t39*t41
    1080     24453786 :       t44 = 0.1e1_dp/t9/t7
    1081     24453786 :       t46 = 0.1e1_dp/t28/rho
    1082     24453786 :       t48 = t31*sscale
    1083     24453786 :       t49 = t44*t46*t48
    1084     24453786 :       t54 = 0.1e1_dp/t23/t2
    1085     24453786 :       t55 = a5*t21*t1*t54
    1086     24453786 :       t56 = r3**2
    1087     24453786 :       t58 = t5**2
    1088     24453786 :       t60 = 0.1e1_dp/t56/t58
    1089     24453786 :       t61 = t28**2
    1090     24453786 :       t63 = t31*t14
    1091     24453786 :       t65 = t60/t61*t63
    1092     24453786 :       t67 = r1 + t36*t32 + t42*t49 + t55*t65
    1093     24453786 :       t68 = 0.1e1_dp/t67
    1094     24453786 :       t69 = t34*t68
    1095     24453786 :       t70 = t15*t69
    1096     24453786 :       t71 = t11*t70
    1097     24453786 :       t72 = omega**2
    1098     24453786 :       t73 = beta*t72
    1099     24453786 :       t74 = t73*t10
    1100     24453786 :       t75 = t71 + t74
    1101     24453786 :       t77 = 0.1e1_dp/A
    1102     24453786 :       Q = f94*t75*t77
    1103     24453786 :       t78 = rho**(0.1e1_dp/0.3e1_dp)
    1104     24453786 :       t80 = t78*rho*f89
    1105     24453786 :       t81 = B*f12
    1106     24453786 :       t82 = t71 + DD
    1107     24453786 :       t83 = 0.1e1_dp/t82
    1108     24453786 :       t84 = t81*t83
    1109     24453786 :       t85 = F2*t34
    1110     24453786 :       t87 = F1 + t85*t68
    1111     24453786 :       t88 = t15*t87
    1112     24453786 :       t90 = t11*t88 + r1
    1113     24453786 :       t91 = f12*t90
    1114     24453786 :       t92 = t82**2
    1115     24453786 :       t93 = 0.1e1_dp/t92
    1116     24453786 :       t94 = C*t93
    1117     24453786 :       t95 = t91*t94
    1118     24453786 :       t96 = f34*pi
    1119     24453786 :       t97 = rootpi
    1120     24453786 :       t99 = r6*C
    1121     24453786 :       t102 = r4*B
    1122     24453786 :       t104 = r8*A
    1123     24453786 :       t105 = t92*t82
    1124     24453786 :       t108 = t97*(r15*E + t99*t90*t82 + t102*t92 + t104*t105)
    1125     24453786 :       t109 = 0.1e1_dp/r16
    1126     24453786 :       t110 = SQRT(t82)
    1127     24453786 :       t111 = t110*t105
    1128     24453786 :       t113 = t109/t111
    1129     24453786 :       t115 = SQRT(A)
    1130     24453786 :       t116 = f94*t34
    1131     24453786 :       t117 = t68*t1
    1132     24453786 :       t118 = t116*t117
    1133     24453786 :       t119 = t3*t10
    1134     24453786 :       t120 = t15*t77
    1135     24453786 :       t121 = t119*t120
    1136     24453786 :       t123 = EXP(t118*t121)
    1137     24453786 :       t124 = t115*t123
    1138     24453786 :       t125 = f32*ndrho
    1139     24453786 :       t126 = 0.1e1_dp/r2
    1140     24453786 :       t127 = t125*t126
    1141     24453786 :       t128 = 0.1e1_dp/t8
    1142     24453786 :       t129 = 0.1e1_dp/rho
    1143     24453786 :       t131 = t69*t77
    1144     24453786 :       t132 = SQRT(t131)
    1145     24453786 :       t133 = sscale*t132
    1146     24453786 :       t136 = erfc(t127*t128*t129*t133)
    1147     24453786 :       t140 = 0.1e1_dp/f1516
    1148     24453786 :       t141 = (t96 + t108*t113 - t96*t124*t136)*t140
    1149     24453786 :       t142 = 0.1e1_dp/t97
    1150     24453786 :       t144 = 0.1e1_dp/E
    1151     24453786 :       t145 = t142*t111*t144
    1152     24453786 :       t147 = -t141*t145 + r1
    1153     24453786 :       t148 = t147*E
    1154     24453786 :       t149 = 0.1e1_dp/t105
    1155     24453786 :       t150 = t148*t149
    1156     24453786 :       t151 = f158*E
    1157     24453786 :       t152 = t147*t83
    1158     24453786 :       t153 = t72*t10
    1159     24453786 :       t154 = t71 + DD + t153
    1160     24453786 :       t155 = t154**2
    1161     24453786 :       t156 = t155**2
    1162     24453786 :       t157 = t156*t154
    1163     24453786 :       t158 = SQRT(t157)
    1164     24453786 :       t159 = 0.1e1_dp/t158
    1165     24453786 :       t162 = SQRT(t154)
    1166     24453786 :       t163 = 0.1e1_dp/t162
    1167     24453786 :       t166 = f68*C
    1168     24453786 :       t167 = t90*t83
    1169     24453786 :       t168 = t155*t154
    1170     24453786 :       t169 = SQRT(t168)
    1171     24453786 :       t170 = 0.1e1_dp/t169
    1172              :       t174 = (-t151*t152*t159 - t81*t83*t163 - t166*t167*t170) &
    1173     24453786 :              *omega
    1174     24453786 :       t176 = f52*E
    1175     24453786 :       t177 = t147*t93
    1176     24453786 :       t180 = f12*C
    1177     24453786 :       t181 = t90*t93
    1178     24453786 :       t185 = t72*omega
    1179     24453786 :       t186 = (-t176*t177*t159 - t180*t181*t170)*t185
    1180     24453786 :       t189 = 0.1e1_dp/r3/t5
    1181     24453786 :       t190 = t189*t129
    1182     24453786 :       t192 = t72**2
    1183     24453786 :       t193 = t192*omega
    1184     24453786 :       t194 = t159*t193
    1185     24453786 :       t195 = t194*t44
    1186     24453786 :       t197 = f12*A
    1187     24453786 :       t198 = exei(Q)
    1188     24453786 :       t199 = t71 + DD + t74
    1189     24453786 :       t200 = 0.1e1_dp/t199
    1190     24453786 :       t202 = LOG(t75*t200)
    1191     24453786 :       t205 = SQRT(t199)
    1192     24453786 :       t209 = t115*f34
    1193     24453786 :       t210 = exer(Q)
    1194     24453786 :       t213 = (t197*t97/t205 - t209*t210)*alpha1
    1195     24453786 :       t214 = omega*t128
    1196     24453786 :       t219 = (t197*t200 - f98*t198)*alpha2
    1197     24453786 :       t221 = A*f14
    1198     24453786 :       t222 = t199**2
    1199     24453786 :       t223 = t222*t199
    1200     24453786 :       t224 = SQRT(t223)
    1201     24453786 :       t227 = SQRT(t75)
    1202     24453786 :       t228 = 0.1e1_dp/t227
    1203     24453786 :       t233 = 0.1e1_dp/t115
    1204              :       t237 = (t97*(t221/t224 - f98*t228) + f2716*t210*t233)*alpha3 &
    1205     24453786 :              *t185
    1206     24453786 :       t239 = 0.1e1_dp/t75
    1207     24453786 :       t241 = 0.1e1_dp/t222
    1208     24453786 :       t243 = f8132*t77
    1209     24453786 :       t246 = (-f98*t239 + t197*t241 + t243*t198)*alpha4
    1210     24453786 :       t247 = t192*t27
    1211     24453786 :       t250 = t75**2
    1212     24453786 :       t251 = t250*t75
    1213     24453786 :       t252 = SQRT(t251)
    1214     24453786 :       t253 = 0.1e1_dp/t252
    1215     24453786 :       t255 = f38*A
    1216     24453786 :       t256 = t222**2
    1217     24453786 :       t257 = t256*t199
    1218     24453786 :       t258 = SQRT(t257)
    1219     24453786 :       t263 = A**2
    1220     24453786 :       t264 = t263*A
    1221     24453786 :       t265 = SQRT(t264)
    1222     24453786 :       t267 = f24364/t265
    1223              :       t270 = (t97*(t243*t228 - f916*t253 + t255/t258) - t267*t210) &
    1224     24453786 :              *alpha5
    1225     24453786 :       t271 = t193*t44
    1226     24453786 :       t273 = 0.1e1_dp/t223
    1227     24453786 :       t275 = 0.1e1_dp/t250
    1228     24453786 :       t276 = f98*t275
    1229     24453786 :       t280 = f729128/t263
    1230     24453786 :       t284 = t192*t72
    1231              :       t285 = (A*t273 - t276 + t243*r1*t239 - t280*t198)*alpha6 &
    1232     24453786 :              *t284
    1233     24453786 :       t286 = t60*t13
    1234     24453786 :       t288 = f1516*A
    1235     24453786 :       t289 = t256*t223
    1236     24453786 :       t290 = SQRT(t289)
    1237     24453786 :       t293 = t250**2
    1238     24453786 :       t294 = t293*t75
    1239     24453786 :       t295 = SQRT(t294)
    1240     24453786 :       t298 = f8164*t77
    1241     24453786 :       t303 = t263**2
    1242     24453786 :       t305 = SQRT(t303*A)
    1243     24453786 :       t307 = f2187256/t305
    1244              :       t310 = (t97*(t288/t290 - f2732/t295 + t298*t253 - t280*t228) &
    1245     24453786 :               + t307*t210)*alpha7
    1246     24453786 :       t311 = t192*t185
    1247     24453786 :       t312 = t56*t58
    1248     24453786 :       t313 = t312*t12
    1249     24453786 :       t315 = 0.1e1_dp/t8/t313
    1250     24453786 :       t316 = t311*t315
    1251     24453786 :       t318 = r3*A
    1252     24453786 :       t319 = 0.1e1_dp/t256
    1253     24453786 :       t321 = 0.1e1_dp/t251
    1254     24453786 :       t326 = f6561512/t264
    1255              :       t329 = (t318*t319 - f94*t321 + t243*t275 - t280*t239 + t326 &
    1256     24453786 :               *t198)*alpha8
    1257     24453786 :       t330 = t192**2
    1258     24453786 :       t332 = 0.1e1_dp/t9/t313
    1259     24453786 :       t333 = t330*t332
    1260              :       t335 = t84 + t95 + t150 + t174*t128 + t186*t190 - t150*t195 + &
    1261              :              t197*(t198 + t202) + t213*t214 + t219*t153 + t237*t190 + &
    1262     24453786 :              t246*t247 + t270*t271 + t285*t286 + t310*t316 + t329*t333
    1263     24453786 :       t336 = t335*Clda
    1264     24453786 :       e_0 = e_0 + (-t80*t336)*sx
    1265     24453786 :       IF (order >= 1) THEN
    1266     15526556 :          t338 = t44*t13
    1267     15526556 :          t339 = t4*t338
    1268     15526556 :          t340 = t14*t34
    1269     15526556 :          t342 = t68*r3*t5
    1270     15526556 :          t343 = t340*t342
    1271     15526556 :          t345 = 0.2e1_dp/0.3e1_dp*t339*t343
    1272     15526556 :          t346 = t12*rho
    1273     15526556 :          t347 = 0.1e1_dp/t346
    1274     15526556 :          t348 = t347*t14
    1275     15526556 :          t349 = t348*t69
    1276     15526556 :          t351 = 2._dp*t11*t349
    1277     15526556 :          t352 = t3*t44
    1278     15526556 :          t353 = t16*t352
    1279     15526556 :          t354 = t15*t6
    1280     15526556 :          t357 = t10*t347
    1281     15526556 :          t358 = t357*t14
    1282     15526556 :          t361 = t24*t315
    1283     15526556 :          t362 = t22*t361
    1284     15526556 :          t363 = t29*t31
    1285     15526556 :          t364 = t363*t6
    1286     15526556 :          t368 = t27*t46*t31
    1287              :          t371 = -0.2e1_dp/0.3e1_dp*t353*t354 - (2._dp*t17*t358) - 0.4e1_dp &
    1288     15526556 :                 /0.3e1_dp*t362*t364 - (4._dp*t25*t368)
    1289     15526556 :          t372 = t371*t68
    1290     15526556 :          t373 = t15*t372
    1291     15526556 :          t374 = t11*t373
    1292     15526556 :          t375 = t4*t18
    1293     15526556 :          t376 = t67**2
    1294     15526556 :          t377 = 0.1e1_dp/t376
    1295     15526556 :          t378 = t35*t361
    1296     15526556 :          t383 = t41*t332
    1297     15526556 :          t384 = t39*t383
    1298     15526556 :          t385 = t46*t48
    1299     15526556 :          t386 = t385*t6
    1300     15526556 :          t390 = 0.1e1_dp/t28/t12
    1301     15526556 :          t392 = t44*t390*t48
    1302     15526556 :          t398 = t60/t61/rho*t63
    1303              :          t401 = -0.4e1_dp/0.3e1_dp*t378*t364 - (4._dp*t36*t368) - 0.5e1_dp &
    1304     15526556 :                 /0.3e1_dp*t384*t386 - (5._dp*t42*t392) - (8._dp*t55*t398)
    1305     15526556 :          t402 = t377*t401
    1306     15526556 :          t403 = t340*t402
    1307     15526556 :          t404 = t375*t403
    1308     15526556 :          t406 = t44*r3*t5
    1309     15526556 :          t409 = -t345 - t351 + t374 - t404 - 0.2e1_dp/0.3e1_dp*t73*t406
    1310     15526556 :          dQrho = f94*t409*t77
    1311     15526556 :          t411 = ndrho*t3
    1312     15526556 :          t412 = t411*t10
    1313     15526556 :          t415 = a1*ndrho
    1314     15526556 :          t416 = t415*t3
    1315     15526556 :          t419 = t1*ndrho
    1316     15526556 :          t420 = a2*t419
    1317     15526556 :          t421 = t420*t24
    1318     15526556 :          t424 = 2._dp*t416*t19 + 4._dp*t421*t32
    1319     15526556 :          t425 = t424*t68
    1320     15526556 :          t426 = t15*t425
    1321     15526556 :          t428 = a3*t419
    1322     15526556 :          t429 = t428*t24
    1323     15526556 :          t432 = a4*t21
    1324     15526556 :          t433 = t432*t41
    1325     15526556 :          t437 = a5*t38*t54
    1326     15526556 :          t440 = 4._dp*t429*t32 + 5._dp*t433*t49 + 6._dp*t437*t65
    1327     15526556 :          t441 = t377*t440
    1328     15526556 :          t442 = t340*t441
    1329     15526556 :          t444 = 2._dp*t412*t70 + t11*t426 - t375*t442
    1330     15526556 :          dQndrho = f94*t444*t77
    1331     15526556 :          t446 = t78*f89
    1332     15526556 :          t449 = t60*t347
    1333     15526556 :          t452 = C*t149
    1334     15526556 :          t453 = -t345 - t351 + t374 - t404
    1335     15526556 :          t454 = t452*t453
    1336     15526556 :          t457 = t329*t330
    1337     15526556 :          t461 = t56*r3*t58*t5*t346
    1338     15526556 :          t463 = 0.1e1_dp/t9/t461
    1339     15526556 :          t465 = t463*r3*t5
    1340     15526556 :          t468 = t14*t87
    1341     15526556 :          t469 = t468*t6
    1342     15526556 :          t472 = t348*t87
    1343     15526556 :          t475 = F2*t371
    1344     15526556 :          t478 = t475*t68 - t85*t402
    1345     15526556 :          t479 = t15*t478
    1346              :          t481 = -0.2e1_dp/0.3e1_dp*t339*t469 - (2._dp*t11*t472) + (t11 &
    1347     15526556 :                                                                    *t479)
    1348     15526556 :          t486 = t82*t453
    1349              :          t493 = t97*(t99*t481*t82 + t99*t90*t453 + 2._dp*t102*t486 &
    1350     15526556 :                      + 3._dp*t104*t92*t453)
    1351     15526556 :          t495 = t92**2
    1352     15526556 :          t498 = t109/t110/t495
    1353     15526556 :          t499 = t498*t453
    1354     15526556 :          t502 = t96*t115
    1355     15526556 :          t503 = f94*t371
    1356     15526556 :          t504 = t503*t117
    1357     15526556 :          t507 = t377*t1*t3
    1358     15526556 :          t508 = t116*t507
    1359     15526556 :          t509 = t14*t77
    1360     15526556 :          t510 = t509*t401
    1361     15526556 :          t511 = t18*t510
    1362     15526556 :          t513 = t117*t3
    1363     15526556 :          t514 = t116*t513
    1364     15526556 :          t515 = t338*t14
    1365     15526556 :          t517 = t77*r3*t5
    1366     15526556 :          t518 = t515*t517
    1367     15526556 :          t522 = t119*t348*t77
    1368              :          t525 = t504*t121 - t508*t511 - 0.2e1_dp/0.3e1_dp*t514*t518 - (2._dp &
    1369     15526556 :                                                                        *t118*t522)
    1370     15526556 :          t529 = rootpi
    1371     15526556 :          t530 = 0.1e1_dp/t529
    1372     15526556 :          t531 = t123*t530
    1373     15526556 :          t532 = f32**2
    1374     15526556 :          t533 = t532*t1
    1375     15526556 :          t534 = t533*t119
    1376     15526556 :          t535 = t15*t131
    1377     15526556 :          t537 = EXP(-t534*t535)
    1378     15526556 :          t538 = t126*t27
    1379     15526556 :          t539 = t125*t538
    1380     15526556 :          t540 = t129*sscale
    1381     15526556 :          t542 = t132*r3*t5
    1382     15526556 :          t550 = t125*t126*t128
    1383     15526556 :          t551 = 0.1e1_dp/t132
    1384     15526556 :          t552 = t372*t77
    1385     15526556 :          t553 = t34*t377
    1386     15526556 :          t554 = t77*t401
    1387     15526556 :          t556 = t552 - t553*t554
    1388     15526556 :          t557 = t551*t556
    1389     15526556 :          t558 = t540*t557
    1390              :          t562 = t537*(-t539*t540*t542/0.3e1_dp - t127*t128*t13*t133 &
    1391     15526556 :                       + t550*t558/0.2e1_dp)
    1392     15526556 :          t563 = t531*t562
    1393              :          t567 = (t493*t113 - 0.7e1_dp/0.2e1_dp*t108*t499 - (t502*t525 &
    1394     15526556 :                                                             *t123*t136) + (2._dp*t502*t563))*t140
    1395     15526556 :          t569 = t141*t142
    1396     15526556 :          t571 = t110*t92*t144
    1397     15526556 :          t572 = t571*t453
    1398     15526556 :          t575 = -t567*t145 - 0.7e1_dp/0.2e1_dp*t569*t572
    1399     15526556 :          t576 = t575*E
    1400     15526556 :          t577 = t576*t149
    1401     15526556 :          t578 = t189*t13
    1402     15526556 :          t581 = 0.1e1_dp/t158/t157
    1403     15526556 :          t582 = t149*t581
    1404     15526556 :          t583 = t148*t582
    1405     15526556 :          t587 = -t345 - t351 + t374 - t404 - 0.2e1_dp/0.3e1_dp*t72*t44*t6
    1406     15526556 :          t588 = t156*t587
    1407     15526556 :          t589 = t271*t588
    1408     15526556 :          t592 = t219*t72
    1409     15526556 :          t596 = 0.1e1_dp/t224/t223
    1410     15526556 :          t597 = t596*t222
    1411     15526556 :          t602 = 0.1e1_dp/t227/t75
    1412     15526556 :          t603 = f98*t602
    1413     15526556 :          t608 = dexerrho(Q, dQrho)
    1414              :          t613 = (t97*(-0.3e1_dp/0.2e1_dp*t221*t597*t409 + t603*t409/ &
    1415     15526556 :                       0.2e1_dp) + f2716*t608*t233)*alpha3*t185
    1416     15526556 :          t617 = f12*t481
    1417     15526556 :          t620 = 0.1e1_dp/t495
    1418     15526556 :          t621 = t620*t453
    1419     15526556 :          t624 = t213*omega
    1420     15526556 :          t626 = t27*r3*t5
    1421     15526556 :          t629 = t246*t192
    1422     15526556 :          t631 = t315*r3*t5
    1423     15526556 :          t634 = t602*t409
    1424     15526556 :          t638 = 0.1e1_dp/t252/t251
    1425     15526556 :          t639 = f916*t638
    1426     15526556 :          t644 = 0.1e1_dp/t258/t257
    1427     15526556 :          t645 = t644*t256
    1428              :          t653 = (t97*(-t243*t634/0.2e1_dp + 0.3e1_dp/0.2e1_dp*t639*t250* &
    1429     15526556 :                       t409 - 0.5e1_dp/0.2e1_dp*t255*t645*t409) - t267*t608)*alpha5
    1430              :          t655 = -(2._dp*t285*t449) - (2._dp*t91*t454) - 0.8e1_dp/0.3e1_dp &
    1431              :                 *t457*t465 + t577 - t186*t578 + 0.5e1_dp/0.2e1_dp*t583*t589 &
    1432              :                 - 0.2e1_dp/0.3e1_dp*t592*t406 + t613*t190 - t81*t93*t453 + &
    1433              :                 t617*t94 - t237*t578 - (3._dp*t148*t621) - t624*t626/0.3e1_dp &
    1434     15526556 :                 - 0.4e1_dp/0.3e1_dp*t629*t631 + t653*t271
    1435     15526556 :          t656 = t149*t159
    1436     15526556 :          t657 = t148*t656
    1437     15526556 :          t658 = t193*t332
    1438     15526556 :          t659 = t658*t6
    1439     15526556 :          t663 = t273*t409
    1440     15526556 :          t666 = dexeirho(Q, dQrho)
    1441     15526556 :          t669 = (t276*t409 - 2._dp*t197*t663 + t243*t666)*alpha4
    1442     15526556 :          t673 = t97/t205/t199
    1443     15526556 :          t679 = (-t197*t673*t409/0.2e1_dp - t209*t608)*alpha1
    1444     15526556 :          t681 = t241*t409
    1445     15526556 :          t685 = (-t197*t681 - f98*t666)*alpha2
    1446     15526556 :          t689 = 0.1e1_dp/t290/t289
    1447     15526556 :          t690 = t256*t222
    1448     15526556 :          t691 = t689*t690
    1449     15526556 :          t697 = f2732/t295/t294
    1450     15526556 :          t698 = t293*t409
    1451     15526556 :          t701 = t638*t250
    1452              :          t711 = (t97*(-0.7e1_dp/0.2e1_dp*t288*t691*t409 + 0.5e1_dp/0.2e1_dp &
    1453              :                       *t697*t698 - 0.3e1_dp/0.2e1_dp*t298*t701*t409 + t280*t634/ &
    1454     15526556 :                       0.2e1_dp) + t307*t608)*alpha7
    1455     15526556 :          t713 = 0.1e1_dp/t257
    1456     15526556 :          t717 = 0.1e1_dp/t293
    1457     15526556 :          t718 = f94*t717
    1458     15526556 :          t721 = t321*t409
    1459              :          t728 = (-4._dp*t318*t713*t409 + 3._dp*t718*t409 - 2._dp*t243*t721 &
    1460     15526556 :                  + t280*t275*t409 + t326*t666)*alpha8
    1461     15526556 :          t735 = t176*t147
    1462     15526556 :          t736 = t656*t453
    1463     15526556 :          t739 = t93*t581
    1464     15526556 :          t740 = t739*t588
    1465     15526556 :          t746 = t180*t90
    1466     15526556 :          t747 = t149*t170
    1467     15526556 :          t748 = t747*t453
    1468     15526556 :          t752 = 0.1e1_dp/t169/t168
    1469     15526556 :          t753 = t93*t752
    1470     15526556 :          t754 = t155*t587
    1471     15526556 :          t755 = t753*t754
    1472              :          t759 = (-t176*t575*t93*t159 + (2._dp*t735*t736) + 0.5e1_dp/ &
    1473              :                  0.2e1_dp*(t735)*(t740) - t180*t481*t93*t170 + (2._dp &
    1474     15526556 :                                                                 *t746*t748) + 0.3e1_dp/0.2e1_dp*(t746)*(t755))*t185
    1475     15526556 :          t761 = t310*t311
    1476     15526556 :          t763 = 0.1e1_dp/t8/t461
    1477     15526556 :          t765 = t763*r3*t5
    1478     15526556 :          t769 = t75*t241
    1479     15526556 :          t771 = t409*t200 - t769*t409
    1480     15526556 :          t772 = t771*t239
    1481     15526556 :          t779 = t151*t147
    1482     15526556 :          t780 = t93*t159
    1483     15526556 :          t781 = t780*t453
    1484     15526556 :          t783 = t83*t581
    1485     15526556 :          t784 = t783*t588
    1486     15526556 :          t787 = t93*t163
    1487     15526556 :          t791 = 0.1e1_dp/t162/t154
    1488     15526556 :          t792 = t83*t791
    1489     15526556 :          t799 = t166*t90
    1490     15526556 :          t800 = t93*t170
    1491     15526556 :          t801 = t800*t453
    1492     15526556 :          t803 = t83*t752
    1493     15526556 :          t804 = t803*t754
    1494              :          t808 = (-t151*t575*t83*t159 + t779*t781 + 0.5e1_dp/0.2e1_dp*t779 &
    1495              :                  *t784 + t81*t787*t453 + t81*t792*t587/0.2e1_dp - t166 &
    1496              :                  *t481*t83*t170 + t799*t801 + 0.3e1_dp/0.2e1_dp*t799*t804)* &
    1497     15526556 :                 omega
    1498     15526556 :          t810 = t148*t620
    1499     15526556 :          t812 = t194*t44*t453
    1500     15526556 :          t815 = t270*t193
    1501     15526556 :          t816 = t332*r3
    1502     15526556 :          t817 = t816*t5
    1503     15526556 :          t820 = A*t319
    1504     15526556 :          t823 = f98*t321
    1505     15526556 :          t826 = r1*t275
    1506              :          t832 = (-3._dp*t820*t409 + 2._dp*t823*t409 - t243*t826*t409 - t280 &
    1507     15526556 :                  *t666)*alpha6*t284
    1508              :          t834 = 0.5e1_dp/0.3e1_dp*t657*t659 + t669*t247 + t679*t214 + t685 &
    1509              :                 *t153 - t577*t195 + t711*t316 + t728*t333 - t174*t626 &
    1510              :                 /0.3e1_dp + t759*t190 - 0.7e1_dp/0.3e1_dp*t761*t765 + t197*(t666 &
    1511              :                                                                   + t772*t199) + t808*t128 + (3._dp*t810*t812) - 0.5e1_dp/0.3e1_dp &
    1512     15526556 :                 *t815*t817 + t832*t286
    1513     15526556 :          t836 = (t655 + t834)*Clda
    1514     15526556 :          e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t446*t336 - t80*t836)*sx
    1515     15526556 :          t842 = F2*t424
    1516     15526556 :          t845 = t842*t68 - t85*t441
    1517     15526556 :          t846 = t15*t845
    1518     15526556 :          t848 = 2._dp*t412*t88 + t11*t846
    1519     15526556 :          t849 = f12*t848
    1520     15526556 :          t851 = t452*t444
    1521              :          t865 = t97*(t99*t848*t82 + t99*t90*t444 + 2._dp*t102*t82 &
    1522     15526556 :                      *t444 + 3._dp*t104*t92*t444)
    1523     15526556 :          t867 = t498*t444
    1524     15526556 :          t870 = f94*t424
    1525     15526556 :          t871 = t870*t117
    1526     15526556 :          t873 = t509*t440
    1527     15526556 :          t874 = t18*t873
    1528     15526556 :          t876 = t68*ndrho
    1529     15526556 :          t877 = t116*t876
    1530     15526556 :          t880 = t871*t121 - t508*t874 + 2._dp*t877*t121
    1531     15526556 :          t884 = f32*t126
    1532     15526556 :          t885 = t884*t128
    1533     15526556 :          t888 = t425*t77
    1534     15526556 :          t889 = t77*t440
    1535     15526556 :          t891 = t888 - t553*t889
    1536     15526556 :          t892 = t551*t891
    1537     15526556 :          t893 = t540*t892
    1538     15526556 :          t897 = t537*(t885*t540*t132 + t550*t893/0.2e1_dp)
    1539     15526556 :          t898 = t531*t897
    1540              :          t902 = (t865*t113 - 0.7e1_dp/0.2e1_dp*t108*t867 - (t502*t880 &
    1541     15526556 :                                                             *t123*t136) + (2._dp*t502*t898))*t140
    1542     15526556 :          t904 = t571*t444
    1543     15526556 :          t907 = -t902*t145 - 0.7e1_dp/0.2e1_dp*t569*t904
    1544     15526556 :          t908 = t907*E
    1545     15526556 :          t909 = t908*t149
    1546     15526556 :          t910 = t620*t444
    1547     15526556 :          t916 = t780*t444
    1548     15526556 :          t918 = t156*t444
    1549     15526556 :          t919 = t783*t918
    1550     15526556 :          t930 = t800*t444
    1551     15526556 :          t932 = t155*t444
    1552     15526556 :          t933 = t803*t932
    1553              :          t937 = (-t151*t907*t83*t159 + t779*t916 + 0.5e1_dp/0.2e1_dp*t779 &
    1554              :                  *t919 + t81*t787*t444 + t81*t792*t444/0.2e1_dp - t166 &
    1555              :                  *t848*t83*t170 + t799*t930 + 0.3e1_dp/0.2e1_dp*t799*t933)* &
    1556     15526556 :                 omega
    1557     15526556 :          t942 = t656*t444
    1558     15526556 :          t945 = t739*t918
    1559     15526556 :          t951 = t747*t444
    1560     15526556 :          t954 = t753*t932
    1561              :          t958 = (-t176*t907*t93*t159 + (2._dp*t735*t942) + 0.5e1_dp/ &
    1562              :                  0.2e1_dp*(t735)*(t945) - t180*t848*t93*t170 + (2._dp &
    1563     15526556 :                                                                 *t746*t951) + 0.3e1_dp/0.2e1_dp*(t746)*(t954))*t185
    1564     15526556 :          t962 = t194*t44*t444
    1565     15526556 :          t965 = t271*t918
    1566     15526556 :          t968 = dexeindrho(Q, dQndrho)
    1567     15526556 :          t971 = t444*t200 - t769*t444
    1568     15526556 :          t972 = t971*t239
    1569     15526556 :          t979 = dexerndrho(Q, dQndrho)
    1570     15526556 :          t982 = (-t197*t673*t444/0.2e1_dp - t209*t979)*alpha1
    1571     15526556 :          t988 = (-t197*t241*t444 - f98*t968)*alpha2
    1572              :          t1001 = (t97*(-0.3e1_dp/0.2e1_dp*t221*t597*t444 + t603*t444/ &
    1573     15526556 :                        0.2e1_dp) + f2716*t979*t233)*alpha3*t185
    1574     15526556 :          t1009 = (t276*t444 - 2._dp*t197*t273*t444 + t243*t968)*alpha4
    1575     15526556 :          t1011 = t602*t444
    1576              :          t1024 = (t97*(-t243*t1011/0.2e1_dp + 0.3e1_dp/0.2e1_dp*t639*t250 &
    1577     15526556 :                        *t444 - 0.5e1_dp/0.2e1_dp*t255*t645*t444) - t267*t979)*alpha5
    1578              :          t1035 = (-3._dp*t820*t444 + 2._dp*t823*t444 - t243*t826*t444 - &
    1579     15526556 :                   t280*t968)*alpha6*t284
    1580              :          t1052 = (t97*(-0.7e1_dp/0.2e1_dp*t288*t691*t444 + 0.5e1_dp/0.2e1_dp &
    1581              :                        *t697*t293*t444 - 0.3e1_dp/0.2e1_dp*t298*t701*t444 + t280 &
    1582     15526556 :                        *t1011/0.2e1_dp) + t307*t979)*alpha7
    1583              :          t1066 = (-4._dp*t318*t713*t444 + 3._dp*t718*t444 - 2._dp*t243*t321 &
    1584     15526556 :                   *t444 + t280*t275*t444 + t326*t968)*alpha8
    1585              :          t1068 = -t81*t93*t444 + t849*t94 - (2._dp*t91*t851) + t909 &
    1586              :                  - (3._dp*t148*t910) + t937*t128 + t958*t190 - t909*t195 &
    1587              :                  + (3._dp*t810*t962) + 0.5e1_dp/0.2e1_dp*t583*t965 + t197*(t968 &
    1588              :                                                                          + t972*t199) + t982*t214 + t988*t153 + t1001*t190 + t1009 &
    1589              :                  *t247 + t1024*t271 + t1035*t286 + t1052*t316 + t1066* &
    1590     15526556 :                  t333
    1591     15526556 :          t1069 = t1068*Clda
    1592     15526556 :          e_ndrho = e_ndrho + (-t80*t1069)*sx
    1593              :       END IF
    1594              : 
    1595     24453786 :    END SUBROUTINE xwpbe_lda_calc_1
    1596              : 
    1597              : ! **************************************************************************************************
    1598              : !> \brief Evaluates the screened hole averaged PBE exchange functional for lda.
    1599              : !> \param e_0 ...
    1600              : !> \param e_rho ...
    1601              : !> \param e_ndrho ...
    1602              : !> \param rho , ndrho: density and norm of the density gradient
    1603              : !> \param ndrho ...
    1604              : !> \param omega scaling factor
    1605              : !> \param sscale scaling factor to enforce Lieb-Oxford bound
    1606              : !> \param sx scaling factor
    1607              : !> \param order maximum degree of the derivative that should be evaluated
    1608              : !> \par History
    1609              : !>      05.2007 created [Manuel Guidon]
    1610              : !> \author Manuel Guidon
    1611              : !> \note
    1612              : !>      This routine evaluates the functional for omega!=0 using a taylor
    1613              : !>      expansion for the parameter G.
    1614              : ! **************************************************************************************************
    1615       239869 :    SUBROUTINE xwpbe_lda_calc_2(e_0, e_rho, e_ndrho, rho, ndrho, omega, sscale, sx, order)
    1616              :       REAL(KIND=dp), INTENT(INOUT)                       :: e_0, e_rho, e_ndrho
    1617              :       REAL(KIND=dp), INTENT(IN)                          :: rho, ndrho, omega, sscale, sx
    1618              :       INTEGER, INTENT(IN)                                :: order
    1619              : 
    1620              :       REAL(KIND=dp) :: dQndrho, dQrho, Q, t1, t10, t100, t102, t103, t105, t106, t108, t109, t11, &
    1621              :                        t110, t111, t112, t113, t114, t115, t116, t117, t118, t12, t121, t122, t125, t126, t127, &
    1622              :                        t128, t129, t13, t133, t134, t136, t137, t14, t140, t141, t145, t146, t149, t15, t151, &
    1623              :                        t153, t154, t155, t156, t158, t159, t16, t160, t161, t163, t166, t167, t17, t171, t172, &
    1624              :                        t173, t176, t177, t18, t182, t184, t185, t186, t187, t19, t190, t191, t196, t2, t200, &
    1625              :                        t202, t204, t206, t209, t21, t210, t213, t214, t215, t216, t218, t219, t22, t220, t221, &
    1626              :                        t226, t227, t228, t23, t230, t233, t234, t236, t238, t239, t24
    1627              :       REAL(KIND=dp) :: t243, t247, t248, t249, t25, t251, t252, t253, t256, t257, t258, t261, &
    1628              :                        t266, t268, t27, t270, t273, t274, t275, t276, t278, t279, t28, t281, t282, t284, t289, &
    1629              :                        t29, t292, t293, t295, t296, t298, t299, t3, t301, t302, t303, t305, t306, t308, t309, &
    1630              :                        t31, t310, t311, t312, t314, t315, t316, t317, t32, t320, t321, t324, t325, t326, t327, &
    1631              :                        t331, t334, t335, t336, t337, t338, t339, t34, t340, t341, t346, t347, t348, t349, t35, &
    1632              :                        t353, t355, t36, t361, t364, t365, t366, t367, t369, t372, t374, t375, t378, t379, t38, &
    1633              :                        t382, t383, t384, t387, t388, t389, t39, t391, t392, t395, t396, t4
    1634              :       REAL(KIND=dp) :: t400, t403, t404, t405, t407, t409, t41, t413, t416, t417, t42, t420, t423, &
    1635              :                        t428, t433, t434, t436, t44, t440, t441, t442, t443, t447, t448, t452, t453, t454, t457, &
    1636              :                        t458, t46, t461, t464, t467, t468, t470, t474, t475, t476, t48, t480, t481, t482, t483, &
    1637              :                        t487, t489, t49, t491, t496, t5, t500, t503, t505, t506, t507, t510, t512, t513, t514, &
    1638              :                        t516, t519, t522, t523, t524, t530, t531, t535, t536, t54, t541, t542, t549, t55, t551, &
    1639              :                        t552, t558, t559, t56, t561, t565, t566, t569, t574, t577, t579, t58, t583, t584, t585, &
    1640              :                        t587, t588, t591, t595, t596, t6, t60, t603, t604, t605, t607
    1641              :       REAL(KIND=dp) :: t608, t61, t612, t615, t620, t622, t626, t628, t629, t63, t633, t634, t635, &
    1642              :                        t638, t641, t644, t65, t650, t652, t656, t658, t659, t660, t665, t67, t670, t671, t679, &
    1643              :                        t68, t681, t685, t687, t689, t69, t692, t695, t697, t699, t7, t70, t702, t705, t709, t71, &
    1644              :                        t710, t714, t72, t723, t725, t727, t73, t733, t736, t737, t739, t74, t740, t742, t747, &
    1645              :                        t748, t75, t751, t752, t755, t756, t758, t759, t760, t761, t767, t769, t77, t770, t78, &
    1646              :                        t781, t783, t784, t788, t793, t796, t8, t80, t802, t805, t809, t81, t813, t816, t819, &
    1647              :                        t82, t822, t823, t83, t830, t833, t839, t84, t85, t852, t860
    1648              :       REAL(KIND=dp) :: t862, t87, t875, t88, t886, t9, t90, t903, t91, t917, t919, t92, t920, t93, &
    1649              :                        t94, t95, t96, t97, t99
    1650              : 
    1651       239869 :       t1 = ndrho**2
    1652       239869 :       t2 = r2**2
    1653       239869 :       t3 = 0.1e1_dp/t2
    1654       239869 :       t4 = t1*t3
    1655       239869 :       t5 = pi**2
    1656       239869 :       t6 = r3*t5
    1657       239869 :       t7 = t6*rho
    1658       239869 :       t8 = t7**(0.1e1_dp/0.3e1_dp)
    1659       239869 :       t9 = t8**2
    1660       239869 :       t10 = 0.1e1_dp/t9
    1661       239869 :       t11 = t4*t10
    1662       239869 :       t12 = rho**2
    1663       239869 :       t13 = 0.1e1_dp/t12
    1664       239869 :       t14 = sscale**2
    1665       239869 :       t15 = t13*t14
    1666       239869 :       t16 = a1*t1
    1667       239869 :       t17 = t16*t3
    1668       239869 :       t18 = t10*t13
    1669       239869 :       t19 = t18*t14
    1670       239869 :       t21 = t1**2
    1671       239869 :       t22 = a2*t21
    1672       239869 :       t23 = t2**2
    1673       239869 :       t24 = 0.1e1_dp/t23
    1674       239869 :       t25 = t22*t24
    1675       239869 :       t27 = 0.1e1_dp/t8/t7
    1676       239869 :       t28 = t12**2
    1677       239869 :       t29 = 0.1e1_dp/t28
    1678       239869 :       t31 = t14**2
    1679       239869 :       t32 = t27*t29*t31
    1680       239869 :       t34 = t17*t19 + t25*t32
    1681       239869 :       t35 = a3*t21
    1682       239869 :       t36 = t35*t24
    1683       239869 :       t38 = t21*ndrho
    1684       239869 :       t39 = a4*t38
    1685       239869 :       t41 = 0.1e1_dp/t23/r2
    1686       239869 :       t42 = t39*t41
    1687       239869 :       t44 = 0.1e1_dp/t9/t7
    1688       239869 :       t46 = 0.1e1_dp/t28/rho
    1689       239869 :       t48 = t31*sscale
    1690       239869 :       t49 = t44*t46*t48
    1691       239869 :       t54 = 0.1e1_dp/t23/t2
    1692       239869 :       t55 = a5*t21*t1*t54
    1693       239869 :       t56 = r3**2
    1694       239869 :       t58 = t5**2
    1695       239869 :       t60 = 0.1e1_dp/t56/t58
    1696       239869 :       t61 = t28**2
    1697       239869 :       t63 = t31*t14
    1698       239869 :       t65 = t60/t61*t63
    1699       239869 :       t67 = r1 + t36*t32 + t42*t49 + t55*t65
    1700       239869 :       t68 = 0.1e1_dp/t67
    1701       239869 :       t69 = t34*t68
    1702       239869 :       t70 = t15*t69
    1703       239869 :       t71 = t11*t70
    1704       239869 :       t72 = omega**2
    1705       239869 :       t73 = beta*t72
    1706       239869 :       t74 = t73*t10
    1707       239869 :       t75 = t71 + t74
    1708       239869 :       t77 = 0.1e1_dp/A
    1709       239869 :       Q = f94*t75*t77
    1710       239869 :       t78 = rho**(0.1e1_dp/0.3e1_dp)
    1711       239869 :       t80 = t78*rho*f89
    1712       239869 :       t81 = B*f12
    1713       239869 :       t82 = t71 + DD
    1714       239869 :       t83 = 0.1e1_dp/t82
    1715       239869 :       t84 = t81*t83
    1716       239869 :       t85 = F2*t34
    1717       239869 :       t87 = F1 + t85*t68
    1718       239869 :       t88 = t15*t87
    1719       239869 :       t90 = t11*t88 + r1
    1720       239869 :       t91 = f12*t90
    1721       239869 :       t92 = t82**2
    1722       239869 :       t93 = 0.1e1_dp/t92
    1723       239869 :       t94 = C*t93
    1724       239869 :       t95 = t91*t94
    1725       239869 :       t96 = g2*t1
    1726       239869 :       t97 = t96*t3
    1727       239869 :       t99 = g3*t21
    1728       239869 :       t100 = t99*t24
    1729       239869 :       t102 = g1 + t97*t19 + t100*t32
    1730       239869 :       t103 = t15*t102
    1731       239869 :       t105 = t11*t103 + r1
    1732       239869 :       t106 = t105*E
    1733       239869 :       t108 = 0.1e1_dp/t92/t82
    1734       239869 :       t109 = t106*t108
    1735       239869 :       t110 = f158*E
    1736       239869 :       t111 = t105*t83
    1737       239869 :       t112 = t72*t10
    1738       239869 :       t113 = t71 + DD + t112
    1739       239869 :       t114 = t113**2
    1740       239869 :       t115 = t114**2
    1741       239869 :       t116 = t115*t113
    1742       239869 :       t117 = SQRT(t116)
    1743       239869 :       t118 = 0.1e1_dp/t117
    1744       239869 :       t121 = SQRT(t113)
    1745       239869 :       t122 = 0.1e1_dp/t121
    1746       239869 :       t125 = f68*C
    1747       239869 :       t126 = t90*t83
    1748       239869 :       t127 = t114*t113
    1749       239869 :       t128 = SQRT(t127)
    1750       239869 :       t129 = 0.1e1_dp/t128
    1751              :       t133 = (-t110*t111*t118 - t81*t83*t122 - t125*t126*t129) &
    1752       239869 :              *omega
    1753       239869 :       t134 = 0.1e1_dp/t8
    1754       239869 :       t136 = f52*E
    1755       239869 :       t137 = t105*t93
    1756       239869 :       t140 = f12*C
    1757       239869 :       t141 = t90*t93
    1758       239869 :       t145 = t72*omega
    1759       239869 :       t146 = (-t136*t137*t118 - t140*t141*t129)*t145
    1760       239869 :       t149 = 0.1e1_dp/r3/t5
    1761       239869 :       t151 = t149/rho
    1762       239869 :       t153 = t72**2
    1763       239869 :       t154 = t153*omega
    1764       239869 :       t155 = t118*t154
    1765       239869 :       t156 = t155*t44
    1766       239869 :       t158 = f12*A
    1767       239869 :       t159 = exei(Q)
    1768       239869 :       t160 = t71 + DD + t74
    1769       239869 :       t161 = 0.1e1_dp/t160
    1770       239869 :       t163 = LOG(t75*t161)
    1771       239869 :       t166 = rootpi
    1772       239869 :       t167 = SQRT(t160)
    1773       239869 :       t171 = SQRT(A)
    1774       239869 :       t172 = t171*f34
    1775       239869 :       t173 = exer(Q)
    1776       239869 :       t176 = (t158*t166/t167 - t172*t173)*alpha1
    1777       239869 :       t177 = omega*t134
    1778       239869 :       t182 = (t158*t161 - f98*t159)*alpha2
    1779       239869 :       t184 = A*f14
    1780       239869 :       t185 = t160**2
    1781       239869 :       t186 = t185*t160
    1782       239869 :       t187 = SQRT(t186)
    1783       239869 :       t190 = SQRT(t75)
    1784       239869 :       t191 = 0.1e1_dp/t190
    1785       239869 :       t196 = 0.1e1_dp/t171
    1786              :       t200 = (t166*(t184/t187 - f98*t191) + f2716*t173*t196)* &
    1787       239869 :              alpha3*t145
    1788       239869 :       t202 = 0.1e1_dp/t75
    1789       239869 :       t204 = 0.1e1_dp/t185
    1790       239869 :       t206 = f8132*t77
    1791       239869 :       t209 = (-f98*t202 + t158*t204 + t206*t159)*alpha4
    1792       239869 :       t210 = t153*t27
    1793       239869 :       t213 = t75**2
    1794       239869 :       t214 = t213*t75
    1795       239869 :       t215 = SQRT(t214)
    1796       239869 :       t216 = 0.1e1_dp/t215
    1797       239869 :       t218 = f38*A
    1798       239869 :       t219 = t185**2
    1799       239869 :       t220 = t219*t160
    1800       239869 :       t221 = SQRT(t220)
    1801       239869 :       t226 = A**2
    1802       239869 :       t227 = t226*A
    1803       239869 :       t228 = SQRT(t227)
    1804       239869 :       t230 = f24364/t228
    1805              :       t233 = (t166*(t206*t191 - f916*t216 + t218/t221) - t230*t173) &
    1806       239869 :              *alpha5
    1807       239869 :       t234 = t154*t44
    1808       239869 :       t236 = 0.1e1_dp/t186
    1809       239869 :       t238 = 0.1e1_dp/t213
    1810       239869 :       t239 = f98*t238
    1811       239869 :       t243 = f729128/t226
    1812       239869 :       t247 = t153*t72
    1813              :       t248 = (A*t236 - t239 + t206*r1*t202 - t243*t159)*alpha6 &
    1814       239869 :              *t247
    1815       239869 :       t249 = t60*t13
    1816       239869 :       t251 = f1516*A
    1817       239869 :       t252 = t219*t186
    1818       239869 :       t253 = SQRT(t252)
    1819       239869 :       t256 = t213**2
    1820       239869 :       t257 = t256*t75
    1821       239869 :       t258 = SQRT(t257)
    1822       239869 :       t261 = f8164*t77
    1823       239869 :       t266 = t226**2
    1824       239869 :       t268 = SQRT(t266*A)
    1825       239869 :       t270 = f2187256/t268
    1826              :       t273 = (t166*(t251/t253 - f2732/t258 + t261*t216 - t243*t191) &
    1827       239869 :               + t270*t173)*alpha7
    1828       239869 :       t274 = t153*t145
    1829       239869 :       t275 = t56*t58
    1830       239869 :       t276 = t275*t12
    1831       239869 :       t278 = 0.1e1_dp/t8/t276
    1832       239869 :       t279 = t274*t278
    1833       239869 :       t281 = r3*A
    1834       239869 :       t282 = 0.1e1_dp/t219
    1835       239869 :       t284 = 0.1e1_dp/t214
    1836       239869 :       t289 = f6561512/t227
    1837              :       t292 = (t281*t282 - f94*t284 + t206*t238 - t243*t202 + t289 &
    1838       239869 :               *t159)*alpha8
    1839       239869 :       t293 = t153**2
    1840       239869 :       t295 = 0.1e1_dp/t9/t276
    1841       239869 :       t296 = t293*t295
    1842              :       t298 = t84 + t95 + t109 + t133*t134 + t146*t151 - t109*t156 + &
    1843              :              t158*(t159 + t163) + t176*t177 + t182*t112 + t200*t151 + &
    1844       239869 :              t209*t210 + t233*t234 + t248*t249 + t273*t279 + t292*t296
    1845       239869 :       t299 = t298*Clda
    1846       239869 :       e_0 = e_0 + (-t80*t299)*sx
    1847       239869 :       IF (order >= 1) THEN
    1848       236157 :          t301 = t44*t13
    1849       236157 :          t302 = t4*t301
    1850       236157 :          t303 = t14*t34
    1851       236157 :          t305 = t68*r3*t5
    1852       236157 :          t306 = t303*t305
    1853       236157 :          t308 = 0.2e1_dp/0.3e1_dp*t302*t306
    1854       236157 :          t309 = t12*rho
    1855       236157 :          t310 = 0.1e1_dp/t309
    1856       236157 :          t311 = t310*t14
    1857       236157 :          t312 = t311*t69
    1858       236157 :          t314 = 2._dp*t11*t312
    1859       236157 :          t315 = t3*t44
    1860       236157 :          t316 = t16*t315
    1861       236157 :          t317 = t15*t6
    1862       236157 :          t320 = t10*t310
    1863       236157 :          t321 = t320*t14
    1864       236157 :          t324 = t24*t278
    1865       236157 :          t325 = t22*t324
    1866       236157 :          t326 = t29*t31
    1867       236157 :          t327 = t326*t6
    1868       236157 :          t331 = t27*t46*t31
    1869              :          t334 = -0.2e1_dp/0.3e1_dp*t316*t317 - (2._dp*t17*t321) - 0.4e1_dp &
    1870       236157 :                 /0.3e1_dp*t325*t327 - (4._dp*t25*t331)
    1871       236157 :          t335 = t334*t68
    1872       236157 :          t336 = t15*t335
    1873       236157 :          t337 = t11*t336
    1874       236157 :          t338 = t4*t18
    1875       236157 :          t339 = t67**2
    1876       236157 :          t340 = 0.1e1_dp/t339
    1877       236157 :          t341 = t35*t324
    1878       236157 :          t346 = t41*t295
    1879       236157 :          t347 = t39*t346
    1880       236157 :          t348 = t46*t48
    1881       236157 :          t349 = t348*t6
    1882       236157 :          t353 = 0.1e1_dp/t28/t12
    1883       236157 :          t355 = t44*t353*t48
    1884       236157 :          t361 = t60/t61/rho*t63
    1885              :          t364 = -0.4e1_dp/0.3e1_dp*t341*t327 - (4._dp*t36*t331) - 0.5e1_dp &
    1886       236157 :                 /0.3e1_dp*t347*t349 - (5._dp*t42*t355) - (8._dp*t55*t361)
    1887       236157 :          t365 = t340*t364
    1888       236157 :          t366 = t303*t365
    1889       236157 :          t367 = t338*t366
    1890       236157 :          t369 = t44*r3*t5
    1891       236157 :          t372 = -t308 - t314 + t337 - t367 - 0.2e1_dp/0.3e1_dp*t73*t369
    1892       236157 :          dQrho = f94*t372*t77
    1893       236157 :          t374 = ndrho*t3
    1894       236157 :          t375 = t374*t10
    1895       236157 :          t378 = a1*ndrho
    1896       236157 :          t379 = t378*t3
    1897       236157 :          t382 = t1*ndrho
    1898       236157 :          t383 = a2*t382
    1899       236157 :          t384 = t383*t24
    1900       236157 :          t387 = 2._dp*t379*t19 + 4._dp*t384*t32
    1901       236157 :          t388 = t387*t68
    1902       236157 :          t389 = t15*t388
    1903       236157 :          t391 = a3*t382
    1904       236157 :          t392 = t391*t24
    1905       236157 :          t395 = a4*t21
    1906       236157 :          t396 = t395*t41
    1907       236157 :          t400 = a5*t38*t54
    1908       236157 :          t403 = 4._dp*t392*t32 + 5._dp*t396*t49 + 6._dp*t400*t65
    1909       236157 :          t404 = t340*t403
    1910       236157 :          t405 = t303*t404
    1911       236157 :          t407 = 2._dp*t375*t70 + t11*t389 - t338*t405
    1912       236157 :          dQndrho = f94*t407*t77
    1913       236157 :          t409 = t78*f89
    1914       236157 :          t413 = t27*r3*t5
    1915       236157 :          t416 = t14*t102
    1916       236157 :          t417 = t416*t6
    1917       236157 :          t420 = t311*t102
    1918       236157 :          t423 = t96*t315
    1919       236157 :          t428 = t99*t324
    1920              :          t433 = -0.2e1_dp/0.3e1_dp*t423*t317 - (2._dp*t97*t321) - 0.4e1_dp &
    1921       236157 :                 /0.3e1_dp*t428*t327 - (4._dp*t100*t331)
    1922       236157 :          t434 = t15*t433
    1923              :          t436 = -0.2e1_dp/0.3e1_dp*t302*t417 - (2._dp*t11*t420) + (t11 &
    1924       236157 :                                                                    *t434)
    1925       236157 :          t440 = t136*t105
    1926       236157 :          t441 = t108*t118
    1927       236157 :          t442 = -t308 - t314 + t337 - t367
    1928       236157 :          t443 = t441*t442
    1929       236157 :          t447 = 0.1e1_dp/t117/t116
    1930       236157 :          t448 = t93*t447
    1931       236157 :          t452 = -t308 - t314 + t337 - t367 - 0.2e1_dp/0.3e1_dp*t72*t44*t6
    1932       236157 :          t453 = t115*t452
    1933       236157 :          t454 = t448*t453
    1934       236157 :          t457 = t14*t87
    1935       236157 :          t458 = t457*t6
    1936       236157 :          t461 = t311*t87
    1937       236157 :          t464 = F2*t334
    1938       236157 :          t467 = t464*t68 - t85*t365
    1939       236157 :          t468 = t15*t467
    1940              :          t470 = -0.2e1_dp/0.3e1_dp*t302*t458 - (2._dp*t11*t461) + (t11 &
    1941       236157 :                                                                    *t468)
    1942       236157 :          t474 = t140*t90
    1943       236157 :          t475 = t108*t129
    1944       236157 :          t476 = t475*t442
    1945       236157 :          t480 = 0.1e1_dp/t128/t127
    1946       236157 :          t481 = t93*t480
    1947       236157 :          t482 = t114*t452
    1948       236157 :          t483 = t481*t482
    1949              :          t487 = (-t136*t436*t93*t118 + (2._dp*t440*t443) + 0.5e1_dp/ &
    1950              :                  0.2e1_dp*(t440)*(t454) - t140*t470*t93*t129 + (2._dp &
    1951       236157 :                                                                 *t474*t476) + 0.3e1_dp/0.2e1_dp*(t474)*(t483))*t145
    1952       236157 :          t489 = t209*t153
    1953       236157 :          t491 = t278*r3*t5
    1954       236157 :          t496 = t166/t167/t160
    1955       236157 :          t500 = dexerrho(Q, dQrho)
    1956       236157 :          t503 = (-t158*t496*t372/0.2e1_dp - t172*t500)*alpha1
    1957       236157 :          t505 = t106*t441
    1958       236157 :          t506 = t154*t295
    1959       236157 :          t507 = t506*t6
    1960       236157 :          t510 = f12*t470
    1961       236157 :          t512 = t92**2
    1962       236157 :          t513 = 0.1e1_dp/t512
    1963       236157 :          t514 = t106*t513
    1964       236157 :          t516 = t155*t44*t442
    1965       236157 :          t519 = t149*t13
    1966       236157 :          t522 = 0.1e1_dp/t253/t252
    1967       236157 :          t523 = t219*t185
    1968       236157 :          t524 = t522*t523
    1969       236157 :          t530 = f2732/t258/t257
    1970       236157 :          t531 = t256*t372
    1971       236157 :          t535 = 0.1e1_dp/t215/t214
    1972       236157 :          t536 = t535*t213
    1973       236157 :          t541 = 0.1e1_dp/t190/t75
    1974       236157 :          t542 = t541*t372
    1975              :          t549 = (t166*(-0.7e1_dp/0.2e1_dp*t251*t524*t372 + 0.5e1_dp/0.2e1_dp &
    1976              :                        *t530*t531 - 0.3e1_dp/0.2e1_dp*t261*t536*t372 + t243*t542 &
    1977       236157 :                        /0.2e1_dp) + t270*t500)*alpha7
    1978       236157 :          t551 = C*t108
    1979       236157 :          t552 = t551*t442
    1980       236157 :          t558 = t436*E
    1981       236157 :          t559 = t558*t108
    1982       236157 :          t561 = 0.1e1_dp/t220
    1983       236157 :          t565 = 0.1e1_dp/t256
    1984       236157 :          t566 = f94*t565
    1985       236157 :          t569 = t284*t372
    1986       236157 :          t574 = dexeirho(Q, dQrho)
    1987              :          t577 = (-4._dp*t281*t561*t372 + 3._dp*t566*t372 - 2._dp*t206*t569 &
    1988       236157 :                  + t243*t238*t372 + t289*t574)*alpha8
    1989              :          t579 = -t133*t413/0.3e1_dp + t487*t151 - 0.4e1_dp/0.3e1_dp*t489* &
    1990              :                 t491 + t503*t177 + 0.5e1_dp/0.3e1_dp*t505*t507 + t510*t94 + (3._dp &
    1991              :                                                                             *t514*t516) - t146*t519 + t549*t279 - (2._dp*t91*t552) &
    1992              :                 - t81*t93*t442 - t200*t519 - t559*t156 + t577*t296 &
    1993       236157 :                 + t559
    1994       236157 :          t583 = t110*t105
    1995       236157 :          t584 = t93*t118
    1996       236157 :          t585 = t584*t442
    1997       236157 :          t587 = t83*t447
    1998       236157 :          t588 = t587*t453
    1999       236157 :          t591 = t93*t122
    2000       236157 :          t595 = 0.1e1_dp/t121/t113
    2001       236157 :          t596 = t83*t595
    2002       236157 :          t603 = t125*t90
    2003       236157 :          t604 = t93*t129
    2004       236157 :          t605 = t604*t442
    2005       236157 :          t607 = t83*t480
    2006       236157 :          t608 = t607*t482
    2007              :          t612 = (-t110*t436*t83*t118 + t583*t585 + 0.5e1_dp/0.2e1_dp*t583 &
    2008              :                  *t588 + t81*t591*t442 + t81*t596*t452/0.2e1_dp - t125 &
    2009              :                  *t470*t83*t129 + t603*t605 + 0.3e1_dp/0.2e1_dp*t603*t608)* &
    2010       236157 :                 omega
    2011       236157 :          t615 = t236*t372
    2012       236157 :          t620 = (t239*t372 - 2._dp*t158*t615 + t206*t574)*alpha4
    2013       236157 :          t622 = t513*t442
    2014       236157 :          t626 = t75*t204
    2015       236157 :          t628 = t372*t161 - t626*t372
    2016       236157 :          t629 = t628*t202
    2017       236157 :          t633 = t233*t154
    2018       236157 :          t634 = t295*r3
    2019       236157 :          t635 = t634*t5
    2020       236157 :          t638 = A*t282
    2021       236157 :          t641 = f98*t284
    2022       236157 :          t644 = r1*t238
    2023              :          t650 = (-3._dp*t638*t372 + 2._dp*t641*t372 - t206*t644*t372 - t243 &
    2024       236157 :                  *t574)*alpha6*t247
    2025       236157 :          t652 = t204*t372
    2026       236157 :          t656 = (-t158*t652 - f98*t574)*alpha2
    2027       236157 :          t658 = t108*t447
    2028       236157 :          t659 = t106*t658
    2029       236157 :          t660 = t234*t453
    2030       236157 :          t665 = f916*t535
    2031       236157 :          t670 = 0.1e1_dp/t221/t220
    2032       236157 :          t671 = t670*t219
    2033              :          t679 = (t166*(-t206*t542/0.2e1_dp + 0.3e1_dp/0.2e1_dp*t665*t213 &
    2034       236157 :                        *t372 - 0.5e1_dp/0.2e1_dp*t218*t671*t372) - t230*t500)*alpha5
    2035       236157 :          t681 = t292*t293
    2036       236157 :          t685 = t56*r3*t58*t5*t309
    2037       236157 :          t687 = 0.1e1_dp/t9/t685
    2038       236157 :          t689 = t687*r3*t5
    2039       236157 :          t692 = t60*t310
    2040       236157 :          t695 = t273*t274
    2041       236157 :          t697 = 0.1e1_dp/t8/t685
    2042       236157 :          t699 = t697*r3*t5
    2043       236157 :          t702 = t176*omega
    2044       236157 :          t705 = t182*t72
    2045       236157 :          t709 = 0.1e1_dp/t187/t186
    2046       236157 :          t710 = t709*t185
    2047       236157 :          t714 = f98*t541
    2048              :          t723 = (t166*(-0.3e1_dp/0.2e1_dp*t184*t710*t372 + t714*t372/ &
    2049       236157 :                        0.2e1_dp) + f2716*t500*t196)*alpha3*t145
    2050              :          t725 = t612*t134 + t620*t210 - (3._dp*t106*t622) + t158*(t574 &
    2051              :                                                                   + t629*t160) - 0.5e1_dp/0.3e1_dp*t633*t635 + t650*t249 + &
    2052              :                 t656*t112 + 0.5e1_dp/0.2e1_dp*t659*t660 + t679*t234 - 0.8e1_dp/ &
    2053              :                 0.3e1_dp*t681*t689 - (2._dp*t248*t692) - 0.7e1_dp/0.3e1_dp*t695 &
    2054              :                 *t699 - t702*t413/0.3e1_dp - 0.2e1_dp/0.3e1_dp*t705*t369 + t723 &
    2055       236157 :                 *t151
    2056       236157 :          t727 = (t579 + t725)*Clda
    2057       236157 :          e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t409*t299 - t80*t727)*sx
    2058       236157 :          t733 = F2*t387
    2059       236157 :          t736 = t733*t68 - t85*t404
    2060       236157 :          t737 = t15*t736
    2061       236157 :          t739 = 2._dp*t375*t88 + t11*t737
    2062       236157 :          t740 = f12*t739
    2063       236157 :          t742 = t551*t407
    2064       236157 :          t747 = g2*ndrho
    2065       236157 :          t748 = t747*t3
    2066       236157 :          t751 = g3*t382
    2067       236157 :          t752 = t751*t24
    2068       236157 :          t755 = 2._dp*t748*t19 + 4._dp*t752*t32
    2069       236157 :          t756 = t15*t755
    2070       236157 :          t758 = 2._dp*t375*t103 + t11*t756
    2071       236157 :          t759 = t758*E
    2072       236157 :          t760 = t759*t108
    2073       236157 :          t761 = t513*t407
    2074       236157 :          t767 = t584*t407
    2075       236157 :          t769 = t115*t407
    2076       236157 :          t770 = t587*t769
    2077       236157 :          t781 = t604*t407
    2078       236157 :          t783 = t114*t407
    2079       236157 :          t784 = t607*t783
    2080              :          t788 = (-t110*t758*t83*t118 + t583*t767 + 0.5e1_dp/0.2e1_dp*t583 &
    2081              :                  *t770 + t81*t591*t407 + t81*t596*t407/0.2e1_dp - t125 &
    2082              :                  *t739*t83*t129 + t603*t781 + 0.3e1_dp/0.2e1_dp*t603*t784)* &
    2083       236157 :                 omega
    2084       236157 :          t793 = t441*t407
    2085       236157 :          t796 = t448*t769
    2086       236157 :          t802 = t475*t407
    2087       236157 :          t805 = t481*t783
    2088              :          t809 = (-t136*t758*t93*t118 + (2._dp*t440*t793) + 0.5e1_dp/ &
    2089              :                  0.2e1_dp*(t440)*(t796) - t140*t739*t93*t129 + (2._dp &
    2090       236157 :                                                                 *t474*t802) + 0.3e1_dp/0.2e1_dp*(t474)*(t805))*t145
    2091       236157 :          t813 = t155*t44*t407
    2092       236157 :          t816 = t234*t769
    2093       236157 :          t819 = dexeindrho(Q, dQndrho)
    2094       236157 :          t822 = t407*t161 - t626*t407
    2095       236157 :          t823 = t822*t202
    2096       236157 :          t830 = dexerndrho(Q, dQndrho)
    2097       236157 :          t833 = (-t158*t496*t407/0.2e1_dp - t172*t830)*alpha1
    2098       236157 :          t839 = (-t158*t204*t407 - f98*t819)*alpha2
    2099              :          t852 = (t166*(-0.3e1_dp/0.2e1_dp*t184*t710*t407 + t714*t407/ &
    2100       236157 :                        0.2e1_dp) + f2716*t830*t196)*alpha3*t145
    2101       236157 :          t860 = (t239*t407 - 2._dp*t158*t236*t407 + t206*t819)*alpha4
    2102       236157 :          t862 = t541*t407
    2103              :          t875 = (t166*(-t206*t862/0.2e1_dp + 0.3e1_dp/0.2e1_dp*t665*t213 &
    2104       236157 :                        *t407 - 0.5e1_dp/0.2e1_dp*t218*t671*t407) - t230*t830)*alpha5
    2105              :          t886 = (-3._dp*t638*t407 + 2._dp*t641*t407 - t206*t644*t407 - t243 &
    2106       236157 :                  *t819)*alpha6*t247
    2107              :          t903 = (t166*(-0.7e1_dp/0.2e1_dp*t251*t524*t407 + 0.5e1_dp/0.2e1_dp &
    2108              :                        *t530*t256*t407 - 0.3e1_dp/0.2e1_dp*t261*t536*t407 + t243 &
    2109       236157 :                        *t862/0.2e1_dp) + t270*t830)*alpha7
    2110              :          t917 = (-4._dp*t281*t561*t407 + 3._dp*t566*t407 - 2._dp*t206*t284 &
    2111       236157 :                  *t407 + t243*t238*t407 + t289*t819)*alpha8
    2112              :          t919 = -t81*t93*t407 + t740*t94 - (2._dp*t91*t742) + t760 &
    2113              :                 - (3._dp*t106*t761) + t788*t134 + t809*t151 - t760*t156 &
    2114              :                 + (3._dp*t514*t813) + 0.5e1_dp/0.2e1_dp*t659*t816 + t158*(t819 &
    2115              :                                                                           + t823*t160) + t833*t177 + t839*t112 + t852*t151 + t860 &
    2116       236157 :                 *t210 + t875*t234 + t886*t249 + t903*t279 + t917*t296
    2117       236157 :          t920 = t919*Clda
    2118       236157 :          e_ndrho = e_ndrho + (-t80*t920)*sx
    2119              :       END IF
    2120              : 
    2121       239869 :    END SUBROUTINE xwpbe_lda_calc_2
    2122              : 
    2123              : ! **************************************************************************************************
    2124              : !> \brief Evaluates the screened hole averaged PBE exchange functional for lda.
    2125              : !> \param e_0 ...
    2126              : !> \param e_rho ...
    2127              : !> \param e_ndrho ...
    2128              : !> \param rho , ndrho: density and norm of the density gradient
    2129              : !> \param ndrho ...
    2130              : !> \param omega screening parameter
    2131              : !> \param sscale scaling factor to enforce Lieb-Oxford bound
    2132              : !> \param sx scaling factor
    2133              : !> \param order maximum degree of the derivative that should be evaluated
    2134              : !> \par History
    2135              : !>      05.2007 created [Manuel Guidon]
    2136              : !> \author Manuel Guidon
    2137              : !> \note
    2138              : !>      This routine evaluates the functional for omega!=0 using a simple
    2139              : !>      gaussian expansion for large ww.
    2140              : ! **************************************************************************************************
    2141      7448304 :    SUBROUTINE xwpbe_lda_calc_3(e_0, e_rho, e_ndrho, rho, ndrho, omega, sscale, sx, order)
    2142              :       REAL(KIND=dp), INTENT(INOUT)                       :: e_0, e_rho, e_ndrho
    2143              :       REAL(KIND=dp), INTENT(IN)                          :: rho, ndrho, omega, sscale, sx
    2144              :       INTEGER, INTENT(IN)                                :: order
    2145              : 
    2146              :       REAL(KIND=dp) :: dQndrho, dQrho, Q, t1, t10, t102, t104, t105, t108, t109, t11, t110, t111, &
    2147              :                        t113, t115, t116, t117, t118, t119, t12, t120, t121, t123, t124, t125, t126, t127, t128, &
    2148              :                        t129, t13, t131, t132, t133, t136, t14, t140, t141, t142, t144, t145, t147, t148, t149, &
    2149              :                        t15, t150, t151, t152, t154, t155, t156, t157, t158, t159, t16, t162, t163, t166, t167, &
    2150              :                        t168, t169, t17, t170, t174, t176, t177, t18, t180, t181, t185, t186, t189, t19, t190, &
    2151              :                        t192, t193, t194, t195, t197, t198, t199, t2, t200, t202, t206, t208, t209, t21, t210, &
    2152              :                        t212, t213, t215, t216, t217, t218, t219, t22, t221, t222, t223
    2153              :       REAL(KIND=dp) :: t224, t227, t228, t23, t231, t232, t234, t235, t236, t237, t238, t24, t242, &
    2154              :                        t245, t246, t247, t248, t249, t25, t250, t251, t252, t258, t259, t260, t261, t262, t266, &
    2155              :                        t268, t27, t274, t277, t278, t279, t28, t280, t285, t287, t288, t29, t291, t292, t295, &
    2156              :                        t296, t297, t3, t300, t301, t302, t304, t305, t308, t309, t31, t313, t316, t317, t318, &
    2157              :                        t32, t320, t322, t325, t328, t329, t332, t335, t338, t339, t34, t341, t342, t344, t345, &
    2158              :                        t35, t352, t359, t36, t361, t364, t365, t368, t369, t370, t373, t374, t375, t376, t377, &
    2159              :                        t379, t38, t380, t381, t383, t384, t388, t39, t391, t395, t396
    2160              :       REAL(KIND=dp) :: t397, t398, t399, t4, t400, t401, t403, t404, t405, t406, t408, t41, t416, &
    2161              :                        t417, t418, t419, t42, t420, t422, t423, t424, t428, t429, t433, t435, t437, t438, t44, &
    2162              :                        t441, t442, t443, t444, t445, t451, t452, t453, t456, t457, t46, t461, t462, t463, t466, &
    2163              :                        t470, t471, t478, t479, t48, t480, t483, t484, t485, t486, t49, t490, t493, t499, t5, &
    2164              :                        t500, t501, t504, t505, t511, t512, t513, t516, t517, t521, t523, t526, t528, t531, t532, &
    2165              :                        t533, t534, t537, t538, t539, t54, t542, t544, t545, t546, t548, t549, t55, t550, t554, &
    2166              :                        t555, t56, t561, t564, t565, t567, t568, t570, t58, t584, t586
    2167              :       REAL(KIND=dp) :: t589, t590, t592, t593, t595, t596, t599, t6, t60, t603, t604, t607, t608, &
    2168              :                        t61, t610, t611, t612, t616, t617, t621, t623, t626, t627, t628, t629, t63, t635, t637, &
    2169              :                        t638, t649, t65, t651, t652, t656, t661, t664, t67, t670, t673, t677, t68, t681, t684, &
    2170              :                        t687, t69, t690, t691, t695, t696, t7, t70, t71, t72, t73, t74, t75, t77, t78, t8, t80, &
    2171              :                        t81, t82, t83, t84, t85, t87, t88, t9, t90, t91, t92, t93, t94, t95, t96, t97, t99
    2172              : 
    2173      7448304 :       t1 = ndrho**2
    2174      7448304 :       t2 = r2**2
    2175      7448304 :       t3 = 0.1e1_dp/t2
    2176      7448304 :       t4 = t1*t3
    2177      7448304 :       t5 = pi**2
    2178      7448304 :       t6 = r3*t5
    2179      7448304 :       t7 = t6*rho
    2180      7448304 :       t8 = t7**(0.1e1_dp/0.3e1_dp)
    2181      7448304 :       t9 = t8**2
    2182      7448304 :       t10 = 0.1e1_dp/t9
    2183      7448304 :       t11 = t4*t10
    2184      7448304 :       t12 = rho**2
    2185      7448304 :       t13 = 0.1e1_dp/t12
    2186      7448304 :       t14 = sscale**2
    2187      7448304 :       t15 = t13*t14
    2188      7448304 :       t16 = a1*t1
    2189      7448304 :       t17 = t16*t3
    2190      7448304 :       t18 = t10*t13
    2191      7448304 :       t19 = t18*t14
    2192      7448304 :       t21 = t1**2
    2193      7448304 :       t22 = a2*t21
    2194      7448304 :       t23 = t2**2
    2195      7448304 :       t24 = 0.1e1_dp/t23
    2196      7448304 :       t25 = t22*t24
    2197      7448304 :       t27 = 0.1e1_dp/t8/t7
    2198      7448304 :       t28 = t12**2
    2199      7448304 :       t29 = 0.1e1_dp/t28
    2200      7448304 :       t31 = t14**2
    2201      7448304 :       t32 = t27*t29*t31
    2202      7448304 :       t34 = t17*t19 + t25*t32
    2203      7448304 :       t35 = a3*t21
    2204      7448304 :       t36 = t35*t24
    2205      7448304 :       t38 = t21*ndrho
    2206      7448304 :       t39 = a4*t38
    2207      7448304 :       t41 = 0.1e1_dp/t23/r2
    2208      7448304 :       t42 = t39*t41
    2209      7448304 :       t44 = 0.1e1_dp/t9/t7
    2210      7448304 :       t46 = 0.1e1_dp/t28/rho
    2211      7448304 :       t48 = t31*sscale
    2212      7448304 :       t49 = t44*t46*t48
    2213      7448304 :       t54 = 0.1e1_dp/t23/t2
    2214      7448304 :       t55 = a5*t21*t1*t54
    2215      7448304 :       t56 = r3**2
    2216      7448304 :       t58 = t5**2
    2217      7448304 :       t60 = 0.1e1_dp/t56/t58
    2218      7448304 :       t61 = t28**2
    2219      7448304 :       t63 = t31*t14
    2220      7448304 :       t65 = t60/t61*t63
    2221      7448304 :       t67 = r1 + t36*t32 + t42*t49 + t55*t65
    2222      7448304 :       t68 = 0.1e1_dp/t67
    2223      7448304 :       t69 = t34*t68
    2224      7448304 :       t70 = t15*t69
    2225      7448304 :       t71 = t11*t70
    2226      7448304 :       t72 = omega**2
    2227      7448304 :       t73 = beta2*t72
    2228      7448304 :       t74 = t73*t10
    2229      7448304 :       t75 = t71 + t74
    2230      7448304 :       t77 = 0.1e1_dp/A
    2231      7448304 :       Q = f94*t75*t77
    2232      7448304 :       t78 = rho**(0.1e1_dp/0.3e1_dp)
    2233      7448304 :       t80 = t78*rho*f89
    2234      7448304 :       t81 = B*f12
    2235      7448304 :       t82 = t71 + DD
    2236      7448304 :       t83 = 0.1e1_dp/t82
    2237      7448304 :       t84 = t81*t83
    2238      7448304 :       t85 = F2*t34
    2239      7448304 :       t87 = F1 + t85*t68
    2240      7448304 :       t88 = t15*t87
    2241      7448304 :       t90 = t11*t88 + r1
    2242      7448304 :       t91 = f12*t90
    2243      7448304 :       t92 = t82**2
    2244      7448304 :       t93 = 0.1e1_dp/t92
    2245      7448304 :       t94 = C*t93
    2246      7448304 :       t95 = t91*t94
    2247      7448304 :       t96 = f34*pi
    2248      7448304 :       t97 = rootpi
    2249      7448304 :       t99 = r6*C
    2250      7448304 :       t102 = r4*B
    2251      7448304 :       t104 = r8*A
    2252      7448304 :       t105 = t92*t82
    2253      7448304 :       t108 = t97*(r15*E + t99*t90*t82 + t102*t92 + t104*t105)
    2254      7448304 :       t109 = 0.1e1_dp/r16
    2255      7448304 :       t110 = SQRT(t82)
    2256      7448304 :       t111 = t110*t105
    2257      7448304 :       t113 = t109/t111
    2258      7448304 :       t115 = SQRT(A)
    2259      7448304 :       t116 = f94*t34
    2260      7448304 :       t117 = t68*t1
    2261      7448304 :       t118 = t116*t117
    2262      7448304 :       t119 = t3*t10
    2263      7448304 :       t120 = t15*t77
    2264      7448304 :       t121 = t119*t120
    2265      7448304 :       t123 = EXP(t118*t121)
    2266      7448304 :       t124 = t115*t123
    2267      7448304 :       t125 = f32*ndrho
    2268      7448304 :       t126 = 0.1e1_dp/r2
    2269      7448304 :       t127 = t125*t126
    2270      7448304 :       t128 = 0.1e1_dp/t8
    2271      7448304 :       t129 = 0.1e1_dp/rho
    2272      7448304 :       t131 = t69*t77
    2273      7448304 :       t132 = SQRT(t131)
    2274      7448304 :       t133 = sscale*t132
    2275      7448304 :       t136 = erfc(t127*t128*t129*t133)
    2276      7448304 :       t140 = 0.1e1_dp/f1516
    2277      7448304 :       t141 = (t96 + t108*t113 - t96*t124*t136)*t140
    2278      7448304 :       t142 = 0.1e1_dp/t97
    2279      7448304 :       t144 = 0.1e1_dp/E
    2280      7448304 :       t145 = t142*t111*t144
    2281      7448304 :       t147 = -t141*t145 + r1
    2282      7448304 :       t148 = t147*E
    2283      7448304 :       t149 = 0.1e1_dp/t105
    2284      7448304 :       t150 = t148*t149
    2285      7448304 :       t151 = f158*E
    2286      7448304 :       t152 = t147*t83
    2287      7448304 :       t154 = t71 + DD + t72*t10
    2288      7448304 :       t155 = t154**2
    2289      7448304 :       t156 = t155**2
    2290      7448304 :       t157 = t156*t154
    2291      7448304 :       t158 = SQRT(t157)
    2292      7448304 :       t159 = 0.1e1_dp/t158
    2293      7448304 :       t162 = SQRT(t154)
    2294      7448304 :       t163 = 0.1e1_dp/t162
    2295      7448304 :       t166 = f68*C
    2296      7448304 :       t167 = t90*t83
    2297      7448304 :       t168 = t155*t154
    2298      7448304 :       t169 = SQRT(t168)
    2299      7448304 :       t170 = 0.1e1_dp/t169
    2300              :       t174 = (-t151*t152*t159 - t81*t83*t163 - t166*t167*t170) &
    2301      7448304 :              *omega
    2302      7448304 :       t176 = f52*E
    2303      7448304 :       t177 = t147*t93
    2304      7448304 :       t180 = f12*C
    2305      7448304 :       t181 = t90*t93
    2306      7448304 :       t185 = t72*omega
    2307      7448304 :       t186 = (-t176*t177*t159 - t180*t181*t170)*t185
    2308      7448304 :       t189 = 0.1e1_dp/r3/t5
    2309      7448304 :       t190 = t189*t129
    2310      7448304 :       t192 = t72**2
    2311      7448304 :       t193 = t192*omega
    2312      7448304 :       t194 = t159*t193
    2313      7448304 :       t195 = t194*t44
    2314      7448304 :       t197 = f12*A
    2315      7448304 :       t198 = exei(Q)
    2316      7448304 :       t199 = t71 + DD + t74
    2317      7448304 :       t200 = 0.1e1_dp/t199
    2318      7448304 :       t202 = LOG(t75*t200)
    2319              :       t206 = (t84 + t95 + t150 + t174*t128 + t186*t190 - t150*t195 &
    2320      7448304 :               + t197*(t198 + t202))*Clda
    2321      7448304 :       e_0 = e_0 + (-t80*t206)*sx
    2322      7448304 :       IF (order >= 1) THEN
    2323      4713253 :          t208 = t44*t13
    2324      4713253 :          t209 = t4*t208
    2325      4713253 :          t210 = t14*t34
    2326      4713253 :          t212 = t68*r3*t5
    2327      4713253 :          t213 = t210*t212
    2328      4713253 :          t215 = 0.2e1_dp/0.3e1_dp*t209*t213
    2329      4713253 :          t216 = t12*rho
    2330      4713253 :          t217 = 0.1e1_dp/t216
    2331      4713253 :          t218 = t217*t14
    2332      4713253 :          t219 = t218*t69
    2333      4713253 :          t221 = 2._dp*t11*t219
    2334      4713253 :          t222 = t3*t44
    2335      4713253 :          t223 = t16*t222
    2336      4713253 :          t224 = t15*t6
    2337      4713253 :          t227 = t10*t217
    2338      4713253 :          t228 = t227*t14
    2339      4713253 :          t231 = t56*t58
    2340      4713253 :          t232 = t231*t12
    2341      4713253 :          t234 = 0.1e1_dp/t8/t232
    2342      4713253 :          t235 = t24*t234
    2343      4713253 :          t236 = t22*t235
    2344      4713253 :          t237 = t29*t31
    2345      4713253 :          t238 = t237*t6
    2346      4713253 :          t242 = t27*t46*t31
    2347              :          t245 = -0.2e1_dp/0.3e1_dp*t223*t224 - (2._dp*t17*t228) - 0.4e1_dp &
    2348      4713253 :                 /0.3e1_dp*t236*t238 - (4._dp*t25*t242)
    2349      4713253 :          t246 = t245*t68
    2350      4713253 :          t247 = t15*t246
    2351      4713253 :          t248 = t11*t247
    2352      4713253 :          t249 = t4*t18
    2353      4713253 :          t250 = t67**2
    2354      4713253 :          t251 = 0.1e1_dp/t250
    2355      4713253 :          t252 = t35*t235
    2356      4713253 :          t258 = 0.1e1_dp/t9/t232
    2357      4713253 :          t259 = t41*t258
    2358      4713253 :          t260 = t39*t259
    2359      4713253 :          t261 = t46*t48
    2360      4713253 :          t262 = t261*t6
    2361      4713253 :          t266 = 0.1e1_dp/t28/t12
    2362      4713253 :          t268 = t44*t266*t48
    2363      4713253 :          t274 = t60/t61/rho*t63
    2364              :          t277 = -0.4e1_dp/0.3e1_dp*t252*t238 - (4._dp*t36*t242) - 0.5e1_dp &
    2365      4713253 :                 /0.3e1_dp*t260*t262 - (5._dp*t42*t268) - (8._dp*t55*t274)
    2366      4713253 :          t278 = t251*t277
    2367      4713253 :          t279 = t210*t278
    2368      4713253 :          t280 = t249*t279
    2369              :          t285 = -t215 - t221 + t248 - t280 - 0.2e1_dp/0.3e1_dp*t73*t44*r3 &
    2370      4713253 :                 *t5
    2371      4713253 :          dQrho = f94*t285*t77
    2372      4713253 :          t287 = ndrho*t3
    2373      4713253 :          t288 = t287*t10
    2374      4713253 :          t291 = a1*ndrho
    2375      4713253 :          t292 = t291*t3
    2376      4713253 :          t295 = t1*ndrho
    2377      4713253 :          t296 = a2*t295
    2378      4713253 :          t297 = t296*t24
    2379      4713253 :          t300 = 2._dp*t292*t19 + 4._dp*t297*t32
    2380      4713253 :          t301 = t300*t68
    2381      4713253 :          t302 = t15*t301
    2382      4713253 :          t304 = a3*t295
    2383      4713253 :          t305 = t304*t24
    2384      4713253 :          t308 = a4*t21
    2385      4713253 :          t309 = t308*t41
    2386      4713253 :          t313 = a5*t38*t54
    2387      4713253 :          t316 = 4._dp*t305*t32 + 5._dp*t309*t49 + 6._dp*t313*t65
    2388      4713253 :          t317 = t251*t316
    2389      4713253 :          t318 = t210*t317
    2390      4713253 :          t320 = 2._dp*t288*t70 + t11*t302 - t249*t318
    2391      4713253 :          dQndrho = f94*t320*t77
    2392      4713253 :          t322 = t78*f89
    2393      4713253 :          t325 = -t215 - t221 + t248 - t280
    2394      4713253 :          t328 = t14*t87
    2395      4713253 :          t329 = t328*t6
    2396      4713253 :          t332 = t218*t87
    2397      4713253 :          t335 = F2*t245
    2398      4713253 :          t338 = t335*t68 - t85*t278
    2399      4713253 :          t339 = t15*t338
    2400              :          t341 = -0.2e1_dp/0.3e1_dp*t209*t329 - (2._dp*t11*t332) + (t11 &
    2401      4713253 :                                                                    *t339)
    2402      4713253 :          t342 = f12*t341
    2403      4713253 :          t344 = C*t149
    2404      4713253 :          t345 = t344*t325
    2405      4713253 :          t352 = t82*t325
    2406              :          t359 = t97*(t99*t341*t82 + t99*t90*t325 + 2._dp*t102*t352 &
    2407      4713253 :                      + 3._dp*t104*t92*t325)
    2408      4713253 :          t361 = t92**2
    2409      4713253 :          t364 = t109/t110/t361
    2410      4713253 :          t365 = t364*t325
    2411      4713253 :          t368 = t96*t115
    2412      4713253 :          t369 = f94*t245
    2413      4713253 :          t370 = t369*t117
    2414      4713253 :          t373 = t251*t1*t3
    2415      4713253 :          t374 = t116*t373
    2416      4713253 :          t375 = t14*t77
    2417      4713253 :          t376 = t375*t277
    2418      4713253 :          t377 = t18*t376
    2419      4713253 :          t379 = t117*t3
    2420      4713253 :          t380 = t116*t379
    2421      4713253 :          t381 = t208*t14
    2422      4713253 :          t383 = t77*r3*t5
    2423      4713253 :          t384 = t381*t383
    2424      4713253 :          t388 = t119*t218*t77
    2425              :          t391 = t370*t121 - t374*t377 - 0.2e1_dp/0.3e1_dp*t380*t384 - (2._dp &
    2426      4713253 :                                                                        *t118*t388)
    2427      4713253 :          t395 = rootpi
    2428      4713253 :          t396 = 0.1e1_dp/t395
    2429      4713253 :          t397 = t123*t396
    2430      4713253 :          t398 = f32**2
    2431      4713253 :          t399 = t398*t1
    2432      4713253 :          t400 = t399*t119
    2433      4713253 :          t401 = t15*t131
    2434      4713253 :          t403 = EXP(-t400*t401)
    2435      4713253 :          t404 = t126*t27
    2436      4713253 :          t405 = t125*t404
    2437      4713253 :          t406 = t129*sscale
    2438      4713253 :          t408 = t132*r3*t5
    2439      4713253 :          t416 = t125*t126*t128
    2440      4713253 :          t417 = 0.1e1_dp/t132
    2441      4713253 :          t418 = t246*t77
    2442      4713253 :          t419 = t34*t251
    2443      4713253 :          t420 = t77*t277
    2444      4713253 :          t422 = t418 - t419*t420
    2445      4713253 :          t423 = t417*t422
    2446      4713253 :          t424 = t406*t423
    2447              :          t428 = t403*(-t405*t406*t408/0.3e1_dp - t127*t128*t13*t133 &
    2448      4713253 :                       + t416*t424/0.2e1_dp)
    2449      4713253 :          t429 = t397*t428
    2450              :          t433 = (t359*t113 - 0.7e1_dp/0.2e1_dp*t108*t365 - (t368*t391 &
    2451      4713253 :                                                             *t123*t136) + (2._dp*t368*t429))*t140
    2452      4713253 :          t435 = t141*t142
    2453      4713253 :          t437 = t110*t92*t144
    2454      4713253 :          t438 = t437*t325
    2455      4713253 :          t441 = -t433*t145 - 0.7e1_dp/0.2e1_dp*t435*t438
    2456      4713253 :          t442 = t441*E
    2457      4713253 :          t443 = t442*t149
    2458      4713253 :          t444 = 0.1e1_dp/t361
    2459      4713253 :          t445 = t444*t325
    2460      4713253 :          t451 = t151*t147
    2461      4713253 :          t452 = t93*t159
    2462      4713253 :          t453 = t452*t325
    2463      4713253 :          t456 = 0.1e1_dp/t158/t157
    2464      4713253 :          t457 = t83*t456
    2465      4713253 :          t461 = -t215 - t221 + t248 - t280 - 0.2e1_dp/0.3e1_dp*t72*t44*t6
    2466      4713253 :          t462 = t156*t461
    2467      4713253 :          t463 = t457*t462
    2468      4713253 :          t466 = t93*t163
    2469      4713253 :          t470 = 0.1e1_dp/t162/t154
    2470      4713253 :          t471 = t83*t470
    2471      4713253 :          t478 = t166*t90
    2472      4713253 :          t479 = t93*t170
    2473      4713253 :          t480 = t479*t325
    2474      4713253 :          t483 = 0.1e1_dp/t169/t168
    2475      4713253 :          t484 = t83*t483
    2476      4713253 :          t485 = t155*t461
    2477      4713253 :          t486 = t484*t485
    2478              :          t490 = (-t151*t441*t83*t159 + t451*t453 + 0.5e1_dp/0.2e1_dp*t451 &
    2479              :                  *t463 + t81*t466*t325 + t81*t471*t461/0.2e1_dp - t166 &
    2480              :                  *t341*t83*t170 + t478*t480 + 0.3e1_dp/0.2e1_dp*t478*t486)* &
    2481      4713253 :                 omega
    2482      4713253 :          t493 = t27*r3*t5
    2483      4713253 :          t499 = t176*t147
    2484      4713253 :          t500 = t149*t159
    2485      4713253 :          t501 = t500*t325
    2486      4713253 :          t504 = t93*t456
    2487      4713253 :          t505 = t504*t462
    2488      4713253 :          t511 = t180*t90
    2489      4713253 :          t512 = t149*t170
    2490      4713253 :          t513 = t512*t325
    2491      4713253 :          t516 = t93*t483
    2492      4713253 :          t517 = t516*t485
    2493              :          t521 = (-t176*t441*t93*t159 + (2._dp*t499*t501) + 0.5e1_dp/ &
    2494              :                  0.2e1_dp*(t499)*(t505) - t180*t341*t93*t170 + (2._dp &
    2495      4713253 :                                                                 *t511*t513) + 0.3e1_dp/0.2e1_dp*(t511)*(t517))*t185
    2496      4713253 :          t523 = t189*t13
    2497      4713253 :          t526 = t148*t444
    2498      4713253 :          t528 = t194*t44*t325
    2499      4713253 :          t531 = t149*t456
    2500      4713253 :          t532 = t148*t531
    2501      4713253 :          t533 = t193*t44
    2502      4713253 :          t534 = t533*t462
    2503      4713253 :          t537 = t148*t500
    2504      4713253 :          t538 = t193*t258
    2505      4713253 :          t539 = t538*t6
    2506      4713253 :          t542 = dexeirho(Q, dQrho)
    2507      4713253 :          t544 = t199**2
    2508      4713253 :          t545 = 0.1e1_dp/t544
    2509      4713253 :          t546 = t75*t545
    2510      4713253 :          t548 = t285*t200 - t546*t285
    2511      4713253 :          t549 = 0.1e1_dp/t75
    2512      4713253 :          t550 = t548*t549
    2513              :          t554 = -t81*t93*t325 + t342*t94 - (2._dp*t91*t345) + t443 &
    2514              :                 - (3._dp*t148*t445) + t490*t128 - t174*t493/0.3e1_dp + t521 &
    2515              :                 *t190 - t186*t523 - t443*t195 + (3._dp*t526*t528) + 0.5e1_dp &
    2516              :                 /0.2e1_dp*t532*t534 + 0.5e1_dp/0.3e1_dp*t537*t539 + t197*(t542 &
    2517      4713253 :                                                                           + t550*t199)
    2518      4713253 :          t555 = t554*Clda
    2519      4713253 :          e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t322*t206 - t80*t555)*sx
    2520      4713253 :          t561 = F2*t300
    2521      4713253 :          t564 = t561*t68 - t85*t317
    2522      4713253 :          t565 = t15*t564
    2523      4713253 :          t567 = 2._dp*t288*t88 + t11*t565
    2524      4713253 :          t568 = f12*t567
    2525      4713253 :          t570 = t344*t320
    2526              :          t584 = t97*(t99*t567*t82 + t99*t90*t320 + 2._dp*t102*t82 &
    2527      4713253 :                      *t320 + 3._dp*t104*t92*t320)
    2528      4713253 :          t586 = t364*t320
    2529      4713253 :          t589 = f94*t300
    2530      4713253 :          t590 = t589*t117
    2531      4713253 :          t592 = t375*t316
    2532      4713253 :          t593 = t18*t592
    2533      4713253 :          t595 = t68*ndrho
    2534      4713253 :          t596 = t116*t595
    2535      4713253 :          t599 = t590*t121 - t374*t593 + 2._dp*t596*t121
    2536      4713253 :          t603 = f32*t126
    2537      4713253 :          t604 = t603*t128
    2538      4713253 :          t607 = t301*t77
    2539      4713253 :          t608 = t77*t316
    2540      4713253 :          t610 = t607 - t419*t608
    2541      4713253 :          t611 = t417*t610
    2542      4713253 :          t612 = t406*t611
    2543      4713253 :          t616 = t403*(t604*t406*t132 + t416*t612/0.2e1_dp)
    2544      4713253 :          t617 = t397*t616
    2545              :          t621 = (t584*t113 - 0.7e1_dp/0.2e1_dp*t108*t586 - (t368*t599 &
    2546      4713253 :                                                             *t123*t136) + (2._dp*t368*t617))*t140
    2547      4713253 :          t623 = t437*t320
    2548      4713253 :          t626 = -t621*t145 - 0.7e1_dp/0.2e1_dp*t435*t623
    2549      4713253 :          t627 = t626*E
    2550      4713253 :          t628 = t627*t149
    2551      4713253 :          t629 = t444*t320
    2552      4713253 :          t635 = t452*t320
    2553      4713253 :          t637 = t156*t320
    2554      4713253 :          t638 = t457*t637
    2555      4713253 :          t649 = t479*t320
    2556      4713253 :          t651 = t155*t320
    2557      4713253 :          t652 = t484*t651
    2558              :          t656 = (-t151*t626*t83*t159 + t451*t635 + 0.5e1_dp/0.2e1_dp*t451 &
    2559              :                  *t638 + t81*t466*t320 + t81*t471*t320/0.2e1_dp - t166 &
    2560              :                  *t567*t83*t170 + t478*t649 + 0.3e1_dp/0.2e1_dp*t478*t652)* &
    2561      4713253 :                 omega
    2562      4713253 :          t661 = t500*t320
    2563      4713253 :          t664 = t504*t637
    2564      4713253 :          t670 = t512*t320
    2565      4713253 :          t673 = t516*t651
    2566              :          t677 = (-t176*t626*t93*t159 + (2._dp*t499*t661) + 0.5e1_dp/ &
    2567              :                  0.2e1_dp*(t499)*(t664) - t180*t567*t93*t170 + (2._dp &
    2568      4713253 :                                                                 *t511*t670) + 0.3e1_dp/0.2e1_dp*(t511)*(t673))*t185
    2569      4713253 :          t681 = t194*t44*t320
    2570      4713253 :          t684 = t533*t637
    2571      4713253 :          t687 = dexeindrho(Q, dQndrho)
    2572      4713253 :          t690 = t320*t200 - t546*t320
    2573      4713253 :          t691 = t690*t549
    2574              :          t695 = -t81*t93*t320 + t568*t94 - (2._dp*t91*t570) + t628 &
    2575              :                 - (3._dp*t148*t629) + t656*t128 + t677*t190 - t628*t195 &
    2576              :                 + (3._dp*t526*t681) + 0.5e1_dp/0.2e1_dp*t532*t684 + t197*(t687 &
    2577      4713253 :                                                                           + t691*t199)
    2578      4713253 :          t696 = t695*Clda
    2579      4713253 :          e_ndrho = e_ndrho + (-t80*t696)*sx
    2580              :       END IF
    2581              : 
    2582      7448304 :    END SUBROUTINE xwpbe_lda_calc_3
    2583              : 
    2584              : ! **************************************************************************************************
    2585              : !> \brief Evaluates the screened hole averaged PBE exchange functional for lda.
    2586              : !> \param e_0 ...
    2587              : !> \param e_rho ...
    2588              : !> \param e_ndrho ...
    2589              : !> \param rho , ndrho: density and norm of the density gradient
    2590              : !> \param ndrho ...
    2591              : !> \param omega screening parameter
    2592              : !> \param sscale scaling factor to enforce Lieb-Oxford bound
    2593              : !> \param sx scaling factor
    2594              : !> \param order maximum degree of the derivative that should be evaluated
    2595              : !> \par History
    2596              : !>      05.2007 created [Manuel Guidon]
    2597              : !> \author Manuel Guidon
    2598              : !> \note
    2599              : !>      This routine evaluates the functional for omega!=0 using a simple
    2600              : !>      gaussian expansion for large ww and a taylor expansion for the
    2601              : !>      parameter G.
    2602              : ! **************************************************************************************************
    2603          122 :    SUBROUTINE xwpbe_lda_calc_4(e_0, e_rho, e_ndrho, rho, ndrho, omega, sscale, sx, order)
    2604              :       REAL(KIND=dp), INTENT(INOUT)                       :: e_0, e_rho, e_ndrho
    2605              :       REAL(KIND=dp), INTENT(IN)                          :: rho, ndrho, omega, sscale, sx
    2606              :       INTEGER, INTENT(IN)                                :: order
    2607              : 
    2608              :       REAL(KIND=dp) :: dQndrho, dQrho, Q, t1, t10, t100, t102, t103, t105, t106, t108, t109, t11, &
    2609              :                        t110, t111, t113, t114, t115, t116, t117, t118, t12, t121, t122, t125, t126, t127, t128, &
    2610              :                        t129, t13, t133, t134, t136, t137, t14, t140, t141, t145, t146, t149, t15, t151, t153, &
    2611              :                        t154, t155, t156, t158, t159, t16, t160, t161, t163, t167, t169, t17, t170, t171, t173, &
    2612              :                        t174, t176, t177, t178, t179, t18, t180, t182, t183, t184, t185, t188, t189, t19, t192, &
    2613              :                        t193, t195, t196, t197, t198, t199, t2, t203, t206, t207, t208, t209, t21, t210, t211, &
    2614              :                        t212, t213, t219, t22, t220, t221, t222, t223, t227, t229, t23
    2615              :       REAL(KIND=dp) :: t235, t238, t239, t24, t240, t241, t246, t248, t249, t25, t252, t253, t256, &
    2616              :                        t257, t258, t261, t262, t263, t265, t266, t269, t27, t270, t274, t277, t278, t279, t28, &
    2617              :                        t281, t283, t286, t289, t29, t290, t293, t296, t299, t3, t300, t302, t303, t305, t306, &
    2618              :                        t309, t31, t310, t313, t316, t32, t321, t326, t327, t329, t330, t331, t332, t333, t334, &
    2619              :                        t34, t340, t341, t342, t345, t346, t35, t350, t351, t352, t355, t359, t36, t360, t367, &
    2620              :                        t368, t369, t372, t373, t374, t375, t379, t38, t382, t388, t389, t39, t390, t393, t394, &
    2621              :                        t4, t400, t401, t402, t405, t406, t41, t410, t412, t415, t417
    2622              :       REAL(KIND=dp) :: t42, t420, t421, t422, t423, t426, t427, t428, t431, t433, t434, t435, &
    2623              :                        t437, t438, t439, t44, t443, t444, t450, t453, t454, t456, t457, t459, t46, t464, t465, &
    2624              :                        t468, t469, t472, t473, t475, t476, t477, t478, t48, t484, t486, t487, t49, t498, t5, &
    2625              :                        t500, t501, t505, t510, t513, t519, t522, t526, t530, t533, t536, t539, t54, t540, t544, &
    2626              :                        t545, t55, t56, t58, t6, t60, t61, t63, t65, t67, t68, t69, t7, t70, t71, t72, t73, t74, &
    2627              :                        t75, t77, t78, t8, t80, t81, t82, t83, t84, t85, t87, t88, t9, t90, t91, t92, t93, t94, &
    2628              :                        t95, t96, t97, t99
    2629              : 
    2630          122 :       t1 = ndrho**2
    2631          122 :       t2 = r2**2
    2632          122 :       t3 = 0.1e1_dp/t2
    2633          122 :       t4 = t1*t3
    2634          122 :       t5 = pi**2
    2635          122 :       t6 = r3*t5
    2636          122 :       t7 = t6*rho
    2637          122 :       t8 = t7**(0.1e1_dp/0.3e1_dp)
    2638          122 :       t9 = t8**2
    2639          122 :       t10 = 0.1e1_dp/t9
    2640          122 :       t11 = t4*t10
    2641          122 :       t12 = rho**2
    2642          122 :       t13 = 0.1e1_dp/t12
    2643          122 :       t14 = sscale**2
    2644          122 :       t15 = t13*t14
    2645          122 :       t16 = a1*t1
    2646          122 :       t17 = t16*t3
    2647          122 :       t18 = t10*t13
    2648          122 :       t19 = t18*t14
    2649          122 :       t21 = t1**2
    2650          122 :       t22 = a2*t21
    2651          122 :       t23 = t2**2
    2652          122 :       t24 = 0.1e1_dp/t23
    2653          122 :       t25 = t22*t24
    2654          122 :       t27 = 0.1e1_dp/t8/t7
    2655          122 :       t28 = t12**2
    2656          122 :       t29 = 0.1e1_dp/t28
    2657          122 :       t31 = t14**2
    2658          122 :       t32 = t27*t29*t31
    2659          122 :       t34 = t17*t19 + t25*t32
    2660          122 :       t35 = a3*t21
    2661          122 :       t36 = t35*t24
    2662          122 :       t38 = t21*ndrho
    2663          122 :       t39 = a4*t38
    2664          122 :       t41 = 0.1e1_dp/t23/r2
    2665          122 :       t42 = t39*t41
    2666          122 :       t44 = 0.1e1_dp/t9/t7
    2667          122 :       t46 = 0.1e1_dp/t28/rho
    2668          122 :       t48 = t31*sscale
    2669          122 :       t49 = t44*t46*t48
    2670          122 :       t54 = 0.1e1_dp/t23/t2
    2671          122 :       t55 = a5*t21*t1*t54
    2672          122 :       t56 = r3**2
    2673          122 :       t58 = t5**2
    2674          122 :       t60 = 0.1e1_dp/t56/t58
    2675          122 :       t61 = t28**2
    2676          122 :       t63 = t31*t14
    2677          122 :       t65 = t60/t61*t63
    2678          122 :       t67 = r1 + t36*t32 + t42*t49 + t55*t65
    2679          122 :       t68 = 0.1e1_dp/t67
    2680          122 :       t69 = t34*t68
    2681          122 :       t70 = t15*t69
    2682          122 :       t71 = t11*t70
    2683          122 :       t72 = omega**2
    2684          122 :       t73 = beta2*t72
    2685          122 :       t74 = t73*t10
    2686          122 :       t75 = t71 + t74
    2687          122 :       t77 = 0.1e1_dp/A
    2688          122 :       Q = f94*t75*t77
    2689          122 :       t78 = rho**(0.1e1_dp/0.3e1_dp)
    2690          122 :       t80 = t78*rho*f89
    2691          122 :       t81 = B*f12
    2692          122 :       t82 = t71 + DD
    2693          122 :       t83 = 0.1e1_dp/t82
    2694          122 :       t84 = t81*t83
    2695          122 :       t85 = F2*t34
    2696          122 :       t87 = F1 + t85*t68
    2697          122 :       t88 = t15*t87
    2698          122 :       t90 = t11*t88 + r1
    2699          122 :       t91 = f12*t90
    2700          122 :       t92 = t82**2
    2701          122 :       t93 = 0.1e1_dp/t92
    2702          122 :       t94 = C*t93
    2703          122 :       t95 = t91*t94
    2704          122 :       t96 = g2*t1
    2705          122 :       t97 = t96*t3
    2706          122 :       t99 = g3*t21
    2707          122 :       t100 = t99*t24
    2708          122 :       t102 = g1 + t97*t19 + t100*t32
    2709          122 :       t103 = t15*t102
    2710          122 :       t105 = t11*t103 + r1
    2711          122 :       t106 = t105*E
    2712          122 :       t108 = 0.1e1_dp/t92/t82
    2713          122 :       t109 = t106*t108
    2714          122 :       t110 = f158*E
    2715          122 :       t111 = t105*t83
    2716          122 :       t113 = t71 + DD + t72*t10
    2717          122 :       t114 = t113**2
    2718          122 :       t115 = t114**2
    2719          122 :       t116 = t115*t113
    2720          122 :       t117 = SQRT(t116)
    2721          122 :       t118 = 0.1e1_dp/t117
    2722          122 :       t121 = SQRT(t113)
    2723          122 :       t122 = 0.1e1_dp/t121
    2724          122 :       t125 = f68*C
    2725          122 :       t126 = t90*t83
    2726          122 :       t127 = t114*t113
    2727          122 :       t128 = SQRT(t127)
    2728          122 :       t129 = 0.1e1_dp/t128
    2729              :       t133 = (-t110*t111*t118 - t81*t83*t122 - t125*t126*t129) &
    2730          122 :              *omega
    2731          122 :       t134 = 0.1e1_dp/t8
    2732          122 :       t136 = f52*E
    2733          122 :       t137 = t105*t93
    2734          122 :       t140 = f12*C
    2735          122 :       t141 = t90*t93
    2736          122 :       t145 = t72*omega
    2737          122 :       t146 = (-t136*t137*t118 - t140*t141*t129)*t145
    2738          122 :       t149 = 0.1e1_dp/r3/t5
    2739          122 :       t151 = t149/rho
    2740          122 :       t153 = t72**2
    2741          122 :       t154 = t153*omega
    2742          122 :       t155 = t118*t154
    2743          122 :       t156 = t155*t44
    2744          122 :       t158 = f12*A
    2745          122 :       t159 = exei(Q)
    2746          122 :       t160 = t71 + DD + t74
    2747          122 :       t161 = 0.1e1_dp/t160
    2748          122 :       t163 = LOG(t75*t161)
    2749              :       t167 = (t84 + t95 + t109 + t133*t134 + t146*t151 - t109*t156 &
    2750          122 :               + t158*(t159 + t163))*Clda
    2751          122 :       e_0 = e_0 + (-t80*t167)*sx
    2752          122 :       IF (order >= 1) THEN
    2753           71 :          t169 = t44*t13
    2754           71 :          t170 = t4*t169
    2755           71 :          t171 = t14*t34
    2756           71 :          t173 = t68*r3*t5
    2757           71 :          t174 = t171*t173
    2758           71 :          t176 = 0.2e1_dp/0.3e1_dp*t170*t174
    2759           71 :          t177 = t12*rho
    2760           71 :          t178 = 0.1e1_dp/t177
    2761           71 :          t179 = t178*t14
    2762           71 :          t180 = t179*t69
    2763           71 :          t182 = 2._dp*t11*t180
    2764           71 :          t183 = t3*t44
    2765           71 :          t184 = t16*t183
    2766           71 :          t185 = t15*t6
    2767           71 :          t188 = t10*t178
    2768           71 :          t189 = t188*t14
    2769           71 :          t192 = t56*t58
    2770           71 :          t193 = t192*t12
    2771           71 :          t195 = 0.1e1_dp/t8/t193
    2772           71 :          t196 = t24*t195
    2773           71 :          t197 = t22*t196
    2774           71 :          t198 = t29*t31
    2775           71 :          t199 = t198*t6
    2776           71 :          t203 = t27*t46*t31
    2777              :          t206 = -0.2e1_dp/0.3e1_dp*t184*t185 - (2._dp*t17*t189) - 0.4e1_dp &
    2778           71 :                 /0.3e1_dp*t197*t199 - (4._dp*t25*t203)
    2779           71 :          t207 = t206*t68
    2780           71 :          t208 = t15*t207
    2781           71 :          t209 = t11*t208
    2782           71 :          t210 = t4*t18
    2783           71 :          t211 = t67**2
    2784           71 :          t212 = 0.1e1_dp/t211
    2785           71 :          t213 = t35*t196
    2786           71 :          t219 = 0.1e1_dp/t9/t193
    2787           71 :          t220 = t41*t219
    2788           71 :          t221 = t39*t220
    2789           71 :          t222 = t46*t48
    2790           71 :          t223 = t222*t6
    2791           71 :          t227 = 0.1e1_dp/t28/t12
    2792           71 :          t229 = t44*t227*t48
    2793           71 :          t235 = t60/t61/rho*t63
    2794              :          t238 = -0.4e1_dp/0.3e1_dp*t213*t199 - (4._dp*t36*t203) - 0.5e1_dp &
    2795           71 :                 /0.3e1_dp*t221*t223 - (5._dp*t42*t229) - (8._dp*t55*t235)
    2796           71 :          t239 = t212*t238
    2797           71 :          t240 = t171*t239
    2798           71 :          t241 = t210*t240
    2799              :          t246 = -t176 - t182 + t209 - t241 - 0.2e1_dp/0.3e1_dp*t73*t44*r3 &
    2800           71 :                 *t5
    2801           71 :          dQrho = f94*t246*t77
    2802           71 :          t248 = ndrho*t3
    2803           71 :          t249 = t248*t10
    2804           71 :          t252 = a1*ndrho
    2805           71 :          t253 = t252*t3
    2806           71 :          t256 = t1*ndrho
    2807           71 :          t257 = a2*t256
    2808           71 :          t258 = t257*t24
    2809           71 :          t261 = 2._dp*t253*t19 + 4._dp*t258*t32
    2810           71 :          t262 = t261*t68
    2811           71 :          t263 = t15*t262
    2812           71 :          t265 = a3*t256
    2813           71 :          t266 = t265*t24
    2814           71 :          t269 = a4*t21
    2815           71 :          t270 = t269*t41
    2816           71 :          t274 = a5*t38*t54
    2817           71 :          t277 = 4._dp*t266*t32 + 5._dp*t270*t49 + 6._dp*t274*t65
    2818           71 :          t278 = t212*t277
    2819           71 :          t279 = t171*t278
    2820           71 :          t281 = 2._dp*t249*t70 + t11*t263 - t210*t279
    2821           71 :          dQndrho = f94*t281*t77
    2822           71 :          t283 = t78*f89
    2823           71 :          t286 = -t176 - t182 + t209 - t241
    2824           71 :          t289 = t14*t87
    2825           71 :          t290 = t289*t6
    2826           71 :          t293 = t179*t87
    2827           71 :          t296 = F2*t206
    2828           71 :          t299 = t296*t68 - t85*t239
    2829           71 :          t300 = t15*t299
    2830              :          t302 = -0.2e1_dp/0.3e1_dp*t170*t290 - (2._dp*t11*t293) + (t11 &
    2831           71 :                                                                    *t300)
    2832           71 :          t303 = f12*t302
    2833           71 :          t305 = C*t108
    2834           71 :          t306 = t305*t286
    2835           71 :          t309 = t14*t102
    2836           71 :          t310 = t309*t6
    2837           71 :          t313 = t179*t102
    2838           71 :          t316 = t96*t183
    2839           71 :          t321 = t99*t196
    2840              :          t326 = -0.2e1_dp/0.3e1_dp*t316*t185 - (2._dp*t97*t189) - 0.4e1_dp &
    2841           71 :                 /0.3e1_dp*t321*t199 - (4._dp*t100*t203)
    2842           71 :          t327 = t15*t326
    2843              :          t329 = -0.2e1_dp/0.3e1_dp*t170*t310 - (2._dp*t11*t313) + (t11 &
    2844           71 :                                                                    *t327)
    2845           71 :          t330 = t329*E
    2846           71 :          t331 = t330*t108
    2847           71 :          t332 = t92**2
    2848           71 :          t333 = 0.1e1_dp/t332
    2849           71 :          t334 = t333*t286
    2850           71 :          t340 = t110*t105
    2851           71 :          t341 = t93*t118
    2852           71 :          t342 = t341*t286
    2853           71 :          t345 = 0.1e1_dp/t117/t116
    2854           71 :          t346 = t83*t345
    2855           71 :          t350 = -t176 - t182 + t209 - t241 - 0.2e1_dp/0.3e1_dp*t72*t44*t6
    2856           71 :          t351 = t115*t350
    2857           71 :          t352 = t346*t351
    2858           71 :          t355 = t93*t122
    2859           71 :          t359 = 0.1e1_dp/t121/t113
    2860           71 :          t360 = t83*t359
    2861           71 :          t367 = t125*t90
    2862           71 :          t368 = t93*t129
    2863           71 :          t369 = t368*t286
    2864           71 :          t372 = 0.1e1_dp/t128/t127
    2865           71 :          t373 = t83*t372
    2866           71 :          t374 = t114*t350
    2867           71 :          t375 = t373*t374
    2868              :          t379 = (-t110*t329*t83*t118 + t340*t342 + 0.5e1_dp/0.2e1_dp*t340 &
    2869              :                  *t352 + t81*t355*t286 + t81*t360*t350/0.2e1_dp - t125 &
    2870              :                  *t302*t83*t129 + t367*t369 + 0.3e1_dp/0.2e1_dp*t367*t375)* &
    2871           71 :                 omega
    2872           71 :          t382 = t27*r3*t5
    2873           71 :          t388 = t136*t105
    2874           71 :          t389 = t108*t118
    2875           71 :          t390 = t389*t286
    2876           71 :          t393 = t93*t345
    2877           71 :          t394 = t393*t351
    2878           71 :          t400 = t140*t90
    2879           71 :          t401 = t108*t129
    2880           71 :          t402 = t401*t286
    2881           71 :          t405 = t93*t372
    2882           71 :          t406 = t405*t374
    2883              :          t410 = (-t136*t329*t93*t118 + (2._dp*t388*t390) + 0.5e1_dp/ &
    2884              :                  0.2e1_dp*(t388)*(t394) - t140*t302*t93*t129 + (2._dp &
    2885           71 :                                                                 *t400*t402) + 0.3e1_dp/0.2e1_dp*(t400)*(t406))*t145
    2886           71 :          t412 = t149*t13
    2887           71 :          t415 = t106*t333
    2888           71 :          t417 = t155*t44*t286
    2889           71 :          t420 = t108*t345
    2890           71 :          t421 = t106*t420
    2891           71 :          t422 = t154*t44
    2892           71 :          t423 = t422*t351
    2893           71 :          t426 = t106*t389
    2894           71 :          t427 = t154*t219
    2895           71 :          t428 = t427*t6
    2896           71 :          t431 = dexeirho(Q, dQrho)
    2897           71 :          t433 = t160**2
    2898           71 :          t434 = 0.1e1_dp/t433
    2899           71 :          t435 = t75*t434
    2900           71 :          t437 = t246*t161 - t435*t246
    2901           71 :          t438 = 0.1e1_dp/t75
    2902           71 :          t439 = t437*t438
    2903              :          t443 = -t81*t93*t286 + t303*t94 - (2._dp*t91*t306) + t331 &
    2904              :                 - (3._dp*t106*t334) + t379*t134 - t133*t382/0.3e1_dp + t410 &
    2905              :                 *t151 - t146*t412 - t331*t156 + (3._dp*t415*t417) + 0.5e1_dp &
    2906              :                 /0.2e1_dp*t421*t423 + 0.5e1_dp/0.3e1_dp*t426*t428 + t158*(t431 &
    2907           71 :                                                                           + t439*t160)
    2908           71 :          t444 = t443*Clda
    2909           71 :          e_rho = e_rho + (-0.4e1_dp/0.3e1_dp*t283*t167 - t80*t444)*sx
    2910           71 :          t450 = F2*t261
    2911           71 :          t453 = t450*t68 - t85*t278
    2912           71 :          t454 = t15*t453
    2913           71 :          t456 = 2._dp*t249*t88 + t11*t454
    2914           71 :          t457 = f12*t456
    2915           71 :          t459 = t305*t281
    2916           71 :          t464 = g2*ndrho
    2917           71 :          t465 = t464*t3
    2918           71 :          t468 = g3*t256
    2919           71 :          t469 = t468*t24
    2920           71 :          t472 = 2._dp*t465*t19 + 4._dp*t469*t32
    2921           71 :          t473 = t15*t472
    2922           71 :          t475 = 2._dp*t249*t103 + t11*t473
    2923           71 :          t476 = t475*E
    2924           71 :          t477 = t476*t108
    2925           71 :          t478 = t333*t281
    2926           71 :          t484 = t341*t281
    2927           71 :          t486 = t115*t281
    2928           71 :          t487 = t346*t486
    2929           71 :          t498 = t368*t281
    2930           71 :          t500 = t114*t281
    2931           71 :          t501 = t373*t500
    2932              :          t505 = (-t110*t475*t83*t118 + t340*t484 + 0.5e1_dp/0.2e1_dp*t340 &
    2933              :                  *t487 + t81*t355*t281 + t81*t360*t281/0.2e1_dp - t125 &
    2934              :                  *t456*t83*t129 + t367*t498 + 0.3e1_dp/0.2e1_dp*t367*t501)* &
    2935           71 :                 omega
    2936           71 :          t510 = t389*t281
    2937           71 :          t513 = t393*t486
    2938           71 :          t519 = t401*t281
    2939           71 :          t522 = t405*t500
    2940              :          t526 = (-t136*t475*t93*t118 + (2._dp*t388*t510) + 0.5e1_dp/ &
    2941              :                  0.2e1_dp*(t388)*(t513) - t140*t456*t93*t129 + (2._dp &
    2942           71 :                                                                 *t400*t519) + 0.3e1_dp/0.2e1_dp*(t400)*(t522))*t145
    2943           71 :          t530 = t155*t44*t281
    2944           71 :          t533 = t422*t486
    2945           71 :          t536 = dexeindrho(Q, dQndrho)
    2946           71 :          t539 = t281*t161 - t435*t281
    2947           71 :          t540 = t539*t438
    2948              :          t544 = -t81*t93*t281 + t457*t94 - (2._dp*t91*t459) + t477 &
    2949              :                 - (3._dp*t106*t478) + t505*t134 + t526*t151 - t477*t156 &
    2950              :                 + (3._dp*t415*t530) + 0.5e1_dp/0.2e1_dp*t421*t533 + t158*(t536 &
    2951           71 :                                                                           + t540*t160)
    2952           71 :          t545 = t544*Clda
    2953           71 :          e_ndrho = e_ndrho + (-t80*t545)*sx
    2954              :       END IF
    2955              : 
    2956          122 :    END SUBROUTINE xwpbe_lda_calc_4
    2957              : 
    2958              : ! **************************************************************************************************
    2959              : !> \brief return various information on the functional
    2960              : !> \param reference string with the reference of the actual functional
    2961              : !> \param shortform string with the shortform of the functional name
    2962              : !> \param needs the components needed by this functional are set to
    2963              : !>        true (does not set the unneeded components to false)
    2964              : !> \param max_deriv ...
    2965              : !> \par History
    2966              : !>      05.2007 created [Manuel Guidon]
    2967              : !> \author Manuel Guidon
    2968              : ! **************************************************************************************************
    2969         1164 :    SUBROUTINE xwpbe_lsd_info(reference, shortform, needs, max_deriv)
    2970              :       CHARACTER(LEN=*), INTENT(OUT), OPTIONAL            :: reference, shortform
    2971              :       TYPE(xc_rho_cflags_type), INTENT(inout), OPTIONAL  :: needs
    2972              :       INTEGER, INTENT(out), OPTIONAL                     :: max_deriv
    2973              : 
    2974         1164 :       IF (PRESENT(reference)) THEN
    2975            2 :          reference = "Jochen Heyd and Gustavo E. Scuseria, J. Chem. Phys., 120, 7274 {LSD version}"
    2976              :       END IF
    2977         1164 :       IF (PRESENT(shortform)) THEN
    2978            2 :          shortform = "shortrange part of PBE exchange {LSD}"
    2979              :       END IF
    2980         1164 :       IF (PRESENT(needs)) THEN
    2981         1162 :          needs%rho_spin = .TRUE.
    2982         1162 :          needs%norm_drho_spin = .TRUE.
    2983              :       END IF
    2984         1164 :       IF (PRESENT(max_deriv)) max_deriv = 1
    2985         1164 :    END SUBROUTINE xwpbe_lsd_info
    2986              : 
    2987              : ! **************************************************************************************************
    2988              : !> \brief evaluates the screened hole averaged PBE exchange functional for lsd
    2989              : !> \param rho_set the density where you want to evaluate the functional
    2990              : !> \param deriv_set place where to store the functional derivatives (they are
    2991              : !>        added to the derivatives)
    2992              : !> \param order maximum degree of the derivative that should be evaluated
    2993              : !> \param xwpbe_params input parameters (scaling,omega)
    2994              : !> \par History
    2995              : !>      05.2007 created [Manuel Guidon]
    2996              : !> \author Manuel Guidon
    2997              : !> \note
    2998              : !>      The current version provides code for derivatives up to second order.
    2999              : !>      Using the maple sheet in cp2k/doc it is straightforward to produce routines
    3000              : !>      for higher derivatives.
    3001              : ! **************************************************************************************************
    3002         6620 :    SUBROUTINE xwpbe_lsd_eval(rho_set, deriv_set, order, xwpbe_params)
    3003              : 
    3004              :       TYPE(xc_rho_set_type), INTENT(IN)                  :: rho_set
    3005              :       TYPE(xc_derivative_set_type), INTENT(IN)           :: deriv_set
    3006              :       INTEGER, INTENT(IN)                                :: order
    3007              :       TYPE(section_vals_type), POINTER                   :: xwpbe_params
    3008              : 
    3009              :       CHARACTER(len=*), PARAMETER                        :: routineN = 'xwpbe_lsd_eval'
    3010              : 
    3011              :       INTEGER                                            :: handle, npoints
    3012              :       INTEGER, DIMENSION(2, 3)                           :: bo
    3013              :       REAL(kind=dp)                                      :: epsilon_norm_drho, epsilon_rho, omega, &
    3014              :                                                             sx, sx0
    3015              :       REAL(kind=dp), CONTIGUOUS, DIMENSION(:, :, :), &
    3016         1324 :          POINTER                                         :: dummy, e_0, e_ndrhoa, e_ndrhob, e_rhoa, &
    3017         1324 :                                                             e_rhob, norm_drhoa, norm_drhob, rhoa, &
    3018         1324 :                                                             rhob
    3019              :       TYPE(xc_derivative_type), POINTER                  :: deriv
    3020              : 
    3021         1324 :       CALL timeset(routineN, handle)
    3022              : 
    3023         1324 :       CALL cite_reference(Heyd2004)
    3024              : 
    3025         1324 :       CALL section_vals_val_get(xwpbe_params, "SCALE_X", r_val=sx)
    3026         1324 :       CALL section_vals_val_get(xwpbe_params, "SCALE_X0", r_val=sx0)
    3027         1324 :       CALL section_vals_val_get(xwpbe_params, "OMEGA", r_val=omega)
    3028              : 
    3029              :       CALL xc_rho_set_get(rho_set, rhoa=rhoa, rhob=rhob, norm_drhoa=norm_drhoa, &
    3030              :                           norm_drhob=norm_drhob, local_bounds=bo, rho_cutoff=epsilon_rho, &
    3031         1324 :                           drho_cutoff=epsilon_norm_drho)
    3032         1324 :       npoints = (bo(2, 1) - bo(1, 1) + 1)*(bo(2, 2) - bo(1, 2) + 1)*(bo(2, 3) - bo(1, 3) + 1)
    3033              : 
    3034         1324 :       dummy => rhoa
    3035              : 
    3036         1324 :       e_0 => dummy
    3037         1324 :       e_rhoa => dummy
    3038         1324 :       e_rhob => dummy
    3039         1324 :       e_ndrhoa => dummy
    3040         1324 :       e_ndrhob => dummy
    3041              : 
    3042              :       deriv => xc_dset_get_derivative(deriv_set, [INTEGER::], &
    3043         1324 :                                       allocate_deriv=.TRUE.)
    3044         1324 :       CALL xc_derivative_get(deriv, deriv_data=e_0)
    3045         1324 :       IF (order >= 1 .OR. order == -1) THEN
    3046              :          deriv => xc_dset_get_derivative(deriv_set, [deriv_rhoa], &
    3047         1144 :                                          allocate_deriv=.TRUE.)
    3048         1144 :          CALL xc_derivative_get(deriv, deriv_data=e_rhoa)
    3049              :          deriv => xc_dset_get_derivative(deriv_set, [deriv_rhob], &
    3050         1144 :                                          allocate_deriv=.TRUE.)
    3051         1144 :          CALL xc_derivative_get(deriv, deriv_data=e_rhob)
    3052              :          deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhoa], &
    3053         1144 :                                          allocate_deriv=.TRUE.)
    3054         1144 :          CALL xc_derivative_get(deriv, deriv_data=e_ndrhoa)
    3055              :          deriv => xc_dset_get_derivative(deriv_set, [deriv_norm_drhob], &
    3056         1144 :                                          allocate_deriv=.TRUE.)
    3057         1144 :          CALL xc_derivative_get(deriv, deriv_data=e_ndrhob)
    3058              :       END IF
    3059         1324 :       IF (order > 1) THEN
    3060            0 :          CPABORT("derivatives bigger than 1 not implemented")
    3061              :       END IF
    3062              : 
    3063              : !$OMP     PARALLEL DEFAULT(NONE) &
    3064              : !$OMP     SHARED(npoints, order, rhoa, norm_drhoa, e_0, e_rhoa, e_ndrhoa) &
    3065              : !$OMP     SHARED(epsilon_rho, sx, sx0, omega) &
    3066         1324 : !$OMP     SHARED(rhob, norm_drhob, e_rhob, e_ndrhob)
    3067              : 
    3068              :       !Call lsd_calc for alpha - and beta - spins
    3069              : 
    3070              :       CALL xwpbe_lsd_calc(npoints, order, rho=rhoa, norm_drho=norm_drhoa, &
    3071              :                           e_0=e_0, e_rho=e_rhoa, e_ndrho=e_ndrhoa, &
    3072              :                           epsilon_rho=epsilon_rho, &
    3073              :                           sx=sx, sx0=sx0, omega=omega)
    3074              :       CALL xwpbe_lsd_calc(npoints, order, rho=rhob, norm_drho=norm_drhob, &
    3075              :                           e_0=e_0, e_rho=e_rhob, e_ndrho=e_ndrhob, &
    3076              :                           epsilon_rho=epsilon_rho, &
    3077              :                           sx=sx, sx0=sx0, omega=omega)
    3078              : 
    3079              : !$OMP     END PARALLEL
    3080              : 
    3081         1324 :       CALL timestop(handle)
    3082              : 
    3083         1324 :    END SUBROUTINE xwpbe_lsd_eval
    3084              : 
    3085              : ! **************************************************************************************************
    3086              : !> \brief evaluates the screened hole averaged PBE exchange functional for lsd.
    3087              : !> \param npoints ...
    3088              : !> \param order degree of the derivative that should be evaluated,
    3089              : !>        if positive all the derivatives up to the given degree are evaluated,
    3090              : !>        if negative only the given degree is calculated
    3091              : !> \param rho , ndrho: density and norm of the density gradient
    3092              : !> \param norm_drho ...
    3093              : !> \param e_0 ...
    3094              : !> \param e_rho ...
    3095              : !> \param e_ndrho ...
    3096              : !> \param epsilon_rho ...
    3097              : !> \param sx , sx0: scaling factor for omega!=0 and omega=0
    3098              : !> \param sx0 ...
    3099              : !> \param omega screening parameter
    3100              : !> \par History
    3101              : !>      05.2007 created [Manuel Guidon]
    3102              : !> \author Manuel Guidon
    3103              : !> \note
    3104              : !>      - The lsd part is calculated using the spin-scaling relations for the
    3105              : !>        exchange energy:
    3106              : !>
    3107              : !>               Ex[na,nb] = 0.5 * Ex[2*na] + 0.5 * Ex[2*nb].
    3108              : !>
    3109              : !>      - In order to avoid numerical instabilities, this routine calls different
    3110              : !>        subroutines. There are 4 routines for the case omega!=0 and 2 routines
    3111              : !>        for omega=0.
    3112              : ! **************************************************************************************************
    3113         2648 :    SUBROUTINE xwpbe_lsd_calc(npoints, order, rho, norm_drho, e_0, e_rho, e_ndrho, &
    3114              :                              epsilon_rho, sx, sx0, omega)
    3115              : 
    3116              :       INTEGER, INTENT(in)                                :: npoints, order
    3117              :       REAL(kind=dp), DIMENSION(1:npoints), INTENT(inout) :: rho, norm_drho, e_0, e_rho, e_ndrho
    3118              :       REAL(kind=dp), INTENT(in)                          :: epsilon_rho, sx, sx0, omega
    3119              : 
    3120              :       INTEGER                                            :: ip
    3121              :       REAL(dp)                                           :: e_0_temp, gradient_before, &
    3122              :                                                             gradient_increment, my_ndrho, my_rho, &
    3123              :                                                             pullback
    3124              :       REAL(KIND=dp)                                      :: ss, ss2, sscale, t1, t2, t3, t4, t5, t6, &
    3125              :                                                             t7, t8, ww
    3126              : 
    3127              : !$OMP     DO
    3128              : 
    3129              :       DO ip = 1, npoints
    3130              :          !According to spin-scaling relation, we need twice the density and its gradient
    3131     34895932 :          my_rho = 2.0_dp*MAX(rho(ip), 0.0_dp)
    3132     34895932 :          IF (my_rho > epsilon_rho) THEN
    3133     34522233 :             gradient_before = e_ndrho(ip)
    3134     34522233 :             my_ndrho = 2.0_dp*MAX(norm_drho(ip), 0.0_dp)
    3135              : 
    3136              :             !Do some precalculation in order to catch the correct branch afterwards
    3137     34522233 :             sscale = 1.0_dp
    3138     34522233 :             t1 = pi**2
    3139     34522233 :             t2 = t1*my_rho
    3140     34522233 :             t3 = t2**(0.1e1_dp/0.3e1_dp)
    3141     34522233 :             t4 = 0.1e1_dp/t3
    3142     34522233 :             t5 = omega*t4
    3143     34522233 :             ww = 0.6933612743506347048433524e0_dp*t5
    3144     34522233 :             t6 = my_ndrho*t4
    3145     34522233 :             t7 = 0.1e1_dp/my_rho
    3146     34522233 :             t8 = t7*sscale
    3147     34522233 :             ss = 0.3466806371753173524216762e0_dp*t6*t8
    3148     34522233 :             IF (ss > scutoff) THEN
    3149     17547329 :                ss2 = ss*ss
    3150     17547329 :                sscale = ((smax)*ss2 - (sconst))/(ss2*ss)
    3151              :             END IF
    3152     34522233 :             e_0_temp = 0.0_dp
    3153     34522233 :             IF (sx0 /= 0.0_dp) THEN
    3154              :                !original PBE hole
    3155     28282855 :                IF (ss*sscale > gcutoff) THEN
    3156              :                   CALL xwpbe_lda_calc_0(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
    3157     28255119 :                                         my_ndrho, sscale, sx0, order)
    3158              :                ELSE
    3159              :                   CALL xwpbe_lda_calc_01(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
    3160        27736 :                                          my_ndrho, sscale, sx0, order)
    3161              :                END IF
    3162              :                !According to spin-scaling relation, we need only half of the energy
    3163     28282855 :                e_0(ip) = e_0(ip) + 0.5_dp*e_0_temp
    3164              :             END IF
    3165     34522233 :             e_0_temp = 0.0_dp
    3166     34522233 :             IF (sx /= 0.0_dp) THEN
    3167      7628414 :                IF (omega == 0.0_dp) THEN
    3168          116 :                   IF (ss*sscale > gcutoff) THEN
    3169              :                      CALL xwpbe_lda_calc_0(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
    3170           88 :                                            my_ndrho, sscale, sx, order)
    3171              :                   ELSE
    3172              :                      CALL xwpbe_lda_calc_01(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
    3173           28 :                                             my_ndrho, sscale, sx, order)
    3174              :                   END IF
    3175      7628298 :                ELSE IF (ww < wcutoff .AND. ss*sscale > gcutoff) THEN
    3176              :                   CALL xwpbe_lda_calc_1(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
    3177      6607485 :                                         my_ndrho, omega, sscale, sx, order)
    3178         6357 :                ELSE IF (ww < wcutoff .AND. ss*sscale <= gcutoff) THEN
    3179              :                   CALL xwpbe_lda_calc_2(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
    3180         6357 :                                         my_ndrho, omega, sscale, sx, order)
    3181      1014456 :                ELSE IF (ww >= wcutoff .AND. ss*sscale > gcutoff) THEN
    3182              :                   CALL xwpbe_lda_calc_3(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
    3183      1014456 :                                         my_ndrho, omega, sscale, sx, order)
    3184              :                ELSE
    3185              :                   CALL xwpbe_lda_calc_4(e_0_temp, e_rho(ip), e_ndrho(ip), my_rho, &
    3186            0 :                                         my_ndrho, omega, sscale, sx, order)
    3187              :                END IF
    3188              :                !According to spin-scaling relation, we need only half of the energy
    3189              :             END IF
    3190     34522233 :             e_0(ip) = e_0(ip) + 0.5_dp*e_0_temp
    3191     34522233 :             IF (order >= 1 .AND. ss > scutoff) THEN
    3192              :                ! Pull back g_eff = g*f(s), s = g/(2*k_F*rho), through the large-s scaling.
    3193              :                ! The generated expressions differentiate at fixed f(s).
    3194     11865498 :                pullback = (-smax*ss2 + 3.0_dp*sconst)/(smax*ss2 - sconst)
    3195     11865498 :                gradient_increment = e_ndrho(ip) - gradient_before
    3196     11865498 :                e_rho(ip) = e_rho(ip) - gradient_increment*(4.0_dp*my_ndrho/(3.0_dp*my_rho))*pullback
    3197     11865498 :                e_ndrho(ip) = gradient_before + gradient_increment*(1.0_dp + pullback)
    3198              :             END IF
    3199              :          END IF
    3200              :       END DO
    3201              : 
    3202              : !$OMP     END DO
    3203              : 
    3204         2648 :    END SUBROUTINE xwpbe_lsd_calc
    3205              : 
    3206              : ! **************************************************************************************************
    3207              : !> \brief These functions evaluate products exp(x)*Ei(x) and pi*exp(x)*erfc(sqrt(x)),
    3208              : !>      as well as their derivatives with respect to various combinations of
    3209              : !>      rho and norm_drho.
    3210              : !> \param Q , dQrho, dQndrho, d2Qrhondrho :
    3211              : !>        Argument Q and derivatives with respect to various combinations of
    3212              : !>        rho and norm_drho
    3213              : !> \param exp_q optional precomputed EXP(Q)
    3214              : !> \return ...
    3215              : !> \par History
    3216              : !>      05.2007 created [Manuel Guidon]
    3217              : !> \author Manuel Guidon
    3218              : !> \note
    3219              : !>     - In order to avoid numerical instabilities, these routines use Taylor-
    3220              : !>       expansions for the above core-products for large arguments.
    3221              : !>     - When adapting this module for higher order derivatives, appropriate
    3222              : !>       functions have to be provided!
    3223              : ! **************************************************************************************************
    3224    160920083 :    FUNCTION exei(Q, exp_q)
    3225              :       REAL(dp), INTENT(IN)                               :: Q
    3226              :       REAL(dp), INTENT(IN), OPTIONAL                     :: exp_q
    3227              :       REAL(dp)                                           :: exei
    3228              : 
    3229    160920083 :       exei = 0.0_dp
    3230    160920083 :       IF (Q < expcutoff) THEN
    3231              :          !Use exact product
    3232    144045009 :          IF (PRESENT(exp_q)) THEN
    3233     87518835 :             exei = exp_q*expint(1, Q, 1.0_dp/exp_q)
    3234              :          ELSE
    3235     56526174 :             exei = EXP(Q)*expint(1, Q)
    3236              :          END IF
    3237              :       ELSE
    3238              :          !Use approximation
    3239     16875074 :          exei = (1._dp/Q)*(Q*Q + exei1*Q + exei2)/(Q*Q + exei3*Q + exei4)
    3240              :       END IF
    3241    160920083 :    END FUNCTION exei
    3242              : 
    3243              : ! **************************************************************************************************
    3244              : !> \brief ...
    3245              : !> \param Q ...
    3246              : !> \return ...
    3247              : ! **************************************************************************************************
    3248     56219081 :    FUNCTION exer(Q)
    3249              :       REAL(dp), INTENT(IN)                               :: Q
    3250              :       REAL(dp)                                           :: exer
    3251              : 
    3252              :       REAL(dp)                                           :: Q3, Q5
    3253              : 
    3254     56219081 :       exer = 0.0_dp
    3255     56219081 :       IF (Q < expcutoff) THEN
    3256              :          !Use exact expression
    3257     56219081 :          exer = pi*EXP(Q)*erfc(SQRT(Q))
    3258              :       ELSE
    3259              :          !Use approximation
    3260            0 :          Q3 = Q*Q*Q
    3261            0 :          Q5 = Q3*Q*Q
    3262            0 :          exer = pi*(1.0_dp/SQRT(Q*pi) - 1.0_dp/(2.0_dp*SQRT(pi*Q3)) + 3.0_dp/(4.0_dp*(SQRT(pi*Q5))))
    3263              :       END IF
    3264     56219081 :    END FUNCTION exer
    3265              : 
    3266              : ! **************************************************************************************************
    3267              : !> \brief ...
    3268              : !> \param Q ...
    3269              : !> \param dQrho ...
    3270              : !> \param exei_q optional precomputed exei(Q)
    3271              : !> \return ...
    3272              : ! **************************************************************************************************
    3273     85670823 :    FUNCTION dexeirho(Q, dQrho, exei_q)
    3274              :       REAL(dp), INTENT(IN)                               :: Q, dQrho
    3275              :       REAL(dp), INTENT(IN), OPTIONAL                     :: exei_q
    3276              :       REAL(dp)                                           :: dexeirho
    3277              : 
    3278     85670823 :       IF (PRESENT(exei_q)) THEN
    3279     65194786 :          dexeirho = dQrho*(exei_q - 1.0_dp/Q)
    3280              :       ELSE
    3281     20476037 :          dexeirho = dQrho*(exei(Q) - 1.0_dp/Q)
    3282              :       END IF
    3283     85670823 :    END FUNCTION dexeirho
    3284              : 
    3285              : ! **************************************************************************************************
    3286              : !> \brief ...
    3287              : !> \param Q ...
    3288              : !> \param dQndrho ...
    3289              : !> \param exei_q optional precomputed exei(Q)
    3290              : !> \return ...
    3291              : ! **************************************************************************************************
    3292     85670823 :    FUNCTION dexeindrho(Q, dQndrho, exei_q)
    3293              :       REAL(dp), INTENT(IN)                               :: Q, dQndrho
    3294              :       REAL(dp), INTENT(IN), OPTIONAL                     :: exei_q
    3295              :       REAL(dp)                                           :: dexeindrho
    3296              : 
    3297     85670823 :       IF (PRESENT(exei_q)) THEN
    3298     65194786 :          dexeindrho = dQndrho*(exei_q - 1.0_dp/Q)
    3299              :       ELSE
    3300     20476037 :          dexeindrho = dQndrho*(exei(Q) - 1.0_dp/Q)
    3301              :       END IF
    3302     85670823 :    END FUNCTION dexeindrho
    3303              : 
    3304              : ! **************************************************************************************************
    3305              : !> \brief ...
    3306              : !> \param Q ...
    3307              : !> \param dQrho ...
    3308              : !> \return ...
    3309              : ! **************************************************************************************************
    3310     15762713 :    FUNCTION dexerrho(Q, dQrho)
    3311              :       REAL(dp), INTENT(IN)                               :: Q, dQrho
    3312              :       REAL(dp)                                           :: dexerrho
    3313              : 
    3314     15762713 :       dexerrho = dQrho*exer(Q) - dQrho*rootpi/SQRT(Q)
    3315     15762713 :    END FUNCTION dexerrho
    3316              : 
    3317              : ! **************************************************************************************************
    3318              : !> \brief ...
    3319              : !> \param Q ...
    3320              : !> \param dQndrho ...
    3321              : !> \return ...
    3322              : ! **************************************************************************************************
    3323     15762713 :    FUNCTION dexerndrho(Q, dQndrho)
    3324              :       REAL(dp), INTENT(IN)                               :: Q, dQndrho
    3325              :       REAL(dp)                                           :: dexerndrho
    3326              : 
    3327     15762713 :       dexerndrho = dQndrho*exer(Q) - dQndrho*rootpi/SQRT(Q)
    3328     15762713 :    END FUNCTION dexerndrho
    3329              : 
    3330              : ! **************************************************************************************************
    3331              : !> \brief ...
    3332              : !> \param Q ...
    3333              : !> \param dQrho ...
    3334              : !> \param d2Qrhorho ...
    3335              : !> \return ...
    3336              : ! **************************************************************************************************
    3337            0 :    FUNCTION d2exeirhorho(Q, dQrho, d2Qrhorho)
    3338              :       REAL(dp), INTENT(IN)                               :: Q, dQrho, d2Qrhorho
    3339              :       REAL(dp)                                           :: d2exeirhorho
    3340              : 
    3341              :       d2exeirhorho = exei(Q)*(d2Qrhorho + dQrho*dQrho) + &
    3342            0 :                      1.0_dp/(Q*Q)*(-Q*dQrho*dQrho - Q*d2Qrhorho + dQrho*dQrho)
    3343            0 :    END FUNCTION d2exeirhorho
    3344              : 
    3345              : ! **************************************************************************************************
    3346              : !> \brief ...
    3347              : !> \param Q ...
    3348              : !> \param dQrho ...
    3349              : !> \param d2Qrhorho ...
    3350              : !> \return ...
    3351              : ! **************************************************************************************************
    3352            0 :    FUNCTION d2exerrhorho(Q, dQrho, d2Qrhorho)
    3353              :       REAL(dp), INTENT(IN)                               :: Q, dQrho, d2Qrhorho
    3354              :       REAL(dp)                                           :: d2exerrhorho
    3355              : 
    3356              :       REAL(dp)                                           :: pi12, Q12
    3357              : 
    3358            0 :       Q12 = SQRT(Q)
    3359            0 :       pi12 = rootpi
    3360              : 
    3361              :       d2exerrhorho = exer(Q)*(d2Qrhorho + dQrho*dQrho) - dQrho*dQrho/(pi12*Q12) + &
    3362            0 :                      0.5_dp*dQrho*dQrho/(pi12*Q*Q12) - d2Qrhorho/(pi12*Q12)
    3363            0 :    END FUNCTION d2exerrhorho
    3364              : 
    3365              : ! **************************************************************************************************
    3366              : !> \brief ...
    3367              : !> \param Q ...
    3368              : !> \param dQrho ...
    3369              : !> \param dQndrho ...
    3370              : !> \param d2Qrhondrho ...
    3371              : !> \return ...
    3372              : ! **************************************************************************************************
    3373            0 :    FUNCTION d2exeirhondrho(Q, dQrho, dQndrho, d2Qrhondrho)
    3374              :       REAL(dp), INTENT(IN)                               :: Q, dQrho, dQndrho, d2Qrhondrho
    3375              :       REAL(dp)                                           :: d2exeirhondrho
    3376              : 
    3377              :       d2exeirhondrho = exei(Q)*(d2Qrhondrho + dQrho*dQndrho) - &
    3378            0 :                        1.0_dp/Q*(dQrho*dQndrho + d2Qrhondrho) + 1.0_dp/(Q*Q)*dQrho*dQndrho
    3379            0 :    END FUNCTION d2exeirhondrho
    3380              : 
    3381              : ! **************************************************************************************************
    3382              : !> \brief ...
    3383              : !> \param Q ...
    3384              : !> \param dQrho ...
    3385              : !> \param dQndrho ...
    3386              : !> \param d2Qrhondrho ...
    3387              : !> \return ...
    3388              : ! **************************************************************************************************
    3389            0 :    FUNCTION d2exerrhondrho(Q, dQrho, dQndrho, d2Qrhondrho)
    3390              :       REAL(dp), INTENT(IN)                               :: Q, dQrho, dQndrho, d2Qrhondrho
    3391              :       REAL(dp)                                           :: d2exerrhondrho
    3392              : 
    3393              :       REAL(dp)                                           :: pi12, Q12
    3394              : 
    3395            0 :       Q12 = SQRT(Q)
    3396            0 :       pi12 = rootpi
    3397              : 
    3398              :       d2exerrhondrho = exer(Q)*(d2Qrhondrho + dQrho*dQndrho) - 1.0_dp/(pi12*Q12)*dQrho*dQndrho &
    3399            0 :                        + 0.5_dp/(pi12*Q12*Q)*dQrho*dQndrho - 1.0_dp/(pi12*Q12)*d2Qrhondrho
    3400            0 :    END FUNCTION d2exerrhondrho
    3401              : 
    3402              : ! **************************************************************************************************
    3403              : !> \brief ...
    3404              : !> \param Q ...
    3405              : !> \param dQndrho ...
    3406              : !> \param d2Qndrhondrho ...
    3407              : !> \return ...
    3408              : ! **************************************************************************************************
    3409            0 :    FUNCTION d2exeindrhondrho(Q, dQndrho, d2Qndrhondrho)
    3410              :       REAL(dp), INTENT(IN)                               :: Q, dQndrho, d2Qndrhondrho
    3411              :       REAL(dp)                                           :: d2exeindrhondrho
    3412              : 
    3413              :       d2exeindrhondrho = exei(Q)*(d2Qndrhondrho + dQndrho*dQndrho) + &
    3414            0 :                          1.0_dp/(Q*Q)*(-Q*dQndrho*dQndrho - Q*d2Qndrhondrho + dQndrho*dQndrho)
    3415            0 :    END FUNCTION d2exeindrhondrho
    3416              : 
    3417              : ! **************************************************************************************************
    3418              : !> \brief ...
    3419              : !> \param Q ...
    3420              : !> \param dQndrho ...
    3421              : !> \param d2Qndrhondrho ...
    3422              : !> \return ...
    3423              : ! **************************************************************************************************
    3424            0 :    FUNCTION d2exerndrhondrho(Q, dQndrho, d2Qndrhondrho)
    3425              :       REAL(dp), INTENT(IN)                               :: Q, dQndrho, d2Qndrhondrho
    3426              :       REAL(dp)                                           :: d2exerndrhondrho
    3427              : 
    3428              :       REAL(dp)                                           :: pi12, Q12
    3429              : 
    3430            0 :       Q12 = SQRT(Q)
    3431            0 :       pi12 = rootpi
    3432              : 
    3433              :       d2exerndrhondrho = exer(Q)*(d2Qndrhondrho + dQndrho*dQndrho) - dQndrho*dQndrho/(pi12*Q12) &
    3434            0 :                          + 0.5_dp*dQndrho*dQndrho/(pi12*Q*Q12) - d2Qndrhondrho/(pi12*Q12)
    3435            0 :    END FUNCTION d2exerndrhondrho
    3436              : 
    3437   3297089165 :    @:define_expint(impure=0)
    3438              : 
    3439              : END MODULE xc_xwpbe
    3440              : 
        

Generated by: LCOV version 2.0-1