84 USE nlo,
ONLY: create_nonlinear_optics_section
87#include "./base/base_uses.f90"
92 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
93 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'input_cp2k_properties_dft'
110 cpassert(.NOT.
ASSOCIATED(section))
112 description=
"This section is used to set up the PROPERTIES calculation.", &
113 n_keywords=0, n_subsections=7, repeats=.false.)
115 NULLIFY (subsection, keyword)
117 CALL create_linres_section(subsection, create_subsections=.true.)
121 CALL create_et_coupling_section(subsection)
134 description=
"This section is used to print the density derived atomic point charges. "// &
135 "The fit of the charges is controlled through the DENSITY_FITTING section", &
137 CALL keyword_create(keyword, __location__, name=
"TYPE_OF_DENSITY", &
138 description=
"Specifies the type of density used for the fitting", &
139 usage=
"TYPE_OF_DENSITY (FULL|SPIN)", &
140 enum_c_vals=
s2a(
"FULL",
"SPIN"), &
142 enum_desc=
s2a(
"Full density",
"Spin density"), &
149 CALL create_tddfpt2_section(subsection)
153 CALL create_rixs_section(subsection)
157 CALL create_nonlinear_optics_section(subsection)
161 CALL create_kubo_transport_section(subsection)
165 CALL create_spectral_localizer_section(subsection)
168 CALL create_quadratic_pseudospectrum_section(subsection)
172 CALL create_bandstructure_section(subsection)
180 CALL create_tipscan_section(subsection)
190 SUBROUTINE create_kubo_transport_section(section)
194 cpassert(.NOT.
ASSOCIATED(section))
198 CALL section_create(section, __location__, name=
"KUBO_TRANSPORT", &
199 description=
"Finite-volume Kubo-Greenwood transport coefficients from the "// &
200 "converged Quickstep Hamiltonian, overlap matrix, and atomic geometry. "// &
201 "For one- and two-dimensional cells, transport is projected onto the "// &
202 "periodic subspace and normalized by the periodic length or area.", &
203 n_keywords=8, n_subsections=0, repeats=.false., &
206 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
207 description=
"Controls the activation of the Kubo transport calculation.", &
208 default_l_val=.false., &
209 lone_keyword_l_val=.true.)
214 description=
"Transport algorithm. DIAGONALIZATION evaluates the finite-volume "// &
215 "Kubo-Greenwood expression from the explicit spectrum. TD and CHEBYSHEV are "// &
216 "reserved for future diagonalization-free implementations.", &
217 usage=
"METHOD DIAGONALIZATION", &
218 n_var=1, type_of_var=
char_t, default_c_val=
"DIAGONALIZATION")
223 description=
"ATOM_EMBEDDING retains the finite-volume atom-coordinate model. "// &
224 "PROJECTED_AO uses analytic AO positions and the metric-aware commutator "// &
225 "H*S^-1*X-X*S^-1*H, with complex spinors when SOC is enabled. "// &
226 "PROJECTED_AO requires PERIODIC NONE and GPW/GAPW. This is the current of the "// &
227 "projected AO Hamiltonian. BLOCH evaluates analytic Hamiltonian/overlap k derivatives "// &
228 "and the AO connection on a full MP_GRID, with optional SOC and intraband terms. "// &
229 "BLOCH requires a periodic GPW/GAPW calculation.", &
230 enum_c_vals=
s2a(
"ATOM_EMBEDDING",
"PROJECTED_AO",
"BLOCH"), enum_i_vals=[0, 1, 2], default_i_val=0)
234 description=
"Add GTH-SOC in the complete AO spinor space after a restricted SCF. "// &
235 "Requires CURRENT_OPERATOR PROJECTED_AO or BLOCH and SOC pseudopotential parameters. "// &
236 "Does not perform self-consistent noncollinear DFT. A time-reversal-symmetric "// &
237 "Hamiltonian has zero net charge Hall response.", default_l_val=.false.)
240 CALL keyword_create(keyword, __location__, name=
"HALL_RESPONSE", &
241 description=
"Include the antisymmetric DC charge response in the conductivity tensor "// &
242 "and print its three independent components separately. Requires PROJECTED_AO or BLOCH. "// &
243 "Uses the same positive scalar DISSIPATION; does not add magnetic order, an applied "// &
244 "magnetic field, spin Hall currents, or microscopic scattering mechanisms.", default_l_val=.false.)
248 description=
"Safety limit on scalar AO dimension for PROJECTED_AO or BLOCH. "// &
249 "Dense spinor matrices have dimension 2*NAO when SOC is enabled.", default_i_val=512)
254 description=
"Full Gamma-centered property mesh for CURRENT_OPERATOR BLOCH. "// &
255 "Independent of SCF sampling and symmetry reduction, at the frozen SCF potential. "// &
256 "Nonperiodic directions must be one.", &
257 type_of_var=
integer_t, n_var=3, default_i_vals=[1, 1, 1])
260 CALL keyword_create(keyword, __location__, name=
"MAX_MEMORY_MB", &
261 description=
"Safety bound in MiB on replicated BLOCH array storage per MPI rank. "// &
262 "Excludes CP2K/DBCSR environment and library workspace.", default_i_val=1024)
267 description=
"Reconstruct equivalent BLOCH property eigenframes from independent irreducible points. "// &
268 "Includes atom/AO, cell-image and physical SOC spin transformations. "// &
269 "Every reconstructed frame is checked against the target H/S and current; "// &
270 "an inconsistent frozen SCF potential aborts instead of silently changing the response.", &
271 default_l_val=.false.)
275 description=
"Backend for the independent BLOCH property symmetry mesh.", &
276 enum_c_vals=
s2a(
"K290",
"SPGLIB"), &
282 description=
"Geometric tolerance for BLOCH property symmetry detection.", default_r_val=1.e-6_dp)
285 CALL keyword_create(keyword, __location__, name=
"EPS_SYMMETRY_OPERATORS", &
286 description=
"Tolerance for target metric, energy-scaled Hamiltonian, and current covariance checks. "// &
287 "The current error is scaled by max(1,|J|) in atomic units.", default_r_val=1.e-8_dp)
292 description=
"Electronic temperature used in the Fermi operator.", &
293 usage=
"TEMPERATURE 1.0", &
295 n_var=1, type_of_var=
real_t, unit_str=
"K")
300 description=
"Dissipation/broadening parameter in the finite-temperature "// &
302 usage=
"DISSIPATION 300.0", &
304 n_var=1, type_of_var=
real_t, unit_str=
"K")
309 description=
"Absolute chemical-potential range. The default 0 0 uses the "// &
310 "full eigenvalue range of the finite-volume Hamiltonian.", &
311 usage=
"ENERGY_RANGE -0.5 0.5", &
312 default_r_vals=[0.0_dp, 0.0_dp], n_var=2, type_of_var=
real_t, &
318 description=
"Optional fixed neutral chemical potential. If omitted, the "// &
319 "neutral point is found from the eigenvalue spectrum and total electron count.", &
320 usage=
"NEUTRAL_MU 0.245467619658419", &
321 n_var=1, type_of_var=
real_t, unit_str=
"hartree")
326 description=
"Number of chemical-potential grid points.", &
328 default_i_val=200, n_var=1, type_of_var=
integer_t)
333 description=
"Number of grid points used to locate the neutral chemical potential.", &
334 usage=
"NEUTRAL_GRID 10000", &
335 default_i_val=10000, n_var=1, type_of_var=
integer_t)
339 END SUBROUTINE create_kubo_transport_section
346 SUBROUTINE create_rixs_section(section)
351 cpassert(.NOT.
ASSOCIATED(section))
353 NULLIFY (keyword, subsection, print_key)
356 description=
"Resonant Inelastic Xray Scattering using XAS_TDP and TDDFPT.", &
357 n_keywords=1, n_subsections=3, repeats=.false., &
361 name=
"_SECTION_PARAMETERS_", &
362 description=
"Controls the activation of the RIXS procedure", &
363 default_l_val=.false., &
364 lone_keyword_l_val=.true.)
369 description=
"Number of core excited states to be used in the RIXS "// &
370 "calculation. Restricting this number reduces computational cost. "// &
371 "-1 means all available core states will be used.", &
372 n_var=1, type_of_var=
integer_t, default_i_val=-1)
376 CALL keyword_create(keyword, __location__, name=
"VALENCE_STATES", &
377 description=
"Number of valence excited states to be used in the RIXS "// &
378 "calculation. Restricting this number reduces computational cost, but "// &
379 "removes spectral features corresponding to higher excitations. Should be "// &
380 "used with care. -1 means all available valence states will be used.", &
381 n_var=1, type_of_var=
integer_t, default_i_val=-1)
385 CALL create_tddfpt2_section(subsection)
393 CALL section_create(subsection, __location__,
"PRINT",
"Controls the printing of information "// &
394 "during RIXS calculations", repeats=.false.)
397 description=
"Controles the printing of the RIXS spectrum "// &
400 common_iter_levels=3)
407 END SUBROUTINE create_rixs_section
418 SUBROUTINE create_linres_section(section, create_subsections, default_set_tdlr)
420 LOGICAL,
INTENT(in) :: create_subsections
421 LOGICAL,
INTENT(IN),
OPTIONAL :: default_set_tdlr
423 INTEGER :: def_max_iter, def_precond
424 REAL(kind=
dp) :: def_egap, def_eps, def_eps_filter
428 CHARACTER(len=256) :: desc
430 NULLIFY (keyword, print_key)
432 IF (
PRESENT(default_set_tdlr))
THEN
435 def_eps_filter = 1.0e-15_dp
438 desc =
"Controls the parameters of the LINRES force calculations for excited states."
442 def_eps_filter = 0.0_dp
445 desc =
"The linear response is used to calculate one of the following properties: nmr, epr, raman, ..."
448 cpassert(.NOT.
ASSOCIATED(section))
450 description=desc, n_keywords=5, n_subsections=2, repeats=.false., &
454 description=
"target accuracy for the convergence of the conjugate gradient.", &
455 usage=
"EPS 1.e-6", default_r_val=def_eps)
460 description=
"Filter threshold for response density matrix.", &
461 usage=
"EPS_FILTER 1.e-8", default_r_val=def_eps_filter)
466 description=
"Maximum number of conjugate gradient iteration to be performed for one optimization.", &
467 usage=
"MAX_ITER 200", default_i_val=def_max_iter)
471 CALL keyword_create(keyword, __location__, name=
"RESTART_EVERY", &
472 description=
"Restart the conjugate gradient after the specified number of iterations.", &
473 usage=
"RESTART_EVERY 200", default_i_val=50)
478 keyword, __location__, name=
"PRECONDITIONER", &
479 description=
"Type of preconditioner to be used with all minimization schemes. "// &
480 "They differ in effectiveness, cost of construction, cost of application. "// &
481 "Properly preconditioned minimization can be orders of magnitude faster than doing nothing.", &
482 usage=
"PRECONDITIONER FULL_ALL", &
483 default_i_val=def_precond, &
484 enum_c_vals=
s2a(
"FULL_ALL",
"FULL_SINGLE_INVERSE",
"FULL_SINGLE",
"FULL_KINETIC",
"FULL_S_INVERSE", &
486 enum_desc=
s2a(
"Most effective state selective preconditioner based on diagonalization, "// &
487 "requires the ENERGY_GAP parameter to be an underestimate of the HOMO-LUMO gap. "// &
488 "This preconditioner is recommended for almost all systems, except very large systems where "// &
489 "make_preconditioner would dominate the total computational cost.", &
490 "Based on H-eS cholesky inversion, similar to FULL_SINGLE in preconditioning efficiency "// &
491 "but cheaper to construct, "// &
492 "might be somewhat less robust. Recommended for large systems.", &
493 "Based on H-eS diagonalisation, not as good as FULL_ALL, but somewhat cheaper to apply. ", &
494 "Cholesky inversion of S and T, fast construction, robust, and relatively good, "// &
495 "use for very large systems.", &
496 "Cholesky inversion of S, not as good as FULL_KINETIC, yet equally expensive.", &
497 "skip preconditioning"), &
504 description=
"Energy gap estimate [a.u.] for preconditioning", &
505 usage=
"ENERGY_GAP 0.1", &
506 default_r_val=def_egap)
511 description=
"Perform a linear response calculation every N-th step for MD run", &
512 usage=
"EVERY_N_STEP 50", default_i_val=1)
517 description=
"Restart the response calculation if the restart file exists", &
519 default_l_val=.false., lone_keyword_l_val=.true.)
523 CALL keyword_create(keyword, __location__, name=
"WFN_RESTART_FILE_NAME", &
524 variants=[
"RESTART_FILE_NAME"], &
525 description=
"Root of the file names where to read the response functions from "// &
526 "which to restart the calculation of the linear response", &
527 usage=
"WFN_RESTART_FILE_NAME <FILENAME>", &
532 IF (create_subsections)
THEN
539 CALL create_current_section(subsection)
543 CALL create_nmr_section(subsection)
547 CALL create_spin_spin_section(subsection)
551 CALL create_epr_section(subsection)
555 CALL create_polarizability_section(subsection)
559 CALL create_dcdr_section(subsection)
563 CALL create_vcd_section(subsection)
568 description=
"printing of information during the linear response calculation", &
572 print_key, __location__,
"program_run_info", &
573 description=
"Controls the printing of basic iteration information during the LINRES calculation", &
579 description=
"Controls the dumping of restart file of the response wavefunction. "// &
580 "For each set of response functions, i.e. for each perturbation, "// &
581 "one different restart file is dumped. These restart files should be "// &
582 "employed only to restart the same type of LINRES calculation, "// &
583 "i.e. with the same perturbation.", &
594 END SUBROUTINE create_linres_section
602 SUBROUTINE create_dcdr_section(section)
611 NULLIFY (keyword, print_key, subsection)
613 cpassert(.NOT.
ASSOCIATED(section))
615 IF (.NOT. failure)
THEN
617 description=
"Compute analytical gradients the dipole moments.", &
618 n_keywords=50, n_subsections=1, repeats=.false., citations=[
ditler2021])
620 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
621 description=
"Controls the activation of the APT calculation. "// &
622 "Analytical derivatives are not available for functionals that depend on "// &
623 "the kinetic energy density; use APT_FD for these functionals.", &
625 default_l_val=.false., &
626 lone_keyword_l_val=.true.)
630 CALL keyword_create(keyword, __location__, name=
"LIST_OF_ATOMS", &
631 description=
"Specifies a list of atoms.", &
632 usage=
"LIST_OF_ATOMS {integer} {integer} .. {integer}", repeats=.true., &
637 CALL keyword_create(keyword, __location__, name=
"DISTRIBUTED_ORIGIN", &
638 variants=[
"DO_GAUGE"], &
639 description=
"Use the distributed origin (DO) gauge?", &
640 usage=
"DISTRIBUTED_ORIGIN T", &
641 default_l_val=.false., lone_keyword_l_val=.true.)
645 CALL keyword_create(keyword, __location__, name=
"ORBITAL_CENTER", &
646 description=
"The orbital center.", &
647 usage=
"ORBITAL_CENTER WANNIER", &
649 enum_c_vals=
s2a(
"WANNIER",
"COMMON",
"ATOM",
"BOX"), &
650 enum_desc=
s2a(
"Use the Wannier centers.", &
651 "Use a common center (works only for an isolate molecule).", &
652 "Use the atoms as center.", &
660 description=
"Gauge origin of the velocity gauge factor.", &
661 enum_c_vals=
s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
662 enum_desc=
s2a(
"Use Center of Mass", &
663 "Use Center of Atomic Charges", &
664 "Use User-defined Point", &
665 "Use Origin of Coordinate System"), &
674 CALL keyword_create(keyword, __location__, name=
"REFERENCE_POINT", &
675 description=
"User-defined reference point of the velocity gauge factor.", &
676 usage=
"REFERENCE_POINT x y z", &
677 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
681 CALL keyword_create(keyword, __location__, name=
"Z_MATRIX_METHOD", &
682 description=
"Use Z_matrix method to solve the response equation", &
683 usage=
"Z_MATRIX_METHOD T", &
684 default_l_val=.false., lone_keyword_l_val=.true.)
689 description=
"Use numerical differentiation to compute the APT, "// &
690 "switches off the calculation of dcdr analytical derivatives. "// &
691 "Requires RUN_TYPE = ENERGY_FORCE or MD.", &
693 default_l_val=.false., lone_keyword_l_val=.true.)
698 description=
"Electric field strength (atomic units) to use for finite differences", &
702 default_r_val=0.0003_dp, &
703 usage=
"APT_FD_DE 1.0E-4")
707 CALL keyword_create(keyword, __location__, name=
"APT_FD_METHOD", &
708 description=
"Numerical differentiation method", &
709 usage=
"APT_FD_METHOD FD", &
712 enum_c_vals=
s2a(
"2PNT"), &
715 enum_desc=
s2a(
"Symmetric two-point differences."), &
723 description=
"print results of the magnetic dipole moment calculation", &
727 description=
"Controls the printing of the electric dipole gradient", &
742 END SUBROUTINE create_dcdr_section
750 SUBROUTINE create_vcd_section(section)
757 NULLIFY (keyword, print_key, subsection)
759 cpassert(.NOT.
ASSOCIATED(section))
762 description=
"Carry out a VCD calculation.", &
763 n_keywords=50, n_subsections=1, repeats=.false., &
766 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
767 description=
"controls the activation of the APT/AAT calculation", &
769 default_l_val=.false., &
770 lone_keyword_l_val=.true.)
774 CALL keyword_create(keyword, __location__, name=
"LIST_OF_ATOMS", &
775 description=
"Specifies a list of atoms.", &
776 usage=
"LIST_OF_ATOMS {integer} {integer} .. {integer}", repeats=.true., &
781 CALL keyword_create(keyword, __location__, name=
"DISTRIBUTED_ORIGIN", &
782 variants=[
"DO_GAUGE"], &
783 description=
"Use the distributed origin (DO) gauge?", &
784 usage=
"DISTRIBUTED_ORIGIN T", &
785 default_l_val=.false., lone_keyword_l_val=.true.)
789 CALL keyword_create(keyword, __location__, name=
"ORIGIN_DEPENDENT_MFP", &
790 description=
"Use the origin dependent MFP operator.", &
791 usage=
"ORIGIN_DEPENDENT_MFP T", &
792 default_l_val=.false., lone_keyword_l_val=.true.)
796 CALL keyword_create(keyword, __location__, name=
"ORBITAL_CENTER", &
797 description=
"The orbital center.", &
798 usage=
"ORBITAL_CENTER WANNIER", &
800 enum_c_vals=
s2a(
"WANNIER",
"COMMON",
"ATOM",
"BOX"), &
801 enum_desc=
s2a(
"Use the Wannier centers.", &
802 "Use a common center (works only for an isolate molecule).", &
803 "Use the atoms as center.", &
811 CALL keyword_create(keyword, __location__, name=
"MAGNETIC_ORIGIN", &
812 description=
"Gauge origin of the magnetic dipole operator.", &
813 enum_c_vals=
s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
814 enum_desc=
s2a(
"Use Center of Mass", &
815 "Use Center of Atomic Charges", &
816 "Use User-defined Point", &
817 "Use Origin of Coordinate System"), &
826 CALL keyword_create(keyword, __location__, name=
"MAGNETIC_ORIGIN_REFERENCE", &
827 description=
"User-defined reference point of the magnetic dipole operator.", &
828 usage=
"MAGNETIC_ORIGIN_REFERENCE x y z", &
829 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
834 CALL keyword_create(keyword, __location__, name=
"SPATIAL_ORIGIN", &
835 description=
"Gauge origin of the velocity gauge factor/spatial origin.", &
836 enum_c_vals=
s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
837 enum_desc=
s2a(
"Use Center of Mass", &
838 "Use Center of Atomic Charges", &
839 "Use User-defined Point", &
840 "Use Origin of Coordinate System"), &
849 CALL keyword_create(keyword, __location__, name=
"SPATIAL_ORIGIN_REFERENCE", &
850 description=
"User-defined reference point of the velocity gauge factor/spatial origin.", &
851 usage=
"SPATIAL_ORIGIN_REFERENCE x y z", &
852 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
858 description=
"print results of the magnetic dipole moment calculation", &
862 description=
"Controls the printing of the APTs and AATs", &
875 END SUBROUTINE create_vcd_section
884 SUBROUTINE create_current_section(section)
890 NULLIFY (keyword, print_key, subsection)
892 cpassert(.NOT.
ASSOCIATED(section))
894 description=
"The induced current density is calculated by DFPT.", &
895 n_keywords=4, n_subsections=1, repeats=.false., &
898 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
899 description=
"controls the activation of the induced current calculation", &
900 usage=
"&CURRENT T", &
901 default_l_val=.false., &
902 lone_keyword_l_val=.true.)
907 description=
"The gauge used to compute the induced current within GAPW.", &
910 enum_c_vals=
s2a(
"R",
"R_AND_STEP_FUNCTION",
"ATOM"), &
911 enum_desc=
s2a(
"Position gauge (doesnt work well).", &
912 "Position and step function for the soft and the local parts, respectively.", &
918 CALL keyword_create(keyword, __location__, name=
"GAUGE_ATOM_RADIUS", &
919 description=
"Build the gauge=atom using only the atoms within this radius.", &
920 usage=
"GAUGE_ATOM_RADIUS 10.0", &
927 CALL keyword_create(keyword, __location__, name=
"USE_OLD_GAUGE_ATOM", &
928 description=
"Use the old way to compute the gauge.", &
929 usage=
"USE_OLD_GAUGE_ATOM T", &
930 default_l_val=.true., lone_keyword_l_val=.true.)
934 CALL keyword_create(keyword, __location__, name=
"ORBITAL_CENTER", &
935 description=
"The orbital center.", &
936 usage=
"ORBITAL_CENTER WANNIER", &
938 enum_c_vals=
s2a(
"WANNIER",
"COMMON",
"ATOM",
"BOX"), &
939 enum_desc=
s2a(
"Use the Wannier centers.", &
940 "Use a common center (works only for an isolate molecule).", &
941 "Use the atoms as center.", &
948 CALL keyword_create(keyword, __location__, name=
"COMMON_CENTER", &
949 description=
"The common center ", usage=
"COMMON_CENTER 0.0 1.0 0.0", &
950 n_var=3, default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp], type_of_var=
real_t, &
956 description=
"How many boxes along each directions ", usage=
"NBOX 6 6 5", &
957 n_var=3, default_i_vals=[4, 4, 4], type_of_var=
integer_t)
962 description=
"Calculate the succeptibility correction to the shift with PBC", &
964 default_l_val=.false., lone_keyword_l_val=.true.)
968 CALL keyword_create(keyword, __location__, name=
"FORCE_NO_FULL", &
969 description=
"Avoid the calculation of the state dependent perturbation term, "// &
970 "even if the orbital centers are set at Wannier centers or at Atom centers", &
971 usage=
"FORCE_NO_FULL T", &
972 default_l_val=.false., lone_keyword_l_val=.true.)
976 CALL keyword_create(keyword, __location__, name=
"SELECTED_STATES_ON_ATOM_LIST", &
977 description=
"Indexes of the atoms for selecting"// &
978 " the states to be used for the response calculations.", &
979 usage=
"SELECTED_STATES_ON_ATOM_LIST 1 2 10", &
980 n_var=-1, type_of_var=
integer_t, repeats=.true.)
984 CALL keyword_create(keyword, __location__, name=
"SELECTED_STATES_ATOM_RADIUS", &
985 description=
"Select all the states included in the given radius around each atoms "// &
986 "in SELECTED_STATES_ON_ATOM_LIST.", &
987 usage=
"SELECTED_STATES_ATOM_RADIUS 2.0", &
994 CALL keyword_create(keyword, __location__, name=
"RESTART_CURRENT", &
995 description=
"Restart the induced current density calculation"// &
996 " from a previous run (not working yet).", &
997 usage=
"RESTART_CURRENT", default_l_val=.false., &
998 lone_keyword_l_val=.true.)
1002 NULLIFY (subsection)
1004 description=
"print results of induced current density calculation", &
1008 description=
"Controls the printing of the induced current density (not working yet).", &
1011 description=
"The stride (X,Y,Z) used to write the cube file "// &
1012 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1013 " 1 number valid for all components (not working yet).", &
1014 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
1018 description=
"append the cube files when they already exist", &
1019 default_l_val=.false., lone_keyword_l_val=.true.)
1027 description=
"Controls the printing of the response functions (not working yet).", &
1030 description=
"The stride (X,Y,Z) used to write the cube file "// &
1031 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1032 " 1 number valid for all components (not working yet).", &
1033 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
1037 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
1038 variants=[
"CUBES_LU"], &
1039 description=
"The lower and upper index of the states to be printed as cube (not working yet).", &
1040 usage=
"CUBES_LU_BOUNDS integer integer", &
1041 n_var=2, default_i_vals=[0, -2], type_of_var=
integer_t)
1046 description=
"Indexes of the states to be printed as cube files "// &
1047 "This keyword can be repeated several times "// &
1048 "(useful if you have to specify many indexes) (not working yet).", &
1049 usage=
"CUBES_LIST 1 2", &
1050 n_var=-1, type_of_var=
integer_t, repeats=.true.)
1054 description=
"append the cube files when they already exist", &
1055 default_l_val=.false., lone_keyword_l_val=.true.)
1065 NULLIFY (subsection)
1070 END SUBROUTINE create_current_section
1080 SUBROUTINE create_nmr_section(section)
1086 NULLIFY (keyword, print_key, subsection)
1088 cpassert(.NOT.
ASSOCIATED(section))
1090 description=
"The chemical shift is calculated by DFPT.", &
1091 n_keywords=5, n_subsections=1, repeats=.false., &
1094 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
1095 description=
"controls the activation of the nmr calculation", &
1097 default_l_val=.false., &
1098 lone_keyword_l_val=.true.)
1102 CALL keyword_create(keyword, __location__, name=
"INTERPOLATE_SHIFT", &
1103 description=
"Calculate the soft part of the chemical shift by interpolation ", &
1104 usage=
"INTERPOLATE_SHIFT T", &
1105 default_l_val=.false., lone_keyword_l_val=.true.)
1110 description=
"Calculate the chemical shift in a set of points"// &
1111 " given from an external file", usage=
"NICS", &
1112 default_l_val=.false., lone_keyword_l_val=.true.)
1116 CALL keyword_create(keyword, __location__, name=
"NICS_FILE_NAME", &
1117 description=
"Name of the file with the NICS points coordinates", &
1118 usage=
"NICS_FILE_NAME nics_file", &
1119 default_lc_val=
"nics_file")
1124 description=
"Restart the NMR calculation from a previous run (NOT WORKING YET)", &
1125 usage=
"RESTART_NMR", default_l_val=.false., &
1126 lone_keyword_l_val=.true.)
1130 CALL keyword_create(keyword, __location__, name=
"SHIFT_GAPW_RADIUS", &
1131 description=
"While computing the local part of the shift (GAPW), "// &
1132 "the integration is restricted to nuclei that are within this radius.", &
1133 usage=
"SHIFT_GAPW_RADIUS 20.0", &
1136 unit_str=
"angstrom")
1140 NULLIFY (subsection)
1142 description=
"print results of nmr calculation", &
1146 description=
"Controls the printing of the response functions ", &
1149 description=
"The stride (X,Y,Z) used to write the cube file "// &
1150 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1151 " 1 number valid for all components.", &
1152 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
1156 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
1157 variants=[
"CUBES_LU"], &
1158 description=
"The lower and upper index of the states to be printed as cube", &
1159 usage=
"CUBES_LU_BOUNDS integer integer", &
1160 n_var=2, default_i_vals=[0, -2], type_of_var=
integer_t)
1165 description=
"Indexes of the states to be printed as cube files "// &
1166 "This keyword can be repeated several times "// &
1167 "(useful if you have to specify many indexes).", &
1168 usage=
"CUBES_LIST 1 2", &
1169 n_var=-1, type_of_var=
integer_t, repeats=.true.)
1173 description=
"append the cube files when they already exist", &
1174 default_l_val=.false., lone_keyword_l_val=.true.)
1182 description=
"Controls the printing of susceptibility", &
1188 description=
"Controls the printing of the chemical shift", &
1191 CALL keyword_create(keyword, __location__, name=
"ATOMS_LU_BOUNDS", &
1192 variants=[
"ATOMS_LU"], &
1193 description=
"The lower and upper atomic index for which the tensor is printed", &
1194 usage=
"ATOMS_LU_BOUNDS integer integer", &
1195 n_var=2, default_i_vals=[0, -2], type_of_var=
integer_t)
1200 description=
"list of atoms for which the shift is printed into a file ", &
1201 usage=
"ATOMS_LIST 1 2", n_var=-1, &
1212 NULLIFY (subsection)
1217 END SUBROUTINE create_nmr_section
1226 SUBROUTINE create_spin_spin_section(section)
1232 NULLIFY (keyword, print_key, subsection)
1234 cpassert(.NOT.
ASSOCIATED(section))
1236 description=
"Compute indirect spin-spin coupling constants.", &
1237 n_keywords=5, n_subsections=1, repeats=.false.)
1239 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
1240 description=
"controls the activation of the nmr calculation", &
1241 usage=
"&SPINSPIN T", &
1242 default_l_val=.false., &
1243 lone_keyword_l_val=.true.)
1247 CALL keyword_create(keyword, __location__, name=
"RESTART_SPINSPIN", &
1248 description=
"Restart the spin-spin calculation from a previous run (NOT WORKING YET)", &
1249 usage=
"RESTART_SPINSPIN", default_l_val=.false., &
1250 lone_keyword_l_val=.true.)
1254 CALL keyword_create(keyword, __location__, name=
"ISSC_ON_ATOM_LIST", &
1255 description=
"Atoms for which the issc is computed.", &
1256 usage=
"ISSC_ON_ATOM_LIST 1 2 10", &
1257 n_var=-1, type_of_var=
integer_t, repeats=.true.)
1262 description=
"Compute the Fermi contact contribution", &
1264 default_l_val=.true., lone_keyword_l_val=.true.)
1269 description=
"Compute the spin-dipolar contribution", &
1271 default_l_val=.true., lone_keyword_l_val=.true.)
1276 description=
"Compute the paramagnetic spin-orbit contribution", &
1278 default_l_val=.true., lone_keyword_l_val=.true.)
1283 description=
"Compute the diamagnetic spin-orbit contribution (NOT YET IMPLEMENTED)", &
1285 default_l_val=.true., lone_keyword_l_val=.true.)
1289 NULLIFY (subsection)
1291 description=
"print results of the indirect spin-spin calculation", &
1295 description=
"Controls the printing of the indirect spin-spin matrix", &
1299 description=
"list of atoms for which the indirect spin-spin is printed into a file ", &
1300 usage=
"ATOMS_LIST 1 2", n_var=-1, &
1311 NULLIFY (subsection)
1316 END SUBROUTINE create_spin_spin_section
1326 SUBROUTINE create_epr_section(section)
1330 TYPE(
section_type),
POINTER :: print_key, subsection, subsubsection
1332 NULLIFY (keyword, print_key, subsection, subsubsection)
1334 cpassert(.NOT.
ASSOCIATED(section))
1336 description=
"The g tensor is calculated by DFPT ", &
1337 n_keywords=5, n_subsections=1, repeats=.false., &
1340 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
1341 description=
"controls the activation of the epr calculation", &
1343 default_l_val=.false., &
1344 lone_keyword_l_val=.true.)
1349 description=
"Restart the EPR calculation from a previous run (NOT WORKING)", &
1350 usage=
"RESTART_EPR", default_l_val=.false., &
1351 lone_keyword_l_val=.true.)
1355 NULLIFY (subsection)
1357 description=
"print results of epr calculation", &
1361 description=
"Controls the printing of the components of nabla v_ks ", &
1364 description=
"The stride (X,Y,Z) used to write the cube file "// &
1365 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1366 " 1 number valid for all components.", &
1367 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
1371 description=
"append the cube files when they already exist", &
1372 default_l_val=.false., lone_keyword_l_val=.true.)
1380 description=
"Controls the printing of the g tensor", &
1386 CALL keyword_create(keyword, __location__, name=
"GAPW_MAX_ALPHA", &
1387 description=
"Maximum alpha of GTH potentials allowed on the soft grids ", &
1388 usage=
"GAPW_MAX_ALPHA real", default_r_val=5.0_dp)
1392 CALL keyword_create(keyword, __location__, name=
"SOO_RHO_HARD", &
1393 description=
"Whether or not to include the atomic parts of the density "// &
1394 "in the SOO part of the g tensor", usage=
"SOO_RHO_HARD", &
1395 default_l_val=.false., lone_keyword_l_val=.true.)
1403 description=
"Controls the printing of the response functions ", &
1406 description=
"The stride (X,Y,Z) used to write the cube file "// &
1407 "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1408 " 1 number valid for all components.", &
1409 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
1413 CALL keyword_create(keyword, __location__, name=
"CUBES_LU_BOUNDS", &
1414 variants=[
"CUBES_LU"], &
1415 description=
"The lower and upper index of the states to be printed as cube", &
1416 usage=
"CUBES_LU_BOUNDS integer integer", &
1417 n_var=2, default_i_vals=[0, -2], type_of_var=
integer_t)
1422 description=
"Indexes of the states to be printed as cube files "// &
1423 "This keyword can be repeated several times "// &
1424 "(useful if you have to specify many indexes).", &
1425 usage=
"CUBES_LIST 1 2", &
1426 n_var=-1, type_of_var=
integer_t, repeats=.true.)
1430 description=
"append the cube files when they already exist", &
1431 default_l_val=.false., lone_keyword_l_val=.true.)
1441 NULLIFY (subsection)
1446 END SUBROUTINE create_epr_section
1455 SUBROUTINE create_polarizability_section(section)
1462 NULLIFY (keyword, print_key, subsection)
1464 cpassert(.NOT.
ASSOCIATED(section))
1466 description=
"Compute polarizabilities.", &
1467 n_keywords=5, n_subsections=1, repeats=.false., &
1470 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
1471 description=
"controls the activation of the polarizability calculation", &
1473 default_l_val=.false., &
1474 lone_keyword_l_val=.true.)
1479 description=
"Compute the electric-dipole--electric-dipole polarizability", &
1480 usage=
"DO_RAMAN F", &
1481 default_l_val=.true., lone_keyword_l_val=.true.)
1485 CALL keyword_create(keyword, __location__, name=
"PERIODIC_DIPOLE_OPERATOR", &
1486 description=
"Type of dipole operator: Berry phase(T) or Local(F)", &
1487 usage=
"PERIODIC_DIPOLE_OPERATOR T", &
1488 default_l_val=.true., lone_keyword_l_val=.true.)
1492 NULLIFY (subsection)
1494 description=
"print results of the polarizability calculation", &
1498 description=
"Controls the printing of the polarizabilities", &
1506 NULLIFY (subsection)
1511 END SUBROUTINE create_polarizability_section
1518 SUBROUTINE create_et_coupling_section(section)
1525 cpassert(.NOT.
ASSOCIATED(section))
1527 description=
"specifies the two constraints/restraints for extracting ET coupling elements", &
1530 NULLIFY (subsection)
1535 NULLIFY (subsection)
1540 NULLIFY (subsection)
1541 CALL create_projection(subsection,
"PROJECTION")
1545 CALL keyword_create(keyword, __location__, name=
"TYPE_OF_CONSTRAINT", &
1546 description=
"Specifies the type of constraint", &
1547 usage=
"TYPE_OF_CONSTRAINT DDAPC", &
1548 enum_c_vals=
s2a(
"NONE",
"DDAPC"), &
1550 enum_desc=
s2a(
"NONE",
"DDAPC Constraint"), &
1557 description=
"Controls the printing basic info about the method", &
1562 END SUBROUTINE create_et_coupling_section
1571 SUBROUTINE create_projection(section, section_name)
1575 CHARACTER(len=*),
INTENT(in) :: section_name
1578 TYPE(
section_type),
POINTER :: print_key, section_block, section_print
1583 cpassert(.NOT.
ASSOCIATED(section))
1588 NULLIFY (section_block)
1589 NULLIFY (section_print)
1592 CALL section_create(section, __location__, name=trim(adjustl(section_name)), &
1593 description=
"Projection-operator approach fo ET coupling calculation", &
1594 n_keywords=0, n_subsections=2, repeats=.false.)
1598 description=
"Controls printing of data and informations to log file", &
1605 description=
"Part of the system (donor, acceptor, bridge,...)", &
1606 n_keywords=2, n_subsections=1, repeats=.true.)
1611 description=
"Array of atom IDs in the system part", &
1612 usage=
"ATOMS {integer} {integer} .. {integer}", &
1613 n_var=-1, type_of_var=
integer_t, repeats=.false.)
1619 description=
"Number of electrons expected in the system part", &
1620 usage=
"NELECTRON {integer}", default_i_val=0)
1626 description=
"Possible printing options in ET system part", &
1627 n_keywords=0, n_subsections=0, repeats=.false.)
1631 CALL keyword_create(keyword, __location__, name=
'MO_COEFF_ATOM', &
1632 description=
"Print out MO coeffiecients on given atom", &
1633 usage=
"MO_COEFF_ATOM {integer} {integer} .. {integer}", &
1634 type_of_var=
integer_t, n_var=-1, repeats=.true.)
1639 CALL keyword_create(keyword, __location__, name=
'MO_COEFF_ATOM_STATE', &
1640 description=
"Print out MO coeffiecients of specific state", &
1641 usage=
"MO_COEFF_ATOM_STATE {integer} {integer} .. {integer}", &
1642 type_of_var=
integer_t, n_var=-1, repeats=.true.)
1648 description=
"Controls saving of MO cube files", &
1653 description=
"The stride (X,Y,Z) used to write the cube file", &
1654 usage=
"STRIDE {integer} {integer} {integer}", n_var=-1, &
1655 default_i_vals=[2, 2, 2], type_of_var=
integer_t)
1661 description=
"Indices of molecular orbitals to save", &
1662 usage=
"MO_LIST {integer} {integer} .. {integer}", &
1663 type_of_var=
integer_t, n_var=-1, repeats=.true.)
1669 description=
"Number of unoccupied molecular orbitals to save", &
1670 usage=
"NLUMO {integer}", default_i_val=1)
1676 description=
"Number of occupied molecular orbitals to save", &
1677 usage=
"NHOMO {integer}", default_i_val=1)
1692 description=
"Possible printing options in ET", &
1693 n_keywords=0, n_subsections=0, repeats=.false.)
1698 description=
"Controls printing couplings onto file", &
1702 description=
"append the files when they already exist", &
1703 default_l_val=.false., lone_keyword_l_val=.true.)
1712 END SUBROUTINE create_projection
1721 SUBROUTINE create_tddfpt2_section(section)
1727 cpassert(.NOT.
ASSOCIATED(section))
1729 description=
"Controls time-dependent density functional perturbation theory "// &
1730 "(TDDFPT) calculations for electronic excitations and related properties.", &
1731 n_keywords=14, n_subsections=4, repeats=.false., &
1734 NULLIFY (keyword, print_key, subsection)
1737 name=
"_SECTION_PARAMETERS_", &
1738 description=
"Activates the TDDFPT procedure.", &
1739 default_l_val=.false., &
1740 lone_keyword_l_val=.true.)
1746 description=
"Number of excited states to converge.", &
1753 description=
"Maximal number of iterations to be performed.", &
1760 description=
"Maximal number of Krylov space vectors. "// &
1761 "Davidson iterations will be restarted upon reaching this limit.", &
1768 description=
"Number of unoccupied orbitals to consider. "// &
1769 "Default is to use all unoccupied orbitals (-1).", &
1776 description=
"Number of MPI processes to be used per excited state. "// &
1777 "Default is to use all MPI processes (0).", &
1785 description=
"Options to compute the kernel", &
1786 usage=
"KERNEL FULL", &
1787 enum_c_vals=
s2a(
"FULL",
"sTDA",
"NONE"), &
1795 description=
"Selects the type of spin-flip TDDFPT kernel", &
1796 usage=
"SPINFLIP NONCOLLINEAR", &
1797 enum_c_vals=
s2a(
"NONE",
"COLLINEAR",
"NONCOLLINEAR"), &
1799 enum_desc=
s2a(
"Only molecular orbital energy differences are considered", &
1800 "MO energy diferences and Fock exchange contributions are "// &
1802 "MO energy differences, Fock exchange and "// &
1803 "Noncollinear local exchange-correlation "// &
1804 "kernel are considered"), &
1810 description=
"Orbital energy correction potential.", &
1811 enum_c_vals=
s2a(
"NONE",
"LB94",
"GLLB",
"SAOP",
"SHIFT"), &
1813 enum_desc=
s2a(
"No orbital correction scheme is used", &
1814 "van Leeuwen and Baerends. PRA, 49:2421, 1994", &
1815 "Gritsenko, van Leeuwen, van Lenthe, Baerends. PRA, 51:1944, 1995", &
1816 "Gritsenko, Schipper, Baerends. Chem. Phys. Lett., 302:199, 1999", &
1817 "Constant shift of virtual and/or open-shell orbitals"), &
1824 variants=
s2a(
"VIRTUAL_SHIFT"), &
1825 description=
"Constant shift of virtual state eigenvalues.", &
1826 usage=
"EV_SHIFT 0.500", &
1827 n_var=1, type_of_var=
real_t, &
1829 default_r_val=0.0_dp)
1834 variants=
s2a(
"OPEN_SHELL_SHIFT"), &
1835 description=
"Constant shift of open shell eigenvalues.", &
1836 usage=
"EOS_SHIFT 0.200", &
1837 n_var=1, type_of_var=
real_t, &
1839 default_r_val=0.0_dp)
1845 description=
"Target accuracy for excited state energies.", &
1846 n_var=1, type_of_var=
real_t, unit_str=
"hartree", &
1847 default_r_val=1.0e-5_dp)
1851 CALL keyword_create(keyword, __location__, name=
"MIN_AMPLITUDE", &
1852 description=
"The smallest excitation amplitude to print.", &
1853 n_var=1, type_of_var=
real_t, &
1854 default_r_val=5.0e-2_dp)
1858 CALL keyword_create(keyword, __location__, name=
"ORTHOGONAL_EPS", &
1859 description=
"The largest possible overlap between the ground state and "// &
1860 "orthogonalised excited state wave-functions. Davidson iterations "// &
1861 "will be restarted when the overlap goes beyond this threshold in "// &
1862 "order to prevent numerical instability.", &
1863 n_var=1, type_of_var=
real_t, &
1864 default_r_val=1.0e-4_dp)
1870 description=
"Restart the TDDFPT calculation if a restart file exists", &
1872 default_l_val=.false., lone_keyword_l_val=.true.)
1876 CALL keyword_create(keyword, __location__, name=
"RKS_TRIPLETS", &
1877 description=
"Compute triplet excited states using spin-unpolarised molecular orbitals.", &
1879 default_l_val=.false.)
1883 CALL keyword_create(keyword, __location__, name=
"ADMM_KERNEL_XC_CORRECTION", &
1884 description=
"Use/Ignore ADMM correction xc functional for TD kernel. "// &
1885 "XC correction functional is defined in ground state XC section.", &
1887 default_l_val=.true., lone_keyword_l_val=.true.)
1891 CALL keyword_create(keyword, __location__, name=
"ADMM_KERNEL_CORRECTION_SYMMETRIC", &
1892 description=
"ADMM correction functional in kernel is applied symmetrically. "// &
1893 "Original implementation is using a non-symmetric formula.", &
1895 default_l_val=.true., lone_keyword_l_val=.true.)
1900 description=
"Local resolution of identity for Coulomb contribution.", &
1902 default_l_val=.false.)
1907 description=
"Specify type and size of automatically generated auxiliary "// &
1908 "(RI) basis sets. Exactly two arguments are required for this option. "// &
1909 "The first argument of basis type should be one of the following: "// &
1910 "`P_LRI_AUX`. The second argument of basis size should be one of the "// &
1911 "following: `SMALL`, `MEDIUM`, `LARGE`, or `HUGE`. The default is not "// &
1912 "using any of these basis sets, requested by `AUTO_BASIS X X` (exactly "// &
1913 "as written here).", &
1914 usage=
"AUTO_BASIS {basis_type} {basis_size}", &
1915 type_of_var=
char_t, repeats=.true., n_var=-1, default_c_vals=[
"X",
"X"])
1920 description=
"Implying smeared occupation. ", &
1922 default_l_val=.false., lone_keyword_l_val=.true.)
1926 CALL keyword_create(keyword, __location__, name=
"EXCITON_DESCRIPTORS", &
1927 description=
"Compute exciton descriptors. "// &
1928 "Details given in Manual section about Bethe Salpeter equation.", &
1930 default_l_val=.false.)
1934 CALL keyword_create(keyword, __location__, name=
"DIRECTIONAL_EXCITON_DESCRIPTORS", &
1935 description=
"Print cartesian components of exciton descriptors.", &
1937 default_l_val=.false.)
1941 CALL keyword_create(keyword, __location__, name=
"DIRECTIONAL_EXCITON_CROSSCORRELATION", &
1942 description=
"Print the electron-hole crosscorrelation matrix as part of the "// &
1943 "cartesian components of exciton descriptors. Only active together with "// &
1944 "DIRECTIONAL_EXCITON_DESCRIPTORS.", &
1946 default_l_val=.true.)
1951 CALL keyword_create(keyword, __location__, name=
"WFN_RESTART_FILE_NAME", &
1952 variants=[
"RESTART_FILE_NAME"], &
1953 description=
"Name of the wave function restart file, may include a path."// &
1954 " If no file is specified, the default is to open the file as generated by"// &
1955 " the wave function restart print key.", &
1956 usage=
"WFN_RESTART_FILE_NAME <FILENAME>", &
1962 CALL section_create(subsection, __location__, name=
"DIPOLE_MOMENTS", &
1963 description=
"Parameters to compute oscillator strengths in the dipole approximation.", &
1964 n_keywords=3, n_subsections=0, repeats=.false.)
1967 description=
"Form of dipole transition integrals.", &
1968 enum_c_vals=
s2a(
"BERRY",
"LENGTH",
"VELOCITY",
"VELOCITY_OLD", &
1970 enum_desc=
s2a(
"Based on Berry phase formula (valid for fully periodic molecular systems only)", &
1971 "Length form ⟨ i | r | j ⟩ (valid for non-periodic molecular systems only)", &
1972 "Velocity form ⟨ i | d/dr | j ⟩", &
1973 "Old velocity form ⟨ i | d/dr | j ⟩", &
1974 "SCF molecular-orbital moment form for k-point TDDFPT"), &
1983 description=
"Reference point to calculate electric "// &
1984 "dipole moments using the dipole integrals in the length form.", &
1985 enum_c_vals=
s2a(
"COM",
"COAC",
"USER_DEFINED",
"ZERO"), &
1986 enum_desc=
s2a(
"Use Center of Mass", &
1987 "Use Center of Atomic Charges", &
1988 "Use User-defined Point", &
1989 "Use Origin of Coordinate System"), &
1998 CALL keyword_create(keyword, __location__, name=
"REFERENCE_POINT", &
1999 description=
"User-defined reference point.", &
2000 usage=
"REFERENCE_POINT x y z", &
2001 repeats=.false., n_var=3, type_of_var=
real_t, unit_str=
'bohr')
2011 description=
"Is jet to be implemented", &
2012 n_keywords=2, n_subsections=0, repeats=.false.)
2015 variants=
s2a(
"EPS_FILTER_MATRIX"), &
2016 description=
"The threshold used for sparse matrix operations", &
2017 usage=
"EPS_FILTER {real}", &
2019 default_r_val=1.0e-10_dp)
2024 variants=[
"ATOMIC_GRID"], &
2025 description=
"Specification of the atomic angular and radial grids for "// &
2026 "a atomic kind. This keyword must be repeated for all kinds! "// &
2027 "Usage: GRID < LEBEDEV_GRID > < RADIAL_GRID >", &
2028 usage=
"GRID {string} {integer} {integer}", &
2029 n_var=3, type_of_var=
char_t, repeats=.true.)
2047 CALL create_stda_section(subsection)
2052 CALL create_res_section(subsection)
2057 description=
"Choosing BSE kernel.", &
2058 usage=
"DO_BSE", default_l_val=.false., lone_keyword_l_val=.true.)
2062 CALL keyword_create(keyword, __location__, name=
"DO_BSE_W_ONLY", &
2063 description=
"Debug option for BSE kernel.", &
2064 usage=
"DO_BSE_W_ONLY", default_l_val=.false., lone_keyword_l_val=.true.)
2068 CALL keyword_create(keyword, __location__, name=
"DO_BSE_GW_ONLY", &
2069 description=
"Debug option for BSE kernel.", &
2070 usage=
"DO_BSE_GW_ONLY", default_l_val=.false., lone_keyword_l_val=.true.)
2080 CALL create_linres_section(subsection, create_subsections=.false., default_set_tdlr=.true.)
2086 description=
"Printing of information during the TDDFT run.", repeats=.false.)
2089 description=
"Controls the printing of the banner for TDDFPT program", &
2095 description=
"Controls the printing of initial guess vectors.", &
2101 description=
"Controls the printing of basic iteration information "// &
2102 "during the TDDFT run.", &
2108 description=
"Controls the printing of detailed energy information "// &
2109 "during the TDDFT run.", &
2115 description=
"Controls the printing of a file with all basis sets used.", &
2121 description=
"Controls the dumping of the latest wavefunction "// &
2122 "restart file during TDDFPT.", &
2124 each_iter_names=
s2a(
"TDDFT_SCF"), each_iter_values=[10], &
2130 description=
"Perform a natural transition orbital analysis.", &
2133 description=
"Threshold for sum of NTO eigenvalues considered", &
2134 usage=
"Threshold 0.95", &
2137 default_r_val=0.975_dp)
2140 CALL keyword_create(keyword, __location__, name=
"INTENSITY_THRESHOLD", &
2141 description=
"Threshold for oscillator strength to screen states.", &
2142 usage=
"Intensity_threshold 0.01", &
2145 default_r_val=0.0_dp)
2149 description=
"Specifies a list of states for the NTO calculations.", &
2150 usage=
"STATE_LIST {integer} {integer} .. {integer}", &
2155 description=
"Print NTOs on Cube Files", &
2156 usage=
"CUBE_FILES {logical}", repeats=.false., n_var=1, &
2157 default_l_val=.false., lone_keyword_l_val=.true., type_of_var=
logical_t)
2161 description=
"The stride (X,Y,Z) used to write the cube file "// &
2162 "(larger values result in smaller cube files). Provide 3 numbers (for X,Y,Z) or"// &
2163 " 1 number valid for all components.", &
2164 usage=
"STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=
integer_t)
2168 description=
"append the cube files when they already exist", &
2169 default_l_val=.false., lone_keyword_l_val=.true.)
2176 description=
"Write the NTO in Molden file format, for visualisation.", &
2179 description=
"Unit for coordinates and cell in the MOLDEN file.", &
2180 usage=
"UNIT ANGSTROM", &
2181 enum_c_vals=
s2a(
"BOHR",
"ANGSTROM"), &
2182 enum_desc=
s2a(
"Write in Bohr (AU)",
"Write in Angstrom"), &
2183 enum_i_vals=[1, 2], &
2188 description=
"Controls whether the [Cell] block is written to the MOLDEN file.", &
2189 usage=
"WRITE_CELL TRUE", &
2190 default_l_val=.false., lone_keyword_l_val=.true.)
2193 CALL keyword_create(keyword, __location__, name=
"WRITE_PSEUDO", &
2194 description=
"Controls whether the [Pseudo] block is written to the MOLDEN file.", &
2195 usage=
"WRITE_PSEUDO TRUE", &
2196 default_l_val=.false., lone_keyword_l_val=.true.)
2200 description=
"Controls whether ghost atoms are marked in the [Atoms] block by "// &
2201 "setting their atomic number to zero.", &
2202 usage=
"MARK_GHOST T", &
2203 default_l_val=.false., lone_keyword_l_val=.true.)
2207 description=
"Specifies the number of significant digits retained. 3 is OK for visualization.", &
2208 usage=
"NDIGITS {int}", &
2213 description=
"Representation of Gaussian-type orbitals", &
2215 enum_c_vals=
s2a(
"CARTESIAN",
"SPHERICAL"), &
2217 "Cartesian Gaussian orbitals. Use with caution", &
2218 "Spherical Gaussian orbitals. Incompatible with VMD"), &
2226 description=
"Controls the printout required for NAMD with NEWTONX.", &
2228 CALL keyword_create(keyword, __location__, name=
"PRINT_VIRTUALS", &
2229 description=
"Print occupied AND virtual molecular orbital coefficients", &
2230 default_l_val=.false., lone_keyword_l_val=.true.)
2233 CALL keyword_create(keyword, __location__, name=
"PRINT_PHASES", &
2234 description=
"Print phases of occupied and virtuals MOs.", &
2235 default_l_val=.false., lone_keyword_l_val=.true.)
2238 CALL keyword_create(keyword, __location__, name=
"SCALE_WITH_PHASES", &
2239 description=
"Scale ES eigenvectors with phases of occupied and virtuals MOs.", &
2240 default_l_val=.false., lone_keyword_l_val=.true.)
2248 description=
"Controls the printout of the tddfpt2_soc modul", &
2251 description=
"Will detrement if output in eVolt will be printef.", &
2252 default_l_val=.true., lone_keyword_l_val=.true.)
2256 description=
"Will detrement if output in wavenumbers will be printed.", &
2257 default_l_val=.false., lone_keyword_l_val=.true.)
2261 description=
"Will add the SOC-Splitting as additional output", &
2262 default_l_val=.false., lone_keyword_l_val=.true.)
2266 description=
"Will add the SOC-Matrix as additional output in a different file", &
2267 default_l_val=.false., lone_keyword_l_val=.true.)
2274 description=
"Controls the calculation and printing of excited state forces. "// &
2275 "This needs a RUN_TYPE that includes force evaluation, e.g. ENERGY_FORCE", &
2278 description=
"Specifies a list of states for the force calculations.", &
2279 usage=
"LIST {integer} {integer} .. {integer}", repeats=.true., &
2284 description=
"Threshold for oszillator strength to screen states.", &
2285 usage=
"Threshold 0.01", &
2288 default_r_val=0.0_dp)
2297 END SUBROUTINE create_tddfpt2_section
2303 SUBROUTINE create_stda_section(section)
2308 cpassert(.NOT.
ASSOCIATED(section))
2310 description=
"parameters needed and setup for sTDA calculations", &
2311 n_keywords=3, n_subsections=0, repeats=.false.)
2315 variants=[
"HFX_FRACTION"], &
2316 description=
"The fraction of TB Hartree-Fock exchange to use in the Kernel. "// &
2317 "0.0 implies no HFX part is used in the kernel. ", &
2318 usage=
"FRACTION 0.0", default_r_val=0.0_dp)
2325 description=
"Explicitly including or switching off sTDA exchange", &
2326 usage=
"DO_EXCHANGE", default_l_val=.true., lone_keyword_l_val=.true.)
2331 description=
"Use Ewald type method for Coulomb interaction", &
2332 usage=
"DO_EWALD", default_l_val=.false., lone_keyword_l_val=.true.)
2336 CALL keyword_create(keyword, __location__, name=
"EPS_TD_FILTER", &
2337 description=
"Threshold for filtering the transition density matrix", &
2338 usage=
"EPS_TD_FILTER epsf", default_r_val=1.e-10_dp)
2342 CALL keyword_create(keyword, __location__, name=
"MATAGA_NISHIMOTO_CEXP", &
2343 description=
"Exponent used in Mataga-Nishimoto formula for Coulomb (alpha). "// &
2344 "Default value is method dependent!", &
2345 usage=
"MATAGA_NISHIMOTO_CEXP cexp", default_r_val=-99.0_dp)
2349 CALL keyword_create(keyword, __location__, name=
"MATAGA_NISHIMOTO_XEXP", &
2350 description=
"Exponent used in Mataga-Nishimoto formula for Exchange (beta). "// &
2351 "Default value is method dependent!", &
2352 usage=
"MATAGA_NISHIMOTO_XEXP xexp", default_r_val=-99.0_dp)
2356 CALL keyword_create(keyword, __location__, name=
"COULOMB_SR_CUT", &
2357 description=
"Maximum range of short range part of Coulomb interaction.", &
2358 usage=
"COULOMB_SR_CUT rcut", default_r_val=20.0_dp)
2362 CALL keyword_create(keyword, __location__, name=
"COULOMB_SR_EPS", &
2363 description=
"Threshold for short range part of Coulomb interaction.", &
2364 usage=
"COULOMB_SR_EPS sreps", default_r_val=1.e-03_dp)
2368 END SUBROUTINE create_stda_section
2374 SUBROUTINE create_res_section(section)
2379 cpassert(.NOT.
ASSOCIATED(section))
2380 CALL section_create(section, __location__, name=
"REDUCED_EXCITATION_SPACE", &
2381 description=
"Sets up a restricted (reduced) excitation space for TDDFT", &
2382 n_keywords=3, n_subsections=0, repeats=.false.)
2386 name=
"_SECTION_PARAMETERS_", &
2387 description=
"Controls the activation of RES calculation.", &
2388 default_l_val=.false., &
2389 lone_keyword_l_val=.true.)
2393 CALL keyword_create(keyword, __location__, name=
"ENERGY_WINDOW", &
2394 description=
"Upper and lower cutoffs [eV] for orbitals to be included for excitations. ", &
2395 usage=
"ENERGY_WINDOW -5.0 0.0", default_r_vals=[-1.0e10_dp, 1.0e10_dp], &
2396 type_of_var=
real_t, unit_str=
"eV")
2400 CALL keyword_create(keyword, __location__, name=
"UPPER_ENERGY_CUTOFF", &
2401 description=
"Upper energy cutoff [eV] for orbitals to be included in excitations.", &
2402 usage=
"UPPER_ENERGY_CUTOFF -5.0", default_r_val=1.0e10_dp, &
2403 type_of_var=
real_t, unit_str=
"eV")
2407 CALL keyword_create(keyword, __location__, name=
"LOWER_ENERGY_CUTOFF", &
2408 description=
"Lower energy cutoff [eV] for orbitals to be included in excitations.", &
2409 usage=
"LOWER_ENERGY_CUTOFF -5.0", default_r_val=-1.0e10_dp, &
2410 type_of_var=
real_t, unit_str=
"eV")
2414 CALL keyword_create(keyword, __location__, name=
"MOLECULE_LIST", &
2415 description=
"Indices of molecules to be excited. "// &
2416 "This implies the calculation of molecular states through orbital location "// &
2417 "and subspace diagonalization.", &
2418 usage=
"MOLECULE_LIST {integer} {integer} .. {integer} ", &
2419 n_var=-1, type_of_var=
integer_t, repeats=.false.)
2423 END SUBROUTINE create_res_section
2431 SUBROUTINE create_bandstructure_section(section)
2437 cpassert(.NOT.
ASSOCIATED(section))
2438 CALL section_create(section, __location__, name=
"BANDSTRUCTURE", &
2439 description=
"Parameters needed to set up a calculation for "// &
2440 "electronic level energies of molecules and the electronic band "// &
2441 "structure of materials from post-SCF schemes (GW, perturbative "// &
2442 "spin-orbit coupling from GTH pseudopotentials), and Floquet "// &
2443 "band structures as response to continuous driving with light.", &
2444 n_keywords=1, n_subsections=1, repeats=.false.)
2446 NULLIFY (keyword, subsection)
2448 name=
"_SECTION_PARAMETERS_", &
2449 description=
"Controls the activation of the band structure calculation.", &
2450 default_l_val=.false., &
2451 lone_keyword_l_val=.true.)
2460 CALL create_gw_section(subsection)
2464 CALL create_soc_section(subsection)
2468 CALL create_dos_section(subsection)
2472 CALL create_floquet_section(subsection)
2476 END SUBROUTINE create_bandstructure_section
2484 SUBROUTINE create_gw_section(section)
2490 cpassert(.NOT.
ASSOCIATED(section))
2492 description=
"Parameters needed to set up a GW calculation for "// &
2493 "electronic level energies $\varepsilon_{n\mathbf{k}}^{G_0W_0}$ "// &
2494 "of molecules and the band structure of materials: "// &
2495 "$\varepsilon_{n\mathbf{k}}^{G_0W_0}= "// &
2496 "\varepsilon_{n\mathbf{k}}^\text{DFT}+\Sigma_{n\mathbf{k}} "// &
2497 "-v^\text{xc}_{n\mathbf{k}}$. "// &
2498 "For the GW algorithm for molecules, see \[Wilhelm2021\]. "// &
2499 "For 2D materials, see \[Graml2024\].", &
2501 n_keywords=1, n_subsections=5, repeats=.false.)
2505 name=
"_SECTION_PARAMETERS_", &
2506 description=
"Controls the activation of the GW calculation.", &
2507 default_l_val=.false., &
2508 lone_keyword_l_val=.true.)
2512 CALL keyword_create(keyword, __location__, name=
"NUM_TIME_FREQ_POINTS", &
2513 description=
"Number of discrete points for the imaginary-time "// &
2514 "grid and the imaginary-frequency grid. The more points, the more "// &
2515 "precise is the calculation. Typically, 10 points are good "// &
2516 "for 0.1 eV precision of band structures and molecular energy "// &
2517 "levels, 20 points for 0.03 eV precision, "// &
2518 "and 30 points for 0.01 eV precision, see Table I in "// &
2519 "\[Wilhelm2021\]. GW computation time "// &
2520 "increases linearly with `NUM_TIME_FREQ_POINTS`.", &
2521 usage=
"NUM_TIME_FREQ_POINTS 30", &
2527 description=
"Threshold for sparse operations on spatially local "// &
2528 "matrices, including DBCSR matrix multiplication. EPS_FILTER "// &
2529 "usually controls the accuracy and runtime of low-scaling GW: "// &
2530 "a smaller value increases numerical precision and computational "// &
2532 usage=
"EPS_FILTER 1.0E-6", &
2533 default_r_val=1.0e-8_dp)
2537 CALL keyword_create(keyword, __location__, name=
"REGULARIZATION_MINIMAX", &
2538 description=
"Parameter to regularize the Fourier transformation with minimax grids. "// &
2539 "In case the parameter 0.0 is chosen, no regularization is performed.", &
2540 usage=
"REGULARIZATION_MINIMAX 1.0E-4", &
2541 default_r_val=-1.0_dp)
2545 CALL keyword_create(keyword, __location__, name=
"REGULARIZATION_RI", &
2546 description=
"Regularization applied to the GW RI fitting matrix "// &
2547 "$M_{PQ}$. A negative value selects the context-dependent default: "// &
2548 "zero for molecules, 1.0E-8 for periodic RI-RS GW and 1.0E-2 "// &
2549 "for other periodic systems.", &
2550 usage=
"REGULARIZATION_RI 1.0E-4", &
2551 default_r_val=-1.0_dp)
2555 CALL keyword_create(keyword, __location__, name=
"CUTOFF_RADIUS_RI", &
2556 description=
"The cutoff radius (in Angstrom) for the truncated "// &
2557 "Coulomb operator. The larger the cutoff radius, the faster "// &
2558 "converges the resolution of the identity (RI) with respect to the "// &
2559 "RI basis set size. Larger cutoff radius means higher computational "// &
2561 usage=
"CUTOFF_RADIUS_RI 3.0", &
2563 type_of_var=
real_t, unit_str=
"angstrom")
2567 CALL keyword_create(keyword, __location__, name=
"RI_CUTOFF_ATTENUATION", &
2568 description=
"Positive attenuation omega (in inverse bohr) of the "// &
2569 "erfc(omega*r)/r RI metric used by periodic full-k RI-RS GW. "// &
2570 "The default is 0.3 bohr^-1. Other GW implementations use "// &
2571 "the truncated Coulomb metric set by CUTOFF_RADIUS_RI.", &
2572 usage=
"RI_CUTOFF_ATTENUATION 0.3", default_r_val=0.3_dp, &
2573 type_of_var=
real_t, unit_str=
"bohr^-1")
2577 CALL keyword_create(keyword, __location__, name=
"MEMORY_PER_PROC", &
2578 description=
"Specify the available memory per MPI process (in GB). The "// &
2579 "default value -1 means that the available memory per MPI process is detected "// &
2580 "automatically from the free memory of the node divided by the number "// &
2581 "of MPI processes running on that node; this is the recommended setting. "// &
2582 "Note: This keyword is not used for GW calculations with RI-RS, "// &
2583 "where the available memory is always detected automatically.", &
2584 usage=
"MEMORY_PER_PROC 16", &
2585 default_r_val=-1.0_dp)
2589 CALL keyword_create(keyword, __location__, name=
"APPROX_KP_EXTRAPOL", &
2590 description=
"If true, use only a 4x4 kpoint mesh for frequency "// &
2591 "points $\omega_j, j \ge 2$ (instead of a 4x4 and 6x6 k-point mesh). "// &
2592 "The k-point extrapolation of $W_{PQ}(i\omega_j,\mathbf{q})$ "// &
2593 "is done approximately from $W_{PQ}(i\omega_1,\mathbf{q})$.", &
2594 usage=
"APPROX_KP_EXTRAPOL", &
2595 default_l_val=.false., lone_keyword_l_val=.true.)
2599 CALL keyword_create(keyword, __location__, name=
"SIZE_LATTICE_SUM", &
2600 description=
"Parameter determines how many neighbor cells $\mathbf{R}$ "// &
2601 "are used for computing "// &
2602 "$V_{PQ}(\mathbf{k}) = "// &
2603 "\sum_{\mathbf{R}} e^{i\mathbf{k}\cdot\mathbf{R}}\,\langle P, "// &
2604 "\text{cell}{=}\mathbf{0}|1/r|Q,\text{cell}{=}\mathbf{R}\rangle$. "// &
2605 "Normally, parameter does not need to be touched.", &
2606 usage=
"SIZE_LATTICE_SUM 4", &
2612 keyword, __location__, name=
"KPOINTS_W", &
2613 description=
"Monkhorst-Pack k-point mesh of size N_x, N_y, N_z for calculating "// &
2614 "$W_{PQ}^\mathbf{R}=\int_\text{BZ}\frac{d\mathbf{k}}{\Omega_\text{BZ}}\, "// &
2615 "e^{-i\mathbf{k}\cdot\mathbf{R}}\,W_{PQ}(\mathbf{k})$. "// &
2616 "For non-periodic directions α, choose N_α = 1. "// &
2617 "Automatic choice of the k-point mesh for negative "// &
2618 "values, i.e. KPOINTS_W -1 -1 -1. "// &
2619 "K-point extrapolation of W is automatically switched on.", &
2620 usage=
"KPOINTS_W N_x N_y N_z", &
2621 n_var=3, type_of_var=
integer_t, default_i_vals=[-1, -1, -1])
2626 description=
"If true, use Hedin's shift in G0W0, evGW and evGW0. "// &
2627 "Details see in Li et al. JCTC 18, 7570 "// &
2628 "(2022), Figure 1. G0W0 with Hedin's shift should give "// &
2629 "similar GW eigenvalues as evGW0; at a lower "// &
2630 "computational cost.", &
2631 usage=
"HEDIN_SHIFT", &
2632 default_l_val=.false., &
2633 lone_keyword_l_val=.true.)
2637 CALL keyword_create(keyword, __location__, name=
"FREQ_MAX_FIT", &
2638 description=
"For analytic continuation, a fit on Σ(iω) is performed. "// &
2639 "This fit is then evaluated at a real frequency, Σ(ω), which is used "// &
2640 "in the quasiparticle equation "// &
2641 "$\varepsilon_{n\mathbf{k}}^{G_0W_0}= "// &
2642 "\varepsilon_{n\mathbf{k}}^\text{DFT}+\Sigma_{n\mathbf{k}} "// &
2643 "-v^\text{xc}_{n\mathbf{k}}$. The keyword FREQ_MAX_FIT "// &
2644 "determines fitting range for the self-energy Σ(iω) on "// &
2645 "imaginary axis: i*[0, ω_max] for empty orbitals/bands, i*[-ω_max,0] "// &
2646 "for occ orbitals. A smaller ω_max might lead to better numerical "// &
2647 "stability (i.e., if you observe clearly wrong GW eigenvalues/bands "// &
2648 "around HOMO/LUMO, decreasing ω_max might fix this issue). "// &
2649 "A small benchmark of ω_max is contained in Fig. 5 of "// &
2650 "J. Wilhelm et al., JCTC 12, 3623-3635 (2016). "// &
2651 "Note that we used ω_max = 1 Ha = 27.211 eV in the benchmark "// &
2652 "M. Azizi et al., PRB 109, 245101 (2024).", &
2654 usage=
"FREQ_MAX_FIT 20.0", &
2659 NULLIFY (subsection)
2661 description=
"Static Coulomb-hole screened-exchange (COHSEX) approximation "// &
2662 "and scaling of its correlation self-energy.", &
2663 n_keywords=3, n_subsections=0, repeats=.false.)
2666 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
2667 description=
"Static Coulomb-hole screened-exchange (COHSEX) approximation to "// &
2668 "$G_0W_0$. Only the static screened Coulomb interaction $W(\omega=0)$ is computed; "// &
2669 "its correlation part $W^\text{c}(0) = W(0) - v$ gives the static correlation "// &
2670 "self-energy $\Sigma^\text{c}_{mn} = \frac{1}{2}\sum_p \text{sgn}(\varepsilon_p - "// &
2671 "\varepsilon_\text{F})\, W^\text{c}_{mp,pn}(\omega=0)$. The quasiparticle Hamiltonian "// &
2672 "$H^\text{QP}_{mn} = \varepsilon_n^\text{DFT}\delta_{mn} + \Sigma^\text{x}_{mn} - "// &
2673 "v^\text{xc}_{mn} + \Sigma^\text{c}_{mn}$ is built in the Kohn-Sham MO basis; its "// &
2674 "occupied-virtual blocks are set to zero. The quasiparticle energies are written to "// &
2675 "the file Quasiparticle_energies_singlepole.", &
2676 usage=
"&COHSEX QP_UPDATE", &
2677 enum_c_vals=
s2a(
"OFF",
"DIAGONAL",
"QP_UPDATE"), &
2679 enum_desc=
s2a(
"No static COHSEX (default without the section).", &
2680 "Diagonal static COHSEX (Hedin 1965; Hybertsen and Louie 1986): the "// &
2681 "quasiparticle energies are the diagonal elements "// &
2682 "$\varepsilon_n^\text{DG} = H^\text{QP}_{nn}$. "// &
2683 "Default of the section without a parameter.", &
2684 "Static COHSEX with quasiparticle update (Tyagi and Voora 2024): "// &
2685 "$H^\text{QP}$ is diagonalized, giving the canonical static COHSEX "// &
2686 "energies $\varepsilon_n^\text{CN}$ and MOs. Both "// &
2687 "$\varepsilon_n^\text{DG}$ and $\varepsilon_n^\text{CN}$ are printed, "// &
2688 "the MOs at the $\Gamma$ point with DFT%PRINT%MO and DFT%PRINT%MO_CUBES."), &
2695 description=
"Scaling factor of the static COHSEX correlation self-energy in the "// &
2696 "occupied-occupied block of $H^\text{QP}$.", &
2697 usage=
"SCALE_OCC 0.6", &
2699 default_r_val=1.0_dp)
2704 description=
"Scaling factor of the static COHSEX correlation self-energy in the "// &
2705 "virtual-virtual block of $H^\text{QP}$.", &
2706 usage=
"SCALE_VIRT 0.6", &
2708 default_r_val=1.0_dp)
2715 NULLIFY (subsection, print_key)
2717 description=
"Printing of GW restarts.", &
2718 n_keywords=2, n_subsections=1, repeats=.false.)
2720 description=
"Controls the printing of restart files "// &
2723 common_iter_levels=3)
2730 NULLIFY (subsection)
2731 CALL create_ri_rs_section(subsection)
2735 NULLIFY (subsection)
2736 CALL create_auto_ri_section(subsection)
2740 NULLIFY (subsection)
2741 CALL create_evgw0_section(subsection)
2745 END SUBROUTINE create_gw_section
2751 SUBROUTINE create_auto_ri_section(section)
2756 cpassert(.NOT.
ASSOCIATED(section))
2758 description=
"Optimizes an RI basis for molecular "// &
2759 "and full-k periodic RI-RS GW. The fitting target combines "// &
2760 "occupied-empty transitions and exchange products.", &
2761 n_keywords=3, n_subsections=0, repeats=.false.)
2764 description=
"Ratio between the numbers of optimized RI and AO basis "// &
2765 "functions. For example, RI_AO_RATIO 3 requires an RI basis with "// &
2766 "three times as many functions as the AO basis. Compare values such "// &
2767 "as 1, 1.5, 2, 3 and 4 until the GW energies are converged. "// &
2768 "Larger values increase time and memory, but also increase the "// &
2769 "numerical accuracy.", &
2770 default_r_val=3.0_dp, usage=
"RI_AO_RATIO 3")
2774 CALL keyword_create(keyword, __location__, name=
"OCC_EMPTY_FRONTIER_ORBITAL_WINDOW", &
2775 description=
"The exchange contribution to the RI optimization "// &
2776 "objective includes GW levels within the energy window "// &
2777 "$[\epsilon_{\mathrm{HOMO}}-w,\epsilon_{\mathrm{LUMO}}+w]$. "// &
2778 "The default of 5 eV is usually sufficient, for example for "// &
2779 "GW-BSE excitations up to 10 eV.", &
2781 unit_str=
"eV", usage=
"OCC_EMPTY_FRONTIER_ORBITAL_WINDOW [eV] 5.0")
2785 END SUBROUTINE create_auto_ri_section
2792 SUBROUTINE create_ri_rs_section(section)
2798 cpassert(.NOT.
ASSOCIATED(section))
2800 description=
"Real-Space Resolution of Identity (RI-RS) method. This "// &
2801 "approximation replaces the conventional 3-center RI integrals "// &
2802 "$(\mu\nu|P)$ by a factorized representation on an atom-centered "// &
2803 "real-space grid with points $\mathbf{r}_\ell$: "// &
2804 "$(\mu\nu|P) \approx \sum_\ell \varphi_\mu(\mathbf{r}_\ell) "// &
2805 "\varphi_\nu(\mathbf{r}_\ell) Z_{\ell P}$. "// &
2806 "The coefficients $Z_{\ell P}$ combine the numerical integration "// &
2807 "weights and the Coulomb potential of the auxiliary basis function "// &
2808 "$P$ evaluated at grid point $\mathbf{r}_\ell$. To reduce the "// &
2809 "computational cost, only grid points within the sphere $B^P$ around "// &
2810 "atom $P$ are included, i.e. the points with "// &
2811 "$|\mathbf{r}_\ell - \mathbf{R}_P| < R_c + r_P$. "// &
2812 "Here, $r_P$ is the effective radius of the most diffuse RI "// &
2813 "auxiliary Gaussian on atom $P$, at which the basis function "// &
2814 "magnitude falls below a threshold $\delta$ "// &
2815 "(currently controlled through EPS_FILTER). "// &
2816 "This locality approximation yields a sparse representation of the "// &
2817 "3-center integrals and enables reduced computational cost. "// &
2818 "See details in \[Duchemin2019\].", &
2820 n_keywords=11, n_subsections=1, repeats=.false.)
2824 name=
"_SECTION_PARAMETERS_", &
2825 description=
"Controls the activation of RI-RS in the GW calculation. "// &
2826 "An empty section, &RI_RS ... &END RI_RS, switches RI-RS on with "// &
2827 "default parameters.", &
2828 usage=
"&RI_RS .TRUE.", &
2829 default_l_val=.false., &
2830 lone_keyword_l_val=.true.)
2835 description=
"Regularization parameter $\alpha$ used to stabilize "// &
2836 "the inversion of the grid-overlap matrix "// &
2837 "$D$ in the RI-RS method. "// &
2838 "See Equation (9) in \[Duchemin2019\].", &
2839 usage=
"TIKHONOV 1.0E-8", &
2840 default_r_val=1.0e-08_dp)
2845 description=
"Selection of the atom-centered grid type used "// &
2846 "in RI-RS optimized by Duchemin and Blase. "// &
2847 "(1) def2-TZVPP: Available for elements up to the fourth row "// &
2848 "of the periodic table (see \[Duchemin2021\]). "// &
2849 "(2) cc-pVTZ: Available for H, C, N, and O atoms "// &
2850 "(see \[Duchemin2019\]). "// &
2851 "(3) User-provided grids: per-element grid files supplied by the "// &
2852 "user, read as ri_rs_grid/<Element><suffix> in the same format as "// &
2853 "the built-in sets, with the suffix _rirs.ion.", &
2854 usage=
"GRID_SELECT 1", &
2859 CALL keyword_create(keyword, __location__, name=
"CUTOFF_RADIUS_RL_AO", &
2860 description=
"Real-space cutoff radius (in Angstrom) for evaluating "// &
2861 "the AO basis functions on the RI-RS grid. Override the default radius "// &
2862 "derived automatically from the most diffuse AO Gaussian on each atom. ", &
2863 usage=
"CUTOFF_RADIUS_RL_AO 8.0", &
2865 type_of_var=
real_t, unit_str=
"angstrom")
2869 CALL keyword_create(keyword, __location__, name=
"CUTOFF_RADIUS_RL_W", &
2870 description=
"Real-space truncation radius (Angstrom) for the grid-basis "// &
2871 "G operators in the RI-RS GW self-energy. "// &
2872 "Default -1.0 disables the truncation (exact grid-basis operators).", &
2873 usage=
"CUTOFF_RADIUS_RL_W 20.0", &
2875 type_of_var=
real_t, unit_str=
"angstrom")
2879 NULLIFY (subsection)
2880 CALL create_ri_rs_grid_optimization_section(subsection)
2884 END SUBROUTINE create_ri_rs_section
2890 SUBROUTINE create_ri_rs_grid_optimization_section(section)
2895 cpassert(.NOT.
ASSOCIATED(section))
2897 section, __location__, name=
"GRID_OPTIMIZATION", repeats=.false., &
2898 description=
"Optimizes RI-RS grid using small local atomic environments. For every atom "// &
2899 "in the structure, a cluster is formed from all atoms whose distance from the centre atom "// &
2900 "is smaller than CUTOFF_ATOMIC_CLUSTER. The grid points are optimized such that the "// &
2901 "corresponding RI-RS three-centre integrals reproduce the analytic integrals: "// &
2902 "For a cluster $C_I$, the normalized squared RI-RS error is "// &
2903 "$E_I = \frac{1}{N_I} \sum_{P\mu\nu \in C_I} \left|(\mu\nu|P) - "// &
2904 "\sum_{\mathbf{r}_{A\ell} \in C_I} \phi_\mu(\mathbf{r}_{A\ell}) "// &
2905 "\phi_\nu(\mathbf{r}_{A\ell}) Z_{A\ell P}\right|^2$. The total objective is "// &
2906 "the average over all local clusters, $E_\mathrm{loc} = \frac{1}{N_\mathrm{at}} "// &
2907 "\sum_{I=1}^{N_\mathrm{at}} E_I$. Starting points are generated on radial-Lebedev grids "// &
2908 "and selected by diagonal Cholesky decomposition in independent atomic clusters. "// &
2909 "If the selection reaches numerical rank before the requested grid size, unused points "// &
2910 "in the central atom's Voronoi cell are added by geometric maximin distance. "// &
2911 "Before Voronoi filtering, the candidate grid contains at least "// &
2912 "max(30, 2 RS_AO_RATIO) times the number of AO functions. RS_AO_RATIO is the sole "// &
2913 "control of the retained points per atom. "// &
2914 "The optimization adapts the grid to the chemical environment and composition of the "// &
2915 "structure and can permit substantially smaller grids. Compact grids often work well for "// &
2916 "small basis sets, but RS_AO_RATIO "// &
2917 "should be tuned and converged for the chosen basis sets and chemical system.")
2920 keyword, __location__, name=
"RS_AO_RATIO", &
2921 description=
"Number of retained real-space points per atomic-orbital (AO) basis function. "// &
2922 "For every atom A, the count is $N_R^A=\lceil\alpha N_{\mathrm{AO}}^A\rceil$, where "// &
2923 "$\alpha$ is RS_AO_RATIO and $N_{\mathrm{AO}}^A$ is that atom's number of AO functions. ", &
2924 usage=
"RS_AO_RATIO 7", default_r_val=7.0_dp)
2929 keyword, __location__, name=
"CUTOFF_ATOMIC_CLUSTER", &
2930 description=
"Radius of the atom-centred cluster used to optimize the grid points. "// &
2931 "All atoms within this distance of the centre atom are included. "// &
2932 "A negative value selects 1.4 times the distance to the nearest neighbouring atom.", &
2933 usage=
"CUTOFF_ATOMIC_CLUSTER -1", type_of_var=
real_t, &
2935 unit_str=
"angstrom")
2940 keyword, __location__, name=
"MAX_ITER", &
2941 description=
"Maximum number of objective-and-gradient evaluations in the single "// &
2942 "cooperative Cartesian grid optimization.", &
2943 usage=
"MAX_ITER 20", default_i_val=20)
2947 END SUBROUTINE create_ri_rs_grid_optimization_section
2953 SUBROUTINE create_evgw0_section(section)
2958 cpassert(.NOT.
ASSOCIATED(section))
2960 description=
"Eigenvalue self-consistent GW0. The quasiparticle "// &
2961 "energies replace the Kohn-Sham eigenvalues in the Green's function "// &
2962 "and the cycle is repeated, while the screened Coulomb interaction "// &
2963 "$W$ stays at its RPA@DFT value. Only the correlation self-energy "// &
2964 "and the quasiparticle equation are recomputed per cycle; $W$, the "// &
2965 "exchange self-energy and the RI-RS grid quantities are computed "// &
2966 "once. This implementation requires RI-RS. Without this section a "// &
2967 "single-shot G0W0 calculation is performed.", &
2968 n_keywords=3, n_subsections=0, repeats=.false.)
2972 name=
"_SECTION_PARAMETERS_", &
2973 description=
"Controls the activation of evGW0. An empty section, "// &
2974 "&EVGW0 ... &END EVGW0, switches evGW0 on with default parameters.", &
2975 usage=
"&EVGW0 .TRUE.", &
2976 default_l_val=.false., &
2977 lone_keyword_l_val=.true.)
2982 description=
"Maximum number of evGW0 cycles.", &
2983 usage=
"MAX_ITER 20", &
2989 description=
"Target accuracy of the eigenvalue self-consistency. "// &
2990 "The cycle stops once the quasiparticle HOMO, the quasiparticle "// &
2991 "LUMO and the HOMO-LUMO gap all change by less than this value "// &
2992 "between two successive cycles. Unit: Hartree.", &
2993 usage=
"EPS_ITER 0.00005", &
2994 default_r_val=5.0e-5_dp)
2998 END SUBROUTINE create_evgw0_section
3006 SUBROUTINE create_soc_section(section)
3011 cpassert(.NOT.
ASSOCIATED(section))
3013 description=
"Switch on or off spin-orbit coupling. Use SOC "// &
3014 "parameters from non-local pseudopotentials as given in "// &
3015 "Hartwigsen, Goedecker, Hutter, Eq.(18), (19), "// &
3016 "\[Hartwigsen1998\], with "// &
3017 "$V_{\mu\nu}^{\mathrm{SOC}, (\alpha)} = "// &
3018 "(\hbar/2) \langle \phi_\mu | \sum_l \Delta "// &
3019 "V_l^\mathrm{SO}(\mathbf{r},\mathbf{r}') "// &
3020 "L^{(\alpha)} | \phi_\nu \rangle, "// &
3022 n_keywords=1, n_subsections=1, repeats=.false.)
3026 name=
"_SECTION_PARAMETERS_", &
3027 description=
"Controls the activation of the SOC calculation.", &
3028 default_l_val=.false., &
3029 lone_keyword_l_val=.true.)
3033 CALL keyword_create(keyword, __location__, name=
"SOC_WINDOW_OCC", &
3034 description=
"Apply SOC only for states with eigenvalues below VBM "// &
3035 "in the interval $[\varepsilon_\mathrm{VBM}-E_\mathrm{window\_occ}, \ "// &
3036 "\varepsilon_\mathrm{VBM}]$. "// &
3037 "to use for large systems to prevent numerical instabilities.", &
3038 usage=
"SOC_WINDOW_OCC 5.0", &
3039 default_r_val=-1.0_dp, &
3044 CALL keyword_create(keyword, __location__, name=
"SOC_WINDOW_VIRT", &
3045 description=
"Apply SOC only for states with eigenvalues above CBM "// &
3046 "in the interval $[\varepsilon_\mathrm{CBM},\ "// &
3047 "\varepsilon_\mathrm{CBM}+E_\mathrm{window\_virt}]$, "// &
3048 "to use for large systems to prevent numerical instabilities.", &
3049 usage=
"SOC_WINDOW_VIRT 5.0", &
3050 default_r_val=-1.0_dp, &
3055 CALL keyword_create(keyword, __location__, name=
"SOC_WINDOW_SMEARING", &
3056 description=
"Width of the Fermi-like smoothing at the SOC energy-window edge. "// &
3057 "Default reproduces the value of 1 eV. "// &
3058 "only effective when at least one SOC window is active.", &
3059 usage=
"SOC_WINDOW_SMEARING 1.0", &
3065 CALL keyword_create(keyword, __location__, name=
"SOC_NBANDS_OCC", &
3066 description=
"Truncate the second-variational SOC diagonalization to this "// &
3067 "many occupied bands below the Fermi level (per spin). Must be used "// &
3068 "together with SOC_NBANDS_VIRT. Default -1 = off. ", &
3069 usage=
"SOC_NBANDS_OCC 2000", &
3074 CALL keyword_create(keyword, __location__, name=
"SOC_NBANDS_VIRT", &
3075 description=
"Truncate the second-variational SOC diagonalization to this "// &
3076 "many virtual bands above the Fermi level (per spin). See SOC_NBANDS_OCC. "// &
3077 "Default -1 = off.", &
3078 usage=
"SOC_NBANDS_VIRT 2000", &
3083 END SUBROUTINE create_soc_section
3091 SUBROUTINE create_dos_section(section)
3097 cpassert(.NOT.
ASSOCIATED(section))
3099 description=
"Parameters needed to calculate the density of states "// &
3100 "(DOS) and the projected density of states (PDOS).", &
3101 n_keywords=1, n_subsections=1, repeats=.false.)
3105 name=
"_SECTION_PARAMETERS_", &
3106 description=
"Controls the activation of the DOS calculation.", &
3107 default_l_val=.false., &
3108 lone_keyword_l_val=.true.)
3112 CALL keyword_create(keyword, __location__, name=
"ENERGY_WINDOW", &
3113 description=
"Print DOS and PDOS in the energy window "// &
3114 "$[\varepsilon_\mathrm{VBM}-E_\mathrm{window}/2, "// &
3115 "\varepsilon_\mathrm{CBM}+E_\mathrm{window}/2]$,"// &
3116 " where VBM is the valence "// &
3117 "band maximum (or highest occupied molecular orbital, HOMO, for "// &
3118 "molecules) and CBM the conduction band minimum (or lowest "// &
3119 "unoccupied molecular orbital, LUMO, for molecules).", &
3120 usage=
"ENERGY_WINDOW 5.0", &
3127 description=
"Resolution of the energy E when computing the $\rho(E)$.", &
3128 usage=
"ENERGY_STEP 0.01", &
3135 description=
"Broadening α in Gaussians used in the DOS; "// &
3136 "$\rho(E) = \sum_n \exp(((E-\varepsilon_n)/\alpha)^2)/("// &
3137 " \sqrt{2\pi} \alpha)$.", &
3138 usage=
"BROADENING 0.01", &
3145 keyword, __location__, name=
"KPOINTS", &
3146 description=
"Monkhorst-Pack k-point mesh of size N_x, N_y, N_z for calculating "// &
3147 "the density of states (DOS). In GW, the KPOINT_DOS mesh is thus used as k-point "// &
3148 "mesh for the self-energy. For non-periodic directions α, choose N_α = 1. "// &
3149 "Automatic choice of the k-point mesh for negative "// &
3150 "values, i.e. KPOINTS_DOS -1 -1 -1 (automatic choice: N_α = 1 in non-periodic "// &
3151 "direction, 8 k-points in periodic direction). If you like to compute a "// &
3152 "band structure along a k-path, you can specify the k-path in "// &
3154 usage=
"KPOINTS N_x N_y N_z", &
3155 n_var=3, type_of_var=
integer_t, default_i_vals=[-1, -1, -1])
3159 NULLIFY (subsection)
3160 CALL create_ldos_section(subsection)
3164 END SUBROUTINE create_dos_section
3170 SUBROUTINE create_ldos_section(section)
3175 cpassert(.NOT.
ASSOCIATED(section))
3177 description=
"Parameters needed to calculate the local density "// &
3178 "of states (LDOS). "// &
3179 "The LDOS is computed as $\rho(\mathbf{r},E) = "// &
3180 "\sum\limits_{n,\mathbf{k}}"// &
3181 " |\psi_{n\mathbf{k}}(r)|^2\, w_\mathbf{k}\, g(E-\varepsilon_{n\mathbf{k}})$ "// &
3182 "using the Gaussian weight function "// &
3183 "$g(x) = \exp(x^2/\alpha^2)/(\sqrt{2\pi}\alpha)$, $\alpha$ is the broadening "// &
3184 "from the &DOS section, and the k-point weight "// &
3185 "$w_\mathbf{k}$. The k-mesh is taken from the &DOS section.", &
3186 n_keywords=2, repeats=.false.)
3190 name=
"_SECTION_PARAMETERS_", &
3191 description=
"Activates the local VBM CBM gap calculation.", &
3192 default_l_val=.false., &
3193 lone_keyword_l_val=.true.)
3198 description=
"Defines whether the LDOS is integrated along a "// &
3199 "coordinate. As an example, for INTEGRATION Z, the LDOS "// &
3200 "$\rho(x,y,E) = \int dz\, \rho(x,y,z,E)$ is computed.", &
3201 usage=
"INTEGRATION Z", &
3202 enum_c_vals=
s2a(
"X",
"Y",
"Z",
"NONE"), &
3204 enum_desc=
s2a(
"Integrate over x coordinate (not yet implemented).", &
3205 "Integrate over y coordinate (not yet implemented).", &
3206 "Integrate over z coordinate.", &
3207 "No integration, print cube file as function "// &
3208 "of x,y,z (not yet implemented)."), &
3214 keyword, __location__, name=
"BIN_MESH", &
3215 description=
"Mesh of size n x m for binning the space coordinates x and y of "// &
3216 "the LDOS $\rho(x,y,E)$. If -1, no binning is performed and the "// &
3217 "fine x, y resolution of the electron density from SCF is used.", &
3218 usage=
"BIN_MESH n m", &
3219 n_var=2, type_of_var=
integer_t, default_i_vals=[10, 10])
3223 END SUBROUTINE create_ldos_section
3231 SUBROUTINE create_tipscan_section(section)
3236 cpassert(.NOT.
ASSOCIATED(section))
3238 description=
"Parameters needed to set up a Tip Scan. "// &
3239 "Needs external definition of tip induced field.", &
3240 n_keywords=1, n_subsections=1, repeats=.false.)
3245 name=
"_SECTION_PARAMETERS_", &
3246 description=
"Controls the activation of the Tip Scan procedure", &
3247 default_l_val=.false., &
3248 lone_keyword_l_val=.true.)
3252 CALL keyword_create(keyword, __location__, name=
"SCAN_DIRECTION", &
3253 description=
"Defines scan direction and scan type(line, plane).", &
3254 usage=
"SCAN_DIRECTION XY", &
3255 enum_c_vals=
s2a(
"X",
"Y",
"Z",
"XY",
"XZ",
"YZ",
"XYZ"), &
3261 CALL keyword_create(keyword, __location__, name=
"REFERENCE_POINT", &
3262 description=
"The reference point to define the absolute position of the scan. ", &
3263 usage=
"REFERENCE_POINT 0.0 0.0 1.0", &
3264 n_var=3, default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp], type_of_var=
real_t, &
3265 unit_str=
"angstrom")
3270 description=
"Number of points calculated for each scan direction.", &
3271 usage=
"SCAN_POINTS 20 20", &
3277 description=
"Step size for each scan direction.", &
3278 usage=
"SCAN_STEP 0.01 0.01", &
3279 n_var=-1, type_of_var=
real_t, unit_str=
"angstrom")
3283 CALL keyword_create(keyword, __location__, name=
"TIP_FILENAME", &
3284 description=
"Filename of tip potential defined in cube file format.", &
3285 usage=
"TIP_FILENAME <filename>", &
3290 END SUBROUTINE create_tipscan_section
3298 SUBROUTINE create_floquet_section(section)
3304 description=
"Parameters controlling the calculation of the "// &
3305 "Floquet band structure and Quasi-energies of a system driven "// &
3306 "by a periodic monochromatic electric field with any arbitrary "// &
3307 "polarisation state.", &
3308 n_keywords=1, n_subsections=0, repeats=.false.)
3312 description=
"Electric field amplitude of the monochromatic light.", &
3313 usage=
"AMPLITUDE [Vm-1] 1.0E9", n_var=1, type_of_var=
real_t, &
3314 unit_str=
"Vm-1", default_r_val=0.0_dp)
3319 description=
"Frequency of the electric field for Floquet calculations "// &
3320 "expressed in terms of the energy of a photon in eV.", &
3321 usage=
"FREQUENCY 1.5", unit_str=
"eV", n_var=1, type_of_var=
real_t, &
3326 CALL keyword_create(keyword, __location__, name=
"POLARISATION", &
3327 description=
"Polarisation vector of the input light. The "// &
3328 "amplitude in each direction is the product of the AMPLITUDE "// &
3329 "and the POLARISATION vector component. Eg. for light polarized "// &
3330 "in the x direction, use 1 0 0. For left-circularly polarized "// &
3331 "light travelling in the +z direction use 1 1 0 and set "// &
3332 "PHASE_OFFSET 0 0.5 0 for a +Ï€/2 offset", &
3333 usage=
"POLARISATION 0.0 0.0 1.0", &
3334 default_r_vals=[0.0_dp, 0.0_dp, 1.0_dp])
3338 CALL keyword_create(keyword, __location__, name=
"PHASE_OFFSETS", &
3339 description=
"Phase offset of the electric field in the "// &
3340 "x, y, and z directions given in multiples of π. For "// &
3341 "linearly polarized light, use 0 0 0 and for left-circularly "// &
3342 "polarized light travelling in the +z direction use "// &
3343 "PHASE_OFFSET 0.0 0.5 0 ", &
3344 usage=
"PHASE_OFFSETS 0.5 0 0", &
3345 default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp])
3349 CALL keyword_create(keyword, __location__, name=
"MAX_FLOQUET_INDEX", &
3350 description=
"Largest absolute Floquet index up to which "// &
3351 "Floquet Hamiltonian is truncated. Use a larger value to "// &
3352 "ensure convergence at higher computational cost and a "// &
3353 "smaller value for faster computation. EPS_FLOQUET checks "// &
3354 "to ensure that the error due to truncation is small.", &
3355 usage=
"MAX_FLOQUET_INDEX 50", &
3361 description=
"Maximum number of Kohn-Sham eigenstates closest "// &
3362 "to the valence band maximum used in the Floquet calculation. "// &
3363 "The Floquet Hamiltonian is built only from this band window, "// &
3364 "greatly reducing its size and the diagonalisation cost for "// &
3365 "large (e.g. moire) cells. 0 means use all bands. The window "// &
3366 "must be wide enough that the bands of interest do not couple "// &
3367 "significantly to the excluded bands; converge results by "// &
3368 "increasing MAX_NMO.", &
3369 usage=
"MAX_NMO 20", &
3375 description=
"Threshold on the error due to truncation of "// &
3376 "the Floquet Hamiltonian. Used to verify that MAX_FLOQUET_INDEX "// &
3377 "is large enough that truncation errors are small. "// &
3378 "If negative, the check is removed (not recommended).", &
3379 usage=
"EPS_FLOQUET 1.e-10", default_r_val=1.0e-10_dp)
3383 CALL keyword_create(keyword, __location__, name=
"ENERGY_WINDOW", &
3384 description=
"Half-width of the energy range, in eV, centred "// &
3385 "on the Fermi level, over which the Floquet spectral "// &
3386 "function is evaluated.", &
3387 usage=
"ENERGY_WINDOW 5.0", &
3394 description=
"Resolution of the energy E used to compute the "// &
3395 "spectral function within the energy window.", &
3396 usage=
"ENERGY_STEP 0.01", &
3403 description=
"Lorentzian broadening applied to the peaks of the "// &
3404 "Floquet spectral function.", &
3405 usage=
"BROADENING 0.02", &
3412 description=
"Electronic temperature (in K) of the wide-band fermion "// &
3413 "bath used to weight the Floquet DOS by Fermi-Dirac occupations, adding "// &
3414 "an occupied spectral-weight column f(E)*A(E) to the DOS file. If "// &
3415 "negative (default), that column is not written.", &
3416 usage=
"TEMPERATURE 300.0", default_r_val=-1.0_dp)
3420 CALL keyword_create(keyword, __location__, name=
"FLOQUET_DOS_FILE_NAME", &
3421 description=
"File name used for the Floquet spectral function.", &
3422 usage=
"FLOQUET_DOS_FILE_NAME FLOQUET_DOS", &
3423 default_lc_val=
"FLOQUET_DOS")
3427 CALL keyword_create(keyword, __location__, name=
"QUASI_ENERGIES_FILE_NAME", &
3428 description=
"File name used for the Floquet quasi-energies.", &
3429 usage=
"QUASI_ENERGIES_FILE_NAME QUASI_ENERGIES", &
3430 default_lc_val=
"QUASI_ENERGIES")
3434 CALL keyword_create(keyword, __location__, name=
"FLOQUET_BS_FILE_NAME", &
3435 description=
"File name used for the Floquet m=0 (central-sector) "// &
3436 "band structure.", &
3437 usage=
"FLOQUET_BS_FILE_NAME FLOQUET_BANDSTRUCTURE", &
3438 default_lc_val=
"FLOQUET_BANDSTRUCTURE")
3442 CALL keyword_create(keyword, __location__, name=
"MEM_FILL_FRACTION", &
3443 description=
"Fraction of the computation memory that may be filled "// &
3444 "by Floquet Hamiltonian matrices. Reduce if process gets OOMP killed.", &
3445 usage=
"MEM_FILL_FRACTION 0.5", default_r_val=0.8_dp)
3449 END SUBROUTINE create_floquet_section
3455 SUBROUTINE create_spectral_localizer_section(section)
3460 CALL section_create(section, __location__, name=
"SPECTRAL_LOCALIZER", &
3461 description=
"Spectral localizer for isolated or two- and three-dimensionally periodic GPW/GAPW systems. "// &
3462 "Uses the full converged AO Hamiltonian, overlap, and analytic position or Berry integrals. "// &
3463 "Independent of KUBO_TRANSPORT and WANNIER90 Wilson/Z2/Chern or inversion-TQC analysis. "// &
3464 "Reports a finite-basis local index and protection gap, not a bulk-gap certificate. "// &
3465 "Requires convergence with basis, system size, and position/energy scale.", &
3467 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
3468 description=
"Activate post-SCF spectral localizer analysis.", &
3469 default_l_val=.false., lone_keyword_l_val=.true.)
3473 description=
"FINITE uses Cartesian first moments for PERIODIC NONE. PERIODIC uses "// &
3474 "analytic cos(G.r)/sin(G.r) integrals on a two- or three-dimensional Born-von-Karman torus. "// &
3475 "MP_GRID controls its size; this is not an independent localizer at each k.", &
3476 enum_c_vals=
s2a(
"FINITE",
"PERIODIC"), enum_i_vals=[0, 1], default_i_val=0)
3480 description=
"Full Gamma-centered analysis mesh for FORMULATION PERIODIC. "// &
3481 "Equivalent to a Gamma supercell with these replication factors, at the frozen SCF potential. "// &
3482 "Independent of the SCF KPOINTS scheme or symmetry reduction. Nonperiodic directions "// &
3483 "must have size one. MAX_AO applies to the entire torus, not the primitive cell.", &
3484 type_of_var=
integer_t, n_var=3, default_i_vals=[1, 1, 1])
3488 description=
"Positive energy scales for FORMULATION PERIODIC, multiplying the "// &
3489 "dimensionless trigonometric coordinates. Choose on the scale of H-ENERGY and "// &
3490 "check size/basis/ETA convergence. Replaces KAPPA for this formulation. "// &
3491 "The localizer and reported gaps retain energy units.", &
3492 type_of_var=
real_t, n_var=-1, unit_str=
"hartree", default_r_vals=[1.0_dp])
3496 description=
"Dense LAPACK reference calculation in the AO overlap metric.", &
3497 enum_c_vals=
s2a(
"DENSE"), enum_i_vals=[0], default_i_val=0)
3501 description=
"CHERN evaluates the 2D class A half-signature. Z2 evaluates the "// &
3502 "class AII Pfaffian sign (2D) or chiral-block determinant sign (3D); "// &
3503 "requires SOC and TIME_REVERSAL.", &
3504 enum_c_vals=
s2a(
"CHERN",
"Z2"), enum_i_vals=[0, 1], default_i_val=0)
3508 description=
"Number of localizer position directions, 2 or 3. DIMENSION 3 uses "// &
3509 "all Cartesian moments (FINITE) or all three torus directions (PERIODIC). "// &
3510 "It requires Z2 and SOLVER DENSE; PERIODIC also requires CELL and POISSON PERIODIC XYZ. "// &
3511 "Its strong local Z2 index is not a tuple of weak indices or a 2D slice index.", default_i_val=2)
3515 description=
"Ordered Cartesian directions for FINITE; ordered lattice-vector "// &
3516 "directions for PERIODIC, which must match the two periodic CELL directions. "// &
3517 "Only valid for DIMENSION 2.", &
3518 enum_c_vals=
s2a(
"XY",
"XZ",
"YZ"), enum_i_vals=[1, 2, 3], default_i_val=1)
3522 description=
"Cartesian query position in the coordinate frame of SUBSYS/COORD. "// &
3523 "For FINITE with DIMENSION 2 the component perpendicular to PLANE is ignored. For PERIODIC "// &
3524 "the reciprocal-cell phase G.r0 is used, including for oblique cells. Repeat for scans.", &
3525 type_of_var=
real_t, n_var=3, repeats=.true., unit_str=
"bohr", &
3526 default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp])
3530 description=
"Absolute query energies, without a Fermi-level shift. All combinations "// &
3531 "of POSITION, ENERGY and KAPPA (FINITE) or ETA (PERIODIC) are evaluated.", &
3532 type_of_var=
real_t, n_var=-1, unit_str=
"hartree", default_r_vals=[0.0_dp])
3536 description=
"Positive energy/length scales. The default is not a converged choice; "// &
3537 "check a plateau under changes of KAPPA and system size.", &
3538 type_of_var=
real_t, n_var=-1, unit_str=
"hartree*bohr^-1", default_r_vals=[0.01_dp])
3541 CALL keyword_create(keyword, __location__, name=
"SPIN_CHANNEL", &
3542 description=
"Scalar collinear spin channel, as in WANNIER90. SOC requires restricted channel 1.", &
3547 description=
"Add the GTH pseudopotential SOC operator to the restricted SCF Hamiltonian "// &
3548 "in the complete AO spinor space. Requires SOC parameters in the potentials; "// &
3549 "does not perform a self-consistent noncollinear calculation.", default_l_val=.false.)
3552 CALL keyword_create(keyword, __location__, name=
"TIME_REVERSAL", &
3553 description=
"Assert physical spinful time reversal for Z2, as in WANNIER90. "// &
3554 "The Hamiltonian, metric and position operators are also checked numerically.", &
3555 default_l_val=.false.)
3559 description=
"Absolute localizer-gap threshold below which the index is unresolved. "// &
3560 "An additional roundoff threshold is always applied.", unit_str=
"hartree", &
3561 default_r_val=1.e-8_dp)
3565 description=
"Minimum smallest/largest AO-overlap eigenvalue ratio. "// &
3566 "Ill-conditioned bases are rejected, not silently truncated.", default_r_val=1.e-10_dp)
3569 CALL keyword_create(keyword, __location__, name=
"SPECTRAL_FLATTENING", &
3570 description=
"Replace H-ENERGY*S by FLATTENING_SCALE*S*sign(S^-1*(H-ENERGY*S)). "// &
3571 "Retains the full occupied and empty AO subspaces and leaves position operators unchanged. "// &
3572 "Requires a positive metric and a resolved electronic gap, checked before flattening. "// &
3573 "The resulting finite localizer can have a different index and gap from the unflattened one. "// &
3574 "No bulk-index or convergence certificate is implied. Computed once per ENERGY, using "// &
3575 "complete Bloch blocks for periodic tori or DBCSR matrix iterations for finite systems. "// &
3576 "Both retain the original AO basis and can increase fill-in.", default_l_val=.false.)
3579 CALL keyword_create(keyword, __location__, name=
"FLATTENING_SCALE", &
3580 description=
"Positive energy assigned to the positive bands by SPECTRAL_FLATTENING; "// &
3581 "negative bands receive its negative. ETA or KAPPA and output gaps retain their normal "// &
3582 "units but refer to this flattened Hamiltonian, not to the original band dispersion.", &
3583 unit_str=
"hartree", default_r_val=1.0_dp)
3586 CALL keyword_create(keyword, __location__, name=
"EPS_ELECTRONIC_GAP", &
3587 description=
"Minimum resolved distance from ENERGY to the original generalized "// &
3588 "Hamiltonian spectrum before SPECTRAL_FLATTENING. Additional roundoff bounds apply. "// &
3589 "Separate from EPS_GAP, which applies to the final localizer.", &
3590 unit_str=
"hartree", default_r_val=1.e-8_dp)
3593 CALL keyword_create(keyword, __location__, name=
"EPS_FLATTENING", &
3594 description=
"Tolerance for the inverse and sign-square Frobenius residuals and "// &
3595 "relative complex-structure/Hermiticity residuals of the DBCSR matrix iterations. "// &
3596 "For the periodic Bloch path, checks translation covariance, metric orthonormality, "// &
3597 "eigenproblem residuals and final Hermiticity instead. "// &
3598 "An unconverged result is rejected, not used to report an index.", default_r_val=1.e-9_dp)
3601 CALL keyword_create(keyword, __location__, name=
"MATRIX_TOLERANCE", &
3602 description=
"Relative Hermiticity and time-reversal residual tolerance.", default_r_val=1.e-9_dp)
3606 description=
"Safety limit on scalar AO dimension for the dense solver. "// &
3607 "DENSE uses replicated localizers and source-rank diagonalization, "// &
3608 "quadratic memory and cubic runtime; the SOC Hermitian localizer has dimension "// &
3609 "4*NAO (DIMENSION 2) or 8*NAO (DIMENSION 3).", default_i_val=512)
3612 END SUBROUTINE create_spectral_localizer_section
3618 SUBROUTINE create_quadratic_pseudospectrum_section(section)
3621 NULLIFY (keyword, print_key)
3622 CALL section_create(section, __location__, name=
"QUADRATIC_PSEUDOSPECTRUM", &
3623 description=
"Joint position/energy localization analysis for GPW/GAPW systems. "// &
3624 "Uses full AO H, S and analytic first moments or periodic trigonometric coordinates. "// &
3625 "No occupied-state projection and no topology index. "// &
3626 "Residuals concern finite-basis projected operators, not exact real-space variances.", &
3628 CALL keyword_create(keyword, __location__, name=
"_SECTION_PARAMETERS_", &
3629 description=
"Activate post-SCF quadratic pseudospectrum analysis.", &
3630 default_l_val=.false., lone_keyword_l_val=.true.)
3634 description=
"FINITE uses Cartesian first moments for isolated systems. PERIODIC uses "// &
3635 "cos(G.r)/sin(G.r) on a Born-von-Karman torus in the periodic CELL directions only. "// &
3636 "Open directions are not localized by PERIODIC. TRANSLATION uses analytic translated "// &
3637 "Gaussian overlaps, with continuum translation norms and explicit AO leakage. Periodic "// &
3638 "TRANSLATION uses periodized AOs on the full MP_GRID torus; finite translations need no KPOINTS. "// &
3639 "ENERGY still refers to the projected AO Hamiltonian; no boundary suppression is applied.", &
3640 enum_c_vals=
s2a(
"FINITE",
"PERIODIC",
"TRANSLATION"), enum_i_vals=[0, 1, 2], default_i_val=0)
3643 CALL keyword_create(keyword, __location__, name=
"TRANSLATION_VECTOR", &
3644 description=
"Cartesian vector a in the input coordinate frame, for U(a) psi(r) = psi(r+a). "// &
3645 "Repeat for each equally weighted translation. Only with FORMULATION TRANSLATION. "// &
3646 "Choose directions and lengths deliberately; this defines a momentum-resolution metric.", &
3647 type_of_var=
real_t, n_var=3, repeats=.true., unit_str=
"bohr")
3651 description=
"Cartesian momentum query k in the input frame; phase is exp(i k.a), "// &
3652 "without an additional 2*pi. Repeat for scans. Only with FORMULATION TRANSLATION.", &
3653 type_of_var=
real_t, n_var=3, repeats=.true., unit_str=
"bohr^-1", &
3654 default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp])
3657 CALL keyword_create(keyword, __location__, name=
"TRANSLATION_SCALE", &
3658 description=
"Positive energy scales for dimensionless full translation residuals. "// &
3659 "Every WAVE_VECTOR/ENERGY/TRANSLATION_SCALE combination is evaluated. "// &
3660 "Only with FORMULATION TRANSLATION, replacing the energy/length-valued KAPPA.", &
3661 type_of_var=
real_t, n_var=-1, unit_str=
"hartree", default_r_vals=[1.0_dp])
3665 description=
"Full Gamma-centered mesh for PERIODIC or periodic TRANSLATION, independent "// &
3666 "of SCF symmetry reduction. Equivalent to a Gamma supercell at the frozen SCF potential. "// &
3667 "Nonperiodic directions must be one; MAX_AO bounds the entire torus.", &
3668 type_of_var=
integer_t, n_var=3, default_i_vals=[1, 1, 1])
3672 description=
"Dense LAPACK reference calculation in the AO overlap metric.", &
3673 enum_c_vals=
s2a(
"DENSE"), enum_i_vals=[0], default_i_val=0)
3677 description=
"Query position in the SUBSYS/COORD frame. Repeat for spatial scans.", &
3678 type_of_var=
real_t, n_var=3, repeats=.true., unit_str=
"bohr", &
3679 default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp])
3683 description=
"Absolute query energies; every POSITION/ENERGY/KAPPA combination is evaluated.", &
3684 type_of_var=
real_t, n_var=-1, unit_str=
"hartree", default_r_vals=[0.0_dp])
3688 description=
"Positive energy/length scales for Cartesian residuals (FINITE) or "// &
3689 "periodic chord residuals divided by reciprocal-vector norms (PERIODIC). "// &
3690 "Check basis, system-size and KAPPA convergence.", &
3691 type_of_var=
real_t, n_var=-1, unit_str=
"hartree*bohr^-1", default_r_vals=[0.01_dp])
3694 CALL keyword_create(keyword, __location__, name=
"NSTATES", default_i_val=1, &
3695 description=
"Number of lowest quadratic-operator eigenstates, S-normalized.")
3698 CALL keyword_create(keyword, __location__, name=
"EPS_EIGEN", default_r_val=1.e-8_dp, &
3699 description=
"Convergence criterion: S-inverse residual norm <= EPS_EIGEN times "// &
3700 "max(1,abs(eigenvalue)), with eigenvalues in atomic units of energy squared.")
3703 CALL keyword_create(keyword, __location__, name=
"EPS_METRIC", default_r_val=1.e-10_dp, &
3704 description=
"Minimum AO metric eigenvalue ratio. "// &
3705 "Ill-conditioned directions are rejected, not silently discarded.")
3708 CALL keyword_create(keyword, __location__, name=
"MAX_AO", default_i_val=512, &
3709 description=
"Scalar AO safety limit for the dense solver, including all periodic torus cells. "// &
3710 "Increase deliberately for large systems. "// &
3711 "SOC doubles the operator dimension; DENSE uses quadratic memory.")
3714 CALL keyword_create(keyword, __location__, name=
"SPIN_CHANNEL", default_i_val=1, &
3715 description=
"Collinear scalar spin channel. SOC requires a restricted SCF and channel 1.")
3718 CALL keyword_create(keyword, __location__, name=
"SOC", default_l_val=.false., &
3719 description=
"Add GTH SOC to the restricted converged AO Hamiltonian. Requires SOC "// &
3720 "pseudopotentials; not a self-consistent noncollinear calculation.")
3724 description=
"S-normalized complex AO coefficients, scalar-AO order with "// &
3725 "spin-up followed by spin-down for SOC. These are quadratic-operator states, "// &
3726 "with cell-major AO ordering within each spin block for PERIODIC. "// &
3727 "not Hamiltonian eigenstates. Degenerate states are gauge dependent.", &
3731 END SUBROUTINE create_quadratic_pseudospectrum_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 kuhneheskeprodan2020
integer, save, public kondov2007
integer, save, public tyagi2024
integer, save, public ditler2021
integer, save, public luber2014
integer, save, public iannuzzi2005
integer, save, public duchemin2019
integer, save, public sebastiani2001
integer, save, public wong2026
integer, save, public dixon2023
integer, save, public hernandez2025
integer, save, public putrino2002
integer, save, public graml2024
integer, save, public hartwigsen1998
integer, save, public vazdacruz2021
integer, save, public hedin1965
integer, save, public hanasaki2025
integer, save, public duchemin2021
integer, save, public doll2025
integer, save, public futera2017
integer, save, public wilhelm2021
integer, save, public cerjan2023
integer, save, public hybertsen1986
integer, save, public tyagi2026
integer, save, public loring2015
integer, save, public ditler2022
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
subroutine, public cp_print_key_section_create(print_key_section, location, name, description, print_level, each_iter_names, each_iter_values, add_last, filename, common_iter_levels, citations, unit_str, do_backup)
creates a print_key section
integer, parameter, public debug_print_level
integer, parameter, public low_print_level
integer, parameter, public medium_print_level
integer, parameter, public high_print_level
integer, parameter, public add_last_numeric
integer, parameter, public silent_print_level
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.