Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 :
8 : ! **************************************************************************************************
9 : !> \brief function that build the dft section of the input
10 : !> \par History
11 : !> 01.2013 moved out of input_cp2k_dft [MI]
12 : !> \author MI
13 : ! **************************************************************************************************
14 : MODULE input_cp2k_properties_dft
15 : USE bibliography, ONLY: Futera2017, &
16 : Hanasaki2025, &
17 : Hernandez2025, &
18 : Iannuzzi2005, &
19 : Kondov2007, &
20 : Luber2014, &
21 : Putrino2000, &
22 : Putrino2002, &
23 : Sebastiani2001, &
24 : Weber2009, &
25 : VazdaCruz2021
26 : USE cp_output_handling, ONLY: add_last_numeric, &
27 : cp_print_key_section_create, &
28 : debug_print_level, &
29 : high_print_level, &
30 : low_print_level, &
31 : medium_print_level, &
32 : silent_print_level
33 : USE cp_units, ONLY: cp_unit_to_cp2k
34 : USE input_constants, ONLY: &
35 : current_gauge_atom, current_gauge_r, current_gauge_r_and_step_func, &
36 : current_orb_center_atom, current_orb_center_box, current_orb_center_common, &
37 : current_orb_center_wannier, do_et_ddapc, do_full_density, do_no_et, do_spin_density, &
38 : gto_cartesian, gto_spherical, int_ldos_none, int_ldos_x, int_ldos_y, int_ldos_z, oe_gllb, &
39 : oe_lb, oe_none, oe_saop, oe_shift, ot_precond_full_all, ot_precond_full_kinetic, &
40 : ot_precond_full_single, ot_precond_full_single_inverse, ot_precond_none, &
41 : ot_precond_s_inverse, scan_x, scan_xy, scan_xyz, scan_xz, scan_y, scan_yz, scan_z, &
42 : tddfpt_dipole_berry, tddfpt_dipole_length, tddfpt_dipole_velocity, tddfpt_kernel_full, &
43 : tddfpt_kernel_none, tddfpt_kernel_stda, no_sf_tddfpt, tddfpt_sf_col, tddfpt_sf_noncol, &
44 : use_mom_ref_coac, use_mom_ref_com, use_mom_ref_user, use_mom_ref_zero
45 : USE input_cp2k_atprop, ONLY: create_atprop_section
46 : USE input_cp2k_dft, ONLY: create_interp_section, &
47 : create_mgrid_section
48 : USE input_cp2k_qs, ONLY: create_ddapc_restraint_section, &
49 : create_lrigpw_section
50 : USE input_cp2k_kpoints, ONLY: create_kpoint_set_section
51 : USE input_cp2k_loc, ONLY: create_localize_section
52 : USE input_cp2k_resp, ONLY: create_resp_section
53 : USE input_cp2k_xc, ONLY: create_xc_section
54 : USE input_keyword_types, ONLY: keyword_create, &
55 : keyword_release, &
56 : keyword_type
57 : USE input_section_types, ONLY: section_add_keyword, &
58 : section_add_subsection, &
59 : section_create, &
60 : section_release, &
61 : section_type
62 : USE input_val_types, ONLY: char_t, &
63 : integer_t, &
64 : lchar_t, &
65 : logical_t, &
66 : real_t
67 : USE input_cp2k_xas, ONLY: create_xas_tdp_section
68 : USE kinds, ONLY: dp
69 : USE string_utilities, ONLY: s2a
70 : #include "./base/base_uses.f90"
71 :
72 : IMPLICIT NONE
73 : PRIVATE
74 :
75 : LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .TRUE.
76 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_properties_dft'
77 :
78 : PUBLIC :: create_properties_section
79 :
80 : CONTAINS
81 :
82 : ! **************************************************************************************************
83 : !> \brief Create the PROPERTIES section
84 : !> \param section the section to create
85 : !> \author teo
86 : ! **************************************************************************************************
87 9520 : SUBROUTINE create_properties_section(section)
88 : TYPE(section_type), POINTER :: section
89 :
90 : TYPE(keyword_type), POINTER :: keyword
91 : TYPE(section_type), POINTER :: subsection
92 :
93 9520 : CPASSERT(.NOT. ASSOCIATED(section))
94 : CALL section_create(section, __LOCATION__, name="PROPERTIES", &
95 : description="This section is used to set up the PROPERTIES calculation.", &
96 9520 : n_keywords=0, n_subsections=6, repeats=.FALSE.)
97 :
98 9520 : NULLIFY (subsection, keyword)
99 :
100 9520 : CALL create_linres_section(subsection, create_subsections=.TRUE.)
101 9520 : CALL section_add_subsection(section, subsection)
102 9520 : CALL section_release(subsection)
103 :
104 9520 : CALL create_et_coupling_section(subsection)
105 9520 : CALL section_add_subsection(section, subsection)
106 9520 : CALL section_release(subsection)
107 :
108 9520 : CALL create_resp_section(subsection)
109 9520 : CALL section_add_subsection(section, subsection)
110 9520 : CALL section_release(subsection)
111 :
112 9520 : CALL create_atprop_section(subsection)
113 9520 : CALL section_add_subsection(section, subsection)
114 9520 : CALL section_release(subsection)
115 :
116 : CALL cp_print_key_section_create(subsection, __LOCATION__, name="FIT_CHARGE", &
117 : description="This section is used to print the density derived atomic point charges. "// &
118 : "The fit of the charges is controlled through the DENSITY_FITTING section", &
119 9520 : print_level=high_print_level, filename="__STD_OUT__")
120 : CALL keyword_create(keyword, __LOCATION__, name="TYPE_OF_DENSITY", &
121 : description="Specifies the type of density used for the fitting", &
122 : usage="TYPE_OF_DENSITY (FULL|SPIN)", &
123 : enum_c_vals=s2a("FULL", "SPIN"), &
124 : enum_i_vals=[do_full_density, do_spin_density], &
125 : enum_desc=s2a("Full density", "Spin density"), &
126 9520 : default_i_val=do_full_density)
127 9520 : CALL section_add_keyword(subsection, keyword)
128 9520 : CALL keyword_release(keyword)
129 9520 : CALL section_add_subsection(section, subsection)
130 9520 : CALL section_release(subsection)
131 :
132 9520 : CALL create_tddfpt2_section(subsection)
133 9520 : CALL section_add_subsection(section, subsection)
134 9520 : CALL section_release(subsection)
135 :
136 9520 : CALL create_rixs_section(subsection)
137 9520 : CALL section_add_subsection(section, subsection)
138 9520 : CALL section_release(subsection)
139 :
140 9520 : CALL create_bandstructure_section(subsection)
141 9520 : CALL section_add_subsection(section, subsection)
142 9520 : CALL section_release(subsection)
143 :
144 9520 : CALL create_tipscan_section(subsection)
145 9520 : CALL section_add_subsection(section, subsection)
146 9520 : CALL section_release(subsection)
147 :
148 9520 : END SUBROUTINE create_properties_section
149 :
150 : ! **************************************************************************************************
151 : !> \brief creates the input structure used to activate
152 : !> a resonant inelastic xray scattering (RIXS) calculation
153 : ! **************************************************************************************************
154 :
155 9520 : SUBROUTINE create_rixs_section(section)
156 : TYPE(section_type), POINTER :: section
157 : TYPE(section_type), POINTER :: subsection, print_key
158 : TYPE(keyword_type), POINTER :: keyword
159 :
160 9520 : CPASSERT(.NOT. ASSOCIATED(section))
161 :
162 9520 : NULLIFY (keyword, subsection, print_key)
163 :
164 : CALL section_create(section, __LOCATION__, name="RIXS", &
165 : description="Resonant Inelastic Xray Scattering using XAS_TDP and TDDFPT.", &
166 : n_keywords=1, n_subsections=3, repeats=.FALSE., &
167 19040 : citations=[VazdaCruz2021])
168 :
169 : CALL keyword_create(keyword, __LOCATION__, &
170 : name="_SECTION_PARAMETERS_", &
171 : description="Controls the activation of the RIXS procedure", &
172 : default_l_val=.FALSE., &
173 9520 : lone_keyword_l_val=.TRUE.)
174 9520 : CALL section_add_keyword(section, keyword)
175 9520 : CALL keyword_release(keyword)
176 :
177 : CALL keyword_create(keyword, __LOCATION__, name="CORE_STATES", &
178 : description="Number of core excited states to be used in the RIXS "// &
179 : "calculation. Restricting this number reduces computational cost. "// &
180 : "-1 means all available core states will be used.", &
181 9520 : n_var=1, type_of_var=integer_t, default_i_val=-1)
182 9520 : CALL section_add_keyword(section, keyword)
183 9520 : CALL keyword_release(keyword)
184 :
185 : CALL keyword_create(keyword, __LOCATION__, name="VALENCE_STATES", &
186 : description="Number of valence excited states to be used in the RIXS "// &
187 : "calculation. Restricting this number reduces computational cost, but "// &
188 : "removes spectral features corresponding to higher excitations. Should be "// &
189 : "used with care. -1 means all available valence states will be used.", &
190 9520 : n_var=1, type_of_var=integer_t, default_i_val=-1)
191 9520 : CALL section_add_keyword(section, keyword)
192 9520 : CALL keyword_release(keyword)
193 :
194 9520 : CALL create_tddfpt2_section(subsection)
195 9520 : CALL section_add_subsection(section, subsection)
196 9520 : CALL section_release(subsection)
197 :
198 9520 : CALL create_xas_tdp_section(subsection)
199 9520 : CALL section_add_subsection(section, subsection)
200 9520 : CALL section_release(subsection)
201 :
202 : CALL section_create(subsection, __LOCATION__, "PRINT", "Controls the printing of information "// &
203 9520 : "during RIXS calculations", repeats=.FALSE.)
204 :
205 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="SPECTRUM", &
206 : description="Controles the printing of the RIXS spectrum "// &
207 : "in output files", &
208 : print_level=low_print_level, filename="", &
209 9520 : common_iter_levels=3)
210 9520 : CALL section_add_subsection(subsection, print_key)
211 9520 : CALL section_release(print_key)
212 :
213 9520 : CALL section_add_subsection(section, subsection)
214 9520 : CALL section_release(subsection)
215 :
216 9520 : END SUBROUTINE create_rixs_section
217 :
218 : ! **************************************************************************************************
219 : !> \brief creates the input structure used to activate
220 : !> a linear response calculation
221 : !> Available properties : none
222 : !> \param section the section to create
223 : !> \param create_subsections indicates whether or not subsections should be created
224 : !> \param default_set_tdlr default parameters to be used if called from TDDFPT
225 : !> \author MI
226 : ! **************************************************************************************************
227 28560 : SUBROUTINE create_linres_section(section, create_subsections, default_set_tdlr)
228 : TYPE(section_type), POINTER :: section
229 : LOGICAL, INTENT(in) :: create_subsections
230 : LOGICAL, INTENT(IN), OPTIONAL :: default_set_tdlr
231 :
232 : INTEGER :: def_max_iter, def_precond
233 : REAL(KIND=DP) :: def_egap, def_eps, def_eps_filter
234 : TYPE(keyword_type), POINTER :: keyword
235 : TYPE(section_type), POINTER :: print_key, subsection
236 :
237 : CHARACTER(len=256) :: desc
238 :
239 28560 : NULLIFY (keyword, print_key)
240 :
241 28560 : IF (PRESENT(default_set_tdlr)) THEN
242 19040 : def_egap = 0.02_dp
243 19040 : def_eps = 1.0e-10_dp
244 19040 : def_eps_filter = 1.0e-15_dp
245 19040 : def_max_iter = 100
246 19040 : def_precond = ot_precond_full_single_inverse
247 19040 : desc = "Controls the parameters of the LINRES force calculations for excited states."
248 : ELSE
249 9520 : def_egap = 0.2_dp
250 9520 : def_eps = 1.e-6_dp
251 9520 : def_eps_filter = 0.0_dp
252 9520 : def_max_iter = 50
253 9520 : def_precond = ot_precond_none
254 9520 : desc = "The linear response is used to calculate one of the following properties: nmr, epr, raman, ..."
255 : END IF
256 :
257 28560 : CPASSERT(.NOT. ASSOCIATED(section))
258 : CALL section_create(section, __LOCATION__, name="linres", &
259 : description=desc, n_keywords=5, n_subsections=2, repeats=.FALSE., &
260 57120 : citations=[Putrino2000])
261 :
262 : CALL keyword_create(keyword, __LOCATION__, name="EPS", &
263 : description="target accuracy for the convergence of the conjugate gradient.", &
264 28560 : usage="EPS 1.e-6", default_r_val=def_eps)
265 28560 : CALL section_add_keyword(section, keyword)
266 28560 : CALL keyword_release(keyword)
267 :
268 : CALL keyword_create(keyword, __LOCATION__, name="EPS_FILTER", &
269 : description="Filter threshold for response density matrix.", &
270 28560 : usage="EPS_FILTER 1.e-8", default_r_val=def_eps_filter)
271 28560 : CALL section_add_keyword(section, keyword)
272 28560 : CALL keyword_release(keyword)
273 :
274 : CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
275 : description="Maximum number of conjugate gradient iteration to be performed for one optimization.", &
276 28560 : usage="MAX_ITER 200", default_i_val=def_max_iter)
277 28560 : CALL section_add_keyword(section, keyword)
278 28560 : CALL keyword_release(keyword)
279 :
280 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_EVERY", &
281 : description="Restart the conjugate gradient after the specified number of iterations.", &
282 28560 : usage="RESTART_EVERY 200", default_i_val=50)
283 28560 : CALL section_add_keyword(section, keyword)
284 28560 : CALL keyword_release(keyword)
285 :
286 : CALL keyword_create( &
287 : keyword, __LOCATION__, name="PRECONDITIONER", &
288 : description="Type of preconditioner to be used with all minimization schemes. "// &
289 : "They differ in effectiveness, cost of construction, cost of application. "// &
290 : "Properly preconditioned minimization can be orders of magnitude faster than doing nothing.", &
291 : usage="PRECONDITIONER FULL_ALL", &
292 : default_i_val=def_precond, &
293 : enum_c_vals=s2a("FULL_ALL", "FULL_SINGLE_INVERSE", "FULL_SINGLE", "FULL_KINETIC", "FULL_S_INVERSE", &
294 : "NONE"), &
295 : enum_desc=s2a("Most effective state selective preconditioner based on diagonalization, "// &
296 : "requires the ENERGY_GAP parameter to be an underestimate of the HOMO-LUMO gap. "// &
297 : "This preconditioner is recommended for almost all systems, except very large systems where "// &
298 : "make_preconditioner would dominate the total computational cost.", &
299 : "Based on H-eS cholesky inversion, similar to FULL_SINGLE in preconditioning efficiency "// &
300 : "but cheaper to construct, "// &
301 : "might be somewhat less robust. Recommended for large systems.", &
302 : "Based on H-eS diagonalisation, not as good as FULL_ALL, but somewhat cheaper to apply. ", &
303 : "Cholesky inversion of S and T, fast construction, robust, and relatively good, "// &
304 : "use for very large systems.", &
305 : "Cholesky inversion of S, not as good as FULL_KINETIC, yet equally expensive.", &
306 : "skip preconditioning"), &
307 : enum_i_vals=[ot_precond_full_all, ot_precond_full_single_inverse, ot_precond_full_single, &
308 28560 : ot_precond_full_kinetic, ot_precond_s_inverse, ot_precond_none])
309 28560 : CALL section_add_keyword(section, keyword)
310 28560 : CALL keyword_release(keyword)
311 :
312 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_GAP", &
313 : description="Energy gap estimate [a.u.] for preconditioning", &
314 : usage="ENERGY_GAP 0.1", &
315 28560 : default_r_val=def_egap)
316 28560 : CALL section_add_keyword(section, keyword)
317 28560 : CALL keyword_release(keyword)
318 :
319 : CALL keyword_create(keyword, __LOCATION__, name="EVERY_N_STEP", &
320 : description="Perform a linear response calculation every N-th step for MD run", &
321 28560 : usage="EVERY_N_STEP 50", default_i_val=1)
322 28560 : CALL section_add_keyword(section, keyword)
323 28560 : CALL keyword_release(keyword)
324 :
325 : CALL keyword_create(keyword, __LOCATION__, name="RESTART", &
326 : description="Restart the response calculation if the restart file exists", &
327 : usage="RESTART", &
328 28560 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
329 28560 : CALL section_add_keyword(section, keyword)
330 28560 : CALL keyword_release(keyword)
331 :
332 : CALL keyword_create(keyword, __LOCATION__, name="WFN_RESTART_FILE_NAME", &
333 : variants=["RESTART_FILE_NAME"], &
334 : description="Root of the file names where to read the response functions from "// &
335 : "which to restart the calculation of the linear response", &
336 : usage="WFN_RESTART_FILE_NAME <FILENAME>", &
337 57120 : type_of_var=lchar_t)
338 28560 : CALL section_add_keyword(section, keyword)
339 28560 : CALL keyword_release(keyword)
340 :
341 28560 : IF (create_subsections) THEN
342 9520 : NULLIFY (subsection)
343 :
344 9520 : CALL create_localize_section(subsection)
345 9520 : CALL section_add_subsection(section, subsection)
346 9520 : CALL section_release(subsection)
347 :
348 9520 : CALL create_current_section(subsection)
349 9520 : CALL section_add_subsection(section, subsection)
350 9520 : CALL section_release(subsection)
351 :
352 9520 : CALL create_nmr_section(subsection)
353 9520 : CALL section_add_subsection(section, subsection)
354 9520 : CALL section_release(subsection)
355 :
356 9520 : CALL create_spin_spin_section(subsection)
357 9520 : CALL section_add_subsection(section, subsection)
358 9520 : CALL section_release(subsection)
359 :
360 9520 : CALL create_epr_section(subsection)
361 9520 : CALL section_add_subsection(section, subsection)
362 9520 : CALL section_release(subsection)
363 :
364 9520 : CALL create_polarizability_section(subsection)
365 9520 : CALL section_add_subsection(section, subsection)
366 9520 : CALL section_release(subsection)
367 :
368 9520 : CALL create_dcdr_section(subsection)
369 9520 : CALL section_add_subsection(section, subsection)
370 9520 : CALL section_release(subsection)
371 :
372 9520 : CALL create_vcd_section(subsection)
373 9520 : CALL section_add_subsection(section, subsection)
374 9520 : CALL section_release(subsection)
375 :
376 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
377 : description="printing of information during the linear response calculation", &
378 9520 : repeats=.FALSE.)
379 :
380 : CALL cp_print_key_section_create( &
381 : print_key, __LOCATION__, "program_run_info", &
382 : description="Controls the printing of basic iteration information during the LINRES calculation", &
383 9520 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
384 9520 : CALL section_add_subsection(subsection, print_key)
385 9520 : CALL section_release(print_key)
386 :
387 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RESTART", &
388 : description="Controls the dumping of restart file of the response wavefunction. "// &
389 : "For each set of response functions, i.e. for each perturbation, "// &
390 : "one different restart file is dumped. These restart files should be "// &
391 : "employed only to restart the same type of LINRES calculation, "// &
392 : "i.e. with the same perturbation.", &
393 : print_level=low_print_level, common_iter_levels=3, each_iter_names=s2a("ITER"), &
394 9520 : add_last=add_last_numeric, each_iter_values=[3], filename="")
395 9520 : CALL section_add_subsection(subsection, print_key)
396 9520 : CALL section_release(print_key)
397 :
398 9520 : CALL section_add_subsection(section, subsection)
399 9520 : CALL section_release(subsection)
400 :
401 : END IF
402 :
403 28560 : END SUBROUTINE create_linres_section
404 :
405 : ! **************************************************************************************************
406 : !> \brief creates the input structure used to activate
407 : !> calculation of position perturbation DFPT
408 : !> \param section ...
409 : !> \author Sandra Luber, Edward Ditler
410 : ! **************************************************************************************************
411 9520 : SUBROUTINE create_dcdr_section(section)
412 :
413 : TYPE(section_type), POINTER :: section
414 :
415 : LOGICAL :: failure
416 : TYPE(keyword_type), POINTER :: keyword
417 : TYPE(section_type), POINTER :: print_key, subsection
418 :
419 9520 : failure = .FALSE.
420 9520 : NULLIFY (keyword, print_key, subsection)
421 :
422 9520 : CPASSERT(.NOT. ASSOCIATED(section))
423 :
424 : IF (.NOT. failure) THEN
425 : CALL section_create(section, __LOCATION__, name="DCDR", &
426 : description="Compute analytical gradients the dipole moments.", &
427 9520 : n_keywords=50, n_subsections=1, repeats=.FALSE.)
428 :
429 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
430 : description="controls the activation of the APT calculation", &
431 : usage="&DCDR T", &
432 : default_l_val=.FALSE., &
433 9520 : lone_keyword_l_val=.TRUE.)
434 9520 : CALL section_add_keyword(section, keyword)
435 9520 : CALL keyword_release(keyword)
436 :
437 : CALL keyword_create(keyword, __LOCATION__, name="LIST_OF_ATOMS", &
438 : description="Specifies a list of atoms.", &
439 : usage="LIST_OF_ATOMS {integer} {integer} .. {integer}", repeats=.TRUE., &
440 9520 : n_var=-1, type_of_var=integer_t)
441 9520 : CALL section_add_keyword(section, keyword)
442 9520 : CALL keyword_release(keyword)
443 :
444 : CALL keyword_create(keyword, __LOCATION__, name="DISTRIBUTED_ORIGIN", &
445 : variants=["DO_GAUGE"], &
446 : description="Use the distributed origin (DO) gauge?", &
447 : usage="DISTRIBUTED_ORIGIN T", &
448 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
449 9520 : CALL section_add_keyword(section, keyword)
450 9520 : CALL keyword_release(keyword)
451 :
452 : CALL keyword_create(keyword, __LOCATION__, name="ORBITAL_CENTER", &
453 : description="The orbital center.", &
454 : usage="ORBITAL_CENTER WANNIER", &
455 : default_i_val=current_orb_center_wannier, &
456 : enum_c_vals=s2a("WANNIER", "COMMON", "ATOM", "BOX"), &
457 : enum_desc=s2a("Use the Wannier centers.", &
458 : "Use a common center (works only for an isolate molecule).", &
459 : "Use the atoms as center.", &
460 : "Boxing."), &
461 : enum_i_vals=[current_orb_center_wannier, current_orb_center_common, &
462 9520 : current_orb_center_atom, current_orb_center_box])
463 9520 : CALL section_add_keyword(section, keyword)
464 9520 : CALL keyword_release(keyword)
465 :
466 : CALL keyword_create(keyword, __LOCATION__, name="REFERENCE", &
467 : description="Gauge origin of the velocity gauge factor.", &
468 : enum_c_vals=s2a("COM", "COAC", "USER_DEFINED", "ZERO"), &
469 : enum_desc=s2a("Use Center of Mass", &
470 : "Use Center of Atomic Charges", &
471 : "Use User-defined Point", &
472 : "Use Origin of Coordinate System"), &
473 : enum_i_vals=[use_mom_ref_com, &
474 : use_mom_ref_coac, &
475 : use_mom_ref_user, &
476 : use_mom_ref_zero], &
477 9520 : default_i_val=use_mom_ref_zero)
478 9520 : CALL section_add_keyword(section, keyword)
479 9520 : CALL keyword_release(keyword)
480 :
481 : CALL keyword_create(keyword, __LOCATION__, name="REFERENCE_POINT", &
482 : description="User-defined reference point of the velocity gauge factor.", &
483 : usage="REFERENCE_POINT x y z", &
484 9520 : repeats=.FALSE., n_var=3, type_of_var=real_t, unit_str='bohr')
485 9520 : CALL section_add_keyword(section, keyword)
486 9520 : CALL keyword_release(keyword)
487 :
488 : CALL keyword_create(keyword, __LOCATION__, name="Z_MATRIX_METHOD", &
489 : description="Use Z_matrix method to solve the response equation", &
490 : usage="Z_MATRIX_METHOD T", &
491 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
492 9520 : CALL section_add_keyword(section, keyword)
493 9520 : CALL keyword_release(keyword)
494 :
495 : CALL keyword_create(keyword, __LOCATION__, name="APT_FD", &
496 : description="Use numerical differentiation to compute the APT, "// &
497 : "switches off the calculation of dcdr analytical derivatives. "// &
498 : "Requires RUN_TYPE = ENERGY_FORCE or MD.", &
499 : usage="APT_FD T", &
500 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
501 9520 : CALL section_add_keyword(section, keyword)
502 9520 : CALL keyword_release(keyword)
503 :
504 : CALL keyword_create(keyword, __LOCATION__, name="APT_FD_DE", &
505 : description="Electric field strength (atomic units) to use for finite differences", &
506 : repeats=.FALSE., &
507 : n_var=1, &
508 : type_of_var=real_t, &
509 : default_r_val=0.0003_dp, &
510 9520 : usage="APT_FD_DE 1.0E-4")
511 9520 : CALL section_add_keyword(section, keyword)
512 9520 : CALL keyword_release(keyword)
513 :
514 : CALL keyword_create(keyword, __LOCATION__, name="APT_FD_METHOD", &
515 : description="Numerical differentiation method", &
516 : usage="APT_FD_METHOD FD", &
517 : default_i_val=1, &
518 : !enum_c_vals=s2a("FD", "2PNT"), &
519 : enum_c_vals=s2a("2PNT"), &
520 : !enum_desc=s2a("Forward differences.", &
521 : ! "Symmetric two-point differences."), &
522 : enum_desc=s2a("Symmetric two-point differences."), &
523 : !enum_i_vals=(/0, 1/))
524 9520 : enum_i_vals=[1])
525 9520 : CALL section_add_keyword(section, keyword)
526 9520 : CALL keyword_release(keyword)
527 :
528 9520 : NULLIFY (subsection)
529 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
530 : description="print results of the magnetic dipole moment calculation", &
531 9520 : repeats=.FALSE.)
532 :
533 : CALL cp_print_key_section_create(print_key, __LOCATION__, "APT", &
534 : description="Controls the printing of the electric dipole gradient", &
535 9520 : print_level=low_print_level, add_last=add_last_numeric, filename="")
536 9520 : CALL section_add_subsection(subsection, print_key)
537 9520 : CALL section_release(print_key)
538 :
539 9520 : CALL section_add_subsection(section, subsection)
540 9520 : CALL section_release(subsection)
541 :
542 9520 : NULLIFY (subsection)
543 9520 : CALL create_interp_section(subsection)
544 9520 : CALL section_add_subsection(section, subsection)
545 9520 : CALL section_release(subsection)
546 :
547 : END IF
548 :
549 9520 : END SUBROUTINE create_dcdr_section
550 :
551 : ! **************************************************************************************************
552 : !> \brief creates the input structure used to activate
553 : !> calculation of VCD spectra using DFPT
554 : !> \param section ...
555 : !> \author Sandra Luber, Tomas Zimmermann, Edward Ditler
556 : ! **************************************************************************************************
557 9520 : SUBROUTINE create_vcd_section(section)
558 :
559 : TYPE(section_type), POINTER :: section
560 :
561 : TYPE(keyword_type), POINTER :: keyword
562 : TYPE(section_type), POINTER :: print_key, subsection
563 :
564 9520 : NULLIFY (keyword, print_key, subsection)
565 :
566 9520 : CPASSERT(.NOT. ASSOCIATED(section))
567 :
568 : CALL section_create(section, __LOCATION__, name="VCD", &
569 : description="Carry out a VCD calculation.", &
570 9520 : n_keywords=50, n_subsections=1, repeats=.FALSE.)
571 :
572 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
573 : description="controls the activation of the APT/AAT calculation", &
574 : usage="&VCD T", &
575 : default_l_val=.FALSE., &
576 9520 : lone_keyword_l_val=.TRUE.)
577 9520 : CALL section_add_keyword(section, keyword)
578 9520 : CALL keyword_release(keyword)
579 :
580 : CALL keyword_create(keyword, __LOCATION__, name="LIST_OF_ATOMS", &
581 : description="Specifies a list of atoms.", &
582 : usage="LIST_OF_ATOMS {integer} {integer} .. {integer}", repeats=.TRUE., &
583 9520 : n_var=-1, type_of_var=integer_t)
584 9520 : CALL section_add_keyword(section, keyword)
585 9520 : CALL keyword_release(keyword)
586 :
587 : CALL keyword_create(keyword, __LOCATION__, name="DISTRIBUTED_ORIGIN", &
588 : variants=["DO_GAUGE"], &
589 : description="Use the distributed origin (DO) gauge?", &
590 : usage="DISTRIBUTED_ORIGIN T", &
591 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
592 9520 : CALL section_add_keyword(section, keyword)
593 9520 : CALL keyword_release(keyword)
594 :
595 : CALL keyword_create(keyword, __LOCATION__, name="ORIGIN_DEPENDENT_MFP", &
596 : description="Use the origin dependent MFP operator.", &
597 : usage="ORIGIN_DEPENDENT_MFP T", &
598 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
599 9520 : CALL section_add_keyword(section, keyword)
600 9520 : CALL keyword_release(keyword)
601 :
602 : CALL keyword_create(keyword, __LOCATION__, name="ORBITAL_CENTER", &
603 : description="The orbital center.", &
604 : usage="ORBITAL_CENTER WANNIER", &
605 : default_i_val=current_orb_center_wannier, &
606 : enum_c_vals=s2a("WANNIER", "COMMON", "ATOM", "BOX"), &
607 : enum_desc=s2a("Use the Wannier centers.", &
608 : "Use a common center (works only for an isolate molecule).", &
609 : "Use the atoms as center.", &
610 : "Boxing."), &
611 : enum_i_vals=[current_orb_center_wannier, current_orb_center_common, &
612 9520 : current_orb_center_atom, current_orb_center_box])
613 9520 : CALL section_add_keyword(section, keyword)
614 9520 : CALL keyword_release(keyword)
615 :
616 : ! The origin of the magnetic dipole operator (r - MAGNETIC_ORIGIN) x momentum
617 : CALL keyword_create(keyword, __LOCATION__, name="MAGNETIC_ORIGIN", &
618 : description="Gauge origin of the magnetic dipole operator.", &
619 : enum_c_vals=s2a("COM", "COAC", "USER_DEFINED", "ZERO"), &
620 : enum_desc=s2a("Use Center of Mass", &
621 : "Use Center of Atomic Charges", &
622 : "Use User-defined Point", &
623 : "Use Origin of Coordinate System"), &
624 : enum_i_vals=[use_mom_ref_com, &
625 : use_mom_ref_coac, &
626 : use_mom_ref_user, &
627 : use_mom_ref_zero], &
628 9520 : default_i_val=use_mom_ref_zero)
629 9520 : CALL section_add_keyword(section, keyword)
630 9520 : CALL keyword_release(keyword)
631 :
632 : CALL keyword_create(keyword, __LOCATION__, name="MAGNETIC_ORIGIN_REFERENCE", &
633 : description="User-defined reference point of the magnetic dipole operator.", &
634 : usage="MAGNETIC_ORIGIN_REFERENCE x y z", &
635 9520 : repeats=.FALSE., n_var=3, type_of_var=real_t, unit_str='bohr')
636 9520 : CALL section_add_keyword(section, keyword)
637 9520 : CALL keyword_release(keyword)
638 :
639 : ! The origin of the coordinate system
640 : CALL keyword_create(keyword, __LOCATION__, name="SPATIAL_ORIGIN", &
641 : description="Gauge origin of the velocity gauge factor/spatial origin.", &
642 : enum_c_vals=s2a("COM", "COAC", "USER_DEFINED", "ZERO"), &
643 : enum_desc=s2a("Use Center of Mass", &
644 : "Use Center of Atomic Charges", &
645 : "Use User-defined Point", &
646 : "Use Origin of Coordinate System"), &
647 : enum_i_vals=[use_mom_ref_com, &
648 : use_mom_ref_coac, &
649 : use_mom_ref_user, &
650 : use_mom_ref_zero], &
651 9520 : default_i_val=use_mom_ref_zero)
652 9520 : CALL section_add_keyword(section, keyword)
653 9520 : CALL keyword_release(keyword)
654 :
655 : CALL keyword_create(keyword, __LOCATION__, name="SPATIAL_ORIGIN_REFERENCE", &
656 : description="User-defined reference point of the velocity gauge factor/spatial origin.", &
657 : usage="SPATIAL_ORIGIN_REFERENCE x y z", &
658 9520 : repeats=.FALSE., n_var=3, type_of_var=real_t, unit_str='bohr')
659 9520 : CALL section_add_keyword(section, keyword)
660 9520 : CALL keyword_release(keyword)
661 :
662 9520 : NULLIFY (subsection)
663 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
664 : description="print results of the magnetic dipole moment calculation", &
665 9520 : repeats=.FALSE.)
666 :
667 : CALL cp_print_key_section_create(print_key, __LOCATION__, "VCD", &
668 : description="Controls the printing of the APTs and AATs", &
669 9520 : print_level=low_print_level, add_last=add_last_numeric, filename="")
670 9520 : CALL section_add_subsection(subsection, print_key)
671 9520 : CALL section_release(print_key)
672 :
673 9520 : CALL section_add_subsection(section, subsection)
674 9520 : CALL section_release(subsection)
675 :
676 9520 : NULLIFY (subsection)
677 9520 : CALL create_interp_section(subsection)
678 9520 : CALL section_add_subsection(section, subsection)
679 9520 : CALL section_release(subsection)
680 :
681 9520 : END SUBROUTINE create_vcd_section
682 :
683 : ! **************************************************************************************************
684 : !> \brief creates the input structure used to activate
685 : !> calculation of induced current DFPT
686 : !> Available properties : none
687 : !> \param section the section to create
688 : !> \author MI/VW
689 : ! **************************************************************************************************
690 9520 : SUBROUTINE create_current_section(section)
691 : TYPE(section_type), POINTER :: section
692 :
693 : TYPE(keyword_type), POINTER :: keyword
694 : TYPE(section_type), POINTER :: print_key, subsection
695 :
696 9520 : NULLIFY (keyword, print_key, subsection)
697 :
698 9520 : CPASSERT(.NOT. ASSOCIATED(section))
699 : CALL section_create(section, __LOCATION__, name="current", &
700 : description="The induced current density is calculated by DFPT.", &
701 : n_keywords=4, n_subsections=1, repeats=.FALSE., &
702 28560 : citations=[Sebastiani2001, Weber2009])
703 :
704 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
705 : description="controls the activation of the induced current calculation", &
706 : usage="&CURRENT T", &
707 : default_l_val=.FALSE., &
708 9520 : lone_keyword_l_val=.TRUE.)
709 9520 : CALL section_add_keyword(section, keyword)
710 9520 : CALL keyword_release(keyword)
711 :
712 : CALL keyword_create(keyword, __LOCATION__, name="GAUGE", &
713 : description="The gauge used to compute the induced current within GAPW.", &
714 : usage="GAUGE R", &
715 : default_i_val=current_gauge_r_and_step_func, &
716 : enum_c_vals=s2a("R", "R_AND_STEP_FUNCTION", "ATOM"), &
717 : enum_desc=s2a("Position gauge (doesnt work well).", &
718 : "Position and step function for the soft and the local parts, respectively.", &
719 : "Atoms."), &
720 9520 : enum_i_vals=[current_gauge_r, current_gauge_r_and_step_func, current_gauge_atom])
721 9520 : CALL section_add_keyword(section, keyword)
722 9520 : CALL keyword_release(keyword)
723 :
724 : CALL keyword_create(keyword, __LOCATION__, name="GAUGE_ATOM_RADIUS", &
725 : description="Build the gauge=atom using only the atoms within this radius.", &
726 : usage="GAUGE_ATOM_RADIUS 10.0", &
727 : type_of_var=real_t, &
728 : default_r_val=cp_unit_to_cp2k(value=4.0_dp, unit_str="angstrom"), &
729 9520 : unit_str="angstrom")
730 9520 : CALL section_add_keyword(section, keyword)
731 9520 : CALL keyword_release(keyword)
732 :
733 : CALL keyword_create(keyword, __LOCATION__, name="USE_OLD_GAUGE_ATOM", &
734 : description="Use the old way to compute the gauge.", &
735 : usage="USE_OLD_GAUGE_ATOM T", &
736 9520 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
737 9520 : CALL section_add_keyword(section, keyword)
738 9520 : CALL keyword_release(keyword)
739 :
740 : CALL keyword_create(keyword, __LOCATION__, name="ORBITAL_CENTER", &
741 : description="The orbital center.", &
742 : usage="ORBITAL_CENTER WANNIER", &
743 : default_i_val=current_orb_center_wannier, &
744 : enum_c_vals=s2a("WANNIER", "COMMON", "ATOM", "BOX"), &
745 : enum_desc=s2a("Use the Wannier centers.", &
746 : "Use a common center (works only for an isolate molecule).", &
747 : "Use the atoms as center.", &
748 : "Boxing."), &
749 : enum_i_vals=[current_orb_center_wannier, current_orb_center_common, &
750 9520 : current_orb_center_atom, current_orb_center_box])
751 9520 : CALL section_add_keyword(section, keyword)
752 9520 : CALL keyword_release(keyword)
753 :
754 : CALL keyword_create(keyword, __LOCATION__, name="COMMON_CENTER", &
755 : description="The common center ", usage="COMMON_CENTER 0.0 1.0 0.0", &
756 : n_var=3, default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp], type_of_var=real_t, &
757 9520 : unit_str="angstrom")
758 9520 : CALL section_add_keyword(section, keyword)
759 9520 : CALL keyword_release(keyword)
760 :
761 : CALL keyword_create(keyword, __LOCATION__, name="NBOX", &
762 : description="How many boxes along each directions ", usage="NBOX 6 6 5", &
763 9520 : n_var=3, default_i_vals=[4, 4, 4], type_of_var=integer_t)
764 9520 : CALL section_add_keyword(section, keyword)
765 9520 : CALL keyword_release(keyword)
766 :
767 : CALL keyword_create(keyword, __LOCATION__, name="CHI_PBC", &
768 : description="Calculate the succeptibility correction to the shift with PBC", &
769 : usage="CHI_PBC T", &
770 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
771 9520 : CALL section_add_keyword(section, keyword)
772 9520 : CALL keyword_release(keyword)
773 :
774 : CALL keyword_create(keyword, __LOCATION__, name="FORCE_NO_FULL", &
775 : description="Avoid the calculation of the state dependent perturbation term, "// &
776 : "even if the orbital centers are set at Wannier centers or at Atom centers", &
777 : usage="FORCE_NO_FULL T", &
778 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
779 9520 : CALL section_add_keyword(section, keyword)
780 9520 : CALL keyword_release(keyword)
781 :
782 : CALL keyword_create(keyword, __LOCATION__, name="SELECTED_STATES_ON_ATOM_LIST", &
783 : description="Indexes of the atoms for selecting"// &
784 : " the states to be used for the response calculations.", &
785 : usage="SELECTED_STATES_ON_ATOM_LIST 1 2 10", &
786 9520 : n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
787 9520 : CALL section_add_keyword(section, keyword)
788 9520 : CALL keyword_release(keyword)
789 :
790 : CALL keyword_create(keyword, __LOCATION__, name="SELECTED_STATES_ATOM_RADIUS", &
791 : description="Select all the states included in the given radius around each atoms "// &
792 : "in SELECTED_STATES_ON_ATOM_LIST.", &
793 : usage="SELECTED_STATES_ATOM_RADIUS 2.0", &
794 : type_of_var=real_t, &
795 : default_r_val=cp_unit_to_cp2k(value=4.0_dp, unit_str="angstrom"), &
796 9520 : unit_str="angstrom")
797 9520 : CALL section_add_keyword(section, keyword)
798 9520 : CALL keyword_release(keyword)
799 :
800 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_CURRENT", &
801 : description="Restart the induced current density calculation"// &
802 : " from a previous run (not working yet).", &
803 : usage="RESTART_CURRENT", default_l_val=.FALSE., &
804 9520 : lone_keyword_l_val=.TRUE.)
805 9520 : CALL section_add_keyword(section, keyword)
806 9520 : CALL keyword_release(keyword)
807 :
808 9520 : NULLIFY (subsection)
809 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
810 : description="print results of induced current density calculation", &
811 9520 : repeats=.FALSE.)
812 :
813 : CALL cp_print_key_section_create(print_key, __LOCATION__, "CURRENT_CUBES", &
814 : description="Controls the printing of the induced current density (not working yet).", &
815 9520 : print_level=high_print_level, add_last=add_last_numeric, filename="")
816 : CALL keyword_create(keyword, __LOCATION__, name="stride", &
817 : description="The stride (X,Y,Z) used to write the cube file "// &
818 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
819 : " 1 number valid for all components (not working yet).", &
820 9520 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
821 9520 : CALL section_add_keyword(print_key, keyword)
822 9520 : CALL keyword_release(keyword)
823 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
824 : description="append the cube files when they already exist", &
825 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
826 9520 : CALL section_add_keyword(print_key, keyword)
827 9520 : CALL keyword_release(keyword)
828 :
829 9520 : CALL section_add_subsection(subsection, print_key)
830 9520 : CALL section_release(print_key)
831 :
832 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RESPONSE_FUNCTION_CUBES", &
833 : description="Controls the printing of the response functions (not working yet).", &
834 9520 : print_level=high_print_level, add_last=add_last_numeric, filename="")
835 : CALL keyword_create(keyword, __LOCATION__, name="stride", &
836 : description="The stride (X,Y,Z) used to write the cube file "// &
837 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
838 : " 1 number valid for all components (not working yet).", &
839 9520 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
840 9520 : CALL section_add_keyword(print_key, keyword)
841 9520 : CALL keyword_release(keyword)
842 :
843 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LU_BOUNDS", &
844 : variants=["CUBES_LU"], &
845 : description="The lower and upper index of the states to be printed as cube (not working yet).", &
846 : usage="CUBES_LU_BOUNDS integer integer", &
847 19040 : n_var=2, default_i_vals=[0, -2], type_of_var=integer_t)
848 9520 : CALL section_add_keyword(print_key, keyword)
849 9520 : CALL keyword_release(keyword)
850 :
851 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LIST", &
852 : description="Indexes of the states to be printed as cube files "// &
853 : "This keyword can be repeated several times "// &
854 : "(useful if you have to specify many indexes) (not working yet).", &
855 : usage="CUBES_LIST 1 2", &
856 9520 : n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
857 9520 : CALL section_add_keyword(print_key, keyword)
858 9520 : CALL keyword_release(keyword)
859 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
860 : description="append the cube files when they already exist", &
861 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
862 9520 : CALL section_add_keyword(print_key, keyword)
863 9520 : CALL keyword_release(keyword)
864 :
865 9520 : CALL section_add_subsection(subsection, print_key)
866 9520 : CALL section_release(print_key)
867 :
868 9520 : CALL section_add_subsection(section, subsection)
869 9520 : CALL section_release(subsection)
870 :
871 9520 : NULLIFY (subsection)
872 9520 : CALL create_interp_section(subsection)
873 9520 : CALL section_add_subsection(section, subsection)
874 9520 : CALL section_release(subsection)
875 :
876 9520 : END SUBROUTINE create_current_section
877 :
878 : ! **************************************************************************************************
879 : !> \brief creates the input structure used to activate
880 : !> calculation of NMR chemical shift using
881 : !> the induced current obtained from DFPT
882 : !> Available properties : none
883 : !> \param section the section to create
884 : !> \author MI/VW
885 : ! **************************************************************************************************
886 9520 : SUBROUTINE create_nmr_section(section)
887 : TYPE(section_type), POINTER :: section
888 :
889 : TYPE(keyword_type), POINTER :: keyword
890 : TYPE(section_type), POINTER :: print_key, subsection
891 :
892 9520 : NULLIFY (keyword, print_key, subsection)
893 :
894 9520 : CPASSERT(.NOT. ASSOCIATED(section))
895 : CALL section_create(section, __LOCATION__, name="nmr", &
896 : description="The chemical shift is calculated by DFPT.", &
897 : n_keywords=5, n_subsections=1, repeats=.FALSE., &
898 19040 : citations=[Weber2009])
899 :
900 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
901 : description="controls the activation of the nmr calculation", &
902 : usage="&NMR T", &
903 : default_l_val=.FALSE., &
904 9520 : lone_keyword_l_val=.TRUE.)
905 9520 : CALL section_add_keyword(section, keyword)
906 9520 : CALL keyword_release(keyword)
907 :
908 : CALL keyword_create(keyword, __LOCATION__, name="INTERPOLATE_SHIFT", &
909 : description="Calculate the soft part of the chemical shift by interpolation ", &
910 : usage="INTERPOLATE_SHIFT T", &
911 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
912 9520 : CALL section_add_keyword(section, keyword)
913 9520 : CALL keyword_release(keyword)
914 :
915 : CALL keyword_create(keyword, __LOCATION__, name="NICS", &
916 : description="Calculate the chemical shift in a set of points"// &
917 : " given from an external file", usage="NICS", &
918 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
919 9520 : CALL section_add_keyword(section, keyword)
920 9520 : CALL keyword_release(keyword)
921 :
922 : CALL keyword_create(keyword, __LOCATION__, name="NICS_FILE_NAME", &
923 : description="Name of the file with the NICS points coordinates", &
924 : usage="NICS_FILE_NAME nics_file", &
925 9520 : default_lc_val="nics_file")
926 9520 : CALL section_add_keyword(section, keyword)
927 9520 : CALL keyword_release(keyword)
928 :
929 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_NMR", &
930 : description="Restart the NMR calculation from a previous run (NOT WORKING YET)", &
931 : usage="RESTART_NMR", default_l_val=.FALSE., &
932 9520 : lone_keyword_l_val=.TRUE.)
933 9520 : CALL section_add_keyword(section, keyword)
934 9520 : CALL keyword_release(keyword)
935 :
936 : CALL keyword_create(keyword, __LOCATION__, name="SHIFT_GAPW_RADIUS", &
937 : description="While computing the local part of the shift (GAPW), "// &
938 : "the integration is restricted to nuclei that are within this radius.", &
939 : usage="SHIFT_GAPW_RADIUS 20.0", &
940 : type_of_var=real_t, &
941 : default_r_val=cp_unit_to_cp2k(value=60.0_dp, unit_str="angstrom"), &
942 9520 : unit_str="angstrom")
943 9520 : CALL section_add_keyword(section, keyword)
944 9520 : CALL keyword_release(keyword)
945 :
946 9520 : NULLIFY (subsection)
947 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
948 : description="print results of nmr calculation", &
949 9520 : repeats=.FALSE.)
950 :
951 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RESPONSE_FUNCTION_CUBES", &
952 : description="Controls the printing of the response functions ", &
953 9520 : print_level=high_print_level, add_last=add_last_numeric, filename="")
954 : CALL keyword_create(keyword, __LOCATION__, name="stride", &
955 : description="The stride (X,Y,Z) used to write the cube file "// &
956 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
957 : " 1 number valid for all components.", &
958 9520 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
959 9520 : CALL section_add_keyword(print_key, keyword)
960 9520 : CALL keyword_release(keyword)
961 :
962 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LU_BOUNDS", &
963 : variants=["CUBES_LU"], &
964 : description="The lower and upper index of the states to be printed as cube", &
965 : usage="CUBES_LU_BOUNDS integer integer", &
966 19040 : n_var=2, default_i_vals=[0, -2], type_of_var=integer_t)
967 9520 : CALL section_add_keyword(print_key, keyword)
968 9520 : CALL keyword_release(keyword)
969 :
970 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LIST", &
971 : description="Indexes of the states to be printed as cube files "// &
972 : "This keyword can be repeated several times "// &
973 : "(useful if you have to specify many indexes).", &
974 : usage="CUBES_LIST 1 2", &
975 9520 : n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
976 9520 : CALL section_add_keyword(print_key, keyword)
977 9520 : CALL keyword_release(keyword)
978 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
979 : description="append the cube files when they already exist", &
980 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
981 9520 : CALL section_add_keyword(print_key, keyword)
982 9520 : CALL keyword_release(keyword)
983 :
984 9520 : CALL section_add_subsection(subsection, print_key)
985 9520 : CALL section_release(print_key)
986 :
987 : CALL cp_print_key_section_create(print_key, __LOCATION__, "CHI_TENSOR", &
988 : description="Controls the printing of susceptibility", &
989 9520 : print_level=high_print_level, add_last=add_last_numeric, filename="")
990 9520 : CALL section_add_subsection(subsection, print_key)
991 9520 : CALL section_release(print_key)
992 :
993 : CALL cp_print_key_section_create(print_key, __LOCATION__, "SHIELDING_TENSOR", &
994 : description="Controls the printing of the chemical shift", &
995 9520 : print_level=low_print_level, add_last=add_last_numeric, filename="")
996 :
997 : CALL keyword_create(keyword, __LOCATION__, name="ATOMS_LU_BOUNDS", &
998 : variants=["ATOMS_LU"], &
999 : description="The lower and upper atomic index for which the tensor is printed", &
1000 : usage="ATOMS_LU_BOUNDS integer integer", &
1001 19040 : n_var=2, default_i_vals=[0, -2], type_of_var=integer_t)
1002 9520 : CALL section_add_keyword(print_key, keyword)
1003 9520 : CALL keyword_release(keyword)
1004 :
1005 : CALL keyword_create(keyword, __LOCATION__, name="ATOMS_LIST", &
1006 : description="list of atoms for which the shift is printed into a file ", &
1007 : usage="ATOMS_LIST 1 2", n_var=-1, &
1008 9520 : type_of_var=integer_t, repeats=.TRUE.)
1009 9520 : CALL section_add_keyword(print_key, keyword)
1010 9520 : CALL keyword_release(keyword)
1011 :
1012 9520 : CALL section_add_subsection(subsection, print_key)
1013 9520 : CALL section_release(print_key)
1014 :
1015 9520 : CALL section_add_subsection(section, subsection)
1016 9520 : CALL section_release(subsection)
1017 :
1018 9520 : NULLIFY (subsection)
1019 9520 : CALL create_interp_section(subsection)
1020 9520 : CALL section_add_subsection(section, subsection)
1021 9520 : CALL section_release(subsection)
1022 :
1023 9520 : END SUBROUTINE create_nmr_section
1024 :
1025 : ! **************************************************************************************************
1026 : !> \brief creates the input structure used to activate
1027 : !> calculation of NMR spin-spin coupling (implementation not operating)
1028 : !> Available properties : none
1029 : !> \param section the section to create
1030 : !> \author VW
1031 : ! **************************************************************************************************
1032 9520 : SUBROUTINE create_spin_spin_section(section)
1033 : TYPE(section_type), POINTER :: section
1034 :
1035 : TYPE(keyword_type), POINTER :: keyword
1036 : TYPE(section_type), POINTER :: print_key, subsection
1037 :
1038 9520 : NULLIFY (keyword, print_key, subsection)
1039 :
1040 9520 : CPASSERT(.NOT. ASSOCIATED(section))
1041 : CALL section_create(section, __LOCATION__, name="spinspin", &
1042 : description="Compute indirect spin-spin coupling constants.", &
1043 9520 : n_keywords=5, n_subsections=1, repeats=.FALSE.)
1044 :
1045 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
1046 : description="controls the activation of the nmr calculation", &
1047 : usage="&SPINSPIN T", &
1048 : default_l_val=.FALSE., &
1049 9520 : lone_keyword_l_val=.TRUE.)
1050 9520 : CALL section_add_keyword(section, keyword)
1051 9520 : CALL keyword_release(keyword)
1052 :
1053 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_SPINSPIN", &
1054 : description="Restart the spin-spin calculation from a previous run (NOT WORKING YET)", &
1055 : usage="RESTART_SPINSPIN", default_l_val=.FALSE., &
1056 9520 : lone_keyword_l_val=.TRUE.)
1057 9520 : CALL section_add_keyword(section, keyword)
1058 9520 : CALL keyword_release(keyword)
1059 :
1060 : CALL keyword_create(keyword, __LOCATION__, name="ISSC_ON_ATOM_LIST", &
1061 : description="Atoms for which the issc is computed.", &
1062 : usage="ISSC_ON_ATOM_LIST 1 2 10", &
1063 9520 : n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
1064 9520 : CALL section_add_keyword(section, keyword)
1065 9520 : CALL keyword_release(keyword)
1066 :
1067 : CALL keyword_create(keyword, __LOCATION__, name="DO_FC", &
1068 : description="Compute the Fermi contact contribution", &
1069 : usage="DO_FC F", &
1070 9520 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1071 9520 : CALL section_add_keyword(section, keyword)
1072 9520 : CALL keyword_release(keyword)
1073 :
1074 : CALL keyword_create(keyword, __LOCATION__, name="DO_SD", &
1075 : description="Compute the spin-dipolar contribution", &
1076 : usage="DO_SD F", &
1077 9520 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1078 9520 : CALL section_add_keyword(section, keyword)
1079 9520 : CALL keyword_release(keyword)
1080 :
1081 : CALL keyword_create(keyword, __LOCATION__, name="DO_PSO", &
1082 : description="Compute the paramagnetic spin-orbit contribution", &
1083 : usage="DO_PSO F", &
1084 9520 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1085 9520 : CALL section_add_keyword(section, keyword)
1086 9520 : CALL keyword_release(keyword)
1087 :
1088 : CALL keyword_create(keyword, __LOCATION__, name="DO_DSO", &
1089 : description="Compute the diamagnetic spin-orbit contribution (NOT YET IMPLEMENTED)", &
1090 : usage="DO_DSO F", &
1091 9520 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1092 9520 : CALL section_add_keyword(section, keyword)
1093 9520 : CALL keyword_release(keyword)
1094 :
1095 9520 : NULLIFY (subsection)
1096 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
1097 : description="print results of the indirect spin-spin calculation", &
1098 9520 : repeats=.FALSE.)
1099 :
1100 : CALL cp_print_key_section_create(print_key, __LOCATION__, "K_MATRIX", &
1101 : description="Controls the printing of the indirect spin-spin matrix", &
1102 9520 : print_level=low_print_level, add_last=add_last_numeric, filename="")
1103 :
1104 : CALL keyword_create(keyword, __LOCATION__, name="ATOMS_LIST", &
1105 : description="list of atoms for which the indirect spin-spin is printed into a file ", &
1106 : usage="ATOMS_LIST 1 2", n_var=-1, &
1107 9520 : type_of_var=integer_t, repeats=.TRUE.)
1108 9520 : CALL section_add_keyword(print_key, keyword)
1109 9520 : CALL keyword_release(keyword)
1110 :
1111 9520 : CALL section_add_subsection(subsection, print_key)
1112 9520 : CALL section_release(print_key)
1113 :
1114 9520 : CALL section_add_subsection(section, subsection)
1115 9520 : CALL section_release(subsection)
1116 :
1117 9520 : NULLIFY (subsection)
1118 9520 : CALL create_interp_section(subsection)
1119 9520 : CALL section_add_subsection(section, subsection)
1120 9520 : CALL section_release(subsection)
1121 :
1122 9520 : END SUBROUTINE create_spin_spin_section
1123 :
1124 : ! **************************************************************************************************
1125 : !> \brief creates the input structure used to activate
1126 : !> calculation of EPR using
1127 : !> the induced current obtained from DFPT
1128 : !> Available properties : none
1129 : !> \param section the section to create
1130 : !> \author VW
1131 : ! **************************************************************************************************
1132 9520 : SUBROUTINE create_epr_section(section)
1133 : TYPE(section_type), POINTER :: section
1134 :
1135 : TYPE(keyword_type), POINTER :: keyword
1136 : TYPE(section_type), POINTER :: print_key, subsection, subsubsection
1137 :
1138 9520 : NULLIFY (keyword, print_key, subsection, subsubsection)
1139 :
1140 9520 : CPASSERT(.NOT. ASSOCIATED(section))
1141 : CALL section_create(section, __LOCATION__, name="EPR", &
1142 : description="The g tensor is calculated by DFPT ", &
1143 : n_keywords=5, n_subsections=1, repeats=.FALSE., &
1144 19040 : citations=[Weber2009])
1145 :
1146 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
1147 : description="controls the activation of the epr calculation", &
1148 : usage="&EPR T", &
1149 : default_l_val=.FALSE., &
1150 9520 : lone_keyword_l_val=.TRUE.)
1151 9520 : CALL section_add_keyword(section, keyword)
1152 9520 : CALL keyword_release(keyword)
1153 :
1154 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_EPR", &
1155 : description="Restart the EPR calculation from a previous run (NOT WORKING)", &
1156 : usage="RESTART_EPR", default_l_val=.FALSE., &
1157 9520 : lone_keyword_l_val=.TRUE.)
1158 9520 : CALL section_add_keyword(section, keyword)
1159 9520 : CALL keyword_release(keyword)
1160 :
1161 9520 : NULLIFY (subsection)
1162 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
1163 : description="print results of epr calculation", &
1164 9520 : repeats=.FALSE.)
1165 :
1166 : CALL cp_print_key_section_create(print_key, __LOCATION__, "NABLAVKS_CUBES", &
1167 : description="Controls the printing of the components of nabla v_ks ", &
1168 9520 : print_level=high_print_level, add_last=add_last_numeric, filename="")
1169 : CALL keyword_create(keyword, __LOCATION__, name="stride", &
1170 : description="The stride (X,Y,Z) used to write the cube file "// &
1171 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1172 : " 1 number valid for all components.", &
1173 9520 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
1174 9520 : CALL section_add_keyword(print_key, keyword)
1175 9520 : CALL keyword_release(keyword)
1176 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
1177 : description="append the cube files when they already exist", &
1178 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1179 9520 : CALL section_add_keyword(print_key, keyword)
1180 9520 : CALL keyword_release(keyword)
1181 :
1182 9520 : CALL section_add_subsection(subsection, print_key)
1183 9520 : CALL section_release(print_key)
1184 :
1185 : CALL cp_print_key_section_create(print_key, __LOCATION__, "G_TENSOR", &
1186 : description="Controls the printing of the g tensor", &
1187 9520 : print_level=high_print_level, add_last=add_last_numeric, filename="")
1188 9520 : CALL create_xc_section(subsubsection)
1189 9520 : CALL section_add_subsection(print_key, subsubsection)
1190 9520 : CALL section_release(subsubsection)
1191 :
1192 : CALL keyword_create(keyword, __LOCATION__, name="GAPW_MAX_ALPHA", &
1193 : description="Maximum alpha of GTH potentials allowed on the soft grids ", &
1194 9520 : usage="GAPW_MAX_ALPHA real", default_r_val=5.0_dp)
1195 9520 : CALL section_add_keyword(print_key, keyword)
1196 9520 : CALL keyword_release(keyword)
1197 :
1198 : CALL keyword_create(keyword, __LOCATION__, name="SOO_RHO_HARD", &
1199 : description="Whether or not to include the atomic parts of the density "// &
1200 : "in the SOO part of the g tensor", usage="SOO_RHO_HARD", &
1201 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1202 9520 : CALL section_add_keyword(print_key, keyword)
1203 9520 : CALL keyword_release(keyword)
1204 :
1205 9520 : CALL section_add_subsection(subsection, print_key)
1206 9520 : CALL section_release(print_key)
1207 :
1208 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RESPONSE_FUNCTION_CUBES", &
1209 : description="Controls the printing of the response functions ", &
1210 9520 : print_level=high_print_level, add_last=add_last_numeric, filename="")
1211 : CALL keyword_create(keyword, __LOCATION__, name="stride", &
1212 : description="The stride (X,Y,Z) used to write the cube file "// &
1213 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
1214 : " 1 number valid for all components.", &
1215 9520 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
1216 9520 : CALL section_add_keyword(print_key, keyword)
1217 9520 : CALL keyword_release(keyword)
1218 :
1219 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LU_BOUNDS", &
1220 : variants=["CUBES_LU"], &
1221 : description="The lower and upper index of the states to be printed as cube", &
1222 : usage="CUBES_LU_BOUNDS integer integer", &
1223 19040 : n_var=2, default_i_vals=[0, -2], type_of_var=integer_t)
1224 9520 : CALL section_add_keyword(print_key, keyword)
1225 9520 : CALL keyword_release(keyword)
1226 :
1227 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LIST", &
1228 : description="Indexes of the states to be printed as cube files "// &
1229 : "This keyword can be repeated several times "// &
1230 : "(useful if you have to specify many indexes).", &
1231 : usage="CUBES_LIST 1 2", &
1232 9520 : n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
1233 9520 : CALL section_add_keyword(print_key, keyword)
1234 9520 : CALL keyword_release(keyword)
1235 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
1236 : description="append the cube files when they already exist", &
1237 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1238 9520 : CALL section_add_keyword(print_key, keyword)
1239 9520 : CALL keyword_release(keyword)
1240 :
1241 9520 : CALL section_add_subsection(subsection, print_key)
1242 9520 : CALL section_release(print_key)
1243 :
1244 9520 : CALL section_add_subsection(section, subsection)
1245 9520 : CALL section_release(subsection)
1246 :
1247 9520 : NULLIFY (subsection)
1248 9520 : CALL create_interp_section(subsection)
1249 9520 : CALL section_add_subsection(section, subsection)
1250 9520 : CALL section_release(subsection)
1251 :
1252 9520 : END SUBROUTINE create_epr_section
1253 :
1254 : ! **************************************************************************************************
1255 : !> \brief creates the input structure used to activate
1256 : !> calculation of polarizability tensor DFPT
1257 : !> Available properties : none
1258 : !> \param section the section to create
1259 : !> \author SL
1260 : ! **************************************************************************************************
1261 9520 : SUBROUTINE create_polarizability_section(section)
1262 :
1263 : TYPE(section_type), POINTER :: section
1264 :
1265 : TYPE(keyword_type), POINTER :: keyword
1266 : TYPE(section_type), POINTER :: print_key, subsection
1267 :
1268 9520 : NULLIFY (keyword, print_key, subsection)
1269 :
1270 9520 : CPASSERT(.NOT. ASSOCIATED(section))
1271 : CALL section_create(section, __LOCATION__, name="POLAR", &
1272 : description="Compute polarizabilities.", &
1273 : n_keywords=5, n_subsections=1, repeats=.FALSE., &
1274 19040 : citations=[Putrino2002])
1275 :
1276 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
1277 : description="controls the activation of the polarizability calculation", &
1278 : usage="&POLAR T", &
1279 : default_l_val=.FALSE., &
1280 9520 : lone_keyword_l_val=.TRUE.)
1281 9520 : CALL section_add_keyword(section, keyword)
1282 9520 : CALL keyword_release(keyword)
1283 :
1284 : CALL keyword_create(keyword, __LOCATION__, name="DO_RAMAN", &
1285 : description="Compute the electric-dipole--electric-dipole polarizability", &
1286 : usage="DO_RAMAN F", &
1287 : citations=[Luber2014], &
1288 19040 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1289 9520 : CALL section_add_keyword(section, keyword)
1290 9520 : CALL keyword_release(keyword)
1291 :
1292 : CALL keyword_create(keyword, __LOCATION__, name="PERIODIC_DIPOLE_OPERATOR", &
1293 : description="Type of dipole operator: Berry phase(T) or Local(F)", &
1294 : usage="PERIODIC_DIPOLE_OPERATOR T", &
1295 9520 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1296 9520 : CALL section_add_keyword(section, keyword)
1297 9520 : CALL keyword_release(keyword)
1298 :
1299 9520 : NULLIFY (subsection)
1300 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
1301 : description="print results of the polarizability calculation", &
1302 9520 : repeats=.FALSE.)
1303 :
1304 : CALL cp_print_key_section_create(print_key, __LOCATION__, "POLAR_MATRIX", &
1305 : description="Controls the printing of the polarizabilities", &
1306 9520 : print_level=low_print_level, add_last=add_last_numeric, filename="")
1307 :
1308 9520 : CALL section_add_subsection(subsection, print_key)
1309 9520 : CALL section_release(print_key)
1310 9520 : CALL section_add_subsection(section, subsection)
1311 9520 : CALL section_release(subsection)
1312 :
1313 9520 : NULLIFY (subsection)
1314 9520 : CALL create_interp_section(subsection)
1315 9520 : CALL section_add_subsection(section, subsection)
1316 9520 : CALL section_release(subsection)
1317 :
1318 9520 : END SUBROUTINE create_polarizability_section
1319 :
1320 : ! **************************************************************************************************
1321 : !> \brief creates the section for electron transfer coupling
1322 : !> \param section ...
1323 : !> \author fschiff
1324 : ! **************************************************************************************************
1325 9520 : SUBROUTINE create_et_coupling_section(section)
1326 : TYPE(section_type), POINTER :: section
1327 :
1328 : TYPE(keyword_type), POINTER :: keyword
1329 : TYPE(section_type), POINTER :: print_key, subsection
1330 :
1331 9520 : NULLIFY (keyword)
1332 9520 : CPASSERT(.NOT. ASSOCIATED(section))
1333 : CALL section_create(section, __LOCATION__, name="ET_COUPLING", &
1334 : description="specifies the two constraints/restraints for extracting ET coupling elements", &
1335 28560 : n_keywords=1, n_subsections=4, repeats=.FALSE., citations=[Kondov2007, Futera2017])
1336 :
1337 9520 : NULLIFY (subsection)
1338 9520 : CALL create_ddapc_restraint_section(subsection, "DDAPC_RESTRAINT_A")
1339 9520 : CALL section_add_subsection(section, subsection)
1340 9520 : CALL section_release(subsection)
1341 :
1342 9520 : NULLIFY (subsection)
1343 9520 : CALL create_ddapc_restraint_section(subsection, "DDAPC_RESTRAINT_B")
1344 9520 : CALL section_add_subsection(section, subsection)
1345 9520 : CALL section_release(subsection)
1346 :
1347 9520 : NULLIFY (subsection)
1348 9520 : CALL create_projection(subsection, "PROJECTION")
1349 9520 : CALL section_add_subsection(section, subsection)
1350 9520 : CALL section_release(subsection)
1351 :
1352 : CALL keyword_create(keyword, __LOCATION__, name="TYPE_OF_CONSTRAINT", &
1353 : description="Specifies the type of constraint", &
1354 : usage="TYPE_OF_CONSTRAINT DDAPC", &
1355 : enum_c_vals=s2a("NONE", "DDAPC"), &
1356 : enum_i_vals=[do_no_et, do_et_ddapc], &
1357 : enum_desc=s2a("NONE", "DDAPC Constraint"), &
1358 9520 : default_i_val=do_no_et)
1359 9520 : CALL section_add_keyword(section, keyword)
1360 9520 : CALL keyword_release(keyword)
1361 :
1362 9520 : NULLIFY (print_key)
1363 : CALL cp_print_key_section_create(print_key, __LOCATION__, "PROGRAM_RUN_INFO", &
1364 : description="Controls the printing basic info about the method", &
1365 9520 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
1366 9520 : CALL section_add_subsection(section, print_key)
1367 9520 : CALL section_release(print_key)
1368 :
1369 9520 : END SUBROUTINE create_et_coupling_section
1370 :
1371 : ! **************************************************************************************************
1372 : !> \brief defines input sections for specification of Hilbert space partitioning
1373 : !> in projection-operator approach of electronic coupling calulation
1374 : !> \param section pointer to the section data structure
1375 : !> \param section_name name of the projection section
1376 : !> \author Z. Futera (02.2017)
1377 : ! **************************************************************************************************
1378 9520 : SUBROUTINE create_projection(section, section_name)
1379 :
1380 : ! Routine arguments
1381 : TYPE(section_type), POINTER :: section
1382 : CHARACTER(len=*), INTENT(in) :: section_name
1383 :
1384 : TYPE(keyword_type), POINTER :: keyword
1385 : TYPE(section_type), POINTER :: print_key, section_block, section_print
1386 :
1387 : ! Routine name for dubug purposes
1388 :
1389 : ! Sanity check
1390 0 : CPASSERT(.NOT. ASSOCIATED(section))
1391 :
1392 : ! Initialization
1393 9520 : NULLIFY (keyword)
1394 9520 : NULLIFY (print_key)
1395 9520 : NULLIFY (section_block)
1396 9520 : NULLIFY (section_print)
1397 :
1398 : ! Input-file section definition
1399 : CALL section_create(section, __LOCATION__, name=TRIM(ADJUSTL(section_name)), &
1400 : description="Projection-operator approach fo ET coupling calculation", &
1401 9520 : n_keywords=0, n_subsections=2, repeats=.FALSE.)
1402 :
1403 : ! Subsection #0: Log printing
1404 : CALL cp_print_key_section_create(print_key, __LOCATION__, 'PROGRAM_RUN_INFO', &
1405 : description="Controls printing of data and informations to log file", &
1406 9520 : print_level=low_print_level, filename="__STD_OUT__")
1407 9520 : CALL section_add_subsection(section, print_key)
1408 9520 : CALL section_release(print_key)
1409 :
1410 : ! Subsection #1: Atomic blocks
1411 : CALL section_create(section_block, __LOCATION__, name='BLOCK', &
1412 : description="Part of the system (donor, acceptor, bridge,...)", &
1413 9520 : n_keywords=2, n_subsections=1, repeats=.TRUE.)
1414 9520 : CALL section_add_subsection(section, section_block)
1415 :
1416 : ! S#1 - Keyword #1: Atom IDs defining a Hilbert space block
1417 : CALL keyword_create(keyword, __LOCATION__, name='ATOMS', &
1418 : description="Array of atom IDs in the system part", &
1419 : usage="ATOMS {integer} {integer} .. {integer}", &
1420 9520 : n_var=-1, type_of_var=integer_t, repeats=.FALSE.)
1421 9520 : CALL section_add_keyword(section_block, keyword)
1422 9520 : CALL keyword_release(keyword)
1423 :
1424 : ! S#1 - Keyword #1: Atom IDs defining a Hilbert space block
1425 : CALL keyword_create(keyword, __LOCATION__, name='NELECTRON', &
1426 : description="Number of electrons expected in the system part", &
1427 9520 : usage="NELECTRON {integer}", default_i_val=0)
1428 9520 : CALL section_add_keyword(section_block, keyword)
1429 9520 : CALL keyword_release(keyword)
1430 :
1431 : ! S#1 - Subsection #1: Printing setting
1432 : CALL section_create(section_print, __LOCATION__, name='PRINT', &
1433 : description="Possible printing options in ET system part", &
1434 9520 : n_keywords=0, n_subsections=0, repeats=.FALSE.)
1435 9520 : CALL section_add_subsection(section_block, section_print)
1436 :
1437 : ! S#1 - S#1 - Keyword #1: MO coefficient on specific atom
1438 : CALL keyword_create(keyword, __LOCATION__, name='MO_COEFF_ATOM', &
1439 : description="Print out MO coeffiecients on given atom", &
1440 : usage="MO_COEFF_ATOM {integer} {integer} .. {integer}", &
1441 9520 : type_of_var=integer_t, n_var=-1, repeats=.TRUE.)
1442 9520 : CALL section_add_keyword(section_print, keyword)
1443 9520 : CALL keyword_release(keyword)
1444 :
1445 : ! S#1 - S#1 - Keyword #1: MO coefficient of specific state
1446 : CALL keyword_create(keyword, __LOCATION__, name='MO_COEFF_ATOM_STATE', &
1447 : description="Print out MO coeffiecients of specific state", &
1448 : usage="MO_COEFF_ATOM_STATE {integer} {integer} .. {integer}", &
1449 9520 : type_of_var=integer_t, n_var=-1, repeats=.TRUE.)
1450 9520 : CALL section_add_keyword(section_print, keyword)
1451 9520 : CALL keyword_release(keyword)
1452 :
1453 : ! S#1 - S#1 - Subsection #1: Saving MOs to CUBE files
1454 : CALL cp_print_key_section_create(print_key, __LOCATION__, 'MO_CUBES', &
1455 : description="Controls saving of MO cube files", &
1456 9520 : print_level=high_print_level, filename="")
1457 :
1458 : ! S#1 - S#1 - S#1 - Keyword #1: Stride
1459 : CALL keyword_create(keyword, __LOCATION__, name='STRIDE', &
1460 : description="The stride (X,Y,Z) used to write the cube file", &
1461 : usage="STRIDE {integer} {integer} {integer}", n_var=-1, &
1462 9520 : default_i_vals=[2, 2, 2], type_of_var=integer_t)
1463 9520 : CALL section_add_keyword(print_key, keyword)
1464 9520 : CALL keyword_release(keyword)
1465 :
1466 : ! S#1 - S#1 - S#1 - Keyword #2: List of MO IDs
1467 : CALL keyword_create(keyword, __LOCATION__, name='MO_LIST', &
1468 : description="Indices of molecular orbitals to save", &
1469 : usage="MO_LIST {integer} {integer} .. {integer}", &
1470 9520 : type_of_var=integer_t, n_var=-1, repeats=.TRUE.)
1471 9520 : CALL section_add_keyword(print_key, keyword)
1472 9520 : CALL keyword_release(keyword)
1473 :
1474 : ! S#1 - S#1 - S#1 - Keyword #2: Number of unoccupied states
1475 : CALL keyword_create(keyword, __LOCATION__, name='NLUMO', &
1476 : description="Number of unoccupied molecular orbitals to save", &
1477 9520 : usage="NLUMO {integer}", default_i_val=1)
1478 9520 : CALL section_add_keyword(print_key, keyword)
1479 9520 : CALL keyword_release(keyword)
1480 :
1481 : ! S#1 - S#1 - S#1 - Keyword #3: Number of occupied states
1482 : CALL keyword_create(keyword, __LOCATION__, name='NHOMO', &
1483 : description="Number of occupied molecular orbitals to save", &
1484 9520 : usage="NHOMO {integer}", default_i_val=1)
1485 9520 : CALL section_add_keyword(print_key, keyword)
1486 9520 : CALL keyword_release(keyword)
1487 :
1488 9520 : CALL section_add_subsection(section_print, print_key)
1489 9520 : CALL section_release(print_key)
1490 :
1491 : ! S#1 - S#1 - Clean
1492 9520 : CALL section_release(section_print)
1493 :
1494 : ! S#1 - Clean
1495 9520 : CALL section_release(section_block)
1496 :
1497 : ! S#1 - Subsection #1: Printing setting
1498 : CALL section_create(section_print, __LOCATION__, name='PRINT', &
1499 : description="Possible printing options in ET", &
1500 9520 : n_keywords=0, n_subsections=0, repeats=.FALSE.)
1501 9520 : CALL section_add_subsection(section, section_print)
1502 :
1503 : ! Print couplings
1504 : CALL cp_print_key_section_create(print_key, __LOCATION__, 'COUPLINGS', &
1505 : description="Controls printing couplings onto file", &
1506 9520 : print_level=low_print_level, filename="")
1507 :
1508 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
1509 : description="append the files when they already exist", &
1510 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1511 9520 : CALL section_add_keyword(print_key, keyword)
1512 9520 : CALL keyword_release(keyword)
1513 :
1514 9520 : CALL section_add_subsection(section_print, print_key)
1515 9520 : CALL section_release(print_key)
1516 :
1517 9520 : CALL section_release(section_print)
1518 :
1519 9520 : END SUBROUTINE create_projection
1520 :
1521 : ! **************************************************************************************************
1522 : !> \brief creates an input section for tddfpt calculation
1523 : !> \param section section to create
1524 : !> \par History
1525 : !> * 05.2016 forked from create_tddfpt_section [Sergey Chulkov]
1526 : !> * 08.2016 moved from module input_cp2k_dft [Sergey Chulkov]
1527 : ! **************************************************************************************************
1528 19040 : SUBROUTINE create_tddfpt2_section(section)
1529 : TYPE(section_type), POINTER :: section
1530 :
1531 : TYPE(keyword_type), POINTER :: keyword
1532 : TYPE(section_type), POINTER :: print_key, subsection
1533 :
1534 19040 : CPASSERT(.NOT. ASSOCIATED(section))
1535 : CALL section_create(section, __LOCATION__, name="TDDFPT", &
1536 : description="Parameters needed to set up the Time-Dependent "// &
1537 : "Density Functional Perturbation Theory. "// &
1538 : "Current implementation works for hybrid functionals. ", &
1539 : n_keywords=14, n_subsections=4, repeats=.FALSE., &
1540 76160 : citations=[Iannuzzi2005, Hanasaki2025, Hernandez2025])
1541 :
1542 19040 : NULLIFY (keyword, print_key, subsection)
1543 :
1544 : CALL keyword_create(keyword, __LOCATION__, &
1545 : name="_SECTION_PARAMETERS_", &
1546 : description="Controls the activation of the TDDFPT procedure", &
1547 : default_l_val=.FALSE., &
1548 19040 : lone_keyword_l_val=.TRUE.)
1549 19040 : CALL section_add_keyword(section, keyword)
1550 19040 : CALL keyword_release(keyword)
1551 :
1552 : ! Integer
1553 : CALL keyword_create(keyword, __LOCATION__, name="NSTATES", &
1554 : description="Number of excited states to converge.", &
1555 : n_var=1, type_of_var=integer_t, &
1556 19040 : default_i_val=1)
1557 19040 : CALL section_add_keyword(section, keyword)
1558 19040 : CALL keyword_release(keyword)
1559 :
1560 : CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
1561 : description="Maximal number of iterations to be performed.", &
1562 : n_var=1, type_of_var=integer_t, &
1563 19040 : default_i_val=50)
1564 19040 : CALL section_add_keyword(section, keyword)
1565 19040 : CALL keyword_release(keyword)
1566 :
1567 : CALL keyword_create(keyword, __LOCATION__, name="MAX_KV", &
1568 : description="Maximal number of Krylov space vectors. "// &
1569 : "Davidson iterations will be restarted upon reaching this limit.", &
1570 : n_var=1, type_of_var=integer_t, &
1571 19040 : default_i_val=5000)
1572 19040 : CALL section_add_keyword(section, keyword)
1573 19040 : CALL keyword_release(keyword)
1574 :
1575 : CALL keyword_create(keyword, __LOCATION__, name="NLUMO", &
1576 : description="Number of unoccupied orbitals to consider. "// &
1577 : "Default is to use all unoccupied orbitals (-1).", &
1578 : n_var=1, type_of_var=integer_t, &
1579 19040 : default_i_val=-1)
1580 19040 : CALL section_add_keyword(section, keyword)
1581 19040 : CALL keyword_release(keyword)
1582 :
1583 : CALL keyword_create(keyword, __LOCATION__, name="NPROC_STATE", &
1584 : description="Number of MPI processes to be used per excited state. "// &
1585 : "Default is to use all processors (0).", &
1586 : n_var=1, type_of_var=integer_t, &
1587 19040 : default_i_val=0)
1588 19040 : CALL section_add_keyword(section, keyword)
1589 19040 : CALL keyword_release(keyword)
1590 :
1591 : ! kernel type
1592 : CALL keyword_create(keyword, __LOCATION__, name="KERNEL", &
1593 : description="Options to compute the kernel", &
1594 : usage="KERNEL FULL", &
1595 : enum_c_vals=s2a("FULL", "sTDA", "NONE"), &
1596 : enum_i_vals=[tddfpt_kernel_full, tddfpt_kernel_stda, tddfpt_kernel_none], &
1597 19040 : default_i_val=tddfpt_kernel_full)
1598 19040 : CALL section_add_keyword(section, keyword)
1599 19040 : CALL keyword_release(keyword)
1600 :
1601 : ! spin-flip TDDFPT options
1602 : CALL keyword_create(keyword, __LOCATION__, name="SPINFLIP", &
1603 : description="Selects the type of spin-flip TDDFPT kernel", &
1604 : usage="SPINFLIP NONCOLLINEAR", &
1605 : enum_c_vals=s2a("NONE", "COLLINEAR", "NONCOLLINEAR"), &
1606 : enum_i_vals=[no_sf_tddfpt, tddfpt_sf_col, tddfpt_sf_noncol], &
1607 : enum_desc=s2a("Only molecular orbital energy differences are considered", &
1608 : "MO energy diferences and Fock exchange contributions are "// &
1609 : "considered", &
1610 : "MO energy differences, Fock exchange and "// &
1611 : "Noncollinear local exchange-correlation "// &
1612 : "kernel are considered"), &
1613 38080 : default_i_val=no_sf_tddfpt, citations=[Hernandez2025])
1614 19040 : CALL section_add_keyword(section, keyword)
1615 19040 : CALL keyword_release(keyword)
1616 :
1617 : CALL keyword_create(keyword, __LOCATION__, name="OE_CORR", &
1618 : description="Orbital energy correction potential.", &
1619 : enum_c_vals=s2a("NONE", "LB94", "GLLB", "SAOP", "SHIFT"), &
1620 : enum_i_vals=[oe_none, oe_lb, oe_gllb, oe_saop, oe_shift], &
1621 : enum_desc=s2a("No orbital correction scheme is used", &
1622 : "van Leeuwen and Baerends. PRA, 49:2421, 1994", &
1623 : "Gritsenko, van Leeuwen, van Lenthe, Baerends. PRA, 51:1944, 1995", &
1624 : "Gritsenko, Schipper, Baerends. Chem. Phys. Lett., 302:199, 1999", &
1625 : "Constant shift of virtual and/or open-shell orbitals"), &
1626 19040 : default_i_val=oe_none)
1627 19040 : CALL section_add_keyword(section, keyword)
1628 19040 : CALL keyword_release(keyword)
1629 :
1630 : ! SHIFTS
1631 : CALL keyword_create(keyword, __LOCATION__, name="EV_SHIFT", &
1632 : variants=s2a("VIRTUAL_SHIFT"), &
1633 : description="Constant shift of virtual state eigenvalues.", &
1634 : usage="EV_SHIFT 0.500", &
1635 : n_var=1, type_of_var=real_t, &
1636 : unit_str="eV", &
1637 19040 : default_r_val=0.0_dp)
1638 19040 : CALL section_add_keyword(section, keyword)
1639 19040 : CALL keyword_release(keyword)
1640 : !
1641 : CALL keyword_create(keyword, __LOCATION__, name="EOS_SHIFT", &
1642 : variants=s2a("OPEN_SHELL_SHIFT"), &
1643 : description="Constant shift of open shell eigenvalues.", &
1644 : usage="EOS_SHIFT 0.200", &
1645 : n_var=1, type_of_var=real_t, &
1646 : unit_str="eV", &
1647 19040 : default_r_val=0.0_dp)
1648 19040 : CALL section_add_keyword(section, keyword)
1649 19040 : CALL keyword_release(keyword)
1650 :
1651 : ! Real
1652 : CALL keyword_create(keyword, __LOCATION__, name="CONVERGENCE", &
1653 : description="Target accuracy for excited state energies.", &
1654 : n_var=1, type_of_var=real_t, unit_str="hartree", &
1655 19040 : default_r_val=1.0e-5_dp)
1656 19040 : CALL section_add_keyword(section, keyword)
1657 19040 : CALL keyword_release(keyword)
1658 :
1659 : CALL keyword_create(keyword, __LOCATION__, name="MIN_AMPLITUDE", &
1660 : description="The smallest excitation amplitude to print.", &
1661 : n_var=1, type_of_var=real_t, &
1662 19040 : default_r_val=5.0e-2_dp)
1663 19040 : CALL section_add_keyword(section, keyword)
1664 19040 : CALL keyword_release(keyword)
1665 :
1666 : CALL keyword_create(keyword, __LOCATION__, name="ORTHOGONAL_EPS", &
1667 : description="The largest possible overlap between the ground state and "// &
1668 : "orthogonalised excited state wave-functions. Davidson iterations "// &
1669 : "will be restarted when the overlap goes beyond this threshold in "// &
1670 : "order to prevent numerical instability.", &
1671 : n_var=1, type_of_var=real_t, &
1672 19040 : default_r_val=1.0e-4_dp)
1673 19040 : CALL section_add_keyword(section, keyword)
1674 19040 : CALL keyword_release(keyword)
1675 :
1676 : ! Logical
1677 : CALL keyword_create(keyword, __LOCATION__, name="RESTART", &
1678 : description="Restart the TDDFPT calculation if a restart file exists", &
1679 : n_var=1, type_of_var=logical_t, &
1680 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1681 19040 : CALL section_add_keyword(section, keyword)
1682 19040 : CALL keyword_release(keyword)
1683 :
1684 : CALL keyword_create(keyword, __LOCATION__, name="RKS_TRIPLETS", &
1685 : description="Compute triplet excited states using spin-unpolarised molecular orbitals.", &
1686 : n_var=1, type_of_var=logical_t, &
1687 19040 : default_l_val=.FALSE.)
1688 19040 : CALL section_add_keyword(section, keyword)
1689 19040 : CALL keyword_release(keyword)
1690 :
1691 : CALL keyword_create(keyword, __LOCATION__, name="ADMM_KERNEL_XC_CORRECTION", &
1692 : description="Use/Ignore ADMM correction xc functional for TD kernel. "// &
1693 : "XC correction functional is defined in ground state XC section.", &
1694 : n_var=1, type_of_var=logical_t, &
1695 19040 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1696 19040 : CALL section_add_keyword(section, keyword)
1697 19040 : CALL keyword_release(keyword)
1698 :
1699 : CALL keyword_create(keyword, __LOCATION__, name="ADMM_KERNEL_CORRECTION_SYMMETRIC", &
1700 : description="ADMM correction functional in kernel is applied symmetrically. "// &
1701 : "Original implementation is using a non-symmetric formula.", &
1702 : n_var=1, type_of_var=logical_t, &
1703 19040 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
1704 19040 : CALL section_add_keyword(section, keyword)
1705 19040 : CALL keyword_release(keyword)
1706 :
1707 : CALL keyword_create(keyword, __LOCATION__, name="DO_LRIGPW", &
1708 : description="Local resolution of identity for Coulomb contribution.", &
1709 : n_var=1, type_of_var=logical_t, &
1710 19040 : default_l_val=.FALSE.)
1711 19040 : CALL section_add_keyword(section, keyword)
1712 19040 : CALL keyword_release(keyword)
1713 :
1714 : CALL keyword_create(keyword, __LOCATION__, name="AUTO_BASIS", &
1715 : description="Specify size of automatically generated auxiliary basis sets: "// &
1716 : "Options={small,medium,large,huge}", &
1717 : usage="AUTO_BASIS {basis_type} {basis_size}", &
1718 57120 : type_of_var=char_t, repeats=.TRUE., n_var=-1, default_c_vals=["X", "X"])
1719 19040 : CALL section_add_keyword(section, keyword)
1720 19040 : CALL keyword_release(keyword)
1721 :
1722 : CALL keyword_create(keyword, __LOCATION__, name="DO_SMEARING", &
1723 : description="Implying smeared occupation. ", &
1724 : n_var=1, type_of_var=logical_t, &
1725 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1726 19040 : CALL section_add_keyword(section, keyword)
1727 19040 : CALL keyword_release(keyword)
1728 :
1729 : CALL keyword_create(keyword, __LOCATION__, name="EXCITON_DESCRIPTORS", &
1730 : description="Compute exciton descriptors. "// &
1731 : "Details given in Manual section about Bethe Salpeter equation.", &
1732 : n_var=1, type_of_var=logical_t, &
1733 19040 : default_l_val=.FALSE.)
1734 19040 : CALL section_add_keyword(section, keyword)
1735 19040 : CALL keyword_release(keyword)
1736 :
1737 : CALL keyword_create(keyword, __LOCATION__, name="DIRECTIONAL_EXCITON_DESCRIPTORS", &
1738 : description="Print cartesian components of exciton descriptors.", &
1739 : n_var=1, type_of_var=logical_t, &
1740 19040 : default_l_val=.FALSE.)
1741 19040 : CALL section_add_keyword(section, keyword)
1742 19040 : CALL keyword_release(keyword)
1743 :
1744 : ! Strings
1745 : CALL keyword_create(keyword, __LOCATION__, name="WFN_RESTART_FILE_NAME", &
1746 : variants=["RESTART_FILE_NAME"], &
1747 : description="Name of the wave function restart file, may include a path."// &
1748 : " If no file is specified, the default is to open the file as generated by"// &
1749 : " the wave function restart print key.", &
1750 : usage="WFN_RESTART_FILE_NAME <FILENAME>", &
1751 38080 : type_of_var=lchar_t)
1752 19040 : CALL section_add_keyword(section, keyword)
1753 19040 : CALL keyword_release(keyword)
1754 :
1755 : ! DIPOLE subsection
1756 : CALL section_create(subsection, __LOCATION__, name="DIPOLE_MOMENTS", &
1757 : description="Parameters to compute oscillator strengths in the dipole approximation.", &
1758 19040 : n_keywords=3, n_subsections=0, repeats=.FALSE.)
1759 :
1760 : CALL keyword_create(keyword, __LOCATION__, name="DIPOLE_FORM", &
1761 : description="Form of dipole transition integrals.", &
1762 : enum_c_vals=s2a("BERRY", "LENGTH", "VELOCITY"), &
1763 : enum_desc=s2a("Based on Berry phase formula (valid for fully periodic molecular systems only)", &
1764 : "Length form ⟨ i | r | j ⟩ (valid for non-periodic molecular systems only)", &
1765 : "Velocity form ⟨ i | d/dr | j ⟩"), &
1766 : enum_i_vals=[tddfpt_dipole_berry, tddfpt_dipole_length, tddfpt_dipole_velocity], &
1767 19040 : default_i_val=tddfpt_dipole_velocity)
1768 19040 : CALL section_add_keyword(subsection, keyword)
1769 19040 : CALL keyword_release(keyword)
1770 :
1771 : CALL keyword_create(keyword, __LOCATION__, name="REFERENCE", &
1772 : description="Reference point to calculate electric "// &
1773 : "dipole moments using the dipole integrals in the length form.", &
1774 : enum_c_vals=s2a("COM", "COAC", "USER_DEFINED", "ZERO"), &
1775 : enum_desc=s2a("Use Center of Mass", &
1776 : "Use Center of Atomic Charges", &
1777 : "Use User-defined Point", &
1778 : "Use Origin of Coordinate System"), &
1779 : enum_i_vals=[use_mom_ref_com, &
1780 : use_mom_ref_coac, &
1781 : use_mom_ref_user, &
1782 : use_mom_ref_zero], &
1783 19040 : default_i_val=use_mom_ref_com)
1784 19040 : CALL section_add_keyword(subsection, keyword)
1785 19040 : CALL keyword_release(keyword)
1786 :
1787 : CALL keyword_create(keyword, __LOCATION__, name="REFERENCE_POINT", &
1788 : description="User-defined reference point.", &
1789 : usage="REFERENCE_POINT x y z", &
1790 19040 : repeats=.FALSE., n_var=3, type_of_var=real_t, unit_str='bohr')
1791 19040 : CALL section_add_keyword(subsection, keyword)
1792 19040 : CALL keyword_release(keyword)
1793 :
1794 19040 : CALL section_add_subsection(section, subsection)
1795 19040 : CALL section_release(subsection)
1796 :
1797 : ! SOC functional
1798 :
1799 : CALL section_create(subsection, __LOCATION__, name="SOC", &
1800 : description="Is jet to be implemented", &
1801 19040 : n_keywords=2, n_subsections=0, repeats=.FALSE.)
1802 :
1803 : CALL keyword_create(keyword, __LOCATION__, name="EPS_FILTER", &
1804 : variants=s2a("EPS_FILTER_MATRIX"), &
1805 : description="The threshold used for sparse matrix operations", &
1806 : usage="EPS_FILTER {real}", &
1807 : type_of_var=real_t, &
1808 19040 : default_r_val=1.0E-10_dp)
1809 19040 : CALL section_add_keyword(subsection, keyword)
1810 19040 : CALL keyword_release(keyword)
1811 :
1812 : CALL keyword_create(keyword, __LOCATION__, name="GRID", &
1813 : variants=["ATOMIC_GRID"], &
1814 : description="Specification of the atomic angular and radial grids for "// &
1815 : "a atomic kind. This keyword must be repeated for all kinds! "// &
1816 : "Usage: GRID < LEBEDEV_GRID > < RADIAL_GRID >", &
1817 : usage="GRID {string} {integer} {integer}", &
1818 38080 : n_var=3, type_of_var=char_t, repeats=.TRUE.)
1819 19040 : CALL section_add_keyword(subsection, keyword)
1820 19040 : CALL keyword_release(keyword)
1821 :
1822 19040 : CALL section_add_subsection(section, subsection)
1823 19040 : CALL section_release(subsection)
1824 :
1825 : ! kernel XC functional
1826 19040 : CALL create_xc_section(subsection)
1827 19040 : CALL section_add_subsection(section, subsection)
1828 19040 : CALL section_release(subsection)
1829 :
1830 : ! MGRID subsection
1831 19040 : CALL create_mgrid_section(subsection, create_subsections=.FALSE.)
1832 19040 : CALL section_add_subsection(section, subsection)
1833 19040 : CALL section_release(subsection)
1834 :
1835 : ! sTDA subsection
1836 19040 : CALL create_stda_section(subsection)
1837 19040 : CALL section_add_subsection(section, subsection)
1838 19040 : CALL section_release(subsection)
1839 :
1840 : ! RSE subsection
1841 19040 : CALL create_res_section(subsection)
1842 19040 : CALL section_add_subsection(section, subsection)
1843 19040 : CALL section_release(subsection)
1844 :
1845 : CALL keyword_create(keyword, __LOCATION__, name="DO_BSE", &
1846 : description="Choosing BSE kernel.", &
1847 19040 : usage="DO_BSE", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1848 19040 : CALL section_add_keyword(section, keyword)
1849 19040 : CALL keyword_release(keyword)
1850 :
1851 : ! LRI subsection
1852 19040 : CALL create_lrigpw_section(subsection)
1853 19040 : CALL section_add_subsection(section, subsection)
1854 19040 : CALL section_release(subsection)
1855 :
1856 : ! LINRES section
1857 19040 : CALL create_linres_section(subsection, create_subsections=.FALSE., default_set_tdlr=.TRUE.)
1858 19040 : CALL section_add_subsection(section, subsection)
1859 19040 : CALL section_release(subsection)
1860 :
1861 : ! PRINT subsection
1862 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
1863 19040 : description="Printing of information during the TDDFT run.", repeats=.FALSE.)
1864 :
1865 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="PROGRAM_BANNER", &
1866 : description="Controls the printing of the banner for TDDFPT program", &
1867 19040 : print_level=silent_print_level, filename="__STD_OUT__")
1868 19040 : CALL section_add_subsection(subsection, print_key)
1869 19040 : CALL section_release(print_key)
1870 :
1871 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="GUESS_VECTORS", &
1872 : description="Controls the printing of initial guess vectors.", &
1873 19040 : print_level=low_print_level, filename="__STD_OUT__")
1874 19040 : CALL section_add_subsection(subsection, print_key)
1875 19040 : CALL section_release(print_key)
1876 :
1877 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="ITERATION_INFO", &
1878 : description="Controls the printing of basic iteration information "// &
1879 : "during the TDDFT run.", &
1880 19040 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
1881 19040 : CALL section_add_subsection(subsection, print_key)
1882 19040 : CALL section_release(print_key)
1883 :
1884 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="DETAILED_ENERGY", &
1885 : description="Controls the printing of detailed energy information "// &
1886 : "during the TDDFT run.", &
1887 19040 : print_level=medium_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
1888 19040 : CALL section_add_subsection(subsection, print_key)
1889 19040 : CALL section_release(print_key)
1890 :
1891 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="BASIS_SET_FILE", &
1892 : description="Controls the printing of a file with all basis sets used.", &
1893 19040 : print_level=debug_print_level, filename="BASIS_SETS")
1894 19040 : CALL section_add_subsection(subsection, print_key)
1895 19040 : CALL section_release(print_key)
1896 :
1897 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="RESTART", &
1898 : description="Controls the dumping of the MO restart file during TDDFPT. "// &
1899 : "By default keeps a short history of three restarts.", &
1900 : print_level=low_print_level, common_iter_levels=3, &
1901 : each_iter_names=s2a("TDDFT_SCF"), each_iter_values=[10], &
1902 19040 : add_last=add_last_numeric, filename="RESTART")
1903 : CALL keyword_create(keyword, __LOCATION__, name="BACKUP_COPIES", &
1904 : description="Specifies the maximum number of backup copies.", &
1905 : usage="BACKUP_COPIES {int}", &
1906 19040 : default_i_val=1)
1907 19040 : CALL section_add_keyword(print_key, keyword)
1908 19040 : CALL keyword_release(keyword)
1909 19040 : CALL section_add_subsection(subsection, print_key)
1910 19040 : CALL section_release(print_key)
1911 :
1912 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="NTO_ANALYSIS", &
1913 : description="Perform a natural transition orbital analysis.", &
1914 19040 : print_level=medium_print_level)
1915 : CALL keyword_create(keyword, __LOCATION__, name="THRESHOLD", &
1916 : description="Threshold for sum of NTO eigenvalues considered", &
1917 : usage="Threshold 0.95", &
1918 : n_var=1, &
1919 : type_of_var=real_t, &
1920 19040 : default_r_val=0.975_dp)
1921 19040 : CALL section_add_keyword(print_key, keyword)
1922 19040 : CALL keyword_release(keyword)
1923 : CALL keyword_create(keyword, __LOCATION__, name="INTENSITY_THRESHOLD", &
1924 : description="Threshold for oscillator strength to screen states.", &
1925 : usage="Intensity_threshold 0.01", &
1926 : n_var=1, &
1927 : type_of_var=real_t, &
1928 19040 : default_r_val=0.0_dp)
1929 19040 : CALL section_add_keyword(print_key, keyword)
1930 19040 : CALL keyword_release(keyword)
1931 : CALL keyword_create(keyword, __LOCATION__, name="STATE_LIST", &
1932 : description="Specifies a list of states for the NTO calculations.", &
1933 : usage="STATE_LIST {integer} {integer} .. {integer}", &
1934 19040 : n_var=-1, type_of_var=integer_t)
1935 19040 : CALL section_add_keyword(print_key, keyword)
1936 19040 : CALL keyword_release(keyword)
1937 : CALL keyword_create(keyword, __LOCATION__, name="CUBE_FILES", &
1938 : description="Print NTOs on Cube Files", &
1939 : usage="CUBE_FILES {logical}", repeats=.FALSE., n_var=1, &
1940 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE., type_of_var=logical_t)
1941 19040 : CALL section_add_keyword(print_key, keyword)
1942 19040 : CALL keyword_release(keyword)
1943 : CALL keyword_create(keyword, __LOCATION__, name="STRIDE", &
1944 : description="The stride (X,Y,Z) used to write the cube file "// &
1945 : "(larger values result in smaller cube files). Provide 3 numbers (for X,Y,Z) or"// &
1946 : " 1 number valid for all components.", &
1947 19040 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=[2, 2, 2], type_of_var=integer_t)
1948 19040 : CALL section_add_keyword(print_key, keyword)
1949 19040 : CALL keyword_release(keyword)
1950 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
1951 : description="append the cube files when they already exist", &
1952 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1953 19040 : CALL section_add_keyword(print_key, keyword)
1954 19040 : CALL keyword_release(keyword)
1955 19040 : CALL section_add_subsection(subsection, print_key)
1956 19040 : CALL section_release(print_key)
1957 :
1958 : CALL cp_print_key_section_create(print_key, __LOCATION__, "MOS_MOLDEN", &
1959 : description="Write the NTO in Molden file format, for visualisation.", &
1960 19040 : print_level=debug_print_level + 1, add_last=add_last_numeric, filename="MOS")
1961 : CALL keyword_create(keyword, __LOCATION__, name="NDIGITS", &
1962 : description="Specifies the number of significant digits retained. 3 is OK for visualization.", &
1963 : usage="NDIGITS {int}", &
1964 19040 : default_i_val=3)
1965 19040 : CALL section_add_keyword(print_key, keyword)
1966 19040 : CALL keyword_release(keyword)
1967 : CALL keyword_create(keyword, __LOCATION__, name="GTO_KIND", &
1968 : description="Representation of Gaussian-type orbitals", &
1969 : default_i_val=gto_spherical, &
1970 : enum_c_vals=s2a("CARTESIAN", "SPHERICAL"), &
1971 : enum_desc=s2a( &
1972 : "Cartesian Gaussian orbitals. Use with caution", &
1973 : "Spherical Gaussian orbitals. Incompatible with VMD"), &
1974 19040 : enum_i_vals=[gto_cartesian, gto_spherical])
1975 19040 : CALL section_add_keyword(print_key, keyword)
1976 19040 : CALL keyword_release(keyword)
1977 19040 : CALL section_add_subsection(subsection, print_key)
1978 19040 : CALL section_release(print_key)
1979 :
1980 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="NAMD_PRINT", &
1981 : description="Controls the printout required for NAMD with NEWTONX.", &
1982 19040 : print_level=debug_print_level + 1, filename="CP2K_NEWTONX")
1983 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_VIRTUALS", &
1984 : description="Print occupied AND virtual molecular orbital coefficients", &
1985 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1986 19040 : CALL section_add_keyword(print_key, keyword)
1987 19040 : CALL keyword_release(keyword)
1988 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_PHASES", &
1989 : description="Print phases of occupied and virtuals MOs.", &
1990 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1991 19040 : CALL section_add_keyword(print_key, keyword)
1992 19040 : CALL keyword_release(keyword)
1993 : CALL keyword_create(keyword, __LOCATION__, name="SCALE_WITH_PHASES", &
1994 : description="Scale ES eigenvectors with phases of occupied and virtuals MOs.", &
1995 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1996 19040 : CALL section_add_keyword(print_key, keyword)
1997 19040 : CALL keyword_release(keyword)
1998 19040 : CALL section_add_subsection(subsection, print_key)
1999 19040 : CALL section_release(print_key)
2000 :
2001 : !! SOC PRINT SECTION
2002 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="SOC_PRINT", &
2003 : description="Controls the printout of the tddfpt2_soc modul", &
2004 19040 : print_level=debug_print_level + 1, filename="SOC")
2005 : CALL keyword_create(keyword, __LOCATION__, name="UNIT_eV", &
2006 : description="Will detrement if output in eVolt will be printef.", &
2007 19040 : default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
2008 19040 : CALL section_add_keyword(print_key, keyword)
2009 19040 : CALL keyword_release(keyword)
2010 : CALL keyword_create(keyword, __LOCATION__, name="UNIT_wn", &
2011 : description="Will detrement if output in wavenumbers will be printed.", &
2012 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2013 19040 : CALL section_add_keyword(print_key, keyword)
2014 19040 : CALL keyword_release(keyword)
2015 : CALL keyword_create(keyword, __LOCATION__, name="SPLITTING", &
2016 : description="Will add the SOC-Splitting as additional output", &
2017 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2018 19040 : CALL section_add_keyword(print_key, keyword)
2019 19040 : CALL keyword_release(keyword)
2020 : CALL keyword_create(keyword, __LOCATION__, name="SOME", &
2021 : description="Will add the SOC-Matrix as additional output in a different file", &
2022 19040 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2023 19040 : CALL section_add_keyword(print_key, keyword)
2024 19040 : CALL keyword_release(keyword)
2025 19040 : CALL section_add_subsection(subsection, print_key)
2026 19040 : CALL section_release(print_key)
2027 :
2028 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="FORCES", &
2029 : description="Controls the calculation and printing of excited state forces. "// &
2030 : "This needs a RUN_TYPE that includes force evaluation, e.g. ENERGY_FORCE", &
2031 19040 : print_level=debug_print_level, filename="TDFORCE")
2032 : CALL keyword_create(keyword, __LOCATION__, name="LIST", &
2033 : description="Specifies a list of states for the force calculations.", &
2034 : usage="LIST {integer} {integer} .. {integer}", repeats=.TRUE., &
2035 19040 : n_var=-1, type_of_var=integer_t)
2036 19040 : CALL section_add_keyword(print_key, keyword)
2037 19040 : CALL keyword_release(keyword)
2038 : CALL keyword_create(keyword, __LOCATION__, name="THRESHOLD", &
2039 : description="Threshold for oszillator strength to screen states.", &
2040 : usage="Threshold 0.01", &
2041 : n_var=1, &
2042 : type_of_var=real_t, &
2043 19040 : default_r_val=0.0_dp)
2044 19040 : CALL section_add_keyword(print_key, keyword)
2045 19040 : CALL keyword_release(keyword)
2046 19040 : CALL section_add_subsection(subsection, print_key)
2047 19040 : CALL section_release(print_key)
2048 :
2049 19040 : CALL section_add_subsection(section, subsection)
2050 19040 : CALL section_release(subsection)
2051 :
2052 19040 : END SUBROUTINE create_tddfpt2_section
2053 :
2054 : ! **************************************************************************************************
2055 : !> \brief creates the stda input section (simplified Tamm Dancoff Approximation)
2056 : !> \param section the section to create
2057 : ! **************************************************************************************************
2058 19040 : SUBROUTINE create_stda_section(section)
2059 : TYPE(section_type), POINTER :: section
2060 :
2061 : TYPE(keyword_type), POINTER :: keyword
2062 :
2063 19040 : CPASSERT(.NOT. ASSOCIATED(section))
2064 : CALL section_create(section, __LOCATION__, name="sTDA", &
2065 : description="parameters needed and setup for sTDA calculations", &
2066 19040 : n_keywords=3, n_subsections=0, repeats=.FALSE.)
2067 19040 : NULLIFY (keyword)
2068 :
2069 : CALL keyword_create(keyword, __LOCATION__, name="FRACTION", &
2070 : variants=["HFX_FRACTION"], &
2071 : description="The fraction of TB Hartree-Fock exchange to use in the Kernel. "// &
2072 : "0.0 implies no HFX part is used in the kernel. ", &
2073 38080 : usage="FRACTION 0.0", default_r_val=0.0_dp)
2074 19040 : CALL section_add_keyword(section, keyword)
2075 19040 : CALL keyword_release(keyword)
2076 :
2077 : ! even if scaling parameter for exchange FRACTION (see above) is zero, the semi-empirical electron repulsion
2078 : ! operator for exchange is not, so that a keyword is required to switch off sTDA exchange (if wanted)
2079 : CALL keyword_create(keyword, __LOCATION__, name="DO_EXCHANGE", &
2080 : description="Explicitly including or switching off sTDA exchange", &
2081 19040 : usage="DO_EXCHANGE", default_l_val=.TRUE., lone_keyword_l_val=.TRUE.)
2082 19040 : CALL section_add_keyword(section, keyword)
2083 19040 : CALL keyword_release(keyword)
2084 :
2085 : CALL keyword_create(keyword, __LOCATION__, name="DO_EWALD", &
2086 : description="Use Ewald type method for Coulomb interaction", &
2087 19040 : usage="DO_EWALD", default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2088 19040 : CALL section_add_keyword(section, keyword)
2089 19040 : CALL keyword_release(keyword)
2090 :
2091 : CALL keyword_create(keyword, __LOCATION__, name="EPS_TD_FILTER", &
2092 : description="Threshold for filtering the transition density matrix", &
2093 19040 : usage="EPS_TD_FILTER epsf", default_r_val=1.e-10_dp)
2094 19040 : CALL section_add_keyword(section, keyword)
2095 19040 : CALL keyword_release(keyword)
2096 :
2097 : CALL keyword_create(keyword, __LOCATION__, name="MATAGA_NISHIMOTO_CEXP", &
2098 : description="Exponent used in Mataga-Nishimoto formula for Coulomb (alpha). "// &
2099 : "Default value is method dependent!", &
2100 19040 : usage="MATAGA_NISHIMOTO_CEXP cexp", default_r_val=-99.0_dp)
2101 19040 : CALL section_add_keyword(section, keyword)
2102 19040 : CALL keyword_release(keyword)
2103 :
2104 : CALL keyword_create(keyword, __LOCATION__, name="MATAGA_NISHIMOTO_XEXP", &
2105 : description="Exponent used in Mataga-Nishimoto formula for Exchange (beta). "// &
2106 : "Default value is method dependent!", &
2107 19040 : usage="MATAGA_NISHIMOTO_XEXP xexp", default_r_val=-99.0_dp)
2108 19040 : CALL section_add_keyword(section, keyword)
2109 19040 : CALL keyword_release(keyword)
2110 :
2111 : CALL keyword_create(keyword, __LOCATION__, name="COULOMB_SR_CUT", &
2112 : description="Maximum range of short range part of Coulomb interaction.", &
2113 19040 : usage="COULOMB_SR_CUT rcut", default_r_val=20.0_dp)
2114 19040 : CALL section_add_keyword(section, keyword)
2115 19040 : CALL keyword_release(keyword)
2116 :
2117 : CALL keyword_create(keyword, __LOCATION__, name="COULOMB_SR_EPS", &
2118 : description="Threshold for short range part of Coulomb interaction.", &
2119 19040 : usage="COULOMB_SR_EPS sreps", default_r_val=1.e-03_dp)
2120 19040 : CALL section_add_keyword(section, keyword)
2121 19040 : CALL keyword_release(keyword)
2122 :
2123 19040 : END SUBROUTINE create_stda_section
2124 :
2125 : ! **************************************************************************************************
2126 : !> \brief creates the RES input section (Reduced Excitation Space)
2127 : !> \param section the section to create
2128 : ! **************************************************************************************************
2129 19040 : SUBROUTINE create_res_section(section)
2130 : TYPE(section_type), POINTER :: section
2131 :
2132 : TYPE(keyword_type), POINTER :: keyword
2133 :
2134 19040 : CPASSERT(.NOT. ASSOCIATED(section))
2135 : CALL section_create(section, __LOCATION__, name="REDUCED_EXCITATION_SPACE", &
2136 : description="Sets up a restricted (reduced) excitation space for TDDFT", &
2137 19040 : n_keywords=3, n_subsections=0, repeats=.FALSE.)
2138 :
2139 19040 : NULLIFY (keyword)
2140 : CALL keyword_create(keyword, __LOCATION__, &
2141 : name="_SECTION_PARAMETERS_", &
2142 : description="Controls the activation of RES calculation.", &
2143 : default_l_val=.FALSE., &
2144 19040 : lone_keyword_l_val=.TRUE.)
2145 19040 : CALL section_add_keyword(section, keyword)
2146 19040 : CALL keyword_release(keyword)
2147 :
2148 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_WINDOW", &
2149 : description="Upper and lower cutoffs [eV] for orbitals to be included for excitations. ", &
2150 : usage="ENERGY_WINDOW -5.0 0.0", default_r_vals=[-1.0E10_dp, 1.0E10_dp], &
2151 19040 : type_of_var=real_t, unit_str="eV")
2152 19040 : CALL section_add_keyword(section, keyword)
2153 19040 : CALL keyword_release(keyword)
2154 :
2155 : CALL keyword_create(keyword, __LOCATION__, name="UPPER_ENERGY_CUTOFF", &
2156 : description="Upper energy cutoff [eV] for orbitals to be included in excitations.", &
2157 : usage="UPPER_ENERGY_CUTOFF -5.0", default_r_val=1.0E10_dp, &
2158 19040 : type_of_var=real_t, unit_str="eV")
2159 19040 : CALL section_add_keyword(section, keyword)
2160 19040 : CALL keyword_release(keyword)
2161 :
2162 : CALL keyword_create(keyword, __LOCATION__, name="LOWER_ENERGY_CUTOFF", &
2163 : description="Lower energy cutoff [eV] for orbitals to be included in excitations.", &
2164 : usage="LOWER_ENERGY_CUTOFF -5.0", default_r_val=-1.0E10_dp, &
2165 19040 : type_of_var=real_t, unit_str="eV")
2166 19040 : CALL section_add_keyword(section, keyword)
2167 19040 : CALL keyword_release(keyword)
2168 :
2169 : CALL keyword_create(keyword, __LOCATION__, name="MOLECULE_LIST", &
2170 : description="Indices of molecules to be excited. "// &
2171 : "This implies the calculation of molecular states through orbital location "// &
2172 : "and subspace diagonalization.", &
2173 : usage="MOLECULE_LIST {integer} {integer} .. {integer} ", &
2174 19040 : n_var=-1, type_of_var=integer_t, repeats=.FALSE.)
2175 19040 : CALL section_add_keyword(section, keyword)
2176 19040 : CALL keyword_release(keyword)
2177 :
2178 19040 : END SUBROUTINE create_res_section
2179 :
2180 : ! **************************************************************************************************
2181 : !> \brief creates an input section for electronic band structure calculations
2182 : !> \param section section to create
2183 : !> \par History
2184 : !> * 07.2023 created [Jan Wilhelm]
2185 : ! **************************************************************************************************
2186 9520 : SUBROUTINE create_bandstructure_section(section)
2187 : TYPE(section_type), POINTER :: section
2188 :
2189 : TYPE(keyword_type), POINTER :: keyword
2190 : TYPE(section_type), POINTER :: subsection
2191 :
2192 9520 : CPASSERT(.NOT. ASSOCIATED(section))
2193 : CALL section_create(section, __LOCATION__, name="BANDSTRUCTURE", &
2194 : description="Parameters needed to set up a calculation for "// &
2195 : "electronic level energies of molecules and the electronic band "// &
2196 : "structure of materials from post-SCF schemes (GW, perturbative "// &
2197 : "spin-orbit coupling). Also, the density of states (DOS), "// &
2198 : "projected density of states (PDOS), local density of states (LDOS), "// &
2199 : "local valence band maximum (LVBM), local conduction band minimum "// &
2200 : "(LCBM) and local band gap can be calculated. Please note that "// &
2201 : "all methods in this section start from a Gamma-only DFT SCF. "// &
2202 : "You need to make sure that the cell chosen in the DFT SCF is "// &
2203 : "converged in the cell size. Band structures are computed "// &
2204 : "for the primitive cell (i.e. the smallest possible unit cell of "// &
2205 : "the input structure which is detected automatically). Moreover, "// &
2206 : "spin-orbit coupling (SOC) on eigenvalues and band structures is "// &
2207 : "available using Hartwigsen-Goedecker-Hutter "// &
2208 : "pseudopotentials.", &
2209 9520 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
2210 :
2211 9520 : NULLIFY (keyword, subsection)
2212 : CALL keyword_create(keyword, __LOCATION__, &
2213 : name="_SECTION_PARAMETERS_", &
2214 : description="Controls the activation of the band structure calculation.", &
2215 : default_l_val=.FALSE., &
2216 9520 : lone_keyword_l_val=.TRUE.)
2217 9520 : CALL section_add_keyword(section, keyword)
2218 9520 : CALL keyword_release(keyword)
2219 :
2220 : ! here we generate a subsection for getting a k-point path for the bandstructure
2221 9520 : CALL create_kpoint_set_section(subsection, "BANDSTRUCTURE_PATH")
2222 9520 : CALL section_add_subsection(section, subsection)
2223 9520 : CALL section_release(subsection)
2224 :
2225 9520 : CALL create_gw_section(subsection)
2226 9520 : CALL section_add_subsection(section, subsection)
2227 9520 : CALL section_release(subsection)
2228 :
2229 9520 : CALL create_soc_section(subsection)
2230 9520 : CALL section_add_subsection(section, subsection)
2231 9520 : CALL section_release(subsection)
2232 :
2233 9520 : CALL create_dos_section(subsection)
2234 9520 : CALL section_add_subsection(section, subsection)
2235 9520 : CALL section_release(subsection)
2236 :
2237 9520 : END SUBROUTINE create_bandstructure_section
2238 :
2239 : ! **************************************************************************************************
2240 : !> \brief creates an input section for a GW calculation for the electronic band structure
2241 : !> \param section section to create
2242 : !> \par History
2243 : !> * 07.2023 created [Jan Wilhelm]
2244 : ! **************************************************************************************************
2245 9520 : SUBROUTINE create_gw_section(section)
2246 : TYPE(section_type), POINTER :: section
2247 :
2248 : TYPE(keyword_type), POINTER :: keyword
2249 : TYPE(section_type), POINTER :: print_key, subsection
2250 :
2251 9520 : CPASSERT(.NOT. ASSOCIATED(section))
2252 : CALL section_create(section, __LOCATION__, name="GW", &
2253 : description="Parameters needed to set up a GW calculation for "// &
2254 : "electronic level energies $\varepsilon_{n\mathbf{k}}^{G_0W_0}$ "// &
2255 : "of molecules and the band structure of materials: "// &
2256 : "$\varepsilon_{n\mathbf{k}}^{G_0W_0}= "// &
2257 : "\varepsilon_{n\mathbf{k}}^\text{DFT}+\Sigma_{n\mathbf{k}} "// &
2258 : "-v^\text{xc}_{n\mathbf{k}}$. "// &
2259 : "For the GW algorithm for molecules, see "// &
2260 : "<https://doi.org/10.1021/acs.jctc.0c01282>. "// &
2261 : "For 2D materials, see <https://doi.org/10.1021/acs.jctc.3c01230>.", &
2262 9520 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
2263 :
2264 9520 : NULLIFY (keyword)
2265 : CALL keyword_create(keyword, __LOCATION__, &
2266 : name="_SECTION_PARAMETERS_", &
2267 : description="Controls the activation of the GW calculation.", &
2268 : default_l_val=.FALSE., &
2269 9520 : lone_keyword_l_val=.TRUE.)
2270 9520 : CALL section_add_keyword(section, keyword)
2271 9520 : CALL keyword_release(keyword)
2272 :
2273 : CALL keyword_create(keyword, __LOCATION__, name="NUM_TIME_FREQ_POINTS", &
2274 : description="Number of discrete points for the imaginary-time "// &
2275 : "grid and the imaginary-frequency grid. The more points, the more "// &
2276 : "precise is the calculation. Typically, 10 points are good "// &
2277 : "for 0.1 eV precision of band structures and molecular energy "// &
2278 : "levels, 20 points for 0.03 eV precision, "// &
2279 : "and 30 points for 0.01 eV precision, see Table I in "// &
2280 : "<https://doi.org/10.1021/acs.jctc.0c01282>. GW computation time "// &
2281 : "increases linearly with `NUM_TIME_FREQ_POINTS`.", &
2282 : usage="NUM_TIME_FREQ_POINTS 30", &
2283 9520 : default_i_val=30)
2284 9520 : CALL section_add_keyword(section, keyword)
2285 9520 : CALL keyword_release(keyword)
2286 :
2287 : CALL keyword_create(keyword, __LOCATION__, name="EPS_FILTER", &
2288 : description="Determines a threshold for the DBCSR based sparse "// &
2289 : "multiplications. Normally, `EPS_FILTER` determines accuracy "// &
2290 : "and timing of low-scaling GW calculations. (Lower filter means "// &
2291 : "higher numerical precision, but higher computational cost.)", &
2292 : usage="EPS_FILTER 1.0E-6", &
2293 9520 : default_r_val=1.0E-8_dp)
2294 9520 : CALL section_add_keyword(section, keyword)
2295 9520 : CALL keyword_release(keyword)
2296 :
2297 : CALL keyword_create(keyword, __LOCATION__, name="REGULARIZATION_MINIMAX", &
2298 : description="Parameter to regularize the Fourier transformation with minimax grids. "// &
2299 : "In case the parameter 0.0 is chosen, no regularization is performed.", &
2300 : usage="REGULARIZATION_MINIMAX 1.0E-4", &
2301 9520 : default_r_val=-1.0_dp)
2302 9520 : CALL section_add_keyword(section, keyword)
2303 9520 : CALL keyword_release(keyword)
2304 :
2305 : CALL keyword_create(keyword, __LOCATION__, name="REGULARIZATION_RI", &
2306 : description="Parameter for RI regularization, setting a negative "// &
2307 : "value triggers the default value. Affects RI basis set convergence "// &
2308 : "but in any case large RI basis will give RI basis set convergence.", &
2309 : usage="REGULARIZATION_RI 1.0E-4", &
2310 9520 : default_r_val=-1.0_dp)
2311 9520 : CALL section_add_keyword(section, keyword)
2312 9520 : CALL keyword_release(keyword)
2313 :
2314 : CALL keyword_create(keyword, __LOCATION__, name="CUTOFF_RADIUS_RI", &
2315 : description="The cutoff radius (in Angstrom) for the truncated "// &
2316 : "Coulomb operator. The larger the cutoff radius, the faster "// &
2317 : "converges the resolution of the identity (RI) with respect to the "// &
2318 : "RI basis set size. Larger cutoff radius means higher computational "// &
2319 : "cost.", &
2320 : usage="CUTOFF_RADIUS_RI 3.0", &
2321 : default_r_val=cp_unit_to_cp2k(value=3.0_dp, unit_str="angstrom"), &
2322 9520 : type_of_var=real_t, unit_str="angstrom")
2323 9520 : CALL section_add_keyword(section, keyword)
2324 9520 : CALL keyword_release(keyword)
2325 :
2326 : CALL keyword_create(keyword, __LOCATION__, name="MEMORY_PER_PROC", &
2327 : description="Specify the available memory per MPI process. Set "// &
2328 : "`MEMORY_PER_PROC` as accurately as possible for good performance. If "// &
2329 : "`MEMORY_PER_PROC` is set lower as the actually available "// &
2330 : "memory per MPI process, the performance will be "// &
2331 : "bad; if `MEMORY_PER_PROC` is set higher as the actually "// &
2332 : "available memory per MPI process, the program might run out of "// &
2333 : "memory. You can calculate `MEMORY_PER_PROC` as follows: "// &
2334 : "Get the memory per node on your machine, mem_per_node "// &
2335 : "(for example, from a supercomputer website, typically between "// &
2336 : "100 GB and 2 TB), get the number of "// &
2337 : "MPI processes per node, n_MPI_proc_per_node"// &
2338 : " (for example from your run-script; if you "// &
2339 : "use slurm, the number behind '--ntasks-per-node' is the number "// &
2340 : "of MPI processes per node). Then calculate "// &
2341 : "`MEMORY_PER_PROC` = mem_per_node / n_MPI_proc_per_node "// &
2342 : "(typically between 2 GB and 50 GB). Unit of keyword: Gigabyte (GB).", &
2343 : usage="MEMORY_PER_PROC 16", &
2344 9520 : default_r_val=2.0_dp)
2345 9520 : CALL section_add_keyword(section, keyword)
2346 9520 : CALL keyword_release(keyword)
2347 :
2348 : CALL keyword_create(keyword, __LOCATION__, name="APPROX_KP_EXTRAPOL", &
2349 : description="If true, use only a 4x4 kpoint mesh for frequency "// &
2350 : "points $\omega_j, j \ge 2$ (instead of a 4x4 and 6x6 k-point mesh). "// &
2351 : "The k-point extrapolation of $W_{PQ}(i\omega_j,\mathbf{q})$ "// &
2352 : "is done approximately from $W_{PQ}(i\omega_1,\mathbf{q})$.", &
2353 : usage="APPROX_KP_EXTRAPOL", &
2354 9520 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
2355 9520 : CALL section_add_keyword(section, keyword)
2356 9520 : CALL keyword_release(keyword)
2357 :
2358 : CALL keyword_create(keyword, __LOCATION__, name="SIZE_LATTICE_SUM", &
2359 : description="Parameter determines how many neighbor cells $\mathbf{R}$ "// &
2360 : "are used for computing "// &
2361 : "$V_{PQ}(\mathbf{k}) = "// &
2362 : "\sum_{\mathbf{R}} e^{i\mathbf{k}\cdot\mathbf{R}}\,\langle P, "// &
2363 : "\text{cell}{=}\mathbf{0}|1/r|Q,\text{cell}{=}\mathbf{R}\rangle$. "// &
2364 : "Normally, parameter does not need to be touched.", &
2365 : usage="SIZE_LATTICE_SUM 4", &
2366 9520 : default_i_val=3)
2367 9520 : CALL section_add_keyword(section, keyword)
2368 9520 : CALL keyword_release(keyword)
2369 :
2370 : CALL keyword_create( &
2371 : keyword, __LOCATION__, name="KPOINTS_W", &
2372 : description="Monkhorst-Pack k-point mesh of size N_x, N_y, N_z for calculating "// &
2373 : "$W_{PQ}^\mathbf{R}=\int_\text{BZ}\frac{d\mathbf{k}}{\Omega_\text{BZ}}\, "// &
2374 : "e^{-i\mathbf{k}\cdot\mathbf{R}}\,W_{PQ}(\mathbf{k})$. "// &
2375 : "For non-periodic directions α, choose N_α = 1. "// &
2376 : "Automatic choice of the k-point mesh for negative "// &
2377 : "values, i.e. KPOINTS_W -1 -1 -1. "// &
2378 : "K-point extrapolation of W is automatically switched on.", &
2379 : usage="KPOINTS_W N_x N_y N_z", &
2380 9520 : n_var=3, type_of_var=integer_t, default_i_vals=[-1, -1, -1])
2381 9520 : CALL section_add_keyword(section, keyword)
2382 9520 : CALL keyword_release(keyword)
2383 :
2384 : CALL keyword_create(keyword, __LOCATION__, name="HEDIN_SHIFT", &
2385 : description="If true, use Hedin's shift in G0W0, evGW and evGW0. "// &
2386 : "Details see in Li et al. JCTC 18, 7570 "// &
2387 : "(2022), Figure 1. G0W0 with Hedin's shift should give "// &
2388 : "similar GW eigenvalues as evGW0; at a lower "// &
2389 : "computational cost.", &
2390 : usage="HEDIN_SHIFT", &
2391 : default_l_val=.FALSE., &
2392 9520 : lone_keyword_l_val=.TRUE.)
2393 9520 : CALL section_add_keyword(section, keyword)
2394 9520 : CALL keyword_release(keyword)
2395 :
2396 : CALL keyword_create(keyword, __LOCATION__, name="FREQ_MAX_FIT", &
2397 : description="For analytic continuation, a fit on Σ(iω) is performed. "// &
2398 : "This fit is then evaluated at a real frequency, Σ(ω), which is used "// &
2399 : "in the quasiparticle equation "// &
2400 : "$\varepsilon_{n\mathbf{k}}^{G_0W_0}= "// &
2401 : "\varepsilon_{n\mathbf{k}}^\text{DFT}+\Sigma_{n\mathbf{k}} "// &
2402 : "-v^\text{xc}_{n\mathbf{k}}$. The keyword FREQ_MAX_FIT "// &
2403 : "determines fitting range for the self-energy Σ(iω) on "// &
2404 : "imaginary axis: i*[0, ω_max] for empty orbitals/bands, i*[-ω_max,0] "// &
2405 : "for occ orbitals. A smaller ω_max might lead to better numerical "// &
2406 : "stability (i.e., if you observe clearly wrong GW eigenvalues/bands "// &
2407 : "around HOMO/LUMO, decreasing ω_max might fix this issue). "// &
2408 : "A small benchmark of ω_max is contained in Fig. 5 of "// &
2409 : "J. Wilhelm et al., JCTC 12, 3623-3635 (2016). "// &
2410 : "Note that we used ω_max = 1 Ha = 27.211 eV in the benchmark "// &
2411 : "M. Azizi et al., PRB 109, 245101 (2024).", &
2412 : unit_str="eV", &
2413 : usage="FREQ_MAX_FIT 20.0", &
2414 9520 : default_r_val=cp_unit_to_cp2k(value=10.0_dp, unit_str="eV"))
2415 9520 : CALL section_add_keyword(section, keyword)
2416 9520 : CALL keyword_release(keyword)
2417 :
2418 9520 : NULLIFY (subsection, print_key)
2419 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
2420 : description="Printing of GW restarts.", &
2421 9520 : n_keywords=2, n_subsections=1, repeats=.FALSE.)
2422 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RESTART", &
2423 : description="Controls the printing of restart files "// &
2424 : "for χ, W, Σ.", &
2425 : filename="", print_level=low_print_level, &
2426 9520 : common_iter_levels=3)
2427 9520 : CALL section_add_subsection(subsection, print_key)
2428 9520 : CALL section_release(print_key)
2429 :
2430 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_DBT_CONTRACT", &
2431 : description="Prints information of contraction routines.", &
2432 : usage="PRINT_DBT_CONTRACT", &
2433 : default_l_val=.FALSE., &
2434 9520 : lone_keyword_l_val=.TRUE.)
2435 9520 : CALL section_add_keyword(subsection, keyword)
2436 9520 : CALL keyword_release(keyword)
2437 :
2438 : CALL keyword_create(keyword, __LOCATION__, name="PRINT_DBT_CONTRACT_VERBOSE", &
2439 : description="Prints verbose information of contraction routines.", &
2440 : usage="PRINT_DBT_CONTRACT_VERBOSE", &
2441 : default_l_val=.FALSE., &
2442 9520 : lone_keyword_l_val=.TRUE.)
2443 9520 : CALL section_add_keyword(subsection, keyword)
2444 9520 : CALL keyword_release(keyword)
2445 :
2446 9520 : CALL section_add_subsection(section, subsection)
2447 9520 : CALL section_release(subsection)
2448 :
2449 9520 : END SUBROUTINE create_gw_section
2450 :
2451 : ! **************************************************************************************************
2452 : !> \brief creates an input section for calculation SOC for the electronic band structure
2453 : !> \param section section to create
2454 : !> \par History
2455 : !> * 09.2023 created [Jan Wilhelm]
2456 : ! **************************************************************************************************
2457 9520 : SUBROUTINE create_soc_section(section)
2458 : TYPE(section_type), POINTER :: section
2459 :
2460 : TYPE(keyword_type), POINTER :: keyword
2461 :
2462 9520 : CPASSERT(.NOT. ASSOCIATED(section))
2463 : CALL section_create(section, __LOCATION__, name="SOC", &
2464 : description="Switch on or off spin-orbit coupling. Use SOC "// &
2465 : "parameters from non-local pseudopotentials as given in "// &
2466 : "Hartwigsen, Goedecker, Hutter, Eq.(18), (19), "// &
2467 : "<https://doi.org/10.1103/PhysRevB.58.3641>, "// &
2468 : "$V_{\mu\nu}^{\mathrm{SOC}, (\alpha)} = "// &
2469 : "(\hbar/2) \langle \phi_\mu | \sum_l \Delta "// &
2470 : "V_l^\mathrm{SO}(\mathbf{r},\mathbf{r}') "// &
2471 : "L^{(\alpha)} | \phi_\nu \rangle, "// &
2472 : "\alpha = x, y, z$.", &
2473 9520 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
2474 :
2475 9520 : NULLIFY (keyword)
2476 : CALL keyword_create(keyword, __LOCATION__, &
2477 : name="_SECTION_PARAMETERS_", &
2478 : description="Controls the activation of the SOC calculation.", &
2479 : default_l_val=.FALSE., &
2480 9520 : lone_keyword_l_val=.TRUE.)
2481 9520 : CALL section_add_keyword(section, keyword)
2482 9520 : CALL keyword_release(keyword)
2483 :
2484 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_WINDOW", &
2485 : description="Apply SOC only for states with eigenvalues in the "// &
2486 : "interval $[\varepsilon_\mathrm{VBM}-E_\mathrm{window}/2, "// &
2487 : "\varepsilon_\mathrm{CBM}+E_\mathrm{window}/2]$. Might be necessary "// &
2488 : "to use for large systems to prevent numerical instabilities.", &
2489 : usage="ENERGY_WINDOW 5.0", &
2490 : default_r_val=cp_unit_to_cp2k(value=40.0_dp, unit_str="eV"), &
2491 9520 : unit_str="eV")
2492 9520 : CALL section_add_keyword(section, keyword)
2493 9520 : CALL keyword_release(keyword)
2494 :
2495 9520 : END SUBROUTINE create_soc_section
2496 :
2497 : ! **************************************************************************************************
2498 : !> \brief input section for computing the density of states and the projected density of states
2499 : !> \param section section to create
2500 : !> \par History
2501 : !> * 09.2023 created [Jan Wilhelm]
2502 : ! **************************************************************************************************
2503 9520 : SUBROUTINE create_dos_section(section)
2504 : TYPE(section_type), POINTER :: section
2505 :
2506 : TYPE(keyword_type), POINTER :: keyword
2507 : TYPE(section_type), POINTER :: subsection
2508 :
2509 9520 : CPASSERT(.NOT. ASSOCIATED(section))
2510 : CALL section_create(section, __LOCATION__, name="DOS", &
2511 : description="Parameters needed to calculate the density of states "// &
2512 : "(DOS) and the projected density of states (PDOS).", &
2513 9520 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
2514 :
2515 9520 : NULLIFY (keyword)
2516 : CALL keyword_create(keyword, __LOCATION__, &
2517 : name="_SECTION_PARAMETERS_", &
2518 : description="Controls the activation of the DOS calculation.", &
2519 : default_l_val=.FALSE., &
2520 9520 : lone_keyword_l_val=.TRUE.)
2521 9520 : CALL section_add_keyword(section, keyword)
2522 9520 : CALL keyword_release(keyword)
2523 :
2524 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_WINDOW", &
2525 : description="Print DOS and PDOS in the energy window "// &
2526 : "$[\varepsilon_\mathrm{VBM}-E_\mathrm{window}/2, "// &
2527 : "\varepsilon_\mathrm{CBM}+E_\mathrm{window}/2]$,"// &
2528 : " where VBM is the valence "// &
2529 : "band maximum (or highest occupied molecular orbital, HOMO, for "// &
2530 : "molecules) and CBM the conduction band minimum (or lowest "// &
2531 : "unoccupied molecular orbital, LUMO, for molecules).", &
2532 : usage="ENERGY_WINDOW 5.0", &
2533 : default_r_val=cp_unit_to_cp2k(value=10.0_dp, unit_str="eV"), &
2534 9520 : unit_str="eV")
2535 9520 : CALL section_add_keyword(section, keyword)
2536 9520 : CALL keyword_release(keyword)
2537 :
2538 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_STEP", &
2539 : description="Resolution of the energy E when computing the $\rho(E)$.", &
2540 : usage="ENERGY_STEP 0.01", &
2541 : default_r_val=cp_unit_to_cp2k(value=0.01_dp, unit_str="eV"), &
2542 9520 : unit_str="eV")
2543 9520 : CALL section_add_keyword(section, keyword)
2544 9520 : CALL keyword_release(keyword)
2545 :
2546 : CALL keyword_create(keyword, __LOCATION__, name="BROADENING", &
2547 : description="Broadening α in Gaussians used in the DOS; "// &
2548 : "$\rho(E) = \sum_n \exp(((E-\varepsilon_n)/\alpha)^2)/("// &
2549 : " \sqrt{2\pi} \alpha)$.", &
2550 : usage="BROADENING 0.01", &
2551 : default_r_val=cp_unit_to_cp2k(value=0.01_dp, unit_str="eV"), &
2552 9520 : unit_str="eV")
2553 9520 : CALL section_add_keyword(section, keyword)
2554 9520 : CALL keyword_release(keyword)
2555 :
2556 : CALL keyword_create( &
2557 : keyword, __LOCATION__, name="KPOINTS", &
2558 : description="Monkhorst-Pack k-point mesh of size N_x, N_y, N_z for calculating "// &
2559 : "the density of states (DOS). In GW, the KPOINT_DOS mesh is thus used as k-point "// &
2560 : "mesh for the self-energy. For non-periodic directions α, choose N_α = 1. "// &
2561 : "Automatic choice of the k-point mesh for negative "// &
2562 : "values, i.e. KPOINTS_DOS -1 -1 -1 (automatic choice: N_α = 1 in non-periodic "// &
2563 : "direction, 8 k-points in periodic direction). If you like to compute a "// &
2564 : "band structure along a k-path, you can specify the k-path in "// &
2565 : "&KPOINT_SET.", &
2566 : usage="KPOINTS N_x N_y N_z", &
2567 9520 : n_var=3, type_of_var=integer_t, default_i_vals=[-1, -1, -1])
2568 9520 : CALL section_add_keyword(section, keyword)
2569 9520 : CALL keyword_release(keyword)
2570 :
2571 9520 : NULLIFY (subsection)
2572 9520 : CALL create_ldos_section(subsection)
2573 9520 : CALL section_add_subsection(section, subsection)
2574 9520 : CALL section_release(subsection)
2575 :
2576 9520 : END SUBROUTINE create_dos_section
2577 :
2578 : ! **************************************************************************************************
2579 : !> \brief ...
2580 : !> \param section ...
2581 : ! **************************************************************************************************
2582 9520 : SUBROUTINE create_ldos_section(section)
2583 : TYPE(section_type), POINTER :: section
2584 :
2585 : TYPE(keyword_type), POINTER :: keyword
2586 :
2587 9520 : CPASSERT(.NOT. ASSOCIATED(section))
2588 : CALL section_create(section, __LOCATION__, name="LDOS", &
2589 : description="Parameters needed to calculate the local density "// &
2590 : "of states (LDOS). "// &
2591 : "The LDOS is computed as $\rho(\mathbf{r},E) = "// &
2592 : "\sum\limits_{n,\mathbf{k}}"// &
2593 : " |\psi_{n\mathbf{k}}(r)|^2\, w_\mathbf{k}\, g(E-\varepsilon_{n\mathbf{k}})$ "// &
2594 : "using the Gaussian weight function "// &
2595 : "$g(x) = \exp(x^2/\alpha^2)/(\sqrt{2\pi}\alpha)$, $\alpha$ is the broadening "// &
2596 : "from the &DOS section, and the k-point weight "// &
2597 : "$w_\mathbf{k}$. The k-mesh is taken from the &DOS section.", &
2598 9520 : n_keywords=2, repeats=.FALSE.)
2599 :
2600 9520 : NULLIFY (keyword)
2601 : CALL keyword_create(keyword, __LOCATION__, &
2602 : name="_SECTION_PARAMETERS_", &
2603 : description="Activates the local VBM CBM gap calculation.", &
2604 : default_l_val=.FALSE., &
2605 9520 : lone_keyword_l_val=.TRUE.)
2606 9520 : CALL section_add_keyword(section, keyword)
2607 9520 : CALL keyword_release(keyword)
2608 :
2609 : CALL keyword_create(keyword, __LOCATION__, name="INTEGRATION", &
2610 : description="Defines whether the LDOS is integrated along a "// &
2611 : "coordinate. As an example, for INTEGRATION Z, the LDOS "// &
2612 : "$\rho(x,y,E) = \int dz\, \rho(x,y,z,E)$ is computed.", &
2613 : usage="INTEGRATION Z", &
2614 : enum_c_vals=s2a("X", "Y", "Z", "NONE"), &
2615 : enum_i_vals=[int_ldos_x, int_ldos_y, int_ldos_z, int_ldos_none], &
2616 : enum_desc=s2a("Integrate over x coordinate (not yet implemented).", &
2617 : "Integrate over y coordinate (not yet implemented).", &
2618 : "Integrate over z coordinate.", &
2619 : "No integration, print cube file as function "// &
2620 : "of x,y,z (not yet implemented)."), &
2621 9520 : default_i_val=int_ldos_z)
2622 9520 : CALL section_add_keyword(section, keyword)
2623 9520 : CALL keyword_release(keyword)
2624 :
2625 : CALL keyword_create( &
2626 : keyword, __LOCATION__, name="BIN_MESH", &
2627 : description="Mesh of size n x m for binning the space coordinates x and y of "// &
2628 : "the LDOS $\rho(x,y,E)$. If -1, no binning is performed and the "// &
2629 : "fine x, y resolution of the electron density from SCF is used.", &
2630 : usage="BIN_MESH n m", &
2631 9520 : n_var=2, type_of_var=integer_t, default_i_vals=[10, 10])
2632 9520 : CALL section_add_keyword(section, keyword)
2633 9520 : CALL keyword_release(keyword)
2634 :
2635 9520 : END SUBROUTINE create_ldos_section
2636 :
2637 : ! **************************************************************************************************
2638 : !> \brief creates an input section for a tip scan calculation
2639 : !> \param section section to create
2640 : !> \par History
2641 : !> * 04.2021 created [JGH]
2642 : ! **************************************************************************************************
2643 9520 : SUBROUTINE create_tipscan_section(section)
2644 : TYPE(section_type), POINTER :: section
2645 :
2646 : TYPE(keyword_type), POINTER :: keyword
2647 :
2648 9520 : CPASSERT(.NOT. ASSOCIATED(section))
2649 : CALL section_create(section, __LOCATION__, name="TIP_SCAN", &
2650 : description="Parameters needed to set up a Tip Scan. "// &
2651 : "Needs external definition of tip induced field.", &
2652 9520 : n_keywords=1, n_subsections=1, repeats=.FALSE.)
2653 :
2654 9520 : NULLIFY (keyword)
2655 :
2656 : CALL keyword_create(keyword, __LOCATION__, &
2657 : name="_SECTION_PARAMETERS_", &
2658 : description="Controls the activation of the Tip Scan procedure", &
2659 : default_l_val=.FALSE., &
2660 9520 : lone_keyword_l_val=.TRUE.)
2661 9520 : CALL section_add_keyword(section, keyword)
2662 9520 : CALL keyword_release(keyword)
2663 :
2664 : CALL keyword_create(keyword, __LOCATION__, name="SCAN_DIRECTION", &
2665 : description="Defines scan direction and scan type(line, plane).", &
2666 : usage="SCAN_DIRECTION XY", &
2667 : enum_c_vals=s2a("X", "Y", "Z", "XY", "XZ", "YZ", "XYZ"), &
2668 : enum_i_vals=[scan_x, scan_y, scan_z, scan_xy, scan_xz, scan_yz, scan_xyz], &
2669 9520 : default_i_val=scan_xy)
2670 9520 : CALL section_add_keyword(section, keyword)
2671 9520 : CALL keyword_release(keyword)
2672 :
2673 : CALL keyword_create(keyword, __LOCATION__, name="REFERENCE_POINT", &
2674 : description="The reference point to define the absolute position of the scan. ", &
2675 : usage="REFERENCE_POINT 0.0 0.0 1.0", &
2676 : n_var=3, default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp], type_of_var=real_t, &
2677 9520 : unit_str="angstrom")
2678 9520 : CALL section_add_keyword(section, keyword)
2679 9520 : CALL keyword_release(keyword)
2680 :
2681 : CALL keyword_create(keyword, __LOCATION__, name="SCAN_POINTS", &
2682 : description="Number of points calculated for each scan direction.", &
2683 : usage="SCAN_POINTS 20 20", &
2684 9520 : n_var=-1, type_of_var=integer_t)
2685 9520 : CALL section_add_keyword(section, keyword)
2686 9520 : CALL keyword_release(keyword)
2687 :
2688 : CALL keyword_create(keyword, __LOCATION__, name="SCAN_STEP", &
2689 : description="Step size for each scan direction.", &
2690 : usage="SCAN_STEP 0.01 0.01", &
2691 9520 : n_var=-1, type_of_var=real_t, unit_str="angstrom")
2692 9520 : CALL section_add_keyword(section, keyword)
2693 9520 : CALL keyword_release(keyword)
2694 :
2695 : CALL keyword_create(keyword, __LOCATION__, name="TIP_FILENAME", &
2696 : description="Filename of tip potential defined in cube file format.", &
2697 : usage="TIP_FILENAME <filename>", &
2698 9520 : type_of_var=lchar_t)
2699 9520 : CALL section_add_keyword(section, keyword)
2700 9520 : CALL keyword_release(keyword)
2701 :
2702 9520 : END SUBROUTINE create_tipscan_section
2703 :
2704 : END MODULE input_cp2k_properties_dft
|