30#include "./base/base_uses.f90"
35 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'input_cp2k_kpoints'
83 cpassert(.NOT.
ASSOCIATED(section))
85 description=
"Controls Brillouin-zone sampling with k-points.", &
86 n_keywords=1, n_subsections=0, repeats=.false.)
90 description=
"K-point generation scheme. Available options are:"//
newline// &
93 "- `MONKHORST-PACK`"//
newline// &
97 "For `MONKHORST-PACK` the number of k points in all 3 dimensions has to"// &
98 " be supplied along with the keyword. For `MACDONALD` also the list of shifts."// &
99 " E.g. `MONKHORST-PACK 12 12 8`, `MACDONALD 4 4 4 0.25 0.25 0.25`."// &
100 " `GENERAL` uses explicitly listed k-points. If symmetry reduction is requested,"// &
101 " the explicit set must be equally weighted and closed under the selected operations.", &
102 usage=
"SCHEME {KPMETHOD} {integer} {integer} ..", &
104 n_var=-1, type_of_var=
char_t)
108 CALL keyword_create(keyword, __location__, name=
"GAMMA_CENTERED", &
109 description=
"Generate a gamma-centered variant of the "// &
110 "Monkhorst-Pack or MacDonald mesh. This shifts the original mesh so "// &
111 "it can include the Gamma point, and makes sense only when an "// &
112 "even number of subdivisions is used. For MacDonald meshes, the "// &
113 "explicit shift is applied after the gamma-centering shift.", &
114 usage=
"GAMMA_CENTERED <LOGICAL>", &
115 default_l_val=.false., lone_keyword_l_val=.true.)
120 description=
"Specify kpoint coordinates and weight. ", &
121 usage=
"KPOINT x y z w", repeats=.true., &
122 n_var=4, type_of_var=
real_t)
127 description=
"Special k-points are defined either in units"// &
128 " of reciprocal lattice vectors or in Cartesian coordinates in units of 2Pi/len."// &
129 " B_VECTOR: in multiples of the reciprocal lattice vectors (b)."// &
130 " CART_ANGSTROM: In units of 2*Pi/Angstrom."// &
131 " CART_BOHR: In units of 2*Pi/Bohr.", &
132 usage=
"UNITS <value>", type_of_var=
char_t, default_c_val=
"B_VECTOR")
137 description=
"Use symmetry to reduce the number of kpoints.", &
138 usage=
"SYMMETRY <LOGICAL>", &
139 default_l_val=.false., lone_keyword_l_val=.true.)
144 description=
"Use the full, non-symmetry-reduced k-point grid.", &
145 usage=
"FULL_GRID <LOGICAL>", &
146 default_l_val=.false., lone_keyword_l_val=.true.)
151 description=
"Control the FFT-based transformation of real-space matrices "// &
152 "to complete regular k-point grids. AUTO uses the lattice FFT for at least "// &
153 "27 k points when the grid and memory requirements are satisfied. ON bypasses "// &
154 "this performance threshold. OFF always uses the established direct phase sum. "// &
155 "Unsupported, incomplete, or oversized grids retain the direct fallback.", &
156 usage=
"LATTICE_FFT AUTO", type_of_var=
enum_t, &
157 enum_c_vals=
s2a(
"AUTO",
"ON",
"OFF"), &
159 enum_desc=
s2a(
"Select the FFT from a conservative cost threshold.", &
160 "Prefer the FFT whenever the grid and memory checks allow it.", &
161 "Always use the direct real-cell to k-point transform."), &
166 CALL keyword_create(keyword, __location__, name=
"INVERSION_SYMMETRY_ONLY", &
167 description=
"Restrict k-point reduction to k-space inversion "// &
168 "(time-reversal) symmetry.", &
169 usage=
"INVERSION_SYMMETRY_ONLY <LOGICAL>", &
170 default_l_val=.false., lone_keyword_l_val=.true.)
174 CALL keyword_create(keyword, __location__, name=
"DEBUG_FULL_KPOINT_SYMMETRY", &
175 description=
"Use full atomic k-point symmetry also for DEBUG finite-difference "// &
176 "points. This is enabled by default so analytical and finite-difference "// &
177 "evaluations use the symmetry of their current geometry. Disable it to restrict "// &
178 "DEBUG finite-difference energies to inversion/time-reversal symmetry.", &
179 usage=
"DEBUG_FULL_KPOINT_SYMMETRY <LOGICAL>", &
180 default_l_val=.true., lone_keyword_l_val=.true.)
184 CALL keyword_create(keyword, __location__, name=
"SYMMETRY_BACKEND", &
185 description=
"Select the backend used to provide and apply atomic "// &
186 "k-point symmetry operations. K290 is the established default. "// &
187 "SPGLIB uses the symmetry operations returned by SPGLIB, including "// &
188 "their fractional translations. This applies to Monkhorst-Pack, MacDonald, and "// &
189 "closed GENERAL k-point sets. If "// &
190 "SYMMETRY_REDUCTION_METHOD is not specified, it follows the selected backend.", &
191 usage=
"SYMMETRY_BACKEND K290", type_of_var=
enum_t, &
192 enum_c_vals=
s2a(
"K290",
"SPGLIB"), &
194 enum_desc=
s2a(
"Use the existing K290 k-point symmetry backend.", &
195 "Use SPGLIB symmetry operations as k-point symmetry backend."), &
200 CALL keyword_create(keyword, __location__, name=
"SYMMETRY_REDUCTION_METHOD", &
201 description=
"Select the method used to reduce Monkhorst-Pack and MacDonald "// &
202 "k-point meshes when atomic symmetry is enabled. K290 is the established "// &
203 "default. SPGLIB uses the symmetry operations returned by SPGLIB for the "// &
204 "k-point reduction. GENERAL k-point lists can be reduced when the explicit set is "// &
205 "equally weighted and closed under the selected operations. With "// &
206 "SYMMETRY_BACKEND K290 this can be used as a comparison mode using K290 "// &
207 "operations for SPGLIB-generated mappings.", &
208 usage=
"SYMMETRY_REDUCTION_METHOD K290", type_of_var=
enum_t, &
209 enum_c_vals=
s2a(
"K290",
"SPGLIB"), &
211 enum_desc=
s2a(
"Use the existing K290 k-point symmetry reduction method.", &
212 "Use SPGLIB symmetry operations for k-point reduction."), &
218 description=
"Verbose output information.", &
219 usage=
"VERBOSE <LOGICAL>", &
220 default_l_val=.false., lone_keyword_l_val=.true.)
224 CALL keyword_create(keyword, __location__, name=
"EPS_SYMMETRY", variants=[
"EPS_GEO"], &
225 description=
"Accuracy in k-point symmetry determination."//
newline// &
226 "EPS_GEO is accepted as an alias.", &
227 usage=
"EPS_SYMMETRY <real>", &
228 default_r_val=1.0e-6_dp)
232 CALL keyword_create(keyword, __location__, name=
"PARALLEL_GROUP_SIZE", &
233 description=
"Number of MPI processes to be used for a single k-point."// &
234 " This number must divide the total number of processes."// &
235 " The number of groups must divide the total number of kpoints."// &
236 " Value=-1 (smallest possible number of processes per group, satisfying the constraints)."// &
237 " Value=0 (all processes)."// &
238 " Value=n (exactly n processes).", &
239 usage=
"PARALLEL_GROUP_SIZE <integer>", &
244 CALL keyword_create(keyword, __location__, name=
"WAVEFUNCTIONS", &
245 description=
"Select whether real or complex wavefunctions should be used "// &
246 "when allowed by the k-point set. REAL wavefunctions can only represent "// &
247 "Gamma or special k-points and symmetry operations with real Bloch phases. "// &
248 "Use COMPLEX for general atomic k-point symmetries with nontrivial phases.", &
249 usage=
"WAVEFUNCTIONS REAL", &
251 enum_c_vals=
s2a(
"REAL",
"COMPLEX"), &
252 enum_desc=
s2a(
"Use real wavefunctions (if possible by kpoints specified).", &
253 "Use complex wavefunctions (default)."), &
268 CHARACTER(LEN=*),
OPTIONAL :: section_name
270 CHARACTER(len=default_path_length) :: my_section_name
273 IF (
PRESENT(section_name))
THEN
274 my_section_name = section_name
276 my_section_name =
"KPOINT_SET"
279 cpassert(.NOT.
ASSOCIATED(section))
280 CALL section_create(section, __location__, name=my_section_name, &
281 description=
"Specifies a k-point line to be calculated.", &
282 n_keywords=0, n_subsections=0, repeats=.true.)
285 CALL keyword_create(keyword, __location__, name=
"SPECIAL_POINT", &
286 description=
"Name and coordinates of a special k-point", &
287 usage=
"SPECIAL_POINT GAMMA 0.0 0.0 0.0", n_var=-1, type_of_var=
char_t, repeats=.true.)
292 description=
"Number of k-points along the line.", &
298 description=
"Special k-points are defined either in units"// &
299 " of reciprocal lattice vectors or in Cartesian coordinates in units of 2Pi/len."// &
300 " B_VECTOR: in multiples of the reciprocal lattice vectors (b)."// &
301 " CART_ANGSTROM: In units of 2*Pi/Angstrom."// &
302 " CART_BOHR: In units of 2*Pi/Bohr.", &
303 usage=
"UNITS <value>", type_of_var=
char_t, default_c_val=
"B_VECTOR")
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public monkhorst1976
integer, save, public macdonald1978
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_path_length
Utilities for string manipulations.
character(len=1), parameter, public newline