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 description=
"localize each n steps", &
113 keyword, __location__, name=
"EPS_OCCUPATION", &
114 description=
"Tolerance in the occupation number to select only fully occupied orbitals for the rotation", &
115 usage=
"EPS_OCCUPATION 1.E-5", default_r_val=1.0e-8_dp)
119 CALL keyword_create(keyword, __location__, name=
"OUT_ITER_EACH", &
120 description=
"Every how many iterations of the localization algorithm "// &
121 "(Jacobi) the tolerance value is printed out", &
122 usage=
"OUT_ITER_EACH 100", default_i_val=100)
126 CALL keyword_create(keyword, __location__, name=
"EPS_LOCALIZATION", &
127 description=
"Tolerance used in the convergence criterion of the localization methods.", &
128 usage=
"EPS_LOCALIZATION 1.0E-2", default_r_val=1.0e-4_dp)
133 description=
"Requires the maximization of the spread of the wfn", &
134 usage=
"MIN_OR_MAX (SPREADMIN|SPREADMAX)", &
135 enum_c_vals=[
"SPREADMIN",
"SPREADMAX"], &
142 keyword, __location__, name=
"METHOD", &
143 description=
"Method of optimization if any", &
144 usage=
"METHOD (JACOBI|CRAZY|DIRECT|GAPO|L1SD|SCDM|CS|NONE)", &
145 enum_c_vals=
s2a(
"NONE",
"JACOBI",
"CRAZY",
"GAPO",
"L1SD",
"DIRECT",
"SCDM",
"CS"), &
154 enum_desc=
s2a(
"No localization is applied", &
155 "Using 2 x 2 rotations of the orbitals, slow but robust", &
156 "A new fast method is applied, might be slightly less robust than jacobi, but usually much faster", &
157 "Gradient ascent for partially occupied wannier functions", &
158 "Steepest descent minimization of an approximate l1 norm", &
159 "Using a direct minimisation approacha", &
160 "Use QR factorization", &
161 "Using the Cardoso-Souloumiac algorithm for complex matrices"), &
167 description=
"Initial guess for coefficients if METHOD GAPO is used", &
168 usage=
"CPO_GUESS (ATOMIC|RESTART|RANDOM)", &
169 enum_c_vals=
s2a(
"ATOMIC",
"RESTART",
"RANDOM"), &
175 CALL keyword_create(keyword, __location__, name=
"CPO_GUESS_SPACE", &
176 description=
"Orbital space from which initial guess for coefficients is determined "// &
177 "if METHOD GAPO and CPO_GUESS ATOMIC are employed", &
178 usage=
"CPO_GUESS_SPACE (WAN|ALL)", &
179 enum_c_vals=
s2a(
"WAN",
"ALL"), &
186 description=
"Use conjugate gradient in conjunction with METHOD GAPO. If FALSE, "// &
187 "steepest descent is used instead.", &
188 usage=
"CG_PO", default_l_val=.true., &
189 lone_keyword_l_val=.true.)
193 CALL keyword_create(keyword, __location__, name=
"JACOBI_FALLBACK", &
194 description=
"Use Jacobi method in case no convergence was achieved"// &
195 " by using the crazy rotations method.", &
196 usage=
"JACOBI_FALLBACK", default_l_val=.true., &
197 lone_keyword_l_val=.true.)
201 CALL keyword_create(keyword, __location__, name=
"JACOBI_REFINEMENT", &
202 description=
"Use Jacobi method to refine the localisation obtained by SCDM", &
203 usage=
"JACOBI_REFINEMENT", default_l_val=.false., &
204 lone_keyword_l_val=.true.)
209 description=
"Restart the localization from a set of orbitals"// &
210 " read from a localization restart file.", &
211 usage=
"RESTART", default_l_val=.false., &
212 lone_keyword_l_val=.true.)
216 CALL keyword_create(keyword, __location__, name=
"LOCHOMO_RESTART_FILE_NAME", &
217 description=
"File name where to read the MOS from "// &
218 "which to restart the localization procedure for occupied states", &
219 usage=
"LOCHOMO_RESTART_FILE_NAME <FILENAME>", &
224 CALL keyword_create(keyword, __location__, name=
"LOCMIXD_RESTART_FILE_NAME", &
225 description=
"File name where to read the MOS from "// &
226 "which to restart the localization procedure for MIXED states", &
227 usage=
"LOCMIXD_RESTART_FILE_NAME <FILENAME>", &
232 CALL keyword_create(keyword, __location__, name=
"LOCLUMO_RESTART_FILE_NAME", &
233 description=
"File name where to read the MOS from "// &
234 "which to restart the localization procedure for unoccupied states", &
235 usage=
"LOCLUMO_RESTART_FILE_NAME <FILENAME>", &
241 description=
"Type of opertator which defines the spread functional", &
242 usage=
"OPERATOR (BERRY|BOYS|PIPEK)", &
243 enum_c_vals=
s2a(
"BERRY",
"BOYS",
"PIPEK"), &
250 description=
"Indexes of the occupied wfn to be localized "// &
251 "This keyword can be repeated several times "// &
252 "(useful if you have to specify many indexes).", &
254 n_var=-1, type_of_var=
integer_t, repeats=.true.)
258 CALL keyword_create(keyword, __location__, name=
"LIST_UNOCCUPIED", &
259 description=
"Indexes of the unoccupied states to be localized, "// &
260 "up to now only valid in combination with GPW. "// &
261 "This keyword has to be present if unoccupied states should be localized. "// &
262 "This keyword can be repeated several times "// &
263 "(useful if you have to specify many indexes).", &
264 usage=
"LIST_UNOCCUPIED 1 2", &
265 n_var=-1, type_of_var=
integer_t, repeats=.true.)
270 description=
"Number of orbitals above fully occupied MOs to be localized, "// &
271 "up to now only valid in combination with GPW. "// &
272 "This keyword has to be present for STATES MIXED option. "// &
273 "Otherwise, only the fully occupied MOs are localized.", &
274 usage=
"NEXTRA 5", default_i_val=0)
279 description=
"Which states to localize, LUMO up to now only available in GPW", &
280 usage=
"STATES (HOMO|LUMO|MIXED|ALL)", &
281 enum_c_vals=
s2a(
"OCCUPIED",
"UNOCCUPIED",
"MIXED",
"ALL"), &
288 keyword, __location__, &
289 name=
"ENERGY_RANGE", &
290 description=
"Select the orbitals to be localized within the given energy range."// &
291 " This type of selection cannot be added on top of the selection through a LIST. It reads to reals that are"// &
292 " lower and higher boundaries of the energy range.", &
293 usage=
"ENERGY_RANGE lower_bound {real}, higher_bound {real}", &
295 n_var=2, default_r_vals=[0._dp, 0._dp], unit_str=
'eV', &
300 NULLIFY (print_section)
302 description=
"Collects all printing options related to the Wannier centers and "// &
303 "properties computed with Wannier centers.", &
304 n_keywords=0, n_subsections=1, repeats=.false.)
307 description=
"Controls the printing basic info about the method", &
324 description=
"Section controlling the calculation of molecular multipole moments.", &
327 description=
"Maximum order of mulitpoles to be calculated.", &
328 usage=
"ORDER {integer}", default_i_val=2, type_of_var=
integer_t)
336 description=
"Section controlling the calculation of "// &
337 "localized moments", &
342 description=
"Maximum moment to be calculated.", &
343 usage=
"MAX_MOMENT {integer}", &
353 description=
"Calculate also magnetic moments.", &
354 usage=
"MAGNETIC .TRUE.", &
357 default_l_val=.false., &
358 lone_keyword_l_val=.true.)
364 description=
"Calculate expectation values of the el. multipole "// &
365 "moments in their velocity representation during RTP. Implemented up "// &
366 "to el. quadrupole moment.", &
367 usage=
"VEL_REPRS .TRUE.", &
370 default_l_val=.false., &
371 lone_keyword_l_val=.true.)
377 description=
"Include non local commutator for velocity "// &
378 "representations. Necessary for origin independent results.", &
379 usage=
"COM_NL .TRUE.", &
382 default_l_val=.false., &
383 lone_keyword_l_val=.true.)
390 CALL create_molecular_states_section(subsection)
394 CALL create_wannier_states_section(subsection)
415 cpassert(
ASSOCIATED(section))
416 NULLIFY (print_key, keyword)
418 description=
"Controls the printing of the wannier functions ", &
421 description=
"The stride (X,Y,Z) used to write the cube file "// &
422 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
423 " 1 number valid for all components.", &
424 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
429 description=
"Controls the printing of the Wannier function "// &
430 "electronic densities", &
431 default_l_val=.false., lone_keyword_l_val=.true.)
435 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
436 variants=[
"CUBES_LU"], &
437 description=
"The lower and upper index of the states to be printed as cube", &
438 usage=
"CUBES_LU_BOUNDS integer integer", &
439 n_var=2, default_i_vals=[0, -2], type_of_var=
integer_t)
444 description=
"Indexes of the states to be printed as cube files"// &
445 " This keyword can be repeated several times"// &
446 " (useful if you have to specify many indexes).", &
447 usage=
"CUBES_LIST 1 2", &
448 n_var=-1, type_of_var=
integer_t, repeats=.true.)
452 description=
"append the cube files when they already exist", &
453 default_l_val=.false., lone_keyword_l_val=.true.)
462 description=
"Controls the printing of the wannier functions", &
467 description=
"prints out the wannier centers together with the particles", &
468 usage=
"IONS+CENTERS", default_l_val=.false., &
469 lone_keyword_l_val=.true.)
474 description=
"Specifies the format of the output file when IONS+CENTERS is enabled.")
480 description=
"Controls the printing of the wannier functions", &
483 CALL keyword_create(keyword, __location__, name=
"SECOND_MOMENTS", &
484 description=
"Prints out the upper triangular part of the position covariance matrix. "// &
485 "Default is to use a non-periodic position operator. ", &
486 usage=
"SECOND_MOMENTS", default_l_val=.false., &
487 lone_keyword_l_val=.true.)
492 description=
"For the covariance matrix, use the periodic position operator."// &
493 " Requires setting LMAXN1 in QS section to 6 or higher.", &
494 usage=
"PERIODIC", default_l_val=.false., &
495 lone_keyword_l_val=.true.)
504 description=
"Controls the printing of restart file for localized MOS", &
516 SUBROUTINE create_molecular_states_section(print_key)
522 cpassert(.NOT.
ASSOCIATED(print_key))
523 NULLIFY (print_key2, keyword)
525 description=
"Controls printing of molecular states ", &
529 keyword, __location__, name=
"CUBE_EVAL_RANGE", &
530 description=
"only write cubes if the energies of the corresponding molecular states lie in the given interval. "// &
531 "Default is all states.", &
532 usage=
"CUBE_EVAL_RANGE -1.0 1.0", unit_str=
"hartree", n_var=2, type_of_var=
real_t)
537 description=
"Can be used to mark given molecular states."// &
538 " Sets a mark to both, occupied and unoccupied states. "// &
539 "Occupied states are counted beginning with HOMO=1, "// &
540 "unoccupied states are counted beginning with LUMO=1, "// &
541 "This is only meaningful in combination with WFN_MIX. "// &
542 "First integer specifies the molecule, second integer specifies the state.", &
543 usage=
"MARK_STATES integer integer", &
544 n_var=2, default_i_vals=[-1, -1], type_of_var=
integer_t, repeats=.true.)
549 description=
"Controls the printing of cube files", &
552 description=
"The stride (X,Y,Z) used to write the cube file "// &
553 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
554 " 1 number valid for all components.", &
555 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
560 END SUBROUTINE create_molecular_states_section
566 SUBROUTINE create_wannier_states_section(print_key)
572 cpassert(.NOT.
ASSOCIATED(print_key))
573 NULLIFY (print_key2, keyword)
575 description=
"Controls printing of Wannier states ", &
579 keyword, __location__, name=
"CUBE_EVAL_RANGE", &
580 description=
"only write cubes if the energies of the corresponding molecular states lie in the given interval. "// &
581 "Default is all states.", &
582 usage=
"CUBE_EVAL_RANGE -1.0 1.0", unit_str=
"hartree", n_var=2, type_of_var=
real_t)
587 description=
"Can be used to mark given molecular states."// &
588 " Sets a mark to both, occupied and unoccupied states. "// &
589 "Occupied states are counted beginning with HOMO=1, "// &
590 "unoccupied states are counted beginning with LUMO=1, "// &
591 "This is only meaningful in combination with WFN_MIX. "// &
592 "First integer specifies the molecule, second integer specifies the state.", &
593 usage=
"MARK_STATES integer integer", &
594 n_var=2, default_i_vals=[-1, -1], type_of_var=
integer_t, repeats=.true.)
599 description=
"Print the Wannier states in the Cartesian basis instead of the default spherical basis.", &
600 default_l_val=.false., lone_keyword_l_val=.true.)
605 description=
"Controls the printing of cube files", &
608 description=
"The stride (X,Y,Z) used to write the cube file "// &
609 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
610 " 1 number valid for all components.", &
611 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
616 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.