37#include "./base/base_uses.f90"
42 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'input_cp2k_loc'
60 TYPE(
section_type),
POINTER :: print_key, print_section, subsection
62 cpassert(.NOT.
ASSOCIATED(section))
64 NULLIFY (keyword, print_key)
66 description=
"Use one of the available methods to define the localization"// &
67 " and possibly to optimize it to a minimum or a maximum.", &
68 n_keywords=8, n_subsections=0, repeats=.false., &
71 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
72 description=
"controls the activation of the MOS localization procedure", &
73 usage=
"&LOCALIZE T", default_l_val=.false., lone_keyword_l_val=.true.)
78 description=
"Maximum number of iterations used for localization methods", &
79 usage=
"MAX_ITER 2000", default_i_val=10000)
84 keyword, __location__, name=
"MAX_CRAZY_ANGLE", &
85 description=
"Largest allowed angle for the crazy rotations algorithm (smaller is slower but more stable).", &
86 usage=
"MAX_CRAZY_ANGLE 0.1", unit_str=
"rad", default_r_val=0.2_dp)
91 description=
"scale angles", &
92 usage=
"CRAZY_SCALE 0.9", default_r_val=1.0_dp)
96 CALL keyword_create(keyword, __location__, name=
"CRAZY_USE_DIAG", &
97 description=
"Use diagonalization (slow) or pade based calculation of matrix exponentials.", &
98 usage=
"CRAZY_USE_DIAG ", default_l_val=.false., lone_keyword_l_val=.true.)
103 keyword, __location__, name=
"USE_HISTORY", &
104 description=
"Generate an improved initial guess based on a history of results, which is useful during MD. "// &
105 "Will only work if the number of states to be localized remains constant.", &
106 usage=
"USE_HISTORY ", default_l_val=.false., lone_keyword_l_val=.true.)
111 description=
"localize each n steps", &
117 keyword, __location__, name=
"EPS_OCCUPATION", &
118 description=
"Tolerance in the occupation number to select only fully occupied orbitals for the rotation", &
119 usage=
"EPS_OCCUPATION 1.E-5", default_r_val=1.0e-8_dp)
123 CALL keyword_create(keyword, __location__, name=
"OUT_ITER_EACH", &
124 description=
"Every how many iterations of the localization algorithm "// &
125 "(Jacobi) the tolerance value is printed out", &
126 usage=
"OUT_ITER_EACH 100", default_i_val=100)
130 CALL keyword_create(keyword, __location__, name=
"EPS_LOCALIZATION", &
131 description=
"Tolerance used in the convergence criterion of the localization methods.", &
132 usage=
"EPS_LOCALIZATION 1.0E-2", default_r_val=1.0e-4_dp)
137 description=
"Requires the maximization of the spread of the wfn", &
138 usage=
"MIN_OR_MAX (SPREADMIN|SPREADMAX)", &
139 enum_c_vals=[
"SPREADMIN",
"SPREADMAX"], &
146 keyword, __location__, name=
"METHOD", &
147 description=
"Method of optimization if any", &
148 usage=
"METHOD (JACOBI|CRAZY|DIRECT|GAPO|L1SD|SCDM|CS|NONE)", &
149 enum_c_vals=
s2a(
"NONE",
"JACOBI",
"CRAZY",
"GAPO",
"L1SD",
"DIRECT",
"SCDM",
"CS"), &
158 enum_desc=
s2a(
"No localization is applied", &
159 "Using 2 x 2 rotations of the orbitals, slow but robust", &
160 "A new fast method is applied, might be slightly less robust than jacobi, but usually much faster", &
161 "Gradient ascent for partially occupied wannier functions", &
162 "Steepest descent minimization of an approximate l1 norm", &
163 "Using a direct minimisation approacha", &
164 "Use QR factorization", &
165 "Using the Cardoso-Souloumiac algorithm for complex matrices"), &
172 description=
"Initial guess for coefficients if METHOD GAPO is used", &
173 usage=
"CPO_GUESS (ATOMIC|RESTART|RANDOM)", &
174 enum_c_vals=
s2a(
"ATOMIC",
"RESTART",
"RANDOM"), &
180 CALL keyword_create(keyword, __location__, name=
"CPO_GUESS_SPACE", &
181 description=
"Orbital space from which initial guess for coefficients is determined "// &
182 "if METHOD GAPO and CPO_GUESS ATOMIC are employed", &
183 usage=
"CPO_GUESS_SPACE (WAN|ALL)", &
184 enum_c_vals=
s2a(
"WAN",
"ALL"), &
191 description=
"Use conjugate gradient in conjunction with METHOD GAPO. If FALSE, "// &
192 "steepest descent is used instead.", &
193 usage=
"CG_PO", default_l_val=.true., &
194 lone_keyword_l_val=.true.)
198 CALL keyword_create(keyword, __location__, name=
"JACOBI_FALLBACK", &
199 description=
"Use Jacobi method in case no convergence was achieved"// &
200 " by using the crazy rotations method.", &
201 usage=
"JACOBI_FALLBACK", default_l_val=.true., &
202 lone_keyword_l_val=.true.)
206 CALL keyword_create(keyword, __location__, name=
"JACOBI_REFINEMENT", &
207 description=
"Use Jacobi method to refine the localisation obtained by SCDM", &
208 usage=
"JACOBI_REFINEMENT", default_l_val=.false., &
209 lone_keyword_l_val=.true.)
214 description=
"Restart the localization from a set of orbitals"// &
215 " read from a localization restart file.", &
216 usage=
"RESTART", default_l_val=.false., &
217 lone_keyword_l_val=.true.)
221 CALL keyword_create(keyword, __location__, name=
"LOCHOMO_RESTART_FILE_NAME", &
222 description=
"File name where to read the MOS from "// &
223 "which to restart the localization procedure for occupied states", &
224 usage=
"LOCHOMO_RESTART_FILE_NAME <FILENAME>", &
229 CALL keyword_create(keyword, __location__, name=
"LOCMIXD_RESTART_FILE_NAME", &
230 description=
"File name where to read the MOS from "// &
231 "which to restart the localization procedure for MIXED states", &
232 usage=
"LOCMIXD_RESTART_FILE_NAME <FILENAME>", &
237 CALL keyword_create(keyword, __location__, name=
"LOCLUMO_RESTART_FILE_NAME", &
238 description=
"File name where to read the MOS from "// &
239 "which to restart the localization procedure for unoccupied states", &
240 usage=
"LOCLUMO_RESTART_FILE_NAME <FILENAME>", &
246 description=
"Type of opertator which defines the spread functional", &
247 usage=
"OPERATOR (BERRY|BOYS|PIPEK)", &
248 enum_c_vals=
s2a(
"BERRY",
"BOYS",
"PIPEK"), &
256 description=
"Indexes of the occupied wfn to be localized "// &
257 "This keyword can be repeated several times "// &
258 "(useful if you have to specify many indexes).", &
260 n_var=-1, type_of_var=
integer_t, repeats=.true.)
264 CALL keyword_create(keyword, __location__, name=
"LIST_UNOCCUPIED", &
265 description=
"Indexes of the unoccupied states to be localized, "// &
266 "up to now only valid in combination with GPW. "// &
267 "This keyword has to be present if unoccupied states should be localized. "// &
268 "This keyword can be repeated several times "// &
269 "(useful if you have to specify many indexes).", &
270 usage=
"LIST_UNOCCUPIED 1 2", &
271 n_var=-1, type_of_var=
integer_t, repeats=.true.)
276 description=
"Number of orbitals above fully occupied MOs to be localized, "// &
277 "up to now only valid in combination with GPW. "// &
278 "This keyword has to be present for STATES MIXED option. "// &
279 "Otherwise, only the fully occupied MOs are localized.", &
280 usage=
"NEXTRA 5", default_i_val=0)
285 description=
"Which states to localize, LUMO up to now only available in GPW", &
286 usage=
"STATES (HOMO|LUMO|MIXED|ALL)", &
287 enum_c_vals=
s2a(
"OCCUPIED",
"UNOCCUPIED",
"MIXED",
"ALL"), &
294 keyword, __location__, &
295 name=
"ENERGY_RANGE", &
296 description=
"Select the orbitals to be localized within the given energy range."// &
297 " This type of selection cannot be added on top of the selection through a LIST. It reads to reals that are"// &
298 " lower and higher boundaries of the energy range.", &
299 usage=
"ENERGY_RANGE lower_bound {real}, higher_bound {real}", &
301 n_var=2, default_r_vals=[0._dp, 0._dp], unit_str=
'eV', &
306 NULLIFY (print_section)
308 description=
"Collects all printing options related to the Wannier centers and "// &
309 "properties computed with Wannier centers.", &
310 n_keywords=0, n_subsections=1, repeats=.false.)
313 description=
"Controls the printing basic info about the method", &
330 description=
"Section controlling the calculation of molecular multipole moments.", &
333 description=
"Maximum order of mulitpoles to be calculated.", &
334 usage=
"ORDER {integer}", default_i_val=2, type_of_var=
integer_t)
342 description=
"Section controlling the calculation of "// &
343 "localized moments", &
349 description=
"Maximum moment to be calculated.", &
350 usage=
"MAX_MOMENT {integer}", &
360 description=
"Calculate also magnetic moments.", &
361 usage=
"MAGNETIC .TRUE.", &
364 default_l_val=.false., &
365 lone_keyword_l_val=.true.)
371 description=
"Calculate expectation values of the el. multipole "// &
372 "moments in their velocity representation during RTP. Implemented up "// &
373 "to el. quadrupole moment.", &
374 usage=
"VEL_REPRS .TRUE.", &
377 default_l_val=.false., &
378 lone_keyword_l_val=.true.)
384 description=
"Include non local commutator for velocity "// &
385 "representations. Necessary for origin independent results.", &
386 usage=
"COM_NL .TRUE.", &
389 default_l_val=.false., &
390 lone_keyword_l_val=.true.)
397 CALL create_molecular_states_section(subsection)
401 CALL create_wannier_states_section(subsection)
422 cpassert(
ASSOCIATED(section))
423 NULLIFY (print_key, keyword)
425 description=
"Controls the printing of the wannier functions ", &
428 description=
"The stride (X,Y,Z) used to write the cube file "// &
429 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
430 " 1 number valid for all components.", &
431 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
436 description=
"Controls the printing of the Wannier function "// &
437 "electronic densities", &
438 default_l_val=.false., lone_keyword_l_val=.true.)
442 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
443 variants=[
"CUBES_LU"], &
444 description=
"The lower and upper index of the states to be printed as cube", &
445 usage=
"CUBES_LU_BOUNDS integer integer", &
446 n_var=2, default_i_vals=[0, -2], type_of_var=
integer_t)
451 description=
"Indexes of the states to be printed as cube files"// &
452 " This keyword can be repeated several times"// &
453 " (useful if you have to specify many indexes).", &
454 usage=
"CUBES_LIST 1 2", &
455 n_var=-1, type_of_var=
integer_t, repeats=.true.)
459 description=
"append the cube files when they already exist", &
460 default_l_val=.false., lone_keyword_l_val=.true.)
469 description=
"Controls the printing of the wannier functions", &
474 description=
"prints out the wannier centers together with the particles", &
475 usage=
"IONS+CENTERS", default_l_val=.false., &
476 lone_keyword_l_val=.true.)
481 description=
"Specifies the format of the output file when IONS+CENTERS is enabled.")
487 description=
"Controls the printing of the wannier functions", &
490 CALL keyword_create(keyword, __location__, name=
"SECOND_MOMENTS", &
491 description=
"Prints out the upper triangular part of the position covariance matrix. "// &
492 "Default is to use a non-periodic position operator. ", &
493 usage=
"SECOND_MOMENTS", default_l_val=.false., &
494 lone_keyword_l_val=.true.)
499 description=
"For the covariance matrix, use the periodic position operator."// &
500 " Requires setting LMAXN1 in QS section to 6 or higher.", &
501 usage=
"PERIODIC", default_l_val=.false., &
502 lone_keyword_l_val=.true.)
511 description=
"Controls the printing of restart file for localized MOS", &
523 SUBROUTINE create_molecular_states_section(print_key)
529 cpassert(.NOT.
ASSOCIATED(print_key))
530 NULLIFY (print_key2, keyword)
532 description=
"Controls printing of molecular states ", &
536 keyword, __location__, name=
"CUBE_EVAL_RANGE", &
537 description=
"only write cubes if the energies of the corresponding molecular states lie in the given interval. "// &
538 "Default is all states.", &
539 usage=
"CUBE_EVAL_RANGE -1.0 1.0", unit_str=
"hartree", n_var=2, type_of_var=
real_t)
544 description=
"Can be used to mark given molecular states."// &
545 " Sets a mark to both, occupied and unoccupied states. "// &
546 "Occupied states are counted beginning with HOMO=1, "// &
547 "unoccupied states are counted beginning with LUMO=1, "// &
548 "This is only meaningful in combination with WFN_MIX. "// &
549 "First integer specifies the molecule, second integer specifies the state.", &
550 usage=
"MARK_STATES integer integer", &
551 n_var=2, default_i_vals=[-1, -1], type_of_var=
integer_t, repeats=.true.)
556 description=
"Controls the printing of cube files", &
559 description=
"The stride (X,Y,Z) used to write the cube file "// &
560 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
561 " 1 number valid for all components.", &
562 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
567 END SUBROUTINE create_molecular_states_section
573 SUBROUTINE create_wannier_states_section(print_key)
579 cpassert(.NOT.
ASSOCIATED(print_key))
580 NULLIFY (print_key2, keyword)
582 description=
"Controls printing of Wannier states ", &
586 keyword, __location__, name=
"CUBE_EVAL_RANGE", &
587 description=
"only write cubes if the energies of the corresponding molecular states lie in the given interval. "// &
588 "Default is all states.", &
589 usage=
"CUBE_EVAL_RANGE -1.0 1.0", unit_str=
"hartree", n_var=2, type_of_var=
real_t)
594 description=
"Can be used to mark given molecular states."// &
595 " Sets a mark to both, occupied and unoccupied states. "// &
596 "Occupied states are counted beginning with HOMO=1, "// &
597 "unoccupied states are counted beginning with LUMO=1, "// &
598 "This is only meaningful in combination with WFN_MIX. "// &
599 "First integer specifies the molecule, second integer specifies the state.", &
600 usage=
"MARK_STATES integer integer", &
601 n_var=2, default_i_vals=[-1, -1], type_of_var=
integer_t, repeats=.true.)
606 description=
"Print the Wannier states in the Cartesian basis instead of the default spherical basis.", &
607 default_l_val=.false., lone_keyword_l_val=.true.)
612 description=
"Controls the printing of cube files", &
615 description=
"The stride (X,Y,Z) used to write the cube file "// &
616 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
617 " 1 number valid for all components.", &
618 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
623 END SUBROUTINE create_wannier_states_section
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public hunt2003
integer, save, public schreder2024_2
integer, save, public schreder2024_1
integer, save, public schreder2021
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
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, do_backup)
creates a print_key section
integer, parameter, public debug_print_level
integer, parameter, public low_print_level
integer, parameter, public high_print_level
integer, parameter, public add_last_numeric
Defines the basic variable types.
integer, parameter, public dp
Utilities for string manipulations.