LCOV - code coverage report
Current view: top level - src - xtb_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:24d69ee) Lines: 75.9 % 166 126
Test Date: 2026-09-03 07:32:15 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              :       INTEGER, DIMENSION(5)                  :: ngauss = -1 ! number of gaussians of shell i
      69              :       REAL(KIND=dp), DIMENSION(5)            :: kpoly = -1.0_dp
      70              :       REAL(KIND=dp), DIMENSION(5)            :: kappa = -1.0_dp
      71              :       REAL(KIND=dp), DIMENSION(5)            :: hen = -1.0_dp
      72              :       REAL(KIND=dp), DIMENSION(5)            :: zeta = -1.0_dp
      73              :       REAL(KIND=dp), DIMENSION(3, 3)         :: wall = -1.0_dp ! spin polarisation
      74              :       ! gfn0 params
      75              :       REAL(KIND=dp)                          :: en = -1.0_dp
      76              :       REAL(KIND=dp)                          :: kqat2 = -1.0_dp
      77              :       REAL(KIND=dp), DIMENSION(5)            :: kq = -1.0_dp
      78              :       REAL(KIND=dp), DIMENSION(5)            :: kcn = -1.0_dp
      79              :       ! charge equilibration parameter gfn0
      80              :       REAL(KIND=dp)                          :: xi = -1.0_dp
      81              :       REAL(KIND=dp)                          :: kappa0 = -1.0_dp
      82              :       REAL(KIND=dp)                          :: alpg = -1.0_dp
      83              :       ! AO to shell pointer
      84              :       INTEGER, DIMENSION(25)                 :: nao = -1, lao = -1
      85              :       ! Upper limit of Mulliken charge
      86              :       REAL(KIND=dp)                          :: chmax = -1.0_dp
      87              :    END TYPE xtb_atom_type
      88              : 
      89              : ! *** Public data types ***
      90              : 
      91              :    PUBLIC :: xtb_atom_type, get_xtb_atom_param, set_xtb_atom_param, write_xtb_atom_param
      92              :    PUBLIC :: allocate_xtb_atom_param, deallocate_xtb_atom_param
      93              : 
      94              : CONTAINS
      95              : 
      96              : ! **************************************************************************************************
      97              : !> \brief ...
      98              : !> \param xtb_parameter ...
      99              : ! **************************************************************************************************
     100         2620 :    SUBROUTINE allocate_xtb_atom_param(xtb_parameter)
     101              : 
     102              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     103              : 
     104         2620 :       IF (ASSOCIATED(xtb_parameter)) THEN
     105            0 :          CALL deallocate_xtb_atom_param(xtb_parameter)
     106              :       END IF
     107              : 
     108       327500 :       ALLOCATE (xtb_parameter)
     109              : 
     110         2620 :       xtb_parameter%defined = .FALSE.
     111         2620 :       xtb_parameter%aname = ""
     112         2620 :       xtb_parameter%symbol = ""
     113         2620 :       xtb_parameter%typ = "NONE"
     114         2620 :       xtb_parameter%z = -1
     115         2620 :       xtb_parameter%zeff = -1.0_dp
     116         2620 :       xtb_parameter%natorb = 0
     117         2620 :       xtb_parameter%lmax = -1
     118         2620 :       xtb_parameter%rcut = 0.0_dp
     119         2620 :       xtb_parameter%rcov = 0.0_dp
     120         2620 :       xtb_parameter%electronegativity = 0.0_dp
     121         2620 :       xtb_parameter%kx = -100.0_dp
     122         2620 :       xtb_parameter%eta = 0.0_dp
     123         2620 :       xtb_parameter%xgamma = 0.0_dp
     124         2620 :       xtb_parameter%alpha = 0.0_dp
     125         2620 :       xtb_parameter%zneff = 0.0_dp
     126         2620 :       xtb_parameter%nshell = 0
     127        15720 :       xtb_parameter%nval = 0
     128        15720 :       xtb_parameter%lval = 0
     129        15720 :       xtb_parameter%occupation = 0
     130        15720 :       xtb_parameter%ngauss = 0
     131        15720 :       xtb_parameter%kpoly = 0.0_dp
     132        15720 :       xtb_parameter%kappa = 0.0_dp
     133        34060 :       xtb_parameter%wall = 0.0_dp
     134        15720 :       xtb_parameter%hen = 0.0_dp
     135        15720 :       xtb_parameter%zeta = 0.0_dp
     136         2620 :       xtb_parameter%en = 0.0_dp
     137         2620 :       xtb_parameter%kqat2 = 0.0_dp
     138        15720 :       xtb_parameter%kq = 0.0_dp
     139        15720 :       xtb_parameter%kcn = 0.0_dp
     140         2620 :       xtb_parameter%xi = 0.0_dp
     141         2620 :       xtb_parameter%kappa0 = 0.0_dp
     142         2620 :       xtb_parameter%alpg = 0.0_dp
     143        68120 :       xtb_parameter%nao = 0
     144        68120 :       xtb_parameter%lao = 0
     145         2620 :       xtb_parameter%chmax = 0.0_dp
     146              : 
     147         2620 :    END SUBROUTINE allocate_xtb_atom_param
     148              : 
     149              : ! **************************************************************************************************
     150              : !> \brief ...
     151              : !> \param xtb_parameter ...
     152              : ! **************************************************************************************************
     153         2620 :    SUBROUTINE deallocate_xtb_atom_param(xtb_parameter)
     154              : 
     155              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     156              : 
     157         2620 :       CPASSERT(ASSOCIATED(xtb_parameter))
     158         2620 :       DEALLOCATE (xtb_parameter)
     159              : 
     160         2620 :    END SUBROUTINE deallocate_xtb_atom_param
     161              : 
     162              : ! **************************************************************************************************
     163              : !> \brief ...
     164              : !> \param xtb_parameter ...
     165              : !> \param symbol ...
     166              : !> \param aname ...
     167              : !> \param typ ...
     168              : !> \param defined ...
     169              : !> \param z ...
     170              : !> \param zeff ...
     171              : !> \param natorb ...
     172              : !> \param lmax ...
     173              : !> \param nao ...
     174              : !> \param lao ...
     175              : !> \param rcut ...
     176              : !> \param rcov ...
     177              : !> \param kx ...
     178              : !> \param eta ...
     179              : !> \param xgamma ...
     180              : !> \param alpha ...
     181              : !> \param zneff ...
     182              : !> \param nshell ...
     183              : !> \param nval ...
     184              : !> \param lval ...
     185              : !> \param kpoly ...
     186              : !> \param kappa ...
     187              : !> \param wall ...
     188              : !> \param hen ...
     189              : !> \param zeta ...
     190              : !> \param xi ...
     191              : !> \param kappa0 ...
     192              : !> \param alpg ...
     193              : !> \param occupation ...
     194              : !> \param ngauss ...
     195              : !> \param electronegativity ...
     196              : !> \param chmax ...
     197              : !> \param en ...
     198              : !> \param kqat2 ...
     199              : !> \param kcn ...
     200              : !> \param kq ...
     201              : ! **************************************************************************************************
     202     58968720 :    SUBROUTINE get_xtb_atom_param(xtb_parameter, symbol, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, &
     203              :                                  rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, &
     204              :                                  wall, hen, zeta, xi, kappa0, alpg, occupation, ngauss, electronegativity, chmax, &
     205              :                                  en, kqat2, kcn, kq)
     206              : 
     207              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     208              :       CHARACTER(LEN=2), INTENT(OUT), OPTIONAL            :: symbol
     209              :       CHARACTER(LEN=default_string_length), &
     210              :          INTENT(OUT), OPTIONAL                           :: aname, typ
     211              :       LOGICAL, INTENT(OUT), OPTIONAL                     :: defined
     212              :       INTEGER, INTENT(OUT), OPTIONAL                     :: z
     213              :       REAL(KIND=dp), INTENT(OUT), OPTIONAL               :: zeff
     214              :       INTEGER, INTENT(OUT), OPTIONAL                     :: natorb, lmax
     215              :       INTEGER, DIMENSION(25), INTENT(OUT), OPTIONAL      :: nao, lao
     216              :       REAL(KIND=dp), INTENT(OUT), OPTIONAL               :: rcut, rcov, kx, eta, xgamma, alpha, zneff
     217              :       INTEGER, INTENT(OUT), OPTIONAL                     :: nshell
     218              :       INTEGER, DIMENSION(5), INTENT(OUT), OPTIONAL       :: nval, lval
     219              :       REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: kpoly, kappa
     220              :       REAL(KIND=dp), DIMENSION(3, 3), INTENT(OUT), &
     221              :          OPTIONAL                                        :: wall
     222              :       REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: hen, zeta
     223              :       REAL(KIND=dp), INTENT(OUT), OPTIONAL               :: xi, kappa0, alpg
     224              :       INTEGER, DIMENSION(5), INTENT(OUT), OPTIONAL       :: occupation, ngauss
     225              :       REAL(KIND=dp), INTENT(OUT), OPTIONAL               :: electronegativity, chmax, en, kqat2
     226              :       REAL(KIND=dp), DIMENSION(5), INTENT(OUT), OPTIONAL :: kcn, kq
     227              : 
     228     58968720 :       CPASSERT(ASSOCIATED(xtb_parameter))
     229              : 
     230     58968720 :       IF (PRESENT(symbol)) symbol = xtb_parameter%symbol
     231     58968720 :       IF (PRESENT(aname)) aname = xtb_parameter%aname
     232     58968720 :       IF (PRESENT(typ)) typ = xtb_parameter%typ
     233     58968720 :       IF (PRESENT(defined)) defined = xtb_parameter%defined
     234     58968720 :       IF (PRESENT(z)) z = xtb_parameter%z
     235     58968720 :       IF (PRESENT(zeff)) zeff = xtb_parameter%zeff
     236     58968720 :       IF (PRESENT(natorb)) natorb = xtb_parameter%natorb
     237     58968720 :       IF (PRESENT(lmax)) lmax = xtb_parameter%lmax
     238    282590820 :       IF (PRESENT(nao)) nao = xtb_parameter%nao
     239    332002870 :       IF (PRESENT(lao)) lao = xtb_parameter%lao
     240              :       !
     241     58968720 :       IF (PRESENT(rcut)) rcut = xtb_parameter%rcut
     242     58968720 :       IF (PRESENT(rcov)) rcov = xtb_parameter%rcov
     243     58968720 :       IF (PRESENT(kx)) kx = xtb_parameter%kx
     244     58968720 :       IF (PRESENT(electronegativity)) electronegativity = xtb_parameter%electronegativity
     245     58968720 :       IF (PRESENT(eta)) eta = xtb_parameter%eta
     246     58968720 :       IF (PRESENT(xgamma)) xgamma = xtb_parameter%xgamma
     247     58968720 :       IF (PRESENT(alpha)) alpha = xtb_parameter%alpha
     248     58968720 :       IF (PRESENT(zneff)) zneff = xtb_parameter%zneff
     249     58968720 :       IF (PRESENT(nshell)) nshell = xtb_parameter%nshell
     250     58968720 :       IF (PRESENT(nval)) nval = xtb_parameter%nval
     251     59184710 :       IF (PRESENT(lval)) lval = xtb_parameter%lval
     252     59806400 :       IF (PRESENT(occupation)) occupation = xtb_parameter%occupation
     253     58968760 :       IF (PRESENT(ngauss)) ngauss = xtb_parameter%ngauss
     254     75603530 :       IF (PRESENT(kpoly)) kpoly = xtb_parameter%kpoly
     255    152981050 :       IF (PRESENT(kappa)) kappa = xtb_parameter%kappa
     256     59029440 :       IF (PRESENT(wall)) wall(1:3, 1:3) = xtb_parameter%wall(1:3, 1:3)
     257     64100370 :       IF (PRESENT(hen)) hen = xtb_parameter%hen
     258     59054800 :       IF (PRESENT(zeta)) zeta = xtb_parameter%zeta
     259     58968720 :       IF (PRESENT(chmax)) chmax = xtb_parameter%chmax
     260     58968720 :       IF (PRESENT(xi)) xi = xtb_parameter%xi
     261     58968720 :       IF (PRESENT(kappa0)) kappa0 = xtb_parameter%kappa0
     262     58968720 :       IF (PRESENT(alpg)) alpg = xtb_parameter%alpg
     263     58968720 :       IF (PRESENT(en)) en = xtb_parameter%en
     264     58968720 :       IF (PRESENT(kqat2)) kqat2 = xtb_parameter%kqat2
     265     59018440 :       IF (PRESENT(kcn)) kcn = xtb_parameter%kcn
     266     59018440 :       IF (PRESENT(kq)) kq = xtb_parameter%kq
     267              : 
     268     58968720 :    END SUBROUTINE get_xtb_atom_param
     269              : 
     270              : ! **************************************************************************************************
     271              : !> \brief ...
     272              : !> \param xtb_parameter ...
     273              : !> \param aname ...
     274              : !> \param typ ...
     275              : !> \param defined ...
     276              : !> \param z ...
     277              : !> \param zeff ...
     278              : !> \param natorb ...
     279              : !> \param lmax ...
     280              : !> \param nao ...
     281              : !> \param lao ...
     282              : !> \param rcut ...
     283              : !> \param rcov ...
     284              : !> \param kx ...
     285              : !> \param eta ...
     286              : !> \param xgamma ...
     287              : !> \param alpha ...
     288              : !> \param zneff ...
     289              : !> \param nshell ...
     290              : !> \param nval ...
     291              : !> \param lval ...
     292              : !> \param kpoly ...
     293              : !> \param kappa ...
     294              : !> \param wall ...
     295              : !> \param hen ...
     296              : !> \param zeta ...
     297              : !> \param xi ...
     298              : !> \param kappa0 ...
     299              : !> \param alpg ...
     300              : !> \param electronegativity ...
     301              : !> \param occupation ...
     302              : !> \param ngauss ...
     303              : !> \param chmax ...
     304              : !> \param en ...
     305              : !> \param kqat2 ...
     306              : !> \param kcn ...
     307              : !> \param kq ...
     308              : ! **************************************************************************************************
     309          324 :    SUBROUTINE set_xtb_atom_param(xtb_parameter, aname, typ, defined, z, zeff, natorb, lmax, nao, lao, &
     310              :                                  rcut, rcov, kx, eta, xgamma, alpha, zneff, nshell, nval, lval, kpoly, kappa, &
     311              :                                  wall, hen, zeta, xi, kappa0, alpg, electronegativity, occupation, ngauss, chmax, &
     312              :                                  en, kqat2, kcn, kq)
     313              : 
     314              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     315              :       CHARACTER(LEN=default_string_length), INTENT(IN), &
     316              :          OPTIONAL                                        :: aname, typ
     317              :       LOGICAL, INTENT(IN), OPTIONAL                      :: defined
     318              :       INTEGER, INTENT(IN), OPTIONAL                      :: z
     319              :       REAL(KIND=dp), INTENT(IN), OPTIONAL                :: zeff
     320              :       INTEGER, INTENT(IN), OPTIONAL                      :: natorb, lmax
     321              :       INTEGER, DIMENSION(25), INTENT(IN), OPTIONAL       :: nao, lao
     322              :       REAL(KIND=dp), INTENT(IN), OPTIONAL                :: rcut, rcov, kx, eta, xgamma, alpha, zneff
     323              :       INTEGER, INTENT(IN), OPTIONAL                      :: nshell
     324              :       INTEGER, DIMENSION(5), INTENT(IN), OPTIONAL        :: nval, lval
     325              :       REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL  :: kpoly, kappa
     326              :       REAL(KIND=dp), DIMENSION(3, 3), INTENT(IN), &
     327              :          OPTIONAL                                        :: wall
     328              :       REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL  :: hen, zeta
     329              :       REAL(KIND=dp), INTENT(IN), OPTIONAL                :: xi, kappa0, alpg, electronegativity
     330              :       INTEGER, DIMENSION(5), INTENT(IN), OPTIONAL        :: occupation, ngauss
     331              :       REAL(KIND=dp), INTENT(IN), OPTIONAL                :: chmax, en, kqat2
     332              :       REAL(KIND=dp), DIMENSION(5), INTENT(IN), OPTIONAL  :: kcn, kq
     333              : 
     334          324 :       CPASSERT(ASSOCIATED(xtb_parameter))
     335              : 
     336          324 :       IF (PRESENT(aname)) xtb_parameter%aname = aname
     337          324 :       IF (PRESENT(typ)) xtb_parameter%typ = typ
     338          324 :       IF (PRESENT(defined)) xtb_parameter%defined = defined
     339          324 :       IF (PRESENT(z)) xtb_parameter%z = z
     340          324 :       IF (PRESENT(zeff)) xtb_parameter%zeff = zeff
     341          324 :       IF (PRESENT(natorb)) xtb_parameter%natorb = natorb
     342          324 :       IF (PRESENT(lmax)) xtb_parameter%lmax = lmax
     343          324 :       IF (PRESENT(nao)) xtb_parameter%nao = nao
     344          324 :       IF (PRESENT(lao)) xtb_parameter%lao = lao
     345              :       !
     346          324 :       IF (PRESENT(rcut)) xtb_parameter%rcut = rcut
     347          324 :       IF (PRESENT(rcov)) xtb_parameter%rcov = rcov
     348          324 :       IF (PRESENT(kx)) xtb_parameter%kx = kx
     349          324 :       IF (PRESENT(electronegativity)) xtb_parameter%electronegativity = electronegativity
     350          324 :       IF (PRESENT(eta)) xtb_parameter%eta = eta
     351          324 :       IF (PRESENT(xgamma)) xtb_parameter%xgamma = xgamma
     352          324 :       IF (PRESENT(alpha)) xtb_parameter%alpha = alpha
     353          324 :       IF (PRESENT(zneff)) xtb_parameter%zneff = zneff
     354          324 :       IF (PRESENT(nshell)) xtb_parameter%nshell = nshell
     355          324 :       IF (PRESENT(nval)) xtb_parameter%nval = nval
     356          324 :       IF (PRESENT(lval)) xtb_parameter%lval = lval
     357         1944 :       IF (PRESENT(occupation)) xtb_parameter%occupation = occupation
     358          324 :       IF (PRESENT(ngauss)) xtb_parameter%ngauss = ngauss
     359          324 :       IF (PRESENT(kpoly)) xtb_parameter%kpoly = kpoly
     360          324 :       IF (PRESENT(kappa)) xtb_parameter%kappa = kappa
     361          324 :       IF (PRESENT(wall)) xtb_parameter%wall(1:3, 1:3) = wall(1:3, 1:3)
     362          324 :       IF (PRESENT(hen)) xtb_parameter%hen = hen
     363          324 :       IF (PRESENT(zeta)) xtb_parameter%zeta = zeta
     364          324 :       IF (PRESENT(chmax)) xtb_parameter%chmax = chmax
     365              :       !
     366          324 :       IF (PRESENT(xi)) xtb_parameter%xi = xi
     367          324 :       IF (PRESENT(kappa0)) xtb_parameter%kappa0 = kappa0
     368          324 :       IF (PRESENT(alpg)) xtb_parameter%alpg = alpg
     369          324 :       IF (PRESENT(en)) xtb_parameter%en = en
     370          324 :       IF (PRESENT(kqat2)) xtb_parameter%kqat2 = kqat2
     371          324 :       IF (PRESENT(kcn)) xtb_parameter%kcn = kcn
     372          324 :       IF (PRESENT(kq)) xtb_parameter%kq = kq
     373              : 
     374          324 :    END SUBROUTINE set_xtb_atom_param
     375              : 
     376              : ! **************************************************************************************************
     377              : !> \brief ...
     378              : !> \param xtb_parameter ...
     379              : !> \param gfn_type ...
     380              : !> \param subsys_section ...
     381              : ! **************************************************************************************************
     382         4592 :    SUBROUTINE write_xtb_atom_param(xtb_parameter, gfn_type, subsys_section)
     383              : 
     384              :       TYPE(xtb_atom_type), POINTER                       :: xtb_parameter
     385              :       INTEGER, INTENT(IN)                                :: gfn_type
     386              :       TYPE(section_vals_type), POINTER                   :: subsys_section
     387              : 
     388              :       CHARACTER(LEN=default_string_length)               :: aname, bb
     389              :       INTEGER                                            :: i, io_unit, m, natorb, nshell
     390              :       INTEGER, DIMENSION(5)                              :: lval, ngauss, nval, occupation
     391              :       LOGICAL                                            :: defined, have_sp
     392              :       REAL(dp)                                           :: zeff
     393              :       REAL(KIND=dp)                                      :: alpha, en, eta, xgamma, zneff
     394              :       REAL(KIND=dp), DIMENSION(3, 3)                     :: wall
     395              :       REAL(KIND=dp), DIMENSION(5)                        :: hen, kappa, kpoly, zeta
     396              :       TYPE(cp_logger_type), POINTER                      :: logger
     397              : 
     398         4592 :       NULLIFY (logger)
     399         4592 :       logger => cp_get_default_logger()
     400         4592 :       IF (ASSOCIATED(xtb_parameter) .AND. &
     401              :           BTEST(cp_print_key_should_output(logger%iter_info, subsys_section, &
     402              :                                            "PRINT%KINDS/POTENTIAL"), cp_p_file)) THEN
     403              : 
     404              :          io_unit = cp_print_key_unit_nr(logger, subsys_section, "PRINT%KINDS", &
     405            0 :                                         extension=".Log")
     406              : 
     407            0 :          IF (io_unit > 0) THEN
     408            0 :             SELECT CASE (gfn_type)
     409              :             CASE (0)
     410            0 :                CPABORT("gfn_type = 0 missing code")
     411              :             CASE (1)
     412            0 :                CALL get_xtb_atom_param(xtb_parameter, aname=aname, defined=defined, zeff=zeff, natorb=natorb)
     413            0 :                CALL get_xtb_atom_param(xtb_parameter, nshell=nshell, lval=lval, nval=nval, occupation=occupation)
     414            0 :                CALL get_xtb_atom_param(xtb_parameter, ngauss=ngauss)
     415            0 :                CALL get_xtb_atom_param(xtb_parameter, kpoly=kpoly, kappa=kappa, hen=hen, zeta=zeta)
     416            0 :                CALL get_xtb_atom_param(xtb_parameter, electronegativity=en, xgamma=xgamma, eta=eta, alpha=alpha, zneff=zneff)
     417            0 :                wall = 0.0_dp
     418            0 :                CALL get_xtb_atom_param(xtb_parameter, wall=wall)
     419            0 :                have_sp = .FALSE.
     420            0 :                IF (SUM(ABS(wall)) /= 0.0_dp) have_sp = .TRUE.
     421              : 
     422            0 :                bb = "                                                "
     423            0 :                WRITE (UNIT=io_unit, FMT="(/,A,T67,A14)") " xTB  parameters: ", TRIM(aname)
     424            0 :                IF (defined) THEN
     425            0 :                   m = 5 - nshell
     426            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.2)") "Effective core charge:", zeff
     427            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,I10)") "Number of orbitals:", natorb
     428            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5(A4,I1,I2,A1))") "Basis set [nl]", bb(1:8*m), &
     429            0 :                      ("   [", nval(i), lval(i), "]", i=1, nshell)
     430            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Slater Exponent", bb(1:8*m), (zeta(i), i=1, nshell)
     431            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5I8)") "Ref. occupation", bb(1:8*m), (occupation(i), i=1, nshell)
     432            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5I8)") "# of Gaussians", bb(1:8*m), (ngauss(i), i=1, nshell)
     433            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Energy levels [au]", bb(1:8*m), (hen(i), i=1, nshell)
     434            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Kpoly", bb(1:8*m), (kpoly(i), i=1, nshell)
     435            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "Electronegativity", en
     436            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "Mataga-Nishimoto constant (eta)", eta
     437            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T41,A,5F8.3)") "Mataga-Nishimoto scaling kappa", bb(1:8*m), &
     438            0 :                      (kappa(i), i=1, nshell)
     439            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T71,F10.3)") "3rd Order constant", xgamma
     440            0 :                   WRITE (UNIT=io_unit, FMT="(T16,A,T61,2F10.3)") "Repulsion potential [Z,alpha]", zneff, alpha
     441            0 :                   IF (have_sp) THEN
     442            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)
     443            0 :                     WRITE (UNIT=io_unit, FMT="(T16,A,T51,3F10.4)") "                  Wsd pd dd", wall(1, 3), wall(2, 3), wall(3, 3)
     444              :                   END IF
     445              :                ELSE
     446            0 :                   WRITE (UNIT=io_unit, FMT="(T55,A)") "Parameters are not defined"
     447              :                END IF
     448              :             CASE (2)
     449            0 :                CPABORT("gfn_type = 2 not yet defined")
     450              :             END SELECT
     451              :          END IF
     452            0 :          CALL cp_print_key_finished_output(io_unit, logger, subsys_section, "PRINT%KINDS")
     453              :       END IF
     454              : 
     455         4592 :    END SUBROUTINE write_xtb_atom_param
     456              : 
     457            0 : END MODULE xtb_types
        

Generated by: LCOV version 2.0-1