Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2024 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 XAS section of the input
10 : !> \par History
11 : !> 10.2005 moved out of input_cp2k [fawzi]
12 : !> 07.2024 moved out of input_cp2k_dft [JGH]
13 : !> \author fawzi
14 : ! **************************************************************************************************
15 : MODULE input_cp2k_xas
16 : USE bibliography, ONLY: Iannuzzi2007,&
17 : Shigeta2001
18 : USE cp_output_handling, ONLY: add_last_numeric,&
19 : cp_print_key_section_create,&
20 : debug_print_level,&
21 : high_print_level,&
22 : low_print_level
23 : USE input_constants, ONLY: &
24 : do_potential_coulomb, do_potential_id, do_potential_short, do_potential_truncated, &
25 : gaussian, ot_mini_cg, ot_mini_diis, tddfpt_singlet, tddfpt_spin_cons, tddfpt_spin_flip, &
26 : tddfpt_triplet, xas_1s_type, xas_2p_type, xas_2s_type, xas_3d_type, xas_3p_type, &
27 : xas_3s_type, xas_4d_type, xas_4f_type, xas_4p_type, xas_4s_type, xas_dip_len, xas_dip_vel, &
28 : xas_dscf, xas_none, xas_not_excited, xas_tdp_by_index, xas_tdp_by_kind, xas_tp_fh, &
29 : xas_tp_flex, xas_tp_hh, xas_tp_xfh, xas_tp_xhh, xes_tp_val
30 : USE input_cp2k_loc, ONLY: create_localize_section,&
31 : print_wanniers
32 : USE input_cp2k_print_dft, ONLY: create_pdos_section
33 : USE input_cp2k_scf, ONLY: create_scf_section
34 : USE input_cp2k_xc, ONLY: create_xc_fun_section
35 : USE input_keyword_types, ONLY: keyword_create,&
36 : keyword_release,&
37 : keyword_type
38 : USE input_section_types, ONLY: section_add_keyword,&
39 : section_add_subsection,&
40 : section_create,&
41 : section_release,&
42 : section_type
43 : USE input_val_types, ONLY: char_t,&
44 : integer_t,&
45 : lchar_t,&
46 : real_t
47 : USE kinds, ONLY: dp
48 : USE string_utilities, ONLY: s2a
49 : #include "./base/base_uses.f90"
50 :
51 : IMPLICIT NONE
52 : PRIVATE
53 :
54 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'input_cp2k_xas'
55 :
56 : PUBLIC :: create_xas_section, create_xas_tdp_section
57 :
58 : CONTAINS
59 :
60 : ! **************************************************************************************************
61 : !> \brief makes the input section for core-level spectroscopy simulations
62 : !> \param section ...
63 : !> \par History
64 : !> 03.2005 created [MI]
65 : ! **************************************************************************************************
66 8546 : SUBROUTINE create_xas_section(section)
67 : TYPE(section_type), POINTER :: section
68 :
69 : TYPE(keyword_type), POINTER :: keyword
70 : TYPE(section_type), POINTER :: print_key, subsection
71 :
72 8546 : CPASSERT(.NOT. ASSOCIATED(section))
73 : CALL section_create(section, __LOCATION__, name="xas", &
74 : description="Sets the method of choice to calculate core-level excitation spectra. "// &
75 : "The occupied states from which we calculate the "// &
76 : "excitation should be specified. "// &
77 : "Localization of the orbitals may be useful.", &
78 : n_keywords=10, n_subsections=1, repeats=.FALSE., &
79 17092 : citations=(/Iannuzzi2007/))
80 :
81 8546 : NULLIFY (keyword, subsection, print_key)
82 :
83 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
84 : description="controls the activation of core-level spectroscopy simulations", &
85 : usage="&XAS T", &
86 : default_l_val=.FALSE., &
87 8546 : lone_keyword_l_val=.TRUE.)
88 8546 : CALL section_add_keyword(section, keyword)
89 8546 : CALL keyword_release(keyword)
90 :
91 : CALL keyword_create(keyword, __LOCATION__, name="METHOD", &
92 : variants=(/"XAS_METHOD"/), &
93 : description="Method to be used to calculate core-level excitation spectra", &
94 : usage="METHOD TP_HH", &
95 : default_i_val=xas_none, &
96 : enum_c_vals=s2a("NONE", "TP_HH", "TP_FH", "TP_VAL", "TP_XHH", "TP_XFH", "DSCF", "TP_FLEX"), &
97 : enum_desc=s2a( &
98 : "No core electron spectroscopy", "Transition potential half-hole", &
99 : "Transition potential full-hole", "Hole in homo for X-ray emission only ", &
100 : "Transition potential excited half-hole", &
101 : "Transition potential excited full-hole ", &
102 : "DSCF calculations to compute the first (core)excited state", &
103 : "Transition potential with generalized core occupation and total number of electrons"), &
104 : enum_i_vals=(/xas_none, xas_tp_hh, xas_tp_fh, xes_tp_val, xas_tp_xhh, &
105 17092 : xas_tp_xfh, xas_dscf, xas_tp_flex/))
106 8546 : CALL section_add_keyword(section, keyword)
107 8546 : CALL keyword_release(keyword)
108 :
109 : CALL keyword_create(keyword, __LOCATION__, name="XAS_CORE", &
110 : description="Occupation of the core state in XAS calculation by TP_FLEX.", &
111 : usage="XAS_CORE 0.5", &
112 8546 : default_r_val=0.5_dp)
113 8546 : CALL section_add_keyword(section, keyword)
114 8546 : CALL keyword_release(keyword)
115 :
116 : CALL keyword_create(keyword, __LOCATION__, name="XAS_TOT_EL", &
117 : description="Total number of electrons for spin channel alpha, in XAS calculation by TP_FLEX. "// &
118 : "If it is a negative value, the number of electrons is set to GS number of electrons "// &
119 : "minus the amount subtracted from the core state", &
120 : usage="XAS_TOT_EL 10", &
121 8546 : default_r_val=-1._dp)
122 8546 : CALL section_add_keyword(section, keyword)
123 8546 : CALL keyword_release(keyword)
124 :
125 : CALL keyword_create(keyword, __LOCATION__, name="XES_CORE", &
126 : description="Occupation of the core state in XES calculation by TP_VAL. "// &
127 : "The HOMO is emptied by the same amount.", &
128 : usage="XES_CORE 0.5", &
129 8546 : default_r_val=1._dp)
130 8546 : CALL section_add_keyword(section, keyword)
131 8546 : CALL keyword_release(keyword)
132 :
133 : CALL keyword_create(keyword, __LOCATION__, name="XES_EMPTY_HOMO", &
134 : description="Set the occupation of the HOMO in XES calculation by TP_VAL. "// &
135 : "The HOMO can be emptied or not, if the core is still full.", &
136 : usage="XES_EMPTY_HOMO", &
137 : default_l_val=.FALSE., &
138 8546 : lone_keyword_l_val=.TRUE.)
139 8546 : CALL section_add_keyword(section, keyword)
140 8546 : CALL keyword_release(keyword)
141 :
142 : CALL keyword_create(keyword, __LOCATION__, name="DIPOLE_FORM", &
143 : variants=(/"DIP_FORM"/), &
144 : description="Type of integral to get the oscillator strengths "// &
145 : "in the diipole approximation", &
146 : usage="DIPOLE_FORM string", &
147 : default_i_val=xas_dip_vel, &
148 : enum_c_vals=s2a("LENGTH", "VELOCITY"), &
149 : enum_desc=s2a("Length form ⟨ i | e r | j ⟩", &
150 : "Velocity form ⟨ i | d/dr | j ⟩"), &
151 17092 : enum_i_vals=(/xas_dip_len, xas_dip_vel/))
152 8546 : CALL section_add_keyword(section, keyword)
153 8546 : CALL keyword_release(keyword)
154 :
155 : ! replace the specialized keyword with standard scf section
156 : ! scf_env is added to xas_env
157 :
158 8546 : NULLIFY (subsection)
159 8546 : CALL create_scf_section(subsection)
160 8546 : CALL section_add_subsection(section, subsection)
161 8546 : CALL section_release(subsection)
162 :
163 : CALL keyword_create(keyword, __LOCATION__, name="STATE_TYPE", &
164 : variants=(/"TYPE"/), &
165 : description="Type of the orbitals that are excited for the xas spectra calculation", &
166 : usage="STATE_TYPE 1S", &
167 : default_i_val=xas_1s_type, &
168 : enum_c_vals=s2a("1S", "2S", "2P", "3S", "3P", "3D", "4S", "4P", "4D", "4F"), &
169 : enum_desc=s2a("1s orbitals", "2s orbitals", "2p orbitals", "3s orbitals", "3p orbitals", &
170 : "3d orbitals", "4s orbitals", "4p orbitals", "4d orbitals", "4f orbitals"), &
171 : enum_i_vals=(/xas_1s_type, xas_2s_type, xas_2p_type, xas_3s_type, xas_3p_type, xas_3d_type, &
172 17092 : xas_4s_type, xas_4p_type, xas_4d_type, xas_4f_type/))
173 8546 : CALL section_add_keyword(section, keyword)
174 8546 : CALL keyword_release(keyword)
175 :
176 : CALL keyword_create(keyword, __LOCATION__, name="STATE_SEARCH", &
177 : description="# of states where to look for the one to be excited", &
178 : usage="STATE_SEARCH 1", &
179 8546 : default_i_val=-1)
180 8546 : CALL section_add_keyword(section, keyword)
181 8546 : CALL keyword_release(keyword)
182 :
183 : CALL keyword_create(keyword, __LOCATION__, name="SPIN_CHANNEL", &
184 : description="# Spin channel of the excited orbital", &
185 : usage="SPIN_CHANNEL 1", &
186 8546 : default_i_val=1)
187 8546 : CALL section_add_keyword(section, keyword)
188 8546 : CALL keyword_release(keyword)
189 :
190 : CALL keyword_create(keyword, __LOCATION__, name="ATOMS_LIST", &
191 : variants=(/"AT_LIST"/), &
192 : description="Indexes of the atoms to be excited. "// &
193 : "This keyword can be repeated several times "// &
194 : "(useful if you have to specify many indexes).", &
195 : usage="ATOMS_LIST {integer} {integer} .. {integer} ", &
196 17092 : n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
197 8546 : CALL section_add_keyword(section, keyword)
198 8546 : CALL keyword_release(keyword)
199 :
200 : CALL keyword_create(keyword, __LOCATION__, name="OVERLAP_THRESHOLD", &
201 : description="Threshold for including more than one initial core excited state "// &
202 : "per atom. The threshold is taken relative to the maximum overlap.", &
203 8546 : usage="OVERLAP_THRESHOLD 8.e-1", default_r_val=1.0_dp)
204 8546 : CALL section_add_keyword(section, keyword)
205 8546 : CALL keyword_release(keyword)
206 :
207 : CALL keyword_create(keyword, __LOCATION__, name="ORBITAL_LIST", &
208 : variants=(/"ORBITAL_LIST"/), &
209 : description="Indices of the localized orbitals to be excited. "// &
210 : "This keyword can be repeated several times "// &
211 : "(useful if you have to specify many indexes).", &
212 : usage="ORBITAL_LIST {integer} {integer} .. {integer} ", &
213 17092 : n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
214 8546 : CALL section_add_keyword(section, keyword)
215 8546 : CALL keyword_release(keyword)
216 :
217 : CALL keyword_create(keyword, __LOCATION__, name="ADDED_MOS", &
218 : description="Number of additional MOS added spin up only", &
219 8546 : usage="ADDED_MOS {integer}", default_i_val=-1)
220 8546 : CALL section_add_keyword(section, keyword)
221 8546 : CALL keyword_release(keyword)
222 :
223 : CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER_ADDED", &
224 : description="maximum number of iteration in calculation of added orbitals", &
225 8546 : usage="MAX_ITER_ADDED 100", default_i_val=2999)
226 8546 : CALL section_add_keyword(section, keyword)
227 8546 : CALL keyword_release(keyword)
228 :
229 : CALL keyword_create(keyword, __LOCATION__, name="EPS_ADDED", &
230 : description="target accuracy incalculation of the added orbitals", &
231 8546 : usage="EPS_ADDED 1.e-6", default_r_val=1.0e-5_dp)
232 8546 : CALL section_add_keyword(section, keyword)
233 8546 : CALL keyword_release(keyword)
234 :
235 : CALL keyword_create(keyword, __LOCATION__, name="NGAUSS", &
236 : description="Number of gto's for the expansion of the STO "// &
237 : "of the type given by STATE_TYPE", &
238 8546 : usage="NGAUSS {integer}", default_i_val=3)
239 8546 : CALL section_add_keyword(section, keyword)
240 8546 : CALL keyword_release(keyword)
241 :
242 : CALL keyword_create(keyword, __LOCATION__, name="RESTART", &
243 : description="Restart the excited state if the restart file exists", &
244 : usage="RESTART", &
245 8546 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
246 8546 : CALL section_add_keyword(section, keyword)
247 8546 : CALL keyword_release(keyword)
248 :
249 : CALL keyword_create(keyword, __LOCATION__, name="WFN_RESTART_FILE_NAME", &
250 : variants=(/"RESTART_FILE_NAME"/), &
251 : description="Root of the file names where to read the MOS from "// &
252 : "which to restart the calculation of the core level excited states", &
253 : usage="WFN_RESTART_FILE_NAME <FILENAME>", &
254 17092 : type_of_var=lchar_t)
255 8546 : CALL section_add_keyword(section, keyword)
256 8546 : CALL keyword_release(keyword)
257 :
258 8546 : CALL create_localize_section(subsection)
259 8546 : CALL section_add_subsection(section, subsection)
260 8546 : CALL section_release(subsection)
261 :
262 : CALL section_create(subsection, __LOCATION__, name="PRINT", &
263 : description="printing of information during the core-level spectroscopy simulation", &
264 8546 : repeats=.FALSE.)
265 :
266 : ! Add printing of wannier infos
267 8546 : CALL print_wanniers(subsection)
268 :
269 : CALL cp_print_key_section_create(print_key, __LOCATION__, "iteration_info", &
270 : description="Controls the printing of basic iteration information during the XAS SCF.", &
271 8546 : print_level=low_print_level, filename="__STD_OUT__")
272 : CALL keyword_create(keyword, __LOCATION__, name="time_cumul", &
273 : description="If the printkey is activated switches the printing of timings"// &
274 : " to cumulative (over the SCF).", &
275 8546 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
276 8546 : CALL section_add_keyword(print_key, keyword)
277 8546 : CALL keyword_release(keyword)
278 8546 : CALL section_add_subsection(subsection, print_key)
279 8546 : CALL section_release(print_key)
280 :
281 : CALL cp_print_key_section_create(print_key, __LOCATION__, "program_run_info", &
282 : description="Controls the printing of basic iteration information in CLS", &
283 8546 : print_level=low_print_level, add_last=add_last_numeric, filename="__STD_OUT__")
284 8546 : CALL section_add_subsection(subsection, print_key)
285 8546 : CALL section_release(print_key)
286 :
287 : CALL cp_print_key_section_create(print_key, __LOCATION__, "XES_SPECTRUM", &
288 : description="Controls the dumping of the CLS output files containing the emission spectra", &
289 8546 : print_level=low_print_level, common_iter_levels=3, filename="")
290 8546 : CALL section_add_subsection(subsection, print_key)
291 8546 : CALL section_release(print_key)
292 :
293 : CALL cp_print_key_section_create( &
294 : print_key, __LOCATION__, "XAS_SPECTRUM", &
295 : description="Controls the dumping of the CLS output files containing the absorption spectra", &
296 8546 : print_level=low_print_level, common_iter_levels=3, filename="")
297 8546 : CALL section_add_subsection(subsection, print_key)
298 8546 : CALL section_release(print_key)
299 :
300 8546 : CALL create_pdos_section(print_key)
301 8546 : CALL section_add_subsection(subsection, print_key)
302 8546 : CALL section_release(print_key)
303 :
304 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RESTART", &
305 : description="Controls the dumping of MO restart file during the SCF. "// &
306 : "of a Core-Level-Spectroscopy calculation. For each new excited atom, "// &
307 : "one different restart file is dumped. These restart files should be "// &
308 : "employed only to restart the same type of CLS calculation, "// &
309 : "i.e. with the same core potential.", &
310 : print_level=low_print_level, common_iter_levels=3, each_iter_names=s2a("XAS_SCF"), &
311 8546 : add_last=add_last_numeric, each_iter_values=(/3/), filename="")
312 8546 : CALL section_add_subsection(subsection, print_key)
313 8546 : CALL section_release(print_key)
314 :
315 : CALL cp_print_key_section_create(print_key, __LOCATION__, "FULL_RESTART", &
316 : description="Controls the dumping of a standard MO restart file "// &
317 : "where coefficients and occupation numbers are those of the TP scheme, "// &
318 : "i.e. with emptied core state.", &
319 : print_level=high_print_level, common_iter_levels=3, each_iter_names=s2a("XAS_SCF"), &
320 8546 : add_last=add_last_numeric, each_iter_values=(/3/), filename="")
321 8546 : CALL section_add_subsection(subsection, print_key)
322 8546 : CALL section_release(print_key)
323 :
324 : CALL cp_print_key_section_create(print_key, __LOCATION__, "CLS_FUNCTION_CUBES", &
325 : description="Controls the printing of the relaxed orbitals ", &
326 8546 : print_level=high_print_level, common_iter_levels=3, add_last=add_last_numeric, filename="")
327 : CALL keyword_create(keyword, __LOCATION__, name="stride", &
328 : description="The stride (X,Y,Z) used to write the cube file "// &
329 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
330 : " 1 number valid for all components.", &
331 8546 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=integer_t)
332 8546 : CALL section_add_keyword(print_key, keyword)
333 8546 : CALL keyword_release(keyword)
334 :
335 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LU_BOUNDS", &
336 : variants=(/"CUBES_LU"/), &
337 : description="The lower and upper index of the states to be printed as cube", &
338 : usage="CUBES_LU_BOUNDS integer integer", &
339 17092 : n_var=2, default_i_vals=(/0, -2/), type_of_var=integer_t)
340 8546 : CALL section_add_keyword(print_key, keyword)
341 8546 : CALL keyword_release(keyword)
342 :
343 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LIST", &
344 : description="Indexes of the states to be printed as cube files "// &
345 : "This keyword can be repeated several times "// &
346 : "(useful if you have to specify many indexes).", &
347 : usage="CUBES_LIST 1 2", &
348 8546 : n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
349 8546 : CALL section_add_keyword(print_key, keyword)
350 8546 : CALL keyword_release(keyword)
351 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
352 : description="append the cube files when they already exist", &
353 8546 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
354 8546 : CALL section_add_keyword(print_key, keyword)
355 8546 : CALL keyword_release(keyword)
356 :
357 8546 : CALL section_add_subsection(subsection, print_key)
358 8546 : CALL section_release(print_key)
359 :
360 8546 : CALL section_add_subsection(section, subsection)
361 8546 : CALL section_release(subsection)
362 :
363 8546 : END SUBROUTINE create_xas_section
364 :
365 : ! **************************************************************************************************
366 : !> \brief makes the input section for core-level spectroscopy simulations using
367 : !> linear response TDDFT
368 : !> \param section ...
369 : !> \par History
370 : !> 11.2017 created [AB]
371 : ! **************************************************************************************************
372 8546 : SUBROUTINE create_xas_tdp_section(section)
373 : TYPE(section_type), POINTER :: section
374 :
375 : TYPE(keyword_type), POINTER :: keyword
376 : TYPE(section_type), POINTER :: print_key, subsection, subsubsection, &
377 : subsubsubsection
378 :
379 8546 : NULLIFY (keyword, print_key, subsection, subsubsection, subsubsubsection)
380 :
381 8546 : CPASSERT(.NOT. ASSOCIATED(section))
382 : CALL section_create(section, __LOCATION__, name="XAS_TDP", &
383 : description="XAS simulations using linear-response TDDFT. Excitation from "// &
384 : "specified core orbitals are considered one at a time. In case of high "// &
385 : "symmetry structures, donor core orbitals should be localized.", &
386 8546 : n_keywords=19, n_subsections=4, repeats=.FALSE.)
387 :
388 8546 : NULLIFY (keyword, subsection, print_key)
389 :
390 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
391 : description="controls the activation of XAS simulations with linear "// &
392 : "response TDDFT.", &
393 : usage="&TDP_XAS {logical}", &
394 : default_l_val=.FALSE., &
395 8546 : lone_keyword_l_val=.TRUE.)
396 8546 : CALL section_add_keyword(section, keyword)
397 8546 : CALL keyword_release(keyword)
398 :
399 : CALL keyword_create(keyword, __LOCATION__, name="CHECK_ONLY", &
400 : description="This keyword defines whether the full calculation should "// &
401 : "be done or not. If set to .TRUE., only the determination "// &
402 : "of donor MOs is conducted. This run option allows for "// &
403 : "cheap verification of the input parameters", &
404 : usage="CHECK_ONLY {logical}", &
405 : default_l_val=.FALSE., &
406 : lone_keyword_l_val=.TRUE., &
407 8546 : repeats=.FALSE.)
408 8546 : CALL section_add_keyword(section, keyword)
409 8546 : CALL keyword_release(keyword)
410 :
411 : CALL keyword_create(keyword, __LOCATION__, name="RESTART_FROM_FILE", &
412 : variants=s2a("RESTART_FILENAME", "RST_FILENAME", "RESTART_FILE", "RST_FILE"), &
413 : description="By providing a RESTART file containing the linear-response "// &
414 : "orbitals and excitations energies from a previous calculation, "// &
415 : "all computations are skipped except for the corresponding "// &
416 : "PDOS and/or CUBE file printing as defined in the PRINT "// &
417 : "subsection. Basis sets and geometry need to be consistent.", &
418 : usage="RESTART_FROM_FILE <FILENAME>", &
419 8546 : type_of_var=char_t, n_var=-1)
420 8546 : CALL section_add_keyword(section, keyword)
421 8546 : CALL keyword_release(keyword)
422 :
423 : CALL keyword_create(keyword, __LOCATION__, name="EXCITATIONS", &
424 : variants=(/"EXCITATION"/), &
425 : description="Specify the type of excitation to consider. In case of a "// &
426 : "resctricted closed-shell ground state calculation, "// &
427 : "RCS_SINGLET or/and RCS_TRIPLET can be chosen. In case of a "// &
428 : "open-shell ground state calculation (either UKS or ROKS), "// &
429 : "standard spin conserving excitation (OS_SPIN_CONS) or/and "// &
430 : "spin-flip excitation (OS_SPIN_FLIP) can be chosen.", &
431 : usage="EXCITATIONS {string}", &
432 : repeats=.TRUE., &
433 : default_i_val=tddfpt_singlet, &
434 : enum_c_vals=s2a("RCS_SINGLET", "RCS_TRIPLET", "OS_SPIN_CONS", "OS_SPIN_FLIP"), &
435 : enum_desc=s2a("Singlet excitation on top of restricted closed-shell ground state", &
436 : "Triplet excitation on top of restricted closed-shell ground state", &
437 : "Spin-conserving excitations on top of open-shell ground state", &
438 : "Spin-flip excitation on top of open-shell ground state"), &
439 17092 : enum_i_vals=(/tddfpt_singlet, tddfpt_triplet, tddfpt_spin_cons, tddfpt_spin_flip/))
440 8546 : CALL section_add_keyword(section, keyword)
441 8546 : CALL keyword_release(keyword)
442 :
443 : CALL keyword_create(keyword, __LOCATION__, name="EPS_PGF_XAS", &
444 : variants=s2a("EPS_PGF", "EPS_PGF_XAS_TDP"), &
445 : description="The threshold used to determine the spacial extent of all "// &
446 : "primitive Gaussian functions used for the construction "// &
447 : "of neighbor lists in the XAS_TDP method. "// &
448 : "By default, takes the value of QS%EPS_PGF_ORB. Useful if "// &
449 : "the former value is tiny due to possible ground state HFX "// &
450 : "contributions.", &
451 : usage="EPS_PGS_XAS {real}", &
452 8546 : type_of_var=real_t)
453 8546 : CALL section_add_keyword(section, keyword)
454 8546 : CALL keyword_release(keyword)
455 :
456 : CALL keyword_create(keyword, __LOCATION__, name="EPS_FILTER", &
457 : variants=s2a("EPS_FILTER_MATRIX"), &
458 : description="The threshold used for sparse matrix operations", &
459 : usage="EPS_FILTER {real}", &
460 : type_of_var=real_t, &
461 8546 : default_r_val=1.0E-10_dp)
462 8546 : CALL section_add_keyword(section, keyword)
463 8546 : CALL keyword_release(keyword)
464 :
465 : CALL keyword_create(keyword, __LOCATION__, name="DIPOLE_FORM", &
466 : variants=(/"DIP_FORM"/), &
467 : description="Type of integral to get the oscillator strengths "// &
468 : "in the dipole approximation", &
469 : usage="DIPOLE_FORM {string}", &
470 : default_i_val=xas_dip_vel, &
471 : enum_c_vals=s2a("LENGTH", "VELOCITY"), &
472 : enum_desc=s2a("Length form ⟨ 0 | e r | n ⟩", &
473 : "Velocity form ⟨ 0 | d/dr | n ⟩"), &
474 17092 : enum_i_vals=(/xas_dip_len, xas_dip_vel/))
475 8546 : CALL section_add_keyword(section, keyword)
476 8546 : CALL keyword_release(keyword)
477 :
478 : CALL keyword_create(keyword, __LOCATION__, name="QUADRUPOLE", &
479 : variants=s2a("DO_QUADRUPOLE", "DO_QUAD", "QUAD"), &
480 : description="Compute the electric quadrupole contribution to the "// &
481 : "oscillator strenghts (in the length representation with "// &
482 : "the origin set on the relevant excited atom)", &
483 : usage="QUADRUPOLE {logical}", &
484 : default_l_val=.FALSE., &
485 8546 : lone_keyword_l_val=.TRUE.)
486 8546 : CALL section_add_keyword(section, keyword)
487 8546 : CALL keyword_release(keyword)
488 :
489 : CALL keyword_create(keyword, __LOCATION__, name="XYZ_DIPOLE", &
490 : variants=s2a("DIPOLE_XYZ"), &
491 : description="Whether the detailed contributions of the dipole oscillator "// &
492 : "strengths along the X,Y,Z directions should be printed.", &
493 : usage="XYZ_DIPOLE {logical}", &
494 : default_l_val=.FALSE., &
495 8546 : lone_keyword_l_val=.TRUE.)
496 8546 : CALL section_add_keyword(section, keyword)
497 8546 : CALL keyword_release(keyword)
498 :
499 : ! the GW2X correction subsection
500 : CALL section_create(subsection, __LOCATION__, name="GW2X", &
501 : description="Specifications for the GW2X calculation of core "// &
502 : "ionization potentials. Note that donor states need to be actively "// &
503 : "localized using the LOCALIZE keyword in DONOR_STATES. N_SEARCH "// &
504 : "should be kept to the minimum, such that only core states are localized.", &
505 : citations=(/Shigeta2001/), &
506 : n_keywords=8, &
507 : n_subsections=0, &
508 17092 : repeats=.FALSE.)
509 :
510 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
511 : description="Enables the GW2X correction of the core ionization potentials", &
512 : usage="&GW2X {logical}", &
513 : default_l_val=.FALSE., &
514 8546 : lone_keyword_l_val=.TRUE.)
515 8546 : CALL section_add_keyword(subsection, keyword)
516 8546 : CALL keyword_release(keyword)
517 :
518 : CALL keyword_create(keyword, __LOCATION__, name="XPS_ONLY", &
519 : description="If set to .TRUE., only run GW2X calculations for XPS "// &
520 : "spectroscopy and ignore all XAS calculations. It is still "// &
521 : "required to define the DONOR_STATES and KERNEL%EXACT_EXCHANGE "// &
522 : "subsections.", &
523 : default_l_val=.FALSE., &
524 8546 : lone_keyword_l_val=.TRUE.)
525 8546 : CALL section_add_keyword(subsection, keyword)
526 8546 : CALL keyword_release(keyword)
527 :
528 : CALL keyword_create(keyword, __LOCATION__, name="BATCH_SIZE", &
529 : description="MOs batch size for batched tensor contraction. Larger "// &
530 : "size is faster, but uses more memory. Default should be safe "// &
531 : "in most cases.", &
532 8546 : default_i_val=64)
533 8546 : CALL section_add_keyword(subsection, keyword)
534 8546 : CALL keyword_release(keyword)
535 :
536 : CALL keyword_create(keyword, __LOCATION__, name="EPS_GW2X", &
537 : description="Convergence threshold for GW2X iterations (in eV)", &
538 8546 : default_r_val=1.E-2_dp)
539 8546 : CALL section_add_keyword(subsection, keyword)
540 8546 : CALL keyword_release(keyword)
541 :
542 : CALL keyword_create(keyword, __LOCATION__, name="C_OS", &
543 : description="Opposite-spin scling factor. SCS => 6/5, SOS => 1.3", &
544 8546 : default_r_val=1.0_dp)
545 8546 : CALL section_add_keyword(subsection, keyword)
546 8546 : CALL keyword_release(keyword)
547 :
548 : CALL keyword_create(keyword, __LOCATION__, name="C_SS", &
549 : description="Same-spin scling factor. SCS => 1/3, SOS => 0.0", &
550 8546 : default_r_val=1.0_dp)
551 8546 : CALL section_add_keyword(subsection, keyword)
552 8546 : CALL keyword_release(keyword)
553 :
554 : CALL keyword_create(keyword, __LOCATION__, name="MAX_GW2X_ITER", &
555 : description="Maximum number of iterations for GW2X", &
556 8546 : default_i_val=10)
557 8546 : CALL section_add_keyword(subsection, keyword)
558 8546 : CALL keyword_release(keyword)
559 :
560 : CALL keyword_create(keyword, __LOCATION__, name="PSEUDO_CANONICAL", &
561 : variants=(/"PSEUDO_CANO"/), &
562 : description="Whether the pseudo-canonical version of GW2X should be used "// &
563 : "(versus only using the diagonal of the generalized Fock matrix)", &
564 17092 : default_l_val=.TRUE.)
565 8546 : CALL section_add_keyword(subsection, keyword)
566 8546 : CALL keyword_release(keyword)
567 :
568 8546 : CALL section_add_subsection(section, subsection)
569 8546 : CALL section_release(subsection)
570 :
571 : ! The donor state subsection
572 :
573 : CALL section_create(subsection, __LOCATION__, name="DONOR_STATES", &
574 : description="Specifications for the donor states from which core "// &
575 : "electrons are excited", &
576 : n_keywords=6, &
577 : n_subsections=0, &
578 8546 : repeats=.FALSE.)
579 :
580 : CALL keyword_create(keyword, __LOCATION__, name="DEFINE_EXCITED", &
581 : description="Whether the atoms to be excited should be defined by "// &
582 : "a list of atom indices or by a list of atom kinds.", &
583 : usage="DEFINE_EXCITED {string}", &
584 : default_i_val=xas_tdp_by_index, &
585 : enum_c_vals=s2a("BY_INDEX", "BY_KIND"), &
586 : enum_i_vals=(/xas_tdp_by_index, xas_tdp_by_kind/), &
587 : enum_desc=s2a("Excited atoms are defined by a list of indices", &
588 8546 : "Excited atoms are defined by a list of atomic kinds"))
589 8546 : CALL section_add_keyword(subsection, keyword)
590 8546 : CALL keyword_release(keyword)
591 :
592 : CALL keyword_create(keyword, __LOCATION__, name="ATOM_LIST", &
593 : variants=(/"AT_LIST"/), &
594 : description="Indices of the atoms to be excited. "// &
595 : "Keyword only taken into account if DEFINE_EXCITED = BY_INDEX", &
596 : usage="ATOM_LIST {integer} {integer} .. {integer} ", &
597 17092 : n_var=-1, type_of_var=integer_t, repeats=.FALSE.)
598 8546 : CALL section_add_keyword(subsection, keyword)
599 8546 : CALL keyword_release(keyword)
600 :
601 : CALL keyword_create(keyword, __LOCATION__, name="KIND_LIST", &
602 : description="Kind of atoms to be excited. "// &
603 : "All atoms of the specified kinds are considered. "// &
604 : "Keyword only taken into account if DEFINE_EXCITED = BY_KIND", &
605 : usage="KIND_LIST {string} {string} .. {string} ", &
606 8546 : n_var=-1, type_of_var=char_t, repeats=.FALSE.)
607 8546 : CALL section_add_keyword(subsection, keyword)
608 8546 : CALL keyword_release(keyword)
609 :
610 : CALL keyword_create(keyword, __LOCATION__, name="STATE_TYPES", &
611 : variants=(/"TYPES"/), &
612 : description="Types of orbitals that are excited, for each atom/kind, "// &
613 : "in order to do LR-TDDFT driven xas spectra calculation. "// &
614 : "This keyword MUST have the same number of entries as the relevant "// &
615 : "KIND_LIST or ATOM_LIST. The order of the specified state types must "// &
616 : "correspond to the order of the relevant kinds/indices. "// &
617 : "This keyword can be repeated, useful when multiple orbital types "// &
618 : "should be excited for specific kinds/atoms.", &
619 : n_var=-1, default_i_val=xas_not_excited, repeats=.TRUE., &
620 : usage="STATE_TYPES {string} {string} .. {string}", &
621 : enum_c_vals=s2a("1S", "2S", "2P", "NE"), &
622 : enum_desc=s2a("1s orbital", "2s orbital", "2p orbitals", "not excited"), &
623 17092 : enum_i_vals=(/xas_1s_type, xas_2s_type, xas_2p_type, xas_not_excited/))
624 8546 : CALL section_add_keyword(subsection, keyword)
625 8546 : CALL keyword_release(keyword)
626 :
627 : CALL keyword_create(keyword, __LOCATION__, name="N_SEARCH", &
628 : description="Number of MOs (per spin) to search to find specified donor core "// &
629 : "orbitals, starting from the lowest in energy and upward. By default, "// &
630 : "all HOMOs are searched. If the LOCALIZE keyword is used, "// &
631 : "then all searched states are first localized.", &
632 : usage="N_SEARCH {integer}", &
633 8546 : default_i_val=-1)
634 8546 : CALL section_add_keyword(subsection, keyword)
635 8546 : CALL keyword_release(keyword)
636 :
637 : CALL keyword_create(keyword, __LOCATION__, name="LOCALIZE", &
638 : variants=s2a("LOC", "DO_LOC"), &
639 : description="Whether the N_SEARCH potential donor states should be "// &
640 : "actively localized. Necessary in case of excited atoms "// &
641 : "equivalent under symmetry or GW2X correction.", &
642 : usage="LOCALIZE {logical}", &
643 : default_l_val=.FALSE., &
644 8546 : lone_keyword_l_val=.TRUE.)
645 8546 : CALL section_add_keyword(subsection, keyword)
646 8546 : CALL keyword_release(keyword)
647 :
648 8546 : CALL section_add_subsection(section, subsection)
649 8546 : CALL section_release(subsection)
650 : ! End of the donor states subsection
651 :
652 : ! The OT solver subsection
653 : CALL section_create(subsection, __LOCATION__, name="OT_SOLVER", &
654 : description="Specifications for the iterative OT solver. Note: only "// &
655 : "available within the Tamm-Dancoff approximation. Recommanded if excitations "// &
656 : "from multiple donor states take place.", &
657 : n_keywords=4, &
658 : n_subsections=0, &
659 8546 : repeats=.FALSE.)
660 :
661 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
662 : description="Enables the usage of the OT iterator solver", &
663 : usage="&OT_SOLVER {logical}", &
664 : default_l_val=.FALSE., &
665 8546 : lone_keyword_l_val=.TRUE.)
666 8546 : CALL section_add_keyword(subsection, keyword)
667 8546 : CALL keyword_release(keyword)
668 :
669 : CALL keyword_create(keyword, __LOCATION__, name="MAX_ITER", &
670 : description="Maximum number of iterations allowed for the OT solver", &
671 : usage="MAX_ITER {integer}", &
672 8546 : default_i_val=50)
673 8546 : CALL section_add_keyword(subsection, keyword)
674 8546 : CALL keyword_release(keyword)
675 :
676 : CALL keyword_create(keyword, __LOCATION__, name="EPS_ITER", &
677 : description="Convergence threshold for the OT solver", &
678 : usage="EPS_ITER {double}", &
679 8546 : default_r_val=1.0E-4_dp)
680 8546 : CALL section_add_keyword(subsection, keyword)
681 8546 : CALL keyword_release(keyword)
682 :
683 : CALL keyword_create(keyword, __LOCATION__, name="MINIMIZER", &
684 : description="Minimizer to be used with the OT solver", &
685 : usage="MINIMIZER DIIS", &
686 : default_i_val=ot_mini_diis, &
687 : enum_c_vals=s2a("CG", "DIIS"), &
688 : enum_desc=s2a("Conjugated gradient: safer", &
689 : "Direct inversion of the iterative subspace: faster"), &
690 8546 : enum_i_vals=(/ot_mini_cg, ot_mini_diis/))
691 8546 : CALL section_add_keyword(subsection, keyword)
692 8546 : CALL keyword_release(keyword)
693 :
694 8546 : CALL section_add_subsection(section, subsection)
695 8546 : CALL section_release(subsection)
696 : ! End of the OT solver subsection
697 :
698 : CALL keyword_create(keyword, __LOCATION__, name="SPIN_ORBIT_COUPLING", &
699 : variants=(/"SOC"/), &
700 : description="Whether spin-orbit coupling should be added. "// &
701 : "Note: only applies for spin-restricted calculations with "// &
702 : "singlet and triplet excitations OR spin-unrestricted "// &
703 : "calculations with both spin-conserving and spin-flip.", &
704 : usage="SOC {logical}", &
705 : default_l_val=.FALSE., &
706 17092 : lone_keyword_l_val=.TRUE.)
707 8546 : CALL section_add_keyword(section, keyword)
708 8546 : CALL keyword_release(keyword)
709 :
710 : CALL keyword_create(keyword, __LOCATION__, name="TAMM_DANCOFF", &
711 : variants=(/"TDA"/), &
712 : description="Whether the Tamm-Dancoff approximation should be used.", &
713 : usage="TAMM_DANCOFF {logical}", &
714 : default_l_val=.TRUE., &
715 17092 : lone_keyword_l_val=.TRUE.)
716 8546 : CALL section_add_keyword(section, keyword)
717 8546 : CALL keyword_release(keyword)
718 :
719 : CALL keyword_create(keyword, __LOCATION__, name="GRID", &
720 : variants=(/"ATOMIC_GRID"/), &
721 : description="Specification of the atomic angular and radial grids for "// &
722 : "a given atomic kind. This keyword can/should be repeated "// &
723 : "for each excited kind. The default grid dimensions are "// &
724 : "those set for the GAPW ground state calculation. These "// &
725 : "grids are used for the xc-kernel integration. "// &
726 : "Usage: GRID < KIND > < LEBEDEV_GRID > < RADIAL_GRID >", &
727 : usage="GRID {string} {integer} {integer}", &
728 17092 : n_var=3, type_of_var=char_t, repeats=.TRUE.)
729 8546 : CALL section_add_keyword(section, keyword)
730 8546 : CALL keyword_release(keyword)
731 :
732 : CALL keyword_create(keyword, __LOCATION__, name="N_EXCITED", &
733 : variants=(/"N_ROOTS"/), &
734 : description="The number of excited states to compute per donor "// &
735 : "molecular orbital. (e.g. if 2p excitations, "// &
736 : "3*N_EXCITED excited states are considered). "// &
737 : "If N_EXCITED is set to -1, all excitations are considered", &
738 : usage="N_EXCITED {integer}", &
739 17092 : default_i_val=-1)
740 8546 : CALL section_add_keyword(section, keyword)
741 8546 : CALL keyword_release(keyword)
742 :
743 : CALL keyword_create(keyword, __LOCATION__, name="ENERGY_RANGE", &
744 : variants=s2a("E_RANGE"), &
745 : description="The energy range in eV for which excitations are considered. "// &
746 : "Only excitated states within the range of: first excitation "// &
747 : "energy + ENERGY_RANGE are kept. If ENERGY_RANGE "// &
748 : "and N_EXCITED are specified, the former has priority. "// &
749 : "Negative values are ignored and N_EXCITED takes over.", &
750 : usage="ENERGY_RANGE {real}", &
751 8546 : default_r_val=-1.0_dp)
752 8546 : CALL section_add_keyword(section, keyword)
753 8546 : CALL keyword_release(keyword)
754 :
755 : ! The KERNEL subsection
756 : CALL section_create(subsection, __LOCATION__, name="KERNEL", &
757 : description="Defines how the kernel is built in terms of functionals.", &
758 : n_keywords=1, &
759 : n_subsections=1, &
760 8546 : repeats=.FALSE.)
761 :
762 : CALL keyword_create(keyword, __LOCATION__, name="RI_REGION", &
763 : variants=(/"RI_RADIUS"/), &
764 : description="The region defined by a sphere of the given radius around "// &
765 : "the excited atom defining which RI_XAS basis elements are "// &
766 : "considered for the RI projection of the density. Each basis "// &
767 : "element which center is in this region is taken. The density "// &
768 : "for a given excited atom is expressed as : "// &
769 : "sum_ijkl P_ij (ijk) S_kl^-1 xi_l, where P_ij is the density "// &
770 : "matrix, i,j span the orbital basis and k,l the RI_XAS basis "// &
771 : "in the region. The larger the radius, the more basis "// &
772 : "functions to expand the density. However, it is assumed "// &
773 : "that it is a small number and the code does not scale well "// &
774 : "as the number of RI basis elements gets too large. "// &
775 : "Expressed in Angstrom. If the radius is set to 0.0, only "// &
776 : "the RI basis elements centered on the excited atom are used.", &
777 : usage="RI_REGION {real}", &
778 17092 : default_r_val=0.0_dp)
779 8546 : CALL section_add_keyword(subsection, keyword)
780 8546 : CALL keyword_release(keyword)
781 :
782 : ! The XC_FUNCTIONAL subsubsection
783 8546 : CALL create_xc_fun_section(subsubsection)
784 8546 : CALL section_add_subsection(subsection, subsubsection)
785 8546 : CALL section_release(subsubsection)
786 :
787 : ! The EXACT_EXCHANGE subsubsection
788 : CALL section_create(subsubsection, __LOCATION__, name="EXACT_EXCHANGE", &
789 : description="Whether exact-exchange should be added to the kernel and "// &
790 : "if so, with which fraction and operator.", &
791 : n_keywords=7, &
792 : n_subsections=1, &
793 8546 : repeats=.FALSE.)
794 :
795 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
796 : description="Enables the addition of exact exchange to the kernel.", &
797 : usage="&EXACT_EXCHANGE {logical}", &
798 : default_l_val=.FALSE., &
799 8546 : lone_keyword_l_val=.TRUE.)
800 8546 : CALL section_add_keyword(subsubsection, keyword)
801 8546 : CALL keyword_release(keyword)
802 :
803 : CALL keyword_create(keyword, __LOCATION__, name="POTENTIAL_TYPE", &
804 : variants=s2a("OP", "OPERATOR", "POTENTIAL"), &
805 : description="The type of operator used for exact exchange. The standard "// &
806 : "Coulomb operator cannot be used in periodic systems.", &
807 : usage="OPERATOR {string}", &
808 : repeats=.FALSE., &
809 : default_i_val=do_potential_coulomb, &
810 : enum_c_vals=s2a("COULOMB", "TRUNCATED", "SHORTRANGE"), &
811 : enum_desc=s2a("Standard Coulomb operator: 1/r", &
812 : "Truncated Coulomb operator: 1/r if r < R_c, 0 otherwise ", &
813 : "Short range: erfc(omega*r)/r"), &
814 : enum_i_vals=(/do_potential_coulomb, do_potential_truncated, &
815 8546 : do_potential_short/))
816 8546 : CALL section_add_keyword(subsubsection, keyword)
817 8546 : CALL keyword_release(keyword)
818 :
819 : CALL keyword_create(keyword, __LOCATION__, name="CUTOFF_RADIUS", &
820 : variants=s2a("R_C", "RC", "RANGE"), &
821 : description="The cutoff radius (in Angstrom) for the truncated Coulomb operator.", &
822 : usage="CUTOFF_RADIUS {double}", &
823 : default_r_val=0.0_dp, &
824 8546 : repeats=.FALSE.)
825 8546 : CALL section_add_keyword(subsubsection, keyword)
826 8546 : CALL keyword_release(keyword)
827 :
828 : CALL keyword_create(keyword, __LOCATION__, name="T_C_G_DATA", &
829 : description="Location of the file t_c_g.dat that contains the data for the "// &
830 : "evaluation of the truncated gamma function ", &
831 : usage="T_C_G_DATA {string}", &
832 8546 : default_c_val="t_c_g.dat")
833 8546 : CALL section_add_keyword(subsubsection, keyword)
834 8546 : CALL keyword_release(keyword)
835 :
836 : CALL keyword_create(keyword, __LOCATION__, name="OMEGA", &
837 : description="The range parameter for the short range operator (in 1/a0).", &
838 : usage="OMEGA {double}", &
839 : default_r_val=0.0_dp, &
840 8546 : repeats=.FALSE.)
841 8546 : CALL section_add_keyword(subsubsection, keyword)
842 8546 : CALL keyword_release(keyword)
843 :
844 : CALL keyword_create(keyword, __LOCATION__, name="EPS_RANGE", &
845 : description="The threshold to determine the effective range of the short range "// &
846 : "operator: erfc(omega*eff_range)/eff_range = EPS_RANGE", &
847 : usage="EPS_RANGE = {double}", &
848 : default_r_val=1.0E-6_dp, &
849 8546 : repeats=.FALSE.)
850 8546 : CALL section_add_keyword(subsubsection, keyword)
851 8546 : CALL keyword_release(keyword)
852 :
853 : CALL keyword_create(keyword, __LOCATION__, name="EPS_SCREENING", &
854 : variants=s2a("EPS_SCREEN"), &
855 : description="A threshold to determine which primitive 3-center integrals "// &
856 : "are kept for contraction, as the latter operation can be "// &
857 : "expensive (especially for large basis sets ). "// &
858 : "If |(ab|c)| < EPS_SCREENNING, it is discarded.", &
859 : default_r_val=1.0E-8_dp, &
860 8546 : repeats=.FALSE.)
861 8546 : CALL section_add_keyword(subsubsection, keyword)
862 8546 : CALL keyword_release(keyword)
863 :
864 : CALL keyword_create(keyword, __LOCATION__, name="SCALE", &
865 : variants=s2a("FRACTION"), &
866 : description="Scaling of the exact exchange contribution.", &
867 8546 : default_r_val=1.0_dp)
868 8546 : CALL section_add_keyword(subsubsection, keyword)
869 8546 : CALL keyword_release(keyword)
870 :
871 : !The RI metric subsection
872 : CALL section_create(subsubsubsection, __LOCATION__, name="RI_METRIC", &
873 : description="This subsection allows for the definition of an exchange "// &
874 : "RI metric that is different from the main exchange potential. "// &
875 : "By default (i.e. if this subsection is ignored), the "// &
876 : "exchange kernel is computed in the V approximation: "// &
877 : "(ab|ij) = (ab|P) V^-1 (Q|ij), where V = (P|Q). With a RI "// &
878 : "metric, we have a 2 step RI involving the metric potential "// &
879 : "for the 3-center integrals: "// &
880 : "(ab|ij) = (ab!P) (P!Q)^-1 (Q|R) (R!S)^-1 (S!ij), where | "// &
881 : "stands for the exchange potential and ! for the metric "// &
882 : "potential. This allows for drastic screening of the "// &
883 : "3-center integrals by selecting shorter range metric.", &
884 : n_keywords=5, &
885 : n_subsections=0, &
886 8546 : repeats=.FALSE.)
887 :
888 : CALL keyword_create(keyword, __LOCATION__, name="_SECTION_PARAMETERS_", &
889 : description="Enables the use of a RI metric.", &
890 : usage="&EXACT_EXCHANGE {logical}", &
891 : default_l_val=.FALSE., &
892 8546 : lone_keyword_l_val=.TRUE.)
893 8546 : CALL section_add_keyword(subsubsubsection, keyword)
894 8546 : CALL keyword_release(keyword)
895 :
896 : CALL keyword_create(keyword, __LOCATION__, name="POTENTIAL_TYPE", &
897 : variants=s2a("OP", "OPERATOR", "POTENTIAL"), &
898 : description="The type of operator used for the metric.", &
899 : usage="OPERATOR {string}", &
900 : repeats=.FALSE., &
901 : default_i_val=do_potential_id, &
902 : enum_c_vals=s2a("OVERLAP", "TRUNCATED", "SHORTRANGE"), &
903 : enum_desc=s2a("Overlap operator (=identity)", &
904 : "Truncated Coulomb operator: 1/r if r < R_c, 0 otherwise ", &
905 : "Short range: erfc(omega*r)/r"), &
906 : enum_i_vals=(/do_potential_id, do_potential_truncated, &
907 8546 : do_potential_short/))
908 8546 : CALL section_add_keyword(subsubsubsection, keyword)
909 8546 : CALL keyword_release(keyword)
910 :
911 : CALL keyword_create(keyword, __LOCATION__, name="CUTOFF_RADIUS", &
912 : variants=s2a("R_C", "RC", "RANGE"), &
913 : description="The cutoff radius (in Angstrom) for the truncated Coulomb operator.", &
914 : usage="CUTOFF_RADIUS {double}", &
915 : default_r_val=0.0_dp, &
916 8546 : repeats=.FALSE.)
917 8546 : CALL section_add_keyword(subsubsubsection, keyword)
918 8546 : CALL keyword_release(keyword)
919 :
920 : CALL keyword_create(keyword, __LOCATION__, name="T_C_G_DATA", &
921 : description="Location of the file t_c_g.dat that contains the data for the "// &
922 : "evaluation of the truncated gamma function ", &
923 : usage="T_C_G_DATA {string}", &
924 8546 : default_c_val="t_c_g.dat")
925 8546 : CALL section_add_keyword(subsubsubsection, keyword)
926 8546 : CALL keyword_release(keyword)
927 :
928 : CALL keyword_create(keyword, __LOCATION__, name="OMEGA", &
929 : description="The range parameter for the short range operator (in 1/a0).", &
930 : usage="OMEGA {double}", &
931 : default_r_val=0.0_dp, &
932 8546 : repeats=.FALSE.)
933 8546 : CALL section_add_keyword(subsubsubsection, keyword)
934 8546 : CALL keyword_release(keyword)
935 :
936 8546 : CALL section_add_subsection(subsubsection, subsubsubsection)
937 8546 : CALL section_release(subsubsubsection)
938 :
939 8546 : CALL section_add_subsection(subsection, subsubsection)
940 8546 : CALL section_release(subsubsection)
941 :
942 8546 : CALL section_add_subsection(section, subsection)
943 8546 : CALL section_release(subsection)
944 : ! End of Kernel subsection
945 :
946 : CALL section_create(subsection, __LOCATION__, "PRINT", "Controls the printing of information during "// &
947 8546 : "XAS TDP calculations", repeats=.FALSE.)
948 :
949 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="SPECTRUM", &
950 : description="Controles the dumping of the XAS TDP spectrum in output files", &
951 8546 : print_level=low_print_level, filename="", common_iter_levels=3)
952 8546 : CALL section_add_subsection(subsection, print_key)
953 8546 : CALL section_release(print_key)
954 :
955 : CALL cp_print_key_section_create(print_key, __LOCATION__, name="RESTART_WFN", &
956 : description="Controles the dumping of a MO restart file for a given "// &
957 : "excited state index. Only for K-edge RKS calculations. "// &
958 : "Can be repeated to get multiple *.wfn files at once.", &
959 8546 : print_level=debug_print_level, filename="", common_iter_levels=1)
960 : CALL keyword_create(keyword, __LOCATION__, name="EXCITED_STATE_INDEX", variants=(/"INDEX"/), &
961 : description="The index of the excited state that should be dumped", &
962 17092 : usage="INDEX {int}", default_i_val=1, repeats=.TRUE.)
963 8546 : CALL section_add_keyword(print_key, keyword)
964 8546 : CALL keyword_release(keyword)
965 :
966 8546 : CALL section_add_subsection(subsection, print_key)
967 8546 : CALL section_release(print_key)
968 :
969 8546 : CALL create_pdos_section(print_key)
970 8546 : CALL section_add_subsection(subsection, print_key)
971 8546 : CALL section_release(print_key)
972 :
973 : CALL cp_print_key_section_create(print_key, __LOCATION__, "CUBES", &
974 : description="Controls the printing of the linear-response orbitals "// &
975 : "as *.cube files.", &
976 : print_level=high_print_level, common_iter_levels=1, &
977 8546 : add_last=add_last_numeric, filename="")
978 :
979 : CALL keyword_create(keyword, __LOCATION__, name="STRIDE", &
980 : description="The stride (X,Y,Z) used to write the cube file "// &
981 : "(larger values result in smaller cube files). You can provide 3 numbers (for X,Y,Z) or"// &
982 : " 1 number valid for all components.", &
983 8546 : usage="STRIDE 2 2 2", n_var=-1, default_i_vals=(/2, 2, 2/), type_of_var=integer_t)
984 8546 : CALL section_add_keyword(print_key, keyword)
985 8546 : CALL keyword_release(keyword)
986 :
987 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LU_BOUNDS", &
988 : variants=(/"CUBES_LU"/), &
989 : description="The lower and upper index of the excited states to be printed as cube", &
990 : usage="CUBES_LU_BOUNDS integer integer", &
991 17092 : n_var=2, default_i_vals=(/1, 0/), type_of_var=integer_t)
992 8546 : CALL section_add_keyword(print_key, keyword)
993 8546 : CALL keyword_release(keyword)
994 :
995 : CALL keyword_create(keyword, __LOCATION__, name="CUBES_LIST", &
996 : description="Indexes of the excited states to be printed as cube files "// &
997 : "This keyword can be repeated several times "// &
998 : "(useful if you have to specify many indexes).", &
999 : usage="CUBES_LIST 1 2", &
1000 8546 : n_var=-1, type_of_var=integer_t, repeats=.TRUE.)
1001 8546 : CALL section_add_keyword(print_key, keyword)
1002 8546 : CALL keyword_release(keyword)
1003 :
1004 : CALL keyword_create(keyword, __LOCATION__, name="APPEND", &
1005 : description="append the cube files when they already exist", &
1006 8546 : default_l_val=.FALSE., lone_keyword_l_val=.TRUE.)
1007 8546 : CALL section_add_keyword(print_key, keyword)
1008 8546 : CALL keyword_release(keyword)
1009 :
1010 8546 : CALL section_add_subsection(subsection, print_key)
1011 8546 : CALL section_release(print_key)
1012 :
1013 : CALL cp_print_key_section_create(print_key, __LOCATION__, "RESTART", &
1014 : description="Controls the dumping of LR-orbitals coefficients "// &
1015 : "and corresponding excitation energies such that "// &
1016 : "the program can be restarted for PDOS or CUBE "// &
1017 : "printing without the heavy computing.", &
1018 8546 : print_level=high_print_level, filename="", common_iter_levels=3)
1019 8546 : CALL section_add_subsection(subsection, print_key)
1020 8546 : CALL section_release(print_key)
1021 :
1022 8546 : CALL section_add_subsection(section, subsection)
1023 8546 : CALL section_release(subsection)
1024 :
1025 8546 : END SUBROUTINE create_xas_tdp_section
1026 :
1027 : END MODULE input_cp2k_xas
|