68#include "./base/base_uses.f90"
73 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
74 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'input_cp2k_properties_dft'
91 cpassert(.NOT.
ASSOCIATED(section))
93 description=
"This section is used to set up the PROPERTIES calculation.", &
94 n_keywords=0, n_subsections=6, repeats=.false.)
96 NULLIFY (subsection, keyword)
98 CALL create_linres_section(subsection, create_subsections=.true.)
102 CALL create_et_coupling_section(subsection)
115 description=
"This section is used to print the density derived atomic point charges. "// &
116 "The fit of the charges is controlled through the DENSITY_FITTING section", &
118 CALL keyword_create(keyword, __location__, name=
"TYPE_OF_DENSITY", &
119 description=
"Specifies the type of density used for the fitting", &
120 usage=
"TYPE_OF_DENSITY (FULL|SPIN)", &
121 enum_c_vals=
s2a(
"FULL",
"SPIN"), &
123 enum_desc=
s2a(
"Full density",
"Spin density"), &
130 CALL create_tddfpt2_section(subsection)
134 CALL create_rixs_section(subsection)
138 CALL create_bandstructure_section(subsection)
142 CALL create_tipscan_section(subsection)
153 SUBROUTINE create_rixs_section(section)
158 cpassert(.NOT.
ASSOCIATED(section))
160 NULLIFY (keyword, subsection, print_key)
163 description=
"Resonant Inelastic Xray Scattering using XAS_TDP and TDDFPT.", &
164 n_keywords=1, n_subsections=3, repeats=.false., &
167 CALL create_tddfpt2_section(subsection)
175 CALL section_create(subsection, __location__,
"PRINT",
"Controls the printing of information "// &
176 "during RIXS calculations", repeats=.false.)
179 description=
"Controles the printing of the RIXS spectrum "// &
182 common_iter_levels=3)
189 END SUBROUTINE create_rixs_section
200 SUBROUTINE create_linres_section(section, create_subsections, default_set_tdlr)
202 LOGICAL,
INTENT(in) :: create_subsections
203 LOGICAL,
INTENT(IN),
OPTIONAL :: default_set_tdlr
205 INTEGER :: def_max_iter, def_precond
206 REAL(kind=
dp) :: def_egap, def_eps, def_eps_filter
210 NULLIFY (keyword, print_key)
212 IF (
PRESENT(default_set_tdlr))
THEN
215 def_eps_filter = 1.0e-15_dp
221 def_eps_filter = 0.0_dp
226 cpassert(.NOT.
ASSOCIATED(section))
228 description=
"The linear response is used to calculate one of the "// &
229 "following properties: nmr, epr, raman, ... ", &
230 n_keywords=5, n_subsections=2, repeats=.false., &
234 description=
"target accuracy for the convergence of the conjugate gradient.", &
235 usage=
"EPS 1.e-6", default_r_val=def_eps)
240 description=
"Filter threshold for response density matrix.", &
241 usage=
"EPS_FILTER 1.e-8", default_r_val=def_eps_filter)
246 description=
"Maximum number of conjugate gradient iteration to be performed for one optimization.", &
247 usage=
"MAX_ITER 200", default_i_val=def_max_iter)
251 CALL keyword_create(keyword, __location__, name=
"RESTART_EVERY", &
252 description=
"Restart the conjugate gradient after the specified number of iterations.", &
253 usage=
"RESTART_EVERY 200", default_i_val=50)
258 keyword, __location__, name=
"PRECONDITIONER", &
259 description=
"Type of preconditioner to be used with all minimization schemes. "// &
260 "They differ in effectiveness, cost of construction, cost of application. "// &
261 "Properly preconditioned minimization can be orders of magnitude faster than doing nothing.", &
262 usage=
"PRECONDITIONER FULL_ALL", &
263 default_i_val=def_precond, &
264 enum_c_vals=
s2a(
"FULL_ALL",
"FULL_SINGLE_INVERSE",
"FULL_SINGLE",
"FULL_KINETIC",
"FULL_S_INVERSE", &
266 enum_desc=
s2a(
"Most effective state selective preconditioner based on diagonalization, "// &
267 "requires the ENERGY_GAP parameter to be an underestimate of the HOMO-LUMO gap. "// &
268 "This preconditioner is recommended for almost all systems, except very large systems where "// &
269 "make_preconditioner would dominate the total computational cost.", &
270 "Based on H-eS cholesky inversion, similar to FULL_SINGLE in preconditioning efficiency "// &
271 "but cheaper to construct, "// &
272 "might be somewhat less robust. Recommended for large systems.", &
273 "Based on H-eS diagonalisation, not as good as FULL_ALL, but somewhat cheaper to apply. ", &
274 "Cholesky inversion of S and T, fast construction, robust, and relatively good, "// &
275 "use for very large systems.", &
276 "Cholesky inversion of S, not as good as FULL_KINETIC, yet equally expensive.", &
277 "skip preconditioning"), &
284 description=
"Energy gap estimate [a.u.] for preconditioning", &
285 usage=
"ENERGY_GAP 0.1", &
286 default_r_val=def_egap)
291 description=
"Perform a linear response calculation every N-th step for MD run", &
292 usage=
"EVERY_N_STEP 50", default_i_val=1)
297 description=
"Restart the response calculation if the restart file exists", &
299 default_l_val=.false., lone_keyword_l_val=.true.)
303 CALL keyword_create(keyword, __location__, name=
"WFN_RESTART_FILE_NAME", &
304 variants=(/
"RESTART_FILE_NAME"/), &
305 description=
"Root of the file names where to read the response functions from "// &
306 "which to restart the calculation of the linear response", &
307 usage=
"WFN_RESTART_FILE_NAME <FILENAME>", &
312 IF (create_subsections)
THEN
319 CALL create_current_section(subsection)
323 CALL create_nmr_section(subsection)
327 CALL create_spin_spin_section(subsection)
331 CALL create_epr_section(subsection)
335 CALL create_polarizability_section(subsection)
339 CALL create_dcdr_section(subsection)
343 CALL create_vcd_section(subsection)
348 description=
"printing of information during the linear response calculation", &
352 print_key, __location__,
"program_run_info", &
353 description=
"Controls the printing of basic iteration information during the LINRES calculation", &
359 description=
"Controls the dumping of restart file of the response wavefunction. "// &
360 "For each set of response functions, i.e. for each perturbation, "// &
361 "one different restart file is dumped. These restart files should be "// &
362 "employed only to restart the same type of LINRES calculation, "// &
363 "i.e. with the same perturbation.", &
374 END SUBROUTINE create_linres_section
382 SUBROUTINE create_dcdr_section(section)
391 NULLIFY (keyword, print_key, subsection)
393 cpassert(.NOT.
ASSOCIATED(section))
395 IF (.NOT. failure)
THEN
397 description=
"Compute analytical gradients the dipole moments.", &
398 n_keywords=50, n_subsections=1, repeats=.false.)
400 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
401 description=
"controls the activation of the APT calculation", &
403 default_l_val=.false., &
404 lone_keyword_l_val=.true.)
408 CALL keyword_create(keyword, __location__, name=
"LIST_OF_ATOMS", &
409 description=
"Specifies a list of atoms.", &
410 usage=
"LIST_OF_ATOMS {integer} {integer} .. {integer}", repeats=.true., &
415 CALL keyword_create(keyword, __location__, name=
"DISTRIBUTED_ORIGIN", &
416 variants=(/
"DO_GAUGE"/), &
417 description=
"Use the distributed origin (DO) gauge?", &
418 usage=
"DISTRIBUTED_ORIGIN T", &
419 default_l_val=.false., lone_keyword_l_val=.true.)
423 CALL keyword_create(keyword, __location__, name=
"ORBITAL_CENTER", &
424 description=
"The orbital center.", &
425 usage=
"ORBITAL_CENTER WANNIER", &
427 enum_c_vals=
s2a(
"WANNIER",
"COMMON",
"ATOM",
"BOX"), &
428 enum_desc=
s2a(
"Use the Wannier centers.", &
429 "Use a common center (works only for an isolate molecule).", &
430 "Use the atoms as center.", &
438 description=
"Gauge origin of the velocity gauge factor.", &
439 enum_c_vals=
s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
440 enum_desc=
s2a(
"Use Center of Mass", &
441 "Use Center of Atomic Charges", &
442 "Use User-defined Point", &
443 "Use Origin of Coordinate System"), &
452 CALL keyword_create(keyword, __location__, name=
"REFERENCE_POINT", &
453 description=
"User-defined reference point of the velocity gauge factor.", &
454 usage=
"REFERENCE_POINT x y z", &
455 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
459 CALL keyword_create(keyword, __location__, name=
"Z_MATRIX_METHOD", &
460 description=
"Use Z_matrix method to solve the response equation", &
461 usage=
"Z_MATRIX_METHOD T", &
462 default_l_val=.false., lone_keyword_l_val=.true.)
467 description=
"Use numerical differentiation to compute the APT, "// &
468 "switches off the calculation of dcdr analytical derivatives. "// &
469 "Requires RUN_TYPE = ENERGY_FORCE or MD.", &
471 default_l_val=.false., lone_keyword_l_val=.true.)
476 description=
"Electric field strength (atomic units) to use for finite differences", &
480 default_r_val=0.0003_dp, &
481 usage=
"APT_FD_DE 1.0E-4")
485 CALL keyword_create(keyword, __location__, name=
"APT_FD_METHOD", &
486 description=
"Numerical differentiation method", &
487 usage=
"APT_FD_METHOD FD", &
490 enum_c_vals=
s2a(
"2PNT"), &
493 enum_desc=
s2a(
"Symmetric two-point differences."), &
501 description=
"print results of the magnetic dipole moment calculation", &
505 description=
"Controls the printing of the electric dipole gradient", &
520 END SUBROUTINE create_dcdr_section
528 SUBROUTINE create_vcd_section(section)
535 NULLIFY (keyword, print_key, subsection)
537 cpassert(.NOT.
ASSOCIATED(section))
540 description=
"Carry out a VCD calculation.", &
541 n_keywords=50, n_subsections=1, repeats=.false.)
543 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
544 description=
"controls the activation of the APT/AAT calculation", &
546 default_l_val=.false., &
547 lone_keyword_l_val=.true.)
551 CALL keyword_create(keyword, __location__, name=
"LIST_OF_ATOMS", &
552 description=
"Specifies a list of atoms.", &
553 usage=
"LIST_OF_ATOMS {integer} {integer} .. {integer}", repeats=.true., &
558 CALL keyword_create(keyword, __location__, name=
"DISTRIBUTED_ORIGIN", &
559 variants=(/
"DO_GAUGE"/), &
560 description=
"Use the distributed origin (DO) gauge?", &
561 usage=
"DISTRIBUTED_ORIGIN T", &
562 default_l_val=.false., lone_keyword_l_val=.true.)
566 CALL keyword_create(keyword, __location__, name=
"ORIGIN_DEPENDENT_MFP", &
567 description=
"Use the origin dependent MFP operator.", &
568 usage=
"ORIGIN_DEPENDENT_MFP T", &
569 default_l_val=.false., lone_keyword_l_val=.true.)
573 CALL keyword_create(keyword, __location__, name=
"ORBITAL_CENTER", &
574 description=
"The orbital center.", &
575 usage=
"ORBITAL_CENTER WANNIER", &
577 enum_c_vals=
s2a(
"WANNIER",
"COMMON",
"ATOM",
"BOX"), &
578 enum_desc=
s2a(
"Use the Wannier centers.", &
579 "Use a common center (works only for an isolate molecule).", &
580 "Use the atoms as center.", &
588 CALL keyword_create(keyword, __location__, name=
"MAGNETIC_ORIGIN", &
589 description=
"Gauge origin of the magnetic dipole operator.", &
590 enum_c_vals=
s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
591 enum_desc=
s2a(
"Use Center of Mass", &
592 "Use Center of Atomic Charges", &
593 "Use User-defined Point", &
594 "Use Origin of Coordinate System"), &
603 CALL keyword_create(keyword, __location__, name=
"MAGNETIC_ORIGIN_REFERENCE", &
604 description=
"User-defined reference point of the magnetic dipole operator.", &
605 usage=
"MAGNETIC_ORIGIN_REFERENCE x y z", &
606 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
611 CALL keyword_create(keyword, __location__, name=
"SPATIAL_ORIGIN", &
612 description=
"Gauge origin of the velocity gauge factor/spatial origin.", &
613 enum_c_vals=
s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
614 enum_desc=
s2a(
"Use Center of Mass", &
615 "Use Center of Atomic Charges", &
616 "Use User-defined Point", &
617 "Use Origin of Coordinate System"), &
626 CALL keyword_create(keyword, __location__, name=
"SPATIAL_ORIGIN_REFERENCE", &
627 description=
"User-defined reference point of the velocity gauge factor/spatial origin.", &
628 usage=
"SPATIAL_ORIGIN_REFERENCE x y z", &
629 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
635 description=
"print results of the magnetic dipole moment calculation", &
639 description=
"Controls the printing of the APTs and AATs", &
652 END SUBROUTINE create_vcd_section
661 SUBROUTINE create_current_section(section)
667 NULLIFY (keyword, print_key, subsection)
669 cpassert(.NOT.
ASSOCIATED(section))
671 description=
"The induced current density is calculated by DFPT.", &
672 n_keywords=4, n_subsections=1, repeats=.false., &
675 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
676 description=
"controls the activation of the induced current calculation", &
677 usage=
"&CURRENT T", &
678 default_l_val=.false., &
679 lone_keyword_l_val=.true.)
684 description=
"The gauge used to compute the induced current within GAPW.", &
687 enum_c_vals=
s2a(
"R",
"R_AND_STEP_FUNCTION",
"ATOM"), &
688 enum_desc=
s2a(
"Position gauge (doesnt work well).", &
689 "Position and step function for the soft and the local parts, respectively.", &
695 CALL keyword_create(keyword, __location__, name=
"GAUGE_ATOM_RADIUS", &
696 description=
"Build the gauge=atom using only the atoms within this radius.", &
697 usage=
"GAUGE_ATOM_RADIUS 10.0", &
704 CALL keyword_create(keyword, __location__, name=
"USE_OLD_GAUGE_ATOM", &
705 description=
"Use the old way to compute the gauge.", &
706 usage=
"USE_OLD_GAUGE_ATOM T", &
707 default_l_val=.true., lone_keyword_l_val=.true.)
711 CALL keyword_create(keyword, __location__, name=
"ORBITAL_CENTER", &
712 description=
"The orbital center.", &
713 usage=
"ORBITAL_CENTER WANNIER", &
715 enum_c_vals=
s2a(
"WANNIER",
"COMMON",
"ATOM",
"BOX"), &
716 enum_desc=
s2a(
"Use the Wannier centers.", &
717 "Use a common center (works only for an isolate molecule).", &
718 "Use the atoms as center.", &
725 CALL keyword_create(keyword, __location__, name=
"COMMON_CENTER", &
726 description=
"The common center ", usage=
"COMMON_CENTER 0.0 1.0 0.0", &
727 n_var=3, default_r_vals=(/0.0_dp, 0.0_dp, 0.0_dp/), type_of_var=
real_t, &
733 description=
"How many boxes along each directions ", usage=
"NBOX 6 6 5", &
734 n_var=3, default_i_vals=(/4, 4, 4/), type_of_var=
integer_t)
739 description=
"Calculate the succeptibility correction to the shift with PBC", &
741 default_l_val=.false., lone_keyword_l_val=.true.)
745 CALL keyword_create(keyword, __location__, name=
"FORCE_NO_FULL", &
746 description=
"Avoid the calculation of the state dependent perturbation term, "// &
747 "even if the orbital centers are set at Wannier centers or at Atom centers", &
748 usage=
"FORCE_NO_FULL T", &
749 default_l_val=.false., lone_keyword_l_val=.true.)
753 CALL keyword_create(keyword, __location__, name=
"SELECTED_STATES_ON_ATOM_LIST", &
754 description=
"Indexes of the atoms for selecting"// &
755 " the states to be used for the response calculations.", &
756 usage=
"SELECTED_STATES_ON_ATOM_LIST 1 2 10", &
757 n_var=-1, type_of_var=
integer_t, repeats=.true.)
761 CALL keyword_create(keyword, __location__, name=
"SELECTED_STATES_ATOM_RADIUS", &
762 description=
"Select all the states included in the given radius around each atoms "// &
763 "in SELECTED_STATES_ON_ATOM_LIST.", &
764 usage=
"SELECTED_STATES_ATOM_RADIUS 2.0", &
771 CALL keyword_create(keyword, __location__, name=
"RESTART_CURRENT", &
772 description=
"Restart the induced current density calculation"// &
773 " from a previous run (not working yet).", &
774 usage=
"RESTART_CURRENT", default_l_val=.false., &
775 lone_keyword_l_val=.true.)
781 description=
"print results of induced current density calculation", &
785 description=
"Controls the printing of the induced current density (not working yet).", &
788 description=
"The stride (X,Y,Z) used to write the cube file "// &
789 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
790 " 1 number valid for all components (not working yet).", &
791 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
795 description=
"append the cube files when they already exist", &
796 default_l_val=.false., lone_keyword_l_val=.true.)
804 description=
"Controls the printing of the response functions (not working yet).", &
807 description=
"The stride (X,Y,Z) used to write the cube file "// &
808 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
809 " 1 number valid for all components (not working yet).", &
810 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
814 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
815 variants=(/
"CUBES_LU"/), &
816 description=
"The lower and upper index of the states to be printed as cube (not working yet).", &
817 usage=
"CUBES_LU_BOUNDS integer integer", &
818 n_var=2, default_i_vals=(/0, -2/), type_of_var=
integer_t)
823 description=
"Indexes of the states to be printed as cube files "// &
824 "This keyword can be repeated several times "// &
825 "(useful if you have to specify many indexes) (not working yet).", &
826 usage=
"CUBES_LIST 1 2", &
827 n_var=-1, type_of_var=
integer_t, repeats=.true.)
831 description=
"append the cube files when they already exist", &
832 default_l_val=.false., lone_keyword_l_val=.true.)
847 END SUBROUTINE create_current_section
857 SUBROUTINE create_nmr_section(section)
863 NULLIFY (keyword, print_key, subsection)
865 cpassert(.NOT.
ASSOCIATED(section))
867 description=
"The chemical shift is calculated by DFPT.", &
868 n_keywords=5, n_subsections=1, repeats=.false., &
871 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
872 description=
"controls the activation of the nmr calculation", &
874 default_l_val=.false., &
875 lone_keyword_l_val=.true.)
879 CALL keyword_create(keyword, __location__, name=
"INTERPOLATE_SHIFT", &
880 description=
"Calculate the soft part of the chemical shift by interpolation ", &
881 usage=
"INTERPOLATE_SHIFT T", &
882 default_l_val=.false., lone_keyword_l_val=.true.)
887 description=
"Calculate the chemical shift in a set of points"// &
888 " given from an external file", usage=
"NICS", &
889 default_l_val=.false., lone_keyword_l_val=.true.)
893 CALL keyword_create(keyword, __location__, name=
"NICS_FILE_NAME", &
894 description=
"Name of the file with the NICS points coordinates", &
895 usage=
"NICS_FILE_NAME nics_file", &
896 default_lc_val=
"nics_file")
901 description=
"Restart the NMR calculation from a previous run (NOT WORKING YET)", &
902 usage=
"RESTART_NMR", default_l_val=.false., &
903 lone_keyword_l_val=.true.)
907 CALL keyword_create(keyword, __location__, name=
"SHIFT_GAPW_RADIUS", &
908 description=
"While computing the local part of the shift (GAPW), "// &
909 "the integration is restricted to nuclei that are within this radius.", &
910 usage=
"SHIFT_GAPW_RADIUS 20.0", &
919 description=
"print results of nmr calculation", &
923 description=
"Controls the printing of the response functions ", &
926 description=
"The stride (X,Y,Z) used to write the cube file "// &
927 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
928 " 1 number valid for all components.", &
929 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
933 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
934 variants=(/
"CUBES_LU"/), &
935 description=
"The lower and upper index of the states to be printed as cube", &
936 usage=
"CUBES_LU_BOUNDS integer integer", &
937 n_var=2, default_i_vals=(/0, -2/), type_of_var=
integer_t)
942 description=
"Indexes of the states to be printed as cube files "// &
943 "This keyword can be repeated several times "// &
944 "(useful if you have to specify many indexes).", &
945 usage=
"CUBES_LIST 1 2", &
946 n_var=-1, type_of_var=
integer_t, repeats=.true.)
950 description=
"append the cube files when they already exist", &
951 default_l_val=.false., lone_keyword_l_val=.true.)
959 description=
"Controls the printing of susceptibility", &
965 description=
"Controls the printing of the chemical shift", &
968 CALL keyword_create(keyword, __location__, name=
"ATOMS_LU_BOUNDS", &
969 variants=(/
"ATOMS_LU"/), &
970 description=
"The lower and upper atomic index for which the tensor is printed", &
971 usage=
"ATOMS_LU_BOUNDS integer integer", &
972 n_var=2, default_i_vals=(/0, -2/), type_of_var=
integer_t)
977 description=
"list of atoms for which the shift is printed into a file ", &
978 usage=
"ATOMS_LIST 1 2", n_var=-1, &
994 END SUBROUTINE create_nmr_section
1003 SUBROUTINE create_spin_spin_section(section)
1009 NULLIFY (keyword, print_key, subsection)
1011 cpassert(.NOT.
ASSOCIATED(section))
1013 description=
"Compute indirect spin-spin coupling constants.", &
1014 n_keywords=5, n_subsections=1, repeats=.false.)
1016 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
1017 description=
"controls the activation of the nmr calculation", &
1018 usage=
"&SPINSPIN T", &
1019 default_l_val=.false., &
1020 lone_keyword_l_val=.true.)
1024 CALL keyword_create(keyword, __location__, name=
"RESTART_SPINSPIN", &
1025 description=
"Restart the spin-spin calculation from a previous run (NOT WORKING YET)", &
1026 usage=
"RESTART_SPINSPIN", default_l_val=.false., &
1027 lone_keyword_l_val=.true.)
1031 CALL keyword_create(keyword, __location__, name=
"ISSC_ON_ATOM_LIST", &
1032 description=
"Atoms for which the issc is computed.", &
1033 usage=
"ISSC_ON_ATOM_LIST 1 2 10", &
1034 n_var=-1, type_of_var=
integer_t, repeats=.true.)
1039 description=
"Compute the Fermi contact contribution", &
1041 default_l_val=.true., lone_keyword_l_val=.true.)
1046 description=
"Compute the spin-dipolar contribution", &
1048 default_l_val=.true., lone_keyword_l_val=.true.)
1053 description=
"Compute the paramagnetic spin-orbit contribution", &
1055 default_l_val=.true., lone_keyword_l_val=.true.)
1060 description=
"Compute the diamagnetic spin-orbit contribution (NOT YET IMPLEMENTED)", &
1062 default_l_val=.true., lone_keyword_l_val=.true.)
1066 NULLIFY (subsection)
1068 description=
"print results of the indirect spin-spin calculation", &
1072 description=
"Controls the printing of the indirect spin-spin matrix", &
1076 description=
"list of atoms for which the indirect spin-spin is printed into a file ", &
1077 usage=
"ATOMS_LIST 1 2", n_var=-1, &
1088 NULLIFY (subsection)
1093 END SUBROUTINE create_spin_spin_section
1103 SUBROUTINE create_epr_section(section)
1107 TYPE(
section_type),
POINTER :: print_key, subsection, subsubsection
1109 NULLIFY (keyword, print_key, subsection, subsubsection)
1111 cpassert(.NOT.
ASSOCIATED(section))
1113 description=
"The g tensor is calculated by DFPT ", &
1114 n_keywords=5, n_subsections=1, repeats=.false., &
1117 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
1118 description=
"controls the activation of the epr calculation", &
1120 default_l_val=.false., &
1121 lone_keyword_l_val=.true.)
1126 description=
"Restart the EPR calculation from a previous run (NOT WORKING)", &
1127 usage=
"RESTART_EPR", default_l_val=.false., &
1128 lone_keyword_l_val=.true.)
1132 NULLIFY (subsection)
1134 description=
"print results of epr calculation", &
1138 description=
"Controls the printing of the components of nabla v_ks ", &
1141 description=
"The stride (X,Y,Z) used to write the cube file "// &
1142 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1143 " 1 number valid for all components.", &
1144 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
1148 description=
"append the cube files when they already exist", &
1149 default_l_val=.false., lone_keyword_l_val=.true.)
1157 description=
"Controls the printing of the g tensor", &
1163 CALL keyword_create(keyword, __location__, name=
"GAPW_MAX_ALPHA", &
1164 description=
"Maximum alpha of GTH potentials allowed on the soft grids ", &
1165 usage=
"GAPW_MAX_ALPHA real", default_r_val=5.0_dp)
1169 CALL keyword_create(keyword, __location__, name=
"SOO_RHO_HARD", &
1170 description=
"Whether or not to include the atomic parts of the density "// &
1171 "in the SOO part of the g tensor", usage=
"SOO_RHO_HARD", &
1172 default_l_val=.false., lone_keyword_l_val=.true.)
1180 description=
"Controls the printing of the response functions ", &
1183 description=
"The stride (X,Y,Z) used to write the cube file "// &
1184 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1185 " 1 number valid for all components.", &
1186 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
1190 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
1191 variants=(/
"CUBES_LU"/), &
1192 description=
"The lower and upper index of the states to be printed as cube", &
1193 usage=
"CUBES_LU_BOUNDS integer integer", &
1194 n_var=2, default_i_vals=(/0, -2/), type_of_var=
integer_t)
1199 description=
"Indexes of the states to be printed as cube files "// &
1200 "This keyword can be repeated several times "// &
1201 "(useful if you have to specify many indexes).", &
1202 usage=
"CUBES_LIST 1 2", &
1203 n_var=-1, type_of_var=
integer_t, repeats=.true.)
1207 description=
"append the cube files when they already exist", &
1208 default_l_val=.false., lone_keyword_l_val=.true.)
1218 NULLIFY (subsection)
1223 END SUBROUTINE create_epr_section
1232 SUBROUTINE create_polarizability_section(section)
1239 NULLIFY (keyword, print_key, subsection)
1241 cpassert(.NOT.
ASSOCIATED(section))
1243 description=
"Compute polarizabilities.", &
1244 n_keywords=5, n_subsections=1, repeats=.false., &
1247 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
1248 description=
"controls the activation of the polarizability calculation", &
1250 default_l_val=.false., &
1251 lone_keyword_l_val=.true.)
1256 description=
"Compute the electric-dipole--electric-dipole polarizability", &
1257 usage=
"DO_RAMAN F", &
1259 default_l_val=.true., lone_keyword_l_val=.true.)
1263 CALL keyword_create(keyword, __location__, name=
"PERIODIC_DIPOLE_OPERATOR", &
1264 description=
"Type of dipole operator: Berry phase(T) or Local(F)", &
1265 usage=
"PERIODIC_DIPOLE_OPERATOR T", &
1266 default_l_val=.true., lone_keyword_l_val=.true.)
1270 NULLIFY (subsection)
1272 description=
"print results of the polarizability calculation", &
1276 description=
"Controls the printing of the polarizabilities", &
1284 NULLIFY (subsection)
1289 END SUBROUTINE create_polarizability_section
1296 SUBROUTINE create_et_coupling_section(section)
1303 cpassert(.NOT.
ASSOCIATED(section))
1305 description=
"specifies the two constraints/restraints for extracting ET coupling elements", &
1308 NULLIFY (subsection)
1313 NULLIFY (subsection)
1318 NULLIFY (subsection)
1319 CALL create_projection(subsection,
"PROJECTION")
1323 CALL keyword_create(keyword, __location__, name=
"TYPE_OF_CONSTRAINT", &
1324 description=
"Specifies the type of constraint", &
1325 usage=
"TYPE_OF_CONSTRAINT DDAPC", &
1326 enum_c_vals=
s2a(
"NONE",
"DDAPC"), &
1328 enum_desc=
s2a(
"NONE",
"DDAPC Constraint"), &
1335 description=
"Controls the printing basic info about the method", &
1340 END SUBROUTINE create_et_coupling_section
1349 SUBROUTINE create_projection(section, section_name)
1353 CHARACTER(len=*),
INTENT(in) :: section_name
1356 TYPE(
section_type),
POINTER :: print_key, section_block, section_print
1361 cpassert(.NOT.
ASSOCIATED(section))
1366 NULLIFY (section_block)
1367 NULLIFY (section_print)
1370 CALL section_create(section, __location__, name=trim(adjustl(section_name)), &
1371 description=
"Projection-operator approach fo ET coupling calculation", &
1372 n_keywords=0, n_subsections=2, repeats=.false.)
1376 description=
"Controls printing of data and informations to log file", &
1383 description=
"Part of the system (donor, acceptor, bridge,...)", &
1384 n_keywords=2, n_subsections=1, repeats=.true.)
1389 description=
"Array of atom IDs in the system part", &
1390 usage=
"ATOMS {integer} {integer} .. {integer}", &
1391 n_var=-1, type_of_var=
integer_t, repeats=.false.)
1397 description=
"Number of electrons expected in the system part", &
1398 usage=
"NELECTRON {integer}", default_i_val=0)
1404 description=
"Possible printing options in ET system part", &
1405 n_keywords=0, n_subsections=0, repeats=.false.)
1409 CALL keyword_create(keyword, __location__, name=
'MO_COEFF_ATOM', &
1410 description=
"Print out MO coeffiecients on given atom", &
1411 usage=
"MO_COEFF_ATOM {integer} {integer} .. {integer}", &
1412 type_of_var=
integer_t, n_var=-1, repeats=.true.)
1417 CALL keyword_create(keyword, __location__, name=
'MO_COEFF_ATOM_STATE', &
1418 description=
"Print out MO coeffiecients of specific state", &
1419 usage=
"MO_COEFF_ATOM_STATE {integer} {integer} .. {integer}", &
1420 type_of_var=
integer_t, n_var=-1, repeats=.true.)
1426 description=
"Controls saving of MO cube files", &
1431 description=
"The stride (X,Y,Z) used to write the cube file", &
1432 usage=
"STRIDE {integer} {integer} {integer}", n_var=-1, &
1433 default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
1439 description=
"Indices of molecular orbitals to save", &
1440 usage=
"MO_LIST {integer} {integer} .. {integer}", &
1441 type_of_var=
integer_t, n_var=-1, repeats=.true.)
1447 description=
"Number of unoccupied molecular orbitals to save", &
1448 usage=
"NLUMO {integer}", default_i_val=1)
1454 description=
"Number of occupied molecular orbitals to save", &
1455 usage=
"NHOMO {integer}", default_i_val=1)
1470 description=
"Possible printing options in ET", &
1471 n_keywords=0, n_subsections=0, repeats=.false.)
1476 description=
"Controls printing couplings onto file", &
1480 description=
"append the files when they already exist", &
1481 default_l_val=.false., lone_keyword_l_val=.true.)
1490 END SUBROUTINE create_projection
1499 SUBROUTINE create_tddfpt2_section(section)
1505 cpassert(.NOT.
ASSOCIATED(section))
1507 description=
"Parameters needed to set up the Time-Dependent "// &
1508 "Density Functional Perturbation Theory. "// &
1509 "Current implementation works for hybrid functionals. "// &
1510 "Can be used with Gaussian and Plane Waves (GPW) method only.", &
1511 n_keywords=12, n_subsections=4, repeats=.false., &
1514 NULLIFY (keyword, print_key, subsection)
1517 name=
"_SECTION_PARAMETERS_", &
1518 description=
"Controls the activation of the TDDFPT procedure", &
1519 default_l_val=.false., &
1520 lone_keyword_l_val=.true.)
1526 description=
"Number of excited states to converge.", &
1533 description=
"Maximal number of iterations to be performed.", &
1540 description=
"Maximal number of Krylov space vectors. "// &
1541 "Davidson iterations will be restarted upon reaching this limit.", &
1548 description=
"Number of unoccupied orbitals to consider. "// &
1549 "Default is to use all unoccupied orbitals (-1).", &
1556 description=
"Number of MPI processes to be used per excited state. "// &
1557 "Default is to use all processors (0).", &
1565 description=
"Options to compute the kernel", &
1566 usage=
"KERNEL FULL", &
1567 enum_c_vals=
s2a(
"FULL",
"sTDA",
"NONE"), &
1574 description=
"Orbital energy correction potential.", &
1575 enum_c_vals=
s2a(
"NONE",
"LB94",
"GLLB",
"SAOP",
"SHIFT"), &
1577 enum_desc=
s2a(
"No orbital correction scheme is used", &
1578 "van Leeuwen and Baerends. PRA, 49:2421, 1994", &
1579 "Gritsenko, van Leeuwen, van Lenthe, Baerends. PRA, 51:1944, 1995", &
1580 "Gritsenko, Schipper, Baerends. Chem. Phys. Lett., 302:199, 1999", &
1581 "Constant shift of virtual and/or open-shell orbitals"), &
1588 variants=
s2a(
"VIRTUAL_SHIFT"), &
1589 description=
"Constant shift of virtual state eigenvalues.", &
1590 usage=
"EV_SHIFT 0.500", &
1591 n_var=1, type_of_var=
real_t, &
1593 default_r_val=0.0_dp)
1598 variants=
s2a(
"OPEN_SHELL_SHIFT"), &
1599 description=
"Constant shift of open shell eigenvalues.", &
1600 usage=
"EOS_SHIFT 0.200", &
1601 n_var=1, type_of_var=
real_t, &
1603 default_r_val=0.0_dp)
1609 description=
"Target accuracy for excited state energies.", &
1610 n_var=1, type_of_var=
real_t, unit_str=
"hartree", &
1611 default_r_val=1.0e-5_dp)
1615 CALL keyword_create(keyword, __location__, name=
"MIN_AMPLITUDE", &
1616 description=
"The smallest excitation amplitude to print.", &
1617 n_var=1, type_of_var=
real_t, &
1618 default_r_val=5.0e-2_dp)
1622 CALL keyword_create(keyword, __location__, name=
"ORTHOGONAL_EPS", &
1623 description=
"The largest possible overlap between the ground state and "// &
1624 "orthogonalised excited state wave-functions. Davidson iterations "// &
1625 "will be restarted when the overlap goes beyond this threshold in "// &
1626 "order to prevent numerical instability.", &
1627 n_var=1, type_of_var=
real_t, &
1628 default_r_val=1.0e-4_dp)
1634 description=
"Restart the TDDFPT calculation if a restart file exists", &
1636 default_l_val=.false., lone_keyword_l_val=.true.)
1640 CALL keyword_create(keyword, __location__, name=
"RKS_TRIPLETS", &
1641 description=
"Compute triplet excited states using spin-unpolarised molecular orbitals.", &
1643 default_l_val=.false.)
1647 CALL keyword_create(keyword, __location__, name=
"ADMM_KERNEL_XC_CORRECTION", &
1648 description=
"Use/Ignore ADMM correction xc functional for TD kernel. "// &
1649 "XC correction functional is defined in ground state XC section.", &
1651 default_l_val=.true., lone_keyword_l_val=.true.)
1655 CALL keyword_create(keyword, __location__, name=
"ADMM_KERNEL_CORRECTION_SYMMETRIC", &
1656 description=
"ADMM correction functional in kernel is applied symmetrically. "// &
1657 "Original implementation is using a non-symmetric formula.", &
1659 default_l_val=.true., lone_keyword_l_val=.true.)
1664 description=
"Local resolution of identity for Coulomb contribution.", &
1666 default_l_val=.false.)
1671 description=
"Specify size of automatically generated auxiliary basis sets: "// &
1672 "Options={small,medium,large,huge}", &
1673 usage=
"AUTO_BASIS {basis_type} {basis_size}", &
1674 type_of_var=
char_t, repeats=.true., n_var=-1, default_c_vals=(/
"X",
"X"/))
1679 description=
"Implying smeared occupation. ", &
1681 default_l_val=.false., lone_keyword_l_val=.true.)
1685 CALL keyword_create(keyword, __location__, name=
"EXCITON_DESCRIPTORS", &
1686 description=
"Compute exciton descriptors. "// &
1687 "Details given in Manual section about Bethe Salpeter equation.", &
1689 default_l_val=.false.)
1693 CALL keyword_create(keyword, __location__, name=
"DIRECTIONAL_EXCITON_DESCRIPTORS", &
1694 description=
"Print cartesian components of exciton descriptors.", &
1696 default_l_val=.false.)
1701 CALL keyword_create(keyword, __location__, name=
"WFN_RESTART_FILE_NAME", &
1702 variants=(/
"RESTART_FILE_NAME"/), &
1703 description=
"Name of the wave function restart file, may include a path."// &
1704 " If no file is specified, the default is to open the file as generated by"// &
1705 " the wave function restart print key.", &
1706 usage=
"WFN_RESTART_FILE_NAME <FILENAME>", &
1712 CALL section_create(subsection, __location__, name=
"DIPOLE_MOMENTS", &
1713 description=
"Parameters to compute oscillator strengths in the dipole approximation.", &
1714 n_keywords=3, n_subsections=0, repeats=.false.)
1717 description=
"Form of dipole transition integrals.", &
1718 enum_c_vals=
s2a(
"BERRY",
"LENGTH",
"VELOCITY"), &
1719 enum_desc=
s2a(
"Based on Berry phase formula (valid for fully periodic molecular systems only)", &
1720 "Length form ⟨ i | r | j ⟩ (valid for non-periodic molecular systems only)", &
1721 "Velocity form ⟨ i | d/dr | j ⟩"), &
1728 description=
"Reference point to calculate electric "// &
1729 "dipole moments using the dipole integrals in the length form.", &
1730 enum_c_vals=
s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
1731 enum_desc=
s2a(
"Use Center of Mass", &
1732 "Use Center of Atomic Charges", &
1733 "Use User-defined Point", &
1734 "Use Origin of Coordinate System"), &
1743 CALL keyword_create(keyword, __location__, name=
"REFERENCE_POINT", &
1744 description=
"User-defined reference point.", &
1745 usage=
"REFERENCE_POINT x y z", &
1746 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
1756 description=
"Is jet to be implemented", &
1757 n_keywords=2, n_subsections=0, repeats=.false.)
1760 variants=
s2a(
"EPS_FILTER_MATRIX"), &
1761 description=
"The threshold used for sparse matrix operations", &
1762 usage=
"EPS_FILTER {real}", &
1764 default_r_val=1.0e-10_dp)
1769 variants=(/
"ATOMIC_GRID"/), &
1770 description=
"Specification of the atomic angular and radial grids for "// &
1771 "a atomic kind. This keyword must be repeated for all kinds! "// &
1772 "Usage: GRID < LEBEDEV_GRID > < RADIAL_GRID >", &
1773 usage=
"GRID {string} {integer} {integer}", &
1774 n_var=3, type_of_var=
char_t, repeats=.true.)
1792 CALL create_stda_section(subsection)
1802 CALL create_linres_section(subsection, create_subsections=.false., default_set_tdlr=.true.)
1808 description=
"Printing of information during the TDDFT run.", repeats=.false.)
1811 description=
"Controls the printing of the banner for TDDFPT program", &
1817 description=
"Controls the printing of initial guess vectors.", &
1823 description=
"Controls the printing of basic iteration information "// &
1824 "during the TDDFT run.", &
1830 description=
"Controls the printing of detailed energy information "// &
1831 "during the TDDFT run.", &
1837 description=
"Controls the printing of a file with all basis sets used.", &
1843 description=
"Controls the dumping of the MO restart file during TDDFPT. "// &
1844 "By default keeps a short history of three restarts.", &
1846 each_iter_names=
s2a(
"TDDFT_SCF"), each_iter_values=(/10/), &
1848 CALL keyword_create(keyword, __location__, name=
"BACKUP_COPIES", &
1849 description=
"Specifies the maximum number of backup copies.", &
1850 usage=
"BACKUP_COPIES {int}", &
1858 description=
"Perform a natural transition orbital analysis.", &
1861 description=
"Threshold for sum of NTO eigenvalues considered", &
1862 usage=
"Threshold 0.95", &
1865 default_r_val=0.975_dp)
1868 CALL keyword_create(keyword, __location__, name=
"INTENSITY_THRESHOLD", &
1869 description=
"Threshold for oscillator strength to screen states.", &
1870 usage=
"Intensity_threshold 0.01", &
1873 default_r_val=0.0_dp)
1877 description=
"Specifies a list of states for the NTO calculations.", &
1878 usage=
"STATE_LIST {integer} {integer} .. {integer}", &
1883 description=
"Print NTOs on Cube Files", &
1884 usage=
"CUBE_FILES {logical}", repeats=.false., n_var=1, &
1885 default_l_val=.false., lone_keyword_l_val=.true., type_of_var=
logical_t)
1889 description=
"The stride (X,Y,Z) used to write the cube file "// &
1890 "(larger values result in smaller cube files). Provide 3 numbers (for X,Y,Z) or"// &
1891 " 1 number valid for all components.", &
1892 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=
integer_t)
1896 description=
"append the cube files when they already exist", &
1897 default_l_val=.false., lone_keyword_l_val=.true.)
1904 description=
"Write the NTO in Molden file format, for visualisation.", &
1907 description=
"Specifies the number of significant digits retained. 3 is OK for visualization.", &
1908 usage=
"NDIGITS {int}", &
1913 description=
"Representation of Gaussian-type orbitals", &
1915 enum_c_vals=
s2a(
"CARTESIAN",
"SPHERICAL"), &
1917 "Cartesian Gaussian orbitals. Use with caution", &
1918 "Spherical Gaussian orbitals. Incompatible with VMD"), &
1926 description=
"Controls the printout required for NAMD with NEWTONX.", &
1928 CALL keyword_create(keyword, __location__, name=
"PRINT_VIRTUALS", &
1929 description=
"Print occupied AND virtual molecular orbital coefficients", &
1930 default_l_val=.false., lone_keyword_l_val=.true.)
1933 CALL keyword_create(keyword, __location__, name=
"PRINT_PHASES", &
1934 description=
"Print phases of occupied and virtuals MOs.", &
1935 default_l_val=.false., lone_keyword_l_val=.true.)
1938 CALL keyword_create(keyword, __location__, name=
"SCALE_WITH_PHASES", &
1939 description=
"Scale ES eigenvectors with phases of occupied and virtuals MOs.", &
1940 default_l_val=.false., lone_keyword_l_val=.true.)
1948 description=
"Controls the printout of the tddfpt2_soc modul", &
1951 description=
"Will detrement if output in eVolt will be printef.", &
1952 default_l_val=.true., lone_keyword_l_val=.true.)
1956 description=
"Will detrement if output in wavenumbers will be printed.", &
1957 default_l_val=.false., lone_keyword_l_val=.true.)
1961 description=
"Will add the SOC-Splitting as additional output", &
1962 default_l_val=.false., lone_keyword_l_val=.true.)
1966 description=
"Will add the SOC-Matrix as additional output in a different file", &
1967 default_l_val=.false., lone_keyword_l_val=.true.)
1974 description=
"Controls the calculation and printing of excited state forces. "// &
1975 "This needs a RUN_TYPE that includes force evaluation, e.g. ENERGY_FORCE", &
1978 description=
"Specifies a list of states for the force calculations.", &
1979 usage=
"LIST {integer} {integer} .. {integer}", repeats=.true., &
1984 description=
"Threshold for oszillator strength to screen states.", &
1985 usage=
"Threshold 0.01", &
1988 default_r_val=0.0_dp)
1997 END SUBROUTINE create_tddfpt2_section
2003 SUBROUTINE create_stda_section(section)
2008 cpassert(.NOT.
ASSOCIATED(section))
2010 description=
"parameters needed and setup for sTDA calculations", &
2011 n_keywords=3, n_subsections=0, repeats=.false.)
2015 variants=(/
"HFX_FRACTION"/), &
2016 description=
"The fraction of TB Hartree-Fock exchange to use in the Kernel. "// &
2017 "0.0 implies no HFX part is used in the kernel. ", &
2018 usage=
"FRACTION 0.0", default_r_val=0.0_dp)
2025 description=
"Explicitly including or switching off sTDA exchange", &
2026 usage=
"DO_EXCHANGE", default_l_val=.true., lone_keyword_l_val=.true.)
2031 description=
"Use Ewald type method for Coulomb interaction", &
2032 usage=
"DO_EWALD", default_l_val=.false., lone_keyword_l_val=.true.)
2036 CALL keyword_create(keyword, __location__, name=
"EPS_TD_FILTER", &
2037 description=
"Threshold for filtering the transition density matrix", &
2038 usage=
"EPS_TD_FILTER epsf", default_r_val=1.e-10_dp)
2042 CALL keyword_create(keyword, __location__, name=
"MATAGA_NISHIMOTO_CEXP", &
2043 description=
"Exponent used in Mataga-Nishimoto formula for Coulomb (alpha). "// &
2044 "Default value is method dependent!", &
2045 usage=
"MATAGA_NISHIMOTO_CEXP cexp", default_r_val=-99.0_dp)
2049 CALL keyword_create(keyword, __location__, name=
"MATAGA_NISHIMOTO_XEXP", &
2050 description=
"Exponent used in Mataga-Nishimoto formula for Exchange (beta). "// &
2051 "Default value is method dependent!", &
2052 usage=
"MATAGA_NISHIMOTO_XEXP xexp", default_r_val=-99.0_dp)
2056 CALL keyword_create(keyword, __location__, name=
"COULOMB_SR_CUT", &
2057 description=
"Maximum range of short range part of Coulomb interaction.", &
2058 usage=
"COULOMB_SR_CUT rcut", default_r_val=20.0_dp)
2062 CALL keyword_create(keyword, __location__, name=
"COULOMB_SR_EPS", &
2063 description=
"Threshold for short range part of Coulomb interaction.", &
2064 usage=
"COULOMB_SR_EPS sreps", default_r_val=1.e-03_dp)
2068 END SUBROUTINE create_stda_section
2076 SUBROUTINE create_bandstructure_section(section)
2082 cpassert(.NOT.
ASSOCIATED(section))
2083 CALL section_create(section, __location__, name=
"BANDSTRUCTURE", &
2084 description=
"Parameters needed to set up a calculation for "// &
2085 "electronic level energies of molecules and the electronic band "// &
2086 "structure of materials from post-SCF schemes (GW, perturbative "// &
2087 "spin-orbit coupling). Also, the density of states (DOS), "// &
2088 "projected density of states (PDOS), local density of states (LDOS), "// &
2089 "local valence band maximum (LVBM), local conduction band minimum "// &
2090 "(LCBM) and local band gap can be calculated. Please note that "// &
2091 "all methods in this section start from a Gamma-only DFT SCF. "// &
2092 "You need to make sure that the cell chosen in the DFT SCF is "// &
2093 "converged in the cell size. Band structures are computed "// &
2094 "for the primitive cell (i.e. the smallest possible unit cell of "// &
2095 "the input structure which is detected automatically). Moreover, "// &
2096 "spin-orbit coupling (SOC) on eigenvalues and band structures is "// &
2097 "available using Hartwigsen-Goedecker-Hutter "// &
2098 "pseudopotentials.", &
2099 n_keywords=1, n_subsections=1, repeats=.false.)
2101 NULLIFY (keyword, subsection)
2103 name=
"_SECTION_PARAMETERS_", &
2104 description=
"Controls the activation of the band structure calculation.", &
2105 default_l_val=.false., &
2106 lone_keyword_l_val=.true.)
2115 CALL create_gw_section(subsection)
2119 CALL create_soc_section(subsection)
2123 CALL create_dos_section(subsection)
2127 END SUBROUTINE create_bandstructure_section
2135 SUBROUTINE create_gw_section(section)
2141 cpassert(.NOT.
ASSOCIATED(section))
2143 description=
"Parameters needed to set up a GW calculation for "// &
2144 "electronic level energies $\varepsilon_{n\mathbf{k}}^{G_0W_0}$ "// &
2145 "of molecules and the band structure of materials: "// &
2146 "$\varepsilon_{n\mathbf{k}}^{G_0W_0}= "// &
2147 "\varepsilon_{n\mathbf{k}}^\text{DFT}+\Sigma_{n\mathbf{k}} "// &
2148 "-v^\text{xc}_{n\mathbf{k}}$. "// &
2149 "For the GW algorithm for molecules, see "// &
2150 "<https://doi.org/10.1021/acs.jctc.0c01282>. "// &
2151 "For 2D materials, see <https://doi.org/10.1021/acs.jctc.3c01230>.", &
2152 n_keywords=1, n_subsections=1, repeats=.false.)
2156 name=
"_SECTION_PARAMETERS_", &
2157 description=
"Controls the activation of the GW calculation.", &
2158 default_l_val=.false., &
2159 lone_keyword_l_val=.true.)
2163 CALL keyword_create(keyword, __location__, name=
"NUM_TIME_FREQ_POINTS", &
2164 description=
"Number of discrete points for the imaginary-time "// &
2165 "grid and the imaginary-frequency grid. The more points, the more "// &
2166 "precise is the calculation. Typically, 10 points are good "// &
2167 "for 0.1 eV precision of band structures and molecular energy "// &
2168 "levels, 20 points for 0.03 eV precision, "// &
2169 "and 30 points for 0.01 eV precision, see Table I in "// &
2170 "<https://doi.org/10.1021/acs.jctc.0c01282>. GW computation time "// &
2171 "increases linearly with `NUM_TIME_FREQ_POINTS`.", &
2172 usage=
"NUM_TIME_FREQ_POINTS 30", &
2178 description=
"Determines a threshold for the DBCSR based sparse "// &
2179 "multiplications. Normally, `EPS_FILTER` determines accuracy "// &
2180 "and timing of low-scaling GW calculations. (Lower filter means "// &
2181 "higher numerical precision, but higher computational cost.)", &
2182 usage=
"EPS_FILTER 1.0E-6", &
2183 default_r_val=1.0e-8_dp)
2187 CALL keyword_create(keyword, __location__, name=
"REGULARIZATION_MINIMAX", &
2188 description=
"Parameter to regularize the Fourier transformation with minimax grids. "// &
2189 "In case the parameter 0.0 is chosen, no regularization is performed.", &
2190 usage=
"REGULARIZATION_MINIMAX 1.0E-4", &
2191 default_r_val=-1.0_dp)
2195 CALL keyword_create(keyword, __location__, name=
"REGULARIZATION_RI", &
2196 description=
"Parameter for RI regularization, setting a negative "// &
2197 "value triggers the default value. Affects RI basis set convergence "// &
2198 "but in any case large RI basis will give RI basis set convergence.", &
2199 usage=
"REGULARIZATION_RI 1.0E-4", &
2200 default_r_val=-1.0_dp)
2204 CALL keyword_create(keyword, __location__, name=
"CUTOFF_RADIUS_RI", &
2205 description=
"The cutoff radius (in Angstrom) for the truncated "// &
2206 "Coulomb operator. The larger the cutoff radius, the faster "// &
2207 "converges the resolution of the identity (RI) with respect to the "// &
2208 "RI basis set size. Larger cutoff radius means higher computational "// &
2210 usage=
"CUTOFF_RADIUS_RI 3.0", &
2212 type_of_var=
real_t, unit_str=
"angstrom")
2216 CALL keyword_create(keyword, __location__, name=
"MEMORY_PER_PROC", &
2217 description=
"Specify the available memory per MPI process. Set "// &
2218 "`MEMORY_PER_PROC` as accurately as possible for good performance. If "// &
2219 "`MEMORY_PER_PROC` is set lower as the actually available "// &
2220 "memory per MPI process, the performance will be "// &
2221 "bad; if `MEMORY_PER_PROC` is set higher as the actually "// &
2222 "available memory per MPI process, the program might run out of "// &
2223 "memory. You can calculate `MEMORY_PER_PROC` as follows: "// &
2224 "Get the memory per node on your machine, mem_per_node "// &
2225 "(for example, from a supercomputer website, typically between "// &
2226 "100 GB and 2 TB), get the number of "// &
2227 "MPI processes per node, n_MPI_proc_per_node"// &
2228 " (for example from your run-script; if you "// &
2229 "use slurm, the number behind '--ntasks-per-node' is the number "// &
2230 "of MPI processes per node). Then calculate "// &
2231 "`MEMORY_PER_PROC` = mem_per_node / n_MPI_proc_per_node "// &
2232 "(typically between 2 GB and 50 GB). Unit of keyword: Gigabyte (GB).", &
2233 usage=
"MEMORY_PER_PROC 16", &
2234 default_r_val=2.0_dp)
2238 CALL keyword_create(keyword, __location__, name=
"APPROX_KP_EXTRAPOL", &
2239 description=
"If true, use only a 4x4 kpoint mesh for frequency "// &
2240 "points $\omega_j, j \ge 2$ (instead of a 4x4 and 6x6 k-point mesh). "// &
2241 "The k-point extrapolation of $W_{PQ}(i\omega_j,\mathbf{q})$ "// &
2242 "is done approximately from $W_{PQ}(i\omega_1,\mathbf{q})$.", &
2243 usage=
"APPROX_KP_EXTRAPOL", &
2244 default_l_val=.false., lone_keyword_l_val=.true.)
2248 CALL keyword_create(keyword, __location__, name=
"SIZE_LATTICE_SUM", &
2249 description=
"Parameter determines how many neighbor cells $\mathbf{R}$ "// &
2250 "are used for computing "// &
2251 "$V_{PQ}(\mathbf{k}) = "// &
2252 "\sum_{\mathbf{R}} e^{i\mathbf{k}\cdot\mathbf{R}}\,\langle P, "// &
2253 "\text{cell}{=}\mathbf{0}|1/r|Q,\text{cell}{=}\mathbf{R}\rangle$. "// &
2254 "Normally, parameter does not need to be touched.", &
2255 usage=
"SIZE_LATTICE_SUM 4", &
2261 keyword, __location__, name=
"KPOINTS_W", &
2262 description=
"Monkhorst-Pack k-point mesh of size N_x, N_y, N_z for calculating "// &
2263 "$W_{PQ}^\mathbf{R}=\int_\text{BZ}\frac{d\mathbf{k}}{\Omega_\text{BZ}}\, "// &
2264 "e^{-i\mathbf{k}\cdot\mathbf{R}}\,W_{PQ}(\mathbf{k})$. "// &
2265 αα
"For non-periodic directions , choose N_ = 1. "// &
2266 "Automatic choice of the k-point mesh for negative "// &
2267 "values, i.e. KPOINTS_W -1 -1 -1. "// &
2268 "K-point extrapolation of W is automatically switched on.", &
2269 usage=
"KPOINTS_W N_x N_y N_z", &
2270 n_var=3, type_of_var=
integer_t, default_i_vals=(/-1, -1, -1/))
2275 description=
"If true, use Hedin's shift in G0W0, evGW and evGW0. "// &
2276 "Details see in Li et al. JCTC 18, 7570 "// &
2277 "(2022), Figure 1. G0W0 with Hedin's shift should give "// &
2278 "similar GW eigenvalues as evGW0; at a lower "// &
2279 "computational cost.", &
2280 usage=
"HEDIN_SHIFT", &
2281 default_l_val=.false., &
2282 lone_keyword_l_val=.true.)
2286 CALL keyword_create(keyword, __location__, name=
"FREQ_MAX_FIT", &
2287 description=Σω
"For analytic continuation, a fit on (i) is performed. "// &
2288 Σω
"This fit is then evaluated at a real frequency, (), which is used "// &
2289 "in the quasiparticle equation "// &
2290 "$\varepsilon_{n\mathbf{k}}^{G_0W_0}= "// &
2291 "\varepsilon_{n\mathbf{k}}^\text{DFT}+\Sigma_{n\mathbf{k}} "// &
2292 "-v^\text{xc}_{n\mathbf{k}}$. The keyword FREQ_MAX_FIT "// &
2293 Σω
"determines fitting range for the self-energy (i) on "// &
2294 ωω
"imaginary axis: i*[0, _max] for empty orbitals/bands, i*[-_max,0] "// &
2295 ω
"for occ orbitals. A smaller _max might lead to better numerical "// &
2296 "stability (i.e., if you observe clearly wrong GW eigenvalues/bands "// &
2297 ω
"around HOMO/LUMO, decreasing _max might fix this issue). "// &
2298 ω
"A small benchmark of _max is contained in Fig. 5 of "// &
2299 "J. Wilhelm et al., JCTC 12, 3623-3635 (2016). "// &
2300 ω
"Note that we used _max = 1 Ha = 27.211 eV in the benchmark "// &
2301 "M. Azizi et al., PRB 109, 245101 (2024).", &
2303 usage=
"FREQ_MAX_FIT 20.0", &
2308 NULLIFY (subsection, print_key)
2310 description=
"Printing of GW restarts.", &
2311 n_keywords=0, n_subsections=1, repeats=.false.)
2313 description=
"Controls the printing of restart files "// &
2316 common_iter_levels=3)
2323 END SUBROUTINE create_gw_section
2331 SUBROUTINE create_soc_section(section)
2336 cpassert(.NOT.
ASSOCIATED(section))
2338 description=
"Switch on or off spin-orbit coupling. Use SOC "// &
2339 "parameters from non-local pseudopotentials as given in "// &
2340 "Hartwigsen, Goedecker, Hutter, Eq.(18), (19), "// &
2341 "<https://doi.org/10.1103/PhysRevB.58.3641>, "// &
2342 "$V_{\mu\nu}^{\mathrm{SOC}, (\alpha)} = "// &
2343 "(\hbar/2) \langle \phi_\mu | \sum_l \Delta "// &
2344 "V_l^\mathrm{SO}(\mathbf{r},\mathbf{r}') "// &
2345 "L^{(\alpha)} | \phi_\nu \rangle, "// &
2346 "\alpha = x, y, z$.", &
2347 n_keywords=1, n_subsections=1, repeats=.false.)
2351 name=
"_SECTION_PARAMETERS_", &
2352 description=
"Controls the activation of the SOC calculation.", &
2353 default_l_val=.false., &
2354 lone_keyword_l_val=.true.)
2358 CALL keyword_create(keyword, __location__, name=
"ENERGY_WINDOW", &
2359 description=
"Apply SOC only for states with eigenvalues in the "// &
2360 "interval $[\varepsilon_\mathrm{VBM}-E_\mathrm{window}/2, "// &
2361 "\varepsilon_\mathrm{CBM}+E_\mathrm{window}/2]$. Might be necessary "// &
2362 "to use for large systems to prevent numerical instabilities.", &
2363 usage=
"ENERGY_WINDOW 5.0", &
2369 END SUBROUTINE create_soc_section
2377 SUBROUTINE create_dos_section(section)
2383 cpassert(.NOT.
ASSOCIATED(section))
2385 description=
"Parameters needed to calculate the density of states "// &
2386 "(DOS) and the projected density of states (PDOS).", &
2387 n_keywords=1, n_subsections=1, repeats=.false.)
2391 name=
"_SECTION_PARAMETERS_", &
2392 description=
"Controls the activation of the DOS calculation.", &
2393 default_l_val=.false., &
2394 lone_keyword_l_val=.true.)
2398 CALL keyword_create(keyword, __location__, name=
"ENERGY_WINDOW", &
2399 description=
"Print DOS and PDOS in the energy window "// &
2400 "$[\varepsilon_\mathrm{VBM}-E_\mathrm{window}/2, "// &
2401 "\varepsilon_\mathrm{CBM}+E_\mathrm{window}/2]$,"// &
2402 " where VBM is the valence "// &
2403 "band maximum (or highest occupied molecular orbital, HOMO, for "// &
2404 "molecules) and CBM the conduction band minimum (or lowest "// &
2405 "unoccupied molecular orbital, LUMO, for molecules).", &
2406 usage=
"ENERGY_WINDOW 5.0", &
2413 description=
"Resolution of the energy E when computing the $\rho(E)$.", &
2414 usage=
"ENERGY_STEP 0.01", &
2421 description=α
"Broadening in Gaussians used in the DOS; "// &
2422 "$\rho(E) = \sum_n \exp(((E-\varepsilon_n)/\alpha)^2)/("// &
2423 " \sqrt{2\pi} \alpha)$.", &
2424 usage=
"BROADENING 0.01", &
2431 keyword, __location__, name=
"KPOINTS", &
2432 description=
"Monkhorst-Pack k-point mesh of size N_x, N_y, N_z for calculating "// &
2433 "the density of states (DOS). In GW, the KPOINT_DOS mesh is thus used as k-point "// &
2434 αα
"mesh for the self-energy. For non-periodic directions , choose N_ = 1. "// &
2435 "Automatic choice of the k-point mesh for negative "// &
2436 α
"values, i.e. KPOINTS_DOS -1 -1 -1 (automatic choice: N_ = 1 in non-periodic "// &
2437 "direction, 8 k-points in periodic direction). If you like to compute a "// &
2438 "band structure along a k-path, you can specify the k-path in "// &
2440 usage=
"KPOINTS N_x N_y N_z", &
2441 n_var=3, type_of_var=
integer_t, default_i_vals=(/-1, -1, -1/))
2445 NULLIFY (subsection)
2446 CALL create_ldos_section(subsection)
2450 END SUBROUTINE create_dos_section
2456 SUBROUTINE create_ldos_section(section)
2461 cpassert(.NOT.
ASSOCIATED(section))
2463 description=
"Parameters needed to calculate the local density "// &
2464 "of states (LDOS). "// &
2465 "The LDOS is computed as $\rho(\mathbf{r},E) = "// &
2466 "\sum\limits_{n,\mathbf{k}}"// &
2467 " |\psi_{n\mathbf{k}}(r)|^2\, w_\mathbf{k}\, g(E-\varepsilon_{n\mathbf{k}})$ "// &
2468 "using the Gaussian weight function "// &
2469 "$g(x) = \exp(x^2/\alpha^2)/(\sqrt{2\pi}\alpha)$, $\alpha$ is the broadening "// &
2470 "from the &DOS section, and the k-point weight "// &
2471 "$w_\mathbf{k}$. The k-mesh is taken from the &DOS section.", &
2472 n_keywords=2, repeats=.false.)
2476 name=
"_SECTION_PARAMETERS_", &
2477 description=
"Activates the local VBM CBM gap calculation.", &
2478 default_l_val=.false., &
2479 lone_keyword_l_val=.true.)
2484 description=
"Defines whether the LDOS is integrated along a "// &
2485 "coordinate. As an example, for INTEGRATION Z, the LDOS "// &
2486 "$\rho(x,y,E) = \int dz\, \rho(x,y,z,E)$ is computed.", &
2487 usage=
"INTEGRATION Z", &
2488 enum_c_vals=
s2a(
"X",
"Y",
"Z",
"NONE"), &
2490 enum_desc=
s2a(
"Integrate over x coordinate (not yet implemented).", &
2491 "Integrate over y coordinate (not yet implemented).", &
2492 "Integrate over z coordinate.", &
2493 "No integration, print cube file as function "// &
2494 "of x,y,z (not yet implemented)."), &
2500 keyword, __location__, name=
"BIN_MESH", &
2501 description=
"Mesh of size n x m for binning the space coordinates x and y of "// &
2502 "the LDOS $\rho(x,y,E)$. If -1, no binning is performed and the "// &
2503 "fine x, y resolution of the electron density from SCF is used.", &
2504 usage=
"BIN_MESH n m", &
2505 n_var=2, type_of_var=
integer_t, default_i_vals=(/10, 10/))
2509 END SUBROUTINE create_ldos_section
2517 SUBROUTINE create_tipscan_section(section)
2522 cpassert(.NOT.
ASSOCIATED(section))
2524 description=
"Parameters needed to set up a Tip Scan. "// &
2525 "Needs external definition of tip induced field.", &
2526 n_keywords=1, n_subsections=1, repeats=.false.)
2531 name=
"_SECTION_PARAMETERS_", &
2532 description=
"Controls the activation of the Tip Scan procedure", &
2533 default_l_val=.false., &
2534 lone_keyword_l_val=.true.)
2538 CALL keyword_create(keyword, __location__, name=
"SCAN_DIRECTION", &
2539 description=
"Defines scan direction and scan type(line, plane).", &
2540 usage=
"SCAN_DIRECTION XY", &
2541 enum_c_vals=
s2a(
"X",
"Y",
"Z",
"XY",
"XZ",
"YZ",
"XYZ"), &
2547 CALL keyword_create(keyword, __location__, name=
"REFERENCE_POINT", &
2548 description=
"The reference point to define the absolute position of the scan. ", &
2549 usage=
"REFERENCE_POINT 0.0 0.0 1.0", &
2550 n_var=3, default_r_vals=(/0.0_dp, 0.0_dp, 0.0_dp/), type_of_var=
real_t, &
2551 unit_str=
"angstrom")
2556 description=
"Number of points calculated for each scan direction.", &
2557 usage=
"SCAN_POINTS 20 20", &
2563 description=
"Step size for each scan direction.", &
2564 usage=
"SCAN_STEP 0.01 0.01", &
2565 n_var=-1, type_of_var=
real_t, unit_str=
"angstrom")
2569 CALL keyword_create(keyword, __location__, name=
"TIP_FILENAME", &
2570 description=
"Filename of tip potential defined in cube file format.", &
2571 usage=
"TIP_FILENAME <filename>", &
2576 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 vazdacruz2021
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.