(git:57d0aac)
Loading...
Searching...
No Matches
input_cp2k_ec.F
Go to the documentation of this file.
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! **************************************************************************************************
15 USE bibliography, ONLY: niklasson2003,&
21 USE input_constants, ONLY: &
42 USE input_val_types, ONLY: char_t,&
44 USE kinds, ONLY: dp
45 USE string_utilities, ONLY: s2a
46#include "./base/base_uses.f90"
47
48 IMPLICIT NONE
49 PRIVATE
50
51 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_ec'
52
53 PUBLIC :: create_ec_section
54
55CONTAINS
56
57! **************************************************************************************************
58!> \brief creates the ENERGY CORRECTION section
59!> \param section ...
60!> \author JGH
61! **************************************************************************************************
62 SUBROUTINE create_ec_section(section)
63 TYPE(section_type), POINTER :: section
64
65 TYPE(keyword_type), POINTER :: keyword
66 TYPE(section_type), POINTER :: subsection
67
68 cpassert(.NOT. ASSOCIATED(section))
69
70 NULLIFY (keyword)
71 CALL section_create(section, __location__, name="ENERGY_CORRECTION", &
72 description="Sets the various options for the Energy Correction", &
73 n_keywords=0, n_subsections=2, repeats=.false.)
74
75 CALL keyword_create(keyword, __location__, name="_SECTION_PARAMETERS_", &
76 description="Controls the activation of the energy_correction", &
77 usage="&ENERGY_CORRECTION T", &
78 default_l_val=.false., &
79 lone_keyword_l_val=.true.)
80 CALL section_add_keyword(section, keyword)
81 CALL keyword_release(keyword)
82
83 ! add a special XC section
84 NULLIFY (subsection)
85 CALL create_xc_section(subsection)
86 CALL section_add_subsection(section, subsection)
87 CALL section_release(subsection)
88
89 ! add a section for solver keywords
90 NULLIFY (subsection)
91 CALL create_ec_solver_section(subsection)
92 CALL section_add_subsection(section, subsection)
93 CALL section_release(subsection)
94
95 ! add a print section for properties
96 NULLIFY (subsection)
97 CALL create_ec_print_section(subsection)
98 CALL section_add_subsection(section, subsection)
99 CALL section_release(subsection)
100
101 CALL keyword_create(keyword, __location__, name="ENERGY_FUNCTIONAL", &
102 description="Functional used in energy correction", &
103 usage="ENERGY_FUNCTIONAL HARRIS", &
104 default_i_val=ec_functional_harris, &
105 enum_c_vals=s2a("HARRIS", "DCDFT", "EXTERNAL"), &
106 enum_desc=s2a("Harris functional", &
107 "Density-corrected DFT", &
108 "External calculated energy"), &
110 CALL section_add_keyword(section, keyword)
111 CALL keyword_release(keyword)
112
113 CALL keyword_create(keyword, __location__, name="HARRIS_BASIS", &
114 description="Specifies the type of basis to be used for the KG energy correction. "// &
115 "Options are: (1) the default orbital basis (ORBITAL); "// &
116 "(2) the primitive functions of the default orbital basis (PRIMITIVE); "// &
117 "(3) the basis set labeled in Kind section (HARRIS)", &
118 usage="HARRIS_BASIS ORBITAL", &
119 type_of_var=char_t, default_c_val="ORBITAL", n_var=-1)
120 CALL section_add_keyword(section, keyword)
121 CALL keyword_release(keyword)
122
123 CALL keyword_create(keyword, __location__, name="DEBUG_FORCES", &
124 description="Additional output to debug energy correction forces.", &
125 usage="DEBUG_FORCES T", default_l_val=.false., lone_keyword_l_val=.true.)
126 CALL section_add_keyword(section, keyword)
127 CALL keyword_release(keyword)
128 CALL keyword_create(keyword, __location__, name="DEBUG_STRESS", &
129 description="Additional output to debug energy correction forces.", &
130 usage="DEBUG_STRESS T", default_l_val=.false., lone_keyword_l_val=.true.)
131 CALL section_add_keyword(section, keyword)
132 CALL keyword_release(keyword)
133 CALL keyword_create(keyword, __location__, name="DEBUG_EXTERNAL_METHOD", &
134 description="Uses an internal pseudo-energy to test EXTERNAL energy method.", &
135 usage="DEBUG_EXTERNAL_METHOD T", default_l_val=.false., lone_keyword_l_val=.true.)
136 CALL section_add_keyword(section, keyword)
137 CALL keyword_release(keyword)
138
139 CALL keyword_create(keyword, __location__, name="SKIP_EC", &
140 description="Skip EC calculation if ground-state calculation has not converged.", &
141 usage="SKIP_EC T", default_l_val=.false., lone_keyword_l_val=.true.)
142 CALL section_add_keyword(section, keyword)
143 CALL keyword_release(keyword)
144
145 CALL keyword_create(keyword, __location__, name="MAO", &
146 description="Use modified atomic orbitals (MAO) to solve Harris equation", &
147 usage="MAO T", default_l_val=.false., lone_keyword_l_val=.true.)
148 CALL section_add_keyword(section, keyword)
149 CALL keyword_release(keyword)
150
151 CALL keyword_create(keyword, __location__, name="MAO_MAX_ITER", &
152 description="Maximum iterations in MAO optimization. ", &
153 usage="MAO_MAX_ITER 100 ", default_i_val=0)
154 CALL section_add_keyword(section, keyword)
155 CALL keyword_release(keyword)
156
157 CALL keyword_create(keyword, __location__, name="MAO_EPS_GRAD", &
158 description="Threshold used for MAO iterations. ", &
159 usage="MAO_EPS_GRAD 1.0E-4 ", default_r_val=1.0e-5_dp)
160 CALL section_add_keyword(section, keyword)
161 CALL keyword_release(keyword)
162
163 CALL keyword_create(keyword, __location__, name="MAO_EPS1", &
164 description="Occupation threshold used to determine number of MAOs."// &
165 " KIND section MAO keyword sets the minimum.", &
166 usage="MAO_EPS1 0.001 ", default_r_val=1000.0_dp)
167 CALL section_add_keyword(section, keyword)
168 CALL keyword_release(keyword)
169
170 CALL keyword_create(keyword, __location__, name="MAO_IOLEVEL", &
171 description="Verbosity of MAO output: (0) no output ... (3) fully verbose", &
172 usage="MAO_IOLEVEL 0 ", default_i_val=1)
173 CALL section_add_keyword(section, keyword)
174 CALL keyword_release(keyword)
175
176 CALL keyword_create(keyword, __location__, name="ALGORITHM", &
177 description="Algorithm used to solve KS equation", &
178 usage="ALGORITHM DIAGONALIZATION", &
179 default_i_val=ec_diagonalization, &
180 enum_c_vals=s2a("DIAGONALIZATION", "MATRIX_SIGN", &
181 "TRS4", "TC2", "OT_DIAG"), &
182 enum_desc=s2a("Diagonalization of KS matrix.", &
183 "Matrix Sign algorithm", &
184 "Trace resetting trs4 algorithm", &
185 "Trace resetting tc2 algorithm", &
186 "OT diagonalization"), &
187 enum_i_vals=[ec_diagonalization, ec_matrix_sign, &
189 CALL section_add_keyword(section, keyword)
190 CALL keyword_release(keyword)
191
192 CALL keyword_create(keyword, __location__, name="FACTORIZATION", &
193 description="Algorithm used to calculate factorization of overlap matrix", &
194 usage="FACTORIZATION CHOLESKY", &
195 default_i_val=kg_cholesky, &
196 enum_c_vals=s2a("CHOLESKY"), &
197 enum_desc=s2a("Cholesky factorization of overlap matrix"), &
198 enum_i_vals=[kg_cholesky])
199 CALL section_add_keyword(section, keyword)
200 CALL keyword_release(keyword)
201
202 CALL keyword_create(keyword, __location__, name="EPS_DEFAULT", &
203 description="Threshold used for accuracy estimates within energy correction. ", &
204 usage="EPS_DEFAULT 1.0E-7 ", default_r_val=1.0e-7_dp)
205 CALL section_add_keyword(section, keyword)
206 CALL keyword_release(keyword)
207
208 ! Keywords for LS solver of Harris functional
209 CALL keyword_create(keyword, __location__, name="EPS_FILTER", &
210 description="Threshold used for filtering matrix operations.", &
211 usage="EPS_FILTER 1.0E-12", default_r_val=1.0e-12_dp)
212 CALL section_add_keyword(section, keyword)
213 CALL keyword_release(keyword)
214
215 CALL keyword_create(keyword, __location__, name="EPS_LANCZOS", &
216 description="Threshold used for lanczos estimates.", &
217 usage="EPS_LANCZOS 1.0E-4", default_r_val=1.0e-3_dp)
218 CALL section_add_keyword(section, keyword)
219 CALL keyword_release(keyword)
220
221 CALL keyword_create(keyword, __location__, name="MAX_ITER_LANCZOS", &
222 description="Maximum number of lanczos iterations.", &
223 usage="MAX_ITER_LANCZOS ", default_i_val=128)
224 CALL section_add_keyword(section, keyword)
225 CALL keyword_release(keyword)
226
227 CALL keyword_create(keyword, __location__, name="MU", &
228 description="Value (or initial guess) for the chemical potential,"// &
229 " i.e. some suitable energy between HOMO and LUMO energy.", &
230 usage="MU 0.0", default_r_val=-0.1_dp)
231 CALL section_add_keyword(section, keyword)
232 CALL keyword_release(keyword)
233
234 CALL keyword_create(keyword, __location__, name="FIXED_MU", &
235 description="Should the calculation be performed at fixed chemical potential,"// &
236 " or should it be found fixing the number of electrons", &
237 usage="FIXED_MU .TRUE.", default_l_val=.false., lone_keyword_l_val=.true.)
238 CALL section_add_keyword(section, keyword)
239 CALL keyword_release(keyword)
240
241 CALL keyword_create(keyword, __location__, name="S_PRECONDITIONER", &
242 description="Preconditions S with some appropriate form.", &
243 usage="S_PRECONDITIONER MOLECULAR", &
244 default_i_val=ls_s_preconditioner_atomic, &
245 enum_c_vals=s2a("NONE", "ATOMIC", "MOLECULAR"), &
246 enum_desc=s2a("No preconditioner", &
247 "Using atomic blocks", &
248 "Using molecular sub-blocks. Recommended if molecules are defined and not too large."), &
250 CALL section_add_keyword(section, keyword)
251 CALL keyword_release(keyword)
252
253 CALL keyword_create(keyword, __location__, name="S_SQRT_METHOD", &
254 description="Method for the caclulation of the sqrt of S.", &
255 usage="S_SQRT_METHOD NEWTONSCHULZ", &
256 default_i_val=ls_s_sqrt_ns, &
257 enum_c_vals=s2a("NEWTONSCHULZ", "PROOT"), &
258 enum_desc=s2a("Using a Newton-Schulz-like iteration", &
259 "Using the p-th root method."), &
260 enum_i_vals=[ls_s_sqrt_ns, ls_s_sqrt_proot])
261 CALL section_add_keyword(section, keyword)
262 CALL keyword_release(keyword)
263
264 CALL keyword_create(keyword, __location__, name="S_SQRT_ORDER", &
265 variants=s2a("SIGN_SQRT_ORDER"), &
266 description="Order of the iteration method for the calculation of the sqrt of S.", &
267 usage="S_SQRT_ORDER 3", default_i_val=3)
268 CALL section_add_keyword(section, keyword)
269 CALL keyword_release(keyword)
270
271 CALL keyword_create(keyword, __location__, name="SIGN_METHOD", &
272 description="Method used for the computation of the sign matrix.", &
273 usage="SIGN_METHOD NEWTONSCHULZ", &
274 default_i_val=ls_scf_sign_ns, &
275 citations=[vandevondele2012, niklasson2003], &
276 enum_c_vals=s2a("NEWTONSCHULZ", "PROOT"), &
277 enum_desc=s2a("Newton-Schulz iteration.", &
278 "p-th order root iteration"), &
279 enum_i_vals=[ls_scf_sign_ns, ls_scf_sign_proot])
280 CALL section_add_keyword(section, keyword)
281 CALL keyword_release(keyword)
282
283 CALL keyword_create(keyword, __location__, name="SIGN_ORDER", &
284 description="Order of the method used for the computation of the sign matrix.", &
285 usage="SIGN_ORDER 2", &
286 default_i_val=2)
287 CALL section_add_keyword(section, keyword)
288 CALL keyword_release(keyword)
289
290 CALL keyword_create(keyword, __location__, name="DYNAMIC_THRESHOLD", &
291 description="Should the threshold for the purification be chosen dynamically", &
292 usage="DYNAMIC_THRESHOLD .TRUE.", default_l_val=.false., lone_keyword_l_val=.true.)
293 CALL section_add_keyword(section, keyword)
294 CALL keyword_release(keyword)
295
296 CALL keyword_create(keyword, __location__, name="NON_MONOTONIC", &
297 description="Should the purification be performed non-monotonically. Relevant for TC2 only.", &
298 usage="NON_MONOTONIC .TRUE.", default_l_val=.true., lone_keyword_l_val=.true.)
299 CALL section_add_keyword(section, keyword)
300 CALL keyword_release(keyword)
301
302 CALL keyword_create( &
303 keyword, __location__, name="MATRIX_CLUSTER_TYPE", &
304 description="Specify how atomic blocks should be clustered in the used matrices, in order to improve flop rate, "// &
305 "and possibly speedup the matrix multiply. Note that the atomic s_preconditioner can not be used. "// &
306 "Furthermore, since screening is on matrix blocks, "// &
307 "slightly more accurate results can be expected with molecular.", &
308 usage="MATRIX_CLUSTER_TYPE MOLECULAR", &
309 default_i_val=ls_cluster_atomic, &
310 enum_c_vals=s2a("ATOMIC", "MOLECULAR"), &
311 enum_desc=s2a("Using atomic blocks", &
312 "Using molecular blocks."), &
314 CALL section_add_keyword(section, keyword)
315 CALL keyword_release(keyword)
316
317 CALL keyword_create(keyword, __location__, name="S_INVERSION", &
318 description="Method used to compute the inverse of S.", &
319 usage="S_INVERSION MOLECULAR", &
320 default_i_val=ls_s_inversion_sign_sqrt, &
321 enum_c_vals=s2a("SIGN_SQRT", "HOTELLING"), &
322 enum_desc=s2a("Using the inverse sqrt as obtained from sign function iterations.", &
323 "Using the Hotellign iteration."), &
325 CALL section_add_keyword(section, keyword)
326 CALL keyword_release(keyword)
327
328 CALL keyword_create(keyword, __location__, name="REPORT_ALL_SPARSITIES", &
329 description="Run the sparsity report at the end of the SCF", &
330 usage="REPORT_ALL_SPARSITIES", default_l_val=.false., lone_keyword_l_val=.true.)
331 CALL section_add_keyword(section, keyword)
332 CALL keyword_release(keyword)
333
334 CALL keyword_create(keyword, __location__, name="CHECK_S_INV", &
335 description="Perform an accuracy check on the inverse/sqrt of the s matrix.", &
336 usage="CHECK_S_INV", default_l_val=.false., lone_keyword_l_val=.true.)
337 CALL section_add_keyword(section, keyword)
338 CALL keyword_release(keyword)
339
340 CALL keyword_create(keyword, __location__, name="OT_INITIAL_GUESS", &
341 description="Initial guess of density matrix used for OT Diagonalization", &
342 usage="OT_INITIAL_GUESS ATOMIC", &
343 default_i_val=ec_ot_atomic, &
344 enum_c_vals=s2a("ATOMIC", "GROUND_STATE"), &
345 enum_desc=s2a("Generate an atomic density using the atomic code", &
346 "Using the ground-state density."), &
347 enum_i_vals=[ec_ot_atomic, ec_ot_gs])
348 CALL section_add_keyword(section, keyword)
349 CALL keyword_release(keyword)
350
351 CALL keyword_create( &
352 keyword, __location__, &
353 name="ADMM", &
354 description="Decide whether to perform ADMM in the exact exchange calc. for DC-DFT. "// &
355 "The ADMM XC correction is governed by the AUXILIARY_DENSITY_MATRIX_METHOD section in &DFT. "// &
356 "In most cases, the Hartree-Fock exchange is not too expensive and there is no need for ADMM, "// &
357 "ADMM can however provide significant speedup and memory savings in case of diffuse basis sets. ", &
358 usage="ADMM", &
359 default_l_val=.false., &
360 lone_keyword_l_val=.true.)
361 CALL section_add_keyword(section, keyword)
362 CALL keyword_release(keyword)
363
364 CALL keyword_create(keyword, __location__, name="EXTERNAL_RESPONSE_FILENAME", &
365 description="Name of the file that contains response information.", &
366 usage="EXTERNAL_RESPONSE_FILENAME <FILENAME>", &
367 default_c_val="TREXIO")
368 CALL section_add_keyword(section, keyword)
369 CALL keyword_release(keyword)
370
371 CALL keyword_create(keyword, __location__, name="EXTERNAL_RESPONSE_ERROR_FILENAME", &
372 description="Name of the file that contains response error information.", &
373 usage="EXTERNAL_RESPONSE_ERROR_FILENAME <FILENAME>", &
374 default_c_val="TREXIO")
375 CALL section_add_keyword(section, keyword)
376 CALL keyword_release(keyword)
377
378 CALL keyword_create(keyword, __location__, name="EXTERNAL_RESULT_FILENAME", &
379 description="Name of the file that contains results from external response calculation.", &
380 usage="EXTERNAL_RESULT_FILENAME <FILENAME>", &
381 default_c_val="CP2K_EXRESP.result")
382 CALL section_add_keyword(section, keyword)
383 CALL keyword_release(keyword)
384
385 CALL keyword_create( &
386 keyword, __location__, &
387 name="ERROR_ESTIMATION", &
388 description="Perform an error estimation for the response forces/stress. "// &
389 "Requires error estimates for the RHS of the response equation from input. ", &
390 usage="ERROR_ESTIMATION", &
391 default_l_val=.false., &
392 lone_keyword_l_val=.true.)
393 CALL section_add_keyword(section, keyword)
394 CALL keyword_release(keyword)
395
396 CALL keyword_create(keyword, __location__, name="ERROR_ESTIMATION_METHOD", &
397 description="Method used for error estimation: F(ull); D(ifferenc); E(xtrapolate).", &
398 usage="ERROR_ESTIMATION_METHOD E", &
399 default_c_val="E")
400 CALL section_add_keyword(section, keyword)
401 CALL keyword_release(keyword)
402
403 CALL keyword_create(keyword, __location__, name="ERROR_CUTOFF", &
404 description="Cutoff value for error estimation.", &
405 usage="ERROR_CUTOFF 1.E-6", &
406 default_r_val=1.e-5_dp)
407 CALL section_add_keyword(section, keyword)
408 CALL keyword_release(keyword)
409
410 CALL keyword_create(keyword, __location__, name="ERROR_SUBSPACE_SIZE", &
411 description="MAX. size of subspace for response vector extrapolation.", &
412 usage="ERROR_SUBSPACE_SIZE 100", &
413 default_i_val=250)
414 CALL section_add_keyword(section, keyword)
415 CALL keyword_release(keyword)
416
417 END SUBROUTINE create_ec_section
418
419! **************************************************************************************************
420!> \brief creates the linear scaling solver section
421!> \param section ...
422!> \author Joost VandeVondele [2010-10], JGH [2019-12]
423! **************************************************************************************************
424 SUBROUTINE create_ec_solver_section(section)
425 TYPE(section_type), POINTER :: section
426
427 TYPE(keyword_type), POINTER :: keyword
428
429 cpassert(.NOT. ASSOCIATED(section))
430 CALL section_create(section, __location__, name="RESPONSE_SOLVER", &
431 description="Specifies the parameters of the linear scaling solver routines", &
432 n_keywords=24, n_subsections=3, repeats=.false., &
433 citations=[vandevondele2012])
434
435 NULLIFY (keyword)
436
437 CALL keyword_create(keyword, __location__, name="EPS", &
438 description="Target accuracy for the convergence of the conjugate gradient.", &
439 usage="EPS 1.e-10", default_r_val=1.e-12_dp)
440 CALL section_add_keyword(section, keyword)
441 CALL keyword_release(keyword)
442
443 CALL keyword_create(keyword, __location__, name="EPS_FILTER", &
444 description="Threshold used for filtering matrix operations.", &
445 usage="EPS_FILTER 1.0E-10", default_r_val=1.0e-10_dp)
446 CALL section_add_keyword(section, keyword)
447 CALL keyword_release(keyword)
448
449 CALL keyword_create(keyword, __location__, name="EPS_LANCZOS", &
450 description="Threshold used for lanczos estimates.", &
451 usage="EPS_LANCZOS 1.0E-4", default_r_val=1.0e-3_dp)
452 CALL section_add_keyword(section, keyword)
453 CALL keyword_release(keyword)
454
455 CALL keyword_create(keyword, __location__, name="MAX_ITER", &
456 description="Maximum number of conjugate gradient iteration "// &
457 "to be performed for one optimization.", &
458 usage="MAX_ITER 200", default_i_val=50)
459 CALL section_add_keyword(section, keyword)
460 CALL keyword_release(keyword)
461
462 CALL keyword_create(keyword, __location__, name="MAX_ITER_LANCZOS", &
463 description="Maximum number of lanczos iterations.", &
464 usage="MAX_ITER_LANCZOS 128", default_i_val=128)
465 CALL section_add_keyword(section, keyword)
466 CALL keyword_release(keyword)
467
468 CALL keyword_create(keyword, __location__, name="METHOD", &
469 description="Algorithm used to solve response equation. "// &
470 "Both solver are conjugate gradient based, but use either a vector (MO-coefficient) "// &
471 "or density matrix formalism in the orthonormal AO-basis to obtain response density", &
472 usage="METHOD SOLVER", &
473 default_i_val=ec_ls_solver, &
474 enum_c_vals=s2a("MO_SOLVER", "AO_ORTHO"), &
475 enum_desc=s2a("Solver based on MO (vector) formalism", &
476 "Solver based on density matrix formalism"), &
477 enum_i_vals=[ec_mo_solver, ec_ls_solver])
478 CALL section_add_keyword(section, keyword)
479 CALL keyword_release(keyword)
480
481 CALL keyword_create( &
482 keyword, __location__, name="PRECONDITIONER", &
483 description="Type of preconditioner to be used with MO conjugate gradient solver. "// &
484 "They differ in effectiveness, cost of construction, cost of application. "// &
485 "Properly preconditioned minimization can be orders of magnitude faster than doing nothing. "// &
486 "Only multi-level conjugate gradient preconditioner (MULTI_LEVEL) available for AO response solver (AO_ORTHO). ", &
487 usage="PRECONDITIONER FULL_ALL", &
488 default_i_val=precond_mlp, &
489 enum_c_vals=s2a("FULL_ALL", "FULL_SINGLE_INVERSE", "FULL_SINGLE", "FULL_KINETIC", "FULL_S_INVERSE", &
490 "MULTI_LEVEL", "NONE"), &
491 enum_desc=s2a("Most effective state selective preconditioner based on diagonalization, "// &
492 "requires the ENERGY_GAP parameter to be an underestimate of the HOMO-LUMO gap. "// &
493 "This preconditioner is recommended for almost all systems, except very large systems where "// &
494 "make_preconditioner would dominate the total computational cost.", &
495 "Based on H-eS cholesky inversion, similar to FULL_SINGLE in preconditioning efficiency "// &
496 "but cheaper to construct, "// &
497 "might be somewhat less robust. Recommended for large systems.", &
498 "Based on H-eS diagonalisation, not as good as FULL_ALL, but somewhat cheaper to apply. ", &
499 "Cholesky inversion of S and T, fast construction, robust, and relatively good, "// &
500 "use for very large systems.", &
501 "Cholesky inversion of S, not as good as FULL_KINETIC, yet equally expensive.", &
502 "Based on same CG as AO-solver itself, but uses cheaper linear transformation", &
503 "skip preconditioning"), &
506 CALL section_add_keyword(section, keyword)
507 CALL keyword_release(keyword)
508
509 CALL keyword_create(keyword, __location__, name="S_PRECONDITIONER", &
510 description="Preconditions S with some appropriate form.", &
511 usage="S_PRECONDITIONER MOLECULAR", &
512 default_i_val=ls_s_preconditioner_atomic, &
513 enum_c_vals=s2a("NONE", "ATOMIC", "MOLECULAR"), &
514 enum_desc=s2a("No preconditioner", &
515 "Using atomic blocks", &
516 "Using molecular sub-blocks. Recommended if molecules are defined and not too large."), &
518 CALL section_add_keyword(section, keyword)
519 CALL keyword_release(keyword)
520
521 CALL keyword_create(keyword, __location__, name="S_SQRT_METHOD", &
522 description="Method for the caclulation of the sqrt of S.", &
523 usage="S_SQRT_METHOD NEWTONSCHULZ", &
524 default_i_val=ls_s_sqrt_ns, &
525 enum_c_vals=s2a("NEWTONSCHULZ", "PROOT"), &
526 enum_desc=s2a("Using a Newton-Schulz-like iteration", &
527 "Using the p-th root method."), &
528 enum_i_vals=[ls_s_sqrt_ns, ls_s_sqrt_proot])
529 CALL section_add_keyword(section, keyword)
530 CALL keyword_release(keyword)
531
532 CALL keyword_create(keyword, __location__, name="S_SQRT_ORDER", &
533 variants=s2a("SIGN_SQRT_ORDER"), &
534 description="Order of the iteration method for the calculation of the sqrt of S.", &
535 usage="S_SQRT_ORDER 3", default_i_val=3)
536 CALL section_add_keyword(section, keyword)
537 CALL keyword_release(keyword)
538
539 CALL keyword_create( &
540 keyword, __location__, name="MATRIX_CLUSTER_TYPE", &
541 description="Specify how atomic blocks should be clustered in the used matrices, in order to improve flop rate, "// &
542 "and possibly speedup the matrix multiply. Note that the atomic s_preconditioner can not be used. "// &
543 "Furthermore, since screening is on matrix blocks, "// &
544 "slightly more accurate results can be expected with molecular.", &
545 usage="MATRIX_CLUSTER_TYPE MOLECULAR", &
546 default_i_val=ls_cluster_atomic, &
547 enum_c_vals=s2a("ATOMIC", "MOLECULAR"), &
548 enum_desc=s2a("Using atomic blocks", &
549 "Using molecular blocks."), &
551 CALL section_add_keyword(section, keyword)
552 CALL keyword_release(keyword)
553
554 CALL keyword_create(keyword, __location__, name="S_INVERSION", &
555 description="Method used to compute the inverse of S.", &
556 usage="S_INVERSION MOLECULAR", &
557 default_i_val=ls_s_inversion_sign_sqrt, &
558 enum_c_vals=s2a("SIGN_SQRT", "HOTELLING"), &
559 enum_desc=s2a("Using the inverse sqrt as obtained from sign function iterations.", &
560 "Using the Hotellign iteration."), &
562 CALL section_add_keyword(section, keyword)
563 CALL keyword_release(keyword)
564
565 CALL keyword_create(keyword, __location__, name="RESTART", &
566 description="Restart the response calculation if the restart file exists", &
567 usage="RESTART", &
568 default_l_val=.false., lone_keyword_l_val=.true.)
569 CALL section_add_keyword(section, keyword)
570 CALL keyword_release(keyword)
571
572 CALL keyword_create(keyword, __location__, name="RESTART_EVERY", &
573 description="Restart the conjugate gradient after the specified number of iterations.", &
574 usage="RESTART_EVERY 50", default_i_val=50)
575 CALL section_add_keyword(section, keyword)
576 CALL keyword_release(keyword)
577
578 END SUBROUTINE create_ec_solver_section
579
580! **************************************************************************************************
581!> \brief Create the print dft section
582!> \param section the section to create
583!> \author fbelle - from create_print_dft_section
584! **************************************************************************************************
585 SUBROUTINE create_ec_print_section(section)
586 TYPE(section_type), POINTER :: section
587
588 TYPE(keyword_type), POINTER :: keyword
589 TYPE(section_type), POINTER :: print_key
590
591 cpassert(.NOT. ASSOCIATED(section))
592 CALL section_create(section, __location__, name="PRINT", &
593 description="Section of possible print options in EC code.", &
594 n_keywords=0, n_subsections=1, repeats=.false.)
595
596 NULLIFY (print_key, keyword)
597
598 ! Output of BQB volumetric files
599 CALL cp_print_key_section_create(print_key, __location__, name="E_DENSITY_BQB", &
600 description="Controls the output of the electron density to the losslessly"// &
601 " compressed BQB file format, see [Brehm2018]"// &
602 " (via LibBQB see <https://brehm-research.de/bqb>)."// &
603 " Currently does not work with changing cell vector (NpT ensemble).", &
604 print_level=debug_print_level + 1, filename="", &
605 citations=[brehm2018])
606
607 CALL keyword_create(keyword, __location__, name="SKIP_FIRST", &
608 description="Skips the first step of a MD run (avoids duplicate step if restarted).", &
609 usage="SKIP_FIRST T", default_l_val=.false., lone_keyword_l_val=.true.)
610 CALL section_add_keyword(print_key, keyword)
611 CALL keyword_release(keyword)
612
613 CALL keyword_create(keyword, __location__, name="STORE_STEP_NUMBER", &
614 description="Stores the step number and simulation time in the comment line of each BQB"// &
615 " frame. Switch it off for binary compatibility with original CP2k CUBE files.", &
616 usage="STORE_STEP_NUMBER F", default_l_val=.true., lone_keyword_l_val=.true.)
617 CALL section_add_keyword(print_key, keyword)
618 CALL keyword_release(keyword)
619
620 CALL keyword_create(keyword, __location__, name="CHECK", &
621 description="Performs an on-the-fly decompression of each compressed BQB frame to check"// &
622 " whether the volumetric data exactly matches, and aborts the run if not so.", &
623 usage="CHECK T", default_l_val=.false., lone_keyword_l_val=.true.)
624 CALL section_add_keyword(print_key, keyword)
625 CALL keyword_release(keyword)
626
627 CALL keyword_create(keyword, __location__, name="OVERWRITE", &
628 description="Specify this keyword to overwrite the output BQB file if"// &
629 " it already exists. By default, the data is appended to an existing file.", &
630 usage="OVERWRITE T", default_l_val=.false., lone_keyword_l_val=.true.)
631 CALL section_add_keyword(print_key, keyword)
632 CALL keyword_release(keyword)
633
634 CALL keyword_create(keyword, __location__, name="HISTORY", &
635 description="Controls how many previous steps are taken into account for extrapolation in"// &
636 " compression. Use a value of 1 to compress the frames independently.", &
637 usage="HISTORY 10", n_var=1, default_i_val=10, type_of_var=integer_t)
638 CALL section_add_keyword(print_key, keyword)
639 CALL keyword_release(keyword)
640
641 CALL keyword_create(keyword, __location__, name="PARAMETER_KEY", &
642 description="Allows to supply previously optimized compression parameters via a"// &
643 " parameter key (alphanumeric character sequence starting with 'at')."// &
644 " Just leave away the 'at' sign here, because CP2k will otherwise"// &
645 " assume it is a variable name in the input", &
646 usage="PARAMETER_KEY <KEY>", n_var=1, default_c_val="", type_of_var=char_t)
647 CALL section_add_keyword(print_key, keyword)
648 CALL keyword_release(keyword)
649
650 CALL keyword_create(keyword, __location__, name="OPTIMIZE", &
651 description="Controls the time spent to optimize the parameters for compression efficiency.", &
652 usage="OPTIMIZE {OFF,QUICK,NORMAL,PATIENT,EXHAUSTIVE}", repeats=.false., n_var=1, &
653 default_i_val=bqb_opt_quick, &
654 enum_c_vals=s2a("OFF", "QUICK", "NORMAL", "PATIENT", "EXHAUSTIVE"), &
655 enum_desc=s2a("No optimization (use defaults)", "Quick optimization", &
656 "Standard optimization", "Precise optimization", "Exhaustive optimization"), &
658 CALL section_add_keyword(print_key, keyword)
659 CALL keyword_release(keyword)
660
661 CALL section_add_subsection(section, print_key)
662 CALL section_release(print_key)
663
664 ! Voronoi Integration via LibVori
665 NULLIFY (print_key)
666 CALL create_print_voronoi_section(print_key)
667 CALL section_add_subsection(section, print_key)
668 CALL section_release(print_key)
669
670 !Printing of Moments
671 CALL create_dipoles_section(print_key, "MOMENTS", high_print_level)
672 CALL keyword_create( &
673 keyword, __location__, &
674 name="MAX_MOMENT", &
675 description="Maximum moment to be calculated. Values higher than 1 not implemented under periodic boundaries.", &
676 usage="MAX_MOMENT {integer}", &
677 repeats=.false., &
678 n_var=1, &
679 type_of_var=integer_t, &
680 default_i_val=1)
681 CALL section_add_keyword(print_key, keyword)
682 CALL keyword_release(keyword)
683 CALL keyword_create(keyword, __location__, &
684 name="MAGNETIC", &
685 description="Calculate also magnetic moments, only implemented without periodic boundaries", &
686 usage="MAGNETIC yes", &
687 repeats=.false., &
688 n_var=1, &
689 default_l_val=.false., &
690 lone_keyword_l_val=.true.)
691 CALL section_add_keyword(print_key, keyword)
692 CALL keyword_release(keyword)
693 CALL section_add_subsection(section, print_key)
694 CALL section_release(print_key)
695
696 END SUBROUTINE create_ec_print_section
697
698END MODULE input_cp2k_ec
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public vandevondele2012
integer, save, public niklasson2003
integer, save, public brehm2018
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer, parameter, public debug_print_level
integer, parameter, public high_print_level
subroutine, public cp_print_key_section_create(print_key_section, location, name, description, print_level, each_iter_names, each_iter_values, add_last, filename, common_iter_levels, citations, unit_str)
creates a print_key section
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public ec_functional_harris
integer, parameter, public bqb_opt_quick
integer, parameter, public ec_functional_dc
integer, parameter, public ls_s_preconditioner_molecular
integer, parameter, public precond_mlp
integer, parameter, public ls_s_inversion_hotelling
integer, parameter, public ls_cluster_molecular
integer, parameter, public ec_ot_atomic
integer, parameter, public ls_s_preconditioner_atomic
integer, parameter, public ec_mo_solver
integer, parameter, public bqb_opt_normal
integer, parameter, public ot_precond_full_kinetic
integer, parameter, public bqb_opt_off
integer, parameter, public ec_ot_diag
integer, parameter, public ec_ot_gs
integer, parameter, public bqb_opt_exhaustive
integer, parameter, public ls_s_sqrt_proot
integer, parameter, public ot_precond_full_single
integer, parameter, public ls_s_sqrt_ns
integer, parameter, public ls_s_preconditioner_none
integer, parameter, public ls_scf_sign_proot
integer, parameter, public ot_precond_none
integer, parameter, public ot_precond_full_single_inverse
integer, parameter, public ec_matrix_tc2
integer, parameter, public ec_diagonalization
integer, parameter, public ec_matrix_trs4
integer, parameter, public ec_functional_ext
integer, parameter, public ls_scf_sign_ns
integer, parameter, public ec_matrix_sign
integer, parameter, public ls_s_inversion_sign_sqrt
integer, parameter, public bqb_opt_patient
integer, parameter, public ot_precond_s_inverse
integer, parameter, public kg_cholesky
integer, parameter, public ot_precond_full_all
integer, parameter, public ls_cluster_atomic
integer, parameter, public ec_ls_solver
function that build the dft section of the input
subroutine, public create_ec_section(section)
creates the ENERGY CORRECTION section
creates the mm section of the input
subroutine, public create_dipoles_section(print_key, label, print_level)
creates the input section for the qs part
function that build the dft section of the input
subroutine, public create_print_voronoi_section(print_key)
Create the print voronoi section.
function that build the xc section of the input
subroutine, public create_xc_section(section)
creates the input section for the xc part
represents keywords in an input
subroutine, public keyword_release(keyword)
releases the given keyword (see doc/ReferenceCounting.html)
subroutine, public keyword_create(keyword, location, name, description, usage, type_of_var, n_var, repeats, variants, default_val, default_l_val, default_r_val, default_lc_val, default_c_val, default_i_val, default_l_vals, default_r_vals, default_c_vals, default_i_vals, lone_keyword_val, lone_keyword_l_val, lone_keyword_r_val, lone_keyword_c_val, lone_keyword_i_val, lone_keyword_l_vals, lone_keyword_r_vals, lone_keyword_c_vals, lone_keyword_i_vals, enum_c_vals, enum_i_vals, enum, enum_strict, enum_desc, unit_str, citations, deprecation_notice, removed)
creates a keyword object
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_create(section, location, name, description, n_keywords, n_subsections, repeats, citations, deprecation_notice)
creates a list of keywords
subroutine, public section_add_keyword(section, keyword)
adds a keyword to the given section
subroutine, public section_add_subsection(section, subsection)
adds a subsection to the given section
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
a wrapper for basic fortran types.
integer, parameter, public char_t
integer, parameter, public integer_t
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Utilities for string manipulations.
represent a keyword in the input
represent a section of the input file