34#include "./base/base_uses.f90"
39 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'input_cp2k_loc'
57 TYPE(
section_type),
POINTER :: print_key, print_section, subsection
59 cpassert(.NOT.
ASSOCIATED(section))
61 NULLIFY (keyword, print_key)
63 description=
"Use one of the available methods to define the localization"// &
64 " and possibly to optimize it to a minimum or a maximum.", &
65 n_keywords=8, n_subsections=0, repeats=.false.)
67 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
68 description=
"controls the activation of the MOS localization procedure", &
69 usage=
"&LOCALIZE T", default_l_val=.false., lone_keyword_l_val=.true.)
74 description=
"Maximum number of iterations used for localization methods", &
75 usage=
"MAX_ITER 2000", default_i_val=10000)
80 keyword, __location__, name=
"MAX_CRAZY_ANGLE", &
81 description=
"Largest allowed angle for the crazy rotations algorithm (smaller is slower but more stable).", &
82 usage=
"MAX_CRAZY_ANGLE 0.1", unit_str=
"rad", default_r_val=0.2_dp)
87 description=
"scale angles", &
88 usage=
"CRAZY_SCALE 0.9", default_r_val=1.0_dp)
92 CALL keyword_create(keyword, __location__, name=
"CRAZY_USE_DIAG", &
93 description=
"Use diagonalization (slow) or pade based calculation of matrix exponentials.", &
94 usage=
"CRAZY_USE_DIAG ", default_l_val=.false., lone_keyword_l_val=.true.)
99 keyword, __location__, name=
"USE_HISTORY", &
100 description=
"Generate an improved initial guess based on a history of results, which is useful during MD. "// &
101 "Will only work if the number of states to be localized remains constant.", &
102 usage=
"USE_HISTORY ", default_l_val=.false., lone_keyword_l_val=.true.)
107 keyword, __location__, name=
"EPS_OCCUPATION", &
108 description=
"Tolerance in the occupation number to select only fully occupied orbitals for the rotation", &
109 usage=
"EPS_OCCUPATION 1.E-5", default_r_val=1.0e-8_dp)
113 CALL keyword_create(keyword, __location__, name=
"OUT_ITER_EACH", &
114 description=
"Every how many iterations of the localization algorithm "// &
115 "(Jacobi) the tolerance value is printed out", &
116 usage=
"OUT_ITER_EACH 100", default_i_val=100)
120 CALL keyword_create(keyword, __location__, name=
"EPS_LOCALIZATION", &
121 description=
"Tolerance used in the convergence criterion of the localization methods.", &
122 usage=
"EPS_LOCALIZATION 1.0E-2", default_r_val=1.0e-4_dp)
127 description=
"Requires the maximization of the spread of the wfn", &
128 usage=
"MIN_OR_MAX (SPREADMIN|SPREADMAX)", &
129 enum_c_vals=(/
"SPREADMIN",
"SPREADMAX"/), &
136 keyword, __location__, name=
"METHOD", &
137 description=
"Method of optimization if any", &
138 usage=
"METHOD (JACOBI|CRAZY|DIRECT|GAPO|L1SD|SCDM|NONE)", &
139 enum_c_vals=
s2a(
"NONE",
"JACOBI",
"CRAZY",
"GAPO",
"L1SD",
"DIRECT",
"SCDM"), &
146 enum_desc=
s2a(
"No localization is applied", &
147 "Using 2 x 2 rotations of the orbitals, slow but robust", &
148 "A new fast method is applied, might be slightly less robust than jacobi, but usually much faster", &
149 "Gradient ascent for partially occupied wannier functions", &
150 "Steepest descent minimization of an approximate l1 norm", &
151 "Using a direct minimisation approacha",
"Use QR factorization"), &
157 description=
"Initial guess for coefficients if METHOD GAPO is used", &
158 usage=
"CPO_GUESS (ATOMIC|RESTART|RANDOM)", &
159 enum_c_vals=
s2a(
"ATOMIC",
"RESTART",
"RANDOM"), &
165 CALL keyword_create(keyword, __location__, name=
"CPO_GUESS_SPACE", &
166 description=
"Orbital space from which initial guess for coefficients is determined "// &
167 "if METHOD GAPO and CPO_GUESS ATOMIC are employed", &
168 usage=
"CPO_GUESS_SPACE (WAN|ALL)", &
169 enum_c_vals=
s2a(
"WAN",
"ALL"), &
176 description=
"Use conjugate gradient in conjunction with METHOD GAPO. If FALSE, "// &
177 "steepest descent is used instead.", &
178 usage=
"CG_PO", default_l_val=.true., &
179 lone_keyword_l_val=.true.)
183 CALL keyword_create(keyword, __location__, name=
"JACOBI_FALLBACK", &
184 description=
"Use Jacobi method in case no convergence was achieved"// &
185 " by using the crazy rotations method.", &
186 usage=
"JACOBI_FALLBACK", default_l_val=.true., &
187 lone_keyword_l_val=.true.)
191 CALL keyword_create(keyword, __location__, name=
"JACOBI_REFINEMENT", &
192 description=
"Use Jacobi method to refine the localisation obtained by SCDM", &
193 usage=
"JACOBI_REFINEMENT", default_l_val=.false., &
194 lone_keyword_l_val=.true.)
199 description=
"Restart the localization from a set of orbitals"// &
200 " read from a localization restart file.", &
201 usage=
"RESTART", default_l_val=.false., &
202 lone_keyword_l_val=.true.)
206 CALL keyword_create(keyword, __location__, name=
"LOCHOMO_RESTART_FILE_NAME", &
207 description=
"File name where to read the MOS from "// &
208 "which to restart the localization procedure for occupied states", &
209 usage=
"LOCHOMO_RESTART_FILE_NAME <FILENAME>", &
214 CALL keyword_create(keyword, __location__, name=
"LOCMIXD_RESTART_FILE_NAME", &
215 description=
"File name where to read the MOS from "// &
216 "which to restart the localization procedure for MIXED states", &
217 usage=
"LOCMIXD_RESTART_FILE_NAME <FILENAME>", &
222 CALL keyword_create(keyword, __location__, name=
"LOCLUMO_RESTART_FILE_NAME", &
223 description=
"File name where to read the MOS from "// &
224 "which to restart the localization procedure for unoccupied states", &
225 usage=
"LOCLUMO_RESTART_FILE_NAME <FILENAME>", &
231 description=
"Type of opertator which defines the spread functional", &
232 usage=
"OPERATOR (BERRY|BOYS|PIPEK)", &
233 enum_c_vals=
s2a(
"BERRY",
"BOYS",
"PIPEK"), &
240 description=
"Indexes of the occupied wfn to be localized "// &
241 "This keyword can be repeated several times "// &
242 "(useful if you have to specify many indexes).", &
244 n_var=-1, type_of_var=
integer_t, repeats=.true.)
248 CALL keyword_create(keyword, __location__, name=
"LIST_UNOCCUPIED", &
249 description=
"Indexes of the unoccupied states to be localized, "// &
250 "up to now only valid in combination with GPW. "// &
251 "This keyword has to be present if unoccupied states should be localized. "// &
252 "This keyword can be repeated several times "// &
253 "(useful if you have to specify many indexes).", &
254 usage=
"LIST_UNOCCUPIED 1 2", &
255 n_var=-1, type_of_var=
integer_t, repeats=.true.)
260 description=
"Number of orbitals above fully occupied MOs to be localized, "// &
261 "up to now only valid in combination with GPW. "// &
262 "This keyword has to be present for STATES MIXED option. "// &
263 "Otherwise, only the fully occupied MOs are localized.", &
264 usage=
"NEXTRA 5", default_i_val=0)
269 description=
"Which states to localize, LUMO up to now only available in GPW", &
270 usage=
"STATES (HOMO|LUMO|MIXED|ALL)", &
271 enum_c_vals=
s2a(
"OCCUPIED",
"UNOCCUPIED",
"MIXED",
"ALL"), &
278 keyword, __location__, &
279 name=
"ENERGY_RANGE", &
280 description=
"Select the orbitals to be localized within the given energy range."// &
281 " This type of selection cannot be added on top of the selection through a LIST. It reads to reals that are"// &
282 " lower and higher boundaries of the energy range.", &
283 usage=
"ENERGY_RANGE lower_bound {real}, higher_bound {real}", &
285 n_var=2, default_r_vals=(/0._dp, 0._dp/), unit_str=
'eV', &
290 NULLIFY (print_section)
292 description=
"Collects all printing options related to the Wannier centers and "// &
293 "properties computed with Wannier centers.", &
294 n_keywords=0, n_subsections=1, repeats=.false.)
297 description=
"Controls the printing basic info about the method", &
314 description=
"Section controlling the calculation of molecular multipole moments.", &
317 description=
"Maximum order of mulitpoles to be calculated.", &
318 usage=
"ORDER {integer}", default_i_val=2, type_of_var=
integer_t)
325 CALL create_molecular_states_section(subsection)
329 CALL create_wannier_states_section(subsection)
349 cpassert(
ASSOCIATED(section))
350 NULLIFY (print_key, keyword)
352 description=
"Controls the printing of the wannier functions ", &
355 description=
"The stride (X,Y,Z) used to write the cube file "// &
356 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
357 " 1 number valid for all components.", &
358 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
362 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
363 variants=(/
"CUBES_LU"/), &
364 description=
"The lower and upper index of the states to be printed as cube", &
365 usage=
"CUBES_LU_BOUNDS integer integer", &
366 n_var=2, default_i_vals=(/0, -2/), type_of_var=
integer_t)
371 description=
"Indexes of the states to be printed as cube files"// &
372 " This keyword can be repeated several times"// &
373 " (useful if you have to specify many indexes).", &
374 usage=
"CUBES_LIST 1 2", &
375 n_var=-1, type_of_var=
integer_t, repeats=.true.)
379 description=
"append the cube files when they already exist", &
380 default_l_val=.false., lone_keyword_l_val=.true.)
389 description=
"Controls the printing of the wannier functions", &
394 description=
"prints out the wannier centers together with the particles", &
395 usage=
"IONS+CENTERS", default_l_val=.false., &
396 lone_keyword_l_val=.true.)
401 description=
"Specifies the format of the output file when IONS+CENTERS is enabled.")
407 description=
"Controls the printing of the wannier functions", &
410 CALL keyword_create(keyword, __location__, name=
"SECOND_MOMENTS", &
411 description=
"Prints out the upper triangular part of the position covariance matrix. "// &
412 "Default is to use a non-periodic position operator. ", &
413 usage=
"SECOND_MOMENTS", default_l_val=.false., &
414 lone_keyword_l_val=.true.)
419 description=
"For the covariance matrix, use the periodic position operator."// &
420 " Requires setting LMAXN1 in QS section to 6 or higher.", &
421 usage=
"PERIODIC", default_l_val=.false., &
422 lone_keyword_l_val=.true.)
431 description=
"Controls the printing of restart file for localized MOS", &
443 SUBROUTINE create_molecular_states_section(print_key)
449 cpassert(.NOT.
ASSOCIATED(print_key))
450 NULLIFY (print_key2, keyword)
452 description=
"Controls printing of molecular states ", &
456 keyword, __location__, name=
"CUBE_EVAL_RANGE", &
457 description=
"only write cubes if the energies of the corresponding molecular states lie in the given interval. "// &
458 "Default is all states.", &
459 usage=
"CUBE_EVAL_RANGE -1.0 1.0", unit_str=
"hartree", n_var=2, type_of_var=
real_t)
464 description=
"Can be used to mark given molecular states."// &
465 " Sets a mark to both, occupied and unoccupied states. "// &
466 "Occupied states are counted beginning with HOMO=1, "// &
467 "unoccupied states are counted beginning with LUMO=1, "// &
468 "This is only meaningful in combination with WFN_MIX. "// &
469 "First integer specifies the molecule, second integer specifies the state.", &
470 usage=
"MARK_STATES integer integer", &
471 n_var=2, default_i_vals=(/-1, -1/), type_of_var=
integer_t, repeats=.true.)
476 description=
"Controls the printing of cube files", &
479 description=
"The stride (X,Y,Z) used to write the cube file "// &
480 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
481 " 1 number valid for all components.", &
482 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
487 END SUBROUTINE create_molecular_states_section
493 SUBROUTINE create_wannier_states_section(print_key)
499 cpassert(.NOT.
ASSOCIATED(print_key))
500 NULLIFY (print_key2, keyword)
502 description=
"Controls printing of Wannier states ", &
506 keyword, __location__, name=
"CUBE_EVAL_RANGE", &
507 description=
"only write cubes if the energies of the corresponding molecular states lie in the given interval. "// &
508 "Default is all states.", &
509 usage=
"CUBE_EVAL_RANGE -1.0 1.0", unit_str=
"hartree", n_var=2, type_of_var=
real_t)
514 description=
"Can be used to mark given molecular states."// &
515 " Sets a mark to both, occupied and unoccupied states. "// &
516 "Occupied states are counted beginning with HOMO=1, "// &
517 "unoccupied states are counted beginning with LUMO=1, "// &
518 "This is only meaningful in combination with WFN_MIX. "// &
519 "First integer specifies the molecule, second integer specifies the state.", &
520 usage=
"MARK_STATES integer integer", &
521 n_var=2, default_i_vals=(/-1, -1/), type_of_var=
integer_t, repeats=.true.)
526 description=
"Print the Wannier states in the Cartesian basis instead of the default spherical basis.", &
527 default_l_val=.false., lone_keyword_l_val=.true.)
532 description=
"Controls the printing of cube files", &
535 description=
"The stride (X,Y,Z) used to write the cube file "// &
536 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
537 " 1 number valid for all components.", &
538 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
543 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
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 low_print_level
integer, parameter, public high_print_level
integer, parameter, public add_last_numeric
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
Defines the basic variable types.
integer, parameter, public dp
Utilities for string manipulations.