LCOV - code coverage report
Current view: top level - src - qs_interactions.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:9ccafda) Lines: 93.3 % 388 362
Test Date: 2026-10-15 00:55:44 Functions: 100.0 % 9 9

            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 Calculate the interaction radii for the operator matrix calculation.
      10              : !> \par History
      11              : !>      Joost VandeVondele : added exp_radius_very_extended
      12              : !>      24.09.2002 overloaded init_interaction_radii for KG use (gt)
      13              : !>      27.02.2004 integrated KG into QS version of init_interaction_radii (jgh)
      14              : !>      07.03.2006 new routine to extend kind interaction radius for semi-empiric (jgh)
      15              : !> \author MK (12.07.2000)
      16              : ! **************************************************************************************************
      17              : MODULE qs_interactions
      18              : 
      19              :    USE ao_util,                         ONLY: exp_radius
      20              :    USE atomic_kind_types,               ONLY: atomic_kind_type,&
      21              :                                               get_atomic_kind
      22              :    USE basis_set_types,                 ONLY: get_gto_basis_set,&
      23              :                                               gto_basis_set_type,&
      24              :                                               set_gto_basis_set
      25              :    USE cp_control_types,                ONLY: qs_control_type,&
      26              :                                               semi_empirical_control_type
      27              :    USE cp_log_handling,                 ONLY: cp_get_default_logger,&
      28              :                                               cp_logger_type
      29              :    USE cp_output_handling,              ONLY: cp_print_key_finished_output,&
      30              :                                               cp_print_key_unit_nr
      31              :    USE cp_units,                        ONLY: cp_unit_from_cp2k
      32              :    USE external_potential_types,        ONLY: all_potential_type,&
      33              :                                               get_potential,&
      34              :                                               gth_potential_type,&
      35              :                                               set_potential,&
      36              :                                               sgp_potential_type
      37              :    USE input_section_types,             ONLY: section_vals_type,&
      38              :                                               section_vals_val_get
      39              :    USE kinds,                           ONLY: default_string_length,&
      40              :                                               dp
      41              :    USE paw_proj_set_types,              ONLY: get_paw_proj_set,&
      42              :                                               paw_proj_set_type,&
      43              :                                               set_paw_proj_set
      44              :    USE qs_cneo_types,                   ONLY: cneo_potential_type
      45              :    USE qs_kind_types,                   ONLY: get_qs_kind,&
      46              :                                               qs_kind_type
      47              :    USE string_utilities,                ONLY: uppercase
      48              :    USE upf_local_integrals,             ONLY: upf_local_init
      49              : #include "./base/base_uses.f90"
      50              : 
      51              :    IMPLICIT NONE
      52              : 
      53              :    PRIVATE
      54              : 
      55              : ! *** Global parameters (only in this module)
      56              : 
      57              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_interactions'
      58              : 
      59              : ! *** Public subroutines ***
      60              : 
      61              :    PUBLIC :: init_interaction_radii, init_se_nlradius, init_interaction_radii_orb_basis
      62              : 
      63              :    PUBLIC :: write_paw_radii, write_ppnl_radii, write_ppl_radii, write_core_charge_radii, &
      64              :              write_pgf_orb_radii
      65              : 
      66              : CONTAINS
      67              : 
      68              : ! **************************************************************************************************
      69              : !> \brief   Initialize all the atomic kind radii for a given threshold value.
      70              : !> \param qs_control ...
      71              : !> \param qs_kind_set ...
      72              : !> \date    24.09.2002
      73              : !> \author  GT
      74              : !> \version 1.0
      75              : ! **************************************************************************************************
      76        12337 :    SUBROUTINE init_interaction_radii(qs_control, qs_kind_set)
      77              : 
      78              :       TYPE(qs_control_type), INTENT(IN)                  :: qs_control
      79              :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
      80              : 
      81              :       CHARACTER(len=*), PARAMETER :: routineN = 'init_interaction_radii'
      82              : 
      83              :       INTEGER :: handle, i, iexp_ppl, ikind, ip, iprj_ppnl, j, l, lppl, lppnl, lppsl, lprj, &
      84              :          lprj_ppnl, maxl, n_local, nexp_lpot, nexp_lsd, nexp_ppl, nkind, nloc
      85              :       INTEGER, DIMENSION(0:10)                           :: npot
      86              :       INTEGER, DIMENSION(1:10)                           :: nrloc
      87              :       INTEGER, DIMENSION(1:15, 0:10)                     :: nrpot
      88        12337 :       INTEGER, DIMENSION(:), POINTER                     :: nct_lpot, nct_lsd, nprj, nprj_ppnl
      89              :       LOGICAL                                            :: ecp_local, ecp_semi_local, llsd, lpot, &
      90              :                                                             paw_atom
      91              :       LOGICAL, DIMENSION(0:5)                            :: is_nonlocal
      92              :       REAL(KIND=dp) :: alpha_core_charge, alpha_ppl, ccore_charge, cerf_ppl, core_charge_radius, &
      93              :          cval, ppl_radius, ppnl_radius, rcprj, zeta
      94              :       REAL(KIND=dp), DIMENSION(1:10)                     :: aloc, bloc
      95              :       REAL(KIND=dp), DIMENSION(1:15, 0:10)               :: apot, bpot
      96        12337 :       REAL(KIND=dp), DIMENSION(:), POINTER               :: a_local, a_nonlocal, alpha_lpot, &
      97        12337 :                                                             alpha_lsd, alpha_ppnl, c_local, &
      98        12337 :                                                             cexp_ppl
      99        12337 :       REAL(KIND=dp), DIMENSION(:, :), POINTER            :: cprj_ppnl, cval_lpot, cval_lsd, rzetprj, &
     100        12337 :                                                             zet
     101        12337 :       REAL(KIND=dp), DIMENSION(:, :, :), POINTER         :: c_nonlocal
     102              :       TYPE(all_potential_type), POINTER                  :: all_potential
     103              :       TYPE(cneo_potential_type), POINTER                 :: cneo_potential
     104              :       TYPE(gth_potential_type), POINTER                  :: gth_potential
     105              :       TYPE(gto_basis_set_type), POINTER :: aux_basis_set, aux_fit_basis_set, aux_gw_basis, &
     106              :          aux_opt_basis_set, gapw_1c_basis, harris_basis, lri_basis, mao_basis, min_basis_set, &
     107              :          nuc_basis_set, orb_basis_set, p_lri_basis, rhoin_basis, ri_aux_basis_set, ri_basis, &
     108              :          ri_xas_basis, soft_basis, tda_k_basis
     109              :       TYPE(paw_proj_set_type), POINTER                   :: paw_proj_set
     110              :       TYPE(sgp_potential_type), POINTER                  :: sgp_potential
     111              : 
     112        12337 :       CALL timeset(routineN, handle)
     113              : 
     114        12337 :       NULLIFY (all_potential, gth_potential, sgp_potential, cneo_potential)
     115        12337 :       NULLIFY (aux_basis_set, aux_fit_basis_set, aux_gw_basis, tda_k_basis, &
     116        12337 :                harris_basis, lri_basis, mao_basis, orb_basis_set, p_lri_basis, ri_aux_basis_set, &
     117        12337 :                ri_basis, ri_xas_basis, soft_basis, gapw_1c_basis, aux_opt_basis_set, min_basis_set, &
     118        12337 :                nuc_basis_set)
     119        12337 :       NULLIFY (nprj_ppnl, nprj)
     120        12337 :       NULLIFY (alpha_ppnl, cexp_ppl, cprj_ppnl, zet)
     121              : 
     122        12337 :       nkind = SIZE(qs_kind_set)
     123        12337 :       nexp_ppl = 0
     124              : 
     125        35035 :       DO ikind = 1, nkind
     126              : 
     127        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type="ORB")
     128        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
     129        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=min_basis_set, basis_type="MIN")
     130        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_fit_basis_set, basis_type="AUX_FIT")
     131        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_opt_basis_set, basis_type="AUX_OPT")
     132        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis, basis_type="LRI_AUX")
     133        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=p_lri_basis, basis_type="P_LRI_AUX")
     134        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_basis, basis_type="RI_HXC")
     135        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_aux_basis_set, basis_type="RI_AUX")
     136        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=mao_basis, basis_type="MAO")
     137        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=harris_basis, basis_type="HARRIS")
     138        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_gw_basis, basis_type="AUX_GW")
     139        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=ri_xas_basis, basis_type="RI_XAS")
     140        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=soft_basis, basis_type="ORB_SOFT")
     141        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=gapw_1c_basis, basis_type="GAPW_1C")
     142        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=tda_k_basis, basis_type="TDA_HFX")
     143        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=rhoin_basis, basis_type="RHOIN")
     144        22698 :          CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type="NUC")
     145              :          CALL get_qs_kind(qs_kind_set(ikind), &
     146              :                           paw_proj_set=paw_proj_set, &
     147              :                           paw_atom=paw_atom, &
     148              :                           all_potential=all_potential, &
     149              :                           gth_potential=gth_potential, &
     150              :                           sgp_potential=sgp_potential, &
     151        22698 :                           cneo_potential=cneo_potential)
     152              : 
     153              :          ! Calculate the orbital basis function radii ***
     154              :          ! For ALL electron this has to come before the calculation of the
     155              :          ! radii used to calculate the 3c lists.
     156              :          ! Indeed, there the radii of the GTO primitives are needed
     157        22698 :          IF (ASSOCIATED(orb_basis_set)) THEN
     158              :             CALL init_interaction_radii_orb_basis(orb_basis_set, qs_control%eps_pgf_orb, &
     159        22066 :                                                   qs_control%eps_kg_orb)
     160              :          END IF
     161              : 
     162        22698 :          IF (ASSOCIATED(all_potential)) THEN
     163              : 
     164              :             CALL get_potential(potential=all_potential, &
     165              :                                alpha_core_charge=alpha_core_charge, &
     166         7270 :                                ccore_charge=ccore_charge)
     167              : 
     168              :             ! Calculate the radius of the core charge distribution
     169              : 
     170              :             core_charge_radius = exp_radius(0, alpha_core_charge, &
     171              :                                             qs_control%eps_core_charge, &
     172         7270 :                                             ccore_charge)
     173              : 
     174              :             CALL set_potential(potential=all_potential, &
     175         7270 :                                core_charge_radius=core_charge_radius)
     176              : 
     177        15428 :          ELSE IF (ASSOCIATED(gth_potential)) THEN
     178              : 
     179              :             CALL get_potential(potential=gth_potential, &
     180              :                                alpha_core_charge=alpha_core_charge, &
     181              :                                ccore_charge=ccore_charge, &
     182              :                                alpha_ppl=alpha_ppl, &
     183              :                                cerf_ppl=cerf_ppl, &
     184              :                                nexp_ppl=nexp_ppl, &
     185              :                                cexp_ppl=cexp_ppl, &
     186              :                                lpot_present=lpot, &
     187              :                                lsd_present=llsd, &
     188              :                                lppnl=lppnl, &
     189              :                                alpha_ppnl=alpha_ppnl, &
     190              :                                nprj_ppnl=nprj_ppnl, &
     191        15140 :                                cprj_ppnl=cprj_ppnl)
     192              : 
     193              :             ! Calculate the radius of the core charge distribution
     194              :             core_charge_radius = exp_radius(0, alpha_core_charge, &
     195              :                                             qs_control%eps_core_charge, &
     196        15140 :                                             ccore_charge)
     197              : 
     198              :             ! Calculate the radii of the local part
     199              :             ! of the Goedecker pseudopotential (GTH)
     200        15140 :             ppl_radius = exp_radius(0, alpha_ppl, qs_control%eps_ppl, cerf_ppl)
     201              : 
     202        44892 :             DO iexp_ppl = 1, nexp_ppl
     203        29752 :                lppl = 2*(iexp_ppl - 1)
     204              :                ppl_radius = MAX(ppl_radius, &
     205              :                                 exp_radius(lppl, alpha_ppl, &
     206              :                                            qs_control%eps_ppl, &
     207              :                                            cexp_ppl(iexp_ppl), &
     208        44892 :                                            rlow=ppl_radius))
     209              :             END DO
     210        15140 :             IF (lpot) THEN
     211              :                ! extended local potential
     212              :                CALL get_potential(potential=gth_potential, &
     213              :                                   nexp_lpot=nexp_lpot, &
     214              :                                   alpha_lpot=alpha_lpot, &
     215              :                                   nct_lpot=nct_lpot, &
     216            8 :                                   cval_lpot=cval_lpot)
     217           20 :                DO j = 1, nexp_lpot
     218           46 :                   DO i = 1, nct_lpot(j)
     219           26 :                      lppl = 2*(i - 1)
     220              :                      ppl_radius = MAX(ppl_radius, &
     221              :                                       exp_radius(lppl, alpha_lpot(j), qs_control%eps_ppl, &
     222           38 :                                                  cval_lpot(i, j), rlow=ppl_radius))
     223              :                   END DO
     224              :                END DO
     225              :             END IF
     226        15140 :             IF (llsd) THEN
     227              :                ! lsd local potential
     228              :                CALL get_potential(potential=gth_potential, &
     229              :                                   nexp_lsd=nexp_lsd, &
     230              :                                   alpha_lsd=alpha_lsd, &
     231              :                                   nct_lsd=nct_lsd, &
     232            0 :                                   cval_lsd=cval_lsd)
     233            0 :                DO j = 1, nexp_lsd
     234            0 :                   DO i = 1, nct_lsd(j)
     235            0 :                      lppl = 2*(i - 1)
     236              :                      ppl_radius = MAX(ppl_radius, &
     237              :                                       exp_radius(lppl, alpha_lsd(j), qs_control%eps_ppl, &
     238            0 :                                                  cval_lsd(i, j), rlow=ppl_radius))
     239              :                   END DO
     240              :                END DO
     241              :             END IF
     242              : 
     243              :             ! Calculate the radii of the non-local part
     244              :             ! of the Goedecker pseudopotential (GTH)
     245        15140 :             ppnl_radius = 0.0_dp
     246        28850 :             DO l = 0, lppnl
     247        38580 :                DO iprj_ppnl = 1, nprj_ppnl(l)
     248         9730 :                   lprj_ppnl = l + 2*(iprj_ppnl - 1)
     249              :                   ppnl_radius = MAX(ppnl_radius, &
     250              :                                     exp_radius(lprj_ppnl, alpha_ppnl(l), &
     251              :                                                qs_control%eps_pgf_orb, &
     252              :                                                cprj_ppnl(iprj_ppnl, l), &
     253        23440 :                                                rlow=ppnl_radius))
     254              :                END DO
     255              :             END DO
     256              :             CALL set_potential(potential=gth_potential, &
     257              :                                core_charge_radius=core_charge_radius, &
     258              :                                ppl_radius=ppl_radius, &
     259        15140 :                                ppnl_radius=ppnl_radius)
     260              : 
     261          288 :          ELSE IF (ASSOCIATED(sgp_potential)) THEN
     262              : 
     263              :             ! Calculate the radius of the core charge distribution
     264              :             CALL get_potential(potential=sgp_potential, &
     265              :                                alpha_core_charge=alpha_core_charge, &
     266          106 :                                ccore_charge=ccore_charge)
     267              :             core_charge_radius = exp_radius(0, alpha_core_charge, &
     268              :                                             qs_control%eps_core_charge, &
     269          106 :                                             ccore_charge)
     270              :             ! Calculate the radii of the local part
     271          106 :             ppl_radius = core_charge_radius
     272          106 :             CALL get_potential(potential=sgp_potential, ecp_local=ecp_local)
     273          106 :             IF (ALLOCATED(sgp_potential%upf_data)) THEN
     274           24 :                IF (sgp_potential%upf_local%radial%degree < 0 .OR. &
     275              :                    sgp_potential%upf_local%eps /= qs_control%eps_ppl) THEN
     276              :                   CALL upf_local_init(sgp_potential%upf_data, alpha_core_charge, &
     277              :                                       MAX(0, sgp_potential%upf_local%radial%degree), &
     278           24 :                                       sgp_potential%upf_local, qs_control%eps_ppl)
     279              :                END IF
     280           24 :                ppl_radius = MAX(ppl_radius, sgp_potential%upf_local%radial%radius)
     281           82 :             ELSE IF (ecp_local) THEN
     282           82 :                CALL get_potential(potential=sgp_potential, nloc=nloc, nrloc=nrloc, aloc=aloc, bloc=bloc)
     283          356 :                DO i = 1, nloc
     284          274 :                   lppl = MAX(0, nrloc(i) - 2)
     285              :                   ppl_radius = MAX(ppl_radius, &
     286          356 :                                    exp_radius(lppl, bloc(i), qs_control%eps_ppl, aloc(i), rlow=ppl_radius))
     287              :                END DO
     288              :             ELSE
     289            0 :                CALL get_potential(potential=sgp_potential, n_local=n_local, a_local=a_local, c_local=c_local)
     290            0 :                DO i = 1, n_local
     291              :                   ppl_radius = MAX(ppl_radius, &
     292            0 :                                    exp_radius(0, a_local(i), qs_control%eps_ppl, c_local(i), rlow=ppl_radius))
     293              :                END DO
     294              :             END IF
     295              :             ! Calculate the radii of the semi-local part
     296          106 :             CALL get_potential(potential=sgp_potential, ecp_semi_local=ecp_semi_local)
     297          106 :             IF (ecp_semi_local) THEN
     298              :                CALL get_potential(potential=sgp_potential, sl_lmax=lppsl, npot=npot, nrpot=nrpot, &
     299           82 :                                   apot=apot, bpot=bpot)
     300          252 :                DO l = 0, lppsl
     301          790 :                   DO i = 1, npot(l)
     302          538 :                      lppl = MAX(0, nrpot(i, l) - 2)
     303              :                      ppl_radius = MAX(ppl_radius, &
     304              :                                       exp_radius(lppl, bpot(i, l), qs_control%eps_ppl, apot(i, l), &
     305          708 :                                                  rlow=ppl_radius))
     306              :                   END DO
     307              :                END DO
     308              :             END IF
     309              :             ! Calculate the radii of the non-local part
     310          106 :             ppnl_radius = 0.0_dp
     311          106 :             CALL get_potential(potential=sgp_potential, lmax=lppnl, n_nonlocal=nloc)
     312              :             CALL get_potential(potential=sgp_potential, is_nonlocal=is_nonlocal, &
     313          106 :                                a_nonlocal=a_nonlocal, c_nonlocal=c_nonlocal)
     314          106 :             IF (ALLOCATED(sgp_potential%upf_data)) THEN
     315           24 :                ppnl_radius = sgp_potential%upf_projectors%radius
     316              :             ELSE
     317           82 :                DO l = 0, lppnl
     318           82 :                   IF (is_nonlocal(l)) THEN
     319            0 :                      DO i = 1, nloc
     320              :                         ! SGP coefficients contain 1/sqrt(4*pi). The addition
     321              :                         ! theorem bounds every angular component by sqrt(2*l+1).
     322            0 :                         cval = SQRT(REAL(2*l + 1, dp))*MAXVAL(ABS(c_nonlocal(i, :, l)))
     323              :                         ppnl_radius = MAX(ppnl_radius, &
     324            0 :                                           exp_radius(l, a_nonlocal(i), qs_control%eps_pgf_orb, cval, rlow=ppnl_radius))
     325              :                      END DO
     326              :                   END IF
     327              :                END DO
     328              :             END IF
     329              :             CALL set_potential(potential=sgp_potential, &
     330              :                                core_charge_radius=core_charge_radius, &
     331              :                                ppl_radius=ppl_radius, &
     332          106 :                                ppnl_radius=ppnl_radius)
     333              : 
     334          182 :          ELSE IF (ASSOCIATED(cneo_potential)) THEN
     335              : 
     336            8 :             IF (ASSOCIATED(nuc_basis_set)) THEN
     337              :                CALL init_interaction_radii_orb_basis(nuc_basis_set, qs_control%eps_pgf_orb/ &
     338            8 :                                                      SQRT(cneo_potential%zeff))
     339              :             END IF
     340              : 
     341              :          END IF
     342              : 
     343              :          ! Calculate the aux fit orbital basis function radii
     344        22698 :          IF (ASSOCIATED(aux_fit_basis_set)) THEN
     345              :             CALL init_interaction_radii_orb_basis(aux_fit_basis_set, qs_control%eps_pgf_orb, &
     346         1404 :                                                   qs_control%eps_kg_orb)
     347              :          END IF
     348              : 
     349              :          ! Calculate the aux opt orbital basis function radii
     350        22698 :          IF (ASSOCIATED(aux_opt_basis_set)) THEN
     351         1244 :             CALL init_interaction_radii_orb_basis(aux_opt_basis_set, qs_control%eps_pgf_orb)
     352              :          END IF
     353              : 
     354              :          ! Calculate the minimal basis function radii
     355        22698 :          IF (ASSOCIATED(min_basis_set)) THEN
     356            4 :             CALL init_interaction_radii_orb_basis(min_basis_set, qs_control%eps_pgf_orb)
     357              :          END IF
     358              : 
     359              :          ! Calculate the aux orbital basis function radii
     360        22698 :          IF (ASSOCIATED(aux_basis_set)) THEN
     361            0 :             CALL init_interaction_radii_orb_basis(aux_basis_set, qs_control%eps_pgf_orb)
     362              :          END IF
     363              : 
     364              :          ! Calculate the RI aux orbital basis function radii
     365        22698 :          IF (ASSOCIATED(RI_aux_basis_set)) THEN
     366         5076 :             CALL init_interaction_radii_orb_basis(RI_aux_basis_set, qs_control%eps_pgf_orb)
     367              :          END IF
     368              : 
     369              :          ! Calculate the MAO orbital basis function radii
     370        22698 :          IF (ASSOCIATED(mao_basis)) THEN
     371           20 :             CALL init_interaction_radii_orb_basis(mao_basis, qs_control%eps_pgf_orb)
     372              :          END IF
     373              : 
     374              :          ! Calculate the HARRIS orbital basis function radii
     375        22698 :          IF (ASSOCIATED(harris_basis)) THEN
     376          138 :             CALL init_interaction_radii_orb_basis(harris_basis, qs_control%eps_pgf_orb)
     377              :          END IF
     378              : 
     379              :          ! Calculate the AUX_GW orbital basis function radii
     380        22698 :          IF (ASSOCIATED(aux_gw_basis)) THEN
     381           60 :             CALL init_interaction_radii_orb_basis(aux_gw_basis, qs_control%eps_pgf_orb)
     382              :          END IF
     383              : 
     384              :          ! Calculate the soft orbital basis function radii
     385        22698 :          IF (ASSOCIATED(soft_basis)) THEN
     386         3362 :             CALL init_interaction_radii_orb_basis(soft_basis, qs_control%eps_pgf_orb)
     387              :          END IF
     388              : 
     389              :          ! Calculate the GAPW 1 center basis function radii
     390        22698 :          IF (ASSOCIATED(gapw_1c_basis)) THEN
     391         3362 :             CALL init_interaction_radii_orb_basis(gapw_1c_basis, qs_control%eps_pgf_orb)
     392              :          END IF
     393              : 
     394              :          ! Calculate the HFX SR basis for TDA
     395        22698 :          IF (ASSOCIATED(tda_k_basis)) THEN
     396            0 :             CALL init_interaction_radii_orb_basis(tda_k_basis, qs_control%eps_pgf_orb)
     397              :          END IF
     398              : 
     399              :          ! Calculate the lri basis function radii
     400        22698 :          IF (ASSOCIATED(lri_basis)) THEN
     401           96 :             CALL init_interaction_radii_orb_basis(lri_basis, qs_control%eps_pgf_orb)
     402              :          END IF
     403        22698 :          IF (ASSOCIATED(ri_basis)) THEN
     404            2 :             CALL init_interaction_radii_orb_basis(ri_basis, qs_control%eps_pgf_orb)
     405              :          END IF
     406        22698 :          IF (ASSOCIATED(ri_xas_basis)) THEN
     407          110 :             CALL init_interaction_radii_orb_basis(ri_xas_basis, qs_control%eps_pgf_orb)
     408              :          END IF
     409        22698 :          IF (ASSOCIATED(p_lri_basis)) THEN
     410            8 :             CALL init_interaction_radii_orb_basis(p_lri_basis, qs_control%eps_pgf_orb)
     411              :          END IF
     412              : 
     413              :          ! Calculate the density input basis function radii
     414        22698 :          IF (ASSOCIATED(rhoin_basis)) THEN
     415           22 :             CALL init_interaction_radii_orb_basis(rhoin_basis, qs_control%eps_pgf_orb)
     416              :          END IF
     417              : 
     418              :          ! Calculate the paw projector basis function radii
     419        57733 :          IF (ASSOCIATED(paw_proj_set)) THEN
     420              :             CALL get_paw_proj_set(paw_proj_set=paw_proj_set, &
     421              :                                   nprj=nprj, &
     422              :                                   maxl=maxl, &
     423              :                                   zetprj=zet, &
     424         2696 :                                   rzetprj=rzetprj)
     425         2696 :             rcprj = 0.0_dp
     426        49814 :             rzetprj = 0.0_dp
     427         8992 :             DO lprj = 0, maxl
     428        36538 :                DO ip = 1, nprj(lprj)
     429        27546 :                   zeta = zet(ip, lprj)
     430              :                   rzetprj(ip, lprj) = MAX(rzetprj(ip, lprj), &
     431              :                                           exp_radius(lprj, zeta, qs_control%eps_pgf_orb, &
     432        27546 :                                                      1.0_dp, rlow=rzetprj(ip, lprj)))
     433        33842 :                   rcprj = MAX(rcprj, rzetprj(ip, lprj))
     434              :                END DO
     435              :             END DO
     436              :             CALL set_paw_proj_set(paw_proj_set=paw_proj_set, &
     437              :                                   rzetprj=rzetprj, &
     438         2696 :                                   rcprj=rcprj)
     439              : 
     440              :          END IF
     441              :       END DO ! ikind
     442              : 
     443        12337 :       CALL timestop(handle)
     444              : 
     445        12337 :    END SUBROUTINE init_interaction_radii
     446              : 
     447              : ! **************************************************************************************************
     448              : !> \brief ...
     449              : !> \param orb_basis_set ...
     450              : !> \param eps_pgf_orb ...
     451              : !> \param eps_pgf_short ...
     452              : ! **************************************************************************************************
     453        41924 :    SUBROUTINE init_interaction_radii_orb_basis(orb_basis_set, eps_pgf_orb, eps_pgf_short)
     454              : 
     455              :       TYPE(gto_basis_set_type), POINTER                  :: orb_basis_set
     456              :       REAL(KIND=dp), INTENT(IN)                          :: eps_pgf_orb
     457              :       REAL(KIND=dp), INTENT(IN), OPTIONAL                :: eps_pgf_short
     458              : 
     459              :       INTEGER                                            :: ipgf, iset, ishell, l, nset
     460        41924 :       INTEGER, DIMENSION(:), POINTER                     :: npgf, nshell
     461        41924 :       INTEGER, DIMENSION(:, :), POINTER                  :: lshell
     462              :       REAL(KIND=dp)                                      :: eps_short, gcca, kind_radius, &
     463              :                                                             short_radius, zeta
     464        41924 :       REAL(KIND=dp), DIMENSION(:), POINTER               :: set_radius
     465        41924 :       REAL(KIND=dp), DIMENSION(:, :), POINTER            :: pgf_radius, zet
     466        41924 :       REAL(KIND=dp), DIMENSION(:, :, :), POINTER         :: gcc
     467              : 
     468        83848 :       IF (ASSOCIATED(orb_basis_set)) THEN
     469              : 
     470        41924 :          IF (PRESENT(eps_pgf_short)) THEN
     471        23470 :             eps_short = eps_pgf_short
     472              :          ELSE
     473        18454 :             eps_short = eps_pgf_orb
     474              :          END IF
     475              : 
     476              :          CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
     477              :                                 nset=nset, &
     478              :                                 nshell=nshell, &
     479              :                                 npgf=npgf, &
     480              :                                 l=lshell, &
     481              :                                 zet=zet, &
     482              :                                 gcc=gcc, &
     483              :                                 pgf_radius=pgf_radius, &
     484        41924 :                                 set_radius=set_radius)
     485              : 
     486        41924 :          kind_radius = 0.0_dp
     487        41924 :          short_radius = 0.0_dp
     488              : 
     489       190454 :          DO iset = 1, nset
     490       148530 :             set_radius(iset) = 0.0_dp
     491       457247 :             DO ipgf = 1, npgf(iset)
     492       308717 :                pgf_radius(ipgf, iset) = 0.0_dp
     493      1020895 :                DO ishell = 1, nshell(iset)
     494       712178 :                   l = lshell(ishell, iset)
     495       712178 :                   gcca = gcc(ipgf, ishell, iset)
     496       712178 :                   zeta = zet(ipgf, iset)
     497              :                   pgf_radius(ipgf, iset) = MAX(pgf_radius(ipgf, iset), &
     498              :                                                exp_radius(l, zeta, eps_pgf_orb, gcca, &
     499       712178 :                                                           rlow=pgf_radius(ipgf, iset)))
     500              :                   short_radius = MAX(short_radius, &
     501              :                                      exp_radius(l, zeta, eps_short, gcca, &
     502      1020895 :                                                 rlow=short_radius))
     503              :                END DO
     504       457247 :                set_radius(iset) = MAX(set_radius(iset), pgf_radius(ipgf, iset))
     505              :             END DO
     506       190454 :             kind_radius = MAX(kind_radius, set_radius(iset))
     507              :          END DO
     508              : 
     509              :          CALL set_gto_basis_set(gto_basis_set=orb_basis_set, &
     510              :                                 pgf_radius=pgf_radius, &
     511              :                                 set_radius=set_radius, &
     512              :                                 kind_radius=kind_radius, &
     513        41924 :                                 short_kind_radius=short_radius)
     514              : 
     515              :       END IF
     516              : 
     517        41924 :    END SUBROUTINE init_interaction_radii_orb_basis
     518              : 
     519              : ! **************************************************************************************************
     520              : !> \brief ...
     521              : !> \param se_control ...
     522              : !> \param atomic_kind_set ...
     523              : !> \param qs_kind_set ...
     524              : !> \param subsys_section ...
     525              : ! **************************************************************************************************
     526          996 :    SUBROUTINE init_se_nlradius(se_control, atomic_kind_set, qs_kind_set, &
     527              :                                subsys_section)
     528              : 
     529              :       TYPE(semi_empirical_control_type), POINTER         :: se_control
     530              :       TYPE(atomic_kind_type), DIMENSION(:), POINTER      :: atomic_kind_set
     531              :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     532              :       TYPE(section_vals_type), POINTER                   :: subsys_section
     533              : 
     534              :       INTEGER                                            :: ikind, nkind
     535              :       REAL(KIND=dp)                                      :: kind_radius
     536              :       TYPE(gto_basis_set_type), POINTER                  :: orb_basis_set
     537              :       TYPE(qs_kind_type), POINTER                        :: qs_kind
     538              : 
     539          996 :       NULLIFY (orb_basis_set, qs_kind)
     540              : 
     541          996 :       nkind = SIZE(qs_kind_set)
     542              : 
     543         3228 :       DO ikind = 1, nkind
     544              : 
     545         2232 :          qs_kind => qs_kind_set(ikind)
     546              : 
     547         2232 :          CALL get_qs_kind(qs_kind=qs_kind, basis_set=orb_basis_set)
     548              : 
     549         3228 :          IF (ASSOCIATED(orb_basis_set)) THEN
     550              : 
     551              :             CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
     552         2232 :                                    kind_radius=kind_radius)
     553              : 
     554         2232 :             kind_radius = MAX(kind_radius, se_control%cutoff_exc)
     555              : 
     556              :             CALL set_gto_basis_set(gto_basis_set=orb_basis_set, &
     557         2232 :                                    kind_radius=kind_radius)
     558              : 
     559              :          END IF
     560              : 
     561              :       END DO
     562              : 
     563          996 :       CALL write_kind_radii(atomic_kind_set, qs_kind_set, subsys_section)
     564              : 
     565          996 :    END SUBROUTINE init_se_nlradius
     566              : 
     567              : ! **************************************************************************************************
     568              : !> \brief ...
     569              : !> \param atomic_kind_set ...
     570              : !> \param qs_kind_set ...
     571              : !> \param subsys_section ...
     572              : ! **************************************************************************************************
     573          996 :    SUBROUTINE write_kind_radii(atomic_kind_set, qs_kind_set, subsys_section)
     574              : 
     575              :       TYPE(atomic_kind_type), DIMENSION(:), POINTER      :: atomic_kind_set
     576              :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     577              :       TYPE(section_vals_type), POINTER                   :: subsys_section
     578              : 
     579              :       CHARACTER(LEN=10)                                  :: bas
     580              :       CHARACTER(LEN=default_string_length)               :: name, unit_str
     581              :       INTEGER                                            :: ikind, nkind, output_unit
     582              :       REAL(KIND=dp)                                      :: conv, kind_radius
     583              :       TYPE(cp_logger_type), POINTER                      :: logger
     584              :       TYPE(gto_basis_set_type), POINTER                  :: orb_basis_set
     585              : 
     586          996 :       NULLIFY (logger)
     587          996 :       logger => cp_get_default_logger()
     588          996 :       NULLIFY (orb_basis_set)
     589          996 :       bas = "ORBITAL   "
     590              : 
     591          996 :       nkind = SIZE(atomic_kind_set)
     592              : !   *** Print the kind radii ***
     593              :       output_unit = cp_print_key_unit_nr(logger, subsys_section, &
     594          996 :                                          "PRINT%RADII/KIND_RADII", extension=".Log")
     595          996 :       CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
     596          996 :       conv = cp_unit_from_cp2k(1.0_dp, TRIM(unit_str))
     597          996 :       IF (output_unit > 0) THEN
     598              :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T56,A,T63,A,T75,A)") &
     599            2 :             "RADII: "//TRIM(bas)//" BASIS in "//TRIM(unit_str), &
     600            4 :             "Kind", "Label", "Radius"
     601            8 :          DO ikind = 1, nkind
     602            6 :             CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
     603            6 :             CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
     604            8 :             IF (ASSOCIATED(orb_basis_set)) THEN
     605              :                CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
     606            6 :                                       kind_radius=kind_radius)
     607              :                WRITE (UNIT=output_unit, FMT="(T55,I5,T63,A5,T69,F12.6)") &
     608            6 :                   ikind, name, kind_radius*conv
     609              :             ELSE
     610              :                WRITE (UNIT=output_unit, FMT="(T55,I5,T63,A5,T72,A9)") &
     611            0 :                   ikind, name, "no basis"
     612              :             END IF
     613              :          END DO
     614              :       END IF
     615              :       CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
     616          996 :                                         "PRINT%RADII/KIND_RADII")
     617              : 
     618          996 :    END SUBROUTINE write_kind_radii
     619              : 
     620              : ! **************************************************************************************************
     621              : !> \brief  Write the radii of the core charge distributions to the output
     622              : !>         unit.
     623              : !> \param atomic_kind_set ...
     624              : !> \param qs_kind_set ...
     625              : !> \param subsys_section ...
     626              : !> \date    15.09.2000
     627              : !> \author  MK
     628              : !> \version 1.0
     629              : ! **************************************************************************************************
     630         9219 :    SUBROUTINE write_core_charge_radii(atomic_kind_set, qs_kind_set, subsys_section)
     631              :       TYPE(atomic_kind_type), DIMENSION(:), POINTER      :: atomic_kind_set
     632              :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     633              :       TYPE(section_vals_type), POINTER                   :: subsys_section
     634              : 
     635              :       CHARACTER(LEN=default_string_length)               :: name, unit_str
     636              :       INTEGER                                            :: ikind, nkind, output_unit
     637              :       REAL(KIND=dp)                                      :: conv, core_charge_radius
     638              :       TYPE(all_potential_type), POINTER                  :: all_potential
     639              :       TYPE(cp_logger_type), POINTER                      :: logger
     640              :       TYPE(gth_potential_type), POINTER                  :: gth_potential
     641              : 
     642         9219 :       NULLIFY (logger)
     643         9219 :       logger => cp_get_default_logger()
     644              :       output_unit = cp_print_key_unit_nr(logger, subsys_section, &
     645         9219 :                                          "PRINT%RADII/CORE_CHARGE_RADII", extension=".Log")
     646         9219 :       CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
     647         9219 :       conv = cp_unit_from_cp2k(1.0_dp, TRIM(unit_str))
     648         9219 :       IF (output_unit > 0) THEN
     649           47 :          nkind = SIZE(atomic_kind_set)
     650              :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T56,A,T63,A,T75,A)") &
     651              :             "RADII: CORE CHARGE DISTRIBUTIONS in "// &
     652           47 :             TRIM(unit_str), "Kind", "Label", "Radius"
     653          132 :          DO ikind = 1, nkind
     654           85 :             CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
     655              :             CALL get_qs_kind(qs_kind_set(ikind), &
     656           85 :                              all_potential=all_potential, gth_potential=gth_potential)
     657              : 
     658          132 :             IF (ASSOCIATED(all_potential)) THEN
     659              :                CALL get_potential(potential=all_potential, &
     660           55 :                                   core_charge_radius=core_charge_radius)
     661              :                WRITE (UNIT=output_unit, FMT="(T55,I5,T63,A5,T69,F12.6)") &
     662           55 :                   ikind, name, core_charge_radius*conv
     663           30 :             ELSE IF (ASSOCIATED(gth_potential)) THEN
     664              :                CALL get_potential(potential=gth_potential, &
     665           30 :                                   core_charge_radius=core_charge_radius)
     666              :                WRITE (UNIT=output_unit, FMT="(T55,I5,T63,A5,T69,F12.6)") &
     667           30 :                   ikind, name, core_charge_radius*conv
     668              :             END IF
     669              :          END DO
     670              :       END IF
     671              :       CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
     672         9219 :                                         "PRINT%RADII/CORE_CHARGE_RADII")
     673         9219 :    END SUBROUTINE write_core_charge_radii
     674              : 
     675              : ! **************************************************************************************************
     676              : !> \brief   Write the orbital basis function radii to the output unit.
     677              : !> \param basis ...
     678              : !> \param atomic_kind_set ...
     679              : !> \param qs_kind_set ...
     680              : !> \param subsys_section ...
     681              : !> \date    05.06.2000
     682              : !> \author  MK
     683              : !> \version 1.0
     684              : ! **************************************************************************************************
     685        36876 :    SUBROUTINE write_pgf_orb_radii(basis, atomic_kind_set, qs_kind_set, subsys_section)
     686              : 
     687              :       CHARACTER(len=*)                                   :: basis
     688              :       TYPE(atomic_kind_type), DIMENSION(:), POINTER      :: atomic_kind_set
     689              :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     690              :       TYPE(section_vals_type), POINTER                   :: subsys_section
     691              : 
     692              :       CHARACTER(LEN=10)                                  :: bas
     693              :       CHARACTER(LEN=default_string_length)               :: name, unit_str
     694              :       INTEGER                                            :: ikind, ipgf, iset, nkind, nset, &
     695              :                                                             output_unit
     696        36876 :       INTEGER, DIMENSION(:), POINTER                     :: npgf
     697              :       REAL(KIND=dp)                                      :: conv, kind_radius, short_kind_radius
     698        36876 :       REAL(KIND=dp), DIMENSION(:), POINTER               :: set_radius
     699        36876 :       REAL(KIND=dp), DIMENSION(:, :), POINTER            :: pgf_radius
     700              :       TYPE(cp_logger_type), POINTER                      :: logger
     701              :       TYPE(gto_basis_set_type), POINTER                  :: aux_basis_set, lri_basis_set, &
     702              :                                                             nuc_basis_set, orb_basis_set
     703              : 
     704        36876 :       NULLIFY (logger)
     705        73752 :       logger => cp_get_default_logger()
     706        36876 :       NULLIFY (aux_basis_set, orb_basis_set, lri_basis_set, nuc_basis_set)
     707        36876 :       bas = " "
     708        36876 :       bas(1:3) = basis(1:3)
     709        36876 :       CALL uppercase(bas)
     710        36876 :       IF (bas(1:3) == "ORB") THEN
     711         9219 :          bas = "ORBITAL   "
     712        27657 :       ELSE IF (bas(1:3) == "AUX") THEN
     713         9219 :          bas = "AUXILLIARY"
     714        18438 :       ELSE IF (bas(1:3) == "LRI") THEN
     715         9219 :          bas = "LOCAL RI"
     716         9219 :       ELSE IF (bas(1:3) == "NUC") THEN
     717         9219 :          bas = "NUCLEAR   "
     718              :       ELSE
     719            0 :          CPABORT("Undefined basis set type")
     720              :       END IF
     721              : 
     722        36876 :       nkind = SIZE(qs_kind_set)
     723              : 
     724              : !   *** Print the kind radii ***
     725              :       output_unit = cp_print_key_unit_nr(logger, subsys_section, &
     726        36876 :                                          "PRINT%RADII/KIND_RADII", extension=".Log")
     727        36876 :       CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
     728        36876 :       conv = cp_unit_from_cp2k(1.0_dp, TRIM(unit_str))
     729        36876 :       IF (output_unit > 0) THEN
     730              :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T46,A,T53,A,T63,A,T71,A)") &
     731          188 :             "RADII: "//TRIM(bas)//" BASIS in "//TRIM(unit_str), &
     732          376 :             "Kind", "Label", "Radius", "OCE Radius"
     733          528 :          DO ikind = 1, nkind
     734          340 :             CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
     735          340 :             IF (bas(1:3) == "ORB") THEN
     736           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
     737           85 :                IF (ASSOCIATED(orb_basis_set)) THEN
     738              :                   CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
     739              :                                          kind_radius=kind_radius, &
     740           66 :                                          short_kind_radius=short_kind_radius)
     741              :                END IF
     742          255 :             ELSE IF (bas(1:3) == "AUX") THEN
     743           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
     744           85 :                IF (ASSOCIATED(aux_basis_set)) THEN
     745              :                   CALL get_gto_basis_set(gto_basis_set=aux_basis_set, &
     746            0 :                                          kind_radius=kind_radius)
     747              :                END IF
     748          170 :             ELSE IF (bas(1:3) == "LOC") THEN
     749           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type="LRI_AUX")
     750           85 :                IF (ASSOCIATED(lri_basis_set)) THEN
     751              :                   CALL get_gto_basis_set(gto_basis_set=lri_basis_set, &
     752            2 :                                          kind_radius=kind_radius)
     753              :                END IF
     754           85 :             ELSE IF (bas(1:3) == "NUC") THEN
     755           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type="NUC")
     756           85 :                IF (ASSOCIATED(nuc_basis_set)) THEN
     757              :                   CALL get_gto_basis_set(gto_basis_set=nuc_basis_set, &
     758              :                                          kind_radius=kind_radius, &
     759            0 :                                          short_kind_radius=short_kind_radius)
     760              :                END IF
     761              :             ELSE
     762            0 :                CPABORT("Undefined basis set type")
     763              :             END IF
     764          340 :             IF (ASSOCIATED(aux_basis_set) .OR. ASSOCIATED(orb_basis_set) .OR. &
     765          188 :                 ASSOCIATED(nuc_basis_set)) THEN
     766              :                WRITE (UNIT=output_unit, FMT="(T45,I5,T53,A5,T57,F12.6,T69,F12.6)") &
     767           66 :                   ikind, name, kind_radius*conv, short_kind_radius*conv
     768              :             ELSE
     769              :                WRITE (UNIT=output_unit, FMT="(T55,I5,T63,A5,T72,A9)") &
     770          274 :                   ikind, name, "no basis"
     771              :             END IF
     772              :          END DO
     773              :       END IF
     774              :       CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
     775        36876 :                                         "PRINT%RADII/KIND_RADII")
     776              : 
     777              : !   *** Print the shell set radii ***
     778              :       output_unit = cp_print_key_unit_nr(logger, subsys_section, &
     779        36876 :                                          "PRINT%RADII/SET_RADII", extension=".Log")
     780        36876 :       IF (output_unit > 0) THEN
     781              :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T51,A,T57,A,T65,A,T75,A)") &
     782              :             "RADII: SHELL SETS OF "//TRIM(bas)//" BASIS in "// &
     783          188 :             TRIM(unit_str), "Kind", "Label", "Set", "Radius"
     784          528 :          DO ikind = 1, nkind
     785          340 :             CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
     786          340 :             IF (bas(1:3) == "ORB") THEN
     787           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
     788           85 :                IF (ASSOCIATED(orb_basis_set)) THEN
     789              :                   CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
     790              :                                          nset=nset, &
     791           66 :                                          set_radius=set_radius)
     792              :                END IF
     793          255 :             ELSE IF (bas(1:3) == "AUX") THEN
     794           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
     795           85 :                IF (ASSOCIATED(aux_basis_set)) THEN
     796              :                   CALL get_gto_basis_set(gto_basis_set=aux_basis_set, &
     797              :                                          nset=nset, &
     798            0 :                                          set_radius=set_radius)
     799              :                END IF
     800          170 :             ELSE IF (bas(1:3) == "LOC") THEN
     801           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type="LRI_AUX")
     802           85 :                IF (ASSOCIATED(lri_basis_set)) THEN
     803              :                   CALL get_gto_basis_set(gto_basis_set=lri_basis_set, &
     804              :                                          nset=nset, &
     805            2 :                                          set_radius=set_radius)
     806              :                END IF
     807           85 :             ELSE IF (bas(1:3) == "NUC") THEN
     808           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type="NUC")
     809           85 :                IF (ASSOCIATED(nuc_basis_set)) THEN
     810              :                   CALL get_gto_basis_set(gto_basis_set=nuc_basis_set, &
     811              :                                          nset=nset, &
     812            0 :                                          set_radius=set_radius)
     813              :                END IF
     814              :             ELSE
     815            0 :                CPABORT("Undefined basis set type")
     816              :             END IF
     817          340 :             IF (ASSOCIATED(aux_basis_set) .OR. ASSOCIATED(orb_basis_set) .OR. &
     818          188 :                 ASSOCIATED(nuc_basis_set)) THEN
     819              :                WRITE (UNIT=output_unit, FMT="(T50,I5,T57,A5,(T63,I5,T69,F12.6))") &
     820          243 :                   ikind, name, (iset, set_radius(iset)*conv, iset=1, nset)
     821              :             ELSE
     822              :                WRITE (UNIT=output_unit, FMT="(T50,I5,T58,A5,T73,A8)") &
     823          274 :                   ikind, name, "no basis"
     824              :             END IF
     825              :          END DO
     826              :       END IF
     827              :       CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
     828        36876 :                                         "PRINT%RADII/SET_RADII")
     829              : !   *** Print the primitive Gaussian function radii ***
     830              :       output_unit = cp_print_key_unit_nr(logger, subsys_section, &
     831        36876 :                                          "PRINT%RADII/PGF_RADII", extension=".Log")
     832        36876 :       IF (output_unit > 0) THEN
     833              :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T51,A,T57,A,T65,A,T75,A)") &
     834              :             "RADII: PRIMITIVE GAUSSIANS OF "//TRIM(bas)//" BASIS in "// &
     835          188 :             TRIM(unit_str), "Kind", "Label", "Set", "Radius"
     836          528 :          DO ikind = 1, nkind
     837          340 :             CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
     838          340 :             IF (bas(1:3) == "ORB") THEN
     839           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set)
     840           85 :                IF (ASSOCIATED(orb_basis_set)) THEN
     841              :                   CALL get_gto_basis_set(gto_basis_set=orb_basis_set, &
     842              :                                          nset=nset, &
     843              :                                          npgf=npgf, &
     844           66 :                                          pgf_radius=pgf_radius)
     845              :                END IF
     846          255 :             ELSE IF (bas(1:3) == "AUX") THEN
     847           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=aux_basis_set, basis_type="AUX")
     848           85 :                IF (ASSOCIATED(aux_basis_set)) THEN
     849              :                   CALL get_gto_basis_set(gto_basis_set=aux_basis_set, &
     850              :                                          nset=nset, &
     851              :                                          npgf=npgf, &
     852            0 :                                          pgf_radius=pgf_radius)
     853              :                END IF
     854          170 :             ELSE IF (bas(1:3) == "LOC") THEN
     855           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=lri_basis_set, basis_type="LRI_AUX")
     856           85 :                IF (ASSOCIATED(lri_basis_set)) THEN
     857              :                   CALL get_gto_basis_set(gto_basis_set=lri_basis_set, &
     858              :                                          nset=nset, &
     859              :                                          npgf=npgf, &
     860            2 :                                          pgf_radius=pgf_radius)
     861              :                END IF
     862           85 :             ELSE IF (bas(1:3) == "NUC") THEN
     863           85 :                CALL get_qs_kind(qs_kind_set(ikind), basis_set=nuc_basis_set, basis_type="NUC")
     864           85 :                IF (ASSOCIATED(nuc_basis_set)) THEN
     865              :                   CALL get_gto_basis_set(gto_basis_set=nuc_basis_set, &
     866              :                                          nset=nset, &
     867              :                                          npgf=npgf, &
     868            0 :                                          pgf_radius=pgf_radius)
     869              :                END IF
     870              :             ELSE
     871            0 :                CPABORT("Undefined basis type")
     872              :             END IF
     873              :             IF (ASSOCIATED(aux_basis_set) .OR. ASSOCIATED(orb_basis_set) .OR. &
     874          528 :                 ASSOCIATED(lri_basis_set) .OR. ASSOCIATED(nuc_basis_set)) THEN
     875          270 :                DO iset = 1, nset
     876              :                   WRITE (UNIT=output_unit, FMT="(T50,I5,T57,A5,T63,I5,(T69,F12.6))") &
     877          202 :                      ikind, name, iset, &
     878         1083 :                      (pgf_radius(ipgf, iset)*conv, ipgf=1, npgf(iset))
     879              :                END DO
     880              :             ELSE
     881              :                WRITE (UNIT=output_unit, FMT="(T50,I5,T58,A5,T73,A8)") &
     882          272 :                   ikind, name, "no basis"
     883              :             END IF
     884              :          END DO
     885              :       END IF
     886              :       CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
     887        36876 :                                         "PRINT%RADII/PGF_RADII")
     888        36876 :    END SUBROUTINE write_pgf_orb_radii
     889              : 
     890              : ! **************************************************************************************************
     891              : !> \brief   Write the radii of the exponential functions of the Goedecker
     892              : !>           pseudopotential (GTH, local part) to the logical unit number
     893              : !>          "output_unit".
     894              : !> \param atomic_kind_set ...
     895              : !> \param qs_kind_set ...
     896              : !> \param subsys_section ...
     897              : !> \date    06.10.2000
     898              : !> \author  MK
     899              : !> \version 1.0
     900              : ! **************************************************************************************************
     901         9219 :    SUBROUTINE write_ppl_radii(atomic_kind_set, qs_kind_set, subsys_section)
     902              : 
     903              :       TYPE(atomic_kind_type), DIMENSION(:), POINTER      :: atomic_kind_set
     904              :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     905              :       TYPE(section_vals_type), POINTER                   :: subsys_section
     906              : 
     907              :       CHARACTER(LEN=default_string_length)               :: name, unit_str
     908              :       INTEGER                                            :: ikind, nkind, output_unit
     909              :       REAL(KIND=dp)                                      :: conv, ppl_radius
     910              :       TYPE(cp_logger_type), POINTER                      :: logger
     911              :       TYPE(gth_potential_type), POINTER                  :: gth_potential
     912              : 
     913         9219 :       NULLIFY (logger)
     914         9219 :       logger => cp_get_default_logger()
     915              :       output_unit = cp_print_key_unit_nr(logger, subsys_section, &
     916         9219 :                                          "PRINT%RADII/PPL_RADII", extension=".Log")
     917         9219 :       CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
     918         9219 :       conv = cp_unit_from_cp2k(1.0_dp, TRIM(unit_str))
     919         9219 :       IF (output_unit > 0) THEN
     920           47 :          nkind = SIZE(atomic_kind_set)
     921              :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T56,A,T63,A,T75,A)") &
     922              :             "RADII: LOCAL PART OF GTH/ELP PP in "// &
     923           47 :             TRIM(unit_str), "Kind", "Label", "Radius"
     924          132 :          DO ikind = 1, nkind
     925           85 :             CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
     926           85 :             CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential)
     927          132 :             IF (ASSOCIATED(gth_potential)) THEN
     928              :                CALL get_potential(potential=gth_potential, &
     929           30 :                                   ppl_radius=ppl_radius)
     930              :                WRITE (UNIT=output_unit, FMT="(T55,I5,T63,A5,T69,F12.6)") &
     931           30 :                   ikind, name, ppl_radius*conv
     932              :             END IF
     933              :          END DO
     934              :       END IF
     935              :       CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
     936         9219 :                                         "PRINT%RADII/PPL_RADII")
     937         9219 :    END SUBROUTINE write_ppl_radii
     938              : 
     939              : ! **************************************************************************************************
     940              : !> \brief  Write the radii of the projector functions of the Goedecker
     941              : !>          pseudopotential (GTH, non-local part) to the logical unit number
     942              : !>          "output_unit".
     943              : !> \param atomic_kind_set ...
     944              : !> \param qs_kind_set ...
     945              : !> \param subsys_section ...
     946              : !> \date    06.10.2000
     947              : !> \author  MK
     948              : !> \version 1.0
     949              : ! **************************************************************************************************
     950         9219 :    SUBROUTINE write_ppnl_radii(atomic_kind_set, qs_kind_set, subsys_section)
     951              : 
     952              :       TYPE(atomic_kind_type), DIMENSION(:), POINTER      :: atomic_kind_set
     953              :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     954              :       TYPE(section_vals_type), POINTER                   :: subsys_section
     955              : 
     956              :       CHARACTER(LEN=default_string_length)               :: name, unit_str
     957              :       INTEGER                                            :: ikind, nkind, output_unit
     958              :       REAL(KIND=dp)                                      :: conv, ppnl_radius
     959              :       TYPE(cp_logger_type), POINTER                      :: logger
     960              :       TYPE(gth_potential_type), POINTER                  :: gth_potential
     961              : 
     962         9219 :       NULLIFY (logger)
     963         9219 :       logger => cp_get_default_logger()
     964              :       output_unit = cp_print_key_unit_nr(logger, subsys_section, &
     965         9219 :                                          "PRINT%RADII/PPNL_RADII", extension=".Log")
     966         9219 :       CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
     967         9219 :       conv = cp_unit_from_cp2k(1.0_dp, TRIM(unit_str))
     968         9219 :       IF (output_unit > 0) THEN
     969           47 :          nkind = SIZE(atomic_kind_set)
     970              :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T56,A,T63,A,T75,A)") &
     971              :             "RADII: NON-LOCAL PART OF GTH PP in "// &
     972           47 :             TRIM(unit_str), "Kind", "Label", "Radius"
     973          132 :          DO ikind = 1, nkind
     974           85 :             CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
     975           85 :             CALL get_qs_kind(qs_kind_set(ikind), gth_potential=gth_potential)
     976          132 :             IF (ASSOCIATED(gth_potential)) THEN
     977              :                CALL get_potential(potential=gth_potential, &
     978           30 :                                   ppnl_radius=ppnl_radius)
     979              :                WRITE (UNIT=output_unit, FMT="(T55,I5,T63,A5,T69,F12.6)") &
     980           30 :                   ikind, name, ppnl_radius*conv
     981              :             END IF
     982              :          END DO
     983              :       END IF
     984              :       CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
     985         9219 :                                         "PRINT%RADII/PPNL_RADII")
     986         9219 :    END SUBROUTINE write_ppnl_radii
     987              : 
     988              : ! **************************************************************************************************
     989              : !> \brief   Write the radii of the one center projector
     990              : !> \param atomic_kind_set ...
     991              : !> \param qs_kind_set ...
     992              : !> \param subsys_section ...
     993              : !> \version 1.0
     994              : ! **************************************************************************************************
     995         9219 :    SUBROUTINE write_paw_radii(atomic_kind_set, qs_kind_set, subsys_section)
     996              :       TYPE(atomic_kind_type), DIMENSION(:), POINTER      :: atomic_kind_set
     997              :       TYPE(qs_kind_type), DIMENSION(:), POINTER          :: qs_kind_set
     998              :       TYPE(section_vals_type), POINTER                   :: subsys_section
     999              : 
    1000              :       CHARACTER(LEN=default_string_length)               :: name, unit_str
    1001              :       INTEGER                                            :: ikind, nkind, output_unit
    1002              :       LOGICAL                                            :: paw_atom
    1003              :       REAL(KIND=dp)                                      :: conv, rcprj
    1004              :       TYPE(cp_logger_type), POINTER                      :: logger
    1005              :       TYPE(paw_proj_set_type), POINTER                   :: paw_proj_set
    1006              : 
    1007         9219 :       NULLIFY (logger)
    1008         9219 :       logger => cp_get_default_logger()
    1009              :       output_unit = cp_print_key_unit_nr(logger, subsys_section, &
    1010         9219 :                                          "PRINT%RADII/GAPW_PRJ_RADII", extension=".Log")
    1011         9219 :       CALL section_vals_val_get(subsys_section, "PRINT%RADII%UNIT", c_val=unit_str)
    1012         9219 :       conv = cp_unit_from_cp2k(1.0_dp, TRIM(unit_str))
    1013         9219 :       IF (output_unit > 0) THEN
    1014           47 :          nkind = SIZE(qs_kind_set)
    1015              :          WRITE (UNIT=output_unit, FMT="(/,T2,A,T56,A,T63,A,T75,A)") &
    1016              :             "RADII: ONE CENTER PROJECTORS in "// &
    1017           47 :             TRIM(unit_str), "Kind", "Label", "Radius"
    1018          132 :          DO ikind = 1, nkind
    1019           85 :             CALL get_atomic_kind(atomic_kind_set(ikind), name=name)
    1020              :             CALL get_qs_kind(qs_kind_set(ikind), &
    1021           85 :                              paw_atom=paw_atom, paw_proj_set=paw_proj_set)
    1022          132 :             IF (paw_atom .AND. ASSOCIATED(paw_proj_set)) THEN
    1023              :                CALL get_paw_proj_set(paw_proj_set=paw_proj_set, &
    1024            0 :                                      rcprj=rcprj)
    1025              :                WRITE (UNIT=output_unit, FMT="(T55,I5,T63,A5,T69,F12.6)") &
    1026            0 :                   ikind, name, rcprj*conv
    1027              :             END IF
    1028              :          END DO
    1029              :       END IF
    1030              :       CALL cp_print_key_finished_output(output_unit, logger, subsys_section, &
    1031         9219 :                                         "PRINT%RADII/GAPW_PRJ_RADII")
    1032         9219 :    END SUBROUTINE write_paw_radii
    1033              : 
    1034              : END MODULE qs_interactions
        

Generated by: LCOV version 2.0-1