LCOV - code coverage report
Current view: top level - src - xtb_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:71c3ab0) Lines: 76.4 % 161 123
Test Date: 2026-07-25 06:35:44 Functions: 83.3 % 6 5

            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 Definition of the xTB parameter types.
      10              : !> \author JGH (10.2018)
      11              : ! **************************************************************************************************
      12              : ! To be done:
      13              : ! 1) Ewald defaults options for GMAX, ALPHA, RCUT
      14              : ! 2) QM/MM debugging of forces -- done
      15              : ! 3) Periodic displacement field (debugging)
      16              : ! 4) Check for RTP and EMD
      17              : ! 5) Wannier localization
      18              : ! 6) Charge Mixing methods: Broyden/Pulay (more debugging needed, also add to DFTB)
      19              : ! **************************************************************************************************
      20              : MODULE xtb_types
      21              : 
      22              :    USE cp_log_handling,                 ONLY: cp_get_default_logger,&
      23              :                                               cp_logger_type
      24              :    USE cp_output_handling,              ONLY: cp_p_file,&
      25              :                                               cp_print_key_finished_output,&
      26              :                                               cp_print_key_should_output,&
      27              :                                               cp_print_key_unit_nr
      28              :    USE input_section_types,             ONLY: section_vals_type
      29              :    USE kinds,                           ONLY: default_string_length,&
      30              :                                               dp
      31              : #include "./base/base_uses.f90"
      32              : 
      33              :    IMPLICIT NONE
      34              : 
      35              :    PRIVATE
      36              : 
      37              : ! *** Global parameters ***
      38              : 
      39              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'xtb_types'
      40              : 
      41              : ! **************************************************************************************************
      42              :    TYPE xtb_atom_type
      43              :       ! PRIVATE
      44              :       CHARACTER(LEN=default_string_length)   :: typ = ""
      45              :       CHARACTER(LEN=default_string_length)   :: aname = ""
      46              :       CHARACTER(LEN=2)                       :: symbol = ""
      47              :       LOGICAL                                :: defined = .FALSE.
      48              :       INTEGER                                :: z = -1 !atomic number
      49              :       REAL(KIND=dp)                          :: zeff = -1.0_dp !effective core charge
      50              :       INTEGER                                :: natorb = -1 !number of orbitals
      51              :       INTEGER                                :: lmax = -1 !max angular momentum
      52              :       !
      53              :       REAL(KIND=dp)                          :: rcut = -1.0_dp !cutoff radius for sr-Coulomb
      54              :       REAL(KIND=dp)                          :: rcov = -1.0_dp !covalent radius
      55              :       REAL(KIND=dp)                          :: electronegativity = -1.0_dp !electronegativity
      56              :       !
      57              :       REAL(KIND=dp)                          :: kx = -1.0_dp !scaling for halogen term
      58              :       !
      59              :       REAL(KIND=dp)                          :: eta = -1.0_dp !Atomic Hubbard parameter
      60              :       REAL(KIND=dp)                          :: xgamma = -1.0_dp !charge derivative of eta
      61              :       REAL(KIND=dp)                          :: alpha = -1.0_dp !exponential scaling parameter for repulsion potential
      62              :       REAL(KIND=dp)                          :: zneff = -1.0_dp !effective core charge for repulsion potential
      63              :       ! shell specific parameters
      64              :       INTEGER                                :: nshell = -1 !number of orbital shells
      65              :       INTEGER, DIMENSION(5)                  :: nval = -1 ! n-quantum number of shell i
      66              :       INTEGER, DIMENSION(5)                  :: lval = -1 ! l-quantum number of shell i
      67              :       INTEGER, DIMENSION(5)                  :: occupation = -1 ! occupation of shell i
      68              :       REAL(KIND=dp), DIMENSION(5)            :: kpoly = -1.0_dp
      69              :       REAL(KIND=dp), DIMENSION(5)            :: kappa = -1.0_dp
      70              :       REAL(KIND=dp), DIMENSION(5)            :: hen = -1.0_dp
      71              :       REAL(KIND=dp), DIMENSION(5)            :: zeta = -1.0_dp
      72              :       REAL(KIND=dp), DIMENSION(3, 3)         :: wall = -1.0_dp ! spin polarisation
      73              :       ! gfn0 params
      74              :       REAL(KIND=dp)                          :: en = -1.0_dp
      75              :       REAL(KIND=dp)                          :: kqat2 = -1.0_dp
      76              :       REAL(KIND=dp), DIMENSION(5)            :: kq = -1.0_dp
      77              :       REAL(KIND=dp), DIMENSION(5)            :: kcn = -1.0_dp
      78              :       ! charge equilibration parameter gfn0
      79              :       REAL(KIND=dp)                          :: xi = -1.0_dp
      80              :       REAL(KIND=dp)                          :: kappa0 = -1.0_dp
      81              :       REAL(KIND=dp)                          :: alpg = -1.0_dp
      82              :       ! AO to shell pointer
      83              :       INTEGER, DIMENSION(25)                 :: nao = -1, lao = -1
      84              :       ! Upper limit of Mulliken charge
      85              :       REAL(KIND=dp)                          :: chmax = -1.0_dp
      86              :    END TYPE xtb_atom_type
      87              : 
      88              : ! *** Public data types ***
      89              : 
      90              :    PUBLIC :: xtb_atom_type, get_xtb_atom_param, set_xtb_atom_param, write_xtb_atom_param
      91              :    PUBLIC :: allocate_xtb_atom_param, deallocate_xtb_atom_param
      92              : 
      93              : CONTAINS
      94              : 
      95              : ! **************************************************************************************************
      96              : !> \brief ...
      97              : !> \param xtb_parameter ...
      98              : ! **************************************************************************************************
      99         2562 :    SUBROUTINE allocate_xtb_atom_param(xtb_parameter)
     100              : 
     101              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     102              : 
     103         2562 :       IF (ASSOCIATED(xtb_parameter)) THEN
     104            0 :          CALL deallocate_xtb_atom_param(xtb_parameter)
     105              :       END IF
     106              : 
     107       304878 :       ALLOCATE (xtb_parameter)
     108              : 
     109         2562 :       xtb_parameter%defined = .FALSE.
     110         2562 :       xtb_parameter%aname = ""
     111         2562 :       xtb_parameter%symbol = ""
     112         2562 :       xtb_parameter%typ = "NONE"
     113         2562 :       xtb_parameter%z = -1
     114         2562 :       xtb_parameter%zeff = -1.0_dp
     115         2562 :       xtb_parameter%natorb = 0
     116         2562 :       xtb_parameter%lmax = -1
     117         2562 :       xtb_parameter%rcut = 0.0_dp
     118         2562 :       xtb_parameter%rcov = 0.0_dp
     119         2562 :       xtb_parameter%electronegativity = 0.0_dp
     120         2562 :       xtb_parameter%kx = -100.0_dp
     121         2562 :       xtb_parameter%eta = 0.0_dp
     122         2562 :       xtb_parameter%xgamma = 0.0_dp
     123         2562 :       xtb_parameter%alpha = 0.0_dp
     124         2562 :       xtb_parameter%zneff = 0.0_dp
     125         2562 :       xtb_parameter%nshell = 0
     126        15372 :       xtb_parameter%nval = 0
     127        15372 :       xtb_parameter%lval = 0
     128        15372 :       xtb_parameter%occupation = 0
     129        15372 :       xtb_parameter%kpoly = 0.0_dp
     130        15372 :       xtb_parameter%kappa = 0.0_dp
     131        33306 :       xtb_parameter%wall = 0.0_dp
     132        15372 :       xtb_parameter%hen = 0.0_dp
     133        15372 :       xtb_parameter%zeta = 0.0_dp
     134         2562 :       xtb_parameter%en = 0.0_dp
     135         2562 :       xtb_parameter%kqat2 = 0.0_dp
     136        15372 :       xtb_parameter%kq = 0.0_dp
     137        15372 :       xtb_parameter%kcn = 0.0_dp
     138         2562 :       xtb_parameter%xi = 0.0_dp
     139         2562 :       xtb_parameter%kappa0 = 0.0_dp
     140         2562 :       xtb_parameter%alpg = 0.0_dp
     141        66612 :       xtb_parameter%nao = 0
     142        66612 :       xtb_parameter%lao = 0
     143         2562 :       xtb_parameter%chmax = 0.0_dp
     144              : 
     145         2562 :    END SUBROUTINE allocate_xtb_atom_param
     146              : 
     147              : ! **************************************************************************************************
     148              : !> \brief ...
     149              : !> \param xtb_parameter ...
     150              : ! **************************************************************************************************
     151         2562 :    SUBROUTINE deallocate_xtb_atom_param(xtb_parameter)
     152              : 
     153              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     154              : 
     155         2562 :       CPASSERT(ASSOCIATED(xtb_parameter))
     156         2562 :       DEALLOCATE (xtb_parameter)
     157              : 
     158         2562 :    END SUBROUTINE deallocate_xtb_atom_param
     159              : 
     160              : ! **************************************************************************************************
     161              : !> \brief ...
     162              : !> \param xtb_parameter ...
     163              : !> \param symbol ...
     164              : !> \param aname ...
     165              : !> \param typ ...
     166              : !> \param defined ...
     167              : !> \param z ...
     168              : !> \param zeff ...
     169              : !> \param natorb ...
     170              : !> \param lmax ...
     171              : !> \param nao ...
     172              : !> \param lao ...
     173              : !> \param rcut ...
     174              : !> \param rcov ...
     175              : !> \param kx ...
     176              : !> \param eta ...
     177              : !> \param xgamma ...
     178              : !> \param alpha ...
     179              : !> \param zneff ...
     180              : !> \param nshell ...
     181              : !> \param nval ...
     182              : !> \param lval ...
     183              : !> \param kpoly ...
     184              : !> \param kappa ...
     185              : !> \param wall ...
     186              : !> \param hen ...
     187              : !> \param zeta ...
     188              : !> \param xi ...
     189              : !> \param kappa0 ...
     190              : !> \param alpg ...
     191              : !> \param occupation ...
     192              : !> \param electronegativity ...
     193              : !> \param chmax ...
     194              : !> \param en ...
     195              : !> \param kqat2 ...
     196              : !> \param kcn ...
     197              : !> \param kq ...
     198              : ! **************************************************************************************************
     199     58151244 :    SUBROUTINE get_xtb_atom_param(xtb_parameter, symbol, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, &
     200              :                                  rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, &
     201              :                                  wall, hen, zeta, xi, kappa0, alpg, occupation, electronegativity, chmax, &
     202              :                                  en, kqat2, kcn, kq)
     203              : 
     204              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     205              :       CHARACTER(LEN=2), INTENT(OUT), OPTIONAL            :: symbol
     206              :       CHARACTER(LEN=default_string_length), &
     207              :          INTENT(OUT), OPTIONAL                           :: aname, typ
     208              :       LOGICAL, INTENT(OUT), OPTIONAL                     :: defined
     209              :       INTEGER, INTENT(OUT), OPTIONAL                     :: z
     210              :       REAL(KIND=dp), INTENT(OUT), OPTIONAL               :: zeff
     211              :       INTEGER, INTENT(OUT), OPTIONAL                     :: natorb, lmax
     212              :       INTEGER, DIMENSION(25), INTENT(OUT), OPTIONAL      :: nao, lao
     213              :       REAL(KIND=dp), INTENT(OUT), OPTIONAL               :: rcut, rcov, kx, eta, xgamma, alpha, zneff
     214              :       INTEGER, INTENT(OUT), OPTIONAL                     :: nshell
     215              :       INTEGER, DIMENSION(5), INTENT(OUT), OPTIONAL       :: nval, lval
     216              :       REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: kpoly, kappa
     217              :       REAL(KIND=dp), DIMENSION(3, 3), INTENT(OUT), &
     218              :          OPTIONAL                                        :: wall
     219              :       REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: hen, zeta
     220              :       REAL(KIND=dp), INTENT(OUT), OPTIONAL               :: xi, kappa0, alpg
     221              :       INTEGER, DIMENSION(5), INTENT(OUT), OPTIONAL       :: occupation
     222              :       REAL(KIND=dp), INTENT(OUT), OPTIONAL               :: electronegativity, chmax, en, kqat2
     223              :       REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: kcn, kq
     224              : 
     225     58151244 :       CPASSERT(ASSOCIATED(xtb_parameter))
     226              : 
     227     58151244 :       IF (PRESENT(symbol)) symbol = xtb_parameter%symbol
     228     58151244 :       IF (PRESENT(aname)) aname = xtb_parameter%aname
     229     58151244 :       IF (PRESENT(typ)) typ = xtb_parameter%typ
     230     58151244 :       IF (PRESENT(defined)) defined = xtb_parameter%defined
     231     58151244 :       IF (PRESENT(z)) z = xtb_parameter%z
     232     58151244 :       IF (PRESENT(zeff)) zeff = xtb_parameter%zeff
     233     58151244 :       IF (PRESENT(natorb)) natorb = xtb_parameter%natorb
     234     58151244 :       IF (PRESENT(lmax)) lmax = xtb_parameter%lmax
     235    263201344 :       IF (PRESENT(nao)) nao = xtb_parameter%nao
     236    330922344 :       IF (PRESENT(lao)) lao = xtb_parameter%lao
     237              :       !
     238     58151244 :       IF (PRESENT(rcut)) rcut = xtb_parameter%rcut
     239     58151244 :       IF (PRESENT(rcov)) rcov = xtb_parameter%rcov
     240     58151244 :       IF (PRESENT(kx)) kx = xtb_parameter%kx
     241     58151244 :       IF (PRESENT(electronegativity)) electronegativity = xtb_parameter%electronegativity
     242     58151244 :       IF (PRESENT(eta)) eta = xtb_parameter%eta
     243     58151244 :       IF (PRESENT(xgamma)) xgamma = xtb_parameter%xgamma
     244     58151244 :       IF (PRESENT(alpha)) alpha = xtb_parameter%alpha
     245     58151244 :       IF (PRESENT(zneff)) zneff = xtb_parameter%zneff
     246     58151244 :       IF (PRESENT(nshell)) nshell = xtb_parameter%nshell
     247     58151244 :       IF (PRESENT(nval)) nval = xtb_parameter%nval
     248     58366394 :       IF (PRESENT(lval)) lval = xtb_parameter%lval
     249     58985794 :       IF (PRESENT(occupation)) occupation = xtb_parameter%occupation
     250     74758674 :       IF (PRESENT(kpoly)) kpoly = xtb_parameter%kpoly
     251    152026494 :       IF (PRESENT(kappa)) kappa = xtb_parameter%kappa
     252     58211964 :       IF (PRESENT(wall)) wall(1:3, 1:3) = xtb_parameter%wall(1:3, 1:3)
     253     63282054 :       IF (PRESENT(hen)) hen = xtb_parameter%hen
     254     58237324 :       IF (PRESENT(zeta)) zeta = xtb_parameter%zeta
     255     58151244 :       IF (PRESENT(chmax)) chmax = xtb_parameter%chmax
     256     58151244 :       IF (PRESENT(xi)) xi = xtb_parameter%xi
     257     58151244 :       IF (PRESENT(kappa0)) kappa0 = xtb_parameter%kappa0
     258     58151244 :       IF (PRESENT(alpg)) alpg = xtb_parameter%alpg
     259     58151244 :       IF (PRESENT(en)) en = xtb_parameter%en
     260     58151244 :       IF (PRESENT(kqat2)) kqat2 = xtb_parameter%kqat2
     261     58200964 :       IF (PRESENT(kcn)) kcn = xtb_parameter%kcn
     262     58200964 :       IF (PRESENT(kq)) kq = xtb_parameter%kq
     263              : 
     264     58151244 :    END SUBROUTINE get_xtb_atom_param
     265              : 
     266              : ! **************************************************************************************************
     267              : !> \brief ...
     268              : !> \param xtb_parameter ...
     269              : !> \param aname ...
     270              : !> \param typ ...
     271              : !> \param defined ...
     272              : !> \param z ...
     273              : !> \param zeff ...
     274              : !> \param natorb ...
     275              : !> \param lmax ...
     276              : !> \param nao ...
     277              : !> \param lao ...
     278              : !> \param rcut ...
     279              : !> \param rcov ...
     280              : !> \param kx ...
     281              : !> \param eta ...
     282              : !> \param xgamma ...
     283              : !> \param alpha ...
     284              : !> \param zneff ...
     285              : !> \param nshell ...
     286              : !> \param nval ...
     287              : !> \param lval ...
     288              : !> \param kpoly ...
     289              : !> \param kappa ...
     290              : !> \param wall ...
     291              : !> \param hen ...
     292              : !> \param zeta ...
     293              : !> \param xi ...
     294              : !> \param kappa0 ...
     295              : !> \param alpg ...
     296              : !> \param electronegativity ...
     297              : !> \param occupation ...
     298              : !> \param chmax ...
     299              : !> \param en ...
     300              : !> \param kqat2 ...
     301              : !> \param kcn ...
     302              : !> \param kq ...
     303              : ! **************************************************************************************************
     304          306 :    SUBROUTINE set_xtb_atom_param(xtb_parameter, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, &
     305              :                                  rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, &
     306              :                                  wall, hen, zeta, xi, kappa0, alpg, electronegativity, occupation, chmax, &
     307              :                                  en, kqat2, kcn, kq)
     308              : 
     309              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     310              :       CHARACTER(LEN=default_string_length), INTENT(IN), &
     311              :          OPTIONAL                                        :: aname, typ
     312              :       LOGICAL, INTENT(IN), OPTIONAL                      :: defined
     313              :       INTEGER, INTENT(IN), OPTIONAL                      :: z
     314              :       REAL(KIND=dp), INTENT(IN), OPTIONAL                :: zeff
     315              :       INTEGER, INTENT(IN), OPTIONAL                      :: natorb, lmax
     316              :       INTEGER, DIMENSION(25), INTENT(IN), OPTIONAL       :: nao, lao
     317              :       REAL(KIND=dp), INTENT(IN), OPTIONAL                :: rcut, rcov, kx, eta, xgamma, alpha, zneff
     318              :       INTEGER, INTENT(IN), OPTIONAL                      :: nshell
     319              :       INTEGER, DIMENSION(5), INTENT(IN), OPTIONAL        :: nval, lval
     320              :       REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL  :: kpoly, kappa
     321              :       REAL(KIND=dp), DIMENSION(3, 3), INTENT(IN), &
     322              :          OPTIONAL                                        :: wall
     323              :       REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL  :: hen, zeta
     324              :       REAL(KIND=dp), INTENT(IN), OPTIONAL                :: xi, kappa0, alpg, electronegativity
     325              :       INTEGER, DIMENSION(5), INTENT(IN), OPTIONAL        :: occupation
     326              :       REAL(KIND=dp), INTENT(IN), OPTIONAL                :: chmax, en, kqat2
     327              :       REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL  :: kcn, kq
     328              : 
     329          306 :       CPASSERT(ASSOCIATED(xtb_parameter))
     330              : 
     331          306 :       IF (PRESENT(aname)) xtb_parameter%aname = aname
     332          306 :       IF (PRESENT(typ)) xtb_parameter%typ = typ
     333          306 :       IF (PRESENT(defined)) xtb_parameter%defined = defined
     334          306 :       IF (PRESENT(z)) xtb_parameter%z = z
     335          306 :       IF (PRESENT(zeff)) xtb_parameter%zeff = zeff
     336          306 :       IF (PRESENT(natorb)) xtb_parameter%natorb = natorb
     337          306 :       IF (PRESENT(lmax)) xtb_parameter%lmax = lmax
     338          306 :       IF (PRESENT(nao)) xtb_parameter%nao = nao
     339          306 :       IF (PRESENT(lao)) xtb_parameter%lao = lao
     340              :       !
     341          306 :       IF (PRESENT(rcut)) xtb_parameter%rcut = rcut
     342          306 :       IF (PRESENT(rcov)) xtb_parameter%rcov = rcov
     343          306 :       IF (PRESENT(kx)) xtb_parameter%kx = kx
     344          306 :       IF (PRESENT(electronegativity)) xtb_parameter%electronegativity = electronegativity
     345          306 :       IF (PRESENT(eta)) xtb_parameter%eta = eta
     346          306 :       IF (PRESENT(xgamma)) xtb_parameter%xgamma = xgamma
     347          306 :       IF (PRESENT(alpha)) xtb_parameter%alpha = alpha
     348          306 :       IF (PRESENT(zneff)) xtb_parameter%zneff = zneff
     349          306 :       IF (PRESENT(nshell)) xtb_parameter%nshell = nshell
     350          306 :       IF (PRESENT(nval)) xtb_parameter%nval = nval
     351          306 :       IF (PRESENT(lval)) xtb_parameter%lval = lval
     352         1836 :       IF (PRESENT(occupation)) xtb_parameter%occupation = occupation
     353          306 :       IF (PRESENT(kpoly)) xtb_parameter%kpoly = kpoly
     354          306 :       IF (PRESENT(kappa)) xtb_parameter%kappa = kappa
     355          306 :       IF (PRESENT(wall)) xtb_parameter%wall(1:3, 1:3) = wall(1:3, 1:3)
     356          306 :       IF (PRESENT(hen)) xtb_parameter%hen = hen
     357          306 :       IF (PRESENT(zeta)) xtb_parameter%zeta = zeta
     358          306 :       IF (PRESENT(chmax)) xtb_parameter%chmax = chmax
     359              :       !
     360          306 :       IF (PRESENT(xi)) xtb_parameter%xi = xi
     361          306 :       IF (PRESENT(kappa0)) xtb_parameter%kappa0 = kappa0
     362          306 :       IF (PRESENT(alpg)) xtb_parameter%alpg = alpg
     363          306 :       IF (PRESENT(en)) xtb_parameter%en = en
     364          306 :       IF (PRESENT(kqat2)) xtb_parameter%kqat2 = kqat2
     365          306 :       IF (PRESENT(kcn)) xtb_parameter%kcn = kcn
     366          306 :       IF (PRESENT(kq)) xtb_parameter%kq = kq
     367              : 
     368          306 :    END SUBROUTINE set_xtb_atom_param
     369              : 
     370              : ! **************************************************************************************************
     371              : !> \brief ...
     372              : !> \param xtb_parameter ...
     373              : !> \param gfn_type ...
     374              : !> \param subsys_section ...
     375              : ! **************************************************************************************************
     376         2256 :    SUBROUTINE write_xtb_atom_param(xtb_parameter, gfn_type, subsys_section)
     377              : 
     378              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     379              :       INTEGER, INTENT(IN)                                :: gfn_type
     380              :       TYPE(section_vals_type), POINTER                   :: subsys_section
     381              : 
     382              :       CHARACTER(LEN=default_string_length)               :: aname, bb
     383              :       INTEGER                                            :: i, io_unit, m, natorb, nshell
     384              :       INTEGER, DIMENSION(5)                              :: lval, nval, occupation
     385              :       LOGICAL                                            :: defined, have_sp
     386              :       REAL(dp)                                           :: zeff
     387              :       REAL(KIND=dp)                                      :: alpha, en, eta, xgamma, zneff
     388              :       REAL(KIND=dp), DIMENSION(3, 3)                     :: wall
     389              :       REAL(KIND=dp), DIMENSION(5)                        :: hen, kappa, kpoly, zeta
     390              :       TYPE(cp_logger_type), POINTER                      :: logger
     391              : 
     392         2256 :       NULLIFY (logger)
     393         2256 :       logger => cp_get_default_logger()
     394         2256 :       IF (ASSOCIATED(xtb_parameter) .AND. &
     395              :           BTEST(cp_print_key_should_output(logger%iter_info, subsys_section, &
     396              :                                            "PRINT%KINDS/POTENTIAL"), cp_p_file)) THEN
     397              : 
     398              :          io_unit = cp_print_key_unit_nr(logger, subsys_section, "PRINT%KINDS", &
     399            0 :                                         extension=".Log")
     400              : 
     401            0 :          IF (io_unit > 0) THEN
     402            0 :             SELECT CASE (gfn_type)
     403              :             CASE (0)
     404            0 :                CPABORT("gfn_type = 0 missing code")
     405              :             CASE (1)
     406            0 :                CALL get_xtb_atom_param(xtb_parameter, aname=aname, defined=defined, zeff=zeff, natorb=natorb)
     407            0 :                CALL get_xtb_atom_param(xtb_parameter, nshell=nshell, lval=lval, nval=nval, occupation=occupation)
     408            0 :                CALL get_xtb_atom_param(xtb_parameter, kpoly=kpoly, kappa=kappa, hen=hen, zeta=zeta)
     409            0 :                CALL get_xtb_atom_param(xtb_parameter, electronegativity=en, xgamma=xgamma, eta=eta, alpha=alpha, zneff=zneff)
     410            0 :                wall = 0.0_dp
     411            0 :                CALL get_xtb_atom_param(xtb_parameter, wall=wall)
     412            0 :                have_sp = .FALSE.
     413            0 :                IF (SUM(ABS(wall)) /= 0.0_dp) have_sp = .TRUE.
     414              : 
     415            0 :                bb = "                                                "
     416            0 :                WRITE (UNIT=io_unit, FMT="(/,A,T67,A14)") " xTB  parameters: ", TRIM(aname)
     417            0 :                IF (defined) THEN
     418            0 :                   m = 5 - nshell
     419            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.2)") "Effective core charge:", zeff
     420            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,I10)") "Number of orbitals:", natorb
     421            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5(A4,I1,I2,A1))") "Basis set [nl]", bb(1:8*m), &
     422            0 :                      ("   [", nval(i), lval(i), "]", i=1, nshell)
     423            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Slater Exponent", bb(1:8*m), (zeta(i), i=1, nshell)
     424            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5I8)") "Ref. occupation", bb(1:8*m), (occupation(i), i=1, nshell)
     425            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Energy levels [au]", bb(1:8*m), (hen(i), i=1, nshell)
     426            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Kpoly", bb(1:8*m), (kpoly(i), i=1, nshell)
     427            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "Electronegativity", en
     428            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "Mataga-Nishimoto constant (eta)", eta
     429            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Mataga-Nishimoto scaling kappa", bb(1:8*m), &
     430            0 :                      (kappa(i), i=1, nshell)
     431            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "3rd Order constant", xgamma
     432            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T61,2F10.3)") "Repulsion potential [Z,alpha]", zneff, alpha
     433            0 :                   IF (have_sp) THEN
     434            0 :                     WRITE (UNIT=io_unit, FMT="(T16,A,T51,3F10.4)") "Spin Polarisation Wss sp pp", wall(1, 1), wall(1, 2), wall(2, 2)
     435            0 :                     WRITE (UNIT=io_unit, FMT="(T16,A,T51,3F10.4)") "                  Wsd pd dd", wall(1, 3), wall(2, 3), wall(3, 3)
     436              :                   END IF
     437              :                ELSE
     438            0 :                   WRITE (UNIT=io_unit, FMT="(T55,A)") "Parameters are not defined"
     439              :                END IF
     440              :             CASE (2)
     441            0 :                CPABORT("gfn_type = 2 not yet defined")
     442              :             END SELECT
     443              :          END IF
     444            0 :          CALL cp_print_key_finished_output(io_unit, logger, subsys_section, "PRINT%KINDS")
     445              :       END IF
     446              : 
     447         2256 :    END SUBROUTINE write_xtb_atom_param
     448              : 
     449            0 : END MODULE xtb_types
     450              : 
        

Generated by: LCOV version 2.0-1