Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 :
8 : ! **************************************************************************************************
9 : !> \brief input section for MP2
10 : !> \par History
11 : !> 05.2011 created
12 : !> \author MDB
13 : ! **************************************************************************************************
14 : MODULE input_cp2k_mp2
15 : USE bibliography, ONLY: &
16 : Bates2013, DelBen2012, DelBen2013, DelBen2015, DelBen2015b, Rybkin2016, Wilhelm2016a, &
17 : Wilhelm2016b, Wilhelm2017, Wilhelm2018, Stein2022, Stein2024, Bussy2023
18 : USE cp_eri_mme_interface, ONLY: create_eri_mme_section
19 : USE cp_output_handling, ONLY: add_last_numeric, &
20 : cp_print_key_section_create, &
21 : debug_print_level, &
22 : high_print_level, &
23 : low_print_level, &
24 : medium_print_level, &
25 : silent_print_level
26 : USE cp_units, ONLY: cp_unit_to_cp2k
27 : USE input_constants, ONLY: &
28 : bse_fulldiag, bse_iterdiag, bse_tda, bse_abba, bse_both, &
29 : bse_screening_w0, bse_screening_tdhf, bse_screening_rpa, bse_screening_alpha, &
30 : bse_iter_both_cond, bse_iter_en_cond, bse_iter_res_cond, bse_singlet, &
31 : bse_triplet, do_eri_gpw, do_eri_mme, do_eri_os, do_potential_coulomb, do_potential_id, &
32 : do_potential_long, do_potential_mix_cl, do_potential_short, do_potential_truncated, &
33 : do_potential_tshpsc, eri_default, gaussian, gw_no_print_exx, gw_pade_approx, gw_print_exx, &
34 : gw_read_exx, gw_skip_for_regtest, gw_two_pole_model, kp_weights_W_auto, &
35 : kp_weights_W_tailored, kp_weights_W_uniform, mp2_method_direct, mp2_method_gpw, &
36 : mp2_method_none, numerical, ot_precond_full_all, ot_precond_full_kinetic, &
37 : ot_precond_full_single, ot_precond_full_single_inverse, ot_precond_none, &
38 : ot_precond_s_inverse, ri_default, ri_rpa_g0w0_crossing_bisection, &
39 : ri_rpa_g0w0_crossing_newton, ri_rpa_g0w0_crossing_z_shot, soc_lda, soc_none, soc_pbe, &
40 : wfc_mm_style_gemm, wfc_mm_style_syrk, z_solver_cg, z_solver_pople, z_solver_richardson, &
41 : z_solver_sd, rpa_exchange_none, rpa_exchange_axk, rpa_exchange_sosex, G0W0, evGW0, evGW, &
42 : sigma_none, sigma_PBE0_S1, sigma_PBE0_S2, sigma_PBE_S1, sigma_PBE_S2
43 : USE input_cp2k_hfx, ONLY: create_hfx_section
44 : USE input_cp2k_kpoints, ONLY: create_kpoint_set_section
45 : USE input_keyword_types, ONLY: keyword_create, &
46 : keyword_release, &
47 : keyword_type
48 : USE input_section_types, ONLY: section_add_keyword, &
49 : section_add_subsection, &
50 : section_create, &
51 : section_release, &
52 : section_type
53 :
54 : USE input_val_types, ONLY: char_t, &
55 : integer_t, &
56 : logical_t, &
57 : real_t
58 : USE kinds, ONLY: dp
59 : USE string_utilities, ONLY: newline, &
60 : s2a
61 : #include "./base/base_uses.f90"
62 :
63 : IMPLICIT NONE
64 : PRIVATE
65 :
66 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_mp2'
67 :
68 : PUBLIC :: create_mp2_section
69 :
70 : CONTAINS
71 :
72 : ! **************************************************************************************************
73 : !> \brief creates the input section for the mp2 part
74 : !> \param section the section to create
75 : !> \author MDB
76 : ! **************************************************************************************************
77 11116 : SUBROUTINE create_mp2_section(section)
78 : TYPE(section_type), POINTER :: section
79 :
80 : TYPE(keyword_type), POINTER :: keyword
81 : TYPE(section_type), POINTER :: print_key, subsection
82 :
83 11116 : CPASSERT(.NOT. ASSOCIATED(section))
84 : CALL section_create(section, __LOCATION__, name="WF_CORRELATION", &
85 : description="Controls wavefunction-based correlation methods such as MP2, "// &
86 : "RI-MP2, RI-SOS-MP2, RI-RPA, and GW inside RI-RPA.", &
87 : n_keywords=4, n_subsections=7, repeats=.TRUE., &
88 : citations=[DelBen2012, DelBen2013, DelBen2015, DelBen2015b, Rybkin2016, &
89 : Wilhelm2016a, Wilhelm2016b, Wilhelm2017, Wilhelm2018, Stein2022, &
90 144508 : Stein2024, Bussy2023])
91 :
92 11116 : NULLIFY (keyword, subsection)
93 :
94 : CALL keyword_create( &
95 : keyword, __LOCATION__, &
96 : name="MEMORY", &
97 : description="Maximum allowed total memory usage during MP2 and related WF_CORRELATION methods [MiB].", &
98 : usage="MEMORY 1500 ", &
99 11116 : default_r_val=1.024E+3_dp)
100 11116 : CALL section_add_keyword(section, keyword)
101 11116 : CALL keyword_release(keyword)
102 :
103 : CALL keyword_create( &
104 : keyword, __LOCATION__, &
105 : name="E_GAP", &
106 : description="Gap energy for integration grids in Hartree. Defaults to -1.0 (automatic determination). "// &
107 : "Recommended to set if several RPA or SOS-MP2 gradient calculations are requested or to be restarted. "// &
108 : "In this way, differences of integration grids across different runs are removed as CP2K "// &
109 : "does not include derivatives thereof.", &
110 : usage="E_GAP 0.5", &
111 11116 : default_r_val=-1.0_dp)
112 11116 : CALL section_add_keyword(section, keyword)
113 11116 : CALL keyword_release(keyword)
114 :
115 : CALL keyword_create( &
116 : keyword, __LOCATION__, &
117 : name="E_RANGE", &
118 : description="Energy range (ratio of largest and smallest) energy difference "// &
119 : "of unoccupied and occupied orbitals for integration grids. Defaults to 0.0 (automatic determination). "// &
120 : "Recommended to set if several RPA or SOS-MP2 gradient calculations are requested or to be restarted. "// &
121 : "In this way, differences of integration grids across different runs are removed as CP2K "// &
122 : "does not include derivatives thereof.", &
123 : usage="E_RANGE 10.0", &
124 11116 : default_r_val=-1.0_dp)
125 11116 : CALL section_add_keyword(section, keyword)
126 11116 : CALL keyword_release(keyword)
127 :
128 : CALL keyword_create( &
129 : keyword, __LOCATION__, &
130 : name="SCALE_S", &
131 : description="Scaling factor of the singlet energy component (opposite spin, OS) of the "// &
132 : "MP2, RI-MP2 and SOS-MP2 correlation energy. ", &
133 : usage="SCALE_S 1.0", &
134 11116 : default_r_val=1.0_dp)
135 11116 : CALL section_add_keyword(section, keyword)
136 11116 : CALL keyword_release(keyword)
137 :
138 : CALL keyword_create( &
139 : keyword, __LOCATION__, &
140 : name="SCALE_T", &
141 : description="Scaling factor of the triplet energy component (same spin, SS) of the MP2 "// &
142 : "and RI-MP2 correlation energy.", &
143 : usage="SCALE_T 1.0", &
144 11116 : default_r_val=1.0_dp)
145 11116 : CALL section_add_keyword(section, keyword)
146 11116 : CALL keyword_release(keyword)
147 :
148 : CALL keyword_create( &
149 : keyword, __LOCATION__, &
150 : name="GROUP_SIZE", &
151 : variants=["NUMBER_PROC"], &
152 : description="Group size used in the computation of GPW and MME integrals and the MP2 correlation energy. "// &
153 : "The group size must be a divisor of the total number of MPI ranks. "// &
154 : "A smaller group size (for example the number of MPI ranks per node) "// &
155 : "accelerates the computation of integrals but a too large group size increases communication costs. "// &
156 : "A too small group size may lead to out of memory.", &
157 : usage="GROUP_SIZE 2", &
158 22232 : default_i_val=1)
159 11116 : CALL section_add_keyword(section, keyword)
160 11116 : CALL keyword_release(keyword)
161 :
162 11116 : NULLIFY (subsection)
163 11116 : CALL create_mp2_details_section(subsection)
164 11116 : CALL section_add_subsection(section, subsection)
165 11116 : CALL section_release(subsection)
166 :
167 11116 : CALL create_ri_mp2(subsection)
168 11116 : CALL section_add_subsection(section, subsection)
169 11116 : CALL section_release(subsection)
170 :
171 11116 : CALL create_ri_rpa(subsection)
172 11116 : CALL section_add_subsection(section, subsection)
173 11116 : CALL section_release(subsection)
174 :
175 11116 : CALL create_ri_laplace(subsection)
176 11116 : CALL section_add_subsection(section, subsection)
177 11116 : CALL section_release(subsection)
178 :
179 : ! here we generate an imag. time subsection to use with RPA or Laplace-SOS-MP2
180 11116 : CALL create_low_scaling(subsection)
181 11116 : CALL section_add_subsection(section, subsection)
182 11116 : CALL section_release(subsection)
183 :
184 11116 : CALL create_ri_section(subsection)
185 11116 : CALL section_add_subsection(section, subsection)
186 11116 : CALL section_release(subsection)
187 :
188 11116 : CALL create_integrals_section(subsection)
189 11116 : CALL section_add_subsection(section, subsection)
190 11116 : CALL section_release(subsection)
191 :
192 11116 : CALL create_canonical_gradients(subsection)
193 11116 : CALL section_add_subsection(section, subsection)
194 11116 : CALL section_release(subsection)
195 :
196 11116 : NULLIFY (print_key)
197 : CALL cp_print_key_section_create(print_key, __LOCATION__, "PRINT", &
198 : description="Controls the printing basic info about WFC methods", &
199 11116 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
200 11116 : CALL section_add_subsection(section, print_key)
201 11116 : CALL section_release(print_key)
202 :
203 11116 : END SUBROUTINE create_mp2_section
204 :
205 : ! **************************************************************************************************
206 : !> \brief ...
207 : !> \param section ...
208 : ! **************************************************************************************************
209 11116 : SUBROUTINE create_mp2_details_section(section)
210 : TYPE(section_type), POINTER :: section
211 :
212 : TYPE(keyword_type), POINTER :: keyword
213 :
214 11116 : CPASSERT(.NOT. ASSOCIATED(section))
215 : CALL section_create(section, __LOCATION__, name="MP2", &
216 : description="Parameters influencing MP2 (non-RI).", &
217 11116 : n_keywords=3, n_subsections=0, repeats=.FALSE.)
218 :
219 11116 : NULLIFY (keyword)
220 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
221 : description="Activates MP2 calculations.", &
222 : usage="&MP2 .TRUE.", &
223 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
224 11116 : CALL section_add_keyword(section, keyword)
225 11116 : CALL keyword_release(keyword)
226 :
227 : CALL keyword_create( &
228 : keyword, __LOCATION__, &
229 : name="METHOD", &
230 : citations=[DelBen2012, DelBen2013], &
231 : description="Selects the implementation used to compute the canonical MP2 energy.", &
232 : usage="METHOD MP2_GPW", &
233 : enum_c_vals=s2a("NONE", "DIRECT_CANONICAL", "MP2_GPW"), &
234 : enum_i_vals=[mp2_method_none, mp2_method_direct, mp2_method_gpw], &
235 : enum_desc=s2a("Skip MP2 calculation.", &
236 : "Use the direct canonical MP2 approach.", &
237 : "Use the GPW approach to MP2 integrals."), &
238 33348 : default_i_val=mp2_method_direct)
239 11116 : CALL section_add_keyword(section, keyword)
240 11116 : CALL keyword_release(keyword)
241 :
242 : CALL keyword_create( &
243 : keyword, __LOCATION__, &
244 : name="BIG_SEND", &
245 : description="Influencing the direct canonical MP2 method: Send big "// &
246 : "messages between processes (useful for >48 processors).", &
247 : usage="BIG_SEND", &
248 : default_l_val=.TRUE., &
249 11116 : lone_keyword_l_val=.TRUE.)
250 11116 : CALL section_add_keyword(section, keyword)
251 11116 : CALL keyword_release(keyword)
252 :
253 11116 : END SUBROUTINE create_mp2_details_section
254 :
255 : ! **************************************************************************************************
256 : !> \brief ...
257 : !> \param section ...
258 : ! **************************************************************************************************
259 11116 : SUBROUTINE create_ri_mp2(section)
260 : TYPE(section_type), POINTER :: section
261 :
262 : TYPE(keyword_type), POINTER :: keyword
263 :
264 11116 : CPASSERT(.NOT. ASSOCIATED(section))
265 : CALL section_create(section, __LOCATION__, name="RI_MP2", &
266 : description="Parameters influencing the RI-MP2 method. RI-MP2 supports gradients.", &
267 : n_keywords=3, n_subsections=1, repeats=.FALSE., &
268 22232 : citations=[DelBen2013])
269 :
270 11116 : NULLIFY (keyword)
271 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
272 : description="Activates an RI-MP2 calculation.", &
273 : usage="&RI_MP2 .TRUE.", &
274 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
275 11116 : CALL section_add_keyword(section, keyword)
276 11116 : CALL keyword_release(keyword)
277 :
278 : CALL keyword_create(keyword, __LOCATION__, name="BLOCK_SIZE", &
279 : variants=["MESSAGE_SIZE"], &
280 : description="Determines the blocking used for communication in RI-MP2. Larger BLOCK_SIZE "// &
281 : "reduces communication but requires more memory. The default (-1) is automatic.", &
282 : usage="BLOCK_SIZE 2", &
283 22232 : default_i_val=-1)
284 11116 : CALL section_add_keyword(section, keyword)
285 11116 : CALL keyword_release(keyword)
286 :
287 : CALL keyword_create(keyword, __LOCATION__, name="NUMBER_INTEGRATION_GROUPS", &
288 : description="Sets the number of integration groups of the communication scheme in RI-MP2. "// &
289 : "Integrals will be replicated such that each integration group has all integrals available. "// &
290 : "Must be a divisor of the number of subgroups (see GROUP_SIZE keyword in the WF_CORRELATION "// &
291 : "section. Smaller groups reduce the communication costs but increase the memory developments. "// &
292 : "If the provided value is non-positive or not a divisor of the number of subgroups, "// &
293 : "the number of integration groups is determined automatically (default).", &
294 : usage="NUMBER_INTEGRATION_GROUPS 2", &
295 11116 : default_i_val=-1)
296 11116 : CALL section_add_keyword(section, keyword)
297 11116 : CALL keyword_release(keyword)
298 :
299 : CALL keyword_create( &
300 : keyword, __LOCATION__, &
301 : name="PRINT_DGEMM_INFO", &
302 : description="Print details about all DGEMM calls.", &
303 : lone_keyword_l_val=.TRUE., &
304 11116 : default_l_val=.FALSE.)
305 11116 : CALL section_add_keyword(section, keyword)
306 11116 : CALL keyword_release(keyword)
307 :
308 11116 : END SUBROUTINE create_ri_mp2
309 :
310 : ! **************************************************************************************************
311 : !> \brief ...
312 : !> \param section ...
313 : ! **************************************************************************************************
314 11116 : SUBROUTINE create_opt_ri_basis(section)
315 : TYPE(section_type), POINTER :: section
316 :
317 : TYPE(keyword_type), POINTER :: keyword
318 :
319 11116 : CPASSERT(.NOT. ASSOCIATED(section))
320 : CALL section_create(section, __LOCATION__, name="OPT_RI_BASIS", &
321 : description="Parameters influencing the optimization of the RI MP2 basis. "// &
322 : "Only exponents of non-contracted auxiliary basis can be optimized. "// &
323 : "An initial RI auxiliary basis has to be specified.", &
324 : n_keywords=6, n_subsections=0, repeats=.FALSE., &
325 22232 : citations=[DelBen2013])
326 11116 : NULLIFY (keyword)
327 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
328 : description="Putting the &OPT_RI_BASIS section activates optimization of RI basis.", &
329 : usage="&OPT_RI_BASIS .TRUE.", &
330 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
331 11116 : CALL section_add_keyword(section, keyword)
332 11116 : CALL keyword_release(keyword)
333 :
334 : CALL keyword_create(keyword, __LOCATION__, name="DELTA_I_REL", &
335 : variants=["DI_REL"], &
336 : description="Target accuracy in the relative deviation of the amplitudes calculated with "// &
337 : "and without RI approximation, (more details in Chem.Phys.Lett.294(1998)143).", &
338 : usage="DELTA_I_REL 1.0E-6_dp", &
339 22232 : default_r_val=1.0E-6_dp)
340 11116 : CALL section_add_keyword(section, keyword)
341 11116 : CALL keyword_release(keyword)
342 :
343 : CALL keyword_create(keyword, __LOCATION__, name="DELTA_RI", &
344 : variants=["DRI"], &
345 : description="Target accuracy in the absolute difference between the RI-MP2 "// &
346 : "and the exact MP2 energy, DRI=ABS(E_MP2-E_RI-MP2).", &
347 : usage="DELTA_RI 1.0E-6_dp", &
348 22232 : default_r_val=5.0E-6_dp)
349 11116 : CALL section_add_keyword(section, keyword)
350 11116 : CALL keyword_release(keyword)
351 :
352 : CALL keyword_create(keyword, __LOCATION__, name="EPS_DERIV", &
353 : variants=["EPS_NUM_DERIV"], &
354 : description="The derivatives of the MP2 energy with respect to the "// &
355 : "exponents of the basis are calculated numerically. "// &
356 : "The change in the exponent a_i employed for the numerical evaluation "// &
357 : "is defined as h_i=EPS_DERIV*a_i.", &
358 : usage="EPS_DERIV 1.0E-3_dp", &
359 22232 : default_r_val=1.0E-3_dp)
360 11116 : CALL section_add_keyword(section, keyword)
361 11116 : CALL keyword_release(keyword)
362 :
363 : CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
364 : variants=["MAX_NUM_ITER"], &
365 : description="Specifies the maximum number of steps in the RI basis optimization.", &
366 : usage="MAX_ITER 100", &
367 22232 : default_i_val=50)
368 11116 : CALL section_add_keyword(section, keyword)
369 11116 : CALL keyword_release(keyword)
370 :
371 : CALL keyword_create(keyword, __LOCATION__, name="NUM_FUNC", &
372 : description="Specifies the number of function, for each angular momentum (s, p, d ...), "// &
373 : "employed in the automatically generated initial guess. "// &
374 : "This will be effective only if RI_AUX_BASIS_SET in the KIND section is not specified.", &
375 : usage="NUM_FUNC {number of s func.} {number of p func.} ...", &
376 11116 : n_var=-1, default_i_vals=[-1], type_of_var=integer_t)
377 11116 : CALL section_add_keyword(section, keyword)
378 11116 : CALL keyword_release(keyword)
379 :
380 : CALL keyword_create(keyword, __LOCATION__, name="BASIS_SIZE", &
381 : description="Specifies the size of the auxiliary basis set automatically "// &
382 : "generated as initial guess. This will be effective only if RI_AUX_BASIS_SET "// &
383 : "in the KIND section and NUM_FUNC are not specified.", &
384 : usage="BASIS_SIZE (MEDIUM|LARGE|VERY_LARGE)", &
385 : enum_c_vals=s2a("MEDIUM", "LARGE", "VERY_LARGE"), &
386 : enum_i_vals=[0, 1, 2], &
387 11116 : default_i_val=0)
388 11116 : CALL section_add_keyword(section, keyword)
389 11116 : CALL keyword_release(keyword)
390 :
391 11116 : END SUBROUTINE create_opt_ri_basis
392 :
393 : ! **************************************************************************************************
394 : !> \brief ...
395 : !> \param section ...
396 : ! **************************************************************************************************
397 11116 : SUBROUTINE create_ri_laplace(section)
398 : TYPE(section_type), POINTER :: section
399 :
400 : TYPE(keyword_type), POINTER :: keyword
401 :
402 11116 : CPASSERT(.NOT. ASSOCIATED(section))
403 : CALL section_create(section, __LOCATION__, name="RI_SOS_MP2", &
404 : description="Parameters influencing the RI-SOS-MP2-Laplace method", &
405 : n_keywords=3, n_subsections=1, repeats=.FALSE., &
406 22232 : citations=[DelBen2013])
407 :
408 11116 : NULLIFY (keyword)
409 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
410 : description="Putting the &RI_SOS_MP2 section activates RI-SOS-MP2 calculation.", &
411 : usage="&RI_SOS_MP2 .TRUE.", &
412 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
413 11116 : CALL section_add_keyword(section, keyword)
414 11116 : CALL keyword_release(keyword)
415 :
416 : CALL keyword_create( &
417 : keyword, __LOCATION__, name="QUADRATURE_POINTS", &
418 : variants=["LAPLACE_NUM_QUAD_POINTS"], &
419 : description="Number of quadrature points for the numerical integration in the RI-SOS-MP2-Laplace method.", &
420 : usage="QUADRATURE_POINTS 6", &
421 22232 : default_i_val=5)
422 11116 : CALL section_add_keyword(section, keyword)
423 11116 : CALL keyword_release(keyword)
424 :
425 : CALL keyword_create( &
426 : keyword, __LOCATION__, name="NUM_INTEG_GROUPS", &
427 : description="Number of groups for the integration in the Laplace method. Each groups processes "// &
428 : "the same amount of quadrature points. It must be a divisor of the number of quadrature points and "// &
429 : "NUM_INTEG_GROUPS*GROUP_SIZE must be a divisor of the total number of processes. The default (-1) is automatic.", &
430 : usage="NUM_INTEG_GROUPS 2", &
431 11116 : default_i_val=-1)
432 11116 : CALL section_add_keyword(section, keyword)
433 11116 : CALL keyword_release(keyword)
434 :
435 11116 : END SUBROUTINE create_ri_laplace
436 :
437 : ! **************************************************************************************************
438 : !> \brief ...
439 : !> \param section ...
440 : ! **************************************************************************************************
441 11116 : SUBROUTINE create_canonical_gradients(section)
442 : TYPE(section_type), POINTER :: section
443 :
444 : TYPE(keyword_type), POINTER :: keyword
445 : TYPE(section_type), POINTER :: subsection
446 :
447 11116 : CPASSERT(.NOT. ASSOCIATED(section))
448 : CALL section_create(section, __LOCATION__, name="CANONICAL_GRADIENTS", &
449 : description="Parameters influencing gradient calculations of canonical RI methods. "// &
450 : "Ignored if the IM_TIME section is set.", &
451 : n_keywords=3, n_subsections=1, repeats=.FALSE., &
452 55580 : citations=[DelBen2015b, Rybkin2016, Stein2022, Stein2024])
453 :
454 11116 : NULLIFY (subsection, keyword)
455 11116 : CALL create_cphf(subsection)
456 11116 : CALL section_add_subsection(section, subsection)
457 11116 : CALL section_release(subsection)
458 :
459 : CALL keyword_create(keyword, __LOCATION__, name="EPS_CANONICAL", &
460 : description="Threshold under which a given ij or ab pair is considered to be degenerate and "// &
461 : "its contribution to the density matrix is calculated directly. "// &
462 : "Ignored in case of energy-only calculation.", &
463 : usage="EPS_CANONICAL 1.0E-8", type_of_var=real_t, &
464 11116 : default_r_val=1.0E-7_dp)
465 11116 : CALL section_add_keyword(section, keyword)
466 11116 : CALL keyword_release(keyword)
467 :
468 : CALL keyword_create( &
469 : keyword, __LOCATION__, &
470 : name="FREE_HFX_BUFFER", &
471 : description="Free the buffer containing the 4 center integrals used in the Hartree-Fock exchange calculation. "// &
472 : "Ignored for energy-only calculations. May fail.", &
473 : usage="FREE_HFX_BUFFER", &
474 : default_l_val=.FALSE., &
475 11116 : lone_keyword_l_val=.TRUE.)
476 11116 : CALL section_add_keyword(section, keyword)
477 11116 : CALL keyword_release(keyword)
478 :
479 : CALL keyword_create( &
480 : keyword, __LOCATION__, &
481 : name="DOT_PRODUCT_BLKSIZE", &
482 : description="Dot products for the calculation of the RPA/SOS-MP2 density matrices "// &
483 : "are calculated in batches of the size given by this keyword. Larger block sizes "// &
484 : "improve the performance but reduce the numerical accuracy. Recommended block sizes are multiples of the number of "// &
485 : "doubles per cache line (usually 8). Ignored with MP2 gradients. Set it to -1 to prevent blocking.", &
486 11116 : default_i_val=-1)
487 11116 : CALL section_add_keyword(section, keyword)
488 11116 : CALL keyword_release(keyword)
489 :
490 : CALL keyword_create( &
491 : keyword, __LOCATION__, &
492 : name="MAX_PARALLEL_COMM", &
493 : description="Sets the maximum number of parallel communication steps of the non-blocking communication scheme. "// &
494 : "The number of channels is determined from the available memory. If set to a value smaller than one, "// &
495 : "CP2K will use all memory for communication. A value of one enforces the blocking communication scheme "// &
496 : "increasing the communication costs.", &
497 11116 : default_i_val=2)
498 11116 : CALL section_add_keyword(section, keyword)
499 11116 : CALL keyword_release(keyword)
500 :
501 11116 : END SUBROUTINE create_canonical_gradients
502 :
503 : ! **************************************************************************************************
504 : !> \brief ...
505 : !> \param section ...
506 : ! **************************************************************************************************
507 11116 : SUBROUTINE create_ri_rpa(section)
508 : TYPE(section_type), POINTER :: section
509 :
510 : TYPE(keyword_type), POINTER :: keyword
511 : TYPE(section_type), POINTER :: subsection
512 :
513 11116 : CPASSERT(.NOT. ASSOCIATED(section))
514 : CALL section_create(section, __LOCATION__, name="RI_RPA", &
515 : description="Controls RI-RPA and GW calculations.", &
516 : n_keywords=8, n_subsections=4, repeats=.FALSE., &
517 33348 : citations=[DelBen2013, DelBen2015])
518 :
519 11116 : NULLIFY (keyword, subsection)
520 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
521 : description="Activates an RI-RPA calculation.", &
522 : usage="&RI_RPA .TRUE.", &
523 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
524 11116 : CALL section_add_keyword(section, keyword)
525 11116 : CALL keyword_release(keyword)
526 :
527 : CALL keyword_create( &
528 : keyword, __LOCATION__, &
529 : name="SIGMA_FUNCTIONAL", &
530 : description="Determine parametrization for sigma-functional", &
531 : usage="SIGMA_FUNCTIONAL PBE_S2", &
532 : enum_c_vals=s2a("NONE", "PBE0_S1", "PBE0_S2", "PBE_S1", "PBE_S2"), &
533 : enum_i_vals=[sigma_none, sigma_PBE0_S1, sigma_PBE0_S2, sigma_PBE_S1, sigma_PBE_S2], &
534 : enum_desc=s2a("No sigma functional calculation", &
535 : "use parameters based on PBE0 with S1 set.", &
536 : "use parameters based on PBE0 with S2 set.", &
537 : "use parameters based on PBE with S1 set.", &
538 : "use parameters based on PBE with S2 set." &
539 : ), &
540 11116 : default_i_val=sigma_none)
541 11116 : CALL section_add_keyword(section, keyword)
542 11116 : CALL keyword_release(keyword)
543 :
544 : CALL keyword_create(keyword, __LOCATION__, name="QUADRATURE_POINTS", &
545 : variants=["RPA_NUM_QUAD_POINTS"], &
546 : description="Number of quadrature points for the RI-RPA numerical integration.", &
547 : usage="QUADRATURE_POINTS 60", &
548 22232 : default_i_val=40)
549 11116 : CALL section_add_keyword(section, keyword)
550 11116 : CALL keyword_release(keyword)
551 :
552 : CALL keyword_create(keyword, __LOCATION__, name="NUM_INTEG_GROUPS", &
553 : description="Number of groups for the integration in the Laplace method. Each groups processes "// &
554 : "the same amount of quadrature points. It must be a divisor of the number of quadrature points and "// &
555 : "NUM_INTEG_GROUPS*GROUP_SIZE must be a divisor of the total number of processes. "// &
556 : "The default (-1) is automatic.", &
557 : usage="NUM_INTEG_GROUPS 2", &
558 11116 : default_i_val=-1)
559 11116 : CALL section_add_keyword(section, keyword)
560 11116 : CALL keyword_release(keyword)
561 :
562 : CALL keyword_create(keyword, __LOCATION__, &
563 : name="MM_STYLE", &
564 : description="Matrix multiplication style for the Q matrix.", &
565 : usage="MM_STYLE GEMM", &
566 : enum_c_vals=s2a("GEMM", "SYRK"), &
567 : enum_i_vals=[wfc_mm_style_gemm, wfc_mm_style_syrk], &
568 : enum_desc=s2a("Use pdgemm: more flops, maybe faster.", &
569 : "Use pdysrk: fewer flops, maybe slower."), &
570 11116 : default_i_val=wfc_mm_style_gemm)
571 11116 : CALL section_add_keyword(section, keyword)
572 11116 : CALL keyword_release(keyword)
573 :
574 : CALL keyword_create( &
575 : keyword, __LOCATION__, &
576 : name="MINIMAX_QUADRATURE", &
577 : variants=["MINIMAX"], &
578 : description="Use the Minimax quadrature scheme for the numerical integration. "// &
579 : "It usually needs fewer quadrature points than Clenshaw-Curtis but is limited to 20 points.", &
580 : usage="MINIMAX_QUADRATURE", &
581 : default_l_val=.FALSE., &
582 22232 : lone_keyword_l_val=.TRUE.)
583 11116 : CALL section_add_keyword(section, keyword)
584 11116 : CALL keyword_release(keyword)
585 :
586 : CALL keyword_create( &
587 : keyword, __LOCATION__, &
588 : name="RSE", &
589 : variants=["SE"], &
590 : description="Decide whether to add singles correction.", &
591 : usage="RSE", &
592 : default_l_val=.FALSE., &
593 22232 : lone_keyword_l_val=.TRUE.)
594 11116 : CALL section_add_keyword(section, keyword)
595 11116 : CALL keyword_release(keyword)
596 :
597 : CALL keyword_create( &
598 : keyword, __LOCATION__, &
599 : name="ADMM", &
600 : description="Decide whether to use ADMM in the exact-exchange calculation for RPA and/or GW. "// &
601 : "The ADMM XC correction is governed by the AUXILIARY_DENSITY_MATRIX_METHOD section in &DFT. "// &
602 : "ADMM can provide significant speedup and memory savings, especially with diffuse basis sets. "// &
603 : "For GW band-gap calculations, RI_SIGMA_X can also be used. ", &
604 : usage="ADMM", &
605 : default_l_val=.FALSE., &
606 11116 : lone_keyword_l_val=.TRUE.)
607 11116 : CALL section_add_keyword(section, keyword)
608 11116 : CALL keyword_release(keyword)
609 :
610 : CALL keyword_create( &
611 : keyword, __LOCATION__, &
612 : name="SCALE_RPA", &
613 : description="Scales RPA energy contributions (RPA, exchange correction).", &
614 : usage="SCALE_RPA 1.0", &
615 11116 : default_r_val=1.0_dp)
616 11116 : CALL section_add_keyword(section, keyword)
617 11116 : CALL keyword_release(keyword)
618 :
619 : CALL keyword_create( &
620 : keyword, __LOCATION__, &
621 : name="PRINT_DGEMM_INFO", &
622 : description="Print details about all DGEMM calls.", &
623 : lone_keyword_l_val=.TRUE., &
624 11116 : default_l_val=.FALSE.)
625 11116 : CALL section_add_keyword(section, keyword)
626 11116 : CALL keyword_release(keyword)
627 :
628 : ! here we generate a hfx subsection to use in the case EXX has to be computed after RPA
629 11116 : CALL create_hfx_section(subsection)
630 11116 : CALL section_add_subsection(section, subsection)
631 11116 : CALL section_release(subsection)
632 :
633 : ! here we generate a G0W0 subsection to use if G0W0 is desired
634 11116 : CALL create_ri_g0w0(subsection)
635 11116 : CALL section_add_subsection(section, subsection)
636 11116 : CALL section_release(subsection)
637 :
638 : ! here we the RPA exchange section
639 11116 : CALL create_rpa_exchange(subsection)
640 11116 : CALL section_add_subsection(section, subsection)
641 11116 : CALL section_release(subsection)
642 :
643 11116 : END SUBROUTINE create_ri_rpa
644 :
645 : ! **************************************************************************************************
646 : !> \brief ...
647 : !> \param section ...
648 : ! **************************************************************************************************
649 11116 : SUBROUTINE create_rpa_exchange(section)
650 : TYPE(section_type), POINTER :: section
651 :
652 : TYPE(keyword_type), POINTER :: keyword
653 :
654 11116 : CPASSERT(.NOT. ASSOCIATED(section))
655 : CALL section_create(section, __LOCATION__, name="EXCHANGE_CORRECTION", &
656 : description="Parameters influencing exchange corrections to RPA. No gradients available.", &
657 11116 : n_keywords=3, n_subsections=1, repeats=.FALSE.)
658 :
659 11116 : NULLIFY (keyword)
660 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
661 : description="Choose the kind of exchange correction.", &
662 : usage="&EXCHANGE_CORRECTION AXK", &
663 : enum_c_vals=s2a("NONE", "AXK", "SOSEX"), &
664 : enum_i_vals=[rpa_exchange_none, rpa_exchange_axk, rpa_exchange_sosex], &
665 : enum_desc=s2a("Apply no exchange correction.", &
666 : "Apply Approximate eXchange Kernel (AXK) correction.", &
667 : "Apply Second Order Screened eXchange (SOSEX) correction."), &
668 11116 : default_i_val=rpa_exchange_none)
669 11116 : CALL section_add_keyword(section, keyword)
670 11116 : CALL keyword_release(keyword)
671 :
672 : CALL keyword_create( &
673 : keyword, __LOCATION__, &
674 : name="BLOCK_SIZE", &
675 : description="Choose the block size of the contraction step. Larger block sizes improve performance but "// &
676 : "require more memory (quadratically!, number of stored elements: $o^2\cdot N_B^2$). "// &
677 : "Nonpositive numbers turn off blocking.", &
678 : usage="BLOCK_SIZE 1", &
679 11116 : default_i_val=1)
680 11116 : CALL section_add_keyword(section, keyword)
681 11116 : CALL keyword_release(keyword)
682 :
683 : CALL keyword_create( &
684 : keyword, __LOCATION__, &
685 : name="USE_HFX_IMPLEMENTATION", &
686 : description="Use a HF-based implementation with RI_RPA%HF section. Recommended for large systems.", &
687 : usage="USE_HFX_IMPLEMENTATION T", &
688 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
689 11116 : CALL section_add_keyword(section, keyword)
690 11116 : CALL keyword_release(keyword)
691 :
692 11116 : END SUBROUTINE create_rpa_exchange
693 :
694 : ! **************************************************************************************************
695 : !> \brief ...
696 : !> \param section ...
697 : ! **************************************************************************************************
698 11116 : SUBROUTINE create_ri_g0w0(section)
699 : TYPE(section_type), POINTER :: section
700 :
701 : TYPE(keyword_type), POINTER :: keyword
702 : TYPE(section_type), POINTER :: subsection
703 :
704 11116 : CPASSERT(.NOT. ASSOCIATED(section))
705 : CALL section_create(section, __LOCATION__, name="GW", &
706 : description="Parameters influencing GW calculations on molecules, "// &
707 : "see also 'Electronic band structure from GW', "// &
708 : "https://manual.cp2k.org/trunk/methods/properties/bandstructure_gw.html.", &
709 11116 : n_keywords=24, n_subsections=1, repeats=.FALSE.)
710 :
711 11116 : NULLIFY (keyword, subsection)
712 :
713 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
714 : description="Activates GW calculations.", &
715 : usage="&GW .TRUE.", &
716 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
717 11116 : CALL section_add_keyword(section, keyword)
718 11116 : CALL keyword_release(keyword)
719 :
720 : CALL keyword_create(keyword, __LOCATION__, name="SELF_CONSISTENCY", &
721 : description="Decide the level of self-consistency of eigenvalues "// &
722 : "(= quasiparticle energies = single-electron energies) in GW. "// &
723 : "Updates of Kohn-Sham orbitals (for example qsGW) are not implemented. "// &
724 : "For details which type of eigenvalue self-consistency might be good, "// &
725 : "please consult Golze, Dvorak, Rinke, Front. Chem. 2019.", &
726 : usage="SELF_CONSISTENCY evGW0", &
727 : enum_c_vals=s2a("G0W0", "evGW0", "evGW"), &
728 : enum_i_vals=[G0W0, evGW0, evGW], &
729 : enum_desc=s2a("Use DFT eigenvalues; not update.", &
730 : "Update DFT eigenvalues in G, not in W.", &
731 : "Update DFT eigenvalues in G and W."), &
732 11116 : default_i_val=G0W0)
733 11116 : CALL section_add_keyword(section, keyword)
734 11116 : CALL keyword_release(keyword)
735 :
736 : CALL keyword_create(keyword, __LOCATION__, name="CORR_MOS_OCC", &
737 : variants=["CORR_OCC"], &
738 : description="Number of occupied MOs whose energies are corrected in GW. "// &
739 : "Counting beginning from HOMO, e.g. 3 corrected occ. MOs correspond "// &
740 : "to correction of HOMO, HOMO-1 and HOMO-2. Numerical effort and "// &
741 : "storage of RI-G0W0 increase linearly with this number. In case you "// &
742 : "want to correct all occ. MOs, insert either a negative number or "// &
743 : "a number larger than the number of occ. MOs. Invoking CORR_MOS_OCC -2 "// &
744 : "together with a BSE cutoff, sets a sufficiently large CORR_MOS_OCC "// &
745 : "for the given BSE cutoff deduced from DFT eigenvalues.", &
746 : usage="CORR_OCC 3", &
747 22232 : default_i_val=10)
748 11116 : CALL section_add_keyword(section, keyword)
749 11116 : CALL keyword_release(keyword)
750 :
751 : CALL keyword_create(keyword, __LOCATION__, name="CORR_MOS_VIRT", &
752 : variants=["CORR_VIRT"], &
753 : description="Number of virtual MOs whose energies are corrected by GW. "// &
754 : "Counting beginning from LUMO, e.g. 3 corrected occ. MOs correspond "// &
755 : "to correction of LUMO, LUMO+1 and LUMO+2. Numerical effort and "// &
756 : "storage of RI-G0W0 increase linearly with this number. In case you "// &
757 : "want to correct all virt. MOs, insert either a negative number or "// &
758 : "a number larger than the number of virt. MOs. Invoking CORR_MOS_VIRT -2 "// &
759 : "together with a BSE cutoff, sets a sufficiently large CORR_MOS_VIRT "// &
760 : "for the given BSE cutoff deduced from DFT eigenvalues.", &
761 : usage="CORR_VIRT 3", &
762 22232 : default_i_val=10)
763 11116 : CALL section_add_keyword(section, keyword)
764 11116 : CALL keyword_release(keyword)
765 :
766 : CALL keyword_create(keyword, __LOCATION__, name="NUMB_POLES", &
767 : description="Number of poles for the fitting. Usually, two poles are sufficient. ", &
768 : usage="NUMB_POLES 2", &
769 11116 : default_i_val=2)
770 11116 : CALL section_add_keyword(section, keyword)
771 11116 : CALL keyword_release(keyword)
772 :
773 : CALL keyword_create(keyword, __LOCATION__, name="OMEGA_MAX_FIT", &
774 : description="Determines fitting range for the self-energy on the imaginary axis: "// &
775 : "[0, OMEGA_MAX_FIT] for virt orbitals, [-OMEGA_MAX_FIT,0] for occ orbitals. "// &
776 : "Unit: Hartree. Default: 0.734996 H = 20 eV. ", &
777 : usage="OMEGA_MAX_FIT 0.5", &
778 11116 : default_r_val=0.734996_dp)
779 11116 : CALL section_add_keyword(section, keyword)
780 11116 : CALL keyword_release(keyword)
781 :
782 : CALL keyword_create(keyword, __LOCATION__, name="CROSSING_SEARCH", &
783 : description="Determines, how the self_energy is evaluated on the real axis.", &
784 : usage="CROSSING_SEARCH Z_SHOT", &
785 : enum_c_vals=s2a("Z_SHOT", "NEWTON", "BISECTION"), &
786 : enum_i_vals=[ri_rpa_g0w0_crossing_z_shot, &
787 : ri_rpa_g0w0_crossing_newton, ri_rpa_g0w0_crossing_bisection], &
788 : enum_desc=s2a("Calculate the derivative of Sigma and out of it Z. Then extrapolate using Z.", &
789 : "Make a Newton-Raphson fix point iteration.", &
790 : "Make a bisection fix point iteration."), &
791 11116 : default_i_val=ri_rpa_g0w0_crossing_newton)
792 11116 : CALL section_add_keyword(section, keyword)
793 11116 : CALL keyword_release(keyword)
794 :
795 : CALL keyword_create(keyword, __LOCATION__, name="FERMI_LEVEL_OFFSET", &
796 : description="Fermi level for occ. orbitals: e_HOMO + FERMI_LEVEL_OFFSET; "// &
797 : "Fermi level for virt. orbitals: e_LUMO - FERMI_LEVEL_OFFSET. "// &
798 : "In case e_homo + FERMI_LEVEL_OFFSET < e_lumo - FERMI_LEVEL_OFFSET, "// &
799 : "we set Fermi level = (e_HOMO+e_LUMO)/2. For cubic-scaling GW, the Fermi level "// &
800 : "is always equal to (e_HOMO+e_LUMO)/2 regardless of FERMI_LEVEL_OFFSET.", &
801 : usage="FERMI_LEVEL_OFFSET 1.0E-2", &
802 11116 : default_r_val=2.0E-2_dp)
803 11116 : CALL section_add_keyword(section, keyword)
804 11116 : CALL keyword_release(keyword)
805 :
806 : CALL keyword_create(keyword, __LOCATION__, name="HEDIN_SHIFT", &
807 : description="If true, use Hedin's shift in G0W0, evGW and evGW0 "// &
808 : "(aka scGW0). Details see in Li et al. JCTC 18, 7570 "// &
809 : "(2022), Figure 1. G0W0 with Hedin's shift should give "// &
810 : "similar GW eigenvalues as evGW0; at a lower "// &
811 : "computational cost.", &
812 : usage="HEDIN_SHIFT", &
813 : default_l_val=.FALSE., &
814 11116 : lone_keyword_l_val=.TRUE.)
815 11116 : CALL section_add_keyword(section, keyword)
816 11116 : CALL keyword_release(keyword)
817 :
818 : CALL keyword_create(keyword, __LOCATION__, name="EV_GW_ITER", &
819 : description="Maximum number of iterations for eigenvalue "// &
820 : "self-consistency cycle. The computational effort of GW scales "// &
821 : "linearly with this number. In case of choosing "// &
822 : "GW_SELF_CONSISTENCY EVGW, the code sets EV_GW_ITER 10.", &
823 : usage="EV_GW_ITER 3", &
824 11116 : default_i_val=1)
825 11116 : CALL section_add_keyword(section, keyword)
826 11116 : CALL keyword_release(keyword)
827 :
828 : CALL keyword_create(keyword, __LOCATION__, name="SC_GW0_ITER", &
829 : description="Maximum number of iterations for GW0 "// &
830 : "self-consistency cycle. The computational effort "// &
831 : "of GW is not much affected by the number of scGW0 cycles. "// &
832 : "In case of choosing "// &
833 : "GW_SELF_CONSISTENCY EVGW0, the code sets SC_GW0_ITER 10.", &
834 : usage="SC_GW0_ITER 3", &
835 11116 : default_i_val=1)
836 11116 : CALL section_add_keyword(section, keyword)
837 11116 : CALL keyword_release(keyword)
838 :
839 : CALL keyword_create(keyword, __LOCATION__, name="EPS_ITER", &
840 : description="Target accuracy for the eigenvalue self-consistency. "// &
841 : "If the G0W0 HOMO-LUMO gap differs by less than the "// &
842 : "target accuracy during the iteration, the eigenvalue "// &
843 : "self-consistency cycle stops. Unit: Hartree.", &
844 : usage="EPS_ITER 0.00005", &
845 : default_r_val=cp_unit_to_cp2k(value=0.00136_dp, unit_str="eV"), &
846 11116 : unit_str="eV")
847 :
848 11116 : CALL section_add_keyword(section, keyword)
849 11116 : CALL keyword_release(keyword)
850 :
851 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_EXX", &
852 : description="Print exchange self-energy minus exchange correlation potential for Gamma-only "// &
853 : "calculation (PRINT). For a GW calculation with k-points we use this output as "// &
854 : "exchange self-energy (READ). This is a temporary solution because the hybrid MPI/OMP "// &
855 : "parallelization in the HFX by Manuel Guidon conflicts with the parallelization in "// &
856 : "low-scaling GW k-points which is most efficient with maximum number of MPI tasks and "// &
857 : "minimum number of OMP threads. For HFX by M. Guidon, the density matrix is "// &
858 : "fully replicated on every MPI rank which necessitates a high number of OMP threads per MPI "// &
859 : "rank for large systems to prevent out of memory. "// &
860 : "Such a high number of OMP threads would slow down the GW calculation "// &
861 : "severely. Therefore, it was decided to temporarily divide the GW k-point calculation in a "// &
862 : "Gamma-only HF calculation with high number of OMP threads to prevent out of memory and "// &
863 : "a GW k-point calculation with 1 OMP thread per MPI rank reading the previousHF output.", &
864 : usage="PRINT_EXX TRUE", &
865 : enum_c_vals=s2a("TRUE", "FALSE", "READ", "SKIP_FOR_REGTEST"), &
866 : enum_i_vals=[gw_print_exx, gw_no_print_exx, gw_read_exx, gw_skip_for_regtest], &
867 : enum_desc=s2a("Please, put TRUE for Gamma only calculation to get the exchange self-energy. "// &
868 : "If 'SIGMA_X' and the corresponding values for the exchange-energy are written, "// &
869 : "the writing has been successful", &
870 : "FALSE is needed if you want to do nothing here.", &
871 : "Please, put READ for the k-point GW calculation to read the exact exchange. "// &
872 : "You have to provide an output file including the exact exchange. This file "// &
873 : "has to be named 'exx.dat'.", &
874 : "SKIP_FOR_REGTEST is only used for the GW k-point regtest where no exchange "// &
875 : "self-energy is computed."), &
876 11116 : default_i_val=gw_no_print_exx)
877 11116 : CALL section_add_keyword(section, keyword)
878 11116 : CALL keyword_release(keyword)
879 :
880 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_SELF_ENERGY", &
881 : description="If true, print the self-energy for all levels for real energy "// &
882 : "together with the straight line to see the quasiparticle energy as intersection. "// &
883 : "In addition, prints the self-energy for imaginary frequencies together with the Pade fit.", &
884 : usage="PRINT_SELF_ENERGY", &
885 : default_l_val=.FALSE., &
886 11116 : lone_keyword_l_val=.TRUE.)
887 11116 : CALL section_add_keyword(section, keyword)
888 11116 : CALL keyword_release(keyword)
889 :
890 : CALL keyword_create(keyword, __LOCATION__, name="RI_SIGMA_X", &
891 : description="If true, the exchange self-energy is calculated approximatively with RI. "// &
892 : "If false, the Hartree-Fock implementation in CP2K is used.", &
893 : usage="RI_SIGMA_X", &
894 : default_l_val=.TRUE., &
895 11116 : lone_keyword_l_val=.TRUE.)
896 11116 : CALL section_add_keyword(section, keyword)
897 11116 : CALL keyword_release(keyword)
898 :
899 : CALL keyword_create(keyword, __LOCATION__, name="IC_CORR_LIST", &
900 : description="List of image charge correction from a previous calculation to be applied in G0W0 "// &
901 : "or evGW. Keyword is active, if the first entry is positive (since IC corrections are positive "// &
902 : "occupied MOs. The start corresponds to the first corrected GW level.", &
903 : usage="IC_CORR_LIST <REAL> ... <REAL>", &
904 : default_r_vals=[-1.0_dp], &
905 11116 : type_of_var=real_t, n_var=-1, unit_str="eV")
906 11116 : CALL section_add_keyword(section, keyword)
907 11116 : CALL keyword_release(keyword)
908 :
909 : CALL keyword_create(keyword, __LOCATION__, name="IC_CORR_LIST_BETA", &
910 : description="IC_CORR_LIST for beta spins in case of open shell calculation.", &
911 : usage="IC_CORR_LIST_BETA <REAL> ... <REAL>", &
912 : default_r_vals=[-1.0_dp], &
913 11116 : type_of_var=real_t, n_var=-1, unit_str="eV")
914 11116 : CALL section_add_keyword(section, keyword)
915 11116 : CALL keyword_release(keyword)
916 :
917 : CALL keyword_create(keyword, __LOCATION__, name="PERIODIC_CORRECTION", &
918 : description="If true, the periodic correction scheme is used employing k-points. "// &
919 : "Method is not recommended to use, use instead PERIODIC_LOW_SCALING which much "// &
920 : "more accurate than the periodic correction.", &
921 : usage="PERIODIC_CORRECTION", &
922 : default_l_val=.FALSE., &
923 11116 : lone_keyword_l_val=.TRUE.)
924 11116 : CALL section_add_keyword(section, keyword)
925 11116 : CALL keyword_release(keyword)
926 :
927 : CALL keyword_create(keyword, __LOCATION__, name="IMAGE_CHARGE_MODEL", &
928 : variants=["IC"], &
929 : description="If true, an image charge model is applied to mimic the renormalization of "// &
930 : "electronic levels of a molecule at a metallic surface. For this calculation, the molecule "// &
931 : "has to be reflected on the desired xy image plane. The coordinates of the reflected molecule "// &
932 : "have to be added to the coord file as ghost atoms. For the ghost atoms, identical basis sets "// &
933 : "the normal atoms have to be used.", &
934 : usage="IC TRUE", &
935 : default_l_val=.FALSE., &
936 22232 : lone_keyword_l_val=.TRUE.)
937 11116 : CALL section_add_keyword(section, keyword)
938 11116 : CALL keyword_release(keyword)
939 :
940 : CALL keyword_create(keyword, __LOCATION__, name="ANALYTIC_CONTINUATION", &
941 : description="Defines which type of analytic continuation for the self energy is used", &
942 : usage="ANALYTIC_CONTINUATION", &
943 : enum_c_vals=s2a("TWO_POLE", "PADE"), &
944 : enum_i_vals=[gw_two_pole_model, gw_pade_approx], &
945 : enum_desc=s2a("Use 'two-pole' model.", &
946 : "Use Pade approximation."), &
947 11116 : default_i_val=gw_pade_approx)
948 11116 : CALL section_add_keyword(section, keyword)
949 11116 : CALL keyword_release(keyword)
950 :
951 : CALL keyword_create(keyword, __LOCATION__, name="NPARAM_PADE", &
952 : description="Number of parameters for the Pade approximation "// &
953 : "when using the latter for the analytic continuation of the "// &
954 : "self energy. 16 parameters (corresponding to 8 poles) are "// &
955 : "are recommended.", &
956 : usage="NPARAM_PADE 16", &
957 11116 : default_i_val=16)
958 11116 : CALL section_add_keyword(section, keyword)
959 11116 : CALL keyword_release(keyword)
960 :
961 : CALL keyword_create(keyword, __LOCATION__, name="GAMMA_ONLY_SIGMA", &
962 : variants=["GAMMA"], &
963 : description="If true, the correlation self-energy is only computed at the Gamma point. "// &
964 : "The Gamma point itself is obtained by averaging over all kpoints of the DFT mesh.", &
965 : usage="GAMMA TRUE", &
966 : default_l_val=.FALSE., &
967 22232 : lone_keyword_l_val=.TRUE.)
968 11116 : CALL section_add_keyword(section, keyword)
969 11116 : CALL keyword_release(keyword)
970 :
971 : CALL keyword_create(keyword, __LOCATION__, name="UPDATE_XC_ENERGY", &
972 : description="If true, the Hartree-Fock and RPA total energy are printed and the total energy "// &
973 : "is corrected using exact exchange and the RPA correlation energy.", &
974 : usage="UPDATE_XC_ENERGY", &
975 : default_l_val=.FALSE., &
976 11116 : lone_keyword_l_val=.TRUE.)
977 11116 : CALL section_add_keyword(section, keyword)
978 11116 : CALL keyword_release(keyword)
979 :
980 : CALL keyword_create(keyword, __LOCATION__, name="KPOINTS_SELF_ENERGY", &
981 : description="Specify number of k-points for the k-point grid of the self-energy. Internally, a "// &
982 : "Monkhorst-Pack grid is used. A dense k-point grid may be necessary to compute an accurate density "// &
983 : "of state from GW. Large self-energy k-meshes do not cost much more computation time.", &
984 : usage="KPOINTS_SELF_ENERGY nx ny nz", repeats=.TRUE., &
985 11116 : n_var=3, type_of_var=integer_t, default_i_vals=[0, 0, 0])
986 11116 : CALL section_add_keyword(section, keyword)
987 11116 : CALL keyword_release(keyword)
988 :
989 : CALL keyword_create(keyword, __LOCATION__, name="REGULARIZATION_MINIMAX", &
990 : description="Tikhonov regularization for computing weights of the Fourier transform "// &
991 : "from imaginary time to imaginary frequency and vice versa. Needed for large minimax "// &
992 : "grids with 20 or more points and a small range.", &
993 : usage="REGULARIZATION_MINIMAX 1.0E-6", &
994 11116 : default_r_val=0.0_dp)
995 11116 : CALL section_add_keyword(section, keyword)
996 11116 : CALL keyword_release(keyword)
997 :
998 : CALL keyword_create(keyword, __LOCATION__, name="SOC", &
999 : description="Calculate the spin-orbit splitting of the eigenvalues/band structure "// &
1000 : "using the spin-orbit part of the GTH pseudos parametrized in Hartwigsen, Goedecker, "// &
1001 : "Hutter, Phys. Rev. B 58, 3641 (1998), Eq. 19, "// &
1002 : "parameters in Table I.", &
1003 : usage="SOC", &
1004 : enum_c_vals=s2a("NONE", "LDA", "PBE"), &
1005 : enum_i_vals=[soc_none, soc_lda, soc_pbe], &
1006 : enum_desc=s2a("No SOC.", &
1007 : "Use parameters from LDA (PADE) pseudopotential.", &
1008 : "Use parameters from PBE pseudopotential."), &
1009 11116 : default_i_val=soc_none)
1010 11116 : CALL section_add_keyword(section, keyword)
1011 11116 : CALL keyword_release(keyword)
1012 :
1013 : CALL keyword_create(keyword, __LOCATION__, name="SOC_ENERGY_WINDOW", &
1014 : description="For perturbative SOC calculation, only "// &
1015 : "take frontier levels in an energy window "// &
1016 : "[E_HOMO - SOC_ENERGY_WINDOW/2 , E_LUMO + SOC_ENERGY_WINDOW/2 "// &
1017 : "into account for the diagonalization of H^GW,SOC.", &
1018 : usage="SOC_ENERGY_WINDOW 20.0_eV", &
1019 : default_r_val=cp_unit_to_cp2k(value=50.0_dp, unit_str="eV"), &
1020 11116 : unit_str="eV")
1021 11116 : CALL section_add_keyword(section, keyword)
1022 11116 : CALL keyword_release(keyword)
1023 :
1024 : ! here we generate a subsection for the periodic GW correction
1025 11116 : CALL create_periodic_gw_correction_section(subsection)
1026 11116 : CALL section_add_subsection(section, subsection)
1027 11116 : CALL section_release(subsection)
1028 :
1029 : ! here we generate a subsection for Bethe-Salpeter
1030 11116 : CALL create_bse_section(subsection)
1031 11116 : CALL section_add_subsection(section, subsection)
1032 11116 : CALL section_release(subsection)
1033 :
1034 : ! here we generate a subsection for image charge calculations
1035 11116 : CALL create_ic_section(subsection)
1036 11116 : CALL section_add_subsection(section, subsection)
1037 11116 : CALL section_release(subsection)
1038 :
1039 : ! here we generate a subsection for calculating the GW band structures
1040 11116 : CALL create_kpoint_set_section(subsection)
1041 11116 : CALL section_add_subsection(section, subsection)
1042 11116 : CALL section_release(subsection)
1043 :
1044 : ! here we generate a subsection for additional printing
1045 11116 : CALL create_print_section(subsection)
1046 11116 : CALL section_add_subsection(section, subsection)
1047 11116 : CALL section_release(subsection)
1048 :
1049 11116 : END SUBROUTINE create_ri_g0w0
1050 :
1051 : ! **************************************************************************************************
1052 : !> \brief ...
1053 : !> \param section ...
1054 : ! **************************************************************************************************
1055 11116 : SUBROUTINE create_print_section(section)
1056 : TYPE(section_type), POINTER :: section
1057 :
1058 : TYPE(keyword_type), POINTER :: keyword
1059 : TYPE(section_type), POINTER :: gw_dos_section, print_key
1060 :
1061 11116 : CPASSERT(.NOT. ASSOCIATED(section))
1062 11116 : NULLIFY (print_key, keyword)
1063 11116 : NULLIFY (gw_dos_section, keyword)
1064 : CALL section_create(section, __LOCATION__, name="PRINT", &
1065 : description="Section of possible print options specific for the GW code.", &
1066 11116 : n_keywords=0, n_subsections=2, repeats=.FALSE.)
1067 :
1068 : CALL cp_print_key_section_create(print_key, __LOCATION__, "LOCAL_BANDGAP", &
1069 : description="Prints a local bandgap E_gap(r), derived from the local density of "// &
1070 : "states rho(r,E). Details and formulae in the SI of the periodic GW paper (2023).", &
1071 : print_level=high_print_level, add_last=add_last_numeric, &
1072 : filename="LOCAL_BANDGAP", &
1073 11116 : common_iter_levels=3)
1074 :
1075 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_WINDOW", &
1076 : description="Energy window in the LDOS for searching the gap.", &
1077 : usage="ENERGY_WINDOW 6.0", &
1078 : default_r_val=cp_unit_to_cp2k(value=6.0_dp, unit_str="eV"), &
1079 11116 : unit_str="eV")
1080 11116 : CALL section_add_keyword(print_key, keyword)
1081 11116 : CALL keyword_release(keyword)
1082 :
1083 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_SPACING", &
1084 : description="Energy spacing of the LDOS for searching the gap.", &
1085 : usage="ENERGY_SPACING 0.03", &
1086 : default_r_val=cp_unit_to_cp2k(value=0.03_dp, unit_str="eV"), &
1087 11116 : unit_str="eV")
1088 11116 : CALL section_add_keyword(print_key, keyword)
1089 11116 : CALL keyword_release(keyword)
1090 :
1091 : CALL keyword_create(keyword, __LOCATION__, name="LDOS_THRESHOLD_GAP", &
1092 : description="Relative LDOS threshold that determines the local bandgap.", &
1093 : usage="LDOS_THRESHOLD_GAP 0.1", &
1094 11116 : default_r_val=0.1_dp)
1095 11116 : CALL section_add_keyword(print_key, keyword)
1096 11116 : CALL keyword_release(keyword)
1097 :
1098 : CALL keyword_create(keyword, __LOCATION__, name="STRIDE", &
1099 : description="The stride (X,Y,Z) used to write the cube file "// &
1100 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1101 : " 1 number valid for all components.", &
1102 11116 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
1103 11116 : CALL section_add_keyword(print_key, keyword)
1104 11116 : CALL keyword_release(keyword)
1105 :
1106 11116 : CALL section_add_subsection(section, print_key)
1107 11116 : CALL section_release(print_key)
1108 :
1109 : CALL section_create(gw_dos_section, __LOCATION__, name="GW_DOS", &
1110 : description="Section for printing the spectral function.", &
1111 11116 : n_keywords=6, n_subsections=0, repeats=.FALSE.)
1112 :
1113 : CALL keyword_create(keyword, __LOCATION__, name="LOWER_BOUND", &
1114 : description="Lower bound for GW-DOS in eV.", &
1115 : usage="LOWER_BOUND -20.0", &
1116 : default_r_val=cp_unit_to_cp2k(value=-20.0_dp, unit_str="eV"), &
1117 11116 : unit_str="eV")
1118 11116 : CALL section_add_keyword(gw_dos_section, keyword)
1119 11116 : CALL keyword_release(keyword)
1120 :
1121 : CALL keyword_create(keyword, __LOCATION__, name="UPPER_BOUND", &
1122 : description="Upper bound for GW-DOS in eV.", &
1123 : usage="UPPER_BOUND 5.0", &
1124 : default_r_val=cp_unit_to_cp2k(value=0.0_dp, unit_str="eV"), &
1125 11116 : unit_str="eV")
1126 11116 : CALL section_add_keyword(gw_dos_section, keyword)
1127 11116 : CALL keyword_release(keyword)
1128 :
1129 : CALL keyword_create(keyword, __LOCATION__, name="STEP", &
1130 : description="Difference of two consecutive energy levels for GW-DOS.", &
1131 : usage="STEP 0.1", &
1132 : default_r_val=cp_unit_to_cp2k(value=0.0_dp, unit_str="eV"), &
1133 11116 : unit_str="eV")
1134 11116 : CALL section_add_keyword(gw_dos_section, keyword)
1135 11116 : CALL keyword_release(keyword)
1136 :
1137 : CALL keyword_create(keyword, __LOCATION__, name="MIN_LEVEL_SPECTRAL", &
1138 : description="Lowest energy level to print the self energy to files.", &
1139 : usage="MIN_LEVEL_SPECTRAL 3", &
1140 11116 : default_i_val=1)
1141 11116 : CALL section_add_keyword(gw_dos_section, keyword)
1142 11116 : CALL keyword_release(keyword)
1143 :
1144 : CALL keyword_create(keyword, __LOCATION__, name="MAX_LEVEL_SPECTRAL", &
1145 : description="Highest energy level to print the self energy to files.", &
1146 : usage="MAX_LEVEL_SPECTRAL 6", &
1147 11116 : default_i_val=0)
1148 11116 : CALL section_add_keyword(gw_dos_section, keyword)
1149 11116 : CALL keyword_release(keyword)
1150 :
1151 : CALL keyword_create(keyword, __LOCATION__, name="MIN_LEVEL_SELF_ENERGY", &
1152 : description="Lowest energy level to print the self energy to files.", &
1153 : usage="MIN_LEVEL_SELF_ENERGY 3", &
1154 11116 : default_i_val=1)
1155 11116 : CALL section_add_keyword(gw_dos_section, keyword)
1156 11116 : CALL keyword_release(keyword)
1157 :
1158 : CALL keyword_create(keyword, __LOCATION__, name="MAX_LEVEL_SELF_ENERGY", &
1159 : description="Highest energy level to print the self energy to files.", &
1160 : usage="MAX_LEVEL_SELF_ENERGY 6", &
1161 11116 : default_i_val=0)
1162 11116 : CALL section_add_keyword(gw_dos_section, keyword)
1163 11116 : CALL keyword_release(keyword)
1164 :
1165 : CALL keyword_create(keyword, __LOCATION__, name="BROADENING", &
1166 : description="Broadening parameter for spectral function.", &
1167 : usage="BROADENING 0.001", &
1168 : default_r_val=cp_unit_to_cp2k(value=0.0_dp, unit_str="eV"), &
1169 11116 : unit_str="eV")
1170 11116 : CALL section_add_keyword(gw_dos_section, keyword)
1171 11116 : CALL keyword_release(keyword)
1172 :
1173 11116 : CALL section_add_subsection(section, gw_dos_section)
1174 11116 : CALL section_release(gw_dos_section)
1175 :
1176 11116 : END SUBROUTINE create_print_section
1177 :
1178 : ! **************************************************************************************************
1179 : !> \brief ...
1180 : !> \param section ...
1181 : ! **************************************************************************************************
1182 11116 : SUBROUTINE create_periodic_gw_correction_section(section)
1183 : TYPE(section_type), POINTER :: section
1184 :
1185 : TYPE(keyword_type), POINTER :: keyword
1186 :
1187 11116 : CPASSERT(.NOT. ASSOCIATED(section))
1188 : CALL section_create(section, __LOCATION__, name="PERIODIC_CORRECTION", &
1189 : description="Parameters influencing correction for periodic GW. Old method, "// &
1190 : "not recommended to use", &
1191 11116 : n_keywords=12, n_subsections=1, repeats=.FALSE.)
1192 :
1193 11116 : NULLIFY (keyword)
1194 :
1195 : CALL keyword_create(keyword, __LOCATION__, name="KPOINTS", &
1196 : description="Specify number of k-points for a single k-point grid. Internally, a "// &
1197 : "Monkhorst-Pack grid is used. Typically, even numbers are chosen such that the Gamma "// &
1198 : "point is excluded from the k-point mesh.", &
1199 : usage="KPOINTS nx ny nz", repeats=.TRUE., &
1200 11116 : n_var=3, type_of_var=integer_t, default_i_vals=[16, 16, 16])
1201 11116 : CALL section_add_keyword(section, keyword)
1202 11116 : CALL keyword_release(keyword)
1203 :
1204 : CALL keyword_create(keyword, __LOCATION__, name="NUM_KP_GRIDS", &
1205 : description="Number of k-point grids around the Gamma point with different resolution. "// &
1206 : "E.g. for KPOINTS 4 4 4 and NUM_KP_GRIDS 3, there will be a 3x3x3 Monkhorst-Pack (MP) k-point "// &
1207 : "grid for the whole Brillouin zone (excluding Gamma), another 3x3x3 MP grid with smaller "// &
1208 : "spacing around Gamma (again excluding Gamma) and a very fine 4x4x4 MP grid around Gamma.", &
1209 : usage="NUM_KP_GRIDS 5", &
1210 11116 : default_i_val=1)
1211 11116 : CALL section_add_keyword(section, keyword)
1212 11116 : CALL keyword_release(keyword)
1213 :
1214 : CALL keyword_create(keyword, __LOCATION__, name="EPS_KPOINT", &
1215 : description="If the absolute value of a k-point is below EPS_KPOINT, this kpoint is "// &
1216 : "neglected since the Gamma point is not included in the periodic correction.", &
1217 : usage="EPS_KPOINT 1.0E-4", &
1218 11116 : default_r_val=1.0E-05_dp)
1219 11116 : CALL section_add_keyword(section, keyword)
1220 11116 : CALL keyword_release(keyword)
1221 :
1222 : CALL keyword_create(keyword, __LOCATION__, name="MO_COEFF_GAMMA", &
1223 : description="If true, only the MO coefficients at the Gamma point are used for the periodic "// &
1224 : "correction. Otherwise, the MO coeffs are computed at every k-point which is much more "// &
1225 : "expensive. It should be okay to use the Gamma MO coefficients.", &
1226 : usage="MO_COEFF_GAMMA", &
1227 : default_l_val=.TRUE., &
1228 11116 : lone_keyword_l_val=.TRUE.)
1229 11116 : CALL section_add_keyword(section, keyword)
1230 11116 : CALL keyword_release(keyword)
1231 :
1232 : CALL keyword_create(keyword, __LOCATION__, name="AVERAGE_DEGENERATE_LEVELS", &
1233 : variants=["ADL"], &
1234 : description="If true, the correlation self-energy of degenerate levels is averaged.", &
1235 : usage="AVERAGE_DEGENERATE_LEVELS", &
1236 : default_l_val=.TRUE., &
1237 22232 : lone_keyword_l_val=.TRUE.)
1238 11116 : CALL section_add_keyword(section, keyword)
1239 11116 : CALL keyword_release(keyword)
1240 :
1241 : CALL keyword_create(keyword, __LOCATION__, name="EPS_EIGENVAL", &
1242 : description="Threshold for considering levels as degenerate. Unit: Hartree.", &
1243 : usage="EPS_EIGENVAL 1.0E-5", &
1244 11116 : default_r_val=2.0E-04_dp)
1245 11116 : CALL section_add_keyword(section, keyword)
1246 11116 : CALL keyword_release(keyword)
1247 :
1248 : CALL keyword_create(keyword, __LOCATION__, name="EXTRAPOLATE_KPOINTS", &
1249 : variants=["EXTRAPOLATE"], &
1250 : description="If true, extrapolates the k-point mesh. Only working if k-point mesh numbers are "// &
1251 : "divisible by 4, e.g. 8x8x8 or 12x12x12 is recommended.", &
1252 : usage="EXTRAPOLATE_KPOINTS FALSE", &
1253 : default_l_val=.TRUE., &
1254 22232 : lone_keyword_l_val=.TRUE.)
1255 11116 : CALL section_add_keyword(section, keyword)
1256 11116 : CALL keyword_release(keyword)
1257 :
1258 : CALL keyword_create(keyword, __LOCATION__, name="DO_AUX_BAS_GW", &
1259 : description="If true, use a different basis for the periodic correction. This can be necessary "// &
1260 : "in case a diffused basis is used for GW to converge the HOMO-LUMO gap. In this case, "// &
1261 : "numerical problems may occur due to diffuse functions in the basis. This keyword only works if "// &
1262 : "AUX_GW <basis set> is specified in the kind section for every atom kind.", &
1263 : usage="DO_AUX_BAS_GW TRUE", &
1264 : default_l_val=.FALSE., &
1265 11116 : lone_keyword_l_val=.TRUE.)
1266 11116 : CALL section_add_keyword(section, keyword)
1267 11116 : CALL keyword_release(keyword)
1268 :
1269 : CALL keyword_create(keyword, __LOCATION__, name="FRACTION_AUX_MOS", &
1270 : description="Fraction how many MOs are used in the auxiliary basis.", &
1271 : usage="FRACTION_AUX_MOS 0.6", &
1272 11116 : default_r_val=0.5_dp)
1273 11116 : CALL section_add_keyword(section, keyword)
1274 11116 : CALL keyword_release(keyword)
1275 :
1276 : CALL keyword_create(keyword, __LOCATION__, name="NUM_OMEGA_POINTS", &
1277 : description="Number of Clenshaw-Curtis integration points for the periodic correction in cubic- "// &
1278 : "scaling GW. This variable is a dummy variable for canonical N^4 GW calculations.", &
1279 : usage="NUM_OMEGA_POINTS 200", &
1280 11116 : default_i_val=300)
1281 11116 : CALL section_add_keyword(section, keyword)
1282 11116 : CALL keyword_release(keyword)
1283 :
1284 11116 : END SUBROUTINE create_periodic_gw_correction_section
1285 :
1286 : ! **************************************************************************************************
1287 : !> \brief ...
1288 : !> \param section ...
1289 : ! **************************************************************************************************
1290 11116 : SUBROUTINE create_bse_section(section)
1291 : TYPE(section_type), POINTER :: section
1292 :
1293 : TYPE(keyword_type), POINTER :: keyword
1294 : TYPE(section_type), POINTER :: subsection
1295 :
1296 11116 : CPASSERT(.NOT. ASSOCIATED(section))
1297 : CALL section_create(section, __LOCATION__, name="BSE", &
1298 : description="Parameters for a calculation solving the Bethe-Salpeter equation "// &
1299 : "(BSE) for electronic excitations. The full BSE "// &
1300 : "$\left( \begin{array}{cc}A & B\\B & A\end{array} \right)$ "// &
1301 : "$\left( \begin{array}{cc}\mathbf{X}^{(n)}\\\mathbf{Y}^{(n)}\end{array} \right) = "// &
1302 : "\Omega^{(n)}\left(\begin{array}{cc}1&0\\0&-1\end{array}\right)$ "// &
1303 : "$\left(\begin{array}{cc}\mathbf{X}^{(n)}\\\mathbf{Y}^{(n)}\end{array}\right)$ "// &
1304 : "enables, for example, the computation of electronic excitation energies $\Omega^{(n)}$ "// &
1305 : "as well as optical properties. The BSE can be solved by diagonalizing "// &
1306 : "the full ABBA-matrix or by setting B=0, i.e. within the Tamm-Dancoff approximation (TDA). "// &
1307 : "Preliminary reference: Eq. (35) in PRB 92, 045209 (2015); http://dx.doi.org/10.1103/PhysRevB.92.045209", &
1308 11116 : n_keywords=8, n_subsections=3, repeats=.FALSE.)
1309 :
1310 11116 : NULLIFY (keyword)
1311 :
1312 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
1313 : description="Activates BSE calculations.", &
1314 : usage="&BSE .TRUE.", &
1315 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1316 11116 : CALL section_add_keyword(section, keyword)
1317 11116 : CALL keyword_release(keyword)
1318 :
1319 : CALL keyword_create(keyword, __LOCATION__, name="SPIN_CONFIG", &
1320 : description="Choose between calculation of singlet or triplet excitation (cf. given Reference above).", &
1321 : usage="SPIN_CONFIG TRIPLET", &
1322 : enum_c_vals=s2a("SINGLET", "TRIPLET"), &
1323 : enum_i_vals=[bse_singlet, bse_triplet], &
1324 : enum_desc=s2a("Computes singlet excitations.", &
1325 : "Computes triplet excitations."), &
1326 11116 : default_i_val=bse_singlet)
1327 11116 : CALL section_add_keyword(section, keyword)
1328 11116 : CALL keyword_release(keyword)
1329 :
1330 : CALL keyword_create(keyword, __LOCATION__, name="BSE_DIAG_METHOD", &
1331 : description="Method for BSE calculations. "// &
1332 : "Choose between full or iterative diagonalization.", &
1333 : usage="BSE_DIAG_METHOD FULLDIAG", &
1334 : enum_c_vals=s2a("FULLDIAG", "ITERDIAG"), &
1335 : enum_i_vals=[bse_fulldiag, bse_iterdiag], &
1336 : enum_desc=s2a("Fully diagonalizes the BSE matrices within the chosen level of approximation.", &
1337 : "Iterative diagonalization has not been implemented yet."), &
1338 11116 : default_i_val=bse_fulldiag)
1339 11116 : CALL section_add_keyword(section, keyword)
1340 11116 : CALL keyword_release(keyword)
1341 :
1342 : CALL keyword_create(keyword, __LOCATION__, name="TDA", &
1343 : description="Level of approximation applied to BSE calculations. "// &
1344 : "Choose between Tamm Dancoff approximation (TDA) and/or diagonalization of the full ABBA-matrix.", &
1345 : usage="TDA ON", &
1346 : enum_c_vals=s2a("ON", "OFF", "TDA+ABBA"), &
1347 : enum_i_vals=[bse_tda, bse_abba, bse_both], &
1348 : enum_desc=s2a("The TDA is applied, i.e. B=0.", &
1349 : "The ABBA-matrix is diagonalized, i.e. the TDA is not applied.", &
1350 : "The BSE is solved within the TDA (B=0) as well as for the full ABBA-matrix."), &
1351 11116 : default_i_val=bse_tda)
1352 11116 : CALL section_add_keyword(section, keyword)
1353 11116 : CALL keyword_release(keyword)
1354 :
1355 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_CUTOFF_OCC", &
1356 : description="Remove all orbitals with indices i,j from A_ia,jb and B_ia,jb with energy difference "// &
1357 : "to HOMO level larger than the given energy cutoff, i.e. "// &
1358 : "$\varepsilon_i\in[\varepsilon_{i=\text{HOMO}}^{GW}-E_\text{cut}^\text{occ},\varepsilon_{i=\text{HOMO}}^{GW}]$. "// &
1359 : "Can be used to accelerate runtime and reduce memory consumption.", &
1360 : usage="ENERGY_CUTOFF_OCC 10.0", unit_str="eV", &
1361 11116 : type_of_var=real_t, default_r_val=-1.0_dp)
1362 11116 : CALL section_add_keyword(section, keyword)
1363 11116 : CALL keyword_release(keyword)
1364 :
1365 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_CUTOFF_EMPTY", &
1366 : description="Remove all orbitals with indices a,b from A_ia,jb and B_ia,jb with energy difference "// &
1367 : "to LUMO level larger than the given energy cutoff, i.e. "// &
1368 : "$\varepsilon_a\in[\varepsilon_{a=\text{LUMO}}^{GW},\varepsilon_{a=\text{LUMO}}^{GW}+E_\text{cut}^\text{empty}]$. "// &
1369 : "Can be used to accelerate runtime and reduce memory consumption.", &
1370 : usage="ENERGY_CUTOFF_EMPTY 10.0", unit_str="eV", &
1371 11116 : type_of_var=real_t, default_r_val=-1.0_dp)
1372 11116 : CALL section_add_keyword(section, keyword)
1373 11116 : CALL keyword_release(keyword)
1374 :
1375 : CALL keyword_create(keyword, __LOCATION__, name="BSE_DEBUG_PRINT", &
1376 : description="Activates debug print statements in the BSE calculation.", &
1377 : usage="BSE_DEBUG_PRINT .TRUE.", &
1378 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1379 11116 : CALL section_add_keyword(section, keyword)
1380 11116 : CALL keyword_release(keyword)
1381 :
1382 : CALL keyword_create(keyword, __LOCATION__, name="NUM_PRINT_EXC", &
1383 : description="Number of printed excitation levels with respective "// &
1384 : "energies and oscillator strengths. Does not affect computation time.", &
1385 : usage="NUM_PRINT_EXC 25", &
1386 11116 : default_i_val=25)
1387 11116 : CALL section_add_keyword(section, keyword)
1388 11116 : CALL keyword_release(keyword)
1389 :
1390 : CALL keyword_create(keyword, __LOCATION__, name="NUM_PRINT_EXC_DESCR", &
1391 : description="Number of excitation levels for which the exciton "// &
1392 : "descriptors are computed. Negative or too large "// &
1393 : "NUM_PRINT_EXC_DESCR defaults to NUM_PRINT_EXC.", &
1394 : usage="NUM_PRINT_EXC_DESCR 5", &
1395 11116 : default_i_val=0)
1396 11116 : CALL section_add_keyword(section, keyword)
1397 11116 : CALL keyword_release(keyword)
1398 :
1399 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_DIRECTIONAL_EXC_DESCR", &
1400 : description="Activates printing of exciton descriptors per direction.", &
1401 : usage="PRINT_DIRECTIONAL_EXC_DESCR .TRUE.", &
1402 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1403 11116 : CALL section_add_keyword(section, keyword)
1404 11116 : CALL keyword_release(keyword)
1405 :
1406 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_DIRECTIONAL_CROSSCORRELATION", &
1407 : description="Prints the electron-hole crosscorrelation matrix as part of the "// &
1408 : "exciton descriptors per direction. Only active together with "// &
1409 : "PRINT_DIRECTIONAL_EXC_DESCR.", &
1410 : usage="PRINT_DIRECTIONAL_CROSSCORRELATION .FALSE.", &
1411 11116 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1412 11116 : CALL section_add_keyword(section, keyword)
1413 11116 : CALL keyword_release(keyword)
1414 :
1415 : CALL keyword_create(keyword, __LOCATION__, name="EPS_X", &
1416 : description="Threshold for printing contributions of singleparticle "// &
1417 : "transitions, i.e. elements of the eigenvectors $X_{ia}^{(n)}$ and $Y_{ia}^{(n)}$.", &
1418 : usage="EPS_X 0.1", &
1419 11116 : type_of_var=real_t, default_r_val=0.1_dp)
1420 11116 : CALL section_add_keyword(section, keyword)
1421 11116 : CALL keyword_release(keyword)
1422 :
1423 : CALL keyword_create(keyword, __LOCATION__, name="USE_KS_ENERGIES", &
1424 : description="Uses KS energies instead of GW quasiparticle energies.", &
1425 : usage="USE_KS_ENERGIES .TRUE.", &
1426 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1427 11116 : CALL section_add_keyword(section, keyword)
1428 11116 : CALL keyword_release(keyword)
1429 :
1430 11116 : NULLIFY (subsection)
1431 11116 : CALL create_bse_screening_section(subsection)
1432 11116 : CALL section_add_subsection(section, subsection)
1433 11116 : CALL section_release(subsection)
1434 :
1435 11116 : NULLIFY (subsection)
1436 11116 : CALL create_bse_iterat_section(subsection)
1437 11116 : CALL section_add_subsection(section, subsection)
1438 11116 : CALL section_release(subsection)
1439 :
1440 11116 : NULLIFY (subsection)
1441 11116 : CALL create_bse_spectrum_section(subsection)
1442 11116 : CALL section_add_subsection(section, subsection)
1443 11116 : CALL section_release(subsection)
1444 :
1445 11116 : NULLIFY (subsection)
1446 11116 : CALL create_bse_nto_section(subsection)
1447 11116 : CALL section_add_subsection(section, subsection)
1448 11116 : CALL section_release(subsection)
1449 :
1450 11116 : END SUBROUTINE create_bse_section
1451 :
1452 11116 : SUBROUTINE create_bse_screening_section(section)
1453 : TYPE(section_type), POINTER :: section
1454 :
1455 : TYPE(keyword_type), POINTER :: keyword
1456 :
1457 11116 : CPASSERT(.NOT. ASSOCIATED(section))
1458 :
1459 : CALL section_create(section, __LOCATION__, name="SCREENING_IN_W", &
1460 : description="Screening $\epsilon$ applied to $W(\omega=0)=\epsilon^{-1}(\omega=0) v $ "// &
1461 : "in the BSE calculation. Besides default BSE, i.e. $W_0$ (screening with DFT energies), "// &
1462 : "a fixed $\alpha = \epsilon^{-1}(\omega)$ can be applied, which is similar to the mixing "// &
1463 : "parameter for hybrid functionals in LR-TDDFT. In addition, the keywords TDHF "// &
1464 : "(no screening - $\alpha = 1$) and RPA (infinite screening - $\alpha = 0$) can be applied.", &
1465 11116 : n_keywords=2, n_subsections=0, repeats=.FALSE.)
1466 :
1467 11116 : NULLIFY (keyword)
1468 :
1469 : CALL keyword_create( &
1470 : keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
1471 : description="Shortcut for the most common functional combinations.", &
1472 : usage="&xc_functional BLYP", &
1473 : enum_c_vals=s2a("W_0", "TDHF", "RPA", "ALPHA"), &
1474 : enum_i_vals=[bse_screening_w0, bse_screening_tdhf, bse_screening_rpa, bse_screening_alpha], &
1475 : enum_desc=s2a("The Coulomb interaction is screened by applying DFT energies "// &
1476 : "$\varepsilon_p^{DFT}$, which is typically used for GW-BSE and "// &
1477 : "often labeled as $W_0$.", &
1478 : "The Coulomb interaction is not screened, i.e. $W_{pq,rs}(\omega=0) "// &
1479 : "\rightarrow v_{pq,rs}$ enters.", &
1480 : "Infinite screening is applied, i.e. $W_{pq,rs}(\omega=0) \rightarrow 0$.", &
1481 : "Arbitrary screening parameter. Specify within section."), &
1482 : default_i_val=bse_screening_w0, &
1483 11116 : lone_keyword_i_val=bse_screening_w0)
1484 11116 : CALL section_add_keyword(section, keyword)
1485 11116 : CALL keyword_release(keyword)
1486 :
1487 : CALL keyword_create(keyword, __LOCATION__, name="ALPHA", &
1488 : description="Screening parameter similar to the mixing in hybrid functionals used in TDDFT. "// &
1489 : "$\alpha$ mimicks the screening $\epsilon^{-1}(\omega)$ and enforces $W = \alpha v$ "// &
1490 : "in the BSE calculation.", &
1491 : usage="ALPHA 0.25", &
1492 11116 : type_of_var=real_t, default_r_val=-1.00_dp)
1493 11116 : CALL section_add_keyword(section, keyword)
1494 11116 : CALL keyword_release(keyword)
1495 :
1496 11116 : END SUBROUTINE create_bse_screening_section
1497 :
1498 11116 : SUBROUTINE create_bse_nto_section(print_key)
1499 : TYPE(section_type), POINTER :: print_key
1500 :
1501 : TYPE(keyword_type), POINTER :: keyword
1502 :
1503 11116 : CPASSERT(.NOT. ASSOCIATED(print_key))
1504 :
1505 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="NTO_ANALYSIS", &
1506 : description="Perform a natural transition orbital analysis, i.e. the transition density matrix "// &
1507 : "$T^{(n)}=\left( \begin{array}{cc}0& {X}^{(n)}\\ \left({Y}^{(n)} \right)^T & 0\end{array} \right)$ "// &
1508 : "is decomposed into its singular values "// &
1509 : "$T^{(n)} = {U}^{(n)} {\Lambda^{(n)}} \left({V}^{(n)}\right)^T$ "// &
1510 : "in order to compute the NTO pairs "// &
1511 : "$\phi_I^{(n)}(\mathbf{r}_e) = \sum_{p=1}^{N_b} \varphi_p(\mathbf{r}_e) V_{p,I}^{(n)}$ for the electron and "// &
1512 : "$\chi_I^{(n)}(\mathbf{r}_h) = \sum_{q=1}^{N_b} \varphi_q(\mathbf{r}_h) U_{q,I}^{(n)}$ for the hole.", &
1513 : print_level=debug_print_level + 1, & ! Corresponds to "off" as default behavior
1514 11116 : filename="BSE-NTO_ANALYSIS") ! All other print levels will trigger the analysis
1515 : ! cf. input/cp_output_handling.F:cp_print_key_section_create
1516 :
1517 11116 : NULLIFY (keyword)
1518 : CALL keyword_create(keyword, __LOCATION__, name="EPS_NTO_EIGVAL", &
1519 : description="Threshold for NTO eigenvalues, i.e. only "// &
1520 : "${\left(\lambda_I^{(n)}\right)}^2$ > EPS_NTO_EIGVAL are considered.", &
1521 : usage="EPS_NTO_EIGVAL 0.01", &
1522 : n_var=1, &
1523 : type_of_var=real_t, &
1524 11116 : default_r_val=0.01_dp)
1525 11116 : CALL section_add_keyword(print_key, keyword)
1526 11116 : CALL keyword_release(keyword)
1527 :
1528 : CALL keyword_create(keyword, __LOCATION__, name="EPS_OSC_STR", &
1529 : description="Threshold of oscillator strengths $f^{(n)}$ for an excitation level. "// &
1530 : "In case, the excitation level n has a smaller oscillator strength, the "// &
1531 : "NTOs for this excitation level are not printed.", &
1532 : usage="EPS_OSC_STR 0.01", &
1533 : n_var=1, &
1534 : type_of_var=real_t, &
1535 11116 : default_r_val=-1.0_dp)
1536 11116 : CALL section_add_keyword(print_key, keyword)
1537 11116 : CALL keyword_release(keyword)
1538 :
1539 : CALL keyword_create(keyword, __LOCATION__, name="NUM_PRINT_EXC_NTOS", &
1540 : description="Number of excitation level $n$ up to which NTOs are printed. "// &
1541 : "By default, this is set to NUM_PRINT_EXC. Negative or too large "// &
1542 : "NUM_PRINT_EXC_NTOS defaults to NUM_PRINT_EXC.", &
1543 : usage="NUM_PRINT_EXC_NTOS 5", &
1544 : n_var=1, &
1545 : type_of_var=integer_t, &
1546 11116 : default_i_val=-1)
1547 11116 : CALL section_add_keyword(print_key, keyword)
1548 11116 : CALL keyword_release(keyword)
1549 :
1550 : CALL keyword_create(keyword, __LOCATION__, name="STATE_LIST", &
1551 : description="Specifies a list of excitation levels $n$ for which NTOs are printed. "// &
1552 : "Overrides NUM_PRINT_EXC_NTOS.", &
1553 : usage="STATE_LIST {integer} {integer} .. {integer}", &
1554 11116 : n_var=-1, type_of_var=integer_t)
1555 11116 : CALL section_add_keyword(print_key, keyword)
1556 11116 : CALL keyword_release(keyword)
1557 :
1558 : CALL keyword_create(keyword, __LOCATION__, name="CUBE_FILES", &
1559 : description="Print NTOs on Cube Files", &
1560 : usage="CUBE_FILES {logical}", repeats=.FALSE., n_var=1, &
1561 11116 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE., type_of_var=logical_t)
1562 11116 : CALL section_add_keyword(print_key, keyword)
1563 11116 : CALL keyword_release(keyword)
1564 :
1565 : CALL keyword_create(keyword, __LOCATION__, name="STRIDE", &
1566 : description="The stride (X,Y,Z) used to write the cube file "// &
1567 : "(larger values result in smaller cube files). Provide 3 numbers (for X,Y,Z) or"// &
1568 : " 1 number valid for all components.", &
1569 11116 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
1570 11116 : CALL section_add_keyword(print_key, keyword)
1571 11116 : CALL keyword_release(keyword)
1572 :
1573 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
1574 : description="append the cube files when they already exist", &
1575 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1576 11116 : CALL section_add_keyword(print_key, keyword)
1577 11116 : CALL keyword_release(keyword)
1578 :
1579 11116 : END SUBROUTINE create_bse_nto_section
1580 :
1581 11116 : SUBROUTINE create_bse_spectrum_section(section)
1582 : TYPE(section_type), POINTER :: section
1583 :
1584 : TYPE(keyword_type), POINTER :: keyword
1585 :
1586 11116 : CPASSERT(.NOT. ASSOCIATED(section))
1587 : CALL section_create(section, __LOCATION__, name="BSE_SPECTRUM", &
1588 : description="Parameters influencing the output of the optical absorption spectrum, i.e. "// &
1589 : "the dynamical dipole polarizability tensor $\alpha_{\mu,\mu'}(\omega)$ "// &
1590 : "($\mu,\mu'\in\{x,y,z\}$), obtained from a BSE calculation, which is defined as "// &
1591 : "$ \alpha_{\mu,\mu'}(\omega) = \sum_n \frac{2 E^{(n)} d^{(n)}_{\mu} d^{(n)}_{\mu'}} "// &
1592 : "{(\omega+i\eta)^2-\left(\Omega^{(n)}\right)^2} $. "// &
1593 : "The printed file will contain the specified frequency range $\omega$ and the "// &
1594 : "corresponding imaginary part of the average $\bar{\alpha}(\omega)=\frac{1}{3}\mathrm{Tr} "// &
1595 : "\left[ \alpha_{\mu,\mu'}(\omega)\right]$ as well as of the elements of $\alpha_{\mu,\mu'}(\omega)$.", &
1596 11116 : n_keywords=9, n_subsections=0, repeats=.FALSE.)
1597 :
1598 11116 : NULLIFY (keyword)
1599 :
1600 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
1601 : description="Activates printing of optical absorption spectrum from the BSE calculation.", &
1602 : usage="&BSE .TRUE.", &
1603 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1604 11116 : CALL section_add_keyword(section, keyword)
1605 11116 : CALL keyword_release(keyword)
1606 :
1607 : CALL keyword_create(keyword, __LOCATION__, name="FREQUENCY_STEP_SIZE", &
1608 : description="Step size of frequencies for the optical absorption spectrum.", &
1609 : usage="FREQUENCY_STEP_SIZE 0.1", unit_str="eV", &
1610 : type_of_var=real_t, &
1611 11116 : default_r_val=cp_unit_to_cp2k(value=0.1_dp, unit_str="eV"))
1612 11116 : CALL section_add_keyword(section, keyword)
1613 11116 : CALL keyword_release(keyword)
1614 :
1615 : CALL keyword_create(keyword, __LOCATION__, name="FREQUENCY_STARTING_POINT", &
1616 : description="First frequency to print in the optical absorption spectrum.", &
1617 : usage="FREQUENCY_STARTING_POINT 0", unit_str="eV", &
1618 11116 : type_of_var=real_t, default_r_val=0.0_dp)
1619 11116 : CALL section_add_keyword(section, keyword)
1620 11116 : CALL keyword_release(keyword)
1621 :
1622 : CALL keyword_create(keyword, __LOCATION__, name="FREQUENCY_END_POINT", &
1623 : description="Last frequency to print in the optical absorption spectrum.", &
1624 : usage="FREQUENCY_END_POINT 0", unit_str="eV", &
1625 : type_of_var=real_t, &
1626 11116 : default_r_val=cp_unit_to_cp2k(value=100.0_dp, unit_str="eV"))
1627 11116 : CALL section_add_keyword(section, keyword)
1628 11116 : CALL keyword_release(keyword)
1629 :
1630 : CALL keyword_create(keyword, __LOCATION__, name="ETA_LIST", &
1631 : description="List of broadening of the peaks in the optical absorption spectrum.", &
1632 : usage="ETA_LIST 0.01 ...", unit_str="eV", &
1633 : default_r_vals=[cp_unit_to_cp2k(value=0.01_dp, unit_str="eV")], &
1634 22232 : type_of_var=real_t, n_var=-1)
1635 11116 : CALL section_add_keyword(section, keyword)
1636 11116 : CALL keyword_release(keyword)
1637 :
1638 11116 : END SUBROUTINE create_bse_spectrum_section
1639 :
1640 : ! **************************************************************************************************
1641 : !> \brief ...
1642 : !> \param section ...
1643 : ! **************************************************************************************************
1644 11116 : SUBROUTINE create_bse_iterat_section(section)
1645 : TYPE(section_type), POINTER :: section
1646 :
1647 : TYPE(keyword_type), POINTER :: keyword
1648 :
1649 11116 : CPASSERT(.NOT. ASSOCIATED(section))
1650 : CALL section_create(section, __LOCATION__, name="BSE_ITERAT", &
1651 : description="Parameters influencing the iterative Bethe-Salpeter calculation. "// &
1652 : "The iterative solver has not been fully implemented yet.", &
1653 11116 : n_keywords=9, n_subsections=0, repeats=.FALSE.)
1654 :
1655 11116 : NULLIFY (keyword)
1656 :
1657 : CALL keyword_create(keyword, __LOCATION__, name="DAVIDSON_ABORT_COND", &
1658 : description="Desired abortion condition for Davidson solver", &
1659 : usage="DAVIDSON_ABORT_COND OR", &
1660 : enum_c_vals=s2a("EN", "RES", "OR"), &
1661 : enum_i_vals=[bse_iter_en_cond, bse_iter_res_cond, bse_iter_both_cond], &
1662 : enum_desc=s2a("Uses energy threshold for successfully exiting solver.", &
1663 : "Uses residual threshold for successfully exiting solver.", &
1664 : "Uses either energy or residual threshold for successfully exiting solver."), &
1665 11116 : default_i_val=bse_iter_en_cond)
1666 11116 : CALL section_add_keyword(section, keyword)
1667 11116 : CALL keyword_release(keyword)
1668 :
1669 : CALL keyword_create(keyword, __LOCATION__, name="NUM_EXC_EN", &
1670 : description="Number of lowest excitation energies to be computed.", &
1671 : usage="NUM_EXC_EN 3", &
1672 11116 : default_i_val=3)
1673 11116 : CALL section_add_keyword(section, keyword)
1674 11116 : CALL keyword_release(keyword)
1675 :
1676 : CALL keyword_create(keyword, __LOCATION__, name="NUM_ADD_START_Z_SPACE", &
1677 : description="Determines the initial dimension of the subspace as "// &
1678 : "dim = (NUM_EXC_EN+NUM_ADD_START_Z_SPACE)", &
1679 : usage="NUM_ADD_START_Z_SPACE 1", &
1680 11116 : default_i_val=0)
1681 11116 : CALL section_add_keyword(section, keyword)
1682 11116 : CALL keyword_release(keyword)
1683 :
1684 : CALL keyword_create(keyword, __LOCATION__, name="FAC_MAX_Z_SPACE", &
1685 : description="Factor to determine maximum dimension of the Davidson subspace. "// &
1686 : "dimension = (NUM_EXC_EN+NUM_ADD_START_Z_SPACE)*FAC_MAX_Z_SPACE", &
1687 : usage="FAC_MAX_Z_SPACE 5", &
1688 11116 : default_i_val=5)
1689 11116 : CALL section_add_keyword(section, keyword)
1690 11116 : CALL keyword_release(keyword)
1691 :
1692 : CALL keyword_create(keyword, __LOCATION__, name="NUM_NEW_T", &
1693 : description="Number of new t vectors added. "// &
1694 : "Must be smaller/equals (NUM_EXC_EN+NUM_ADD_START_Z_SPACE)", &
1695 : usage="NUM_NEW_T 4", &
1696 11116 : default_i_val=1)
1697 11116 : CALL section_add_keyword(section, keyword)
1698 11116 : CALL keyword_release(keyword)
1699 :
1700 : CALL keyword_create(keyword, __LOCATION__, name="EPS_RES", &
1701 : description="Threshold for stopping the iteration for computing the transition energies. "// &
1702 : "If the residuals inside the Davidson space change by less than EPS_RES (in eV), the iteration "// &
1703 : "stops.", &
1704 : usage="EPS_RES 0.001", unit_str="eV", &
1705 11116 : type_of_var=real_t, default_r_val=0.001_dp)
1706 11116 : CALL section_add_keyword(section, keyword)
1707 11116 : CALL keyword_release(keyword)
1708 :
1709 : CALL keyword_create(keyword, __LOCATION__, name="EPS_EXC_EN", &
1710 : description="Threshold for stopping the iteration for computing the transition energies. "// &
1711 : "If the desired excitation energies change by less than EPS_EXC_EN (in eV), the iteration "// &
1712 : "stops.", &
1713 : usage="EPS_EXC_EN 0.001", unit_str="eV", &
1714 11116 : type_of_var=real_t, default_r_val=0.001_dp)
1715 11116 : CALL section_add_keyword(section, keyword)
1716 11116 : CALL keyword_release(keyword)
1717 :
1718 : CALL keyword_create(keyword, __LOCATION__, name="NUM_DAVIDSON_ITER", &
1719 : description="Maximum number of iterations for determining the transition energies.", &
1720 : usage="NUM_DAVIDSON_ITER 100", &
1721 11116 : default_i_val=100)
1722 11116 : CALL section_add_keyword(section, keyword)
1723 11116 : CALL keyword_release(keyword)
1724 :
1725 : CALL keyword_create(keyword, __LOCATION__, name="Z_SPACE_ENERGY_CUTOFF", &
1726 : description="Cutoff (in eV) for maximal energy difference entering the A matrix. "// &
1727 : "Per default and for negative values, there is no cutoff applied.", &
1728 : usage="Z_SPACE_ENERGY_CUTOFF 60", unit_str="eV", &
1729 11116 : type_of_var=real_t, default_r_val=-1.0_dp)
1730 11116 : CALL section_add_keyword(section, keyword)
1731 11116 : CALL keyword_release(keyword)
1732 11116 : END SUBROUTINE create_bse_iterat_section
1733 :
1734 : ! **************************************************************************************************
1735 : !> \brief ...
1736 : !> \param section ...
1737 : ! **************************************************************************************************
1738 11116 : SUBROUTINE create_ic_section(section)
1739 : TYPE(section_type), POINTER :: section
1740 :
1741 : TYPE(keyword_type), POINTER :: keyword
1742 :
1743 11116 : CPASSERT(.NOT. ASSOCIATED(section))
1744 : CALL section_create(section, __LOCATION__, name="IC", &
1745 : description="Parameters influencing the image charge correction. "// &
1746 : "The image plane is always an xy plane, so adjust the molecule according "// &
1747 : "to that. ", &
1748 11116 : n_keywords=3, n_subsections=1, repeats=.FALSE.)
1749 :
1750 11116 : NULLIFY (keyword)
1751 :
1752 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_IC_LIST", &
1753 : description="If true, the image charge correction values are printed in a list, "// &
1754 : "such that it can be used as input for a subsequent evGW calculation.", &
1755 : usage="PRINT_IC_LIST .TRUE.", &
1756 : default_l_val=.FALSE., &
1757 11116 : lone_keyword_l_val=.TRUE.)
1758 11116 : CALL section_add_keyword(section, keyword)
1759 11116 : CALL keyword_release(keyword)
1760 :
1761 : CALL keyword_create(keyword, __LOCATION__, name="EPS_DIST", &
1762 : description="Threshold where molecule and image molecule have to coincide. ", &
1763 : usage="EPS_DIST 0.1", unit_str="angstrom", &
1764 11116 : type_of_var=real_t, default_r_val=3.0E-02_dp, repeats=.FALSE.)
1765 11116 : CALL section_add_keyword(section, keyword)
1766 11116 : CALL keyword_release(keyword)
1767 :
1768 11116 : END SUBROUTINE create_ic_section
1769 :
1770 : ! **************************************************************************************************
1771 : !> \brief ...
1772 : !> \param section ...
1773 : ! **************************************************************************************************
1774 11116 : SUBROUTINE create_low_scaling(section)
1775 : TYPE(section_type), POINTER :: section
1776 :
1777 : TYPE(keyword_type), POINTER :: keyword
1778 : TYPE(section_type), POINTER :: subsection
1779 :
1780 11116 : CPASSERT(.NOT. ASSOCIATED(section))
1781 : CALL section_create( &
1782 : section, __LOCATION__, name="LOW_SCALING", &
1783 : description="Cubic scaling RI-RPA, GW and Laplace-SOS-MP2 method using the imaginary time formalism. "// &
1784 : "EPS_GRID in WFC_GPW section controls accuracy / req. memory for 3-center integrals. "// &
1785 : "SORT_BASIS EXP should be specified in DFT section.", &
1786 : n_keywords=12, n_subsections=2, repeats=.FALSE., &
1787 44464 : citations=[Wilhelm2016b, Wilhelm2018, Bussy2023])
1788 :
1789 11116 : NULLIFY (keyword)
1790 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
1791 : description="Activates cubic-scaling RPA, GW and Laplace-SOS-MP2 calculations.", &
1792 : usage="&LOW_SCALING .TRUE.", &
1793 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1794 11116 : CALL section_add_keyword(section, keyword)
1795 11116 : CALL keyword_release(keyword)
1796 :
1797 : CALL keyword_create(keyword, __LOCATION__, name="MEMORY_CUT", &
1798 : description="Reduces memory for sparse tensor contractions by this factor. "// &
1799 : "A high value leads to some loss of performance. "// &
1800 : "This memory reduction factor applies to storage of the tensors 'M occ' / 'M virt' "// &
1801 : "but does not reduce storage of '3c ints'.", &
1802 : usage="MEMORY_CUT 16", &
1803 11116 : default_i_val=5)
1804 11116 : CALL section_add_keyword(section, keyword)
1805 11116 : CALL keyword_release(keyword)
1806 :
1807 : CALL keyword_create(keyword, __LOCATION__, name="MEMORY_INFO", &
1808 : description="Decide whether to print memory info on the sparse matrices.", &
1809 : usage="MEMORY_INFO", &
1810 : default_l_val=.FALSE., &
1811 11116 : lone_keyword_l_val=.TRUE.)
1812 11116 : CALL section_add_keyword(section, keyword)
1813 11116 : CALL keyword_release(keyword)
1814 :
1815 : CALL keyword_create( &
1816 : keyword, __LOCATION__, name="EPS_FILTER", &
1817 : description="Determines a threshold for the DBCSR based multiply. "// &
1818 : "Normally, this EPS_FILTER determines accuracy and timing of low-scaling RPA and GW calculations.", &
1819 : usage="EPS_FILTER 1.0E-10 ", type_of_var=real_t, &
1820 11116 : default_r_val=1.0E-9_dp)
1821 11116 : CALL section_add_keyword(section, keyword)
1822 11116 : CALL keyword_release(keyword)
1823 :
1824 : CALL keyword_create( &
1825 : keyword, __LOCATION__, name="EPS_FILTER_FACTOR", &
1826 : description="Multiply EPS_FILTER with this factor to determine filter epsilon "// &
1827 : "for DBCSR based multiply P(it)=(Mocc(it))^T*Mvirt(it) "// &
1828 : "Default should be kept.", &
1829 : type_of_var=real_t, &
1830 11116 : default_r_val=10.0_dp)
1831 11116 : CALL section_add_keyword(section, keyword)
1832 11116 : CALL keyword_release(keyword)
1833 :
1834 : CALL keyword_create( &
1835 : keyword, __LOCATION__, &
1836 : name="EPS_STORAGE_SCALING", &
1837 : variants=["EPS_STORAGE"], &
1838 : description="Scaling factor to scale EPS_FILTER. Storage threshold for compression "// &
1839 : "will be EPS_FILTER*EPS_STORAGE_SCALING.", &
1840 22232 : default_r_val=1.0E-3_dp)
1841 11116 : CALL section_add_keyword(section, keyword)
1842 11116 : CALL keyword_release(keyword)
1843 :
1844 : CALL keyword_create( &
1845 : keyword, __LOCATION__, &
1846 : name="DO_KPOINTS", &
1847 : description="Besides in DFT, this keyword has to be switched on if one wants to do kpoints in. "// &
1848 : "cubic RPA.", &
1849 : usage="DO_KPOINTS", &
1850 : default_l_val=.FALSE., &
1851 11116 : lone_keyword_l_val=.TRUE.)
1852 11116 : CALL section_add_keyword(section, keyword)
1853 11116 : CALL keyword_release(keyword)
1854 :
1855 : CALL keyword_create( &
1856 : keyword, __LOCATION__, name="KPOINTS", &
1857 : description="Keyword activates periodic, low-scaling GW calculations (&LOW_SCALING section also needed). "// &
1858 : "For periodic calculations, kpoints are used for the density response, the "// &
1859 : "Coulomb interaction and the screened Coulomb interaction. For 2d periodic systems, e.g. xz "// &
1860 : "periodicity, please also specify KPOINTS, e.g. N_x 1 N_z.", &
1861 : usage="KPOINTS N_x N_y N_z", &
1862 11116 : n_var=3, type_of_var=integer_t, default_i_vals=[0, 0, 0])
1863 11116 : CALL section_add_keyword(section, keyword)
1864 11116 : CALL keyword_release(keyword)
1865 :
1866 : CALL keyword_create( &
1867 : keyword, __LOCATION__, &
1868 : name="KPOINT_WEIGHTS_W", &
1869 : description="For kpoints in low-scaling GW, a Monkhorst-Pack mesh is used. The screened Coulomb "// &
1870 : "interaction W(k) needs special care near the Gamma point (e.g. in 3d, W(k) diverges at the "// &
1871 : "Gamma point with W(k) ~ k^alpha). KPOINT_WEIGHTS_W decides how the weights of the "// &
1872 : "Monkhorst-Pack mesh are chosen to compute W(R) = int_BZ W(k) exp(ikR) dk (BZ=Brllouin zone). ", &
1873 : usage="KPOINT_WEIGHTS_W AUTO", &
1874 : enum_c_vals=s2a("TAILORED", "AUTO", "UNIFORM"), &
1875 : enum_i_vals=[kp_weights_W_tailored, kp_weights_W_auto, kp_weights_W_uniform], &
1876 : enum_desc=s2a("Choose k-point integration weights such that the function f(k)=k^alpha is "// &
1877 : "exactly integrated. alpha is specified using EXPONENT_TAILORED_WEIGHTS.", &
1878 : "As 'TAILORED', but alpha is chosen automatically according to dimensionality "// &
1879 : "(3D: alpha = -2 for 3D, 2D: alpha = -1 for exchange self-energy, uniform "// &
1880 : "weights for correlation self-energy).", &
1881 : "Choose the same weight for every k-point (original Monkhorst-Pack method)."), &
1882 11116 : default_i_val=kp_weights_W_uniform)
1883 11116 : CALL section_add_keyword(section, keyword)
1884 11116 : CALL keyword_release(keyword)
1885 :
1886 : CALL keyword_create( &
1887 : keyword, __LOCATION__, &
1888 : name="EXPONENT_TAILORED_WEIGHTS", &
1889 : description="Gives the exponent of exactly integrated function in case 'KPOINT_WEIGHTS_W "// &
1890 : "TAILORED' is chosen.", &
1891 : usage="EXPONENT_TAILORED_WEIGHTS -2", &
1892 11116 : default_r_val=-2.0_dp)
1893 11116 : CALL section_add_keyword(section, keyword)
1894 11116 : CALL keyword_release(keyword)
1895 :
1896 : CALL keyword_create( &
1897 : keyword, __LOCATION__, &
1898 : name="REGULARIZATION_RI", &
1899 : description="Parameter to reduce the expansion coefficients in RI for periodic GW. Larger parameter "// &
1900 : "means smaller expansion coefficients that leads to a more stable calculation at the price "// &
1901 : "of a slightly worse RI approximation. In case the parameter 0.0 is chosen, ordinary RI is used.", &
1902 : usage="REGULARIZATION_RI 1.0E-4", &
1903 11116 : default_r_val=0.0_dp)
1904 11116 : CALL section_add_keyword(section, keyword)
1905 11116 : CALL keyword_release(keyword)
1906 :
1907 : CALL keyword_create( &
1908 : keyword, __LOCATION__, &
1909 : name="EPS_EIGVAL_S", &
1910 : description="Parameter to reduce the expansion coefficients in RI for periodic GW. Removes all "// &
1911 : "eigenvectors and eigenvalues of S_PQ(k) that are smaller than EPS_EIGVAL_S. ", &
1912 : usage="EPS_EIGVAL_S 1.0E-3", &
1913 11116 : default_r_val=0.0_dp)
1914 11116 : CALL section_add_keyword(section, keyword)
1915 11116 : CALL keyword_release(keyword)
1916 :
1917 : CALL keyword_create( &
1918 : keyword, __LOCATION__, &
1919 : name="EPS_EIGVAL_S_GAMMA", &
1920 : description="Parameter to reduce the expansion coefficients in RI for periodic GW. Removes all "// &
1921 : "eigenvectors and eigenvalues of M_PQ(k=0) that are smaller than EPS_EIGVAL_S. ", &
1922 : usage="EPS_EIGVAL_S_GAMMA 1.0E-3", &
1923 11116 : default_r_val=0.0_dp)
1924 11116 : CALL section_add_keyword(section, keyword)
1925 11116 : CALL keyword_release(keyword)
1926 :
1927 : CALL keyword_create( &
1928 : keyword, __LOCATION__, &
1929 : name="MAKE_CHI_POS_DEFINITE", &
1930 : description="If true, makes eigenvalue decomposition of chi(iw,k) and removes negative "// &
1931 : "eigenvalues. May increase computational cost significantly. Only recommended to try in case "// &
1932 : "Cholesky decomposition of epsilon(iw,k) fails.", &
1933 : usage="MAKE_CHI_POS_DEFINITE", &
1934 : default_l_val=.TRUE., &
1935 11116 : lone_keyword_l_val=.TRUE.)
1936 11116 : CALL section_add_keyword(section, keyword)
1937 11116 : CALL keyword_release(keyword)
1938 :
1939 : CALL keyword_create( &
1940 : keyword, __LOCATION__, &
1941 : name="MAKE_OVERLAP_MAT_AO_POS_DEFINITE", &
1942 : description="If true, makes eigenvalue decomposition of S_mu,nu(k) and removes negative "// &
1943 : "eigenvalues. Slightly increases computational cost. Only recommended to try in case "// &
1944 : "Cholesky decomposition of S_mu,nu(k) fails (error message: Cholesky decompose failed: "// &
1945 : "matrix is not positive definite or ill-conditioned; when calling create_kp_and_calc_kp_orbitals).", &
1946 : usage="MAKE_OVERLAP_MAT_AO_POS_DEFINITE", &
1947 : default_l_val=.FALSE., &
1948 11116 : lone_keyword_l_val=.TRUE.)
1949 11116 : CALL section_add_keyword(section, keyword)
1950 11116 : CALL keyword_release(keyword)
1951 :
1952 : CALL keyword_create( &
1953 : keyword, __LOCATION__, &
1954 : name="DO_EXTRAPOLATE_KPOINTS", &
1955 : description="If true, use a larger k-mesh to extrapolate the k-point integration of W. "// &
1956 : "For example, in 2D, when using KPOINTS 4 4 1, an additional 6x6x1 mesh will be used to "// &
1957 : "extrapolate the k-point integration of W with N_k^-0.5, where Nk is the number of k-points.", &
1958 : usage="DO_EXTRAPOLATE_KPOINTS FALSE", &
1959 : default_l_val=.TRUE., &
1960 11116 : lone_keyword_l_val=.TRUE.)
1961 11116 : CALL section_add_keyword(section, keyword)
1962 11116 : CALL keyword_release(keyword)
1963 :
1964 : CALL keyword_create( &
1965 : keyword, __LOCATION__, &
1966 : name="TRUNC_COULOMB_RI_X", &
1967 : description="If true, use the truncated Coulomb operator for the exchange-self-energy in "// &
1968 : "periodic GW.", &
1969 : usage="TRUNC_COULOMB_RI_X", &
1970 : default_l_val=.TRUE., &
1971 11116 : lone_keyword_l_val=.TRUE.)
1972 11116 : CALL section_add_keyword(section, keyword)
1973 11116 : CALL keyword_release(keyword)
1974 :
1975 : CALL keyword_create( &
1976 : keyword, __LOCATION__, &
1977 : name="REL_CUTOFF_TRUNC_COULOMB_RI_X", &
1978 : description="Only active in case TRUNC_COULOMB_RI_X = True. Normally, relative cutoff = 0.5 is "// &
1979 : "good choice; still needs to be evaluated for RI schemes. ", &
1980 : usage="REL_CUTOFF_TRUNC_COULOMB_RI_X 0.3", &
1981 11116 : default_r_val=0.5_dp)
1982 11116 : CALL section_add_keyword(section, keyword)
1983 11116 : CALL keyword_release(keyword)
1984 :
1985 : CALL keyword_create( &
1986 : keyword, __LOCATION__, &
1987 : name="KEEP_QUADRATURE", &
1988 : variants=s2a("KEEP_WEIGHTS", "KEEP_QUAD", "KEEP_WEIGHT"), &
1989 : description="Keep the Laplace quadrature defined at the first energy evaluations throughout "// &
1990 : "the run. Allows to have consistent force evaluations.", &
1991 : usage="KEEP_QUADRATURE", &
1992 : default_l_val=.TRUE., &
1993 11116 : lone_keyword_l_val=.TRUE.)
1994 11116 : CALL section_add_keyword(section, keyword)
1995 11116 : CALL keyword_release(keyword)
1996 :
1997 : CALL keyword_create( &
1998 : keyword, __LOCATION__, &
1999 : name="K_MESH_G_FACTOR", &
2000 : description="The k-mesh for the Green's function can be chosen to be larger than the k-mesh for "// &
2001 : "W (without much higher computational cost). The factor given here multiplies the mesh for W to obtain "// &
2002 : "the k-mesh for G. Example: factor 4, k-mesh for W: 4x4x1 -> k-mesh for G: 16x16x1 (z-dir. is "// &
2003 : "non-periodic).", &
2004 11116 : default_i_val=1)
2005 11116 : CALL section_add_keyword(section, keyword)
2006 11116 : CALL keyword_release(keyword)
2007 :
2008 : CALL keyword_create( &
2009 : keyword, __LOCATION__, &
2010 : name="MIN_BLOCK_SIZE", &
2011 : description="Minimum tensor block size. Adjusting this value may have minor effect on "// &
2012 : "performance but default should be good enough.", &
2013 11116 : default_i_val=5)
2014 11116 : CALL section_add_keyword(section, keyword)
2015 11116 : CALL keyword_release(keyword)
2016 :
2017 : CALL keyword_create( &
2018 : keyword, __LOCATION__, &
2019 : name="MIN_BLOCK_SIZE_MO", &
2020 : description="Tensor block size for MOs. Only relevant for GW calculations. "// &
2021 : "The memory consumption of GW scales as O(MIN_BLOCK_SIZE_MO). It is recommended to "// &
2022 : "set this parameter to a smaller number if GW runs out of memory. "// &
2023 : "Otherwise the default should not be changed.", &
2024 11116 : default_i_val=64)
2025 11116 : CALL section_add_keyword(section, keyword)
2026 11116 : CALL keyword_release(keyword)
2027 :
2028 11116 : NULLIFY (subsection)
2029 11116 : CALL create_low_scaling_cphf(subsection)
2030 11116 : CALL section_add_subsection(section, subsection)
2031 11116 : CALL section_release(subsection)
2032 :
2033 11116 : END SUBROUTINE create_low_scaling
2034 :
2035 : ! **************************************************************************************************
2036 : !> \brief ...
2037 : !> \param section ...
2038 : ! **************************************************************************************************
2039 11116 : SUBROUTINE create_wfc_gpw(section)
2040 : TYPE(section_type), POINTER :: section
2041 :
2042 : TYPE(keyword_type), POINTER :: keyword
2043 :
2044 11116 : CPASSERT(.NOT. ASSOCIATED(section))
2045 : CALL section_create(section, __LOCATION__, name="WFC_GPW", &
2046 : description="Parameters for the GPW approach in Wavefunction-based Correlation methods", &
2047 11116 : n_keywords=5, n_subsections=0, repeats=.FALSE.)
2048 :
2049 11116 : NULLIFY (keyword)
2050 : CALL keyword_create(keyword, __LOCATION__, name="EPS_GRID", &
2051 : description="Determines a threshold for the GPW based integration", &
2052 : usage="EPS_GRID 1.0E-9 ", type_of_var=real_t, &
2053 11116 : default_r_val=1.0E-8_dp)
2054 11116 : CALL section_add_keyword(section, keyword)
2055 11116 : CALL keyword_release(keyword)
2056 :
2057 : CALL keyword_create( &
2058 : keyword, __LOCATION__, name="EPS_FILTER", &
2059 : description="Determines a threshold for the DBCSR based multiply (usually 10 times smaller than EPS_GRID). "// &
2060 : "Normally, this EPS_FILTER determines accuracy and timing of cubic-scaling RPA calculation.", &
2061 : usage="EPS_FILTER 1.0E-10 ", type_of_var=real_t, &
2062 11116 : default_r_val=1.0E-9_dp)
2063 11116 : CALL section_add_keyword(section, keyword)
2064 11116 : CALL keyword_release(keyword)
2065 :
2066 : CALL keyword_create(keyword, __LOCATION__, name="CUTOFF", &
2067 : description="The cutoff of the finest grid level in the MP2 gpw integration.", &
2068 : usage="CUTOFF 300", type_of_var=real_t, &
2069 11116 : default_r_val=300.0_dp)
2070 11116 : CALL section_add_keyword(section, keyword)
2071 11116 : CALL keyword_release(keyword)
2072 :
2073 : CALL keyword_create(keyword, __LOCATION__, name="REL_CUTOFF", &
2074 : variants=["RELATIVE_CUTOFF"], &
2075 : description="Determines the grid at which a Gaussian is mapped.", &
2076 : usage="REL_CUTOFF 50", type_of_var=real_t, &
2077 22232 : default_r_val=50.0_dp)
2078 11116 : CALL section_add_keyword(section, keyword)
2079 11116 : CALL keyword_release(keyword)
2080 :
2081 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_LEVEL", &
2082 : variants=["IOLEVEL"], &
2083 : description="How much output is written by the individual groups.", &
2084 : usage="PRINT_LEVEL HIGH", &
2085 : default_i_val=silent_print_level, enum_c_vals= &
2086 : s2a("SILENT", "LOW", "MEDIUM", "HIGH", "DEBUG"), &
2087 : enum_desc=s2a("Almost no output", &
2088 : "Little output", "Quite some output", "Lots of output", &
2089 : "Everything is written out, useful for debugging purposes only"), &
2090 : enum_i_vals=[silent_print_level, low_print_level, medium_print_level, &
2091 22232 : high_print_level, debug_print_level])
2092 11116 : CALL section_add_keyword(section, keyword)
2093 11116 : CALL keyword_release(keyword)
2094 :
2095 : CALL keyword_create( &
2096 : keyword, __LOCATION__, name="EPS_PGF_ORB_S", &
2097 : description="Screening for overlap matrix in RI. Usually, it is best to choose this parameter "// &
2098 : "to be very small since the inversion of overlap matrix might be ill-conditioned.", &
2099 : usage="EPS_PGF_ORB_S 1.0E-10 ", type_of_var=real_t, &
2100 11116 : default_r_val=1.0E-10_dp)
2101 11116 : CALL section_add_keyword(section, keyword)
2102 11116 : CALL keyword_release(keyword)
2103 :
2104 11116 : END SUBROUTINE create_wfc_gpw
2105 :
2106 : ! **************************************************************************************************
2107 : !> \brief ...
2108 : !> \param section ...
2109 : ! **************************************************************************************************
2110 11116 : SUBROUTINE create_cphf(section)
2111 : TYPE(section_type), POINTER :: section
2112 :
2113 : TYPE(keyword_type), POINTER :: keyword
2114 :
2115 11116 : CPASSERT(.NOT. ASSOCIATED(section))
2116 : CALL section_create( &
2117 : section, __LOCATION__, name="CPHF", &
2118 : description="Parameters influencing the solution of the Z-vector equations in MP2 gradients calculations.", &
2119 : n_keywords=2, n_subsections=0, repeats=.FALSE., &
2120 22232 : citations=[DelBen2013])
2121 :
2122 11116 : NULLIFY (keyword)
2123 :
2124 : CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
2125 : variants=["MAX_NUM_ITER"], &
2126 : description="Maximum number of iterations allowed for the solution of the Z-vector equations.", &
2127 : usage="MAX_ITER 50", &
2128 22232 : default_i_val=30)
2129 11116 : CALL section_add_keyword(section, keyword)
2130 11116 : CALL keyword_release(keyword)
2131 :
2132 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_EVERY", &
2133 : description="Restart iteration every given number of steps.", &
2134 : usage="RESTART_EVERY 5", &
2135 11116 : default_i_val=5)
2136 11116 : CALL section_add_keyword(section, keyword)
2137 11116 : CALL keyword_release(keyword)
2138 :
2139 : CALL keyword_create(keyword, __LOCATION__, name="SOLVER_METHOD", &
2140 : description="Chose solver of the z-vector equations.", &
2141 : usage="SOLVER_METHOD POPLE", enum_c_vals= &
2142 : s2a("POPLE", "CG", "RICHARDSON", "SD"), &
2143 : enum_desc=s2a("Pople's method (Default).", &
2144 : "Conjugated gradient method (equivalent to Pople).", &
2145 : "Richardson iteration", &
2146 : "Steepest Descent iteration"), &
2147 : enum_i_vals=[z_solver_pople, z_solver_cg, z_solver_richardson, z_solver_sd], &
2148 11116 : default_i_val=z_solver_pople)
2149 11116 : CALL section_add_keyword(section, keyword)
2150 11116 : CALL keyword_release(keyword)
2151 :
2152 : CALL keyword_create(keyword, __LOCATION__, name="EPS_CONV", &
2153 : description="Convergence threshold for the solution of the Z-vector equations. "// &
2154 : "The Z-vector equations have the form of a linear system of equations Ax=b, "// &
2155 : "convergence is achieved when |Ax-b|<=EPS_CONV.", &
2156 : usage="EPS_CONV 1.0E-6", type_of_var=real_t, &
2157 11116 : default_r_val=1.0E-4_dp)
2158 11116 : CALL section_add_keyword(section, keyword)
2159 11116 : CALL keyword_release(keyword)
2160 :
2161 : CALL keyword_create(keyword, __LOCATION__, name="SCALE_STEP_SIZE", &
2162 : description="Scaling factor of each step.", &
2163 : usage="SCALE_STEP_SIZE 1.0", &
2164 11116 : default_r_val=1.0_dp)
2165 11116 : CALL section_add_keyword(section, keyword)
2166 11116 : CALL keyword_release(keyword)
2167 :
2168 : CALL keyword_create(keyword, __LOCATION__, name="ENFORCE_DECREASE", &
2169 : description="Restarts if residual does not decrease.", &
2170 : usage="ENFORCE_DECREASE T", &
2171 : lone_keyword_l_val=.TRUE., &
2172 11116 : default_l_val=.FALSE.)
2173 11116 : CALL section_add_keyword(section, keyword)
2174 11116 : CALL keyword_release(keyword)
2175 :
2176 : CALL keyword_create(keyword, __LOCATION__, name="DO_POLAK_RIBIERE", &
2177 : description="Use a Polak-Ribiere update of the search vector in CG instead of the Fletcher "// &
2178 : "Reeves update. Improves the convergence with modified step sizes. "// &
2179 : "Ignored with other methods than CG.", &
2180 : usage="DO_POLAK_RIBIERE T", &
2181 : lone_keyword_l_val=.TRUE., &
2182 11116 : default_l_val=.FALSE.)
2183 11116 : CALL section_add_keyword(section, keyword)
2184 11116 : CALL keyword_release(keyword)
2185 :
2186 : CALL keyword_create(keyword, __LOCATION__, name="RECALC_RESIDUAL", &
2187 : description="Recalculates residual in every step.", &
2188 : usage="RECALC_RESIDUAL T", &
2189 : lone_keyword_l_val=.TRUE., &
2190 11116 : default_l_val=.FALSE.)
2191 11116 : CALL section_add_keyword(section, keyword)
2192 11116 : CALL keyword_release(keyword)
2193 :
2194 11116 : END SUBROUTINE create_cphf
2195 :
2196 : ! **************************************************************************************************
2197 : !> \brief ...
2198 : !> \param section ...
2199 : ! **************************************************************************************************
2200 11116 : SUBROUTINE create_low_scaling_cphf(section)
2201 : TYPE(section_type), POINTER :: section
2202 :
2203 : TYPE(keyword_type), POINTER :: keyword
2204 :
2205 11116 : NULLIFY (keyword)
2206 :
2207 11116 : CPASSERT(.NOT. ASSOCIATED(section))
2208 : CALL section_create(section, __LOCATION__, name="CPHF", &
2209 : description="Parameters influencing the solution of the Z-vector equations "// &
2210 : "in low-scaling Laplace-SOS-MP2 gradients calculations.", &
2211 11116 : n_keywords=5, n_subsections=0, repeats=.FALSE.)
2212 :
2213 : CALL keyword_create(keyword, __LOCATION__, name="EPS_CONV", &
2214 : description="Target accuracy for Z-vector euation solution.", &
2215 11116 : usage="EPS_CONV 1.e-6", default_r_val=1.e-6_dp)
2216 11116 : CALL section_add_keyword(section, keyword)
2217 11116 : CALL keyword_release(keyword)
2218 :
2219 : CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
2220 : description="Maximum number of conjugate gradient iteration to be performed for one optimization.", &
2221 11116 : usage="MAX_ITER 200", default_i_val=50)
2222 11116 : CALL section_add_keyword(section, keyword)
2223 11116 : CALL keyword_release(keyword)
2224 :
2225 : CALL keyword_create( &
2226 : keyword, __LOCATION__, name="PRECONDITIONER", &
2227 : description="Type of preconditioner to be used with all minimization schemes. "// &
2228 : "They differ in effectiveness, cost of construction, cost of application. "// &
2229 : "Properly preconditioned minimization can be orders of magnitude faster than doing nothing.", &
2230 : usage="PRECONDITIONER FULL_ALL", &
2231 : default_i_val=ot_precond_full_all, &
2232 : enum_c_vals=s2a("FULL_ALL", "FULL_SINGLE_INVERSE", "FULL_SINGLE", "FULL_KINETIC", "FULL_S_INVERSE", &
2233 : "NONE"), &
2234 : enum_desc=s2a("Most effective state selective preconditioner based on diagonalization, "// &
2235 : "requires the ENERGY_GAP parameter to be an underestimate of the HOMO-LUMO gap. "// &
2236 : "This preconditioner is recommended for almost all systems, except very large systems where "// &
2237 : "make_preconditioner would dominate the total computational cost.", &
2238 : "Based on H-eS cholesky inversion, similar to FULL_SINGLE in preconditioning efficiency "// &
2239 : "but cheaper to construct, "// &
2240 : "might be somewhat less robust. Recommended for large systems.", &
2241 : "Based on H-eS diagonalisation, not as good as FULL_ALL, but somewhat cheaper to apply. ", &
2242 : "Cholesky inversion of S and T, fast construction, robust, and relatively good, "// &
2243 : "use for very large systems.", &
2244 : "Cholesky inversion of S, not as good as FULL_KINETIC, yet equally expensive.", &
2245 : "skip preconditioning"), &
2246 : enum_i_vals=[ot_precond_full_all, ot_precond_full_single_inverse, ot_precond_full_single, &
2247 11116 : ot_precond_full_kinetic, ot_precond_s_inverse, ot_precond_none])
2248 11116 : CALL section_add_keyword(section, keyword)
2249 11116 : CALL keyword_release(keyword)
2250 :
2251 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_GAP", &
2252 : description="Energy gap estimate [a.u.] for preconditioning", &
2253 : usage="ENERGY_GAP 0.1", &
2254 11116 : default_r_val=0.2_dp)
2255 11116 : CALL section_add_keyword(section, keyword)
2256 11116 : CALL keyword_release(keyword)
2257 :
2258 11116 : END SUBROUTINE create_low_scaling_cphf
2259 :
2260 : ! **************************************************************************************************
2261 : !> \brief ...
2262 : !> \param section ...
2263 : ! **************************************************************************************************
2264 11116 : SUBROUTINE create_mp2_potential(section)
2265 : TYPE(section_type), POINTER :: section
2266 :
2267 : TYPE(keyword_type), POINTER :: keyword
2268 :
2269 11116 : CPASSERT(.NOT. ASSOCIATED(section))
2270 : CALL section_create(section, __LOCATION__, name="INTERACTION_POTENTIAL", &
2271 : description="Parameters the interaction potential in computing the biel integrals", &
2272 11116 : n_keywords=4, n_subsections=0, repeats=.FALSE.)
2273 :
2274 11116 : NULLIFY (keyword)
2275 : CALL keyword_create( &
2276 : keyword, __LOCATION__, &
2277 : name="POTENTIAL_TYPE", &
2278 : description="Which interaction potential should be used "// &
2279 : "(Coulomb, TShPSC operator).", &
2280 : usage="POTENTIAL_TYPE TSHPSC", &
2281 : enum_c_vals=s2a("COULOMB", "TShPSC", "LONGRANGE", "SHORTRANGE", "TRUNCATED", "MIX_CL", "IDENTITY"), &
2282 : enum_i_vals=[do_potential_coulomb, &
2283 : do_potential_TShPSC, &
2284 : do_potential_long, &
2285 : do_potential_short, &
2286 : do_potential_truncated, &
2287 : do_potential_mix_cl, &
2288 : do_potential_id], &
2289 : enum_desc=s2a("Coulomb potential: 1/r", &
2290 : "| Range | TShPSC |"//newline// &
2291 : "| ----- | ------ |"//newline// &
2292 : "| $ x \leq R_c $ | $ 1/x - s/R_c $ |"//newline// &
2293 : "| $ R_c < x \leq nR_c $ | "// &
2294 : "$ (1 - s)/R_c - (x - R_c)/R_c^2 + (x - R_c)^2/R_c^3 - "// &
2295 : "(2n^2 - 7n + 9 - 4s)(x - R_c)^3/(R_c^4(n^2 - 2n + 1)(n - 1)) + "// &
2296 : "(6-3s - 4n + n^2)(x - R_c)^4/(R_c^5(n^4 - 4n^3 + 6n^2 - 4n + 1)) $ "// &
2297 : "(4th order polynomial) | "//newline// &
2298 : "| $ x > nR_c $ | $ 0 $ | "//newline, &
2299 : "Longrange Coulomb potential: $ \operatorname{erf}(wr)/r $", &
2300 : "Shortrange Coulomb potential: $ \operatorname{erfc}(wr)/r $", &
2301 : "Truncated Coulomb potential", &
2302 : "Mixed Coulomb/Longrange Coulomb potential", &
2303 : "Delta potential"), &
2304 11116 : default_i_val=do_potential_coulomb)
2305 11116 : CALL section_add_keyword(section, keyword)
2306 11116 : CALL keyword_release(keyword)
2307 :
2308 : CALL keyword_create(keyword, __LOCATION__, name="TRUNCATION_RADIUS", &
2309 : variants=["CUTOFF_RADIUS"], &
2310 : description="Determines truncation radius for the truncated potentials. "// &
2311 : "Only valid when doing truncated calculations", &
2312 : usage="TRUNCATION_RADIUS 10.0", type_of_var=real_t, &
2313 : default_r_val=10.0_dp, &
2314 22232 : unit_str="angstrom")
2315 11116 : CALL section_add_keyword(section, keyword)
2316 11116 : CALL keyword_release(keyword)
2317 :
2318 : CALL keyword_create( &
2319 : keyword, __LOCATION__, &
2320 : name="POTENTIAL_DATA", &
2321 : variants=s2a("TShPSC_DATA", "T_C_G_DATA"), &
2322 : description="Location of the file TShPSC.dat or t_c_g.dat that contains the data for the "// &
2323 : "evaluation of the evaluation of the truncated potentials", &
2324 : usage="TShPSC_DATA t_sh_p_s_c.dat", &
2325 11116 : default_c_val="t_sh_p_s_c.dat")
2326 11116 : CALL section_add_keyword(section, keyword)
2327 11116 : CALL keyword_release(keyword)
2328 :
2329 : CALL keyword_create( &
2330 : keyword, __LOCATION__, &
2331 : name="OMEGA", &
2332 : description="Range separation parameter for the longrange or shortrange potential. "// &
2333 : "Only valid when longrange or shortrange potential is requested.", &
2334 : usage="OMEGA 0.5", type_of_var=real_t, &
2335 11116 : default_r_val=0.5_dp)
2336 11116 : CALL section_add_keyword(section, keyword)
2337 11116 : CALL keyword_release(keyword)
2338 :
2339 : CALL keyword_create( &
2340 : keyword, __LOCATION__, &
2341 : name="SCALE_COULOMB", &
2342 : description="Scaling factor of (truncated) Coulomb potential in mixed (truncated) Coulomb/Longrange potential. "// &
2343 : "Only valid when mixed potential is requested.", &
2344 : usage="SCALE_COULOMB 0.5", type_of_var=real_t, &
2345 11116 : default_r_val=1.0_dp)
2346 11116 : CALL section_add_keyword(section, keyword)
2347 11116 : CALL keyword_release(keyword)
2348 :
2349 : CALL keyword_create( &
2350 : keyword, __LOCATION__, &
2351 : name="SCALE_LONGRANGE", &
2352 : description="Scaling factor of longrange Coulomb potential in mixed (truncated) Coulomb/Longrange potential. "// &
2353 : "Only valid when mixed potential is requested.", &
2354 : usage="SCALE_LONGRANGE 0.5", type_of_var=real_t, &
2355 11116 : default_r_val=1.0_dp)
2356 11116 : CALL section_add_keyword(section, keyword)
2357 11116 : CALL keyword_release(keyword)
2358 :
2359 11116 : END SUBROUTINE create_mp2_potential
2360 :
2361 : ! **************************************************************************************************
2362 : !> \brief ...
2363 : !> \param section ...
2364 : ! **************************************************************************************************
2365 11116 : SUBROUTINE create_ri_section(section)
2366 : TYPE(section_type), POINTER :: section
2367 :
2368 : TYPE(keyword_type), POINTER :: keyword
2369 : TYPE(section_type), POINTER :: subsection
2370 :
2371 11116 : CPASSERT(.NOT. ASSOCIATED(section))
2372 : CALL section_create(section, __LOCATION__, name="RI", &
2373 : description="Parameters influencing resolution of the identity (RI) that is "// &
2374 : "used in RI-MP2, RI-RPA, RI-SOS-MP2 and GW (inside RI-RPA).", &
2375 11116 : n_keywords=6, n_subsections=2, repeats=.FALSE.)
2376 :
2377 11116 : NULLIFY (subsection)
2378 11116 : CALL create_RI_metric_section(subsection)
2379 11116 : CALL section_add_subsection(section, subsection)
2380 11116 : CALL section_release(subsection)
2381 :
2382 11116 : CALL create_opt_ri_basis(subsection)
2383 11116 : CALL section_add_subsection(section, subsection)
2384 11116 : CALL section_release(subsection)
2385 :
2386 11116 : NULLIFY (keyword)
2387 : CALL keyword_create( &
2388 : keyword, __LOCATION__, &
2389 : name="ROW_BLOCK", &
2390 : variants=["ROW_BLOCK_SIZE"], &
2391 : description="Size of the row block used in the SCALAPACK block cyclic data distribution. "// &
2392 : "Default is (ROW_BLOCK=-1) is automatic. "// &
2393 : "A proper choice can speedup the parallel matrix multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.", &
2394 : usage="ROW_BLOCK 512", &
2395 22232 : default_i_val=-1)
2396 11116 : CALL section_add_keyword(section, keyword)
2397 11116 : CALL keyword_release(keyword)
2398 :
2399 : CALL keyword_create( &
2400 : keyword, __LOCATION__, &
2401 : name="COL_BLOCK", &
2402 : variants=["COL_BLOCK_SIZE"], &
2403 : description="Size of the column block used in the SCALAPACK block cyclic data distribution. "// &
2404 : "Default is (COL_BLOCK=-1) is automatic. "// &
2405 : "A proper choice can speedup the parallel matrix multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.", &
2406 : usage="COL_BLOCK 512", &
2407 22232 : default_i_val=-1)
2408 11116 : CALL section_add_keyword(section, keyword)
2409 11116 : CALL keyword_release(keyword)
2410 :
2411 : CALL keyword_create( &
2412 : keyword, __LOCATION__, &
2413 : name="CALC_COND_NUM", &
2414 : variants=["CALC_CONDITION_NUMBER"], &
2415 : description="Calculate the condition number of the (P|Q) matrix for the RI methods.", &
2416 : usage="CALC_COND_NUM", &
2417 : default_l_val=.FALSE., &
2418 22232 : lone_keyword_l_val=.TRUE.)
2419 11116 : CALL section_add_keyword(section, keyword)
2420 11116 : CALL keyword_release(keyword)
2421 :
2422 : CALL keyword_create(keyword, __LOCATION__, name="DO_SVD", &
2423 : description="Wether to perform a singular value decomposition instead of the Cholesky decomposition "// &
2424 : "of the potential operator in the RI basis. Computationally expensive but numerically more stable. "// &
2425 : "It reduces the computational costs of some subsequent steps. Recommended when a longrange Coulomb "// &
2426 : "potential is employed.", &
2427 : usage="DO_SVD .TRUE.", &
2428 11116 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2429 11116 : CALL section_add_keyword(section, keyword)
2430 11116 : CALL keyword_release(keyword)
2431 :
2432 : CALL keyword_create(keyword, __LOCATION__, name="EPS_SVD", &
2433 : description="Determines the upper bound of eigenvectors to be removed during the SVD (see DO_SVD).", &
2434 : usage="EPS_SVD 1E-5", &
2435 11116 : default_r_val=0.0_dp)
2436 11116 : CALL section_add_keyword(section, keyword)
2437 11116 : CALL keyword_release(keyword)
2438 :
2439 : CALL keyword_create(keyword, __LOCATION__, name="ERI_BLKSIZE", &
2440 : description="block sizes for tensors (only used if ERI_METHOD=MME). First value "// &
2441 : "is the block size for ORB basis, second value is the block size for RI_AUX basis.", &
2442 : usage="ERI_BLKSIZE", &
2443 : n_var=2, &
2444 11116 : default_i_vals=[4, 16])
2445 11116 : CALL section_add_keyword(section, keyword)
2446 11116 : CALL keyword_release(keyword)
2447 :
2448 11116 : END SUBROUTINE create_ri_section
2449 :
2450 : ! **************************************************************************************************
2451 : !> \brief ...
2452 : !> \param section ...
2453 : ! **************************************************************************************************
2454 11116 : SUBROUTINE create_integrals_section(section)
2455 : TYPE(section_type), POINTER :: section
2456 :
2457 : TYPE(keyword_type), POINTER :: keyword
2458 : TYPE(section_type), POINTER :: subsection
2459 :
2460 11116 : CPASSERT(.NOT. ASSOCIATED(section))
2461 : CALL section_create(section, __LOCATION__, name="INTEGRALS", &
2462 : description="Parameters controlling how to compute integrals that are needed "// &
2463 : "in MP2, RI-MP2, RI-RPA, RI-SOS-MP2 and GW (inside RI-RPA).", &
2464 11116 : n_keywords=2, n_subsections=3, repeats=.FALSE.)
2465 :
2466 11116 : NULLIFY (subsection)
2467 11116 : CALL create_eri_mme_section(subsection)
2468 11116 : CALL section_add_subsection(section, subsection)
2469 11116 : CALL section_release(subsection)
2470 :
2471 11116 : CALL create_wfc_gpw(subsection)
2472 11116 : CALL section_add_subsection(section, subsection)
2473 11116 : CALL section_release(subsection)
2474 :
2475 11116 : CALL create_mp2_potential(subsection)
2476 11116 : CALL section_add_subsection(section, subsection)
2477 11116 : CALL section_release(subsection)
2478 :
2479 11116 : NULLIFY (keyword)
2480 : CALL keyword_create(keyword, __LOCATION__, name="ERI_METHOD", &
2481 : description="Method for calculating periodic electron repulsion integrals "// &
2482 : "(MME method is faster but experimental, forces not yet implemented). "// &
2483 : "Obara-Saika (OS) for the Coulomb operator can only be used for non-periodic calculations.", &
2484 : usage="ERI_METHOD MME", &
2485 : enum_c_vals=s2a("DEFAULT", "GPW", "MME", "OS"), &
2486 : enum_i_vals=[eri_default, do_eri_gpw, do_eri_mme, do_eri_os], &
2487 : enum_desc=s2a("Use default ERI method (for periodic systems: GPW, for molecules: OS, "// &
2488 : "for MP2 and RI-MP2: GPW in any case).", &
2489 : "Uses Gaussian Plane Wave method [DelBen2013].", &
2490 : "Uses MiniMax-Ewald method (experimental, ERI_MME subsection, only for fully periodic "// &
2491 : "systems with orthorhombic cells).", &
2492 : "Use analytical Obara-Saika method."), &
2493 11116 : default_i_val=eri_default)
2494 11116 : CALL section_add_keyword(section, keyword)
2495 11116 : CALL keyword_release(keyword)
2496 :
2497 : CALL keyword_create(keyword, __LOCATION__, name="SIZE_LATTICE_SUM", &
2498 : description="Size of sum range L. ", &
2499 : usage="SIZE_LATTICE_SUM 10", &
2500 11116 : default_i_val=5)
2501 11116 : CALL section_add_keyword(section, keyword)
2502 11116 : CALL keyword_release(keyword)
2503 :
2504 11116 : END SUBROUTINE create_integrals_section
2505 :
2506 : ! **************************************************************************************************
2507 : !> \brief ...
2508 : !> \param section ...
2509 : ! **************************************************************************************************
2510 11116 : SUBROUTINE create_RI_metric_section(section)
2511 : TYPE(section_type), POINTER :: section
2512 :
2513 : TYPE(keyword_type), POINTER :: keyword
2514 :
2515 11116 : CPASSERT(.NOT. ASSOCIATED(section))
2516 : CALL section_create(section, __LOCATION__, name="RI_METRIC", &
2517 : description="Sets up RI metric", &
2518 11116 : repeats=.FALSE.)
2519 :
2520 11116 : NULLIFY (keyword)
2521 : CALL keyword_create( &
2522 : keyword, __LOCATION__, &
2523 : name="POTENTIAL_TYPE", &
2524 : description="Decides which operator/metric is used for resolution of the identity (RI).", &
2525 : usage="POTENTIAL_TYPE DEFAULT", &
2526 : enum_c_vals=s2a("DEFAULT", "COULOMB", "IDENTITY", "LONGRANGE", "SHORTRANGE", "TRUNCATED"), &
2527 : enum_i_vals=[ri_default, do_potential_coulomb, do_potential_id, do_potential_long, &
2528 : do_potential_short, do_potential_truncated], &
2529 : enum_desc=s2a("Use Coulomb metric for RI-MP2 and normal-scaling RI-SOS-MP2, RI-RPA and GW. "// &
2530 : "Use Overlap metric for low-scaling RI-SOS-MP2, RI-RPA and GW for periodic systems. "// &
2531 : "Use truncated Coulomb metric for low-scaling RI-SOS-MP2, RI-RPA and GW for non-periodic systems.", &
2532 : "Coulomb metric: 1/r. Recommended for RI-MP2,", &
2533 : "Overlap metric: delta(r).", &
2534 : "Longrange metric: erf(omega*r)/r. Not recommended with DO_SVD .TRUE.", &
2535 : "Shortrange metric: erfc(omega*r)/r", &
2536 : "Truncated Coulomb metric: if (r < R_c) 1/r else 0. More "// &
2537 : "accurate than IDENTITY for non-periodic systems. Recommended for low-scaling methods."), &
2538 11116 : default_i_val=ri_default)
2539 11116 : CALL section_add_keyword(section, keyword)
2540 11116 : CALL keyword_release(keyword)
2541 :
2542 11116 : NULLIFY (keyword)
2543 : CALL keyword_create( &
2544 : keyword, __LOCATION__, &
2545 : name="OMEGA", &
2546 : description="The range parameter for the short/long range operator (in 1/a0).", &
2547 : usage="OMEGA 0.5", &
2548 11116 : default_r_val=0.0_dp)
2549 11116 : CALL section_add_keyword(section, keyword)
2550 11116 : CALL keyword_release(keyword)
2551 :
2552 : CALL keyword_create(keyword, __LOCATION__, name="CUTOFF_RADIUS", &
2553 : description="The cutoff radius (in Angstrom) for the truncated Coulomb operator.", &
2554 : usage="CUTOFF_RADIUS 3.0", default_r_val=cp_unit_to_cp2k(value=3.0_dp, unit_str="angstrom"), &
2555 11116 : type_of_var=real_t, unit_str="angstrom")
2556 11116 : CALL section_add_keyword(section, keyword)
2557 11116 : CALL keyword_release(keyword)
2558 :
2559 : CALL keyword_create( &
2560 : keyword, __LOCATION__, &
2561 : name="T_C_G_DATA", &
2562 : description="Location of the file t_c_g.dat that contains the data for the "// &
2563 : "evaluation of the truncated gamma function ", &
2564 11116 : default_c_val="t_c_g.dat")
2565 11116 : CALL section_add_keyword(section, keyword)
2566 11116 : CALL keyword_release(keyword)
2567 :
2568 : CALL keyword_create(keyword, __LOCATION__, name="EPS_RANGE", &
2569 : description="The threshold to determine the effective range of the short range "// &
2570 : "RI metric: erfc(omega*eff_range)/eff_range = EPS_RANGE", &
2571 : default_r_val=1.0E-08_dp, &
2572 11116 : repeats=.FALSE.)
2573 11116 : CALL section_add_keyword(section, keyword)
2574 11116 : CALL keyword_release(keyword)
2575 :
2576 11116 : END SUBROUTINE create_RI_metric_section
2577 :
2578 : END MODULE input_cp2k_mp2
|