35#include "./base/base_uses.f90"
40 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'input_cp2k_field'
56 cpassert(.NOT.
ASSOCIATED(section))
57 CALL section_create(section, __location__, name=
"PERIODIC_EFIELD", &
58 description=
"parameters for finite periodic electric field computed using"// &
59 " the Berry phase approach. IMPORTANT: Can only be used in combination"// &
60 " with OT. Can not be used in combination with RTP or EMD,"// &
61 " e.g. RESTART_RTP has to be .FALSE. when restarting the job.", &
63 n_keywords=6, n_subsections=1, repeats=.true.)
68 description=
"Intensity of the electric field in a.u, "// &
69 "not allowed together with INTENSITY_LIST", &
70 usage=
"INTENSITY 0.001", &
76 description=
"Polarisation vector of electric field", &
77 usage=
"POLARISATION 0.0 0.0 1.0", &
78 repeats=.false., n_var=3, &
79 type_of_var=
real_t, default_r_vals=[0.0_dp, 0.0_dp, 1.0_dp])
83 CALL keyword_create(keyword, __location__, name=
"DISPLACEMENT_FIELD", &
84 description=
"Use the displacement field formulation.", &
85 usage=
"DISPLACEMENT_FIELD T", &
87 default_l_val=.false., &
88 lone_keyword_l_val=.true.)
93 description=
"Filter for displacement field (x,y,z-direction)", &
94 usage=
"D_FILTER 1.0 0.0 0.0", &
95 repeats=.false., n_var=3, &
96 type_of_var=
real_t, default_r_vals=[1.0_dp, 1.0_dp, 1.0_dp])
100 CALL keyword_create(keyword, __location__, name=
"INTENSITY_LIST", &
101 description=
"Intensities of the electric field in a.u. "// &
102 "They are applied sequentially, one per frame. "// &
103 "If the number of frames exceeds the number of values, "// &
104 "the list is cyclically repeated. Attention: not implemented for eeq.", &
105 usage=
"INTENSITY_LIST {real} {real} .. {real}", &
106 n_var=-1, type_of_var=
real_t, default_r_vals=[0.0_dp])
110 CALL keyword_create(keyword, __location__, name=
"INTENSITIES_FILE_NAME", &
111 description=
"File containting a list of intensities, "// &
112 "one per line, in a.u. "// &
113 "They are applied sequentially, one per frame. "// &
114 "If the number of frames exceeds the number of values, "// &
115 "the list is cyclically repeated. Attention: not implemented for eeq.", &
116 usage=
"INTENSITIES_FILE_NAME filename", &
122 description=
"First frame the field is applied. "// &
123 "(0: first frame) "// &
124 "Attention: ignored for eeq", &
125 usage=
"START_FRAME 0", &
131 description=
"Last frame the field is applied. "// &
132 "If an end frame is specified, the number of active frames "// &
133 "must be a multiple of the number of "// &
134 "the given intensity values. (-1: no end) "// &
135 "Attention: ignored for eeq", &
136 usage=
"END_FRAME -1", &
153 cpassert(.NOT.
ASSOCIATED(section))
155 description=
"Parameters for finite, time dependent electric fields. "// &
156 "For time dependent propagation in periodic systems, set "// &
157 "DFT%REAL_TIME_PROPAGATION%VELOCITY_GAUGE to true. "// &
158 "For static fields use EXTERNAL_POTENTIAL.", &
159 n_keywords=6, n_subsections=1, repeats=.true.)
161 NULLIFY (keyword, subsection)
164 description=
"Intensity of the electric field. "// &
165 "For real-time propagation (RTP) calculations, the intensity is in "// &
166 "$\mathrm{W/cm^2}$. The corresponding peak electric field amplitude "// &
167 "$E_0$ in atomic units ($E_H/a_B \approx 82.4\,\mathrm{V/nm}$) is "// &
168 "$E_0 = \sqrt{I\,[\mathrm{W/cm^2}]\;/\;(3.5094410 \cdot 10^{16})} "// &
169 "\cdot E_H/a_B$, "// &
170 "derived from the atomic unit of energy flux $I_0 = cE_H^2/(8\pi)$ "// &
171 "and the relation $I = E_0^2$ in atomic units. "// &
172 "For a constant local field in an isolated-system calculation, "// &
173 "units are in a.u. In place of intensity, AMPLITUDE can be provided.", &
174 usage=
"INTENSITY 0.001", &
180 description=
"Amplitude of the electric field of the light wave. "// &
181 "One can specify either INTENSITY or AMPLITUDE. An error will be "// &
182 "raised if both are specified.", &
183 usage=
"AMPLITUDE [Vnm-1] 1.06", unit_str=
"Vm-1", &
189 description=
"Polarisation vector of electric field", &
190 usage=
"POLARISATION 0.0 0.0 1.0", &
191 repeats=.false., n_var=3, &
192 type_of_var=
real_t, default_r_vals=[0.0_dp, 0.0_dp, 1.0_dp])
197 description=
"Wavelength of efield field for real-time propagation (RTP) calculations.", &
198 usage=
"Wavelength 1.E0", &
199 default_r_val=0._dp, unit_str=
"nm")
204 description=
"Phase offset of the cosine given in multiples of pi. "// &
205 "Used in real-time propagation (RTP) calculations.", &
206 usage=
"Phase 1.E0", &
212 description=
"Shape of the efield pulse used in real-time propagation (RTP) calculations.", &
213 usage=
"ENVELOP CONSTANT", &
215 enum_c_vals=
s2a(
"CONSTANT",
"GAUSSIAN",
"RAMP",
"CUSTOM"), &
216 enum_desc=
s2a(
"No envelop function is applied to the strength", &
217 "A Gaussian function is used as envelop ", &
218 "Linear tune in/out of the field", &
219 "A custom field read from a file"), &
224 CALL keyword_create(keyword, __location__, name=
"VEC_POT_INITIAL", &
225 description=
"Initial value of the vector "// &
226 "potential (for velocity gauge). This input is "// &
227 "made especially for restarting RTP calculation. "// &
228 "Unit is atomic unit. "// &
229 "Note that if several field sections are defined, only the first one will be used.", &
230 usage=
"vec_pot_initial 1.0E-2 0.0 0.0", &
232 n_var=3, type_of_var=
real_t, &
233 default_r_vals=[0.0_dp, 0.0_dp, 0.0_dp])
237 CALL create_constant_env_section(subsection)
241 CALL create_gaussian_env_section(subsection)
245 CALL create_ramp_env_section(subsection)
249 CALL create_custom_env_section(subsection)
259 SUBROUTINE create_constant_env_section(section)
264 cpassert(.NOT.
ASSOCIATED(section))
266 description=
"parameters for a constant envelop", &
267 n_keywords=6, n_subsections=1, repeats=.true.)
272 description=
"First step the field is applied ", &
273 usage=
"START_STEP 0", &
279 description=
"Last step the field is applied", &
280 usage=
"END_STEP 2", &
285 END SUBROUTINE create_constant_env_section
291 SUBROUTINE create_gaussian_env_section(section)
296 cpassert(.NOT.
ASSOCIATED(section))
298 description=
"parameters for a gaussian envelop", &
299 n_keywords=6, n_subsections=1, repeats=.true.)
304 description=
"Center of the gaussian envelop (maximum of the gaussian)", &
306 default_r_val=0.0e0_dp, &
312 description=
"Width of the gaussian ", &
313 usage=
"SIGMA 2.0E0", &
314 default_r_val=-1.0e0_dp, &
319 END SUBROUTINE create_gaussian_env_section
325 SUBROUTINE create_ramp_env_section(section)
330 cpassert(.NOT.
ASSOCIATED(section))
332 description=
"Parameters for an trapeziodal envelop ", &
333 n_keywords=6, n_subsections=1, repeats=.true.)
337 CALL keyword_create(keyword, __location__, name=
"START_STEP_IN", &
338 description=
"Step when the electric field starts to be applied ", &
339 usage=
"START_STEP_IN 0", &
345 description=
"Step when the field reaches the full strength", &
346 usage=
"END_STEP_IN 2", &
351 CALL keyword_create(keyword, __location__, name=
"START_STEP_OUT", &
352 description=
"Step when the field starts to vanish ", &
353 usage=
"START_STEP_OUT 0", &
359 description=
"Step when the field disappears", &
360 usage=
"END_STEP_OUT 2", &
365 END SUBROUTINE create_ramp_env_section
371 SUBROUTINE create_custom_env_section(section)
376 cpassert(.NOT.
ASSOCIATED(section))
378 description=
"Parameters for a custom efield", &
379 n_keywords=2, n_subsections=1, repeats=.true.)
383 CALL keyword_create(keyword, __location__, name=
"EFIELD_FILE_NAME", &
384 description=
"Specify file that contains the electric field [V/m].", &
385 usage=
"EFIELD_FILE_NAME filename", &
386 n_var=1, type_of_var=
char_t, default_c_val=
"")
391 description=
"The time step between the entries in the list with the electric field.", &
392 usage=
"TIMESTEP 1", &
394 default_r_val=1.0_dp)
398 END SUBROUTINE create_custom_env_section
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public umari2002
integer, save, public stengel2009
integer, save, public souza2002
Defines the basic variable types.
integer, parameter, public dp
Utilities for string manipulations.