66 #include "./base/base_uses.f90"
71 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
72 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'input_cp2k_properties_dft'
84 TYPE(section_type),
POINTER :: section
86 TYPE(keyword_type),
POINTER :: keyword
87 TYPE(section_type),
POINTER :: subsection
89 cpassert(.NOT.
ASSOCIATED(section))
91 description=
"This section is used to set up the PROPERTIES calculation.", &
92 n_keywords=0, n_subsections=6, repeats=.false.)
94 NULLIFY (subsection, keyword)
96 CALL create_linres_section(subsection, create_subsections=.true.)
100 CALL create_et_coupling_section(subsection)
113 description=
"This section is used to print the density derived atomic point charges. "// &
114 "The fit of the charges is controlled through the DENSITY_FITTING section", &
116 CALL keyword_create(keyword, __location__, name=
"TYPE_OF_DENSITY", &
117 description=
"Specifies the type of density used for the fitting", &
118 usage=
"TYPE_OF_DENSITY (FULL|SPIN)", &
119 enum_c_vals=s2a(
"FULL",
"SPIN"), &
121 enum_desc=s2a(
"Full density",
"Spin density"), &
128 CALL create_tddfpt2_section(subsection)
132 CALL create_bandstructure_section(subsection)
136 CALL create_tipscan_section(subsection)
151 SUBROUTINE create_linres_section(section, create_subsections, default_set_tdlr)
152 TYPE(section_type),
POINTER :: section
153 LOGICAL,
INTENT(in) :: create_subsections
154 LOGICAL,
INTENT(IN),
OPTIONAL :: default_set_tdlr
156 INTEGER :: def_max_iter, def_precond
157 REAL(kind=
dp) :: def_egap, def_eps, def_eps_filter
158 TYPE(keyword_type),
POINTER :: keyword
159 TYPE(section_type),
POINTER :: print_key, subsection
161 NULLIFY (keyword, print_key)
163 IF (
PRESENT(default_set_tdlr))
THEN
166 def_eps_filter = 1.0e-15_dp
172 def_eps_filter = 0.0_dp
177 cpassert(.NOT.
ASSOCIATED(section))
179 description=
"The linear response is used to calculate one of the "// &
180 "following properties: nmr, epr, raman, ... ", &
181 n_keywords=5, n_subsections=2, repeats=.false., &
185 description=
"target accuracy for the convergence of the conjugate gradient.", &
186 usage=
"EPS 1.e-6", default_r_val=def_eps)
191 description=
"Filter threshold for response density matrix.", &
192 usage=
"EPS 1.e-8", default_r_val=def_eps_filter)
197 description=
"Maximum number of conjugate gradient iteration to be performed for one optimization.", &
198 usage=
"MAX_ITER 200", default_i_val=def_max_iter)
202 CALL keyword_create(keyword, __location__, name=
"RESTART_EVERY", &
203 description=
"Restart the conjugate gradient after the specified number of iterations.", &
204 usage=
"RESTART_EVERY 200", default_i_val=50)
209 keyword, __location__, name=
"PRECONDITIONER", &
210 description=
"Type of preconditioner to be used with all minimization schemes. "// &
211 "They differ in effectiveness, cost of construction, cost of application. "// &
212 "Properly preconditioned minimization can be orders of magnitude faster than doing nothing.", &
213 usage=
"PRECONDITIONER FULL_ALL", &
214 default_i_val=def_precond, &
215 enum_c_vals=s2a(
"FULL_ALL",
"FULL_SINGLE_INVERSE",
"FULL_SINGLE",
"FULL_KINETIC",
"FULL_S_INVERSE", &
217 enum_desc=s2a(
"Most effective state selective preconditioner based on diagonalization, "// &
218 "requires the ENERGY_GAP parameter to be an underestimate of the HOMO-LUMO gap. "// &
219 "This preconditioner is recommended for almost all systems, except very large systems where "// &
220 "make_preconditioner would dominate the total computational cost.", &
221 "Based on H-eS cholesky inversion, similar to FULL_SINGLE in preconditioning efficiency "// &
222 "but cheaper to construct, "// &
223 "might be somewhat less robust. Recommended for large systems.", &
224 "Based on H-eS diagonalisation, not as good as FULL_ALL, but somewhat cheaper to apply. ", &
225 "Cholesky inversion of S and T, fast construction, robust, and relatively good, "// &
226 "use for very large systems.", &
227 "Cholesky inversion of S, not as good as FULL_KINETIC, yet equally expensive.", &
228 "skip preconditioning"), &
235 description=
"Energy gap estimate [a.u.] for preconditioning", &
236 usage=
"ENERGY_GAP 0.1", &
237 default_r_val=def_egap)
242 description=
"Restart the response calculation if the restart file exists", &
244 default_l_val=.false., lone_keyword_l_val=.true.)
248 CALL keyword_create(keyword, __location__, name=
"WFN_RESTART_FILE_NAME", &
249 variants=(/
"RESTART_FILE_NAME"/), &
250 description=
"Root of the file names where to read the response functions from "// &
251 "which to restart the calculation of the linear response", &
252 usage=
"WFN_RESTART_FILE_NAME <FILENAME>", &
257 IF (create_subsections)
THEN
264 CALL create_current_section(subsection)
268 CALL create_nmr_section(subsection)
272 CALL create_spin_spin_section(subsection)
276 CALL create_epr_section(subsection)
280 CALL create_polarizability_section(subsection)
284 CALL create_dcdr_section(subsection)
288 CALL create_vcd_section(subsection)
293 description=
"printing of information during the linear response calculation", &
297 print_key, __location__,
"program_run_info", &
298 description=
"Controls the printing of basic iteration information during the LINRES calculation", &
304 description=
"Controls the dumping of restart file of the response wavefunction. "// &
305 "For each set of response functions, i.e. for each perturbation, "// &
306 "one different restart file is dumped. These restart files should be "// &
307 "employed only to restart the same type of LINRES calculation, "// &
308 "i.e. with the same perturbation.", &
309 print_level=
low_print_level, common_iter_levels=3, each_iter_names=s2a(
"ITER"), &
319 END SUBROUTINE create_linres_section
327 SUBROUTINE create_dcdr_section(section)
329 TYPE(section_type),
POINTER :: section
332 TYPE(keyword_type),
POINTER :: keyword
333 TYPE(section_type),
POINTER :: print_key, subsection
336 NULLIFY (keyword, print_key, subsection)
338 cpassert(.NOT.
ASSOCIATED(section))
340 IF (.NOT. failure)
THEN
342 description=
"Compute analytical gradients the dipole moments.", &
343 n_keywords=50, n_subsections=1, repeats=.false.)
345 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
346 description=
"controls the activation of the APT calculation", &
348 default_l_val=.false., &
349 lone_keyword_l_val=.true.)
353 CALL keyword_create(keyword, __location__, name=
"LIST_OF_ATOMS", &
354 description=
"Specifies a list of atoms.", &
355 usage=
"LIST {integer} {integer} .. {integer}", repeats=.true., &
360 CALL keyword_create(keyword, __location__, name=
"DISTRIBUTED_ORIGIN", &
361 variants=(/
"DO_GAUGE"/), &
362 description=
"Use the distributed origin (DO) gauge?", &
363 usage=
"DISTRIBUTED_ORIGIN T", &
364 default_l_val=.false., lone_keyword_l_val=.true.)
368 CALL keyword_create(keyword, __location__, name=
"ORBITAL_CENTER", &
369 description=
"The orbital center.", &
370 usage=
"ORBITAL_CENTER WANNIER", &
372 enum_c_vals=s2a(
"WANNIER",
"COMMON",
"ATOM",
"BOX"), &
373 enum_desc=s2a(
"Use the Wannier centers.", &
374 "Use a common center (works only for an isolate molecule).", &
375 "Use the atoms as center.", &
383 description=
"Gauge origin of the velocity gauge factor.", &
384 enum_c_vals=s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
385 enum_desc=s2a(
"Use Center of Mass", &
386 "Use Center of Atomic Charges", &
387 "Use User-defined Point", &
388 "Use Origin of Coordinate System"), &
397 CALL keyword_create(keyword, __location__, name=
"REFERENCE_POINT", &
398 description=
"User-defined reference point of the velocity gauge factor.", &
399 usage=
"REFERENCE_POINT x y z", &
400 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
406 description=
"print results of the magnetic dipole moment calculation", &
410 description=
"Controls the printing of the electric dipole gradient", &
425 END SUBROUTINE create_dcdr_section
433 SUBROUTINE create_vcd_section(section)
435 TYPE(section_type),
POINTER :: section
437 TYPE(keyword_type),
POINTER :: keyword
438 TYPE(section_type),
POINTER :: print_key, subsection
440 NULLIFY (keyword, print_key, subsection)
442 cpassert(.NOT.
ASSOCIATED(section))
445 description=
"Carry out a VCD calculation.", &
446 n_keywords=50, n_subsections=1, repeats=.false.)
448 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
449 description=
"controls the activation of the APT/AAT calculation", &
451 default_l_val=.false., &
452 lone_keyword_l_val=.true.)
456 CALL keyword_create(keyword, __location__, name=
"LIST_OF_ATOMS", &
457 description=
"Specifies a list of atoms.", &
458 usage=
"LIST {integer} {integer} .. {integer}", repeats=.true., &
463 CALL keyword_create(keyword, __location__, name=
"DISTRIBUTED_ORIGIN", &
464 variants=(/
"DO_GAUGE"/), &
465 description=
"Use the distributed origin (DO) gauge?", &
466 usage=
"DISTRIBUTED_ORIGIN T", &
467 default_l_val=.false., lone_keyword_l_val=.true.)
471 CALL keyword_create(keyword, __location__, name=
"ORIGIN_DEPENDENT_MFP", &
472 description=
"Use the origin dependent MFP operator.", &
473 usage=
"ORIGIN_DEPENDENT_MFP T", &
474 default_l_val=.false., lone_keyword_l_val=.true.)
478 CALL keyword_create(keyword, __location__, name=
"ORBITAL_CENTER", &
479 description=
"The orbital center.", &
480 usage=
"ORBITAL_CENTER WANNIER", &
482 enum_c_vals=s2a(
"WANNIER",
"COMMON",
"ATOM",
"BOX"), &
483 enum_desc=s2a(
"Use the Wannier centers.", &
484 "Use a common center (works only for an isolate molecule).", &
485 "Use the atoms as center.", &
493 CALL keyword_create(keyword, __location__, name=
"MAGNETIC_ORIGIN", &
494 description=
"Gauge origin of the magnetic dipole operator.", &
495 enum_c_vals=s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
496 enum_desc=s2a(
"Use Center of Mass", &
497 "Use Center of Atomic Charges", &
498 "Use User-defined Point", &
499 "Use Origin of Coordinate System"), &
508 CALL keyword_create(keyword, __location__, name=
"MAGNETIC_ORIGIN_REFERENCE", &
509 description=
"User-defined reference point of the magnetic dipole operator.", &
510 usage=
"REFERENCE_POINT x y z", &
511 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
516 CALL keyword_create(keyword, __location__, name=
"SPATIAL_ORIGIN", &
517 description=
"Gauge origin of the velocity gauge factor/spatial origin.", &
518 enum_c_vals=s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
519 enum_desc=s2a(
"Use Center of Mass", &
520 "Use Center of Atomic Charges", &
521 "Use User-defined Point", &
522 "Use Origin of Coordinate System"), &
531 CALL keyword_create(keyword, __location__, name=
"SPATIAL_ORIGIN_REFERENCE", &
532 description=
"User-defined reference point of the velocity gauge factor/spatial origin.", &
533 usage=
"REFERENCE_POINT x y z", &
534 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
540 description=
"print results of the magnetic dipole moment calculation", &
544 description=
"Controls the printing of the APTs and AATs", &
557 END SUBROUTINE create_vcd_section
566 SUBROUTINE create_current_section(section)
567 TYPE(section_type),
POINTER :: section
569 TYPE(keyword_type),
POINTER :: keyword
570 TYPE(section_type),
POINTER :: print_key, subsection
572 NULLIFY (keyword, print_key, subsection)
574 cpassert(.NOT.
ASSOCIATED(section))
576 description=
"The induced current density is calculated by DFPT.", &
577 n_keywords=4, n_subsections=1, repeats=.false., &
580 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
581 description=
"controls the activation of the induced current calculation", &
582 usage=
"&CURRENT T", &
583 default_l_val=.false., &
584 lone_keyword_l_val=.true.)
589 description=
"The gauge used to compute the induced current within GAPW.", &
592 enum_c_vals=s2a(
"R",
"R_AND_STEP_FUNCTION",
"ATOM"), &
593 enum_desc=s2a(
"Position gauge (doesnt work well).", &
594 "Position and step function for the soft and the local parts, respectively.", &
600 CALL keyword_create(keyword, __location__, name=
"GAUGE_ATOM_RADIUS", &
601 description=
"Build the gauge=atom using only the atoms within this radius.", &
602 usage=
"GAUGE_ATOM_RADIUS 10.0", &
609 CALL keyword_create(keyword, __location__, name=
"USE_OLD_GAUGE_ATOM", &
610 description=
"Use the old way to compute the gauge.", &
611 usage=
"USE_OLD_GAUGE_ATOM T", &
612 default_l_val=.true., lone_keyword_l_val=.true.)
616 CALL keyword_create(keyword, __location__, name=
"ORBITAL_CENTER", &
617 description=
"The orbital center.", &
618 usage=
"ORBITAL_CENTER WANNIER", &
620 enum_c_vals=s2a(
"WANNIER",
"COMMON",
"ATOM",
"BOX"), &
621 enum_desc=s2a(
"Use the Wannier centers.", &
622 "Use a common center (works only for an isolate molecule).", &
623 "Use the atoms as center.", &
630 CALL keyword_create(keyword, __location__, name=
"COMMON_CENTER", &
631 description=
"The common center ", usage=
"COMMON_CENTER 0.0 1.0 0.0", &
632 n_var=3, default_r_vals=(/0.0_dp, 0.0_dp, 0.0_dp/), type_of_var=
real_t, &
638 description=
"How many boxes along each directions ", usage=
"NBOX 6 6 5", &
639 n_var=3, default_i_vals=(/4, 4, 4/), type_of_var=
integer_t)
644 description=
"Calculate the succeptibility correction to the shift with PBC", &
646 default_l_val=.false., lone_keyword_l_val=.true.)
650 CALL keyword_create(keyword, __location__, name=
"FORCE_NO_FULL", &
651 description=
"Avoid the calculation of the state dependent perturbation term, "// &
652 "even if the orbital centers are set at Wannier centers or at Atom centers", &
653 usage=
"FORCE_NO_FULL T", &
654 default_l_val=.false., lone_keyword_l_val=.true.)
658 CALL keyword_create(keyword, __location__, name=
"SELECTED_STATES_ON_ATOM_LIST", &
659 description=
"Indexes of the atoms for selecting"// &
660 " the states to be used for the response calculations.", &
661 usage=
"SELECTED_STATES_ON_ATOM_LIST 1 2 10", &
662 n_var=-1, type_of_var=
integer_t, repeats=.true.)
666 CALL keyword_create(keyword, __location__, name=
"SELECTED_STATES_ATOM_RADIUS", &
667 description=
"Select all the states included in the given radius around each atoms "// &
668 "in SELECTED_STATES_ON_ATOM_LIST.", &
669 usage=
"SELECTED_STATES_ATOM_RADIUS 2.0", &
676 CALL keyword_create(keyword, __location__, name=
"RESTART_CURRENT", &
677 description=
"Restart the induced current density calculation"// &
678 " from a previous run (not working yet).", &
679 usage=
"RESTART_CURRENT", default_l_val=.false., &
680 lone_keyword_l_val=.true.)
686 description=
"print results of induced current density calculation", &
690 description=
"Controls the printing of the induced current density (not working yet).", &
693 description=
"The stride (X,Y,Z) used to write the cube file "// &
694 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
695 " 1 number valid for all components (not working yet).", &
696 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
700 description=
"append the cube files when they already exist", &
701 default_l_val=.false., lone_keyword_l_val=.true.)
709 description=
"Controls the printing of the response functions (not working yet).", &
712 description=
"The stride (X,Y,Z) used to write the cube file "// &
713 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
714 " 1 number valid for all components (not working yet).", &
715 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
719 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
720 variants=(/
"CUBES_LU"/), &
721 description=
"The lower and upper index of the states to be printed as cube (not working yet).", &
722 usage=
"CUBES_LU_BOUNDS integer integer", &
723 n_var=2, default_i_vals=(/0, -2/), type_of_var=
integer_t)
728 description=
"Indexes of the states to be printed as cube files "// &
729 "This keyword can be repeated several times "// &
730 "(useful if you have to specify many indexes) (not working yet).", &
731 usage=
"CUBES_LIST 1 2", &
732 n_var=-1, type_of_var=
integer_t, repeats=.true.)
736 description=
"append the cube files when they already exist", &
737 default_l_val=.false., lone_keyword_l_val=.true.)
752 END SUBROUTINE create_current_section
762 SUBROUTINE create_nmr_section(section)
763 TYPE(section_type),
POINTER :: section
765 TYPE(keyword_type),
POINTER :: keyword
766 TYPE(section_type),
POINTER :: print_key, subsection
768 NULLIFY (keyword, print_key, subsection)
770 cpassert(.NOT.
ASSOCIATED(section))
772 description=
"The chemical shift is calculated by DFPT.", &
773 n_keywords=5, n_subsections=1, repeats=.false., &
776 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
777 description=
"controls the activation of the nmr calculation", &
779 default_l_val=.false., &
780 lone_keyword_l_val=.true.)
784 CALL keyword_create(keyword, __location__, name=
"INTERPOLATE_SHIFT", &
785 description=
"Calculate the soft part of the chemical shift by interpolation ", &
786 usage=
"INTERPOLATE_SHIFT T", &
787 default_l_val=.false., lone_keyword_l_val=.true.)
792 description=
"Calculate the chemical shift in a set of points"// &
793 " given from an external file", usage=
"NICS", &
794 default_l_val=.false., lone_keyword_l_val=.true.)
798 CALL keyword_create(keyword, __location__, name=
"NICS_FILE_NAME", &
799 description=
"Name of the file with the NICS points coordinates", &
800 usage=
"NICS_FILE_NAME nics_file", &
801 default_lc_val=
"nics_file")
806 description=
"Restart the NMR calculation from a previous run (NOT WORKING YET)", &
807 usage=
"RESTART_NMR", default_l_val=.false., &
808 lone_keyword_l_val=.true.)
812 CALL keyword_create(keyword, __location__, name=
"SHIFT_GAPW_RADIUS", &
813 description=
"While computing the local part of the shift (GAPW), "// &
814 "the integration is restricted to nuclei that are within this radius.", &
815 usage=
"SHIFT_GAPW_RADIUS 20.0", &
824 description=
"print results of nmr calculation", &
828 description=
"Controls the printing of the response functions ", &
831 description=
"The stride (X,Y,Z) used to write the cube file "// &
832 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
833 " 1 number valid for all components.", &
834 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
838 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
839 variants=(/
"CUBES_LU"/), &
840 description=
"The lower and upper index of the states to be printed as cube", &
841 usage=
"CUBES_LU_BOUNDS integer integer", &
842 n_var=2, default_i_vals=(/0, -2/), type_of_var=
integer_t)
847 description=
"Indexes of the states to be printed as cube files "// &
848 "This keyword can be repeated several times "// &
849 "(useful if you have to specify many indexes).", &
850 usage=
"CUBES_LIST 1 2", &
851 n_var=-1, type_of_var=
integer_t, repeats=.true.)
855 description=
"append the cube files when they already exist", &
856 default_l_val=.false., lone_keyword_l_val=.true.)
864 description=
"Controls the printing of susceptibility", &
870 description=
"Controls the printing of the chemical shift", &
873 CALL keyword_create(keyword, __location__, name=
"ATOMS_LU_BOUNDS", &
874 variants=(/
"ATOMS_LU"/), &
875 description=
"The lower and upper atomic index for which the tensor is printed", &
876 usage=
"ATOMS_LU_BOUNDS integer integer", &
877 n_var=2, default_i_vals=(/0, -2/), type_of_var=
integer_t)
882 description=
"list of atoms for which the shift is printed into a file ", &
883 usage=
"LIST_ATOMS 1 2", n_var=-1, &
899 END SUBROUTINE create_nmr_section
908 SUBROUTINE create_spin_spin_section(section)
909 TYPE(section_type),
POINTER :: section
911 TYPE(keyword_type),
POINTER :: keyword
912 TYPE(section_type),
POINTER :: print_key, subsection
914 NULLIFY (keyword, print_key, subsection)
916 cpassert(.NOT.
ASSOCIATED(section))
918 description=
"Compute indirect spin-spin coupling constants.", &
919 n_keywords=5, n_subsections=1, repeats=.false.)
921 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
922 description=
"controls the activation of the nmr calculation", &
923 usage=
"&SPINSPIN T", &
924 default_l_val=.false., &
925 lone_keyword_l_val=.true.)
929 CALL keyword_create(keyword, __location__, name=
"RESTART_SPINSPIN", &
930 description=
"Restart the spin-spin calculation from a previous run (NOT WORKING YET)", &
931 usage=
"RESTART_SPINSPIN", default_l_val=.false., &
932 lone_keyword_l_val=.true.)
936 CALL keyword_create(keyword, __location__, name=
"ISSC_ON_ATOM_LIST", &
937 description=
"Atoms for which the issc is computed.", &
938 usage=
"ISSC_ON_ATOM_LIST 1 2 10", &
939 n_var=-1, type_of_var=
integer_t, repeats=.true.)
944 description=
"Compute the Fermi contact contribution", &
946 default_l_val=.true., lone_keyword_l_val=.true.)
951 description=
"Compute the spin-dipolar contribution", &
953 default_l_val=.true., lone_keyword_l_val=.true.)
958 description=
"Compute the paramagnetic spin-orbit contribution", &
960 default_l_val=.true., lone_keyword_l_val=.true.)
965 description=
"Compute the diamagnetic spin-orbit contribution (NOT YET IMPLEMENTED)", &
967 default_l_val=.true., lone_keyword_l_val=.true.)
973 description=
"print results of the indirect spin-spin calculation", &
977 description=
"Controls the printing of the indirect spin-spin matrix", &
981 description=
"list of atoms for which the indirect spin-spin is printed into a file ", &
982 usage=
"LIST_ATOMS 1 2", n_var=-1, &
998 END SUBROUTINE create_spin_spin_section
1008 SUBROUTINE create_epr_section(section)
1009 TYPE(section_type),
POINTER :: section
1011 TYPE(keyword_type),
POINTER :: keyword
1012 TYPE(section_type),
POINTER :: print_key, subsection, subsubsection
1014 NULLIFY (keyword, print_key, subsection, subsubsection)
1016 cpassert(.NOT.
ASSOCIATED(section))
1018 description=
"The g tensor is calculated by DFPT ", &
1019 n_keywords=5, n_subsections=1, repeats=.false., &
1022 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
1023 description=
"controls the activation of the epr calculation", &
1025 default_l_val=.false., &
1026 lone_keyword_l_val=.true.)
1031 description=
"Restart the EPR calculation from a previous run (NOT WORKING)", &
1032 usage=
"RESTART_EPR", default_l_val=.false., &
1033 lone_keyword_l_val=.true.)
1037 NULLIFY (subsection)
1039 description=
"print results of epr calculation", &
1043 description=
"Controls the printing of the components of nabla v_ks ", &
1046 description=
"The stride (X,Y,Z) used to write the cube file "// &
1047 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1048 " 1 number valid for all components.", &
1049 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
1053 description=
"append the cube files when they already exist", &
1054 default_l_val=.false., lone_keyword_l_val=.true.)
1062 description=
"Controls the printing of the g tensor", &
1068 CALL keyword_create(keyword, __location__, name=
"GAPW_MAX_ALPHA", &
1069 description=
"Maximum alpha of GTH potentials allowed on the soft grids ", &
1070 usage=
"GAPW_MAX_ALPHA real", default_r_val=5.0_dp)
1074 CALL keyword_create(keyword, __location__, name=
"SOO_RHO_HARD", &
1075 description=
"Whether or not to include the atomic parts of the density "// &
1076 "in the SOO part of the g tensor", usage=
"SOO_RHO_HARD", &
1077 default_l_val=.false., lone_keyword_l_val=.true.)
1085 description=
"Controls the printing of the response functions ", &
1088 description=
"The stride (X,Y,Z) used to write the cube file "// &
1089 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1090 " 1 number valid for all components.", &
1091 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
1095 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
1096 variants=(/
"CUBES_LU"/), &
1097 description=
"The lower and upper index of the states to be printed as cube", &
1098 usage=
"CUBES_LU_BOUNDS integer integer", &
1099 n_var=2, default_i_vals=(/0, -2/), type_of_var=
integer_t)
1104 description=
"Indexes of the states to be printed as cube files "// &
1105 "This keyword can be repeated several times "// &
1106 "(useful if you have to specify many indexes).", &
1107 usage=
"CUBES_LIST 1 2", &
1108 n_var=-1, type_of_var=
integer_t, repeats=.true.)
1112 description=
"append the cube files when they already exist", &
1113 default_l_val=.false., lone_keyword_l_val=.true.)
1123 NULLIFY (subsection)
1128 END SUBROUTINE create_epr_section
1137 SUBROUTINE create_polarizability_section(section)
1139 TYPE(section_type),
POINTER :: section
1141 TYPE(keyword_type),
POINTER :: keyword
1142 TYPE(section_type),
POINTER :: print_key, subsection
1144 NULLIFY (keyword, print_key, subsection)
1146 cpassert(.NOT.
ASSOCIATED(section))
1148 description=
"Compute polarizabilities.", &
1149 n_keywords=5, n_subsections=1, repeats=.false., &
1152 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
1153 description=
"controls the activation of the polarizability calculation", &
1155 default_l_val=.false., &
1156 lone_keyword_l_val=.true.)
1161 description=
"Compute the electric-dipole--electric-dipole polarizability", &
1162 usage=
"DO_RAMAN F", &
1164 default_l_val=.true., lone_keyword_l_val=.true.)
1168 CALL keyword_create(keyword, __location__, name=
"PERIODIC_DIPOLE_OPERATOR", &
1169 description=
"Type of dipole operator: Berry phase(T) or Local(F)", &
1170 usage=
"PERIODIC_DIPOLE_OPERATOR T", &
1171 default_l_val=.true., lone_keyword_l_val=.true.)
1175 NULLIFY (subsection)
1177 description=
"print results of the polarizability calculation", &
1181 description=
"Controls the printing of the polarizabilities", &
1189 NULLIFY (subsection)
1194 END SUBROUTINE create_polarizability_section
1201 SUBROUTINE create_et_coupling_section(section)
1202 TYPE(section_type),
POINTER :: section
1204 TYPE(keyword_type),
POINTER :: keyword
1205 TYPE(section_type),
POINTER :: print_key, subsection
1208 cpassert(.NOT.
ASSOCIATED(section))
1210 description=
"specifies the two constraints/restraints for extracting ET coupling elements", &
1213 NULLIFY (subsection)
1218 NULLIFY (subsection)
1223 NULLIFY (subsection)
1224 CALL create_projection(subsection,
"PROJECTION")
1228 CALL keyword_create(keyword, __location__, name=
"TYPE_OF_CONSTRAINT", &
1229 description=
"Specifies the type of constraint", &
1230 usage=
"TYPE_OF_CONSTRAINT DDAPC", &
1231 enum_c_vals=s2a(
"NONE",
"DDAPC"), &
1233 enum_desc=s2a(
"NONE",
"DDAPC Constraint"), &
1240 description=
"Controls the printing basic info about the method", &
1245 END SUBROUTINE create_et_coupling_section
1254 SUBROUTINE create_projection(section, section_name)
1257 TYPE(section_type),
POINTER :: section
1258 CHARACTER(len=*),
INTENT(in) :: section_name
1260 TYPE(keyword_type),
POINTER :: keyword
1261 TYPE(section_type),
POINTER :: print_key, section_block, section_print
1266 cpassert(.NOT.
ASSOCIATED(section))
1271 NULLIFY (section_block)
1272 NULLIFY (section_print)
1275 CALL section_create(section, __location__, name=trim(adjustl(section_name)), &
1276 description=
"Projection-operator approach fo ET coupling calculation", &
1277 n_keywords=0, n_subsections=2, repeats=.false.)
1281 description=
"Controls printing of data and informations to log file", &
1288 description=
"Part of the system (donor, acceptor, bridge,...)", &
1289 n_keywords=2, n_subsections=1, repeats=.true.)
1294 description=
"Array of atom IDs in the system part", &
1295 usage=
"ATOMS {integer} {integer} .. {integer}", &
1296 n_var=-1, type_of_var=
integer_t, repeats=.false.)
1302 description=
"Number of electrons expected in the system part", &
1303 usage=
"NELECTRON {integer}", default_i_val=0)
1309 description=
"Possible printing options in ET system part", &
1310 n_keywords=0, n_subsections=0, repeats=.false.)
1314 CALL keyword_create(keyword, __location__, name=
'MO_COEFF_ATOM', &
1315 description=
"Print out MO coeffiecients on given atom", &
1316 usage=
"MO_COEFF_ATOM {integer} {integer} .. {integer}", &
1317 type_of_var=
integer_t, n_var=-1, repeats=.true.)
1322 CALL keyword_create(keyword, __location__, name=
'MO_COEFF_ATOM_STATE', &
1323 description=
"Print out MO coeffiecients of specific state", &
1324 usage=
"MO_COEFF_ATOM_STATE {integer} {integer} .. {integer}", &
1325 type_of_var=
integer_t, n_var=-1, repeats=.true.)
1331 description=
"Controls saving of MO cube files", &
1336 description=
"The stride (X,Y,Z) used to write the cube file", &
1337 usage=
"STRIDE {integer} {integer} {integer}", n_var=-1, &
1338 default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
1344 description=
"Indices of molecular orbitals to save", &
1345 usage=
"MO_LIST {integer} {integer} .. {integer}", &
1346 type_of_var=
integer_t, n_var=-1, repeats=.true.)
1352 description=
"Number of unoccupied molecular orbitals to save", &
1353 usage=
"NLUMO {integer}", default_i_val=1)
1359 description=
"Number of occupied molecular orbitals to save", &
1360 usage=
"NHOMO {integer}", default_i_val=1)
1375 description=
"Possible printing options in ET", &
1376 n_keywords=0, n_subsections=0, repeats=.false.)
1381 description=
"Controls printing couplings onto file", &
1385 description=
"append the files when they already exist", &
1386 default_l_val=.false., lone_keyword_l_val=.true.)
1395 END SUBROUTINE create_projection
1404 SUBROUTINE create_tddfpt2_section(section)
1405 TYPE(section_type),
POINTER :: section
1407 TYPE(keyword_type),
POINTER :: keyword
1408 TYPE(section_type),
POINTER :: print_key, subsection
1410 cpassert(.NOT.
ASSOCIATED(section))
1412 description=
"Parameters needed to set up the Time-Dependent "// &
1413 "Density Functional Perturbation Theory. "// &
1414 "Current implementation works for hybrid functionals. "// &
1415 "Can be used with Gaussian and Plane Waves (GPW) method only.", &
1416 n_keywords=12, n_subsections=4, repeats=.false., &
1419 NULLIFY (keyword, print_key, subsection)
1422 name=
"_SECTION_PARAMETERS_", &
1423 description=
"Controls the activation of the TDDFPT procedure", &
1424 default_l_val=.false., &
1425 lone_keyword_l_val=.true.)
1431 description=
"Number of excited states to converge.", &
1438 description=
"Maximal number of iterations to be performed.", &
1445 description=
"Maximal number of Krylov space vectors. "// &
1446 "Davidson iterations will be restarted upon reaching this limit.", &
1453 description=
"Number of unoccupied orbitals to consider. "// &
1454 "Default is to use all unoccupied orbitals (-1).", &
1461 description=
"Number of MPI processes to be used per excited state. "// &
1462 "Default is to use all processors (0).", &
1470 description=
"Options to compute the kernel", &
1471 usage=
"KERNEL FULL", &
1472 enum_c_vals=s2a(
"FULL",
"sTDA",
"NONE"), &
1479 description=
"Orbital energy correction potential.", &
1480 enum_c_vals=s2a(
"NONE",
"LB94",
"GLLB",
"SAOP",
"SHIFT"), &
1482 enum_desc=s2a(
"No orbital correction scheme is used", &
1483 "van Leeuwen and Baerends. PRA, 49:2421, 1994", &
1484 "Gritsenko, van Leeuwen, van Lenthe, Baerends. PRA, 51:1944, 1995", &
1485 "Gritsenko, Schipper, Baerends. Chem. Phys. Lett., 302:199, 1999", &
1486 "Constant shift of virtual and/or open-shell orbitals"), &
1493 variants=s2a(
"VIRTUAL_SHIFT"), &
1494 description=
"Constant shift of virtual state eigenvalues.", &
1495 usage=
"EV_SHIFT 0.500", &
1496 n_var=1, type_of_var=
real_t, &
1498 default_r_val=0.0_dp)
1503 variants=s2a(
"OPEN_SHELL_SHIFT"), &
1504 description=
"Constant shift of open shell eigenvalues.", &
1505 usage=
"EOS_SHIFT 0.200", &
1506 n_var=1, type_of_var=
real_t, &
1508 default_r_val=0.0_dp)
1514 description=
"Target accuracy for excited state energies.", &
1515 n_var=1, type_of_var=
real_t, unit_str=
"hartree", &
1516 default_r_val=1.0e-5_dp)
1520 CALL keyword_create(keyword, __location__, name=
"MIN_AMPLITUDE", &
1521 description=
"The smallest excitation amplitude to print.", &
1522 n_var=1, type_of_var=
real_t, &
1523 default_r_val=5.0e-2_dp)
1527 CALL keyword_create(keyword, __location__, name=
"ORTHOGONAL_EPS", &
1528 description=
"The largest possible overlap between the ground state and "// &
1529 "orthogonalised excited state wave-functions. Davidson iterations "// &
1530 "will be restarted when the overlap goes beyond this threshold in "// &
1531 "order to prevent numerical instability.", &
1532 n_var=1, type_of_var=
real_t, &
1533 default_r_val=1.0e-4_dp)
1539 description=
"Restart the TDDFPT calculation if a restart file exists", &
1541 default_l_val=.false., lone_keyword_l_val=.true.)
1545 CALL keyword_create(keyword, __location__, name=
"RKS_TRIPLETS", &
1546 description=
"Compute triplet excited states using spin-unpolarised molecular orbitals.", &
1548 default_l_val=.false.)
1552 CALL keyword_create(keyword, __location__, name=
"ADMM_KERNEL_XC_CORRECTION", &
1553 description=
"Use/Ignore ADMM correction xc functional for TD kernel. "// &
1554 "XC correction functional is defined in ground state XC section.", &
1556 default_l_val=.true., lone_keyword_l_val=.true.)
1560 CALL keyword_create(keyword, __location__, name=
"ADMM_KERNEL_CORRECTION_SYMMETRIC", &
1561 description=
"ADMM correction functional in kernel is applied symmetrically. "// &
1562 "Original implementation is using a non-symmetric formula.", &
1564 default_l_val=.true., lone_keyword_l_val=.true.)
1569 description=
"Local resolution of identity for Coulomb contribution.", &
1571 default_l_val=.false.)
1576 description=
"Specify size of automatically generated auxiliary basis sets: "// &
1577 "Options={small,medium,large,huge}", &
1578 usage=
"AUTO_BASIS {basis_type} {basis_size}", &
1579 type_of_var=
char_t, repeats=.true., n_var=-1, default_c_vals=(/
"X",
"X"/))
1584 CALL keyword_create(keyword, __location__, name=
"WFN_RESTART_FILE_NAME", &
1585 variants=(/
"RESTART_FILE_NAME"/), &
1586 description=
"Name of the wave function restart file, may include a path."// &
1587 " If no file is specified, the default is to open the file as generated by"// &
1588 " the wave function restart print key.", &
1589 usage=
"WFN_RESTART_FILE_NAME <FILENAME>", &
1595 CALL section_create(subsection, __location__, name=
"DIPOLE_MOMENTS", &
1596 description=
"Parameters to compute oscillator strengths in the dipole approximation.", &
1597 n_keywords=3, n_subsections=0, repeats=.false.)
1600 description=
"Form of dipole transition integrals.", &
1601 enum_c_vals=s2a(
"BERRY",
"LENGTH",
"VELOCITY"), &
1602 enum_desc=s2a(
"Based on Berry phase formula (valid for fully periodic molecular systems only)", &
1603 "Length form ⟨ i | r | j ⟩ (valid for non-periodic molecular systems only)", &
1604 "Velocity form ⟨ i | d/dr | j ⟩"), &
1611 description=
"Reference point to calculate electric "// &
1612 "dipole moments using the dipole integrals in the length form.", &
1613 enum_c_vals=s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
1614 enum_desc=s2a(
"Use Center of Mass", &
1615 "Use Center of Atomic Charges", &
1616 "Use User-defined Point", &
1617 "Use Origin of Coordinate System"), &
1626 CALL keyword_create(keyword, __location__, name=
"REFERENCE_POINT", &
1627 description=
"User-defined reference point.", &
1628 usage=
"REFERENCE_POINT x y z", &
1629 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
1639 description=
"Is jet to be implemented", &
1640 n_keywords=2, n_subsections=0, repeats=.false.)
1643 variants=s2a(
"EPS_FILTER_MATRIX"), &
1644 description=
"The threshold used for sparse matrix operations", &
1645 usage=
"EPS_FILTER {real}", &
1647 default_r_val=1.0e-10_dp)
1652 variants=(/
"ATOMIC_GRID"/), &
1653 description=
"Specification of the atomic angular and radial grids for "// &
1654 "a atomic kind. This keyword must be repeated for all kinds! "// &
1655 "Usage: GRID < LEBEDEV_GRID > < RADIAL_GRID >", &
1656 usage=
"GRID {string} {integer} {integer}", &
1657 n_var=3, type_of_var=
char_t, repeats=.true.)
1675 CALL create_stda_section(subsection)
1685 CALL create_linres_section(subsection, create_subsections=.false., default_set_tdlr=.true.)
1691 description=
"Printing of information during the TDDFT run.", repeats=.false.)
1694 description=
"Controls the printing of the banner for TDDFPT program", &
1700 description=
"Controls the printing of initial guess vectors.", &
1706 description=
"Controls the printing of basic iteration information "// &
1707 "during the TDDFT run.", &
1713 description=
"Controls the printing of detailed energy information "// &
1714 "during the TDDFT run.", &
1720 description=
"Controls the printing of a file with all basis sets used.", &
1726 description=
"Controls the dumping of the MO restart file during TDDFPT. "// &
1727 "By default keeps a short history of three restarts.", &
1729 each_iter_names=s2a(
"TDDFT_SCF"), each_iter_values=(/10/), &
1731 CALL keyword_create(keyword, __location__, name=
"BACKUP_COPIES", &
1732 description=
"Specifies the maximum number of backup copies.", &
1733 usage=
"BACKUP_COPIES {int}", &
1741 description=
"Perform a natural transition orbital analysis.", &
1744 description=
"Threshold for sum of NTO eigenvalues considered", &
1745 usage=
"Threshold 0.95", &
1748 default_r_val=0.975_dp)
1751 CALL keyword_create(keyword, __location__, name=
"INTENSITY_THRESHOLD", &
1752 description=
"Threshold for oscillator strength to screen states.", &
1753 usage=
"Intensity_threshold 0.01", &
1756 default_r_val=0.0_dp)
1760 description=
"Specifies a list of states for the NTO calculations.", &
1761 usage=
"STATE_LIST {integer} {integer} .. {integer}", &
1766 description=
"Print NTOs on Cube Files", &
1767 usage=
"CUBE_FILES {logical}", repeats=.false., n_var=1, &
1768 default_l_val=.false., lone_keyword_l_val=.true., type_of_var=
logical_t)
1772 description=
"The stride (X,Y,Z) used to write the cube file "// &
1773 "(larger values result in smaller cube files). Provide 3 numbers (for X,Y,Z) or"// &
1774 " 1 number valid for all components.", &
1775 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
1779 description=
"append the cube files when they already exist", &
1780 default_l_val=.false., lone_keyword_l_val=.true.)
1787 description=
"Write the NTO in Molden file format, for visualisation.", &
1790 description=
"Specifies the number of significant digits retained. 3 is OK for visualization.", &
1791 usage=
"NDIGITS {int}", &
1796 description=
"Representation of Gaussian-type orbitals", &
1798 enum_c_vals=s2a(
"CARTESIAN",
"SPHERICAL"), &
1800 "Cartesian Gaussian orbitals. Use with caution", &
1801 "Spherical Gaussian orbitals. Incompatible with VMD"), &
1809 description=
"Controls the printout required for NAMD with NEWTONX.", &
1811 CALL keyword_create(keyword, __location__, name=
"PRINT_VIRTUALS", &
1812 description=
"Print occupied AND virtual molecular orbital coefficients", &
1813 default_l_val=.false., lone_keyword_l_val=.true.)
1816 CALL keyword_create(keyword, __location__, name=
"PRINT_PHASES", &
1817 description=
"Print phases of occupied and virtuals MOs.", &
1818 default_l_val=.false., lone_keyword_l_val=.true.)
1821 CALL keyword_create(keyword, __location__, name=
"SCALE_WITH_PHASES", &
1822 description=
"Scale ES eigenvectors with phases of occupied and virtuals MOs.", &
1823 default_l_val=.false., lone_keyword_l_val=.true.)
1831 description=
"Controls the printout of the tddfpt2_soc modul", &
1834 description=
"Will detrement if output in eVolt will be printef.", &
1835 default_l_val=.true., lone_keyword_l_val=.true.)
1839 description=
"Will detrement if output in wavenumbers will be printed.", &
1840 default_l_val=.false., lone_keyword_l_val=.true.)
1844 description=
"Will add the SOC-Splitting as additional output", &
1845 default_l_val=.false., lone_keyword_l_val=.true.)
1849 description=
"Will add the SOC-Matrix as additional output in a different file", &
1850 default_l_val=.false., lone_keyword_l_val=.true.)
1857 description=
"Controls the calculation and printing of excited state forces. "// &
1858 "This needs a RUN_TYPE that includes force evaluation, e.g. ENERGY_FORCE", &
1861 description=
"Specifies a list of states for the force calculations.", &
1862 usage=
"LIST {integer} {integer} .. {integer}", repeats=.true., &
1867 description=
"Threshold for oszillator strength to screen states.", &
1868 usage=
"Threshold 0.01", &
1871 default_r_val=0.0_dp)
1880 END SUBROUTINE create_tddfpt2_section
1886 SUBROUTINE create_stda_section(section)
1887 TYPE(section_type),
POINTER :: section
1889 TYPE(keyword_type),
POINTER :: keyword
1891 cpassert(.NOT.
ASSOCIATED(section))
1893 description=
"parameters needed and setup for sTDA calculations", &
1894 n_keywords=3, n_subsections=0, repeats=.false.)
1898 variants=(/
"HFX_FRACTION"/), &
1899 description=
"The fraction of TB Hartree-Fock exchange to use in the Kernel. "// &
1900 "0.0 implies no HFX part is used in the kernel. ", &
1901 usage=
"FRACTION 0.0", default_r_val=0.0_dp)
1908 description=
"Explicitly including or switching off sTDA exchange", &
1909 usage=
"DO_EXCHANGE", default_l_val=.true., lone_keyword_l_val=.true.)
1914 description=
"Use Ewald type method for Coulomb interaction", &
1915 usage=
"DO_EWALD", default_l_val=.false., lone_keyword_l_val=.true.)
1919 CALL keyword_create(keyword, __location__, name=
"EPS_TD_FILTER", &
1920 description=
"Threshold for filtering the transition density matrix", &
1921 usage=
"EPS_TD_FILTER epsf", default_r_val=1.e-10_dp)
1925 CALL keyword_create(keyword, __location__, name=
"MATAGA_NISHIMOTO_CEXP", &
1926 description=
"Exponent used in Mataga-Nishimoto formula for Coulomb (alpha). "// &
1927 "Default value is method dependent!", &
1928 usage=
"MATAGA_NISHIMOTO_CEXP cexp", default_r_val=-99.0_dp)
1932 CALL keyword_create(keyword, __location__, name=
"MATAGA_NISHIMOTO_XEXP", &
1933 description=
"Exponent used in Mataga-Nishimoto formula for Exchange (beta). "// &
1934 "Default value is method dependent!", &
1935 usage=
"MATAGA_NISHIMOTO_XEXP xexp", default_r_val=-99.0_dp)
1939 CALL keyword_create(keyword, __location__, name=
"COULOMB_SR_CUT", &
1940 description=
"Maximum range of short range part of Coulomb interaction.", &
1941 usage=
"COULOMB_SR_CUT rcut", default_r_val=20.0_dp)
1945 CALL keyword_create(keyword, __location__, name=
"COULOMB_SR_EPS", &
1946 description=
"Threshold for short range part of Coulomb interaction.", &
1947 usage=
"COULOMB_SR_EPS sreps", default_r_val=1.e-03_dp)
1951 END SUBROUTINE create_stda_section
1959 SUBROUTINE create_bandstructure_section(section)
1960 TYPE(section_type),
POINTER :: section
1962 TYPE(keyword_type),
POINTER :: keyword
1963 TYPE(section_type),
POINTER :: subsection
1965 cpassert(.NOT.
ASSOCIATED(section))
1966 CALL section_create(section, __location__, name=
"BANDSTRUCTURE", &
1967 description=
"Parameters needed to set up a calculation for "// &
1968 "electronic level energies of molecules and the electronic band "// &
1969 "structure of materials from post-SCF schemes (GW, perturbative "// &
1970 "spin-orbit coupling). Also, the density of states (DOS), "// &
1971 "projected density of states (PDOS), local density of states (LDOS), "// &
1972 "local valence band maximum (LVBM), local conduction band minimum "// &
1973 "(LCBM) and local band gap can be calculated. Please note that "// &
1974 "all methods in this section start from a Gamma-only DFT SCF. "// &
1975 "You need to make sure that the cell chosen in the DFT SCF is "// &
1976 "converged in the cell size. Band structures are computed "// &
1977 "for the primitive cell (i.e. the smallest possible unit cell of "// &
1978 "the input structure which is detected automatically). Moreover, "// &
1979 "spin-orbit coupling (SOC) on eigenvalues and band structures is "// &
1980 "available using Hartwigsen-Goedecker-Hutter "// &
1981 "pseudopotentials.", &
1982 n_keywords=1, n_subsections=1, repeats=.false.)
1984 NULLIFY (keyword, subsection)
1986 name=
"_SECTION_PARAMETERS_", &
1987 description=
"Controls the activation of the band structure calculation.", &
1988 default_l_val=.false., &
1989 lone_keyword_l_val=.true.)
1998 CALL create_gw_section(subsection)
2002 CALL create_soc_section(subsection)
2006 CALL create_dos_section(subsection)
2010 END SUBROUTINE create_bandstructure_section
2018 SUBROUTINE create_gw_section(section)
2019 TYPE(section_type),
POINTER :: section
2021 TYPE(keyword_type),
POINTER :: keyword
2022 TYPE(section_type),
POINTER :: print_key, subsection
2024 cpassert(.NOT.
ASSOCIATED(section))
2026 description=
"Parameters needed to set up a GW calculation for "// &
2027 "electronic level energies of molecules and the band structure of "// &
2028 "materials (currently only 2D materials tested). For the GW "// &
2029 "algorithm for molecules, see "// &
2030 "<https://doi.org/10.1021/acs.jctc.0c01282>. "// &
2031 "For 2D materials, see <http://arxiv.org/abs/2306.16066>.", &
2032 n_keywords=1, n_subsections=1, repeats=.false.)
2036 name=
"_SECTION_PARAMETERS_", &
2037 description=
"Controls the activation of the GW calculation.", &
2038 default_l_val=.false., &
2039 lone_keyword_l_val=.true.)
2043 CALL keyword_create(keyword, __location__, name=
"NUM_TIME_FREQ_POINTS", &
2044 description=
"Number of discrete points for the imaginary-time "// &
2045 "grid and the imaginary-frequency grid. The more points, the more "// &
2046 "precise is the calculation. Typically, 10 points are good "// &
2047 "for 0.1 eV precision of band structures and molecular energy "// &
2048 "levels, 20 points for 0.03 eV precision, "// &
2049 "and 30 points for 0.01 eV precision, see Table I in "// &
2050 "<https://doi.org/10.1021/acs.jctc.0c01282>. GW computation time "// &
2051 "increases linearly with `NUM_TIME_FREQ_POINTS`.", &
2052 usage=
"NUM_TIME_FREQ_POINTS 30", &
2058 description=
"Determines a threshold for the DBCSR based sparse "// &
2059 "multiplications. Normally, `EPS_FILTER` determines accuracy "// &
2060 "and timing of low-scaling GW calculations. (Lower filter means "// &
2061 "higher numerical precision, but higher computational cost.)", &
2062 usage=
"EPS_FILTER 1.0E-6", &
2063 default_r_val=1.0e-8_dp)
2067 CALL keyword_create(keyword, __location__, name=
"MEMORY_PER_PROC", &
2068 description=
"Specify the available memory per MPI process. Set "// &
2069 "`MEMORY_PER_PROC` as accurately as possible for good performance. If "// &
2070 "`MEMORY_PER_PROC` is set lower as the actually available "// &
2071 "memory per MPI process, the performance will be "// &
2072 "bad; if `MEMORY_PER_PROC` is set higher as the actually "// &
2073 "available memory per MPI process, the program might run out of "// &
2074 "memory. You can calculate `MEMORY_PER_PROC` as follows: "// &
2075 "Get the memory per node on your machine, mem_per_node "// &
2076 "(for example, from a supercomputer website, typically between "// &
2077 "100 GB and 2 TB), get the number of "// &
2078 "MPI processes per node, n_MPI_proc_per_node"// &
2079 " (for example from your run-script; if you "// &
2080 "use slurm, the number behind '--ntasks-per-node' is the number "// &
2081 "of MPI processes per node). Then calculate "// &
2082 "`MEMORY_PER_PROC` = mem_per_node / n_MPI_proc_per_node "// &
2083 "(typically between 2 GB and 50 GB). Unit of keyword: Gigabyte (GB).", &
2084 usage=
"MEMORY_PER_PROC 16", &
2085 default_r_val=2.0_dp)
2089 CALL keyword_create(keyword, __location__, name=
"APPROX_KP_EXTRAPOL", &
2090 description=
"If true, use only a 4x4 kpoint mesh for frequency "// &
2091 "points $\omega_j, j \ge 2$ (instead of a 4x4 and 6x6 k-point mesh). "// &
2092 "The k-point extrapolation of $W_{PQ}(i\omega_j,\mathbf{q})$ "// &
2093 "is done approximately from $W_{PQ}(i\omega_1,\mathbf{q})$.", &
2094 usage=
"APPROX_KP_EXTRAPOL", &
2095 default_l_val=.false., lone_keyword_l_val=.true.)
2099 NULLIFY (subsection, print_key)
2101 description=
"Printing of GW restarts.", &
2102 n_keywords=0, n_subsections=1, repeats=.false.)
2104 description=
"Controls the printing of restart files "// &
2107 common_iter_levels=3)
2114 END SUBROUTINE create_gw_section
2122 SUBROUTINE create_soc_section(section)
2123 TYPE(section_type),
POINTER :: section
2125 TYPE(keyword_type),
POINTER :: keyword
2127 cpassert(.NOT.
ASSOCIATED(section))
2129 description=
"Switch on or off spin-orbit coupling. Use SOC "// &
2130 "parameters from non-local pseudopotentials as given in "// &
2131 "Hartwigsen, Goedecker, Hutter, Eq.(18), (19), "// &
2132 "<https://doi.org/10.1103/PhysRevB.58.3641>, "// &
2133 "$V_{\mu\nu}^{\mathrm{SOC}, (\alpha)} = "// &
2134 "(\hbar/2) \langle \phi_\mu | \sum_l \Delta "// &
2135 "V_l^\mathrm{SO}(\mathbf{r},\mathbf{r}') L^{(\alpha)} | \phi_\nu \rangle, "// &
2136 "\alpha = x, y, z$.", &
2137 n_keywords=1, n_subsections=1, repeats=.false.)
2141 name=
"_SECTION_PARAMETERS_", &
2142 description=
"Controls the activation of the SOC calculation.", &
2143 default_l_val=.false., &
2144 lone_keyword_l_val=.true.)
2148 CALL keyword_create(keyword, __location__, name=
"ENERGY_WINDOW", &
2149 description=
"Apply SOC only for states with eigenvalues in the "// &
2150 "interval $[\varepsilon_\mathrm{VBM}-E_\mathrm{window}/2, "// &
2151 "\varepsilon_\mathrm{CBM}+E_\mathrm{window}/2]$. Might be necessary "// &
2152 "to use for large systems to prevent numerical instabilities.", &
2153 usage=
"ENERGY_WINDOW 5.0", &
2159 END SUBROUTINE create_soc_section
2167 SUBROUTINE create_dos_section(section)
2168 TYPE(section_type),
POINTER :: section
2170 TYPE(keyword_type),
POINTER :: keyword
2171 TYPE(section_type),
POINTER :: subsection
2173 cpassert(.NOT.
ASSOCIATED(section))
2175 description=
"Parameters needed to calculate the density of states "// &
2176 "(DOS) and the projected density of states (PDOS).", &
2177 n_keywords=1, n_subsections=1, repeats=.false.)
2181 name=
"_SECTION_PARAMETERS_", &
2182 description=
"Controls the activation of the DOS calculation.", &
2183 default_l_val=.false., &
2184 lone_keyword_l_val=.true.)
2188 CALL keyword_create(keyword, __location__, name=
"ENERGY_WINDOW", &
2189 description=
"Print DOS and PDOS in the energy window "// &
2190 "$[\varepsilon_\mathrm{VBM}-E_\mathrm{window}/2, "// &
2191 "\varepsilon_\mathrm{CBM}+E_\mathrm{window}/2]$,"// &
2192 " where VBM is the valence "// &
2193 "band maximum (or highest occupied molecular orbital, HOMO, for "// &
2194 "molecules) and CBM the conduction band minimum (or lowest "// &
2195 "unoccupied molecular orbital, LUMO, for molecules).", &
2196 usage=
"ENERGY_WINDOW 5.0", &
2203 description=
"Resolution of the energy E when computing the $\rho(E)$.", &
2204 usage=
"ENERGY_STEP 0.01", &
2211 description=α
"Broadening in Gaussians used in the DOS; "// &
2212 "$\rho(E) = \sum_n \exp(((E-\varepsilon_n)/\alpha)^2)/("// &
2213 " \sqrt{2\pi} \alpha)$.", &
2214 usage=
"BROADENING 0.01", &
2221 keyword, __location__, name=
"KPOINTS", &
2222 description=
"Monkhorst-Pack k-point mesh of size N_x, N_y, N_z for calculating "// &
2223 "the density of states (DOS). In GW, the KPOINT_DOS mesh is thus used as k-point "// &
2224 αα
"mesh for the self-energy. For non-periodic directions , choose N_ = 1. "// &
2225 "Automatic choice of the k-point mesh for negative "// &
2226 α
"values, e.g. KPOINTS_DOS -1 -1 -1 (automatic choice: N_ = 1 in non-periodic "// &
2227 "direction, 8 k-points in periodic direction). If you like to compute a "// &
2228 "band structure along a k-path, you can specify the k-path in "// &
2230 usage=
"KPOINTS N_x N_y N_z", &
2231 n_var=3, type_of_var=
integer_t, default_i_vals=(/-1, -1, -1/))
2235 NULLIFY (subsection)
2236 CALL create_ldos_section(subsection)
2240 END SUBROUTINE create_dos_section
2246 SUBROUTINE create_ldos_section(section)
2247 TYPE(section_type),
POINTER :: section
2249 TYPE(keyword_type),
POINTER :: keyword
2251 cpassert(.NOT.
ASSOCIATED(section))
2253 description=
"Parameters needed to calculate the local density "// &
2254 "of states (LDOS). "// &
2255 "The LDOS is computed as $\rho(\mathbf{r},E) = "// &
2256 "\sum\limits_{n,\mathbf{k}}"// &
2257 " |\psi_{n\mathbf{k}}(r)|^2\, w_\mathbf{k}\, g(E-\varepsilon_{n\mathbf{k}})$ "// &
2258 "using the Gaussian weight function "// &
2259 "$g(x) = \exp(x^2/\alpha^2)/(\sqrt{2\pi}\alpha)$, $\alpha$ is the broadening "// &
2260 "from the &DOS section, and the k-point weight "// &
2261 "$w_\mathbf{k}$. The k-mesh is taken from the &DOS section.", &
2262 n_keywords=2, repeats=.false.)
2266 name=
"_SECTION_PARAMETERS_", &
2267 description=
"Activates the local VBM CBM gap calculation.", &
2268 default_l_val=.false., &
2269 lone_keyword_l_val=.true.)
2274 description=
"Defines whether the LDOS is integrated along a "// &
2275 "coordinate. As an example, for INTEGRATION Z, the LDOS "// &
2276 "$\rho(x,y,E) = \int dz\, \rho(x,y,z,E)$ is computed.", &
2277 usage=
"INTEGRATION Z", &
2278 enum_c_vals=s2a(
"X",
"Y",
"Z",
"NONE"), &
2280 enum_desc=s2a(
"Integrate over x coordinate (not yet implemented).", &
2281 "Integrate over y coordinate (not yet implemented).", &
2282 "Integrate over z coordinate.", &
2283 "No integration, print cube file as function "// &
2284 "of x,y,z (not yet implemented)."), &
2290 keyword, __location__, name=
"BIN_MESH", &
2291 description=
"Mesh of size n x m for binning the space coordinates x and y of "// &
2292 "the LDOS $\rho(x,y,E)$. If -1, no binning is performed and the "// &
2293 "fine x, y resolution of the electron density from SCF is used.", &
2294 usage=
"BIN_MESH n m", &
2295 n_var=2, type_of_var=
integer_t, default_i_vals=(/10, 10/))
2299 END SUBROUTINE create_ldos_section
2307 SUBROUTINE create_tipscan_section(section)
2308 TYPE(section_type),
POINTER :: section
2310 TYPE(keyword_type),
POINTER :: keyword
2312 cpassert(.NOT.
ASSOCIATED(section))
2314 description=
"Parameters needed to set up a Tip Scan. "// &
2315 "Needs external definition of tip induced field.", &
2316 n_keywords=1, n_subsections=1, repeats=.false.)
2321 name=
"_SECTION_PARAMETERS_", &
2322 description=
"Controls the activation of the Tip Scan procedure", &
2323 default_l_val=.false., &
2324 lone_keyword_l_val=.true.)
2328 CALL keyword_create(keyword, __location__, name=
"SCAN_DIRECTION", &
2329 description=
"Defines scan direction and scan type(line, plane).", &
2330 usage=
"SCAN_DIRECTION XY", &
2331 enum_c_vals=s2a(
"X",
"Y",
"Z",
"XY",
"XZ",
"YZ",
"XYZ"), &
2337 CALL keyword_create(keyword, __location__, name=
"REFERENCE_POINT", &
2338 description=
"The reference point to define the absolute position of the scan. ", &
2339 usage=
"REFERENCE_POINT 0.0 0.0 1.0", &
2340 n_var=3, default_r_vals=(/0.0_dp, 0.0_dp, 0.0_dp/), type_of_var=
real_t, &
2341 unit_str=
"angstrom")
2346 description=
"Number of points calculated for each scan direction.", &
2347 usage=
"SCAN_POINTS 20 20", &
2353 description=
"Step size for each scan direction.", &
2354 usage=
"SCAN_STEP 0.01 0.01", &
2355 n_var=-1, type_of_var=
real_t, unit_str=
"angstrom")
2359 CALL keyword_create(keyword, __location__, name=
"TIP_FILENAME", &
2360 description=
"Filename of tip potential defined in cube file format.", &
2361 usage=
"TIP_FILENAME <filename>", &
2366 END SUBROUTINE create_tipscan_section
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public putrino2000
integer, save, public weber2009
integer, save, public kondov2007
integer, save, public luber2014
integer, save, public iannuzzi2005
integer, save, public sebastiani2001
integer, save, public putrino2002
integer, save, public futera2017
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 medium_print_level
integer, parameter, public high_print_level
integer, parameter, public add_last_numeric
integer, parameter, public silent_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
real(kind=dp) function, public cp_unit_to_cp2k(value, unit_str, defaults, power)
converts to the internal cp2k units to the given unit
Defines the basic variable types.
integer, parameter, public dp
Utilities for string manipulations.