LCOV - code coverage report
Current view: top level - src - input_cp2k_tb.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:06f838d) Lines: 100.0 % 467 467
Test Date: 2026-06-05 07:04:50 Functions: 100.0 % 14 14

            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 function that build the dft section of the input
      10              : !> \par History
      11              : !>      10.2005 moved out of input_cp2k [fawzi]
      12              : !> \author fawzi
      13              : ! **************************************************************************************************
      14              : MODULE input_cp2k_tb
      15              :    USE bibliography,                    ONLY: Elstner1998,&
      16              :                                               Grimme2017,&
      17              :                                               Hu2007,&
      18              :                                               Katbashev2025,&
      19              :                                               Porezag1995,&
      20              :                                               Seifert1996,&
      21              :                                               Zhechkov2005
      22              :    USE cp_units,                        ONLY: cp_unit_to_cp2k
      23              :    USE eeq_input,                       ONLY: create_eeq_control_section
      24              :    USE input_constants,                 ONLY: &
      25              :         dispersion_d2, dispersion_d3, dispersion_d3bj, dispersion_uff, gfn1xtb, gfn2xtb, &
      26              :         gfn_tblite, ipea1xtb, slater, tblite_cli_born_kernel_auto, tblite_cli_born_kernel_p16, &
      27              :         tblite_cli_born_kernel_still, tblite_cli_solution_state_bar1mol, &
      28              :         tblite_cli_solution_state_gsolv, tblite_cli_solution_state_reference, &
      29              :         tblite_cli_solvation_alpb, tblite_cli_solvation_cpcm, tblite_cli_solvation_gb, &
      30              :         tblite_cli_solvation_gbe, tblite_cli_solvation_gbsa, tblite_guess_ceh, tblite_guess_eeq, &
      31              :         tblite_guess_sad, tblite_mixer_damping_default, tblite_mixer_iterations_default, &
      32              :         tblite_mixer_max_weight_default, tblite_mixer_memory_inherit, &
      33              :         tblite_mixer_min_weight_default, tblite_mixer_omega0_default, &
      34              :         tblite_mixer_weight_factor_default, tblite_scc_mixer_auto, tblite_scc_mixer_cp2k, &
      35              :         tblite_scc_mixer_none, tblite_scc_mixer_tblite, tblite_solver_gvd, tblite_solver_gvr
      36              :    USE input_cp2k_mm,                   ONLY: create_GENPOT_section
      37              :    USE input_keyword_types,             ONLY: keyword_create,&
      38              :                                               keyword_release,&
      39              :                                               keyword_type
      40              :    USE input_section_types,             ONLY: section_add_keyword,&
      41              :                                               section_add_subsection,&
      42              :                                               section_create,&
      43              :                                               section_release,&
      44              :                                               section_type
      45              :    USE input_val_types,                 ONLY: char_t,&
      46              :                                               real_t
      47              :    USE kinds,                           ONLY: dp
      48              :    USE string_utilities,                ONLY: s2a
      49              : #include "./base/base_uses.f90"
      50              : 
      51              :    IMPLICIT NONE
      52              :    PRIVATE
      53              : 
      54              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_tb'
      55              : 
      56              :    PUBLIC :: create_dftb_control_section, create_xtb_control_section
      57              : 
      58              : CONTAINS
      59              : 
      60              : ! **************************************************************************************************
      61              : !> \brief ...
      62              : !> \param section ...
      63              : ! **************************************************************************************************
      64        10278 :    SUBROUTINE create_dftb_control_section(section)
      65              :       TYPE(section_type), POINTER                        :: section
      66              : 
      67              :       TYPE(keyword_type), POINTER                        :: keyword
      68              :       TYPE(section_type), POINTER                        :: subsection
      69              : 
      70        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
      71              :       CALL section_create(section, __LOCATION__, name="DFTB", &
      72              :                           description="Parameters needed to set up the DFTB methods", &
      73              :                           n_keywords=1, n_subsections=1, repeats=.FALSE., &
      74        51390 :                           citations=[Porezag1995, Seifert1996, Elstner1998, Zhechkov2005])
      75              : 
      76        10278 :       NULLIFY (subsection)
      77        10278 :       CALL create_dftb_parameter_section(subsection)
      78        10278 :       CALL section_add_subsection(section, subsection)
      79        10278 :       CALL section_release(subsection)
      80              : 
      81        10278 :       NULLIFY (subsection)
      82        10278 :       CALL create_tblite_mixer_section(subsection)
      83        10278 :       CALL section_add_subsection(section, subsection)
      84        10278 :       CALL section_release(subsection)
      85              : 
      86        10278 :       NULLIFY (keyword)
      87              :       CALL keyword_create(keyword, __LOCATION__, name="self_consistent", &
      88              :                           description="Use self-consistent method", &
      89              :                           citations=[Elstner1998], &
      90        20556 :                           usage="SELF_CONSISTENT", default_l_val=.TRUE.)
      91        10278 :       CALL section_add_keyword(section, keyword)
      92        10278 :       CALL keyword_release(keyword)
      93              : 
      94              :       CALL keyword_create(keyword, __LOCATION__, name="orthogonal_basis", &
      95              :                           description="Assume orthogonal basis set", &
      96        10278 :                           usage="ORTHOGONAL_BASIS", default_l_val=.FALSE.)
      97        10278 :       CALL section_add_keyword(section, keyword)
      98        10278 :       CALL keyword_release(keyword)
      99              : 
     100              :       CALL keyword_create(keyword, __LOCATION__, name="do_ewald", &
     101              :                           description="Deprecated debug override for the DFTB Ewald treatment. "// &
     102              :                           "By default the setting is inferred from SUBSYS/CELL/PERIODIC. "// &
     103              :                           "If set to TRUE, the DFT/POISSON section must use a periodic Poisson solver.", &
     104              :                           usage="DO_EWALD", default_l_val=.FALSE., lone_keyword_l_val=.TRUE., &
     105              :                           deprecation_notice="Use SUBSYS/CELL/PERIODIC to select periodicity. "// &
     106        10278 :                           "DO_EWALD is retained only as a debug override for the DFTB Ewald path.")
     107        10278 :       CALL section_add_keyword(section, keyword)
     108        10278 :       CALL keyword_release(keyword)
     109              : 
     110              :       CALL keyword_create(keyword, __LOCATION__, name="dispersion", &
     111              :                           description="Use dispersion correction", &
     112              :                           citations=[Zhechkov2005], lone_keyword_l_val=.TRUE., &
     113        20556 :                           usage="DISPERSION", default_l_val=.FALSE.)
     114        10278 :       CALL section_add_keyword(section, keyword)
     115        10278 :       CALL keyword_release(keyword)
     116              : 
     117              :       CALL keyword_create(keyword, __LOCATION__, name="DIAGONAL_DFTB3", &
     118              :                           description="Use a diagonal version of the 3rd order energy correction (DFTB3) ", &
     119              :                           lone_keyword_l_val=.TRUE., &
     120        10278 :                           usage="DIAGONAL_DFTB3", default_l_val=.FALSE.)
     121        10278 :       CALL section_add_keyword(section, keyword)
     122        10278 :       CALL keyword_release(keyword)
     123              : 
     124              :       CALL keyword_create(keyword, __LOCATION__, name="HB_SR_GAMMA", &
     125              :                           description="Uses a modified version for the GAMMA within the SCC-DFTB scheme, "// &
     126              :                           "specifically tuned for hydrogen bonds.", &
     127              :                           citations=[Hu2007], lone_keyword_l_val=.TRUE., &
     128        20556 :                           usage="HB_SR_GAMMA", default_l_val=.FALSE.)
     129        10278 :       CALL section_add_keyword(section, keyword)
     130        10278 :       CALL keyword_release(keyword)
     131              : 
     132              :       CALL keyword_create(keyword, __LOCATION__, name="eps_disp", &
     133              :                           description="Define accuracy of dispersion interaction", &
     134        10278 :                           usage="EPS_DISP", default_r_val=0.0001_dp)
     135        10278 :       CALL section_add_keyword(section, keyword)
     136        10278 :       CALL keyword_release(keyword)
     137              : 
     138              :       CALL add_tb_scc_mixer_keywords(section, "CP2K-internal DFTB", &
     139        10278 :                                      "AUTO keeps the existing CP2K density/SCF mixing path for DFTB.")
     140              : 
     141        10278 :    END SUBROUTINE create_dftb_control_section
     142              : 
     143              : ! **************************************************************************************************
     144              : !> \brief ...
     145              : !> \param section ...
     146              : ! **************************************************************************************************
     147        10278 :    SUBROUTINE create_xtb_control_section(section)
     148              :       TYPE(section_type), POINTER                        :: section
     149              : 
     150              :       TYPE(keyword_type), POINTER                        :: keyword
     151              :       TYPE(section_type), POINTER                        :: subsection
     152              : 
     153        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
     154              :       CALL section_create(section, __LOCATION__, name="xTB", &
     155              :                           description="Parameters needed to set up the xTB methods", &
     156              :                           n_keywords=1, n_subsections=1, repeats=.FALSE., &
     157        20556 :                           citations=[GRIMME2017])
     158              : 
     159        10278 :       NULLIFY (subsection)
     160        10278 :       CALL create_xtb_parameter_section(subsection)
     161        10278 :       CALL section_add_subsection(section, subsection)
     162        10278 :       CALL section_release(subsection)
     163              : 
     164        10278 :       CALL create_xtb_nonbonded_section(subsection)
     165        10278 :       CALL section_add_subsection(section, subsection)
     166        10278 :       CALL section_release(subsection)
     167              : 
     168        10278 :       CALL create_eeq_control_section(subsection)
     169        10278 :       CALL section_add_subsection(section, subsection)
     170        10278 :       CALL section_release(subsection)
     171              : 
     172        10278 :       CALL create_tblite_mixer_section(subsection)
     173        10278 :       CALL section_add_subsection(section, subsection)
     174        10278 :       CALL section_release(subsection)
     175              : 
     176        10278 :       CALL create_xtb_tblite_section(subsection)
     177        10278 :       CALL section_add_subsection(section, subsection)
     178        10278 :       CALL section_release(subsection)
     179              : 
     180        10278 :       NULLIFY (keyword)
     181              :       CALL keyword_create(keyword, __LOCATION__, name="GFN_TYPE", &
     182              :                           description="Selects the xTB backend. GFN_TYPE 1 uses the CP2K-internal GFN1-xTB "// &
     183              :                           "implementation. GFN_TYPE 0 uses the CP2K-internal GFN0-xTB implementation, which "// &
     184              :                           "has no SCC variables to mix, so XTB/SCC_MIXER AUTO is treated as NONE. "// &
     185              :                           "GFN_TYPE TBLITE uses the tblite backend and requires an XTB/TBLITE "// &
     186              :                           "section, where the actual tblite method is selected.", &
     187              :                           usage="GFN_TYPE (0|1|TBLITE)", &
     188              :                           enum_c_vals=s2a("0", "1", "TBLITE"), &
     189              :                           enum_i_vals=[0, gfn1xtb, gfn_tblite], &
     190              :                           enum_desc=s2a("Use the CP2K-internal GFN0-xTB implementation.", &
     191              :                                         "Use the CP2K-internal GFN1-xTB implementation.", &
     192              :                                         "Use the CP2K/tblite backend; requires XTB/TBLITE."), &
     193        10278 :                           default_i_val=gfn1xtb)
     194        10278 :       CALL section_add_keyword(section, keyword)
     195        10278 :       CALL keyword_release(keyword)
     196              : 
     197              :       CALL add_tb_scc_mixer_keywords(section, "xTB", &
     198              :                                      "AUTO is treated as NONE for CP2K-internal GFN0-xTB, keeps the CP2K "// &
     199              :                                      "charge mixer for CP2K-internal GFN1-xTB, and uses "// &
     200        10278 :                                      "tblite's native SCC mixer for XTB/GFN_TYPE TBLITE.")
     201              : 
     202              :       CALL keyword_create(keyword, __LOCATION__, name="DO_EWALD", &
     203              :                           description="Deprecated debug override for the xTB Ewald treatment. "// &
     204              :                           "By default the setting is inferred from SUBSYS/CELL/PERIODIC. "// &
     205              :                           "If set to TRUE for CP2K-internal xTB, the DFT/POISSON section must use a periodic "// &
     206              :                           "Poisson solver. For CP2K/tblite, the periodic long-range treatment is performed "// &
     207              :                           "inside tblite.", &
     208              :                           usage="DO_EWALD", default_l_val=.FALSE., lone_keyword_l_val=.TRUE., &
     209              :                           deprecation_notice="Use SUBSYS/CELL/PERIODIC to select periodicity. "// &
     210        10278 :                           "DO_EWALD is retained only as a debug override for the CP2K-internal xTB Ewald path.")
     211        10278 :       CALL section_add_keyword(section, keyword)
     212        10278 :       CALL keyword_release(keyword)
     213              : 
     214              :       CALL keyword_create(keyword, __LOCATION__, name="STO_NG", &
     215              :                           description="Provides the order of the Slater orbital expansion in GTOs.", &
     216        10278 :                           usage="STO_NG 3", default_i_val=6)
     217        10278 :       CALL section_add_keyword(section, keyword)
     218        10278 :       CALL keyword_release(keyword)
     219              : 
     220              :       CALL keyword_create(keyword, __LOCATION__, name="HYDROGEN_STO_NG", &
     221              :                           description="Number of GTOs for Hydrogen basis expansion.", &
     222        10278 :                           usage="HYDROGEN_STO_NG 3", default_i_val=4)
     223        10278 :       CALL section_add_keyword(section, keyword)
     224        10278 :       CALL keyword_release(keyword)
     225              : 
     226              :       CALL keyword_create(keyword, __LOCATION__, name="USE_HALOGEN_CORRECTION", &
     227              :                           description="Use XB interaction term", &
     228        10278 :                           usage="USE_HALOGEN_CORRECTION T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
     229        10278 :       CALL section_add_keyword(section, keyword)
     230        10278 :       CALL keyword_release(keyword)
     231              : 
     232              :       CALL keyword_create(keyword, __LOCATION__, name="DO_NONBONDED", &
     233              :                           description="Controls the computation of real-space "// &
     234              :                           "(short-range) nonbonded interactions as correction to xTB.", &
     235        10278 :                           usage="DO_NONBONDED T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     236        10278 :       CALL section_add_keyword(section, keyword)
     237        10278 :       CALL keyword_release(keyword)
     238              : 
     239              :       CALL keyword_create(keyword, __LOCATION__, name="VDW_POTENTIAL", &
     240              :                           description="vdW potential to be used: NONE, DFTD3, DFTD4. "// &
     241              :                           "Defaults: DFTD3(gfn1), DFTD4(gfn0, gfn2).", &
     242        10278 :                           usage="VDW_POTENTIAL type", default_c_val="")
     243        10278 :       CALL section_add_keyword(section, keyword)
     244        10278 :       CALL keyword_release(keyword)
     245              : 
     246              :       CALL keyword_create(keyword, __LOCATION__, name="COULOMB_INTERACTION", &
     247              :                           description="Use Coulomb interaction terms (electrostatics + TB3); for debug only", &
     248        10278 :                           usage="COULOMB_INTERACTION T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
     249        10278 :       CALL section_add_keyword(section, keyword)
     250        10278 :       CALL keyword_release(keyword)
     251              : 
     252              :       CALL keyword_create(keyword, __LOCATION__, name="COULOMB_LR", &
     253              :                           description="Use Coulomb LR (1/r) interaction terms; for debug only", &
     254        10278 :                           usage="COULOMB_LR T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
     255        10278 :       CALL section_add_keyword(section, keyword)
     256        10278 :       CALL keyword_release(keyword)
     257              : 
     258              :       CALL keyword_create(keyword, __LOCATION__, name="TB3_INTERACTION", &
     259              :                           description="Use TB3 interaction terms; for debug only", &
     260        10278 :                           usage="TB3_INTERACTION T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
     261        10278 :       CALL section_add_keyword(section, keyword)
     262        10278 :       CALL keyword_release(keyword)
     263              : 
     264              :       CALL keyword_create(keyword, __LOCATION__, name="CHECK_ATOMIC_CHARGES", &
     265              :                           description="Stop calculation if atomic charges are outside chemical range.", &
     266        10278 :                           usage="CHECK_ATOMIC_CHARGES T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
     267        10278 :       CALL section_add_keyword(section, keyword)
     268        10278 :       CALL keyword_release(keyword)
     269              : 
     270              :       CALL keyword_create(keyword, __LOCATION__, name="VARIATIONAL_DIPOLE", &
     271              :                           description="gfn0-xTB use dipole definition from energy derivative.", &
     272        10278 :                           usage="VARIATIONAL_DIPOLE T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     273        10278 :       CALL section_add_keyword(section, keyword)
     274        10278 :       CALL keyword_release(keyword)
     275              : 
     276              :       CALL keyword_create(keyword, __LOCATION__, name="EPS_PAIRPOTENTIAL", &
     277              :                           description="Accuracy for the repulsive pair potential.", &
     278        10278 :                           usage="EPS_PAIRPOTENTIAL 1.0E-8", default_r_val=1.0e-10_dp)
     279        10278 :       CALL section_add_keyword(section, keyword)
     280        10278 :       CALL keyword_release(keyword)
     281              : 
     282              :       CALL keyword_create(keyword, __LOCATION__, name="EN_SHIFT_TYPE", &
     283              :                           description="Shift function for electronegativity in EEQ method. "// &
     284              :                           "[Select/Molecule/Crystal] Default Select from periodicity.", &
     285              :                           usage="EN_SHIFT_TYPE [Select/Molecule/Crystal]", &
     286        10278 :                           n_var=1, type_of_var=char_t, default_c_val="Molecule")
     287        10278 :       CALL section_add_keyword(section, keyword)
     288        10278 :       CALL keyword_release(keyword)
     289              : 
     290        10278 :    END SUBROUTINE create_xtb_control_section
     291              : 
     292              : ! **************************************************************************************************
     293              : !> \brief ...
     294              : !> \param section ...
     295              : ! **************************************************************************************************
     296        10278 :    SUBROUTINE create_dftb_parameter_section(section)
     297              : 
     298              :       TYPE(section_type), POINTER                        :: section
     299              : 
     300              :       TYPE(keyword_type), POINTER                        :: keyword
     301              : 
     302        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
     303              : 
     304              :       CALL section_create(section, __LOCATION__, name="PARAMETER", &
     305              :                           description="Information on where to find DFTB parameters", &
     306        10278 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     307              : 
     308        10278 :       NULLIFY (keyword)
     309              :       CALL keyword_create(keyword, __LOCATION__, name="SK_FILE", &
     310              :                           description="Define parameter file for atom pair", &
     311              :                           usage="SK_FILE a1 a2 filename", &
     312        10278 :                           n_var=3, type_of_var=char_t, repeats=.TRUE.)
     313        10278 :       CALL section_add_keyword(section, keyword)
     314        10278 :       CALL keyword_release(keyword)
     315              : 
     316              :       CALL keyword_create(keyword, __LOCATION__, name="PARAM_FILE_PATH", &
     317              :                           description="Specify the directory with the DFTB parameter files. "// &
     318              :                           "Used in combination with the filenames specified in the file "// &
     319              :                           "given in PARAM_FILE_NAME.", usage="PARAM_FILE_PATH pathname", &
     320        10278 :                           n_var=1, type_of_var=char_t, default_c_val="./")
     321        10278 :       CALL section_add_keyword(section, keyword)
     322        10278 :       CALL keyword_release(keyword)
     323              : 
     324              :       CALL keyword_create(keyword, __LOCATION__, name="PARAM_FILE_NAME", &
     325              :                           description="Specify file that contains the names of "// &
     326              :                           "Slater-Koster tables: A plain text file, each line has the "// &
     327              :                           'format "ATOM1 ATOM2 filename.spl".', &
     328              :                           usage="PARAM_FILE_NAME filename", &
     329        10278 :                           n_var=1, type_of_var=char_t, default_c_val="")
     330        10278 :       CALL section_add_keyword(section, keyword)
     331        10278 :       CALL keyword_release(keyword)
     332              : 
     333              :       CALL keyword_create(keyword, __LOCATION__, name="DISPERSION_TYPE", &
     334              :                           description="Use dispersion correction of the specified type."// &
     335              :                           " Dispersion correction has to be switched on in the DFTB section.", &
     336              :                           usage="DISPERSION_TYPE (UFF|D3|D3(BJ)|D2)", &
     337              :                           enum_c_vals=s2a("UFF", "D3", "D3(BJ)", "D2"), &
     338              :                           enum_i_vals=[dispersion_uff, dispersion_d3, dispersion_d3bj, dispersion_d2], &
     339              :                           enum_desc=s2a("Uses the UFF force field for a pair potential dispersion correction.", &
     340              :                                         "Uses the Grimme D3 method (simplified) for a pair potential dispersion correction.", &
     341              :                                         "Uses the Grimme D3 method (simplified) with Becke-Johnson attenuation.", &
     342              :                                         "Uses the Grimme D2 method for pair potential dispersion correction."), &
     343        10278 :                           default_i_val=dispersion_uff)
     344        10278 :       CALL section_add_keyword(section, keyword)
     345        10278 :       CALL keyword_release(keyword)
     346              : 
     347              :       CALL keyword_create(keyword, __LOCATION__, name="UFF_FORCE_FIELD", &
     348              :                           description="Name of file with UFF parameters that will be used "// &
     349              :                           "for the dispersion correction. Needs to be specified when "// &
     350              :                           "DISPERSION==.TRUE., otherwise cp2k crashes with a Segmentation "// &
     351              :                           "Fault.", usage="UFF_FORCE_FIELD filename", &
     352        10278 :                           n_var=1, type_of_var=char_t, default_c_val="")
     353        10278 :       CALL section_add_keyword(section, keyword)
     354        10278 :       CALL keyword_release(keyword)
     355              : 
     356              :       CALL keyword_create(keyword, __LOCATION__, name="DISPERSION_PARAMETER_FILE", &
     357              :                           description="Specify file that contains the atomic dispersion "// &
     358              :                           "parameters for the D3 method", &
     359              :                           usage="DISPERSION_PARAMETER_FILE filename", &
     360        10278 :                           n_var=1, type_of_var=char_t, default_c_val="")
     361        10278 :       CALL section_add_keyword(section, keyword)
     362        10278 :       CALL keyword_release(keyword)
     363              : 
     364              :       CALL keyword_create(keyword, __LOCATION__, name="DISPERSION_RADIUS", &
     365              :                           description="Define radius of dispersion interaction", &
     366        10278 :                           usage="DISPERSION_RADIUS", default_r_val=15._dp)
     367        10278 :       CALL section_add_keyword(section, keyword)
     368        10278 :       CALL keyword_release(keyword)
     369              : 
     370              :       CALL keyword_create(keyword, __LOCATION__, name="COORDINATION_CUTOFF", &
     371              :                           description="Define cutoff for coordination number calculation", &
     372        10278 :                           usage="COORDINATION_CUTOFF", default_r_val=1.e-6_dp)
     373        10278 :       CALL section_add_keyword(section, keyword)
     374        10278 :       CALL keyword_release(keyword)
     375              : 
     376              :       CALL keyword_create(keyword, __LOCATION__, name="D3_SCALING", &
     377              :                           description="Scaling parameters (s6,sr6,s8) for the D3 dispersion method,", &
     378        10278 :                           usage="D3_SCALING 1.0 1.0 1.0", n_var=3, default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp])
     379        10278 :       CALL section_add_keyword(section, keyword)
     380        10278 :       CALL keyword_release(keyword)
     381              : 
     382              :       CALL keyword_create(keyword, __LOCATION__, name="D3BJ_SCALING", &
     383              :                           description="Scaling parameters (s6,a1,s8,a2) for the D3(BJ) dispersion method,", &
     384              :                           usage="D3BJ_SCALING 1.0 1.0 1.0 1.0", n_var=4, &
     385        10278 :                           default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp])
     386        10278 :       CALL section_add_keyword(section, keyword)
     387        10278 :       CALL keyword_release(keyword)
     388              : 
     389              :       CALL keyword_create(keyword, __LOCATION__, name="D2_SCALING", &
     390              :                           description="Scaling parameter for the D2 dispersion method,", &
     391        10278 :                           usage="D2_SCALING 1.0", default_r_val=1.0_dp)
     392        10278 :       CALL section_add_keyword(section, keyword)
     393        10278 :       CALL keyword_release(keyword)
     394              : 
     395              :       CALL keyword_create(keyword, __LOCATION__, name="D2_EXP_PRE", &
     396              :                           description="Exp prefactor for damping for the D2 dispersion method,", &
     397        10278 :                           usage="D2_EXP_PRE 2.0", default_r_val=2.0_dp)
     398        10278 :       CALL section_add_keyword(section, keyword)
     399        10278 :       CALL keyword_release(keyword)
     400              : 
     401              :       CALL keyword_create(keyword, __LOCATION__, name="HB_SR_PARAM", &
     402              :                           description="Uses a modified version for the GAMMA within the SCC-DFTB scheme, "// &
     403              :                           "specifically tuned for hydrogen bonds. Specify the exponent used in the exponential.", &
     404        10278 :                           usage="HB_SR_PARAM {real}", default_r_val=4.0_dp)
     405        10278 :       CALL section_add_keyword(section, keyword)
     406        10278 :       CALL keyword_release(keyword)
     407              : 
     408        10278 :    END SUBROUTINE create_dftb_parameter_section
     409              : 
     410              : ! **************************************************************************************************
     411              : !> \brief ...
     412              : !> \param section ...
     413              : ! **************************************************************************************************
     414        10278 :    SUBROUTINE create_xtb_parameter_section(section)
     415              : 
     416              :       TYPE(section_type), POINTER                        :: section
     417              : 
     418              :       TYPE(keyword_type), POINTER                        :: keyword
     419              : 
     420        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
     421              : 
     422              :       CALL section_create(section, __LOCATION__, name="PARAMETER", &
     423              :                           description="Information on and where to find xTB parameters", &
     424        10278 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     425              : 
     426        10278 :       NULLIFY (keyword)
     427              :       CALL keyword_create(keyword, __LOCATION__, name="PARAM_FILE_PATH", &
     428              :                           description="Specify the directory with the xTB parameter file. ", &
     429              :                           usage="PARAM_FILE_PATH pathname", &
     430        10278 :                           n_var=1, type_of_var=char_t, default_c_val="")
     431        10278 :       CALL section_add_keyword(section, keyword)
     432        10278 :       CALL keyword_release(keyword)
     433              : 
     434              :       CALL keyword_create(keyword, __LOCATION__, name="PARAM_FILE_NAME", &
     435              :                           description="Specify file that contains all xTB default parameters. ", &
     436              :                           usage="PARAM_FILE_NAME filename", &
     437        10278 :                           n_var=1, type_of_var=char_t, default_c_val="xTB_parameters")
     438        10278 :       CALL section_add_keyword(section, keyword)
     439        10278 :       CALL keyword_release(keyword)
     440              : 
     441              :       CALL keyword_create(keyword, __LOCATION__, name="DISPERSION_PARAMETER_FILE", &
     442              :                           description="Specify file that contains the atomic dispersion "// &
     443              :                           "parameters for the D3 method", &
     444              :                           usage="DISPERSION_PARAMETER_FILE filename", &
     445        10278 :                           n_var=1, type_of_var=char_t, default_c_val="dftd3.dat")
     446        10278 :       CALL section_add_keyword(section, keyword)
     447        10278 :       CALL keyword_release(keyword)
     448              : 
     449              :       CALL keyword_create(keyword, __LOCATION__, name="DISPERSION_RADIUS", &
     450              :                           description="Define radius of dispersion interaction", &
     451        10278 :                           usage="DISPERSION_RADIUS", default_r_val=15._dp)
     452        10278 :       CALL section_add_keyword(section, keyword)
     453        10278 :       CALL keyword_release(keyword)
     454              : 
     455              :       CALL keyword_create(keyword, __LOCATION__, name="COORDINATION_CUTOFF", &
     456              :                           description="Define cutoff for coordination number calculation", &
     457        10278 :                           usage="COORDINATION_CUTOFF", default_r_val=1.e-6_dp)
     458        10278 :       CALL section_add_keyword(section, keyword)
     459        10278 :       CALL keyword_release(keyword)
     460              : 
     461              :       CALL keyword_create(keyword, __LOCATION__, name="D3BJ_SCALING", &
     462              :                           description="Scaling parameters (s6,s8) for the D3 dispersion method.", &
     463        10278 :                           usage="D3BJ_SCALING 1.0 2.4", n_var=2, default_r_vals=[1.0_dp, 2.4_dp])
     464        10278 :       CALL section_add_keyword(section, keyword)
     465        10278 :       CALL keyword_release(keyword)
     466              : 
     467              :       CALL keyword_create(keyword, __LOCATION__, name="D3BJ_PARAM", &
     468              :                           description="Becke-Johnson parameters (a1, a2 for the D3 dispersion method.", &
     469        10278 :                           usage="D3BJ_PARAM 0.63 5.0", n_var=2, default_r_vals=[0.63_dp, 5.0_dp])
     470        10278 :       CALL section_add_keyword(section, keyword)
     471        10278 :       CALL keyword_release(keyword)
     472              : 
     473              :       CALL keyword_create(keyword, __LOCATION__, name="HUCKEL_CONSTANTS", &
     474              :                           description="Huckel parameters (s, p, d, sp, 2sH).", &
     475              :                           usage="HUCKEL_CONSTANTS 1.85 2.25 2.00 2.08 2.85", n_var=5, &
     476        10278 :                           default_r_vals=[1.85_dp, 2.25_dp, 2.00_dp, 2.08_dp, 2.85_dp])
     477        10278 :       CALL section_add_keyword(section, keyword)
     478        10278 :       CALL keyword_release(keyword)
     479              : 
     480              :       CALL keyword_create(keyword, __LOCATION__, name="COULOMB_CONSTANTS", &
     481              :                           description="Scaling parameters for Coulomb interactions (electrons, nuclei).", &
     482              :                           usage="COULOMB_CONSTANTS 2.00 1.50", n_var=2, &
     483        10278 :                           default_r_vals=[2.00_dp, 1.50_dp])
     484        10278 :       CALL section_add_keyword(section, keyword)
     485        10278 :       CALL keyword_release(keyword)
     486              : 
     487              :       CALL keyword_create(keyword, __LOCATION__, name="CN_CONSTANTS", &
     488              :                           description="Scaling parameters for Coordination number correction term.", &
     489              :                           usage="CN_CONSTANTS 0.006 -0.003 -0.005", n_var=3, &
     490        10278 :                           default_r_vals=[0.006_dp, -0.003_dp, -0.005_dp])
     491        10278 :       CALL section_add_keyword(section, keyword)
     492        10278 :       CALL keyword_release(keyword)
     493              : 
     494              :       CALL keyword_create(keyword, __LOCATION__, name="EN_CONSTANTS", &
     495              :                           description="Scaling parameters for electronegativity correction term.", &
     496              :                           usage="EN_CONSTANTS -0.007 0.000 0.000", n_var=3, &
     497        10278 :                           default_r_vals=[-0.007_dp, 0.000_dp, 0.000_dp])
     498        10278 :       CALL section_add_keyword(section, keyword)
     499        10278 :       CALL keyword_release(keyword)
     500              : 
     501              :       CALL keyword_create(keyword, __LOCATION__, name="BEN_CONSTANT", &
     502              :                           description="Scaling parameter for electronegativity correction term.", &
     503              :                           usage="BEN_CONSTANT 4.0", n_var=1, &
     504        10278 :                           default_r_val=4.0_dp)
     505        10278 :       CALL section_add_keyword(section, keyword)
     506        10278 :       CALL keyword_release(keyword)
     507              : 
     508              :       CALL keyword_create(keyword, __LOCATION__, name="ENSCALE", &
     509              :                           description="Scaling parameter repulsive energy (dEN in exponential).", &
     510              :                           usage="ENSCALE 0.01", n_var=1, &
     511        10278 :                           default_r_val=0.0_dp)
     512        10278 :       CALL section_add_keyword(section, keyword)
     513        10278 :       CALL keyword_release(keyword)
     514              : 
     515              :       CALL keyword_create(keyword, __LOCATION__, name="HALOGEN_BINDING", &
     516              :                           description="Scaling parameters for electronegativity correction term.", &
     517        10278 :                           usage="HALOGEN_BINDING 1.30 0.44", n_var=2, default_r_vals=[1.30_dp, 0.44_dp])
     518        10278 :       CALL section_add_keyword(section, keyword)
     519        10278 :       CALL keyword_release(keyword)
     520              : 
     521              :       CALL keyword_create(keyword, __LOCATION__, name="KAB_PARAM", &
     522              :                           description="Specifies the specific Kab value for types A and B.", &
     523              :                           usage="KAB_PARAM kind1 kind2 value ", repeats=.TRUE., &
     524        10278 :                           n_var=-1, type_of_var=char_t)
     525        10278 :       CALL section_add_keyword(section, keyword)
     526        10278 :       CALL keyword_release(keyword)
     527              : 
     528              :       CALL keyword_create(keyword, __LOCATION__, name="XB_RADIUS", &
     529              :                           description="Specifies the radius [Bohr] of the XB pair interaction in xTB.", &
     530              :                           usage="XB_RADIUS 20.0 ", repeats=.FALSE., &
     531        10278 :                           n_var=1, default_r_val=20.0_dp)
     532        10278 :       CALL section_add_keyword(section, keyword)
     533        10278 :       CALL keyword_release(keyword)
     534              : 
     535              :       CALL keyword_create(keyword, __LOCATION__, name="COULOMB_SR_CUT", &
     536              :                           description="Maximum range of short range part of Coulomb interaction.", &
     537              :                           usage="COULOMB_SR_CUT 20.0 ", repeats=.FALSE., &
     538        10278 :                           n_var=1, default_r_val=20.0_dp)
     539        10278 :       CALL section_add_keyword(section, keyword)
     540        10278 :       CALL keyword_release(keyword)
     541              : 
     542              :       CALL keyword_create(keyword, __LOCATION__, name="COULOMB_SR_EPS", &
     543              :                           description="Cutoff for short range part of Coulomb interaction.", &
     544              :                           usage="COULOMB_SR_EPS 1.E-3 ", repeats=.FALSE., &
     545        10278 :                           n_var=1, default_r_val=1.0E-03_dp)
     546        10278 :       CALL section_add_keyword(section, keyword)
     547        10278 :       CALL keyword_release(keyword)
     548              : 
     549              :       CALL keyword_create(keyword, __LOCATION__, name="SRB_PARAMETER", &
     550              :                           description="SRB parameters (ksrb, esrb, gscal, c1, c2, shift).", &
     551              :                           usage="SRB_PARAMETER -0.0129 3.48 0.51 -1.71 2.11 0.0537", n_var=6, &
     552              :                           default_r_vals=[-0.0129_dp, 3.4847_dp, 0.5097_dp, &
     553        10278 :                                           -1.70549806_dp, 2.10878369_dp, 0.0537_dp])
     554        10278 :       CALL section_add_keyword(section, keyword)
     555        10278 :       CALL keyword_release(keyword)
     556              : 
     557        10278 :    END SUBROUTINE create_xtb_parameter_section
     558              : ! **************************************************************************************************
     559              : !> \brief ...
     560              : !> \param section ...
     561              : ! **************************************************************************************************
     562        10278 :    SUBROUTINE create_xtb_nonbonded_section(section)
     563              :       TYPE(section_type), POINTER                        :: section
     564              : 
     565              :       TYPE(keyword_type), POINTER                        :: keyword
     566              :       TYPE(section_type), POINTER                        :: subsection
     567              : 
     568        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
     569              :       CALL section_create(section, __LOCATION__, name="NONBONDED", &
     570              :                           description="This section specifies the input parameters for NON-BONDED interactions.", &
     571        10278 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     572        10278 :       NULLIFY (subsection)
     573              : 
     574        10278 :       CALL create_GENPOT_section(subsection)
     575        10278 :       CALL section_add_subsection(section, subsection)
     576        10278 :       CALL section_release(subsection)
     577              : 
     578        10278 :       NULLIFY (keyword)
     579              :       CALL keyword_create(keyword, __LOCATION__, name="DX", &
     580              :                           description="Parameter used for computing the derivative with the Ridders' method.", &
     581        10278 :                           usage="DX <REAL>", default_r_val=0.1_dp, unit_str="bohr")
     582        10278 :       CALL section_add_keyword(section, keyword)
     583        10278 :       CALL keyword_release(keyword)
     584              : 
     585              :       CALL keyword_create(keyword, __LOCATION__, name="ERROR_LIMIT", &
     586              :                           description="Checks that the error in computing the derivative is not larger than "// &
     587              :                           "the value set; in case error is larger a warning message is printed.", &
     588        10278 :                           usage="ERROR_LIMIT <REAL>", default_r_val=1.0E-12_dp)
     589        10278 :       CALL section_add_keyword(section, keyword)
     590        10278 :       CALL keyword_release(keyword)
     591              : 
     592        10278 :    END SUBROUTINE create_xtb_nonbonded_section
     593              : ! **************************************************************************************************
     594              : !> \brief Creates the &TBLITE section
     595              : !> \param section the section to create
     596              : !> \author JVP
     597              : ! **************************************************************************************************
     598        10278 :    SUBROUTINE create_xtb_tblite_section(section)
     599              :       TYPE(section_type), POINTER                        :: section
     600              : 
     601              :       TYPE(keyword_type), POINTER                        :: keyword
     602              :       TYPE(section_type), POINTER                        :: subsection
     603              : 
     604        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
     605              :       CALL section_create(section, __LOCATION__, name="TBLITE", &
     606              :                           description="Section used to specify options for an xTB computation using tblite. "// &
     607              :                           "This section is required when XTB/GFN_TYPE is set to TBLITE. "// &
     608              :                           "Periodicity follows SUBSYS/CELL/PERIODIC; the deprecated XTB/DO_EWALD keyword "// &
     609              :                           "is read consistently with CP2K-internal xTB for diagnostics/debugging. "// &
     610              :                           "Initial densities and restarts are controlled by the regular CP2K SCF settings, "// &
     611              :                           "for example DFT/SCF/SCF_GUESS, not by a separate tblite guess in this section. "// &
     612              :                           "Spin-polarized CP2K/tblite calculations are selected with the regular DFT/UKS keyword "// &
     613              :                           "or its LSD/SPIN_POLARIZED aliases; DFT/MULTIPLICITY sets the number of unpaired "// &
     614              :                           "electrons. UKS uses tblite's spin-polarized Hamiltonian; AUTO selects the native tblite "// &
     615              :                           "SCC mixer for XTB/GFN_TYPE TBLITE, while SCC_MIXER CP2K mixes both total-charge and "// &
     616              :                           "magnetization SCC variables through CP2K's TB charge-mixing infrastructure. Native "// &
     617              :                           "tblite SCC convergence follows ACCURACY; SCC_MIXER CP2K follows the regular CP2K "// &
     618              :                           "SCF convergence settings such as DFT/SCF/EPS_SCF. With QS/LS_SCF, CP2K disables the "// &
     619              :                           "separate SCC-variable mixer and lets LS_SCF optimize the density matrix directly. "// &
     620              :                           "The same direct SCC-variable update is available for Gamma-point OT calculations, "// &
     621              :                           "where smearing and ADDED_MOS are not supported.", &
     622        20556 :                           n_keywords=1, n_subsections=1, repeats=.FALSE., citations=[Katbashev2025])
     623              : 
     624        10278 :       NULLIFY (keyword)
     625              :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
     626              :                           description="Marks the tblite options section as present. The actual switch to the tblite "// &
     627              :                           "backend is XTB/GFN_TYPE TBLITE; this section then collects the numerical model, SCC "// &
     628              :                           "mixing, and optional native-reference settings used by that backend.", &
     629        10278 :                           lone_keyword_l_val=.TRUE., default_l_val=.FALSE.)
     630        10278 :       CALL section_add_keyword(section, keyword)
     631        10278 :       CALL keyword_release(keyword)
     632              : 
     633        10278 :       NULLIFY (keyword)
     634              :       CALL keyword_create(keyword, __LOCATION__, name="METHOD", &
     635              :                           description="Selects the xTB Hamiltonian model used by tblite. Without PARAM this chooses "// &
     636              :                           "one of tblite's built-in parametrizations, including the basis, reference occupations, "// &
     637              :                           "repulsion, dispersion, electrostatic, and coordination-number dependent terms. When PARAM "// &
     638              :                           "is given, METHOD remains the declared model family that the custom parametrization is "// &
     639              :                           "expected to implement and that CP2K uses for method-dependent setup and diagnostics.", &
     640              :                           usage="METHOD (GFN1|GFN2|IPEA1)", &
     641              :                           enum_c_vals=s2a("GFN1", "GFN2", "IPEA1"), &
     642              :                           enum_i_vals=[gfn1xtb, gfn2xtb, ipea1xtb], &
     643              :                           enum_desc=s2a("Uses the GFN1-XTB method by Grimme.", &
     644              :                                         "Uses the GFN2-XTB method by Grimme.", &
     645              :                                         "Uses the IPEA1 method by Grimme."), &
     646        10278 :                           default_i_val=gfn2xtb)
     647        10278 :       CALL section_add_keyword(section, keyword)
     648        10278 :       CALL keyword_release(keyword)
     649              : 
     650              :       CALL keyword_create(keyword, __LOCATION__, name="PARAM", &
     651              :                           description="Custom tblite parametrization file. The file is read by tblite and used to "// &
     652              :                           "construct the xTB calculator instead of the built-in parameter table for METHOD. It may "// &
     653              :                           "therefore change model constants such as Hamiltonian, repulsion, dispersion, electrostatic, "// &
     654              :                           "and coordination-number response parameters. It does not change the CP2K charge, spin, "// &
     655              :                           "cell, k-point, or SCF setup. The parametrization must be compatible with the selected "// &
     656              :                           "METHOD; CP2K does not reinterpret or validate the physical content of the file.", &
     657        10278 :                           usage="PARAM filename", n_var=1, type_of_var=char_t, default_c_val="")
     658        10278 :       CALL section_add_keyword(section, keyword)
     659        10278 :       CALL keyword_release(keyword)
     660              : 
     661        10278 :       NULLIFY (keyword)
     662              :       CALL keyword_create(keyword, __LOCATION__, name="ACCURACY", &
     663              :                           description="Numerical accuracy factor for the CP2K/tblite backend. This scales tblite's "// &
     664              :                           "internal accuracy-dependent thresholds. With the native tblite SCC mixer, this is the "// &
     665              :                           "user-visible convergence control and corresponds to native tblite's --acc setting. With "// &
     666              :                           "SCC_MIXER CP2K, SCF convergence instead follows DFT/SCF/EPS_SCF; ACCURACY still controls "// &
     667              :                           "the tblite numerical setup, such as the distance cutoff used to build the xTB basis and "// &
     668              :                           "neighbor data. "// &
     669              :                           "The default matches native tblite. Smaller values make the calculation tighter and usually "// &
     670              :                           "more expensive; larger values loosen the numerical setup and can affect energies, forces, "// &
     671              :                           "and stress. Native REFERENCE_CLI diagnostics inherit this value so the production and "// &
     672              :                           "external reference calculations use the same accuracy setting.", &
     673        10278 :                           usage="ACCURACY 1.0", default_r_val=1.0_dp)
     674        10278 :       CALL section_add_keyword(section, keyword)
     675        10278 :       CALL keyword_release(keyword)
     676              : 
     677        10278 :       NULLIFY (keyword)
     678              :       CALL keyword_create(keyword, __LOCATION__, name="REFERENCE_CLI", &
     679              :                           description="Enable an optional diagnostic comparison against an external native tblite "// &
     680              :                           "command line calculation. CP2K writes the current geometry, charge, spin, method, optional "// &
     681              :                           "PARAM file, electronic temperature, and requested reference settings to temporary files, "// &
     682              :                           "runs the external program, and compares the resulting energy, gradient, and optionally "// &
     683              :                           "virial with the CP2K/tblite values. This check is meant for debugging backend consistency, "// &
     684              :                           "not for production sampling. The native tblite CLI exposes only an electronic temperature "// &
     685              :                           "for the occupation broadening; if CP2K uses another smearing method, the reference run "// &
     686              :                           "prints a warning and uses Fermi-Dirac smearing with the CP2K electronic temperature. "// &
     687              :                           "If true, the XTB/TBLITE/REFERENCE_CLI section must be present. "// &
     688              :                           "The check is also enabled whenever that section is present. It is skipped for CP2K "// &
     689              :                           "multi-k-point calculations, because the native tblite CLI does not reproduce CP2K KPOINTS "// &
     690              :                           "sampling.", &
     691        10278 :                           usage="REFERENCE_CLI", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
     692        10278 :       CALL section_add_keyword(section, keyword)
     693        10278 :       CALL keyword_release(keyword)
     694              : 
     695        10278 :       NULLIFY (subsection)
     696        10278 :       CALL create_xtb_reference_cli_section(subsection)
     697        10278 :       CALL section_add_subsection(section, subsection)
     698        10278 :       CALL section_release(subsection)
     699              : 
     700        10278 :    END SUBROUTINE create_xtb_tblite_section
     701              : 
     702              : ! **************************************************************************************************
     703              : !> \brief Creates the common &TBLITE_MIXER section for TB SCC-variable mixing.
     704              : !> \param section section to create
     705              : ! **************************************************************************************************
     706        20556 :    SUBROUTINE create_tblite_mixer_section(section)
     707              :       TYPE(section_type), POINTER                        :: section
     708              : 
     709              :       TYPE(keyword_type), POINTER                        :: keyword
     710              : 
     711        20556 :       CPASSERT(.NOT. ASSOCIATED(section))
     712              :       CALL section_create(section, __LOCATION__, name="TBLITE_MIXER", &
     713              :                           description="Controls tblite's modified Broyden SCC-variable mixer when SCC_MIXER is set "// &
     714              :                           "to TBLITE, either explicitly or through AUTO where AUTO selects tblite. The mixer "// &
     715              :                           "variables are the self-consistent "// &
     716              :                           "xTB/DFTB populations and, for methods that require them, atomic multipoles. ITERATIONS "// &
     717              :                           "limits the number of tblite SCC-mixer updates, while MEMORY controls how many previous "// &
     718              :                           "Broyden update vectors are retained. These are independent quantities when MEMORY is set "// &
     719              :                           "explicitly; otherwise MEMORY follows ITERATIONS, matching the tblite library default. "// &
     720              :                           "DAMPING controls the size of the retained population/multipole update. OMEGA0, "// &
     721              :                           "MIN_WEIGHT, MAX_WEIGHT, and WEIGHT_FACTOR expose tblite's modified-Broyden weighting "// &
     722              :                           "constants. ITERATIONS is the tblite-side SCC-mixer update limit and defaults to the "// &
     723              :                           "native tblite value of 250. When SCC_MIXER is explicitly set to TBLITE, CP2K also "// &
     724              :                           "sets the regular DFT/SCF/MAX_SCF limit to ITERATIONS so that the tblite SCC cycle is "// &
     725              :                           "not truncated by CP2K's default SCF limit. With SCC_MIXER AUTO or CP2K, DFT/SCF/MAX_SCF "// &
     726              :                           "keeps its normal CP2K meaning. This section configures the tblite SCC mixer, not the "// &
     727              :                           "regular CP2K charge mixer. With SCC_MIXER CP2K, the CP2K-side SCC-variable mixer is "// &
     728              :                           "controlled by DFT/SCF/MIXING. With QS/LS_SCF, this section is ignored and CP2K resets "// &
     729              :                           "SCC_MIXER to NONE internally, because LS_SCF performs the density-matrix optimization "// &
     730              :                           "instead of a separate SCC-variable mixing step. Native tblite "// &
     731              :                           "REFERENCE_CLI diagnostics inherit this section. ITERATIONS and SOLVER are representable "// &
     732              :                           "by tblite run directly; CP2K reports inherited MEMORY, DAMPING, or Broyden-weight settings "// &
     733              :                           "that native tblite CLI cannot reproduce.", &
     734        20556 :                           n_keywords=1, repeats=.FALSE.)
     735              : 
     736        20556 :       NULLIFY (keyword)
     737              :       CALL keyword_create(keyword, __LOCATION__, name="ITERATIONS", &
     738              :                           description="Maximum number of tblite SCC-mixer updates. This is the tblite-side SCC "// &
     739              :                           "iteration limit, matching native tblite's --iterations setting for reference CLI "// &
     740              :                           "diagnostics. For explicit SCC_MIXER TBLITE runs, CP2K synchronizes DFT/SCF/MAX_SCF to "// &
     741              :                           "this value. For SCC_MIXER AUTO or CP2K, DFT/SCF/MAX_SCF remains the normal CP2K "// &
     742              :                           "SCF-loop iteration limit. ITERATIONS is independent of MEMORY, which controls the "// &
     743              :                           "Broyden history length.", &
     744        20556 :                           usage="ITERATIONS 250", default_i_val=tblite_mixer_iterations_default)
     745        20556 :       CALL section_add_keyword(section, keyword)
     746        20556 :       CALL keyword_release(keyword)
     747              : 
     748              :       CALL keyword_create(keyword, __LOCATION__, name="MEMORY", &
     749              :                           description="Number of previous modified-Broyden update vectors kept by the tblite SCC "// &
     750              :                           "mixer. This is a history length, not an iteration limit. Larger values retain more "// &
     751              :                           "history and use more memory; smaller values reduce the history and can be more robust for "// &
     752              :                           "difficult SCC cycles. A value of zero means library default: inherit ITERATIONS, as native "// &
     753              :                           "tblite does when it constructs the Broyden mixer from calc%max_iter.", &
     754        20556 :                           usage="MEMORY 250", default_i_val=tblite_mixer_memory_inherit)
     755        20556 :       CALL section_add_keyword(section, keyword)
     756        20556 :       CALL keyword_release(keyword)
     757              : 
     758              :       CALL keyword_create(keyword, __LOCATION__, name="SOLVER", &
     759              :                           description="Electronic eigensolver selected for native tblite SCC calculations where "// &
     760              :                           "tblite owns the electronic solve, and forwarded to native REFERENCE_CLI diagnostics as "// &
     761              :                           "tblite run --solver. GVD is tblite's default LAPACK divide-and-conquer generalized "// &
     762              :                           "symmetric eigensolver. GVR selects LAPACK's relatively robust generalized symmetric "// &
     763              :                           "eigensolver. Production CP2K/tblite calculations still use CP2K's electronic "// &
     764              :                           "diagonalization machinery.", &
     765              :                           usage="SOLVER (GVD|GVR)", &
     766              :                           enum_c_vals=s2a("GVD", "GVR"), &
     767              :                           enum_i_vals=[tblite_solver_gvd, tblite_solver_gvr], &
     768              :                           enum_desc=s2a("Use LAPACK's divide-and-conquer generalized symmetric eigensolver.", &
     769              :                                         "Use LAPACK's relatively robust generalized symmetric eigensolver."), &
     770        20556 :                           default_i_val=tblite_solver_gvd)
     771        20556 :       CALL section_add_keyword(section, keyword)
     772        20556 :       CALL keyword_release(keyword)
     773              : 
     774              :       CALL keyword_create(keyword, __LOCATION__, name="DAMPING", &
     775              :                           description="Damping parameter for the tblite modified Broyden SCC mixer. It controls the "// &
     776              :                           "size of the population/multipole update retained by the native tblite mixer between SCC "// &
     777              :                           "iterations. Smaller values damp oscillatory SCC cycles more strongly but may slow "// &
     778              :                           "convergence; larger values can accelerate well-behaved cases but may destabilize difficult "// &
     779              :                           "ones. For CP2K-internal GFN1-xTB UKS k-point calculations with explicit SCC_MIXER TBLITE, "// &
     780              :                           "CP2K uses a conservative damping of 0.25 unless DAMPING is set explicitly.", &
     781        20556 :                           usage="DAMPING 0.4", default_r_val=tblite_mixer_damping_default)
     782        20556 :       CALL section_add_keyword(section, keyword)
     783        20556 :       CALL keyword_release(keyword)
     784              : 
     785              :       CALL keyword_create(keyword, __LOCATION__, name="OMEGA0", &
     786              :                           description="Regularization weight added to the diagonal of tblite's modified-Broyden "// &
     787              :                           "linear system. The default matches the hard-coded value in native tblite and damps nearly "// &
     788              :                           "singular history updates without changing the first simple-damping step.", &
     789        20556 :                           usage="OMEGA0 0.01", default_r_val=tblite_mixer_omega0_default)
     790        20556 :       CALL section_add_keyword(section, keyword)
     791        20556 :       CALL keyword_release(keyword)
     792              : 
     793              :       CALL keyword_create(keyword, __LOCATION__, name="MIN_WEIGHT", &
     794              :                           description="Lower bound for the dynamic Broyden history weight derived from the current "// &
     795              :                           "SCC residual. The default matches native tblite and prevents tiny weights from removing "// &
     796              :                           "history vectors from the update.", &
     797        20556 :                           usage="MIN_WEIGHT 1.0", default_r_val=tblite_mixer_min_weight_default)
     798        20556 :       CALL section_add_keyword(section, keyword)
     799        20556 :       CALL keyword_release(keyword)
     800              : 
     801              :       CALL keyword_create(keyword, __LOCATION__, name="MAX_WEIGHT", &
     802              :                           description="Upper bound for the dynamic Broyden history weight derived from the current "// &
     803              :                           "SCC residual. The default matches native tblite and caps the influence of very small "// &
     804              :                           "residual norms.", &
     805        20556 :                           usage="MAX_WEIGHT 100000.0", default_r_val=tblite_mixer_max_weight_default)
     806        20556 :       CALL section_add_keyword(section, keyword)
     807        20556 :       CALL keyword_release(keyword)
     808              : 
     809              :       CALL keyword_create(keyword, __LOCATION__, name="WEIGHT_FACTOR", &
     810              :                           description="Residual-to-weight scaling factor used by tblite's modified Broyden mixer. "// &
     811              :                           "For a residual norm above WEIGHT_FACTOR/MAX_WEIGHT, the dynamic weight is approximately "// &
     812              :                           "WEIGHT_FACTOR divided by that residual norm; otherwise MAX_WEIGHT is used before applying "// &
     813              :                           "MIN_WEIGHT. The default matches native tblite.", &
     814        20556 :                           usage="WEIGHT_FACTOR 0.01", default_r_val=tblite_mixer_weight_factor_default)
     815        20556 :       CALL section_add_keyword(section, keyword)
     816        20556 :       CALL keyword_release(keyword)
     817              : 
     818        20556 :    END SUBROUTINE create_tblite_mixer_section
     819              : 
     820              : ! **************************************************************************************************
     821              : !> \brief Adds common SCC-mixer keywords for TB methods.
     822              : !> \param section section receiving the keywords
     823              : !> \param TARGET method/path description for the manual text
     824              : !> \param auto_desc AUTO behavior for this section
     825              : ! **************************************************************************************************
     826        20556 :    SUBROUTINE add_tb_scc_mixer_keywords(section, TARGET, auto_desc)
     827              :       TYPE(section_type), POINTER                        :: section
     828              :       CHARACTER(LEN=*), INTENT(IN)                       :: target, auto_desc
     829              : 
     830              :       TYPE(keyword_type), POINTER                        :: keyword
     831              : 
     832        20556 :       NULLIFY (keyword)
     833              :       CALL keyword_create(keyword, __LOCATION__, name="SCC_MIXER", &
     834              :                           description="Selects the SCC variable mixer for "//TARGET//" calculations. "// &
     835              :                           auto_desc//" The SCC variables are the model populations and, where required by the "// &
     836              :                           "selected method, atomic multipoles that feed the self-consistent xTB potential. TBLITE "// &
     837              :                           "uses tblite's modified Broyden mixer for those variables inside the CP2K SCF cycle. CP2K "// &
     838              :                           "maps the variables onto CP2K's charge-mixing infrastructure. When TBLITE is active, the "// &
     839              :                           "native SCC convergence follows XTB/TBLITE/ACCURACY and the tblite-side SCC update limit "// &
     840              :                           "follows TBLITE_MIXER/ITERATIONS. If SCC_MIXER is explicitly set to TBLITE, CP2K also "// &
     841              :                           "sets DFT/SCF/MAX_SCF to TBLITE_MIXER/ITERATIONS. With SCC_MIXER AUTO or CP2K, MAX_SCF "// &
     842              :                           "keeps its normal CP2K meaning. With QS/LS_SCF, explicit SCC_MIXER settings are reset to "// &
     843              :                           "NONE internally and CP2K emits a warning; LS_SCF controls the density-matrix optimization. "// &
     844              :                           "When CP2K is active, convergence follows the normal CP2K SCF "// &
     845              :                           "controls, in particular DFT/SCF/EPS_SCF and DFT/SCF/MIXING. For GFN2/tblite, the CP2K "// &
     846              :                           "mixer acts on the full SCC-variable set: shell charges plus atomic dipole and quadrupole "// &
     847              :                           "variables. CP2K-internal GFN0-xTB has no SCC variables to mix, so AUTO and NONE are "// &
     848              :                           "equivalent there and explicit CP2K or TBLITE mixer choices are reset to NONE. For "// &
     849              :                           "CP2K-internal GFN1 and DFTB/DFTB3, the SCC variables are only charge or shell-charge like. The "// &
     850              :                           "initial SCC variables are seeded from CP2K's current density, so DFT/SCF/SCF_GUESS and "// &
     851              :                           "DFT/WFN_RESTART_FILE_NAME define the starting point. NONE performs direct updates without "// &
     852              :                           "mixing and is intended for debugging, since it can be unstable.", &
     853              :                           usage="SCC_MIXER (AUTO|TBLITE|CP2K|NONE)", &
     854              :                           enum_c_vals=s2a("AUTO", "TBLITE", "CP2K", "NONE"), &
     855              :                           enum_i_vals=[tblite_scc_mixer_auto, tblite_scc_mixer_tblite, &
     856              :                                        tblite_scc_mixer_cp2k, tblite_scc_mixer_none], &
     857              :                           enum_desc=s2a("Default method-dependent choice.", &
     858              :                                         "Use the tblite modified Broyden SCC mixer.", &
     859              :                                         "Use CP2K charge mixing for SCC variables.", &
     860              :                                         "Do not mix SCC variables; for debugging."), &
     861        20556 :                           default_i_val=tblite_scc_mixer_auto)
     862        20556 :       CALL section_add_keyword(section, keyword)
     863        20556 :       CALL keyword_release(keyword)
     864              : 
     865        20556 :    END SUBROUTINE add_tb_scc_mixer_keywords
     866              : 
     867              : ! **************************************************************************************************
     868              : !> \brief Creates the &REFERENCE_CLI section used to compare against native tblite.
     869              : !> \param section the section to create
     870              : ! **************************************************************************************************
     871        10278 :    SUBROUTINE create_xtb_reference_cli_section(section)
     872              :       TYPE(section_type), POINTER                        :: section
     873              : 
     874              :       TYPE(keyword_type), POINTER                        :: keyword
     875              :       TYPE(section_type), POINTER                        :: subsection
     876              : 
     877        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
     878              :       CALL section_create(section, __LOCATION__, name="REFERENCE_CLI", &
     879              :                           description="Run the native tblite command line interface as a reference "// &
     880              :                           "for CP2K/tblite energies, nuclear gradients, and optionally virials. "// &
     881              :                           "The section is a lone section: if it is present, the reference check is enabled. By default "// &
     882              :                           "the native CLI calculation inherits the CP2K/tblite method, PARAM file, ACCURACY, charge, "// &
     883              :                           "spin state, spin-polarized Hamiltonian setting, electronic temperature, "// &
     884              :                           "TBLITE_MIXER/ITERATIONS, and TBLITE_MIXER/SOLVER from the surrounding input. CP2K forwards "// &
     885              :                           "DFT/UKS, including its LSD and SPIN_POLARIZED aliases, as native tblite "// &
     886              :                           "--spin-polarized; DFT/MULTIPLICITY is forwarded separately as --spin. "// &
     887              :                           "REFERENCE_CLI/EFIELD can add a homogeneous electric field to the "// &
     888              :                           "external native tblite command only. REFERENCE_CLI/IMPLICIT_SOLVATION can add native "// &
     889              :                           "tblite implicit-solvent settings to the external reference command only. "// &
     890              :                           "Native tblite run does not expose independent options for mixer MEMORY, DAMPING, OMEGA0, "// &
     891              :                           "MIN_WEIGHT, MAX_WEIGHT, or WEIGHT_FACTOR; CP2K warns if these inherited production settings "// &
     892              :                           "cannot be reproduced and aborts when STOP_ON_ERROR is enabled. "// &
     893              :                           "Native CLI verbosity follows GLOBAL/PRINT_LEVEL: SILENT is forwarded as --silent, and "// &
     894              :                           "HIGH or DEBUG are forwarded as --verbose. "// &
     895              :                           "It remains a diagnostic one-shot calculation from temporary input files and is independent "// &
     896              :                           "of CP2K's SCF history, diagonalization, and k-point machinery. If RESTART "// &
     897              :                           "is set, the named native tblite restart file is passed to the external command. Non-Fermi "// &
     898              :                           "CP2K smearing methods cannot be represented by native tblite and are replaced by a "// &
     899              :                           "Fermi-Dirac electronic temperature in the reference command with an explicit warning.", &
     900        10278 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
     901              : 
     902        10278 :       NULLIFY (keyword)
     903              :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
     904              :                           description="Activates the native tblite CLI reference check when the section is present. "// &
     905              :                           "The check compares CP2K/tblite against a freshly executed external tblite calculation.", &
     906        10278 :                           lone_keyword_l_val=.TRUE., default_l_val=.FALSE.)
     907        10278 :       CALL section_add_keyword(section, keyword)
     908        10278 :       CALL keyword_release(keyword)
     909              : 
     910              :       CALL keyword_create(keyword, __LOCATION__, name="PROGRAM_NAME", &
     911              :                           description="Executable name or path for the native tblite command line program used for "// &
     912              :                           "the reference calculation. This allows testing the CP2K/tblite implementation against a "// &
     913              :                           "specific tblite build without changing the CP2K executable.", &
     914        10278 :                           usage="PROGRAM_NAME tblite", n_var=1, type_of_var=char_t, default_c_val="tblite")
     915        10278 :       CALL section_add_keyword(section, keyword)
     916        10278 :       CALL keyword_release(keyword)
     917              : 
     918              :       CALL keyword_create(keyword, __LOCATION__, name="GUESS", &
     919              :                           description="Initial population guess used only for the native tblite reference command. "// &
     920              :                           "SAD uses the superposition of atomic densities, matching the default of tblite run. EEQ "// &
     921              :                           "uses electronegativity equilibration charges, while CEH uses the charge-equilibration "// &
     922              :                           "Hamiltonian guess. This keyword does not affect the production CP2K/tblite calculation; "// &
     923              :                           "there, initial densities and restarts remain controlled by CP2K's SCF machinery.", &
     924              :                           usage="GUESS (SAD|EEQ|CEH)", &
     925              :                           enum_c_vals=s2a("SAD", "EEQ", "CEH"), &
     926              :                           enum_i_vals=[tblite_guess_sad, tblite_guess_eeq, tblite_guess_ceh], &
     927              :                           enum_desc=s2a("Use the superposition of atomic densities guess.", &
     928              :                                         "Use the electronegativity equilibration guess.", &
     929              :                                         "Use the charge-equilibration Hamiltonian guess."), &
     930        10278 :                           default_i_val=tblite_guess_sad)
     931        10278 :       CALL section_add_keyword(section, keyword)
     932        10278 :       CALL keyword_release(keyword)
     933              : 
     934              :       CALL keyword_create(keyword, __LOCATION__, name="WORK_DIRECTORY", &
     935              :                           description="Directory used for the temporary native tblite CLI input and output files. "// &
     936              :                           "The CP2K/tblite result is not taken from this directory; the files are only used to run and "// &
     937              :                           "inspect the independent reference calculation.", &
     938        10278 :                           usage="WORK_DIRECTORY .", n_var=1, type_of_var=char_t, default_c_val=".")
     939        10278 :       CALL section_add_keyword(section, keyword)
     940        10278 :       CALL keyword_release(keyword)
     941              : 
     942              :       CALL keyword_create(keyword, __LOCATION__, name="PREFIX", &
     943              :                           description="Prefix for the temporary native tblite CLI input and output files. Changing "// &
     944              :                           "the prefix is useful when several reference checks are run in the same directory or when "// &
     945              :                           "KEEP_FILES is used to inspect the generated geometry, gradient, JSON, or log files.", &
     946              :                           usage="PREFIX tblite-reference", n_var=1, type_of_var=char_t, &
     947        10278 :                           default_c_val="tblite-reference")
     948        10278 :       CALL section_add_keyword(section, keyword)
     949        10278 :       CALL keyword_release(keyword)
     950              : 
     951              :       CALL keyword_create(keyword, __LOCATION__, name="INPUT_FORMAT", &
     952              :                           description="Input format hint passed to native tblite run as --input. The default is GEN, "// &
     953              :                           "matching the temporary DFTB+ GEN geometry written by CP2K for the reference calculation. "// &
     954              :                           "Only change this together with a compatible externally inspected or modified input file "// &
     955              :                           "workflow; the normal CP2K-generated reference geometry is GEN.", &
     956        10278 :                           usage="INPUT_FORMAT gen", n_var=1, type_of_var=char_t, default_c_val="gen")
     957        10278 :       CALL section_add_keyword(section, keyword)
     958        10278 :       CALL keyword_release(keyword)
     959              : 
     960              :       CALL keyword_create(keyword, __LOCATION__, name="RESTART", &
     961              :                           description="Native tblite restart file passed to the external reference command. When this "// &
     962              :                           "keyword is absent, CP2K passes --no-restart so each diagnostic reference is a clean one-shot "// &
     963              :                           "run from the generated geometry and selected CLI options. When a filename is given, CP2K "// &
     964              :                           "passes --restart with that file. This affects only the external native tblite run; it does "// &
     965              :                           "not read or write CP2K wavefunction or density restart data and is therefore independent of "// &
     966              :                           "DFT/SCF/SCF_GUESS RESTART.", &
     967        10278 :                           usage="RESTART filename", n_var=1, type_of_var=char_t, default_c_val="")
     968        10278 :       CALL section_add_keyword(section, keyword)
     969        10278 :       CALL keyword_release(keyword)
     970              : 
     971              :       CALL keyword_create(keyword, __LOCATION__, name="POST_PROCESSING", &
     972              :                           description="Additional native tblite post-SCF analysis passed as tblite run "// &
     973              :                           "--post-processing. The value can be a built-in post-processing module name or a TOML file. "// &
     974              :                           "Native tblite already enables Mayer-Wiberg bond-order analysis internally by default. "// &
     975              :                           "The additional built-in module names currently exposed by tblite include molmom for "// &
     976              :                           "molecular moments and xtbml for xTB-ML descriptors. If the value names a TOML file, tblite "// &
     977              :                           "reads its [post-processing] configuration and can select the post-processing modules more "// &
     978              :                           "finely. This keyword affects only the external REFERENCE_CLI diagnostic run; CP2K does not "// &
     979              :                           "parse the generated post-processing data for the energy/force/virial comparison.", &
     980        10278 :                           usage="POST_PROCESSING molmom", n_var=1, type_of_var=char_t, default_c_val="")
     981        10278 :       CALL section_add_keyword(section, keyword)
     982        10278 :       CALL keyword_release(keyword)
     983              : 
     984              :       CALL keyword_create(keyword, __LOCATION__, name="POST_PROCESSING_OUTPUT", &
     985              :                           description="Filename passed to native tblite as --post-processing-output. Native tblite "// &
     986              :                           "documents this as the NPZ output file for post-processing data, with tblite-data.npz as its "// &
     987              :                           "CLI default. In the locally checked tblite 0.5.0 source this option appears in the help text "// &
     988              :                           "but is not wired in the command-line parser, so CP2K emits it only when explicitly requested "// &
     989              :                           "and prints a warning before running the reference command. Use this keyword only with tblite "// &
     990              :                           "CLI builds that actually accept the option. Unless KEEP_FILES is enabled, CP2K removes this "// &
     991              :                           "explicit output file after the reference check.", &
     992              :                           usage="POST_PROCESSING_OUTPUT tblite-data.npz", n_var=1, type_of_var=char_t, &
     993        10278 :                           default_c_val="", lone_keyword_c_val="tblite-data.npz")
     994        10278 :       CALL section_add_keyword(section, keyword)
     995        10278 :       CALL keyword_release(keyword)
     996              : 
     997              :       CALL keyword_create(keyword, __LOCATION__, name="GRAD", &
     998              :                           description="Filename passed to native tblite as --grad for the tagged ASCII gradient output. "// &
     999              :                           "The native file contains the total energy, energy contributions, analytical molecular "// &
    1000              :                           "gradient, and virial. CP2K reads this file for the REFERENCE_CLI energy, force, and virial "// &
    1001              :                           "checks. If the keyword is omitted, CP2K writes a temporary PREFIX.grad file in "// &
    1002              :                           "WORK_DIRECTORY. If the keyword is present without a filename, CP2K uses tblite's CLI default "// &
    1003              :                           "name tblite.txt. Unless KEEP_FILES is enabled, CP2K removes the selected file after the "// &
    1004              :                           "reference check.", &
    1005              :                           usage="GRAD tblite.txt", n_var=1, type_of_var=char_t, default_c_val="", &
    1006        10278 :                           lone_keyword_c_val="tblite.txt")
    1007        10278 :       CALL section_add_keyword(section, keyword)
    1008        10278 :       CALL keyword_release(keyword)
    1009              : 
    1010              :       CALL keyword_create(keyword, __LOCATION__, name="JSON", &
    1011              :                           description="Filename passed to native tblite as --json for JSON result output. Without "// &
    1012              :                           "--grad the native JSON usually contains the energy and energy contributions; because CP2K's "// &
    1013              :                           "REFERENCE_CLI path also requests --grad, native tblite can additionally include derivative "// &
    1014              :                           "data such as gradient and virial when supported by the CLI version. CP2K currently reads the "// &
    1015              :                           "tagged GRAD file for comparisons and keeps the JSON file as an inspectable native artifact. "// &
    1016              :                           "If the keyword is omitted, CP2K writes a temporary PREFIX.json file in WORK_DIRECTORY. If the "// &
    1017              :                           "keyword is present without a filename, CP2K uses tblite's CLI default name tblite.json. "// &
    1018              :                           "Unless KEEP_FILES is enabled, CP2K removes the selected file after the reference check.", &
    1019              :                           usage="JSON tblite.json", n_var=1, type_of_var=char_t, default_c_val="", &
    1020        10278 :                           lone_keyword_c_val="tblite.json")
    1021        10278 :       CALL section_add_keyword(section, keyword)
    1022        10278 :       CALL keyword_release(keyword)
    1023              : 
    1024              :       CALL keyword_create(keyword, __LOCATION__, name="ELECTRONIC_TEMPERATURE_GUESS", &
    1025              :                           description="Electronic temperature used only for the native tblite reference command's "// &
    1026              :                           "initial CEH population guess. CP2K forwards positive values as tblite run "// &
    1027              :                           "--etemp-guess. The value does not affect CP2K/tblite production calculations and is "// &
    1028              :                           "independent of DFT/SCF/SMEAR/ELECTRONIC_TEMPERATURE, which controls the final electronic "// &
    1029              :                           "occupation temperature passed as --etemp. A value of zero leaves the native tblite default "// &
    1030              :                           "for the guess temperature untouched. Positive values are valid only together with GUESS CEH; "// &
    1031              :                           "CP2K aborts for SAD or EEQ because native tblite uses this option for the CEH guess.", &
    1032              :                           usage="ELECTRONIC_TEMPERATURE_GUESS [K] 4000", &
    1033        10278 :                           default_r_val=cp_unit_to_cp2k(value=0.0_dp, unit_str="K"), unit_str="K")
    1034        10278 :       CALL section_add_keyword(section, keyword)
    1035        10278 :       CALL keyword_release(keyword)
    1036              : 
    1037              :       CALL keyword_create(keyword, __LOCATION__, name="EFIELD", &
    1038              :                           description="Homogeneous electric field passed only to the native tblite reference command "// &
    1039              :                           "as tblite run --efield. The three components are given in V/Angstrom, matching the native "// &
    1040              :                           "tblite CLI convention. This keyword does not affect the production CP2K/tblite "// &
    1041              :                           "calculation because that path currently does not construct tblite's external electric "// &
    1042              :                           "field container. If enabled together with energy, force, or virial checks, the comparison "// &
    1043              :                           "therefore intentionally diagnoses the native field response rather than matching a CP2K "// &
    1044              :                           "production field calculation.", &
    1045              :                           usage="EFIELD 0.0 0.0 0.0", repeats=.FALSE., n_var=3, type_of_var=real_t, &
    1046        10278 :                           default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp])
    1047        10278 :       CALL section_add_keyword(section, keyword)
    1048        10278 :       CALL keyword_release(keyword)
    1049              : 
    1050              :       CALL keyword_create(keyword, __LOCATION__, name="KEEP_FILES", &
    1051              :                           description="Keep the temporary native tblite CLI input and output files after the "// &
    1052              :                           "comparison. This is mainly a debugging aid for inspecting the generated GEN geometry, the "// &
    1053              :                           "native tblite gradient/virial file, the JSON output, and the CLI log.", &
    1054        10278 :                           usage="KEEP_FILES T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1055        10278 :       CALL section_add_keyword(section, keyword)
    1056        10278 :       CALL keyword_release(keyword)
    1057              : 
    1058              :       CALL keyword_create(keyword, __LOCATION__, name="ERROR_LIMIT", &
    1059              :                           description="Tolerance for reporting reference CLI deviations. The value is applied to the "// &
    1060              :                           "absolute CP2K-minus-native differences printed by the enabled energy, force, and virial "// &
    1061              :                           "checks. Exceeding this limit produces a diagnostic warning, or an abort when STOP_ON_ERROR "// &
    1062              :                           "is enabled.", &
    1063        10278 :                           usage="ERROR_LIMIT 1.0E-8", default_r_val=1.0E-8_dp)
    1064        10278 :       CALL section_add_keyword(section, keyword)
    1065        10278 :       CALL keyword_release(keyword)
    1066              : 
    1067              :       CALL keyword_create(keyword, __LOCATION__, name="STOP_ON_ERROR", &
    1068              :                           description="Abort the CP2K run if any enabled reference CLI comparison exceeds "// &
    1069              :                           "ERROR_LIMIT. When disabled, CP2K prints the deviation but continues, which is useful for "// &
    1070              :                           "exploratory diagnostics and regression-test probes.", &
    1071        10278 :                           usage="STOP_ON_ERROR T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1072        10278 :       CALL section_add_keyword(section, keyword)
    1073        10278 :       CALL keyword_release(keyword)
    1074              : 
    1075              :       CALL keyword_create(keyword, __LOCATION__, name="CHECK_ENERGY", &
    1076              :                           description="Compare the CP2K/tblite total xTB energy with the energy obtained from the "// &
    1077              :                           "native tblite reference run. This checks the Hamiltonian setup, SCC solution, static "// &
    1078              :                           "repulsion/dispersion terms, charge and spin state, electronic temperature, and optional "// &
    1079              :                           "PARAM file consistency for the one-shot reference geometry.", &
    1080        10278 :                           usage="CHECK_ENERGY T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
    1081        10278 :       CALL section_add_keyword(section, keyword)
    1082        10278 :       CALL keyword_release(keyword)
    1083              : 
    1084              :       CALL keyword_create(keyword, __LOCATION__, name="CHECK_FORCES", &
    1085              :                           description="Compare CP2K/tblite nuclear gradients with the gradients written by the "// &
    1086              :                           "native tblite reference run. This is a sensitive check of derivative terms, including "// &
    1087              :                           "repulsion, dispersion, electrostatic response, and coordination-number response. The "// &
    1088              :                           "comparison uses the same geometry and model setup as the energy reference.", &
    1089        10278 :                           usage="CHECK_FORCES T", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
    1090        10278 :       CALL section_add_keyword(section, keyword)
    1091        10278 :       CALL keyword_release(keyword)
    1092              : 
    1093              :       CALL keyword_create(keyword, __LOCATION__, name="CHECK_VIRIAL", &
    1094              :                           description="Compare CP2K/tblite virial with the virial written by the native tblite "// &
    1095              :                           "reference run. This is a diagnostic for cell derivatives and stress-related terms. It is "// &
    1096              :                           "disabled by default because virial conventions, finite periodicity, and the absence of "// &
    1097              :                           "native CLI k-point sampling make this comparison more restrictive than the energy and "// &
    1098              :                           "force checks.", &
    1099        10278 :                           usage="CHECK_VIRIAL T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1100        10278 :       CALL section_add_keyword(section, keyword)
    1101        10278 :       CALL keyword_release(keyword)
    1102              : 
    1103        10278 :       NULLIFY (subsection)
    1104        10278 :       CALL create_xtb_reference_cli_guess_section(subsection)
    1105        10278 :       CALL section_add_subsection(section, subsection)
    1106        10278 :       CALL section_release(subsection)
    1107              : 
    1108        10278 :       NULLIFY (subsection)
    1109        10278 :       CALL create_xtb_reference_cli_param_section(subsection)
    1110        10278 :       CALL section_add_subsection(section, subsection)
    1111        10278 :       CALL section_release(subsection)
    1112              : 
    1113        10278 :       NULLIFY (subsection)
    1114        10278 :       CALL create_xtb_reference_cli_fit_section(subsection)
    1115        10278 :       CALL section_add_subsection(section, subsection)
    1116        10278 :       CALL section_release(subsection)
    1117              : 
    1118        10278 :       NULLIFY (subsection)
    1119        10278 :       CALL create_xtb_reference_cli_tagdiff_section(subsection)
    1120        10278 :       CALL section_add_subsection(section, subsection)
    1121        10278 :       CALL section_release(subsection)
    1122              : 
    1123        10278 :       NULLIFY (subsection)
    1124        10278 :       CALL create_xtb_reference_cli_solvation_section(subsection)
    1125        10278 :       CALL section_add_subsection(section, subsection)
    1126        10278 :       CALL section_release(subsection)
    1127              : 
    1128        10278 :    END SUBROUTINE create_xtb_reference_cli_section
    1129              : 
    1130              : ! **************************************************************************************************
    1131              : !> \brief Creates the &REFERENCE_CLI%GUESS_CLI section for native tblite guess.
    1132              : !> \param section section to create
    1133              : ! **************************************************************************************************
    1134        10278 :    SUBROUTINE create_xtb_reference_cli_guess_section(section)
    1135              :       TYPE(section_type), POINTER                        :: section
    1136              : 
    1137              :       TYPE(keyword_type), POINTER                        :: keyword
    1138              : 
    1139        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
    1140              :       CALL section_create(section, __LOCATION__, name="GUESS_CLI", &
    1141              :                           description="Run the native tblite guess subcommand as an auxiliary REFERENCE_CLI "// &
    1142              :                           "diagnostic. The command executes tblite guess on the generated GEN geometry by default and "// &
    1143              :                           "prints the initializing charges and dipole moments. CP2K forwards the surrounding charge "// &
    1144              :                           "and multiplicity as native --charge and --spin. GLOBAL/PRINT_LEVEL controls native "// &
    1145              :                           "--silent or --verbose exactly as for the main REFERENCE_CLI run command. This section is "// &
    1146              :                           "diagnostic only; CP2K does not use the generated guess data to seed the production "// &
    1147              :                           "calculation.", &
    1148        10278 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1149              : 
    1150        10278 :       NULLIFY (keyword)
    1151              :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
    1152              :                           description="Activates the native tblite guess auxiliary command when the section is "// &
    1153        10278 :                           "present.", lone_keyword_l_val=.TRUE., default_l_val=.FALSE.)
    1154        10278 :       CALL section_add_keyword(section, keyword)
    1155        10278 :       CALL keyword_release(keyword)
    1156              : 
    1157              :       CALL keyword_create(keyword, __LOCATION__, name="METHOD", &
    1158              :                           description="Initial-population method passed to native tblite guess as --method. SAD uses "// &
    1159              :                           "superposed atomic densities, EEQ uses electronegativity equilibration, and CEH uses the "// &
    1160              :                           "charge-extended Huckel guess. The default matches native tblite guess.", &
    1161              :                           usage="METHOD (SAD|EEQ|CEH)", &
    1162              :                           enum_c_vals=s2a("SAD", "EEQ", "CEH"), &
    1163              :                           enum_i_vals=[tblite_guess_sad, tblite_guess_eeq, tblite_guess_ceh], &
    1164              :                           enum_desc=s2a("Use the superposition of atomic densities guess.", &
    1165              :                                         "Use the electronegativity equilibration guess.", &
    1166              :                                         "Use the charge-extended Huckel guess."), &
    1167        10278 :                           default_i_val=tblite_guess_ceh)
    1168        10278 :       CALL section_add_keyword(section, keyword)
    1169        10278 :       CALL keyword_release(keyword)
    1170              : 
    1171              :       CALL keyword_create(keyword, __LOCATION__, name="ELECTRONIC_TEMPERATURE_GUESS", &
    1172              :                           description="Electronic temperature for native tblite guess --etemp-guess. This option is "// &
    1173              :                           "used by the CEH guess in native tblite. A value of zero leaves tblite's own default "// &
    1174              :                           "untouched.", usage="ELECTRONIC_TEMPERATURE_GUESS [K] 4000", &
    1175        10278 :                           default_r_val=cp_unit_to_cp2k(value=0.0_dp, unit_str="K"), unit_str="K")
    1176        10278 :       CALL section_add_keyword(section, keyword)
    1177        10278 :       CALL keyword_release(keyword)
    1178              : 
    1179              :       CALL keyword_create(keyword, __LOCATION__, name="SOLVER", &
    1180              :                           description="Electronic solver passed to native tblite guess as --solver. GVD is the "// &
    1181              :                           "default generalized eigenvalue decomposition solver; GVR selects the alternative solver "// &
    1182              :                           "exposed by tblite.", usage="SOLVER (GVD|GVR)", &
    1183              :                           enum_c_vals=s2a("GVD", "GVR"), enum_i_vals=[tblite_solver_gvd, tblite_solver_gvr], &
    1184              :                           enum_desc=s2a("Use the GVD electronic solver.", "Use the GVR electronic solver."), &
    1185        10278 :                           default_i_val=tblite_solver_gvd)
    1186        10278 :       CALL section_add_keyword(section, keyword)
    1187        10278 :       CALL keyword_release(keyword)
    1188              : 
    1189              :       CALL keyword_create(keyword, __LOCATION__, name="EFIELD", &
    1190              :                           description="Homogeneous electric field passed to native tblite guess as --efield. The "// &
    1191              :                           "three components are given in V/Angstrom, matching native tblite.", &
    1192              :                           usage="EFIELD 0.0 0.0 0.0", repeats=.FALSE., n_var=3, type_of_var=real_t, &
    1193        10278 :                           default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp])
    1194        10278 :       CALL section_add_keyword(section, keyword)
    1195        10278 :       CALL keyword_release(keyword)
    1196              : 
    1197              :       CALL keyword_create(keyword, __LOCATION__, name="GRAD", &
    1198              :                           description="Request native tblite guess --grad, evaluating the analytic gradient of the "// &
    1199        10278 :                           "guessed charges.", usage="GRAD T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1200        10278 :       CALL section_add_keyword(section, keyword)
    1201        10278 :       CALL keyword_release(keyword)
    1202              : 
    1203              :       CALL keyword_create(keyword, __LOCATION__, name="JSON", &
    1204              :                           description="Filename passed to native tblite guess as --json. If the keyword is present "// &
    1205              :                           "without a filename, CP2K uses tblite's CLI default name tblite.json. If omitted, CP2K does "// &
    1206              :                           "not request JSON output for the auxiliary guess command.", &
    1207              :                           usage="JSON tblite.json", n_var=1, type_of_var=char_t, default_c_val="", &
    1208        10278 :                           lone_keyword_c_val="tblite.json")
    1209        10278 :       CALL section_add_keyword(section, keyword)
    1210        10278 :       CALL keyword_release(keyword)
    1211              : 
    1212              :       CALL keyword_create(keyword, __LOCATION__, name="INPUT_FORMAT", &
    1213              :                           description="Input format hint passed to native tblite guess as --input. The default is GEN, "// &
    1214              :                           "matching the temporary DFTB+ GEN geometry written by CP2K for the enclosing reference "// &
    1215              :                           "calculation.", &
    1216        10278 :                           usage="INPUT_FORMAT gen", n_var=1, type_of_var=char_t, default_c_val="gen")
    1217        10278 :       CALL section_add_keyword(section, keyword)
    1218        10278 :       CALL keyword_release(keyword)
    1219              : 
    1220              :       CALL keyword_create(keyword, __LOCATION__, name="INPUT_FILE", &
    1221              :                           description="Positional input structure for native tblite guess. The file format must match "// &
    1222              :                           "GUESS_CLI/INPUT_FORMAT. If omitted, CP2K uses the temporary GEN geometry written for the "// &
    1223              :                           "enclosing REFERENCE_CLI calculation.", &
    1224        10278 :                           usage="INPUT_FILE structure.gen", n_var=1, type_of_var=char_t, default_c_val="")
    1225        10278 :       CALL section_add_keyword(section, keyword)
    1226        10278 :       CALL keyword_release(keyword)
    1227              : 
    1228        10278 :    END SUBROUTINE create_xtb_reference_cli_guess_section
    1229              : 
    1230              : ! **************************************************************************************************
    1231              : !> \brief Creates the &REFERENCE_CLI%PARAM_CLI section for native tblite param.
    1232              : !> \param section section to create
    1233              : ! **************************************************************************************************
    1234        10278 :    SUBROUTINE create_xtb_reference_cli_param_section(section)
    1235              :       TYPE(section_type), POINTER                        :: section
    1236              : 
    1237              :       TYPE(keyword_type), POINTER                        :: keyword
    1238              : 
    1239        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
    1240              :       CALL section_create(section, __LOCATION__, name="PARAM_CLI", &
    1241              :                           description="Run the native tblite param subcommand as an auxiliary REFERENCE_CLI "// &
    1242              :                           "diagnostic. The command inspects, imports, exports, or converts tblite parameter data. "// &
    1243              :                           "If no INPUT_FILE is supplied, CP2K selects the surrounding XTB/TBLITE/METHOD as native "// &
    1244              :                           "--method. If METHOD is specified here, it overrides only this auxiliary command.", &
    1245        10278 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1246              : 
    1247        10278 :       NULLIFY (keyword)
    1248              :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
    1249              :                           description="Activates the native tblite param auxiliary command when the section is "// &
    1250        10278 :                           "present.", lone_keyword_l_val=.TRUE., default_l_val=.FALSE.)
    1251        10278 :       CALL section_add_keyword(section, keyword)
    1252        10278 :       CALL keyword_release(keyword)
    1253              : 
    1254              :       CALL keyword_create(keyword, __LOCATION__, name="METHOD", &
    1255              :                           description="Base parametrization passed to native tblite param as --method. If omitted, "// &
    1256              :                           "CP2K uses the surrounding XTB/TBLITE/METHOD.", &
    1257              :                           usage="METHOD (GFN1|GFN2|IPEA1)", &
    1258              :                           enum_c_vals=s2a("GFN1", "GFN2", "IPEA1"), &
    1259              :                           enum_i_vals=[gfn1xtb, gfn2xtb, ipea1xtb], &
    1260              :                           enum_desc=s2a("Use the GFN1-xTB base parametrization.", &
    1261              :                                         "Use the GFN2-xTB base parametrization.", &
    1262              :                                         "Use the IPEA1 base parametrization."), &
    1263        10278 :                           default_i_val=gfn2xtb)
    1264        10278 :       CALL section_add_keyword(section, keyword)
    1265        10278 :       CALL keyword_release(keyword)
    1266              : 
    1267              :       CALL keyword_create(keyword, __LOCATION__, name="OUTPUT", &
    1268              :                           description="Output parameter file passed to native tblite param as --output. If omitted, "// &
    1269              :                           "native tblite writes to its default stream or file for the selected operation.", &
    1270        10278 :                           usage="OUTPUT parameters.toml", n_var=1, type_of_var=char_t, default_c_val="")
    1271        10278 :       CALL section_add_keyword(section, keyword)
    1272        10278 :       CALL keyword_release(keyword)
    1273              : 
    1274              :       CALL keyword_create(keyword, __LOCATION__, name="INPUT_FILE", &
    1275              :                           description="Optional positional input parameter file for native tblite param. If omitted, "// &
    1276              :                           "the command operates on the selected built-in METHOD.", &
    1277        10278 :                           usage="INPUT_FILE parameters.toml", n_var=1, type_of_var=char_t, default_c_val="")
    1278        10278 :       CALL section_add_keyword(section, keyword)
    1279        10278 :       CALL keyword_release(keyword)
    1280              : 
    1281        10278 :    END SUBROUTINE create_xtb_reference_cli_param_section
    1282              : 
    1283              : ! **************************************************************************************************
    1284              : !> \brief Creates the &REFERENCE_CLI%FIT_CLI section for native tblite fit.
    1285              : !> \param section section to create
    1286              : ! **************************************************************************************************
    1287        10278 :    SUBROUTINE create_xtb_reference_cli_fit_section(section)
    1288              :       TYPE(section_type), POINTER                        :: section
    1289              : 
    1290              :       TYPE(keyword_type), POINTER                        :: keyword
    1291              : 
    1292        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
    1293              :       CALL section_create(section, __LOCATION__, name="FIT_CLI", &
    1294              :                           description="Run the native tblite fit subcommand as an auxiliary REFERENCE_CLI diagnostic. "// &
    1295              :                           "The command optimizes or dry-runs tblite parameters from a starting PARAM_FILE and a fit "// &
    1296              :                           "settings INPUT_FILE. Because native fitting can be expensive and writes its own outputs, "// &
    1297              :                           "the section is inactive unless explicitly present.", &
    1298        10278 :                           n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1299              : 
    1300        10278 :       NULLIFY (keyword)
    1301              :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
    1302              :                           description="Activates the native tblite fit auxiliary command when the section is present.", &
    1303        10278 :                           lone_keyword_l_val=.TRUE., default_l_val=.FALSE.)
    1304        10278 :       CALL section_add_keyword(section, keyword)
    1305        10278 :       CALL keyword_release(keyword)
    1306              : 
    1307              :       CALL keyword_create(keyword, __LOCATION__, name="PARAM_FILE", &
    1308              :                           description="Starting parameter file passed as the first positional argument to native "// &
    1309        10278 :                           "tblite fit.", usage="PARAM_FILE start.toml", n_var=1, type_of_var=char_t, default_c_val="")
    1310        10278 :       CALL section_add_keyword(section, keyword)
    1311        10278 :       CALL keyword_release(keyword)
    1312              : 
    1313              :       CALL keyword_create(keyword, __LOCATION__, name="INPUT_FILE", &
    1314              :                           description="Fit-settings input file passed as the second positional argument to native "// &
    1315        10278 :                           "tblite fit.", usage="INPUT_FILE fit.toml", n_var=1, type_of_var=char_t, default_c_val="")
    1316        10278 :       CALL section_add_keyword(section, keyword)
    1317        10278 :       CALL keyword_release(keyword)
    1318              : 
    1319              :       CALL keyword_create(keyword, __LOCATION__, name="DRY_RUN", &
    1320              :                           description="Pass native tblite fit --dry-run. This expands and checks the fit setup "// &
    1321              :                           "without starting the optimization.", usage="DRY_RUN T", default_l_val=.FALSE., &
    1322        10278 :                           lone_keyword_l_val=.TRUE.)
    1323        10278 :       CALL section_add_keyword(section, keyword)
    1324        10278 :       CALL keyword_release(keyword)
    1325              : 
    1326              :       CALL keyword_create(keyword, __LOCATION__, name="COPY", &
    1327              :                           description="Filename passed to native tblite fit as --copy. Native tblite writes the full "// &
    1328              :                           "representation of the fit input to this file, with defaults filled in and masks expanded.", &
    1329        10278 :                           usage="COPY expanded-fit.toml", n_var=1, type_of_var=char_t, default_c_val="")
    1330        10278 :       CALL section_add_keyword(section, keyword)
    1331        10278 :       CALL keyword_release(keyword)
    1332              : 
    1333        10278 :    END SUBROUTINE create_xtb_reference_cli_fit_section
    1334              : 
    1335              : ! **************************************************************************************************
    1336              : !> \brief Creates the &REFERENCE_CLI%TAGDIFF_CLI section for native tblite tagdiff.
    1337              : !> \param section section to create
    1338              : ! **************************************************************************************************
    1339        10278 :    SUBROUTINE create_xtb_reference_cli_tagdiff_section(section)
    1340              :       TYPE(section_type), POINTER                        :: section
    1341              : 
    1342              :       TYPE(keyword_type), POINTER                        :: keyword
    1343              : 
    1344        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
    1345              :       CALL section_create(section, __LOCATION__, name="TAGDIFF_CLI", &
    1346              :                           description="Run the native tblite tagdiff auxiliary command. It compares an ACTUAL tagged "// &
    1347              :                           "data file against a REFERENCE tagged data file and reports differences using the keys from "// &
    1348        10278 :                           "the reference file.", n_keywords=1, n_subsections=0, repeats=.FALSE.)
    1349              : 
    1350        10278 :       NULLIFY (keyword)
    1351              :       CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
    1352              :                           description="Activates the native tblite tagdiff auxiliary command when the section is "// &
    1353        10278 :                           "present.", lone_keyword_l_val=.TRUE., default_l_val=.FALSE.)
    1354        10278 :       CALL section_add_keyword(section, keyword)
    1355        10278 :       CALL keyword_release(keyword)
    1356              : 
    1357              :       CALL keyword_create(keyword, __LOCATION__, name="ACTUAL", &
    1358              :                           description="Actual tagged data file passed as the first positional argument to native "// &
    1359        10278 :                           "tblite tagdiff.", usage="ACTUAL actual.tag", n_var=1, type_of_var=char_t, default_c_val="")
    1360        10278 :       CALL section_add_keyword(section, keyword)
    1361        10278 :       CALL keyword_release(keyword)
    1362              : 
    1363              :       CALL keyword_create(keyword, __LOCATION__, name="REFERENCE", &
    1364              :                           description="Reference tagged data file passed as the second positional argument to native "// &
    1365              :                           "tblite tagdiff. Native tblite uses only keys present in this reference file.", &
    1366        10278 :                           usage="REFERENCE reference.tag", n_var=1, type_of_var=char_t, default_c_val="")
    1367        10278 :       CALL section_add_keyword(section, keyword)
    1368        10278 :       CALL keyword_release(keyword)
    1369              : 
    1370              :       CALL keyword_create(keyword, __LOCATION__, name="FIT", &
    1371              :                           description="Pass native tblite tagdiff --fit, producing output suitable for tblite fit.", &
    1372        10278 :                           usage="FIT T", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
    1373        10278 :       CALL section_add_keyword(section, keyword)
    1374        10278 :       CALL keyword_release(keyword)
    1375              : 
    1376        10278 :    END SUBROUTINE create_xtb_reference_cli_tagdiff_section
    1377              : 
    1378              : ! **************************************************************************************************
    1379              : !> \brief Creates the &REFERENCE_CLI%IMPLICIT_SOLVATION section for native tblite.
    1380              : !> \param section section to create
    1381              : ! **************************************************************************************************
    1382        10278 :    SUBROUTINE create_xtb_reference_cli_solvation_section(section)
    1383              :       TYPE(section_type), POINTER                        :: section
    1384              : 
    1385              :       TYPE(keyword_type), POINTER                        :: keyword
    1386              : 
    1387        10278 :       CPASSERT(.NOT. ASSOCIATED(section))
    1388              :       CALL section_create(section, __LOCATION__, name="IMPLICIT_SOLVATION", &
    1389              :                           description="Native tblite implicit-solvation settings for the external REFERENCE_CLI "// &
    1390              :                           "diagnostic command. This section does not affect the production CP2K/tblite calculation. "// &
    1391              :                           "The section is active when present; no additional enable keyword is needed. "// &
    1392              :                           "CP2K aborts for fully three-dimensional periodic cells and prints a warning for one- or "// &
    1393              :                           "two-dimensional periodic cells because native tblite's implicit-solvent models are mainly "// &
    1394              :                           "molecular continuum-solvation diagnostics. "// &
    1395              :                           "MODEL selects the native tblite run solvation switch: ALPB maps to --alpb, GBSA to --gbsa, "// &
    1396              :                           "GBE to --gbe, GB to --gb, and CPCM to --cpcm. SOLVENT is the argument passed to that switch. "// &
    1397              :                           "For ALPB and GBSA it must be a named solvent with tblite parameters; for GBE, GB, and CPCM "// &
    1398              :                           "it can be either a named solvent or a dielectric constant written as a token such as 78.36. "// &
    1399              :                           "BORN_KERNEL maps to --born-kernel and applies only to ALPB, GBSA, GBE, and GB; AUTO leaves "// &
    1400              :                           "the native tblite model-dependent default untouched. SOLUTION_STATE maps to --solv-state "// &
    1401              :                           "and is only supported for the parametrized named solvent ALPB/GBSA models; GSOLV leaves "// &
    1402              :                           "the native tblite default untouched.", &
    1403        10278 :                           n_keywords=4, repeats=.FALSE.)
    1404              : 
    1405        10278 :       NULLIFY (keyword)
    1406              :       CALL keyword_create(keyword, __LOCATION__, name="MODEL", &
    1407              :                           description="Implicit-solvation model passed to native tblite run. ALPB selects the "// &
    1408              :                           "parametrized analytical linearized Poisson-Boltzmann model with CDS and solution-state "// &
    1409              :                           "shift support. GBSA selects the parametrized generalized Born surface-area model with CDS "// &
    1410              :                           "and solution-state shift support. GBE selects finite-epsilon generalized Born/ALPB "// &
    1411              :                           "electrostatics without the named-solvent CDS and shift terms. GB selects generalized Born "// &
    1412              :                           "electrostatics without the named-solvent CDS and shift terms. CPCM selects tblite's "// &
    1413              :                           "conductor-like polarizable continuum model.", &
    1414              :                           usage="MODEL (ALPB|GBSA|GBE|GB|CPCM)", &
    1415              :                           enum_c_vals=s2a("ALPB", "GBSA", "GBE", "GB", "CPCM"), &
    1416              :                           enum_i_vals=[tblite_cli_solvation_alpb, tblite_cli_solvation_gbsa, &
    1417              :                                        tblite_cli_solvation_gbe, tblite_cli_solvation_gb, &
    1418              :                                        tblite_cli_solvation_cpcm], &
    1419              :                           enum_desc=s2a("Use native tblite --alpb.", &
    1420              :                                         "Use native tblite --gbsa.", &
    1421              :                                         "Use native tblite --gbe.", &
    1422              :                                         "Use native tblite --gb.", &
    1423              :                                         "Use native tblite --cpcm."), &
    1424        10278 :                           default_i_val=tblite_cli_solvation_alpb)
    1425        10278 :       CALL section_add_keyword(section, keyword)
    1426        10278 :       CALL keyword_release(keyword)
    1427              : 
    1428              :       CALL keyword_create(keyword, __LOCATION__, name="SOLVENT", &
    1429              :                           description="Solvent argument passed to the selected native tblite solvation switch. "// &
    1430              :                           "For MODEL ALPB and MODEL GBSA this must be a named solvent supported by tblite's "// &
    1431              :                           "parametrized solvation data, for example water, acetone, methanol, thf, or toluene. "// &
    1432              :                           "For MODEL GBE, MODEL GB, and MODEL CPCM this can also be a dielectric constant, for "// &
    1433              :                           "example 78.36. Native tblite normalizes names by ignoring case, spaces, commas, and "// &
    1434              :                           "hyphens before lookup.", &
    1435        10278 :                           usage="SOLVENT water", n_var=1, type_of_var=char_t, default_c_val="")
    1436        10278 :       CALL section_add_keyword(section, keyword)
    1437        10278 :       CALL keyword_release(keyword)
    1438              : 
    1439              :       CALL keyword_create(keyword, __LOCATION__, name="BORN_KERNEL", &
    1440              :                           description="Born interaction kernel passed to native tblite as --born-kernel. AUTO leaves "// &
    1441              :                           "the native default untouched: tblite uses p16 for ALPB/GBE and still for GB/GBSA. P16 "// &
    1442              :                           "selects the Lange p16 kernel, while STILL selects the classical Still kernel. This keyword "// &
    1443              :                           "is not valid with MODEL CPCM because CPCM does not use the Born-kernel machinery.", &
    1444              :                           usage="BORN_KERNEL (AUTO|P16|STILL)", &
    1445              :                           enum_c_vals=s2a("AUTO", "P16", "STILL"), &
    1446              :                           enum_i_vals=[tblite_cli_born_kernel_auto, tblite_cli_born_kernel_p16, &
    1447              :                                        tblite_cli_born_kernel_still], &
    1448              :                           enum_desc=s2a("Use tblite's model-dependent default kernel.", &
    1449              :                                         "Use the Lange p16 Born kernel.", &
    1450              :                                         "Use the classical Still Born kernel."), &
    1451        10278 :                           default_i_val=tblite_cli_born_kernel_auto)
    1452        10278 :       CALL section_add_keyword(section, keyword)
    1453        10278 :       CALL keyword_release(keyword)
    1454              : 
    1455              :       CALL keyword_create(keyword, __LOCATION__, name="SOLUTION_STATE", &
    1456              :                           description="Solution-state convention passed to native tblite as --solv-state. GSOLV is "// &
    1457              :                           "the default solvation free-energy convention. BAR1MOL applies the 1 bar ideal-gas to "// &
    1458              :                           "1 mol/L liquid-solution shift. REFERENCE requests tblite's reference-state convention. "// &
    1459              :                           "Native tblite supports non-default solution-state shifts only for named parametrized "// &
    1460              :                           "ALPB/GBSA solvents, not for GBE, GB, or CPCM.", &
    1461              :                           usage="SOLUTION_STATE (GSOLV|BAR1MOL|REFERENCE)", &
    1462              :                           enum_c_vals=s2a("GSOLV", "BAR1MOL", "REFERENCE"), &
    1463              :                           enum_i_vals=[tblite_cli_solution_state_gsolv, tblite_cli_solution_state_bar1mol, &
    1464              :                                        tblite_cli_solution_state_reference], &
    1465              :                           enum_desc=s2a("Use tblite's default solvation free-energy convention.", &
    1466              :                                         "Apply the 1 bar ideal-gas to 1 mol/L solution shift.", &
    1467              :                                         "Use tblite's reference-state convention."), &
    1468        10278 :                           default_i_val=tblite_cli_solution_state_gsolv)
    1469        10278 :       CALL section_add_keyword(section, keyword)
    1470        10278 :       CALL keyword_release(keyword)
    1471              : 
    1472        10278 :    END SUBROUTINE create_xtb_reference_cli_solvation_section
    1473              : 
    1474              : END MODULE input_cp2k_tb
        

Generated by: LCOV version 2.0-1