(git:c29306b)
Loading...
Searching...
No Matches
input_cp2k_mp2.F
Go to the documentation of this file.
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! **************************************************************************************************
15 USE bibliography, ONLY: &
26 USE cp_units, ONLY: cp_unit_to_cp2k
27 USE input_constants, ONLY: &
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
70CONTAINS
71
72! **************************************************************************************************
73!> \brief creates the input section for the mp2 part
74!> \param section the section to create
75!> \author MDB
76! **************************************************************************************************
77 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 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., &
91
92 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 default_r_val=1.024e+3_dp)
100 CALL section_add_keyword(section, keyword)
101 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 default_r_val=-1.0_dp)
112 CALL section_add_keyword(section, keyword)
113 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 default_r_val=-1.0_dp)
125 CALL section_add_keyword(section, keyword)
126 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 default_r_val=1.0_dp)
135 CALL section_add_keyword(section, keyword)
136 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 default_r_val=1.0_dp)
145 CALL section_add_keyword(section, keyword)
146 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 default_i_val=1)
159 CALL section_add_keyword(section, keyword)
160 CALL keyword_release(keyword)
161
162 NULLIFY (subsection)
163 CALL create_mp2_details_section(subsection)
164 CALL section_add_subsection(section, subsection)
165 CALL section_release(subsection)
166
167 CALL create_ri_mp2(subsection)
168 CALL section_add_subsection(section, subsection)
169 CALL section_release(subsection)
170
171 CALL create_ri_rpa(subsection)
172 CALL section_add_subsection(section, subsection)
173 CALL section_release(subsection)
174
175 CALL create_ri_laplace(subsection)
176 CALL section_add_subsection(section, subsection)
177 CALL section_release(subsection)
178
179 ! here we generate an imag. time subsection to use with RPA or Laplace-SOS-MP2
180 CALL create_low_scaling(subsection)
181 CALL section_add_subsection(section, subsection)
182 CALL section_release(subsection)
183
184 CALL create_ri_section(subsection)
185 CALL section_add_subsection(section, subsection)
186 CALL section_release(subsection)
187
188 CALL create_integrals_section(subsection)
189 CALL section_add_subsection(section, subsection)
190 CALL section_release(subsection)
191
192 CALL create_canonical_gradients(subsection)
193 CALL section_add_subsection(section, subsection)
194 CALL section_release(subsection)
195
196 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 print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
200 CALL section_add_subsection(section, print_key)
201 CALL section_release(print_key)
202
203 END SUBROUTINE create_mp2_section
204
205! **************************************************************************************************
206!> \brief ...
207!> \param section ...
208! **************************************************************************************************
209 SUBROUTINE create_mp2_details_section(section)
210 TYPE(section_type), POINTER :: section
211
212 TYPE(keyword_type), POINTER :: keyword
213
214 cpassert(.NOT. ASSOCIATED(section))
215 CALL section_create(section, __location__, name="MP2", &
216 description="Parameters influencing MP2 (non-RI).", &
217 n_keywords=3, n_subsections=0, repeats=.false.)
218
219 NULLIFY (keyword)
220 CALL keyword_create(keyword, __location__, name="_SECTION_PARAMETERS_", &
221 description="Activates MP2 calculations.", &
222 usage="&MP2 .TRUE.", &
223 default_l_val=.false., lone_keyword_l_val=.true.)
224 CALL section_add_keyword(section, keyword)
225 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"), &
235 enum_desc=s2a("Skip MP2 calculation.", &
236 "Use the direct canonical MP2 approach.", &
237 "Use the GPW approach to MP2 integrals."), &
238 default_i_val=mp2_method_direct)
239 CALL section_add_keyword(section, keyword)
240 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 lone_keyword_l_val=.true.)
250 CALL section_add_keyword(section, keyword)
251 CALL keyword_release(keyword)
252
253 END SUBROUTINE create_mp2_details_section
254
255! **************************************************************************************************
256!> \brief ...
257!> \param section ...
258! **************************************************************************************************
259 SUBROUTINE create_ri_mp2(section)
260 TYPE(section_type), POINTER :: section
261
262 TYPE(keyword_type), POINTER :: keyword
263
264 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 citations=[delben2013])
269
270 NULLIFY (keyword)
271 CALL keyword_create(keyword, __location__, name="_SECTION_PARAMETERS_", &
272 description="Activates an RI-MP2 calculation.", &
273 usage="&RI_MP2 .TRUE.", &
274 default_l_val=.false., lone_keyword_l_val=.true.)
275 CALL section_add_keyword(section, keyword)
276 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 default_i_val=-1)
284 CALL section_add_keyword(section, keyword)
285 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 default_i_val=-1)
296 CALL section_add_keyword(section, keyword)
297 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 default_l_val=.false.)
305 CALL section_add_keyword(section, keyword)
306 CALL keyword_release(keyword)
307
308 END SUBROUTINE create_ri_mp2
309
310! **************************************************************************************************
311!> \brief ...
312!> \param section ...
313! **************************************************************************************************
314 SUBROUTINE create_opt_ri_basis(section)
315 TYPE(section_type), POINTER :: section
316
317 TYPE(keyword_type), POINTER :: keyword
318
319 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 citations=[delben2013])
326 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 default_l_val=.false., lone_keyword_l_val=.true.)
331 CALL section_add_keyword(section, keyword)
332 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 default_r_val=1.0e-6_dp)
340 CALL section_add_keyword(section, keyword)
341 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 default_r_val=5.0e-6_dp)
349 CALL section_add_keyword(section, keyword)
350 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 default_r_val=1.0e-3_dp)
360 CALL section_add_keyword(section, keyword)
361 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 default_i_val=50)
368 CALL section_add_keyword(section, keyword)
369 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 n_var=-1, default_i_vals=[-1], type_of_var=integer_t)
377 CALL section_add_keyword(section, keyword)
378 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 default_i_val=0)
388 CALL section_add_keyword(section, keyword)
389 CALL keyword_release(keyword)
390
391 END SUBROUTINE create_opt_ri_basis
392
393! **************************************************************************************************
394!> \brief ...
395!> \param section ...
396! **************************************************************************************************
397 SUBROUTINE create_ri_laplace(section)
398 TYPE(section_type), POINTER :: section
399
400 TYPE(keyword_type), POINTER :: keyword
401
402 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 citations=[delben2013])
407
408 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 default_l_val=.false., lone_keyword_l_val=.true.)
413 CALL section_add_keyword(section, keyword)
414 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 default_i_val=5)
422 CALL section_add_keyword(section, keyword)
423 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 default_i_val=-1)
432 CALL section_add_keyword(section, keyword)
433 CALL keyword_release(keyword)
434
435 END SUBROUTINE create_ri_laplace
436
437! **************************************************************************************************
438!> \brief ...
439!> \param section ...
440! **************************************************************************************************
441 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 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., &
453
454 NULLIFY (subsection, keyword)
455 CALL create_cphf(subsection)
456 CALL section_add_subsection(section, subsection)
457 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 default_r_val=1.0e-7_dp)
465 CALL section_add_keyword(section, keyword)
466 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 lone_keyword_l_val=.true.)
476 CALL section_add_keyword(section, keyword)
477 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 default_i_val=-1)
487 CALL section_add_keyword(section, keyword)
488 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 default_i_val=2)
498 CALL section_add_keyword(section, keyword)
499 CALL keyword_release(keyword)
500
501 END SUBROUTINE create_canonical_gradients
502
503! **************************************************************************************************
504!> \brief ...
505!> \param section ...
506! **************************************************************************************************
507 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 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 citations=[delben2013, delben2015])
518
519 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 default_l_val=.false., lone_keyword_l_val=.true.)
524 CALL section_add_keyword(section, keyword)
525 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"), &
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 default_i_val=sigma_none)
541 CALL section_add_keyword(section, keyword)
542 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 default_i_val=40)
549 CALL section_add_keyword(section, keyword)
550 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 default_i_val=-1)
559 CALL section_add_keyword(section, keyword)
560 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 default_i_val=wfc_mm_style_gemm)
571 CALL section_add_keyword(section, keyword)
572 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 lone_keyword_l_val=.true.)
583 CALL section_add_keyword(section, keyword)
584 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 lone_keyword_l_val=.true.)
594 CALL section_add_keyword(section, keyword)
595 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 lone_keyword_l_val=.true.)
607 CALL section_add_keyword(section, keyword)
608 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 default_r_val=1.0_dp)
616 CALL section_add_keyword(section, keyword)
617 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 default_l_val=.false.)
625 CALL section_add_keyword(section, keyword)
626 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 CALL create_hfx_section(subsection)
630 CALL section_add_subsection(section, subsection)
631 CALL section_release(subsection)
632
633 ! here we generate a G0W0 subsection to use if G0W0 is desired
634 CALL create_ri_g0w0(subsection)
635 CALL section_add_subsection(section, subsection)
636 CALL section_release(subsection)
637
638 ! here we the RPA exchange section
639 CALL create_rpa_exchange(subsection)
640 CALL section_add_subsection(section, subsection)
641 CALL section_release(subsection)
642
643 END SUBROUTINE create_ri_rpa
644
645! **************************************************************************************************
646!> \brief ...
647!> \param section ...
648! **************************************************************************************************
649 SUBROUTINE create_rpa_exchange(section)
650 TYPE(section_type), POINTER :: section
651
652 TYPE(keyword_type), POINTER :: keyword
653
654 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 n_keywords=3, n_subsections=1, repeats=.false.)
658
659 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"), &
665 enum_desc=s2a("Apply no exchange correction.", &
666 "Apply Approximate eXchange Kernel (AXK) correction.", &
667 "Apply Second Order Screened eXchange (SOSEX) correction."), &
668 default_i_val=rpa_exchange_none)
669 CALL section_add_keyword(section, keyword)
670 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 default_i_val=1)
680 CALL section_add_keyword(section, keyword)
681 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 default_l_val=.false., lone_keyword_l_val=.true.)
689 CALL section_add_keyword(section, keyword)
690 CALL keyword_release(keyword)
691
692 END SUBROUTINE create_rpa_exchange
693
694! **************************************************************************************************
695!> \brief ...
696!> \param section ...
697! **************************************************************************************************
698 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 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 n_keywords=24, n_subsections=1, repeats=.false.)
710
711 NULLIFY (keyword, subsection)
712
713 CALL keyword_create(keyword, __location__, name="_SECTION_PARAMETERS_", &
714 description="Activates GW calculations.", &
715 usage="&GW .TRUE.", &
716 default_l_val=.false., lone_keyword_l_val=.true.)
717 CALL section_add_keyword(section, keyword)
718 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 default_i_val=g0w0)
733 CALL section_add_keyword(section, keyword)
734 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 default_i_val=10)
748 CALL section_add_keyword(section, keyword)
749 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 default_i_val=10)
763 CALL section_add_keyword(section, keyword)
764 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 default_i_val=2)
770 CALL section_add_keyword(section, keyword)
771 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 default_r_val=0.734996_dp)
779 CALL section_add_keyword(section, keyword)
780 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, &
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 default_i_val=ri_rpa_g0w0_crossing_newton)
792 CALL section_add_keyword(section, keyword)
793 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 default_r_val=2.0e-2_dp)
803 CALL section_add_keyword(section, keyword)
804 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 lone_keyword_l_val=.true.)
815 CALL section_add_keyword(section, keyword)
816 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 default_i_val=1)
825 CALL section_add_keyword(section, keyword)
826 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 default_i_val=1)
836 CALL section_add_keyword(section, keyword)
837 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 unit_str="eV")
847
848 CALL section_add_keyword(section, keyword)
849 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"), &
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 default_i_val=gw_no_print_exx)
877 CALL section_add_keyword(section, keyword)
878 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 lone_keyword_l_val=.true.)
887 CALL section_add_keyword(section, keyword)
888 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 lone_keyword_l_val=.true.)
896 CALL section_add_keyword(section, keyword)
897 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 type_of_var=real_t, n_var=-1, unit_str="eV")
906 CALL section_add_keyword(section, keyword)
907 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 type_of_var=real_t, n_var=-1, unit_str="eV")
914 CALL section_add_keyword(section, keyword)
915 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 lone_keyword_l_val=.true.)
924 CALL section_add_keyword(section, keyword)
925 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 lone_keyword_l_val=.true.)
937 CALL section_add_keyword(section, keyword)
938 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 default_i_val=gw_pade_approx)
948 CALL section_add_keyword(section, keyword)
949 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 default_i_val=16)
958 CALL section_add_keyword(section, keyword)
959 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 lone_keyword_l_val=.true.)
968 CALL section_add_keyword(section, keyword)
969 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 lone_keyword_l_val=.true.)
977 CALL section_add_keyword(section, keyword)
978 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 n_var=3, type_of_var=integer_t, default_i_vals=[0, 0, 0])
986 CALL section_add_keyword(section, keyword)
987 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 default_r_val=0.0_dp)
995 CALL section_add_keyword(section, keyword)
996 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 default_i_val=soc_none)
1010 CALL section_add_keyword(section, keyword)
1011 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 unit_str="eV")
1021 CALL section_add_keyword(section, keyword)
1022 CALL keyword_release(keyword)
1023
1024 ! here we generate a subsection for the periodic GW correction
1025 CALL create_periodic_gw_correction_section(subsection)
1026 CALL section_add_subsection(section, subsection)
1027 CALL section_release(subsection)
1028
1029 ! here we generate a subsection for Bethe-Salpeter
1030 CALL create_bse_section(subsection)
1031 CALL section_add_subsection(section, subsection)
1032 CALL section_release(subsection)
1033
1034 ! here we generate a subsection for image charge calculations
1035 CALL create_ic_section(subsection)
1036 CALL section_add_subsection(section, subsection)
1037 CALL section_release(subsection)
1038
1039 ! here we generate a subsection for calculating the GW band structures
1040 CALL create_kpoint_set_section(subsection)
1041 CALL section_add_subsection(section, subsection)
1042 CALL section_release(subsection)
1043
1044 ! here we generate a subsection for additional printing
1045 CALL create_print_section(subsection)
1046 CALL section_add_subsection(section, subsection)
1047 CALL section_release(subsection)
1048
1049 END SUBROUTINE create_ri_g0w0
1050
1051! **************************************************************************************************
1052!> \brief ...
1053!> \param section ...
1054! **************************************************************************************************
1055 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 cpassert(.NOT. ASSOCIATED(section))
1062 NULLIFY (print_key, keyword)
1063 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 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 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 unit_str="eV")
1080 CALL section_add_keyword(print_key, keyword)
1081 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 unit_str="eV")
1088 CALL section_add_keyword(print_key, keyword)
1089 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 default_r_val=0.1_dp)
1095 CALL section_add_keyword(print_key, keyword)
1096 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 usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
1103 CALL section_add_keyword(print_key, keyword)
1104 CALL keyword_release(keyword)
1105
1106 CALL section_add_subsection(section, print_key)
1107 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 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 unit_str="eV")
1118 CALL section_add_keyword(gw_dos_section, keyword)
1119 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 unit_str="eV")
1126 CALL section_add_keyword(gw_dos_section, keyword)
1127 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 unit_str="eV")
1134 CALL section_add_keyword(gw_dos_section, keyword)
1135 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 default_i_val=1)
1141 CALL section_add_keyword(gw_dos_section, keyword)
1142 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 default_i_val=0)
1148 CALL section_add_keyword(gw_dos_section, keyword)
1149 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 default_i_val=1)
1155 CALL section_add_keyword(gw_dos_section, keyword)
1156 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 default_i_val=0)
1162 CALL section_add_keyword(gw_dos_section, keyword)
1163 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 unit_str="eV")
1170 CALL section_add_keyword(gw_dos_section, keyword)
1171 CALL keyword_release(keyword)
1172
1173 CALL section_add_subsection(section, gw_dos_section)
1174 CALL section_release(gw_dos_section)
1175
1176 END SUBROUTINE create_print_section
1177
1178! **************************************************************************************************
1179!> \brief ...
1180!> \param section ...
1181! **************************************************************************************************
1182 SUBROUTINE create_periodic_gw_correction_section(section)
1183 TYPE(section_type), POINTER :: section
1184
1185 TYPE(keyword_type), POINTER :: keyword
1186
1187 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 n_keywords=12, n_subsections=1, repeats=.false.)
1192
1193 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 n_var=3, type_of_var=integer_t, default_i_vals=[16, 16, 16])
1201 CALL section_add_keyword(section, keyword)
1202 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 default_i_val=1)
1211 CALL section_add_keyword(section, keyword)
1212 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 default_r_val=1.0e-05_dp)
1219 CALL section_add_keyword(section, keyword)
1220 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 lone_keyword_l_val=.true.)
1229 CALL section_add_keyword(section, keyword)
1230 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 lone_keyword_l_val=.true.)
1238 CALL section_add_keyword(section, keyword)
1239 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 default_r_val=2.0e-04_dp)
1245 CALL section_add_keyword(section, keyword)
1246 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 lone_keyword_l_val=.true.)
1255 CALL section_add_keyword(section, keyword)
1256 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 lone_keyword_l_val=.true.)
1266 CALL section_add_keyword(section, keyword)
1267 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 default_r_val=0.5_dp)
1273 CALL section_add_keyword(section, keyword)
1274 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 default_i_val=300)
1281 CALL section_add_keyword(section, keyword)
1282 CALL keyword_release(keyword)
1283
1284 END SUBROUTINE create_periodic_gw_correction_section
1285
1286! **************************************************************************************************
1287!> \brief ...
1288!> \param section ...
1289! **************************************************************************************************
1290 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 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 n_keywords=8, n_subsections=3, repeats=.false.)
1309
1310 NULLIFY (keyword)
1311
1312 CALL keyword_create(keyword, __location__, name="_SECTION_PARAMETERS_", &
1313 description="Activates BSE calculations.", &
1314 usage="&BSE .TRUE.", &
1315 default_l_val=.false., lone_keyword_l_val=.true.)
1316 CALL section_add_keyword(section, keyword)
1317 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 default_i_val=bse_singlet)
1327 CALL section_add_keyword(section, keyword)
1328 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 default_i_val=bse_fulldiag)
1339 CALL section_add_keyword(section, keyword)
1340 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 default_i_val=bse_tda)
1352 CALL section_add_keyword(section, keyword)
1353 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 type_of_var=real_t, default_r_val=-1.0_dp)
1362 CALL section_add_keyword(section, keyword)
1363 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 type_of_var=real_t, default_r_val=-1.0_dp)
1372 CALL section_add_keyword(section, keyword)
1373 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 default_l_val=.false., lone_keyword_l_val=.true.)
1379 CALL section_add_keyword(section, keyword)
1380 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 default_i_val=25)
1387 CALL section_add_keyword(section, keyword)
1388 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 default_i_val=0)
1396 CALL section_add_keyword(section, keyword)
1397 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 default_l_val=.false., lone_keyword_l_val=.true.)
1403 CALL section_add_keyword(section, keyword)
1404 CALL keyword_release(keyword)
1405
1406 CALL keyword_create(keyword, __location__, name="EPS_X", &
1407 description="Threshold for printing contributions of singleparticle "// &
1408 "transitions, i.e. elements of the eigenvectors $X_{ia}^{(n)}$ and $Y_{ia}^{(n)}$.", &
1409 usage="EPS_X 0.1", &
1410 type_of_var=real_t, default_r_val=0.1_dp)
1411 CALL section_add_keyword(section, keyword)
1412 CALL keyword_release(keyword)
1413
1414 CALL keyword_create(keyword, __location__, name="USE_KS_ENERGIES", &
1415 description="Uses KS energies instead of GW quasiparticle energies.", &
1416 usage="USE_KS_ENERGIES .TRUE.", &
1417 default_l_val=.false., lone_keyword_l_val=.true.)
1418 CALL section_add_keyword(section, keyword)
1419 CALL keyword_release(keyword)
1420
1421 NULLIFY (subsection)
1422 CALL create_bse_screening_section(subsection)
1423 CALL section_add_subsection(section, subsection)
1424 CALL section_release(subsection)
1425
1426 NULLIFY (subsection)
1427 CALL create_bse_iterat_section(subsection)
1428 CALL section_add_subsection(section, subsection)
1429 CALL section_release(subsection)
1430
1431 NULLIFY (subsection)
1432 CALL create_bse_spectrum_section(subsection)
1433 CALL section_add_subsection(section, subsection)
1434 CALL section_release(subsection)
1435
1436 NULLIFY (subsection)
1437 CALL create_bse_nto_section(subsection)
1438 CALL section_add_subsection(section, subsection)
1439 CALL section_release(subsection)
1440
1441 END SUBROUTINE create_bse_section
1442
1443 SUBROUTINE create_bse_screening_section(section)
1444 TYPE(section_type), POINTER :: section
1445
1446 TYPE(keyword_type), POINTER :: keyword
1447
1448 cpassert(.NOT. ASSOCIATED(section))
1449
1450 CALL section_create(section, __location__, name="SCREENING_IN_W", &
1451 description="Screening $\epsilon$ applied to $W(\omega=0)=\epsilon^{-1}(\omega=0) v $ "// &
1452 "in the BSE calculation. Besides default BSE, i.e. $W_0$ (screening with DFT energies), "// &
1453 "a fixed $\alpha = \epsilon^{-1}(\omega)$ can be applied, which is similar to the mixing "// &
1454 "parameter for hybrid functionals in LR-TDDFT. In addition, the keywords TDHF "// &
1455 "(no screening - $\alpha = 1$) and RPA (infinite screening - $\alpha = 0$) can be applied.", &
1456 n_keywords=2, n_subsections=0, repeats=.false.)
1457
1458 NULLIFY (keyword)
1459
1460 CALL keyword_create( &
1461 keyword, __location__, name="_SECTION_PARAMETERS_", &
1462 description="Shortcut for the most common functional combinations.", &
1463 usage="&xc_functional BLYP", &
1464 enum_c_vals=s2a("W_0", "TDHF", "RPA", "ALPHA"), &
1466 enum_desc=s2a("The Coulomb interaction is screened by applying DFT energies "// &
1467 "$\varepsilon_p^{DFT}$, which is typically used for GW-BSE and "// &
1468 "often labeled as $W_0$.", &
1469 "The Coulomb interaction is not screened, i.e. $W_{pq,rs}(\omega=0) "// &
1470 "\rightarrow v_{pq,rs}$ enters.", &
1471 "Infinite screening is applied, i.e. $W_{pq,rs}(\omega=0) \rightarrow 0$.", &
1472 "Arbitrary screening parameter. Specify within section."), &
1473 default_i_val=bse_screening_w0, &
1474 lone_keyword_i_val=bse_screening_w0)
1475 CALL section_add_keyword(section, keyword)
1476 CALL keyword_release(keyword)
1477
1478 CALL keyword_create(keyword, __location__, name="ALPHA", &
1479 description="Screening parameter similar to the mixing in hybrid functionals used in TDDFT. "// &
1480 "$\alpha$ mimicks the screening $\epsilon^{-1}(\omega)$ and enforces $W = \alpha v$ "// &
1481 "in the BSE calculation.", &
1482 usage="ALPHA 0.25", &
1483 type_of_var=real_t, default_r_val=-1.00_dp)
1484 CALL section_add_keyword(section, keyword)
1485 CALL keyword_release(keyword)
1486
1487 END SUBROUTINE create_bse_screening_section
1488
1489 SUBROUTINE create_bse_nto_section(print_key)
1490 TYPE(section_type), POINTER :: print_key
1491
1492 TYPE(keyword_type), POINTER :: keyword
1493
1494 cpassert(.NOT. ASSOCIATED(print_key))
1495
1496 CALL cp_print_key_section_create(print_key, __location__, name="NTO_ANALYSIS", &
1497 description="Perform a natural transition orbital analysis, i.e. the transition density matrix "// &
1498 "$T^{(n)}=\left( \begin{array}{cc}0& {X}^{(n)}\\ \left({Y}^{(n)} \right)^T & 0\end{array} \right)$ "// &
1499 "is decomposed into its singular values "// &
1500 "$T^{(n)} = {U}^{(n)} {\Lambda^{(n)}} \left({V}^{(n)}\right)^T$ "// &
1501 "in order to compute the NTO pairs "// &
1502 "$\phi_I^{(n)}(\mathbf{r}_e) = \sum_{p=1}^{N_b} \varphi_p(\mathbf{r}_e) V_{p,I}^{(n)}$ for the electron and "// &
1503 "$\chi_I^{(n)}(\mathbf{r}_h) = \sum_{q=1}^{N_b} \varphi_q(\mathbf{r}_h) U_{q,I}^{(n)}$ for the hole.", &
1504 print_level=debug_print_level + 1, & ! Corresponds to "off" as default behavior
1505 filename="BSE-NTO_ANALYSIS") ! All other print levels will trigger the analysis
1506 ! cf. input/cp_output_handling.F:cp_print_key_section_create
1507
1508 NULLIFY (keyword)
1509 CALL keyword_create(keyword, __location__, name="EPS_NTO_EIGVAL", &
1510 description="Threshold for NTO eigenvalues, i.e. only "// &
1511 "${\left(\lambda_I^{(n)}\right)}^2$ > EPS_NTO_EIGVAL are considered.", &
1512 usage="EPS_NTO_EIGVAL 0.01", &
1513 n_var=1, &
1514 type_of_var=real_t, &
1515 default_r_val=0.01_dp)
1516 CALL section_add_keyword(print_key, keyword)
1517 CALL keyword_release(keyword)
1518
1519 CALL keyword_create(keyword, __location__, name="EPS_OSC_STR", &
1520 description="Threshold of oscillator strengths $f^{(n)}$ for an excitation level. "// &
1521 "In case, the excitation level n has a smaller oscillator strength, the "// &
1522 "NTOs for this excitation level are not printed.", &
1523 usage="EPS_OSC_STR 0.01", &
1524 n_var=1, &
1525 type_of_var=real_t, &
1526 default_r_val=-1.0_dp)
1527 CALL section_add_keyword(print_key, keyword)
1528 CALL keyword_release(keyword)
1529
1530 CALL keyword_create(keyword, __location__, name="NUM_PRINT_EXC_NTOS", &
1531 description="Number of excitation level $n$ up to which NTOs are printed. "// &
1532 "By default, this is set to NUM_PRINT_EXC. Negative or too large "// &
1533 "NUM_PRINT_EXC_NTOS defaults to NUM_PRINT_EXC.", &
1534 usage="NUM_PRINT_EXC_NTOS 5", &
1535 n_var=1, &
1536 type_of_var=integer_t, &
1537 default_i_val=-1)
1538 CALL section_add_keyword(print_key, keyword)
1539 CALL keyword_release(keyword)
1540
1541 CALL keyword_create(keyword, __location__, name="STATE_LIST", &
1542 description="Specifies a list of excitation levels $n$ for which NTOs are printed. "// &
1543 "Overrides NUM_PRINT_EXC_NTOS.", &
1544 usage="STATE_LIST {integer} {integer} .. {integer}", &
1545 n_var=-1, type_of_var=integer_t)
1546 CALL section_add_keyword(print_key, keyword)
1547 CALL keyword_release(keyword)
1548
1549 CALL keyword_create(keyword, __location__, name="CUBE_FILES", &
1550 description="Print NTOs on Cube Files", &
1551 usage="CUBE_FILES {logical}", repeats=.false., n_var=1, &
1552 default_l_val=.true., lone_keyword_l_val=.true., type_of_var=logical_t)
1553 CALL section_add_keyword(print_key, keyword)
1554 CALL keyword_release(keyword)
1555
1556 CALL keyword_create(keyword, __location__, name="STRIDE", &
1557 description="The stride (X,Y,Z) used to write the cube file "// &
1558 "(larger values result in smaller cube files). Provide 3 numbers (for X,Y,Z) or"// &
1559 " 1 number valid for all components.", &
1560 usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
1561 CALL section_add_keyword(print_key, keyword)
1562 CALL keyword_release(keyword)
1563
1564 CALL keyword_create(keyword, __location__, name="APPEND", &
1565 description="append the cube files when they already exist", &
1566 default_l_val=.false., lone_keyword_l_val=.true.)
1567 CALL section_add_keyword(print_key, keyword)
1568 CALL keyword_release(keyword)
1569
1570 END SUBROUTINE create_bse_nto_section
1571
1572 SUBROUTINE create_bse_spectrum_section(section)
1573 TYPE(section_type), POINTER :: section
1574
1575 TYPE(keyword_type), POINTER :: keyword
1576
1577 cpassert(.NOT. ASSOCIATED(section))
1578 CALL section_create(section, __location__, name="BSE_SPECTRUM", &
1579 description="Parameters influencing the output of the optical absorption spectrum, i.e. "// &
1580 "the dynamical dipole polarizability tensor $\alpha_{\mu,\mu'}(\omega)$ "// &
1581 "($\mu,\mu'\in\{x,y,z\}$), obtained from a BSE calculation, which is defined as "// &
1582 "$ \alpha_{\mu,\mu'}(\omega) = \sum_n \frac{2 E^{(n)} d^{(n)}_{\mu} d^{(n)}_{\mu'}} "// &
1583 "{(\omega+i\eta)^2-\left(\Omega^{(n)}\right)^2} $. "// &
1584 "The printed file will contain the specified frequency range $\omega$ and the "// &
1585 "corresponding imaginary part of the average $\bar{\alpha}(\omega)=\frac{1}{3}\mathrm{Tr} "// &
1586 "\left[ \alpha_{\mu,\mu'}(\omega)\right]$ as well as of the elements of $\alpha_{\mu,\mu'}(\omega)$.", &
1587 n_keywords=9, n_subsections=0, repeats=.false.)
1588
1589 NULLIFY (keyword)
1590
1591 CALL keyword_create(keyword, __location__, name="_SECTION_PARAMETERS_", &
1592 description="Activates printing of optical absorption spectrum from the BSE calculation.", &
1593 usage="&BSE .TRUE.", &
1594 default_l_val=.false., lone_keyword_l_val=.true.)
1595 CALL section_add_keyword(section, keyword)
1596 CALL keyword_release(keyword)
1597
1598 CALL keyword_create(keyword, __location__, name="FREQUENCY_STEP_SIZE", &
1599 description="Step size of frequencies for the optical absorption spectrum.", &
1600 usage="FREQUENCY_STEP_SIZE 0.1", unit_str="eV", &
1601 type_of_var=real_t, &
1602 default_r_val=cp_unit_to_cp2k(value=0.1_dp, unit_str="eV"))
1603 CALL section_add_keyword(section, keyword)
1604 CALL keyword_release(keyword)
1605
1606 CALL keyword_create(keyword, __location__, name="FREQUENCY_STARTING_POINT", &
1607 description="First frequency to print in the optical absorption spectrum.", &
1608 usage="FREQUENCY_STARTING_POINT 0", unit_str="eV", &
1609 type_of_var=real_t, default_r_val=0.0_dp)
1610 CALL section_add_keyword(section, keyword)
1611 CALL keyword_release(keyword)
1612
1613 CALL keyword_create(keyword, __location__, name="FREQUENCY_END_POINT", &
1614 description="Last frequency to print in the optical absorption spectrum.", &
1615 usage="FREQUENCY_END_POINT 0", unit_str="eV", &
1616 type_of_var=real_t, &
1617 default_r_val=cp_unit_to_cp2k(value=100.0_dp, unit_str="eV"))
1618 CALL section_add_keyword(section, keyword)
1619 CALL keyword_release(keyword)
1620
1621 CALL keyword_create(keyword, __location__, name="ETA_LIST", &
1622 description="List of broadening of the peaks in the optical absorption spectrum.", &
1623 usage="ETA_LIST 0.01 ...", unit_str="eV", &
1624 default_r_vals=[cp_unit_to_cp2k(value=0.01_dp, unit_str="eV")], &
1625 type_of_var=real_t, n_var=-1)
1626 CALL section_add_keyword(section, keyword)
1627 CALL keyword_release(keyword)
1628
1629 END SUBROUTINE create_bse_spectrum_section
1630
1631! **************************************************************************************************
1632!> \brief ...
1633!> \param section ...
1634! **************************************************************************************************
1635 SUBROUTINE create_bse_iterat_section(section)
1636 TYPE(section_type), POINTER :: section
1637
1638 TYPE(keyword_type), POINTER :: keyword
1639
1640 cpassert(.NOT. ASSOCIATED(section))
1641 CALL section_create(section, __location__, name="BSE_ITERAT", &
1642 description="Parameters influencing the iterative Bethe-Salpeter calculation. "// &
1643 "The iterative solver has not been fully implemented yet.", &
1644 n_keywords=9, n_subsections=0, repeats=.false.)
1645
1646 NULLIFY (keyword)
1647
1648 CALL keyword_create(keyword, __location__, name="DAVIDSON_ABORT_COND", &
1649 description="Desired abortion condition for Davidson solver", &
1650 usage="DAVIDSON_ABORT_COND OR", &
1651 enum_c_vals=s2a("EN", "RES", "OR"), &
1653 enum_desc=s2a("Uses energy threshold for successfully exiting solver.", &
1654 "Uses residual threshold for successfully exiting solver.", &
1655 "Uses either energy or residual threshold for successfully exiting solver."), &
1656 default_i_val=bse_iter_en_cond)
1657 CALL section_add_keyword(section, keyword)
1658 CALL keyword_release(keyword)
1659
1660 CALL keyword_create(keyword, __location__, name="NUM_EXC_EN", &
1661 description="Number of lowest excitation energies to be computed.", &
1662 usage="NUM_EXC_EN 3", &
1663 default_i_val=3)
1664 CALL section_add_keyword(section, keyword)
1665 CALL keyword_release(keyword)
1666
1667 CALL keyword_create(keyword, __location__, name="NUM_ADD_START_Z_SPACE", &
1668 description="Determines the initial dimension of the subspace as "// &
1669 "dim = (NUM_EXC_EN+NUM_ADD_START_Z_SPACE)", &
1670 usage="NUM_ADD_START_Z_SPACE 1", &
1671 default_i_val=0)
1672 CALL section_add_keyword(section, keyword)
1673 CALL keyword_release(keyword)
1674
1675 CALL keyword_create(keyword, __location__, name="FAC_MAX_Z_SPACE", &
1676 description="Factor to determine maximum dimension of the Davidson subspace. "// &
1677 "dimension = (NUM_EXC_EN+NUM_ADD_START_Z_SPACE)*FAC_MAX_Z_SPACE", &
1678 usage="FAC_MAX_Z_SPACE 5", &
1679 default_i_val=5)
1680 CALL section_add_keyword(section, keyword)
1681 CALL keyword_release(keyword)
1682
1683 CALL keyword_create(keyword, __location__, name="NUM_NEW_T", &
1684 description="Number of new t vectors added. "// &
1685 "Must be smaller/equals (NUM_EXC_EN+NUM_ADD_START_Z_SPACE)", &
1686 usage="NUM_NEW_T 4", &
1687 default_i_val=1)
1688 CALL section_add_keyword(section, keyword)
1689 CALL keyword_release(keyword)
1690
1691 CALL keyword_create(keyword, __location__, name="EPS_RES", &
1692 description="Threshold for stopping the iteration for computing the transition energies. "// &
1693 "If the residuals inside the Davidson space change by less than EPS_RES (in eV), the iteration "// &
1694 "stops.", &
1695 usage="EPS_RES 0.001", unit_str="eV", &
1696 type_of_var=real_t, default_r_val=0.001_dp)
1697 CALL section_add_keyword(section, keyword)
1698 CALL keyword_release(keyword)
1699
1700 CALL keyword_create(keyword, __location__, name="EPS_EXC_EN", &
1701 description="Threshold for stopping the iteration for computing the transition energies. "// &
1702 "If the desired excitation energies change by less than EPS_EXC_EN (in eV), the iteration "// &
1703 "stops.", &
1704 usage="EPS_EXC_EN 0.001", unit_str="eV", &
1705 type_of_var=real_t, default_r_val=0.001_dp)
1706 CALL section_add_keyword(section, keyword)
1707 CALL keyword_release(keyword)
1708
1709 CALL keyword_create(keyword, __location__, name="NUM_DAVIDSON_ITER", &
1710 description="Maximum number of iterations for determining the transition energies.", &
1711 usage="NUM_DAVIDSON_ITER 100", &
1712 default_i_val=100)
1713 CALL section_add_keyword(section, keyword)
1714 CALL keyword_release(keyword)
1715
1716 CALL keyword_create(keyword, __location__, name="Z_SPACE_ENERGY_CUTOFF", &
1717 description="Cutoff (in eV) for maximal energy difference entering the A matrix. "// &
1718 "Per default and for negative values, there is no cutoff applied.", &
1719 usage="Z_SPACE_ENERGY_CUTOFF 60", unit_str="eV", &
1720 type_of_var=real_t, default_r_val=-1.0_dp)
1721 CALL section_add_keyword(section, keyword)
1722 CALL keyword_release(keyword)
1723 END SUBROUTINE create_bse_iterat_section
1724
1725! **************************************************************************************************
1726!> \brief ...
1727!> \param section ...
1728! **************************************************************************************************
1729 SUBROUTINE create_ic_section(section)
1730 TYPE(section_type), POINTER :: section
1731
1732 TYPE(keyword_type), POINTER :: keyword
1733
1734 cpassert(.NOT. ASSOCIATED(section))
1735 CALL section_create(section, __location__, name="IC", &
1736 description="Parameters influencing the image charge correction. "// &
1737 "The image plane is always an xy plane, so adjust the molecule according "// &
1738 "to that. ", &
1739 n_keywords=3, n_subsections=1, repeats=.false.)
1740
1741 NULLIFY (keyword)
1742
1743 CALL keyword_create(keyword, __location__, name="PRINT_IC_LIST", &
1744 description="If true, the image charge correction values are printed in a list, "// &
1745 "such that it can be used as input for a subsequent evGW calculation.", &
1746 usage="PRINT_IC_LIST .TRUE.", &
1747 default_l_val=.false., &
1748 lone_keyword_l_val=.true.)
1749 CALL section_add_keyword(section, keyword)
1750 CALL keyword_release(keyword)
1751
1752 CALL keyword_create(keyword, __location__, name="EPS_DIST", &
1753 description="Threshold where molecule and image molecule have to coincide. ", &
1754 usage="EPS_DIST 0.1", unit_str="angstrom", &
1755 type_of_var=real_t, default_r_val=3.0e-02_dp, repeats=.false.)
1756 CALL section_add_keyword(section, keyword)
1757 CALL keyword_release(keyword)
1758
1759 END SUBROUTINE create_ic_section
1760
1761! **************************************************************************************************
1762!> \brief ...
1763!> \param section ...
1764! **************************************************************************************************
1765 SUBROUTINE create_low_scaling(section)
1766 TYPE(section_type), POINTER :: section
1767
1768 TYPE(keyword_type), POINTER :: keyword
1769 TYPE(section_type), POINTER :: subsection
1770
1771 cpassert(.NOT. ASSOCIATED(section))
1772 CALL section_create( &
1773 section, __location__, name="LOW_SCALING", &
1774 description="Cubic scaling RI-RPA, GW and Laplace-SOS-MP2 method using the imaginary time formalism. "// &
1775 "EPS_GRID in WFC_GPW section controls accuracy / req. memory for 3-center integrals. "// &
1776 "SORT_BASIS EXP should be specified in DFT section.", &
1777 n_keywords=12, n_subsections=2, repeats=.false., &
1778 citations=[wilhelm2016b, wilhelm2018, bussy2023])
1779
1780 NULLIFY (keyword)
1781 CALL keyword_create(keyword, __location__, name="_SECTION_PARAMETERS_", &
1782 description="Activates cubic-scaling RPA, GW and Laplace-SOS-MP2 calculations.", &
1783 usage="&LOW_SCALING .TRUE.", &
1784 default_l_val=.false., lone_keyword_l_val=.true.)
1785 CALL section_add_keyword(section, keyword)
1786 CALL keyword_release(keyword)
1787
1788 CALL keyword_create(keyword, __location__, name="MEMORY_CUT", &
1789 description="Reduces memory for sparse tensor contractions by this factor. "// &
1790 "A high value leads to some loss of performance. "// &
1791 "This memory reduction factor applies to storage of the tensors 'M occ' / 'M virt' "// &
1792 "but does not reduce storage of '3c ints'.", &
1793 usage="MEMORY_CUT 16", &
1794 default_i_val=5)
1795 CALL section_add_keyword(section, keyword)
1796 CALL keyword_release(keyword)
1797
1798 CALL keyword_create(keyword, __location__, name="MEMORY_INFO", &
1799 description="Decide whether to print memory info on the sparse matrices.", &
1800 usage="MEMORY_INFO", &
1801 default_l_val=.false., &
1802 lone_keyword_l_val=.true.)
1803 CALL section_add_keyword(section, keyword)
1804 CALL keyword_release(keyword)
1805
1806 CALL keyword_create( &
1807 keyword, __location__, name="EPS_FILTER", &
1808 description="Determines a threshold for the DBCSR based multiply. "// &
1809 "Normally, this EPS_FILTER determines accuracy and timing of low-scaling RPA and GW calculations.", &
1810 usage="EPS_FILTER 1.0E-10 ", type_of_var=real_t, &
1811 default_r_val=1.0e-9_dp)
1812 CALL section_add_keyword(section, keyword)
1813 CALL keyword_release(keyword)
1814
1815 CALL keyword_create( &
1816 keyword, __location__, name="EPS_FILTER_FACTOR", &
1817 description="Multiply EPS_FILTER with this factor to determine filter epsilon "// &
1818 "for DBCSR based multiply P(it)=(Mocc(it))^T*Mvirt(it) "// &
1819 "Default should be kept.", &
1820 type_of_var=real_t, &
1821 default_r_val=10.0_dp)
1822 CALL section_add_keyword(section, keyword)
1823 CALL keyword_release(keyword)
1824
1825 CALL keyword_create( &
1826 keyword, __location__, &
1827 name="EPS_STORAGE_SCALING", &
1828 variants=["EPS_STORAGE"], &
1829 description="Scaling factor to scale EPS_FILTER. Storage threshold for compression "// &
1830 "will be EPS_FILTER*EPS_STORAGE_SCALING.", &
1831 default_r_val=1.0e-3_dp)
1832 CALL section_add_keyword(section, keyword)
1833 CALL keyword_release(keyword)
1834
1835 CALL keyword_create( &
1836 keyword, __location__, &
1837 name="DO_KPOINTS", &
1838 description="Besides in DFT, this keyword has to be switched on if one wants to do kpoints in. "// &
1839 "cubic RPA.", &
1840 usage="DO_KPOINTS", &
1841 default_l_val=.false., &
1842 lone_keyword_l_val=.true.)
1843 CALL section_add_keyword(section, keyword)
1844 CALL keyword_release(keyword)
1845
1846 CALL keyword_create( &
1847 keyword, __location__, name="KPOINTS", &
1848 description="Keyword activates periodic, low-scaling GW calculations (&LOW_SCALING section also needed). "// &
1849 "For periodic calculations, kpoints are used for the density response, the "// &
1850 "Coulomb interaction and the screened Coulomb interaction. For 2d periodic systems, e.g. xz "// &
1851 "periodicity, please also specify KPOINTS, e.g. N_x 1 N_z.", &
1852 usage="KPOINTS N_x N_y N_z", &
1853 n_var=3, type_of_var=integer_t, default_i_vals=[0, 0, 0])
1854 CALL section_add_keyword(section, keyword)
1855 CALL keyword_release(keyword)
1856
1857 CALL keyword_create( &
1858 keyword, __location__, &
1859 name="KPOINT_WEIGHTS_W", &
1860 description="For kpoints in low-scaling GW, a Monkhorst-Pack mesh is used. The screened Coulomb "// &
1861 "interaction W(k) needs special care near the Gamma point (e.g. in 3d, W(k) diverges at the "// &
1862 "Gamma point with W(k) ~ k^alpha). KPOINT_WEIGHTS_W decides how the weights of the "// &
1863 "Monkhorst-Pack mesh are chosen to compute W(R) = int_BZ W(k) exp(ikR) dk (BZ=Brllouin zone). ", &
1864 usage="KPOINT_WEIGHTS_W AUTO", &
1865 enum_c_vals=s2a("TAILORED", "AUTO", "UNIFORM"), &
1867 enum_desc=s2a("Choose k-point integration weights such that the function f(k)=k^alpha is "// &
1868 "exactly integrated. alpha is specified using EXPONENT_TAILORED_WEIGHTS.", &
1869 "As 'TAILORED', but alpha is chosen automatically according to dimensionality "// &
1870 "(3D: alpha = -2 for 3D, 2D: alpha = -1 for exchange self-energy, uniform "// &
1871 "weights for correlation self-energy).", &
1872 "Choose the same weight for every k-point (original Monkhorst-Pack method)."), &
1873 default_i_val=kp_weights_w_uniform)
1874 CALL section_add_keyword(section, keyword)
1875 CALL keyword_release(keyword)
1876
1877 CALL keyword_create( &
1878 keyword, __location__, &
1879 name="EXPONENT_TAILORED_WEIGHTS", &
1880 description="Gives the exponent of exactly integrated function in case 'KPOINT_WEIGHTS_W "// &
1881 "TAILORED' is chosen.", &
1882 usage="EXPONENT_TAILORED_WEIGHTS -2", &
1883 default_r_val=-2.0_dp)
1884 CALL section_add_keyword(section, keyword)
1885 CALL keyword_release(keyword)
1886
1887 CALL keyword_create( &
1888 keyword, __location__, &
1889 name="REGULARIZATION_RI", &
1890 description="Parameter to reduce the expansion coefficients in RI for periodic GW. Larger parameter "// &
1891 "means smaller expansion coefficients that leads to a more stable calculation at the price "// &
1892 "of a slightly worse RI approximation. In case the parameter 0.0 is chosen, ordinary RI is used.", &
1893 usage="REGULARIZATION_RI 1.0E-4", &
1894 default_r_val=0.0_dp)
1895 CALL section_add_keyword(section, keyword)
1896 CALL keyword_release(keyword)
1897
1898 CALL keyword_create( &
1899 keyword, __location__, &
1900 name="EPS_EIGVAL_S", &
1901 description="Parameter to reduce the expansion coefficients in RI for periodic GW. Removes all "// &
1902 "eigenvectors and eigenvalues of S_PQ(k) that are smaller than EPS_EIGVAL_S. ", &
1903 usage="EPS_EIGVAL_S 1.0E-3", &
1904 default_r_val=0.0_dp)
1905 CALL section_add_keyword(section, keyword)
1906 CALL keyword_release(keyword)
1907
1908 CALL keyword_create( &
1909 keyword, __location__, &
1910 name="EPS_EIGVAL_S_GAMMA", &
1911 description="Parameter to reduce the expansion coefficients in RI for periodic GW. Removes all "// &
1912 "eigenvectors and eigenvalues of M_PQ(k=0) that are smaller than EPS_EIGVAL_S. ", &
1913 usage="EPS_EIGVAL_S_GAMMA 1.0E-3", &
1914 default_r_val=0.0_dp)
1915 CALL section_add_keyword(section, keyword)
1916 CALL keyword_release(keyword)
1917
1918 CALL keyword_create( &
1919 keyword, __location__, &
1920 name="MAKE_CHI_POS_DEFINITE", &
1921 description="If true, makes eigenvalue decomposition of chi(iw,k) and removes negative "// &
1922 "eigenvalues. May increase computational cost significantly. Only recommended to try in case "// &
1923 "Cholesky decomposition of epsilon(iw,k) fails.", &
1924 usage="MAKE_CHI_POS_DEFINITE", &
1925 default_l_val=.true., &
1926 lone_keyword_l_val=.true.)
1927 CALL section_add_keyword(section, keyword)
1928 CALL keyword_release(keyword)
1929
1930 CALL keyword_create( &
1931 keyword, __location__, &
1932 name="MAKE_OVERLAP_MAT_AO_POS_DEFINITE", &
1933 description="If true, makes eigenvalue decomposition of S_mu,nu(k) and removes negative "// &
1934 "eigenvalues. Slightly increases computational cost. Only recommended to try in case "// &
1935 "Cholesky decomposition of S_mu,nu(k) fails (error message: Cholesky decompose failed: "// &
1936 "matrix is not positive definite or ill-conditioned; when calling create_kp_and_calc_kp_orbitals).", &
1937 usage="MAKE_OVERLAP_MAT_AO_POS_DEFINITE", &
1938 default_l_val=.false., &
1939 lone_keyword_l_val=.true.)
1940 CALL section_add_keyword(section, keyword)
1941 CALL keyword_release(keyword)
1942
1943 CALL keyword_create( &
1944 keyword, __location__, &
1945 name="DO_EXTRAPOLATE_KPOINTS", &
1946 description="If true, use a larger k-mesh to extrapolate the k-point integration of W. "// &
1947 "For example, in 2D, when using KPOINTS 4 4 1, an additional 6x6x1 mesh will be used to "// &
1948 "extrapolate the k-point integration of W with N_k^-0.5, where Nk is the number of k-points.", &
1949 usage="DO_EXTRAPOLATE_KPOINTS FALSE", &
1950 default_l_val=.true., &
1951 lone_keyword_l_val=.true.)
1952 CALL section_add_keyword(section, keyword)
1953 CALL keyword_release(keyword)
1954
1955 CALL keyword_create( &
1956 keyword, __location__, &
1957 name="TRUNC_COULOMB_RI_X", &
1958 description="If true, use the truncated Coulomb operator for the exchange-self-energy in "// &
1959 "periodic GW.", &
1960 usage="TRUNC_COULOMB_RI_X", &
1961 default_l_val=.true., &
1962 lone_keyword_l_val=.true.)
1963 CALL section_add_keyword(section, keyword)
1964 CALL keyword_release(keyword)
1965
1966 CALL keyword_create( &
1967 keyword, __location__, &
1968 name="REL_CUTOFF_TRUNC_COULOMB_RI_X", &
1969 description="Only active in case TRUNC_COULOMB_RI_X = True. Normally, relative cutoff = 0.5 is "// &
1970 "good choice; still needs to be evaluated for RI schemes. ", &
1971 usage="REL_CUTOFF_TRUNC_COULOMB_RI_X 0.3", &
1972 default_r_val=0.5_dp)
1973 CALL section_add_keyword(section, keyword)
1974 CALL keyword_release(keyword)
1975
1976 CALL keyword_create( &
1977 keyword, __location__, &
1978 name="KEEP_QUADRATURE", &
1979 variants=s2a("KEEP_WEIGHTS", "KEEP_QUAD", "KEEP_WEIGHT"), &
1980 description="Keep the Laplace quadrature defined at the first energy evaluations throughout "// &
1981 "the run. Allows to have consistent force evaluations.", &
1982 usage="KEEP_QUADRATURE", &
1983 default_l_val=.true., &
1984 lone_keyword_l_val=.true.)
1985 CALL section_add_keyword(section, keyword)
1986 CALL keyword_release(keyword)
1987
1988 CALL keyword_create( &
1989 keyword, __location__, &
1990 name="K_MESH_G_FACTOR", &
1991 description="The k-mesh for the Green's function can be chosen to be larger than the k-mesh for "// &
1992 "W (without much higher computational cost). The factor given here multiplies the mesh for W to obtain "// &
1993 "the k-mesh for G. Example: factor 4, k-mesh for W: 4x4x1 -> k-mesh for G: 16x16x1 (z-dir. is "// &
1994 "non-periodic).", &
1995 default_i_val=1)
1996 CALL section_add_keyword(section, keyword)
1997 CALL keyword_release(keyword)
1998
1999 CALL keyword_create( &
2000 keyword, __location__, &
2001 name="MIN_BLOCK_SIZE", &
2002 description="Minimum tensor block size. Adjusting this value may have minor effect on "// &
2003 "performance but default should be good enough.", &
2004 default_i_val=5)
2005 CALL section_add_keyword(section, keyword)
2006 CALL keyword_release(keyword)
2007
2008 CALL keyword_create( &
2009 keyword, __location__, &
2010 name="MIN_BLOCK_SIZE_MO", &
2011 description="Tensor block size for MOs. Only relevant for GW calculations. "// &
2012 "The memory consumption of GW scales as O(MIN_BLOCK_SIZE_MO). It is recommended to "// &
2013 "set this parameter to a smaller number if GW runs out of memory. "// &
2014 "Otherwise the default should not be changed.", &
2015 default_i_val=64)
2016 CALL section_add_keyword(section, keyword)
2017 CALL keyword_release(keyword)
2018
2019 NULLIFY (subsection)
2020 CALL create_low_scaling_cphf(subsection)
2021 CALL section_add_subsection(section, subsection)
2022 CALL section_release(subsection)
2023
2024 END SUBROUTINE create_low_scaling
2025
2026! **************************************************************************************************
2027!> \brief ...
2028!> \param section ...
2029! **************************************************************************************************
2030 SUBROUTINE create_wfc_gpw(section)
2031 TYPE(section_type), POINTER :: section
2032
2033 TYPE(keyword_type), POINTER :: keyword
2034
2035 cpassert(.NOT. ASSOCIATED(section))
2036 CALL section_create(section, __location__, name="WFC_GPW", &
2037 description="Parameters for the GPW approach in Wavefunction-based Correlation methods", &
2038 n_keywords=5, n_subsections=0, repeats=.false.)
2039
2040 NULLIFY (keyword)
2041 CALL keyword_create(keyword, __location__, name="EPS_GRID", &
2042 description="Determines a threshold for the GPW based integration", &
2043 usage="EPS_GRID 1.0E-9 ", type_of_var=real_t, &
2044 default_r_val=1.0e-8_dp)
2045 CALL section_add_keyword(section, keyword)
2046 CALL keyword_release(keyword)
2047
2048 CALL keyword_create( &
2049 keyword, __location__, name="EPS_FILTER", &
2050 description="Determines a threshold for the DBCSR based multiply (usually 10 times smaller than EPS_GRID). "// &
2051 "Normally, this EPS_FILTER determines accuracy and timing of cubic-scaling RPA calculation.", &
2052 usage="EPS_FILTER 1.0E-10 ", type_of_var=real_t, &
2053 default_r_val=1.0e-9_dp)
2054 CALL section_add_keyword(section, keyword)
2055 CALL keyword_release(keyword)
2056
2057 CALL keyword_create(keyword, __location__, name="CUTOFF", &
2058 description="The cutoff of the finest grid level in the MP2 gpw integration.", &
2059 usage="CUTOFF 300", type_of_var=real_t, &
2060 default_r_val=300.0_dp)
2061 CALL section_add_keyword(section, keyword)
2062 CALL keyword_release(keyword)
2063
2064 CALL keyword_create(keyword, __location__, name="REL_CUTOFF", &
2065 variants=["RELATIVE_CUTOFF"], &
2066 description="Determines the grid at which a Gaussian is mapped.", &
2067 usage="REL_CUTOFF 50", type_of_var=real_t, &
2068 default_r_val=50.0_dp)
2069 CALL section_add_keyword(section, keyword)
2070 CALL keyword_release(keyword)
2071
2072 CALL keyword_create(keyword, __location__, name="PRINT_LEVEL", &
2073 variants=["IOLEVEL"], &
2074 description="How much output is written by the individual groups.", &
2075 usage="PRINT_LEVEL HIGH", &
2076 default_i_val=silent_print_level, enum_c_vals= &
2077 s2a("SILENT", "LOW", "MEDIUM", "HIGH", "DEBUG"), &
2078 enum_desc=s2a("Almost no output", &
2079 "Little output", "Quite some output", "Lots of output", &
2080 "Everything is written out, useful for debugging purposes only"), &
2083 CALL section_add_keyword(section, keyword)
2084 CALL keyword_release(keyword)
2085
2086 CALL keyword_create( &
2087 keyword, __location__, name="EPS_PGF_ORB_S", &
2088 description="Screening for overlap matrix in RI. Usually, it is best to choose this parameter "// &
2089 "to be very small since the inversion of overlap matrix might be ill-conditioned.", &
2090 usage="EPS_PGF_ORB_S 1.0E-10 ", type_of_var=real_t, &
2091 default_r_val=1.0e-10_dp)
2092 CALL section_add_keyword(section, keyword)
2093 CALL keyword_release(keyword)
2094
2095 END SUBROUTINE create_wfc_gpw
2096
2097! **************************************************************************************************
2098!> \brief ...
2099!> \param section ...
2100! **************************************************************************************************
2101 SUBROUTINE create_cphf(section)
2102 TYPE(section_type), POINTER :: section
2103
2104 TYPE(keyword_type), POINTER :: keyword
2105
2106 cpassert(.NOT. ASSOCIATED(section))
2107 CALL section_create( &
2108 section, __location__, name="CPHF", &
2109 description="Parameters influencing the solution of the Z-vector equations in MP2 gradients calculations.", &
2110 n_keywords=2, n_subsections=0, repeats=.false., &
2111 citations=[delben2013])
2112
2113 NULLIFY (keyword)
2114
2115 CALL keyword_create(keyword, __location__, name="MAX_ITER", &
2116 variants=["MAX_NUM_ITER"], &
2117 description="Maximum number of iterations allowed for the solution of the Z-vector equations.", &
2118 usage="MAX_ITER 50", &
2119 default_i_val=30)
2120 CALL section_add_keyword(section, keyword)
2121 CALL keyword_release(keyword)
2122
2123 CALL keyword_create(keyword, __location__, name="RESTART_EVERY", &
2124 description="Restart iteration every given number of steps.", &
2125 usage="RESTART_EVERY 5", &
2126 default_i_val=5)
2127 CALL section_add_keyword(section, keyword)
2128 CALL keyword_release(keyword)
2129
2130 CALL keyword_create(keyword, __location__, name="SOLVER_METHOD", &
2131 description="Chose solver of the z-vector equations.", &
2132 usage="SOLVER_METHOD POPLE", enum_c_vals= &
2133 s2a("POPLE", "CG", "RICHARDSON", "SD"), &
2134 enum_desc=s2a("Pople's method (Default).", &
2135 "Conjugated gradient method (equivalent to Pople).", &
2136 "Richardson iteration", &
2137 "Steepest Descent iteration"), &
2139 default_i_val=z_solver_pople)
2140 CALL section_add_keyword(section, keyword)
2141 CALL keyword_release(keyword)
2142
2143 CALL keyword_create(keyword, __location__, name="EPS_CONV", &
2144 description="Convergence threshold for the solution of the Z-vector equations. "// &
2145 "The Z-vector equations have the form of a linear system of equations Ax=b, "// &
2146 "convergence is achieved when |Ax-b|<=EPS_CONV.", &
2147 usage="EPS_CONV 1.0E-6", type_of_var=real_t, &
2148 default_r_val=1.0e-4_dp)
2149 CALL section_add_keyword(section, keyword)
2150 CALL keyword_release(keyword)
2151
2152 CALL keyword_create(keyword, __location__, name="SCALE_STEP_SIZE", &
2153 description="Scaling factor of each step.", &
2154 usage="SCALE_STEP_SIZE 1.0", &
2155 default_r_val=1.0_dp)
2156 CALL section_add_keyword(section, keyword)
2157 CALL keyword_release(keyword)
2158
2159 CALL keyword_create(keyword, __location__, name="ENFORCE_DECREASE", &
2160 description="Restarts if residual does not decrease.", &
2161 usage="ENFORCE_DECREASE T", &
2162 lone_keyword_l_val=.true., &
2163 default_l_val=.false.)
2164 CALL section_add_keyword(section, keyword)
2165 CALL keyword_release(keyword)
2166
2167 CALL keyword_create(keyword, __location__, name="DO_POLAK_RIBIERE", &
2168 description="Use a Polak-Ribiere update of the search vector in CG instead of the Fletcher "// &
2169 "Reeves update. Improves the convergence with modified step sizes. "// &
2170 "Ignored with other methods than CG.", &
2171 usage="DO_POLAK_RIBIERE T", &
2172 lone_keyword_l_val=.true., &
2173 default_l_val=.false.)
2174 CALL section_add_keyword(section, keyword)
2175 CALL keyword_release(keyword)
2176
2177 CALL keyword_create(keyword, __location__, name="RECALC_RESIDUAL", &
2178 description="Recalculates residual in every step.", &
2179 usage="RECALC_RESIDUAL T", &
2180 lone_keyword_l_val=.true., &
2181 default_l_val=.false.)
2182 CALL section_add_keyword(section, keyword)
2183 CALL keyword_release(keyword)
2184
2185 END SUBROUTINE create_cphf
2186
2187! **************************************************************************************************
2188!> \brief ...
2189!> \param section ...
2190! **************************************************************************************************
2191 SUBROUTINE create_low_scaling_cphf(section)
2192 TYPE(section_type), POINTER :: section
2193
2194 TYPE(keyword_type), POINTER :: keyword
2195
2196 NULLIFY (keyword)
2197
2198 cpassert(.NOT. ASSOCIATED(section))
2199 CALL section_create(section, __location__, name="CPHF", &
2200 description="Parameters influencing the solution of the Z-vector equations "// &
2201 "in low-scaling Laplace-SOS-MP2 gradients calculations.", &
2202 n_keywords=5, n_subsections=0, repeats=.false.)
2203
2204 CALL keyword_create(keyword, __location__, name="EPS_CONV", &
2205 description="Target accuracy for Z-vector euation solution.", &
2206 usage="EPS_CONV 1.e-6", default_r_val=1.e-6_dp)
2207 CALL section_add_keyword(section, keyword)
2208 CALL keyword_release(keyword)
2209
2210 CALL keyword_create(keyword, __location__, name="MAX_ITER", &
2211 description="Maximum number of conjugate gradient iteration to be performed for one optimization.", &
2212 usage="MAX_ITER 200", default_i_val=50)
2213 CALL section_add_keyword(section, keyword)
2214 CALL keyword_release(keyword)
2215
2216 CALL keyword_create( &
2217 keyword, __location__, name="PRECONDITIONER", &
2218 description="Type of preconditioner to be used with all minimization schemes. "// &
2219 "They differ in effectiveness, cost of construction, cost of application. "// &
2220 "Properly preconditioned minimization can be orders of magnitude faster than doing nothing.", &
2221 usage="PRECONDITIONER FULL_ALL", &
2222 default_i_val=ot_precond_full_all, &
2223 enum_c_vals=s2a("FULL_ALL", "FULL_SINGLE_INVERSE", "FULL_SINGLE", "FULL_KINETIC", "FULL_S_INVERSE", &
2224 "NONE"), &
2225 enum_desc=s2a("Most effective state selective preconditioner based on diagonalization, "// &
2226 "requires the ENERGY_GAP parameter to be an underestimate of the HOMO-LUMO gap. "// &
2227 "This preconditioner is recommended for almost all systems, except very large systems where "// &
2228 "make_preconditioner would dominate the total computational cost.", &
2229 "Based on H-eS cholesky inversion, similar to FULL_SINGLE in preconditioning efficiency "// &
2230 "but cheaper to construct, "// &
2231 "might be somewhat less robust. Recommended for large systems.", &
2232 "Based on H-eS diagonalisation, not as good as FULL_ALL, but somewhat cheaper to apply. ", &
2233 "Cholesky inversion of S and T, fast construction, robust, and relatively good, "// &
2234 "use for very large systems.", &
2235 "Cholesky inversion of S, not as good as FULL_KINETIC, yet equally expensive.", &
2236 "skip preconditioning"), &
2239 CALL section_add_keyword(section, keyword)
2240 CALL keyword_release(keyword)
2241
2242 CALL keyword_create(keyword, __location__, name="ENERGY_GAP", &
2243 description="Energy gap estimate [a.u.] for preconditioning", &
2244 usage="ENERGY_GAP 0.1", &
2245 default_r_val=0.2_dp)
2246 CALL section_add_keyword(section, keyword)
2247 CALL keyword_release(keyword)
2248
2249 END SUBROUTINE create_low_scaling_cphf
2250
2251! **************************************************************************************************
2252!> \brief ...
2253!> \param section ...
2254! **************************************************************************************************
2255 SUBROUTINE create_mp2_potential(section)
2256 TYPE(section_type), POINTER :: section
2257
2258 TYPE(keyword_type), POINTER :: keyword
2259
2260 cpassert(.NOT. ASSOCIATED(section))
2261 CALL section_create(section, __location__, name="INTERACTION_POTENTIAL", &
2262 description="Parameters the interaction potential in computing the biel integrals", &
2263 n_keywords=4, n_subsections=0, repeats=.false.)
2264
2265 NULLIFY (keyword)
2266 CALL keyword_create( &
2267 keyword, __location__, &
2268 name="POTENTIAL_TYPE", &
2269 description="Which interaction potential should be used "// &
2270 "(Coulomb, TShPSC operator).", &
2271 usage="POTENTIAL_TYPE TSHPSC", &
2272 enum_c_vals=s2a("COULOMB", "TShPSC", "LONGRANGE", "SHORTRANGE", "TRUNCATED", "MIX_CL", "IDENTITY"), &
2273 enum_i_vals=[do_potential_coulomb, &
2279 do_potential_id], &
2280 enum_desc=s2a("Coulomb potential: 1/r", &
2281 "| Range | TShPSC |"//newline// &
2282 "| ----- | ------ |"//newline// &
2283 "| $ x \leq R_c $ | $ 1/x - s/R_c $ |"//newline// &
2284 "| $ R_c < x \leq nR_c $ | "// &
2285 "$ (1 - s)/R_c - (x - R_c)/R_c^2 + (x - R_c)^2/R_c^3 - "// &
2286 "(2n^2 - 7n + 9 - 4s)(x - R_c)^3/(R_c^4(n^2 - 2n + 1)(n - 1)) + "// &
2287 "(6-3s - 4n + n^2)(x - R_c)^4/(R_c^5(n^4 - 4n^3 + 6n^2 - 4n + 1)) $ "// &
2288 "(4th order polynomial) | "//newline// &
2289 "| $ x > nR_c $ | $ 0 $ | "//newline, &
2290 "Longrange Coulomb potential: $ \operatorname{erf}(wr)/r $", &
2291 "Shortrange Coulomb potential: $ \operatorname{erfc}(wr)/r $", &
2292 "Truncated Coulomb potential", &
2293 "Mixed Coulomb/Longrange Coulomb potential", &
2294 "Delta potential"), &
2295 default_i_val=do_potential_coulomb)
2296 CALL section_add_keyword(section, keyword)
2297 CALL keyword_release(keyword)
2298
2299 CALL keyword_create(keyword, __location__, name="TRUNCATION_RADIUS", &
2300 variants=["CUTOFF_RADIUS"], &
2301 description="Determines truncation radius for the truncated potentials. "// &
2302 "Only valid when doing truncated calculations", &
2303 usage="TRUNCATION_RADIUS 10.0", type_of_var=real_t, &
2304 default_r_val=10.0_dp, &
2305 unit_str="angstrom")
2306 CALL section_add_keyword(section, keyword)
2307 CALL keyword_release(keyword)
2308
2309 CALL keyword_create( &
2310 keyword, __location__, &
2311 name="POTENTIAL_DATA", &
2312 variants=s2a("TShPSC_DATA", "T_C_G_DATA"), &
2313 description="Location of the file TShPSC.dat or t_c_g.dat that contains the data for the "// &
2314 "evaluation of the evaluation of the truncated potentials", &
2315 usage="TShPSC_DATA t_sh_p_s_c.dat", &
2316 default_c_val="t_sh_p_s_c.dat")
2317 CALL section_add_keyword(section, keyword)
2318 CALL keyword_release(keyword)
2319
2320 CALL keyword_create( &
2321 keyword, __location__, &
2322 name="OMEGA", &
2323 description="Range separation parameter for the longrange or shortrange potential. "// &
2324 "Only valid when longrange or shortrange potential is requested.", &
2325 usage="OMEGA 0.5", type_of_var=real_t, &
2326 default_r_val=0.5_dp)
2327 CALL section_add_keyword(section, keyword)
2328 CALL keyword_release(keyword)
2329
2330 CALL keyword_create( &
2331 keyword, __location__, &
2332 name="SCALE_COULOMB", &
2333 description="Scaling factor of (truncated) Coulomb potential in mixed (truncated) Coulomb/Longrange potential. "// &
2334 "Only valid when mixed potential is requested.", &
2335 usage="SCALE_COULOMB 0.5", type_of_var=real_t, &
2336 default_r_val=1.0_dp)
2337 CALL section_add_keyword(section, keyword)
2338 CALL keyword_release(keyword)
2339
2340 CALL keyword_create( &
2341 keyword, __location__, &
2342 name="SCALE_LONGRANGE", &
2343 description="Scaling factor of longrange Coulomb potential in mixed (truncated) Coulomb/Longrange potential. "// &
2344 "Only valid when mixed potential is requested.", &
2345 usage="SCALE_LONGRANGE 0.5", type_of_var=real_t, &
2346 default_r_val=1.0_dp)
2347 CALL section_add_keyword(section, keyword)
2348 CALL keyword_release(keyword)
2349
2350 END SUBROUTINE create_mp2_potential
2351
2352! **************************************************************************************************
2353!> \brief ...
2354!> \param section ...
2355! **************************************************************************************************
2356 SUBROUTINE create_ri_section(section)
2357 TYPE(section_type), POINTER :: section
2358
2359 TYPE(keyword_type), POINTER :: keyword
2360 TYPE(section_type), POINTER :: subsection
2361
2362 cpassert(.NOT. ASSOCIATED(section))
2363 CALL section_create(section, __location__, name="RI", &
2364 description="Parameters influencing resolution of the identity (RI) that is "// &
2365 "used in RI-MP2, RI-RPA, RI-SOS-MP2 and GW (inside RI-RPA).", &
2366 n_keywords=6, n_subsections=2, repeats=.false.)
2367
2368 NULLIFY (subsection)
2369 CALL create_ri_metric_section(subsection)
2370 CALL section_add_subsection(section, subsection)
2371 CALL section_release(subsection)
2372
2373 CALL create_opt_ri_basis(subsection)
2374 CALL section_add_subsection(section, subsection)
2375 CALL section_release(subsection)
2376
2377 NULLIFY (keyword)
2378 CALL keyword_create( &
2379 keyword, __location__, &
2380 name="ROW_BLOCK", &
2381 variants=["ROW_BLOCK_SIZE"], &
2382 description="Size of the row block used in the SCALAPACK block cyclic data distribution. "// &
2383 "Default is (ROW_BLOCK=-1) is automatic. "// &
2384 "A proper choice can speedup the parallel matrix multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.", &
2385 usage="ROW_BLOCK 512", &
2386 default_i_val=-1)
2387 CALL section_add_keyword(section, keyword)
2388 CALL keyword_release(keyword)
2389
2390 CALL keyword_create( &
2391 keyword, __location__, &
2392 name="COL_BLOCK", &
2393 variants=["COL_BLOCK_SIZE"], &
2394 description="Size of the column block used in the SCALAPACK block cyclic data distribution. "// &
2395 "Default is (COL_BLOCK=-1) is automatic. "// &
2396 "A proper choice can speedup the parallel matrix multiplication in the case of RI-RPA and RI-SOS-MP2-Laplace.", &
2397 usage="COL_BLOCK 512", &
2398 default_i_val=-1)
2399 CALL section_add_keyword(section, keyword)
2400 CALL keyword_release(keyword)
2401
2402 CALL keyword_create( &
2403 keyword, __location__, &
2404 name="CALC_COND_NUM", &
2405 variants=["CALC_CONDITION_NUMBER"], &
2406 description="Calculate the condition number of the (P|Q) matrix for the RI methods.", &
2407 usage="CALC_COND_NUM", &
2408 default_l_val=.false., &
2409 lone_keyword_l_val=.true.)
2410 CALL section_add_keyword(section, keyword)
2411 CALL keyword_release(keyword)
2412
2413 CALL keyword_create(keyword, __location__, name="DO_SVD", &
2414 description="Wether to perform a singular value decomposition instead of the Cholesky decomposition "// &
2415 "of the potential operator in the RI basis. Computationally expensive but numerically more stable. "// &
2416 "It reduces the computational costs of some subsequent steps. Recommended when a longrange Coulomb "// &
2417 "potential is employed.", &
2418 usage="DO_SVD .TRUE.", &
2419 default_l_val=.false., lone_keyword_l_val=.true.)
2420 CALL section_add_keyword(section, keyword)
2421 CALL keyword_release(keyword)
2422
2423 CALL keyword_create(keyword, __location__, name="EPS_SVD", &
2424 description="Determines the upper bound of eigenvectors to be removed during the SVD (see DO_SVD).", &
2425 usage="EPS_SVD 1E-5", &
2426 default_r_val=0.0_dp)
2427 CALL section_add_keyword(section, keyword)
2428 CALL keyword_release(keyword)
2429
2430 CALL keyword_create(keyword, __location__, name="ERI_BLKSIZE", &
2431 description="block sizes for tensors (only used if ERI_METHOD=MME). First value "// &
2432 "is the block size for ORB basis, second value is the block size for RI_AUX basis.", &
2433 usage="ERI_BLKSIZE", &
2434 n_var=2, &
2435 default_i_vals=[4, 16])
2436 CALL section_add_keyword(section, keyword)
2437 CALL keyword_release(keyword)
2438
2439 END SUBROUTINE create_ri_section
2440
2441! **************************************************************************************************
2442!> \brief ...
2443!> \param section ...
2444! **************************************************************************************************
2445 SUBROUTINE create_integrals_section(section)
2446 TYPE(section_type), POINTER :: section
2447
2448 TYPE(keyword_type), POINTER :: keyword
2449 TYPE(section_type), POINTER :: subsection
2450
2451 cpassert(.NOT. ASSOCIATED(section))
2452 CALL section_create(section, __location__, name="INTEGRALS", &
2453 description="Parameters controlling how to compute integrals that are needed "// &
2454 "in MP2, RI-MP2, RI-RPA, RI-SOS-MP2 and GW (inside RI-RPA).", &
2455 n_keywords=2, n_subsections=3, repeats=.false.)
2456
2457 NULLIFY (subsection)
2458 CALL create_eri_mme_section(subsection)
2459 CALL section_add_subsection(section, subsection)
2460 CALL section_release(subsection)
2461
2462 CALL create_wfc_gpw(subsection)
2463 CALL section_add_subsection(section, subsection)
2464 CALL section_release(subsection)
2465
2466 CALL create_mp2_potential(subsection)
2467 CALL section_add_subsection(section, subsection)
2468 CALL section_release(subsection)
2469
2470 NULLIFY (keyword)
2471 CALL keyword_create(keyword, __location__, name="ERI_METHOD", &
2472 description="Method for calculating periodic electron repulsion integrals "// &
2473 "(MME method is faster but experimental, forces not yet implemented). "// &
2474 "Obara-Saika (OS) for the Coulomb operator can only be used for non-periodic calculations.", &
2475 usage="ERI_METHOD MME", &
2476 enum_c_vals=s2a("DEFAULT", "GPW", "MME", "OS"), &
2477 enum_i_vals=[eri_default, do_eri_gpw, do_eri_mme, do_eri_os], &
2478 enum_desc=s2a("Use default ERI method (for periodic systems: GPW, for molecules: OS, "// &
2479 "for MP2 and RI-MP2: GPW in any case).", &
2480 "Uses Gaussian Plane Wave method [DelBen2013].", &
2481 "Uses MiniMax-Ewald method (experimental, ERI_MME subsection, only for fully periodic "// &
2482 "systems with orthorhombic cells).", &
2483 "Use analytical Obara-Saika method."), &
2484 default_i_val=eri_default)
2485 CALL section_add_keyword(section, keyword)
2486 CALL keyword_release(keyword)
2487
2488 CALL keyword_create(keyword, __location__, name="SIZE_LATTICE_SUM", &
2489 description="Size of sum range L. ", &
2490 usage="SIZE_LATTICE_SUM 10", &
2491 default_i_val=5)
2492 CALL section_add_keyword(section, keyword)
2493 CALL keyword_release(keyword)
2494
2495 END SUBROUTINE create_integrals_section
2496
2497! **************************************************************************************************
2498!> \brief ...
2499!> \param section ...
2500! **************************************************************************************************
2501 SUBROUTINE create_ri_metric_section(section)
2502 TYPE(section_type), POINTER :: section
2503
2504 TYPE(keyword_type), POINTER :: keyword
2505
2506 cpassert(.NOT. ASSOCIATED(section))
2507 CALL section_create(section, __location__, name="RI_METRIC", &
2508 description="Sets up RI metric", &
2509 repeats=.false.)
2510
2511 NULLIFY (keyword)
2512 CALL keyword_create( &
2513 keyword, __location__, &
2514 name="POTENTIAL_TYPE", &
2515 description="Decides which operator/metric is used for resolution of the identity (RI).", &
2516 usage="POTENTIAL_TYPE DEFAULT", &
2517 enum_c_vals=s2a("DEFAULT", "COULOMB", "IDENTITY", "LONGRANGE", "SHORTRANGE", "TRUNCATED"), &
2520 enum_desc=s2a("Use Coulomb metric for RI-MP2 and normal-scaling RI-SOS-MP2, RI-RPA and GW. "// &
2521 "Use Overlap metric for low-scaling RI-SOS-MP2, RI-RPA and GW for periodic systems. "// &
2522 "Use truncated Coulomb metric for low-scaling RI-SOS-MP2, RI-RPA and GW for non-periodic systems.", &
2523 "Coulomb metric: 1/r. Recommended for RI-MP2,", &
2524 "Overlap metric: delta(r).", &
2525 "Longrange metric: erf(omega*r)/r. Not recommended with DO_SVD .TRUE.", &
2526 "Shortrange metric: erfc(omega*r)/r", &
2527 "Truncated Coulomb metric: if (r &lt; R_c) 1/r else 0. More "// &
2528 "accurate than IDENTITY for non-periodic systems. Recommended for low-scaling methods."), &
2529 default_i_val=ri_default)
2530 CALL section_add_keyword(section, keyword)
2531 CALL keyword_release(keyword)
2532
2533 NULLIFY (keyword)
2534 CALL keyword_create( &
2535 keyword, __location__, &
2536 name="OMEGA", &
2537 description="The range parameter for the short/long range operator (in 1/a0).", &
2538 usage="OMEGA 0.5", &
2539 default_r_val=0.0_dp)
2540 CALL section_add_keyword(section, keyword)
2541 CALL keyword_release(keyword)
2542
2543 CALL keyword_create(keyword, __location__, name="CUTOFF_RADIUS", &
2544 description="The cutoff radius (in Angstrom) for the truncated Coulomb operator.", &
2545 usage="CUTOFF_RADIUS 3.0", default_r_val=cp_unit_to_cp2k(value=3.0_dp, unit_str="angstrom"), &
2546 type_of_var=real_t, unit_str="angstrom")
2547 CALL section_add_keyword(section, keyword)
2548 CALL keyword_release(keyword)
2549
2550 CALL keyword_create( &
2551 keyword, __location__, &
2552 name="T_C_G_DATA", &
2553 description="Location of the file t_c_g.dat that contains the data for the "// &
2554 "evaluation of the truncated gamma function ", &
2555 default_c_val="t_c_g.dat")
2556 CALL section_add_keyword(section, keyword)
2557 CALL keyword_release(keyword)
2558
2559 CALL keyword_create(keyword, __location__, name="EPS_RANGE", &
2560 description="The threshold to determine the effective range of the short range "// &
2561 "RI metric: erfc(omega*eff_range)/eff_range = EPS_RANGE", &
2562 default_r_val=1.0e-08_dp, &
2563 repeats=.false.)
2564 CALL section_add_keyword(section, keyword)
2565 CALL keyword_release(keyword)
2566
2567 END SUBROUTINE create_ri_metric_section
2568
2569END MODULE input_cp2k_mp2
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public stein2024
integer, save, public stein2022
integer, save, public wilhelm2016b
integer, save, public delben2015
integer, save, public wilhelm2016a
integer, save, public wilhelm2018
integer, save, public rybkin2016
integer, save, public delben2013
integer, save, public delben2012
integer, save, public delben2015b
integer, save, public wilhelm2017
integer, save, public bussy2023
integer, save, public bates2013
Interface to Minimax-Ewald method for periodic ERI's to be used in CP2K.
subroutine, public create_eri_mme_section(section, default_n_minimax)
Create main input section.
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer, parameter, public debug_print_level
integer, parameter, public low_print_level
integer, parameter, public medium_print_level
integer, parameter, public high_print_level
integer, parameter, public add_last_numeric
integer, parameter, public silent_print_level
subroutine, public cp_print_key_section_create(print_key_section, location, name, description, print_level, each_iter_names, each_iter_values, add_last, filename, common_iter_levels, citations, unit_str)
creates a print_key section
unit conversion facility
Definition cp_units.F:30
real(kind=dp) function, public cp_unit_to_cp2k(value, unit_str, defaults, power)
converts to the internal cp2k units to the given unit
Definition cp_units.F:1149
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public evgw
integer, parameter, public rpa_exchange_none
integer, parameter, public wfc_mm_style_syrk
integer, parameter, public sigma_pbe_s2
integer, parameter, public soc_lda
integer, parameter, public bse_screening_tdhf
integer, parameter, public bse_iterdiag
integer, parameter, public gw_pade_approx
integer, parameter, public z_solver_pople
integer, parameter, public sigma_none
integer, parameter, public bse_iter_both_cond
integer, parameter, public sigma_pbe0_s2
integer, parameter, public do_eri_os
integer, parameter, public gw_skip_for_regtest
integer, parameter, public mp2_method_direct
integer, parameter, public rpa_exchange_sosex
integer, parameter, public kp_weights_w_auto
integer, parameter, public kp_weights_w_uniform
integer, parameter, public bse_iter_res_cond
integer, parameter, public do_eri_mme
integer, parameter, public sigma_pbe0_s1
integer, parameter, public ri_rpa_g0w0_crossing_bisection
integer, parameter, public wfc_mm_style_gemm
integer, parameter, public ot_precond_full_kinetic
integer, parameter, public gw_print_exx
integer, parameter, public do_potential_mix_cl
integer, parameter, public bse_singlet
integer, parameter, public z_solver_cg
integer, parameter, public bse_fulldiag
integer, parameter, public bse_triplet
integer, parameter, public bse_screening_w0
integer, parameter, public ot_precond_full_single
integer, parameter, public sigma_pbe_s1
integer, parameter, public bse_tda
integer, parameter, public bse_both
integer, parameter, public do_potential_truncated
integer, parameter, public bse_iter_en_cond
integer, parameter, public z_solver_sd
integer, parameter, public ot_precond_none
integer, parameter, public bse_screening_alpha
integer, parameter, public mp2_method_gpw
integer, parameter, public g0w0
integer, parameter, public ot_precond_full_single_inverse
integer, parameter, public bse_screening_rpa
integer, parameter, public do_potential_id
integer, parameter, public mp2_method_none
integer, parameter, public soc_pbe
integer, parameter, public gw_read_exx
integer, parameter, public eri_default
integer, parameter, public ri_default
integer, parameter, public evgw0
integer, parameter, public bse_abba
integer, parameter, public do_potential_coulomb
integer, parameter, public gaussian
integer, parameter, public ri_rpa_g0w0_crossing_z_shot
integer, parameter, public rpa_exchange_axk
integer, parameter, public do_potential_short
integer, parameter, public z_solver_richardson
integer, parameter, public gw_no_print_exx
integer, parameter, public kp_weights_w_tailored
integer, parameter, public ot_precond_s_inverse
integer, parameter, public do_potential_long
integer, parameter, public gw_two_pole_model
integer, parameter, public do_eri_gpw
integer, parameter, public do_potential_tshpsc
integer, parameter, public ri_rpa_g0w0_crossing_newton
integer, parameter, public numerical
integer, parameter, public ot_precond_full_all
integer, parameter, public soc_none
function that builds the hartree fock exchange section of the input
subroutine, public create_hfx_section(section)
creates the input section for the hf part
function that build the kpoints section of the input
subroutine, public create_kpoint_set_section(section, section_name)
...
input section for MP2
subroutine, public create_mp2_section(section)
creates the input section for the mp2 part
represents keywords in an input
subroutine, public keyword_release(keyword)
releases the given keyword (see doc/ReferenceCounting.html)
subroutine, public keyword_create(keyword, location, name, description, usage, type_of_var, n_var, repeats, variants, default_val, default_l_val, default_r_val, default_lc_val, default_c_val, default_i_val, default_l_vals, default_r_vals, default_c_vals, default_i_vals, lone_keyword_val, lone_keyword_l_val, lone_keyword_r_val, lone_keyword_c_val, lone_keyword_i_val, lone_keyword_l_vals, lone_keyword_r_vals, lone_keyword_c_vals, lone_keyword_i_vals, enum_c_vals, enum_i_vals, enum, enum_strict, enum_desc, unit_str, citations, deprecation_notice, removed)
creates a keyword object
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_create(section, location, name, description, n_keywords, n_subsections, repeats, citations, deprecation_notice)
creates a list of keywords
subroutine, public section_add_keyword(section, keyword)
adds a keyword to the given section
subroutine, public section_add_subsection(section, subsection)
adds a subsection to the given section
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
a wrapper for basic fortran types.
integer, parameter, public real_t
integer, parameter, public logical_t
integer, parameter, public char_t
integer, parameter, public integer_t
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Utilities for string manipulations.
character(len=1), parameter, public newline
represent a keyword in the input
represent a section of the input file