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
|