LCOV - code coverage report
Current view: top level - src - qs_interactions.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:936074a) Lines: 94.5 % 382 361
Test Date: 2025-12-04 06:27:48 Functions: 100.0 % 9 9

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

Generated by: LCOV version 2.0-1