(git:e8d1ac1)
Loading...
Searching...
No Matches
cp_control_utils.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Utilities to set up the control types
10! **************************************************************************************************
12 USE bibliography, ONLY: &
18 USE cp_control_types, ONLY: &
23 USE cp_files, ONLY: close_file,&
34 USE cp_units, ONLY: cp_unit_from_cp2k,&
36 USE eeq_input, ONLY: read_eeq_param
38 USE input_constants, ONLY: &
67 USE input_section_types, ONLY: &
70 USE kinds, ONLY: default_path_length,&
72 dp
73 USE mathconstants, ONLY: fourpi
79 USE util, ONLY: sort
84 USE xc_write_output, ONLY: xc_write
85#include "./base/base_uses.f90"
86
87 IMPLICIT NONE
88
89 PRIVATE
90
91 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'cp_control_utils'
92
93 PUBLIC :: read_dft_control, &
102CONTAINS
103
104! **************************************************************************************************
105!> \brief ...
106!> \param dft_control ...
107!> \param dft_section ...
108! **************************************************************************************************
109 SUBROUTINE read_dft_control(dft_control, dft_section)
110 TYPE(dft_control_type), POINTER :: dft_control
111 TYPE(section_vals_type), POINTER :: dft_section
112
113 CHARACTER(len=default_path_length) :: basis_set_file_name, &
114 intensities_file_name, &
115 potential_file_name
116 CHARACTER(LEN=default_string_length), &
117 DIMENSION(:), POINTER :: tmpstringlist
118 INTEGER :: admmtype, irep, isize, method_id, nrep, &
119 xc_deriv_method_id
120 LOGICAL :: at_end, do_hfx, do_ot, do_rpa_admm, do_rtp, exopt1, exopt2, exopt3, explicit, &
121 is_present, l_param, local_moment_possible, not_se, was_present
122 REAL(kind=dp) :: density_cut, gradient_cut, tau_cut
123 REAL(kind=dp), DIMENSION(:), POINTER :: pol
124 TYPE(cp_logger_type), POINTER :: logger
125 TYPE(cp_parser_type) :: parser
126 TYPE(section_vals_type), POINTER :: hairy_probes_section, hfx_section, maxwell_section, &
127 sccs_section, scf_section, tmp_section, xc_fun_section, xc_section
128
129 was_present = .false.
130
131 logger => cp_get_default_logger()
132
133 NULLIFY (tmp_section, xc_fun_section, xc_section)
134 ALLOCATE (dft_control)
135 CALL dft_control_create(dft_control)
136 ! determine wheather this is a semiempirical or DFTB run
137 ! --> (no XC section needs to be provided)
138 not_se = .true.
139 CALL section_vals_val_get(dft_section, "QS%METHOD", i_val=method_id)
140 SELECT CASE (method_id)
143 not_se = .false.
144 END SELECT
145 ! Check for XC section and XC_FUNCTIONAL section
146 xc_section => section_vals_get_subs_vals(dft_section, "XC")
147 CALL section_vals_get(xc_section, explicit=is_present)
148 IF (.NOT. is_present .AND. not_se) THEN
149 cpabort("XC section missing.")
150 END IF
151 IF (is_present) THEN
152 CALL section_vals_val_get(xc_section, "density_cutoff", r_val=density_cut)
153 CALL section_vals_val_get(xc_section, "gradient_cutoff", r_val=gradient_cut)
154 CALL section_vals_val_get(xc_section, "tau_cutoff", r_val=tau_cut)
155 ! Perform numerical stability checks and possibly correct the issues
156 IF (density_cut <= epsilon(0.0_dp)*100.0_dp) &
157 CALL cp_warn(__location__, &
158 "DENSITY_CUTOFF lower than 100*EPSILON, where EPSILON is the machine precision. "// &
159 "This may lead to numerical problems. Setting up shake_tol to 100*EPSILON! ")
160 density_cut = max(epsilon(0.0_dp)*100.0_dp, density_cut)
161 IF (gradient_cut <= epsilon(0.0_dp)*100.0_dp) &
162 CALL cp_warn(__location__, &
163 "GRADIENT_CUTOFF lower than 100*EPSILON, where EPSILON is the machine precision. "// &
164 "This may lead to numerical problems. Setting up shake_tol to 100*EPSILON! ")
165 gradient_cut = max(epsilon(0.0_dp)*100.0_dp, gradient_cut)
166 IF (tau_cut <= epsilon(0.0_dp)*100.0_dp) &
167 CALL cp_warn(__location__, &
168 "TAU_CUTOFF lower than 100*EPSILON, where EPSILON is the machine precision. "// &
169 "This may lead to numerical problems. Setting up shake_tol to 100*EPSILON! ")
170 tau_cut = max(epsilon(0.0_dp)*100.0_dp, tau_cut)
171 CALL section_vals_val_set(xc_section, "density_cutoff", r_val=density_cut)
172 CALL section_vals_val_set(xc_section, "gradient_cutoff", r_val=gradient_cut)
173 CALL section_vals_val_set(xc_section, "tau_cutoff", r_val=tau_cut)
174 END IF
175 xc_fun_section => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
176 CALL section_vals_get(xc_fun_section, explicit=is_present)
177 IF (.NOT. is_present .AND. not_se) THEN
178 cpabort("XC_FUNCTIONAL section missing.")
179 END IF
180 scf_section => section_vals_get_subs_vals(dft_section, "SCF")
181 CALL section_vals_val_get(dft_section, "UKS", l_val=dft_control%uks)
182 CALL section_vals_val_get(dft_section, "ROKS", l_val=dft_control%roks)
183 IF (dft_control%uks .OR. dft_control%roks) THEN
184 dft_control%nspins = 2
185 ELSE
186 dft_control%nspins = 1
187 END IF
188
189 dft_control%lsd = (dft_control%nspins > 1)
190 dft_control%use_kinetic_energy_density = xc_uses_kinetic_energy_density(xc_fun_section, dft_control%lsd)
191
192 xc_deriv_method_id = section_get_ival(xc_section, "XC_GRID%XC_DERIV")
193 dft_control%drho_by_collocation = (xc_uses_norm_drho(xc_fun_section, dft_control%lsd) &
194 .AND. (xc_deriv_method_id == xc_deriv_collocate))
195 IF (dft_control%drho_by_collocation) THEN
196 cpabort("derivatives by collocation not implemented")
197 END IF
198
199 ! Automatic auxiliary basis set generation
200 CALL section_vals_val_get(dft_section, "AUTO_BASIS", n_rep_val=nrep)
201 DO irep = 1, nrep
202 CALL section_vals_val_get(dft_section, "AUTO_BASIS", i_rep_val=irep, c_vals=tmpstringlist)
203 IF (SIZE(tmpstringlist) == 2) THEN
204 CALL uppercase(tmpstringlist(2))
205 SELECT CASE (tmpstringlist(2))
206 CASE ("X")
207 isize = -1
208 CASE ("SMALL")
209 isize = 0
210 CASE ("MEDIUM")
211 isize = 1
212 CASE ("LARGE")
213 isize = 2
214 CASE ("HUGE")
215 isize = 3
216 CASE DEFAULT
217 cpwarn("Unknown basis size in AUTO_BASIS keyword:"//trim(tmpstringlist(1)))
218 END SELECT
219 !
220 SELECT CASE (tmpstringlist(1))
221 CASE ("X")
222 CASE ("RI_AUX")
223 dft_control%auto_basis_ri_aux = isize
224 CASE ("AUX_FIT")
225 dft_control%auto_basis_aux_fit = isize
226 CASE ("LRI_AUX")
227 dft_control%auto_basis_lri_aux = isize
228 CASE ("P_LRI_AUX")
229 dft_control%auto_basis_p_lri_aux = isize
230 CASE ("RI_HXC")
231 dft_control%auto_basis_ri_hxc = isize
232 CASE ("RI_XAS")
233 dft_control%auto_basis_ri_xas = isize
234 CASE ("RI_HFX")
235 dft_control%auto_basis_ri_hfx = isize
236 CASE DEFAULT
237 cpwarn("Unknown basis type in AUTO_BASIS keyword:"//trim(tmpstringlist(1)))
238 END SELECT
239 ELSE
240 CALL cp_abort(__location__, &
241 "AUTO_BASIS keyword in &DFT section has a wrong number of arguments.")
242 END IF
243 END DO
244
245 !! check if we do wavefunction fitting
246 tmp_section => section_vals_get_subs_vals(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD")
247 CALL section_vals_get(tmp_section, explicit=is_present)
248 !
249 hfx_section => section_vals_get_subs_vals(xc_section, "HF")
250 CALL section_vals_get(hfx_section, explicit=do_hfx)
251 CALL section_vals_val_get(xc_section, "WF_CORRELATION%RI_RPA%ADMM", l_val=do_rpa_admm)
252 is_present = is_present .AND. (do_hfx .OR. do_rpa_admm)
253 !
254 dft_control%do_admm = is_present
255 dft_control%do_admm_mo = .false.
256 dft_control%do_admm_dm = .false.
257 IF (is_present) THEN
258 do_ot = .false.
259 CALL section_vals_val_get(scf_section, "OT%_SECTION_PARAMETERS_", l_val=do_ot)
260 CALL admm_control_create(dft_control%admm_control)
261
262 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_TYPE", i_val=admmtype)
263 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", explicit=exopt1)
264 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%METHOD", explicit=exopt2)
265 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_SCALING_MODEL", explicit=exopt3)
266 dft_control%admm_control%admm_type = admmtype
267 SELECT CASE (admmtype)
268 CASE (no_admm_type)
269 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", i_val=method_id)
270 dft_control%admm_control%purification_method = method_id
271 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%METHOD", i_val=method_id)
272 dft_control%admm_control%method = method_id
273 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_SCALING_MODEL", i_val=method_id)
274 dft_control%admm_control%scaling_model = method_id
275 CASE (admm1_type)
276 ! METHOD BASIS_PROJECTION
277 ! ADMM_PURIFICATION_METHOD choose
278 ! EXCH_SCALING_MODEL NONE
279 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%ADMM_PURIFICATION_METHOD", i_val=method_id)
280 dft_control%admm_control%purification_method = method_id
281 dft_control%admm_control%method = do_admm_basis_projection
282 dft_control%admm_control%scaling_model = do_admm_exch_scaling_none
283 CASE (admm2_type)
284 ! METHOD BASIS_PROJECTION
285 ! ADMM_PURIFICATION_METHOD NONE
286 ! EXCH_SCALING_MODEL NONE
287 dft_control%admm_control%purification_method = do_admm_purify_none
288 dft_control%admm_control%method = do_admm_basis_projection
289 dft_control%admm_control%scaling_model = do_admm_exch_scaling_none
290 CASE (admms_type)
291 ! ADMM_PURIFICATION_METHOD NONE
292 ! METHOD CHARGE_CONSTRAINED_PROJECTION
293 ! EXCH_SCALING_MODEL MERLOT
294 dft_control%admm_control%purification_method = do_admm_purify_none
295 dft_control%admm_control%method = do_admm_charge_constrained_projection
296 dft_control%admm_control%scaling_model = do_admm_exch_scaling_merlot
297 CASE (admmp_type)
298 ! ADMM_PURIFICATION_METHOD NONE
299 ! METHOD BASIS_PROJECTION
300 ! EXCH_SCALING_MODEL MERLOT
301 dft_control%admm_control%purification_method = do_admm_purify_none
302 dft_control%admm_control%method = do_admm_basis_projection
303 dft_control%admm_control%scaling_model = do_admm_exch_scaling_merlot
304 CASE (admmq_type)
305 ! ADMM_PURIFICATION_METHOD NONE
306 ! METHOD CHARGE_CONSTRAINED_PROJECTION
307 ! EXCH_SCALING_MODEL NONE
308 dft_control%admm_control%purification_method = do_admm_purify_none
309 dft_control%admm_control%method = do_admm_charge_constrained_projection
310 dft_control%admm_control%scaling_model = do_admm_exch_scaling_none
311 CASE DEFAULT
312 CALL cp_abort(__location__, &
313 "ADMM_TYPE keyword in &AUXILIARY_DENSITY_MATRIX_METHOD section has a wrong value.")
314 END SELECT
315
316 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EPS_FILTER", &
317 r_val=dft_control%admm_control%eps_filter)
318
319 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%EXCH_CORRECTION_FUNC", i_val=method_id)
320 dft_control%admm_control%aux_exch_func = method_id
321
322 ! parameters for X functional
323 dft_control%admm_control%aux_exch_func_param = .false.
324 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%OPTX_A1", explicit=explicit, &
325 r_val=dft_control%admm_control%aux_x_param(1))
326 IF (explicit) dft_control%admm_control%aux_exch_func_param = .true.
327 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%OPTX_A2", explicit=explicit, &
328 r_val=dft_control%admm_control%aux_x_param(2))
329 IF (explicit) dft_control%admm_control%aux_exch_func_param = .true.
330 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%OPTX_GAMMA", explicit=explicit, &
331 r_val=dft_control%admm_control%aux_x_param(3))
332 IF (explicit) dft_control%admm_control%aux_exch_func_param = .true.
333
334 CALL read_admm_block_list(dft_control%admm_control, dft_section)
335
336 ! check for double assignments
337 SELECT CASE (admmtype)
338 CASE (admm2_type)
339 IF (exopt2) CALL cp_warn(__location__, &
340 "Value of ADMM_PURIFICATION_METHOD keyword will be overwritten with ADMM_TYPE selections.")
341 IF (exopt3) CALL cp_warn(__location__, &
342 "Value of EXCH_SCALING_MODEL keyword will be overwritten with ADMM_TYPE selections.")
344 IF (exopt1) CALL cp_warn(__location__, &
345 "Value of METHOD keyword will be overwritten with ADMM_TYPE selections.")
346 IF (exopt2) CALL cp_warn(__location__, &
347 "Value of METHOD keyword will be overwritten with ADMM_TYPE selections.")
348 IF (exopt3) CALL cp_warn(__location__, &
349 "Value of EXCH_SCALING_MODEL keyword will be overwritten with ADMM_TYPE selections.")
350 END SELECT
351
352 ! In the case of charge-constrained projection (e.g. according to Merlot),
353 ! there is no purification needed and hence, do_admm_purify_none has to be set.
354
355 IF ((dft_control%admm_control%method == do_admm_blocking_purify_full .OR. &
356 dft_control%admm_control%method == do_admm_blocked_projection) &
357 .AND. dft_control%admm_control%scaling_model == do_admm_exch_scaling_merlot) THEN
358 cpabort("ADMM: Blocking and Merlot scaling are mutually exclusive.")
359 END IF
360
361 IF (dft_control%admm_control%method == do_admm_charge_constrained_projection .AND. &
362 dft_control%admm_control%purification_method /= do_admm_purify_none) THEN
363 CALL cp_abort(__location__, &
364 "ADMM: In the case of METHOD=CHARGE_CONSTRAINED_PROJECTION, "// &
365 "ADMM_PURIFICATION_METHOD=NONE has to be set.")
366 END IF
367
368 IF (dft_control%admm_control%purification_method == do_admm_purify_mo_diag .OR. &
369 dft_control%admm_control%purification_method == do_admm_purify_mo_no_diag) THEN
370 IF (dft_control%admm_control%method /= do_admm_basis_projection) &
371 cpabort("ADMM: Chosen purification requires BASIS_PROJECTION")
372
373 IF (.NOT. do_ot) cpabort("ADMM: MO-based purification requires OT.")
374 END IF
375
376 IF (dft_control%admm_control%purification_method == do_admm_purify_none_dm .OR. &
377 dft_control%admm_control%purification_method == do_admm_purify_mcweeny) THEN
378 dft_control%do_admm_dm = .true.
379 ELSE
380 dft_control%do_admm_mo = .true.
381 END IF
382 END IF
383
384 ! Set restricted to true, if both OT and ROKS are requested
385 !MK in principle dft_control%restricted could be dropped completely like the
386 !MK input key by using only dft_control%roks now
387 CALL section_vals_val_get(scf_section, "OT%_SECTION_PARAMETERS_", l_val=l_param)
388 dft_control%restricted = (dft_control%roks .AND. l_param)
389
390 CALL section_vals_val_get(dft_section, "CHARGE", i_val=dft_control%charge)
391 CALL section_vals_val_get(dft_section, "MULTIPLICITY", i_val=dft_control%multiplicity)
392 CALL section_vals_val_get(dft_section, "RELAX_MULTIPLICITY", r_val=dft_control%relax_multiplicity)
393 IF (dft_control%relax_multiplicity > 0.0_dp) THEN
394 IF (.NOT. dft_control%uks) &
395 CALL cp_abort(__location__, "The option RELAX_MULTIPLICITY is only valid for "// &
396 "unrestricted Kohn-Sham (UKS) calculations")
397 END IF
398
399 !Read the HAIR PROBES input section if present
400 hairy_probes_section => section_vals_get_subs_vals(dft_section, "HAIRY_PROBES")
401 CALL section_vals_get(hairy_probes_section, n_repetition=nrep, explicit=is_present)
402
403 IF (is_present) THEN
404 dft_control%hairy_probes = .true.
405 ALLOCATE (dft_control%probe(nrep))
406 CALL read_hairy_probes_sections(dft_control, hairy_probes_section)
407 END IF
408
409 ! check for the presence of the low spin roks section
410 tmp_section => section_vals_get_subs_vals(dft_section, "LOW_SPIN_ROKS")
411 CALL section_vals_get(tmp_section, explicit=dft_control%low_spin_roks)
412
413 dft_control%sic_method_id = sic_none
414 dft_control%sic_scaling_a = 1.0_dp
415 dft_control%sic_scaling_b = 1.0_dp
416
417 ! DFT+U
418 dft_control%dft_plus_u = .false.
419 CALL section_vals_val_get(dft_section, "PLUS_U_METHOD", i_val=method_id)
420 dft_control%plus_u_method_id = method_id
421
422 ! Smearing in use
423 dft_control%smear = .false.
424
425 ! Surface dipole correction
426 dft_control%correct_surf_dip = .false.
427 CALL section_vals_val_get(dft_section, "SURFACE_DIPOLE_CORRECTION", l_val=dft_control%correct_surf_dip)
428 CALL section_vals_val_get(dft_section, "SURF_DIP_DIR", i_val=dft_control%dir_surf_dip)
429 dft_control%pos_dir_surf_dip = -1.0_dp
430 CALL section_vals_val_get(dft_section, "SURF_DIP_POS", r_val=dft_control%pos_dir_surf_dip)
431 ! another logical variable, surf_dip_correct_switch, is introduced for
432 ! implementation of "SURF_DIP_SWITCH" [SGh]
433 dft_control%switch_surf_dip = .false.
434 dft_control%surf_dip_correct_switch = dft_control%correct_surf_dip
435 CALL section_vals_val_get(dft_section, "SURF_DIP_SWITCH", l_val=dft_control%switch_surf_dip)
436 dft_control%correct_el_density_dip = .false.
437 CALL section_vals_val_get(dft_section, "CORE_CORR_DIP", l_val=dft_control%correct_el_density_dip)
438 IF (dft_control%correct_el_density_dip) THEN
439 IF (dft_control%correct_surf_dip) THEN
440 ! Do nothing, move on
441 ELSE
442 dft_control%correct_el_density_dip = .false.
443 cpwarn("CORE_CORR_DIP keyword is activated only if SURFACE_DIPOLE_CORRECTION is TRUE")
444 END IF
445 END IF
446
447 CALL section_vals_val_get(dft_section, "BASIS_SET_FILE_NAME", &
448 c_val=basis_set_file_name)
449 CALL section_vals_val_get(dft_section, "POTENTIAL_FILE_NAME", &
450 c_val=potential_file_name)
451
452 ! Read the input section
453 tmp_section => section_vals_get_subs_vals(dft_section, "sic")
454 CALL section_vals_val_get(tmp_section, "SIC_METHOD", &
455 i_val=dft_control%sic_method_id)
456 CALL section_vals_val_get(tmp_section, "ORBITAL_SET", &
457 i_val=dft_control%sic_list_id)
458 CALL section_vals_val_get(tmp_section, "SIC_SCALING_A", &
459 r_val=dft_control%sic_scaling_a)
460 CALL section_vals_val_get(tmp_section, "SIC_SCALING_B", &
461 r_val=dft_control%sic_scaling_b)
462
463 do_rtp = .false.
464 tmp_section => section_vals_get_subs_vals(dft_section, "REAL_TIME_PROPAGATION")
465 CALL section_vals_get(tmp_section, explicit=is_present)
466 IF (is_present) THEN
467 CALL read_rtp_section(dft_control, tmp_section)
468 do_rtp = .true.
469 END IF
470
471 ! Read the input section
472 tmp_section => section_vals_get_subs_vals(dft_section, "XAS")
473 CALL section_vals_get(tmp_section, explicit=dft_control%do_xas_calculation)
474 IF (dft_control%do_xas_calculation) THEN
475 ! Override with section parameter
476 CALL section_vals_val_get(tmp_section, "_SECTION_PARAMETERS_", &
477 l_val=dft_control%do_xas_calculation)
478 END IF
479
480 tmp_section => section_vals_get_subs_vals(dft_section, "XAS_TDP")
481 CALL section_vals_get(tmp_section, explicit=dft_control%do_xas_tdp_calculation)
482 IF (dft_control%do_xas_tdp_calculation) THEN
483 ! Override with section parameter
484 CALL section_vals_val_get(tmp_section, "_SECTION_PARAMETERS_", &
485 l_val=dft_control%do_xas_tdp_calculation)
486 END IF
487
488 ! Read the finite field input section
489 dft_control%apply_efield = .false.
490 dft_control%apply_efield_field = .false. !this is for RTP
491 dft_control%apply_vector_potential = .false. !this is for RTP
492 tmp_section => section_vals_get_subs_vals(dft_section, "EFIELD")
493 CALL section_vals_get(tmp_section, n_repetition=nrep, explicit=is_present)
494 IF (is_present) THEN
495 ALLOCATE (dft_control%efield_fields(nrep))
496 CALL read_efield_sections(dft_control, tmp_section)
497 IF (do_rtp) THEN
498 IF (.NOT. dft_control%rtp_control%velocity_gauge) THEN
499 dft_control%apply_efield_field = .true.
500 ELSE
501 dft_control%apply_vector_potential = .true.
502 ! Use this input value of vector potential to (re)start RTP
503 dft_control%rtp_control%vec_pot = dft_control%efield_fields(1)%efield%vec_pot_initial
504 END IF
505 ELSE
506 dft_control%apply_efield = .true.
507 cpassert(nrep == 1)
508 END IF
509 END IF
510
511 ! Now, can try to guess polarisation in rtp
512 IF (do_rtp) THEN
513 ! tmp_section => section_vals_get_subs_vals(dft_section, "REAL_TIME_PROPAGATION%PRINT%POLARIZABILITY")
514 ! CALL section_vals_get(tmp_section, explicit=is_present)
515 local_moment_possible = (dft_control%rtp_control%rtp_method == rtp_method_bse) .OR. &
516 ((.NOT. dft_control%rtp_control%periodic) .AND. dft_control%rtp_control%linear_scaling)
517 IF (local_moment_possible .AND. (.NOT. ASSOCIATED(dft_control%rtp_control%print_pol_elements))) THEN
518 tmp_section => section_vals_get_subs_vals(dft_section, "REAL_TIME_PROPAGATION")
519 CALL guess_pol_elements(dft_control, &
520 dft_control%rtp_control%print_pol_elements)
521 END IF
522 END IF
523
524 ! Read the finite field input section for periodic fields
525 tmp_section => section_vals_get_subs_vals(dft_section, "PERIODIC_EFIELD")
526 CALL section_vals_get(tmp_section, explicit=dft_control%apply_period_efield)
527 IF (dft_control%apply_period_efield) THEN
528 ALLOCATE (dft_control%period_efield)
529 CALL section_vals_val_get(tmp_section, "POLARISATION", r_vals=pol)
530 dft_control%period_efield%polarisation(1:3) = pol(1:3)
531 CALL section_vals_val_get(tmp_section, "D_FILTER", r_vals=pol)
532 dft_control%period_efield%d_filter(1:3) = pol(1:3)
533 CALL section_vals_val_get(tmp_section, "INTENSITY", &
534 r_val=dft_control%period_efield%strength)
535 dft_control%period_efield%displacement_field = .false.
536 CALL section_vals_val_get(tmp_section, "DISPLACEMENT_FIELD", &
537 l_val=dft_control%period_efield%displacement_field)
538
539 CALL section_vals_val_get(tmp_section, "INTENSITY_LIST", r_vals=pol)
540
541 CALL section_vals_val_get(tmp_section, "INTENSITIES_FILE_NAME", c_val=intensities_file_name)
542
543 IF (SIZE(pol) > 1 .OR. pol(1) /= 0.0_dp) THEN
544 ! if INTENSITY_LIST is present, INTENSITY and INTENSITIES_FILE_NAME must not be present
545 IF (dft_control%period_efield%strength /= 0.0_dp .OR. intensities_file_name /= "") THEN
546 CALL cp_abort(__location__, "[PERIODIC FIELD] Only one of INTENSITY, INTENSITY_LIST "// &
547 "or INTENSITIES_FILE_NAME can be specified.")
548 END IF
549
550 ALLOCATE (dft_control%period_efield%strength_list(SIZE(pol)))
551 dft_control%period_efield%strength_list(1:SIZE(pol)) = pol(1:SIZE(pol))
552 END IF
553
554 IF (intensities_file_name /= "") THEN
555 ! if INTENSITIES_FILE_NAME is present, INTENSITY must not be present
556 IF (dft_control%period_efield%strength /= 0.0_dp) THEN
557 CALL cp_abort(__location__, "[PERIODIC FIELD] Only one of INTENSITY, INTENSITY_LIST "// &
558 "or INTENSITIES_FILE_NAME can be specified.")
559 END IF
560
561 CALL parser_create(parser, intensities_file_name)
562
563 nrep = 0
564 DO WHILE (.true.)
565 CALL parser_read_line(parser, 1, at_end)
566 IF (at_end) EXIT
567 nrep = nrep + 1
568 END DO
569
570 IF (nrep == 0) THEN
571 cpabort("[PERIODIC FIELD] No intensities found in INTENSITIES_FILE_NAME")
572 END IF
573
574 ALLOCATE (dft_control%period_efield%strength_list(nrep))
575
576 CALL parser_reset(parser)
577 DO irep = 1, nrep
578 CALL parser_read_line(parser, 1)
579 READ (parser%input_line, *) dft_control%period_efield%strength_list(irep)
580 END DO
581
582 CALL parser_release(parser)
583 END IF
584
585 CALL section_vals_val_get(tmp_section, "START_FRAME", &
586 i_val=dft_control%period_efield%start_frame)
587 CALL section_vals_val_get(tmp_section, "END_FRAME", &
588 i_val=dft_control%period_efield%end_frame)
589
590 IF (dft_control%period_efield%end_frame /= -1) THEN
591 ! check if valid bounds are given
592 ! if an end frame is given, the number of active frames must be a
593 ! multiple of the number of intensities
594 IF (dft_control%period_efield%start_frame > dft_control%period_efield%end_frame) THEN
595 cpabort("[PERIODIC FIELD] START_FRAME > END_FRAME")
596 ELSE IF (dft_control%period_efield%start_frame < 1) THEN
597 cpabort("[PERIODIC FIELD] START_FRAME < 1")
598 ELSE IF (mod(dft_control%period_efield%end_frame - &
599 dft_control%period_efield%start_frame + 1, SIZE(pol)) /= 0) THEN
600 CALL cp_abort(__location__, &
601 "[PERIODIC FIELD] Number of active frames must be a multiple of the number of intensities")
602 END IF
603 END IF
604
605 ! periodic fields don't work with RTP
606 cpassert(.NOT. do_rtp)
607 IF (dft_control%period_efield%displacement_field) THEN
608 CALL cite_reference(stengel2009)
609 ELSE
610 CALL cite_reference(souza2002)
611 CALL cite_reference(umari2002)
612 END IF
613 END IF
614
615 ! Read the external potential input section
616 tmp_section => section_vals_get_subs_vals(dft_section, "EXTERNAL_POTENTIAL")
617 CALL section_vals_get(tmp_section, explicit=dft_control%apply_external_potential)
618 IF (dft_control%apply_external_potential) THEN
619 CALL expot_control_create(dft_control%expot_control)
620 CALL section_vals_val_get(tmp_section, "READ_FROM_CUBE", &
621 l_val=dft_control%expot_control%read_from_cube)
622 CALL section_vals_val_get(tmp_section, "STATIC", &
623 l_val=dft_control%expot_control%static)
624 CALL section_vals_val_get(tmp_section, "SCALING_FACTOR", &
625 r_val=dft_control%expot_control%scaling_factor)
626 ! External potential using Maxwell equation
627 maxwell_section => section_vals_get_subs_vals(tmp_section, "MAXWELL")
628 CALL section_vals_get(maxwell_section, explicit=is_present)
629 IF (is_present) THEN
630 dft_control%expot_control%maxwell_solver = .true.
631 CALL maxwell_control_create(dft_control%maxwell_control)
632 ! read the input values from Maxwell section
633 CALL section_vals_val_get(maxwell_section, "TEST_REAL", &
634 r_val=dft_control%maxwell_control%real_test)
635 CALL section_vals_val_get(maxwell_section, "TEST_INTEGER", &
636 i_val=dft_control%maxwell_control%int_test)
637 CALL section_vals_val_get(maxwell_section, "TEST_LOGICAL", &
638 l_val=dft_control%maxwell_control%log_test)
639 ELSE
640 dft_control%expot_control%maxwell_solver = .false.
641 END IF
642 END IF
643
644 ! Read the SCCS input section if present
645 sccs_section => section_vals_get_subs_vals(dft_section, "SCCS")
646 CALL section_vals_get(sccs_section, explicit=is_present)
647 IF (is_present) THEN
648 ! Check section parameter if SCCS is activated
649 CALL section_vals_val_get(sccs_section, "_SECTION_PARAMETERS_", &
650 l_val=dft_control%do_sccs)
651 IF (dft_control%do_sccs) THEN
652 ALLOCATE (dft_control%sccs_control)
653 CALL section_vals_val_get(sccs_section, "RELATIVE_PERMITTIVITY", &
654 r_val=dft_control%sccs_control%epsilon_solvent)
655 CALL section_vals_val_get(sccs_section, "ALPHA", &
656 r_val=dft_control%sccs_control%alpha_solvent)
657 CALL section_vals_val_get(sccs_section, "BETA", &
658 r_val=dft_control%sccs_control%beta_solvent)
659 CALL section_vals_val_get(sccs_section, "DELTA_RHO", &
660 r_val=dft_control%sccs_control%delta_rho)
661 CALL section_vals_val_get(sccs_section, "DERIVATIVE_METHOD", &
662 i_val=dft_control%sccs_control%derivative_method)
663 CALL section_vals_val_get(sccs_section, "METHOD", &
664 i_val=dft_control%sccs_control%method_id)
665 CALL section_vals_val_get(sccs_section, "EPS_SCCS", &
666 r_val=dft_control%sccs_control%eps_sccs)
667 CALL section_vals_val_get(sccs_section, "EPS_SCF", &
668 r_val=dft_control%sccs_control%eps_scf)
669 CALL section_vals_val_get(sccs_section, "GAMMA", &
670 r_val=dft_control%sccs_control%gamma_solvent)
671 CALL section_vals_val_get(sccs_section, "MAX_ITER", &
672 i_val=dft_control%sccs_control%max_iter)
673 CALL section_vals_val_get(sccs_section, "MIXING", &
674 r_val=dft_control%sccs_control%mixing)
675 SELECT CASE (dft_control%sccs_control%method_id)
676 CASE (sccs_andreussi)
677 tmp_section => section_vals_get_subs_vals(sccs_section, "ANDREUSSI")
678 CALL section_vals_val_get(tmp_section, "RHO_MAX", &
679 r_val=dft_control%sccs_control%rho_max)
680 CALL section_vals_val_get(tmp_section, "RHO_MIN", &
681 r_val=dft_control%sccs_control%rho_min)
682 IF (dft_control%sccs_control%rho_max < dft_control%sccs_control%rho_min) THEN
683 CALL cp_abort(__location__, &
684 "The SCCS parameter RHO_MAX is smaller than RHO_MIN. "// &
685 "Please, check your input!")
686 END IF
687 CALL cite_reference(andreussi2012)
689 tmp_section => section_vals_get_subs_vals(sccs_section, "FATTEBERT-GYGI")
690 CALL section_vals_val_get(tmp_section, "BETA", &
691 r_val=dft_control%sccs_control%beta)
692 IF (dft_control%sccs_control%beta < 0.5_dp) THEN
693 CALL cp_abort(__location__, &
694 "A value smaller than 0.5 for the SCCS parameter beta "// &
695 "causes numerical problems. Please, check your input!")
696 END IF
697 CALL section_vals_val_get(tmp_section, "RHO_ZERO", &
698 r_val=dft_control%sccs_control%rho_zero)
699 CALL cite_reference(fattebert2002)
700 CASE DEFAULT
701 cpabort("Invalid SCCS model specified. Please, check your input!")
702 END SELECT
703 CALL cite_reference(yin2017)
704 END IF
705 END IF
706
707 ! ZMP added input sections
708 ! Read the external density input section
709 tmp_section => section_vals_get_subs_vals(dft_section, "EXTERNAL_DENSITY")
710 CALL section_vals_get(tmp_section, explicit=dft_control%apply_external_density)
711
712 ! Read the external vxc input section
713 tmp_section => section_vals_get_subs_vals(dft_section, "EXTERNAL_VXC")
714 CALL section_vals_get(tmp_section, explicit=dft_control%apply_external_vxc)
715
716 ! SMEAGOL interface
717 tmp_section => section_vals_get_subs_vals(dft_section, "SMEAGOL")
718 CALL read_smeagol_control(dft_control%smeagol_control, tmp_section)
719
720 END SUBROUTINE read_dft_control
721
722! **************************************************************************************************
723!> \brief Reads the input and stores in the rixs_control_type
724!> \param rixs_control ...
725!> \param rixs_section ...
726!> \param qs_control ...
727! **************************************************************************************************
728 SUBROUTINE read_rixs_control(rixs_control, rixs_section, qs_control)
729 TYPE(rixs_control_type), POINTER :: rixs_control
730 TYPE(section_vals_type), POINTER :: rixs_section
731 TYPE(qs_control_type), POINTER :: qs_control
732
733 TYPE(section_vals_type), POINTER :: td_section, xas_section
734
735 CALL section_vals_val_get(rixs_section, "_SECTION_PARAMETERS_", l_val=rixs_control%enabled)
736
737 CALL section_vals_val_get(rixs_section, "CORE_STATES", i_val=rixs_control%core_states)
738 CALL section_vals_val_get(rixs_section, "VALENCE_STATES", i_val=rixs_control%valence_states)
739
740 td_section => section_vals_get_subs_vals(rixs_section, "TDDFPT")
741 CALL read_tddfpt2_control(rixs_control%tddfpt2_control, td_section, qs_control)
742
743 xas_section => section_vals_get_subs_vals(rixs_section, "XAS_TDP")
744 CALL read_xas_tdp_control(rixs_control%xas_tdp_control, xas_section)
745
746 END SUBROUTINE read_rixs_control
747
748! **************************************************************************************************
749!> \brief ...
750!> \param qs_control ...
751!> \param dft_section ...
752! **************************************************************************************************
753 SUBROUTINE read_mgrid_section(qs_control, dft_section)
754
755 TYPE(qs_control_type), INTENT(INOUT) :: qs_control
756 TYPE(section_vals_type), POINTER :: dft_section
757
758 CHARACTER(len=*), PARAMETER :: routinen = 'read_mgrid_section'
759
760 INTEGER :: handle, igrid_level, ngrid_level
761 LOGICAL :: explicit, multigrid_set
762 REAL(dp) :: cutoff
763 REAL(dp), DIMENSION(:), POINTER :: cutofflist
764 TYPE(section_vals_type), POINTER :: mgrid_section
765
766 CALL timeset(routinen, handle)
767
768 NULLIFY (mgrid_section, cutofflist)
769 mgrid_section => section_vals_get_subs_vals(dft_section, "MGRID")
770
771 CALL section_vals_val_get(mgrid_section, "NGRIDS", i_val=ngrid_level)
772 CALL section_vals_val_get(mgrid_section, "MULTIGRID_SET", l_val=multigrid_set)
773 CALL section_vals_val_get(mgrid_section, "CUTOFF", r_val=cutoff)
774 CALL section_vals_val_get(mgrid_section, "PROGRESSION_FACTOR", r_val=qs_control%progression_factor)
775 CALL section_vals_val_get(mgrid_section, "COMMENSURATE", l_val=qs_control%commensurate_mgrids)
776 CALL section_vals_val_get(mgrid_section, "REALSPACE", l_val=qs_control%realspace_mgrids)
777 CALL section_vals_val_get(mgrid_section, "REL_CUTOFF", r_val=qs_control%relative_cutoff)
778 CALL section_vals_val_get(mgrid_section, "SKIP_LOAD_BALANCE_DISTRIBUTED", &
779 l_val=qs_control%skip_load_balance_distributed)
780
781 ! For SE and DFTB possibly override with new defaults
782 IF (qs_control%semi_empirical .OR. qs_control%dftb .OR. qs_control%xtb) THEN
783 ngrid_level = 1
784 multigrid_set = .false.
785 ! Override default cutoff value unless user specified an explicit argument..
786 CALL section_vals_val_get(mgrid_section, "CUTOFF", explicit=explicit, r_val=cutoff)
787 IF (.NOT. explicit) cutoff = 1.0_dp
788 END IF
789
790 ALLOCATE (qs_control%e_cutoff(ngrid_level))
791 qs_control%cutoff = cutoff
792
793 IF (multigrid_set) THEN
794 ! Read the values from input
795 IF (qs_control%commensurate_mgrids) THEN
796 cpabort("Do not specify cutoffs for the commensurate grids (NYI)")
797 END IF
798
799 CALL section_vals_val_get(mgrid_section, "MULTIGRID_CUTOFF", r_vals=cutofflist)
800 IF (ASSOCIATED(cutofflist)) THEN
801 IF (SIZE(cutofflist, 1) /= ngrid_level) THEN
802 cpabort("Number of multi-grids requested and number of cutoff values do not match")
803 END IF
804 DO igrid_level = 1, ngrid_level
805 qs_control%e_cutoff(igrid_level) = cutofflist(igrid_level)
806 END DO
807 END IF
808 ! set cutoff to smallest value in multgrid available with >= cutoff
809 DO igrid_level = ngrid_level, 1, -1
810 IF (qs_control%cutoff <= qs_control%e_cutoff(igrid_level)) THEN
811 qs_control%cutoff = qs_control%e_cutoff(igrid_level)
812 EXIT
813 END IF
814 ! set largest grid value to cutoff
815 IF (igrid_level == 1) THEN
816 qs_control%cutoff = qs_control%e_cutoff(1)
817 END IF
818 END DO
819 ELSE
820 IF (qs_control%commensurate_mgrids) qs_control%progression_factor = 4.0_dp
821 qs_control%e_cutoff(1) = qs_control%cutoff
822 DO igrid_level = 2, ngrid_level
823 qs_control%e_cutoff(igrid_level) = qs_control%e_cutoff(igrid_level - 1)/ &
824 qs_control%progression_factor
825 END DO
826 END IF
827 ! check that multigrids are ordered
828 DO igrid_level = 2, ngrid_level
829 IF (qs_control%e_cutoff(igrid_level) > qs_control%e_cutoff(igrid_level - 1)) THEN
830 cpabort("The cutoff values for the multi-grids are not ordered from large to small")
831 ELSE IF (qs_control%e_cutoff(igrid_level) == qs_control%e_cutoff(igrid_level - 1)) THEN
832 cpabort("The same cutoff value was specified for two multi-grids")
833 END IF
834 END DO
835 CALL timestop(handle)
836 END SUBROUTINE read_mgrid_section
837
838! **************************************************************************************************
839!> \brief ...
840!> \param qs_control ...
841!> \param qs_section ...
842! **************************************************************************************************
843 SUBROUTINE read_qs_section(qs_control, qs_section)
844
845 TYPE(qs_control_type), INTENT(INOUT) :: qs_control
846 TYPE(section_vals_type), POINTER :: qs_section
847
848 CHARACTER(len=*), PARAMETER :: routinen = 'read_qs_section'
849
850 CHARACTER(LEN=default_string_length) :: cval
851 CHARACTER(LEN=default_string_length), &
852 DIMENSION(:), POINTER :: clist
853 INTEGER :: handle, itmp, j, jj, k, n_rep, n_var, &
854 ngauss, ngp, nrep
855 INTEGER, DIMENSION(:), POINTER :: tmplist
856 LOGICAL :: explicit, was_present
857 REAL(dp) :: tmp, tmpsqrt, value
858 REAL(dp), POINTER :: scal(:)
859 TYPE(section_vals_type), POINTER :: cdft_control_section, ddapc_restraint_section, &
860 dftb_parameter, dftb_section, eeq_section, genpot_section, lri_optbas_section, &
861 mull_section, nonbonded_section, s2_restraint_section, se_section, xtb_parameter, &
862 xtb_section, xtb_tblite
863
864 CALL timeset(routinen, handle)
865
866 was_present = .false.
867 NULLIFY (mull_section, ddapc_restraint_section, s2_restraint_section, &
868 se_section, dftb_section, xtb_section, dftb_parameter, xtb_parameter, lri_optbas_section, &
869 cdft_control_section, genpot_section, eeq_section)
870
871 mull_section => section_vals_get_subs_vals(qs_section, "MULLIKEN_RESTRAINT")
872 ddapc_restraint_section => section_vals_get_subs_vals(qs_section, "DDAPC_RESTRAINT")
873 s2_restraint_section => section_vals_get_subs_vals(qs_section, "S2_RESTRAINT")
874 se_section => section_vals_get_subs_vals(qs_section, "SE")
875 dftb_section => section_vals_get_subs_vals(qs_section, "DFTB")
876 xtb_section => section_vals_get_subs_vals(qs_section, "xTB")
877 dftb_parameter => section_vals_get_subs_vals(dftb_section, "PARAMETER")
878 xtb_parameter => section_vals_get_subs_vals(xtb_section, "PARAMETER")
879 eeq_section => section_vals_get_subs_vals(xtb_section, "EEQ")
880 lri_optbas_section => section_vals_get_subs_vals(qs_section, "OPTIMIZE_LRI_BASIS")
881 cdft_control_section => section_vals_get_subs_vals(qs_section, "CDFT")
882 nonbonded_section => section_vals_get_subs_vals(xtb_section, "NONBONDED")
883 genpot_section => section_vals_get_subs_vals(nonbonded_section, "GENPOT")
884 xtb_tblite => section_vals_get_subs_vals(xtb_section, "TBLITE")
885
886 ! Setup all defaults values and overwrite input parameters
887 ! EPS_DEFAULT should set the target accuracy in the total energy (~per electron) or a closely related value
888 CALL section_vals_val_get(qs_section, "EPS_DEFAULT", r_val=value)
889 tmpsqrt = sqrt(value) ! a trick to work around a NAG 5.1 optimizer bug
890
891 ! random choice ?
892 qs_control%eps_core_charge = value/100.0_dp
893 ! correct if all Gaussians would have the same radius (overlap will be smaller than eps_pgf_orb**2).
894 ! Can be significantly in error if not... requires fully new screening/pairlist procedures
895 qs_control%eps_pgf_orb = tmpsqrt
896 qs_control%eps_kg_orb = qs_control%eps_pgf_orb
897 ! consistent since also a kind of overlap
898 qs_control%eps_ppnl = qs_control%eps_pgf_orb/100.0_dp
899 ! accuracy is basically set by the overlap, this sets an empirical shift
900 qs_control%eps_ppl = 1.0e-2_dp
901 !
902 qs_control%gapw_control%eps_cpc = value
903 ! expexted error in the density
904 qs_control%eps_rho_gspace = value
905 qs_control%eps_rho_rspace = value
906 ! error in the gradient, can be the sqrt of the error in the energy, ignored if map_consistent
907 qs_control%eps_gvg_rspace = tmpsqrt
908 !
909 CALL section_vals_val_get(qs_section, "EPS_CORE_CHARGE", n_rep_val=n_rep)
910 IF (n_rep /= 0) THEN
911 CALL section_vals_val_get(qs_section, "EPS_CORE_CHARGE", r_val=qs_control%eps_core_charge)
912 END IF
913 CALL section_vals_val_get(qs_section, "EPS_GVG_RSPACE", n_rep_val=n_rep)
914 IF (n_rep /= 0) THEN
915 CALL section_vals_val_get(qs_section, "EPS_GVG_RSPACE", r_val=qs_control%eps_gvg_rspace)
916 END IF
917 CALL section_vals_val_get(qs_section, "EPS_PGF_ORB", n_rep_val=n_rep)
918 IF (n_rep /= 0) THEN
919 CALL section_vals_val_get(qs_section, "EPS_PGF_ORB", r_val=qs_control%eps_pgf_orb)
920 END IF
921 CALL section_vals_val_get(qs_section, "EPS_KG_ORB", n_rep_val=n_rep)
922 IF (n_rep /= 0) THEN
923 CALL section_vals_val_get(qs_section, "EPS_KG_ORB", r_val=tmp)
924 qs_control%eps_kg_orb = sqrt(tmp)
925 END IF
926 CALL section_vals_val_get(qs_section, "EPS_PPL", n_rep_val=n_rep)
927 IF (n_rep /= 0) THEN
928 CALL section_vals_val_get(qs_section, "EPS_PPL", r_val=qs_control%eps_ppl)
929 END IF
930 CALL section_vals_val_get(qs_section, "EPS_PPNL", n_rep_val=n_rep)
931 IF (n_rep /= 0) THEN
932 CALL section_vals_val_get(qs_section, "EPS_PPNL", r_val=qs_control%eps_ppnl)
933 END IF
934 CALL section_vals_val_get(qs_section, "EPS_RHO", n_rep_val=n_rep)
935 IF (n_rep /= 0) THEN
936 CALL section_vals_val_get(qs_section, "EPS_RHO", r_val=qs_control%eps_rho_gspace)
937 qs_control%eps_rho_rspace = qs_control%eps_rho_gspace
938 END IF
939 CALL section_vals_val_get(qs_section, "EPS_RHO_RSPACE", n_rep_val=n_rep)
940 IF (n_rep /= 0) THEN
941 CALL section_vals_val_get(qs_section, "EPS_RHO_RSPACE", r_val=qs_control%eps_rho_rspace)
942 END IF
943 CALL section_vals_val_get(qs_section, "EPS_RHO_GSPACE", n_rep_val=n_rep)
944 IF (n_rep /= 0) THEN
945 CALL section_vals_val_get(qs_section, "EPS_RHO_GSPACE", r_val=qs_control%eps_rho_gspace)
946 END IF
947 CALL section_vals_val_get(qs_section, "EPS_FILTER_MATRIX", n_rep_val=n_rep)
948 IF (n_rep /= 0) THEN
949 CALL section_vals_val_get(qs_section, "EPS_FILTER_MATRIX", r_val=qs_control%eps_filter_matrix)
950 END IF
951 CALL section_vals_val_get(qs_section, "EPS_CPC", n_rep_val=n_rep)
952 IF (n_rep /= 0) THEN
953 CALL section_vals_val_get(qs_section, "EPS_CPC", r_val=qs_control%gapw_control%eps_cpc)
954 END IF
955
956 CALL section_vals_val_get(qs_section, "EPSFIT", r_val=qs_control%gapw_control%eps_fit)
957 CALL section_vals_val_get(qs_section, "EPSISO", r_val=qs_control%gapw_control%eps_iso)
958 CALL section_vals_val_get(qs_section, "EPSSVD", r_val=qs_control%gapw_control%eps_svd)
959 CALL section_vals_val_get(qs_section, "EPSRHO0", r_val=qs_control%gapw_control%eps_Vrho0)
960 CALL section_vals_val_get(qs_section, "ALPHA0_HARD", r_val=qs_control%gapw_control%alpha0_hard)
961 qs_control%gapw_control%alpha0_hard_from_input = .false.
962 IF (qs_control%gapw_control%alpha0_hard /= 0.0_dp) qs_control%gapw_control%alpha0_hard_from_input = .true.
963 CALL section_vals_val_get(qs_section, "FORCE_PAW", l_val=qs_control%gapw_control%force_paw)
964 CALL section_vals_val_get(qs_section, "MAX_RAD_LOCAL", r_val=qs_control%gapw_control%max_rad_local)
965
966 CALL section_vals_val_get(qs_section, "MIN_PAIR_LIST_RADIUS", r_val=qs_control%pairlist_radius)
967
968 CALL section_vals_val_get(qs_section, "LS_SCF", l_val=qs_control%do_ls_scf)
969 CALL section_vals_val_get(qs_section, "ALMO_SCF", l_val=qs_control%do_almo_scf)
970 CALL section_vals_val_get(qs_section, "KG_METHOD", l_val=qs_control%do_kg)
971
972 ! Logicals
973 CALL section_vals_val_get(qs_section, "REF_EMBED_SUBSYS", l_val=qs_control%ref_embed_subsys)
974 CALL section_vals_val_get(qs_section, "CLUSTER_EMBED_SUBSYS", l_val=qs_control%cluster_embed_subsys)
975 CALL section_vals_val_get(qs_section, "HIGH_LEVEL_EMBED_SUBSYS", l_val=qs_control%high_level_embed_subsys)
976 CALL section_vals_val_get(qs_section, "DFET_EMBEDDED", l_val=qs_control%dfet_embedded)
977 CALL section_vals_val_get(qs_section, "DMFET_EMBEDDED", l_val=qs_control%dmfet_embedded)
978
979 ! Integers gapw
980 CALL section_vals_val_get(qs_section, "LMAXN1", i_val=qs_control%gapw_control%lmax_sphere)
981 CALL section_vals_val_get(qs_section, "LMAXN0", i_val=qs_control%gapw_control%lmax_rho0)
982 CALL section_vals_val_get(qs_section, "LADDN0", i_val=qs_control%gapw_control%ladd_rho0)
983 CALL section_vals_val_get(qs_section, "QUADRATURE", i_val=qs_control%gapw_control%quadrature)
984 ! GAPW 1c basis
985 CALL section_vals_val_get(qs_section, "GAPW_1C_BASIS", i_val=qs_control%gapw_control%basis_1c)
986 IF (qs_control%gapw_control%basis_1c /= gapw_1c_orb) THEN
987 qs_control%gapw_control%eps_svd = max(qs_control%gapw_control%eps_svd, 1.e-12_dp)
988 END IF
989 ! GAPW accurate integration
990 CALL section_vals_val_get(qs_section, "GAPW_ACCURATE_XCINT", l_val=qs_control%gapw_control%accurate_xcint)
991 CALL section_vals_val_get(qs_section, "ALPHA_WEIGHTS", r_val=qs_control%gapw_control%aweights)
992
993 ! Integers grids
994 CALL section_vals_val_get(qs_section, "PW_GRID", i_val=itmp)
995 SELECT CASE (itmp)
997 qs_control%pw_grid_opt%spherical = .true.
998 qs_control%pw_grid_opt%fullspace = .false.
1000 qs_control%pw_grid_opt%spherical = .false.
1001 qs_control%pw_grid_opt%fullspace = .true.
1003 qs_control%pw_grid_opt%spherical = .false.
1004 qs_control%pw_grid_opt%fullspace = .false.
1005 END SELECT
1006
1007 ! Method for PPL calculation
1008 CALL section_vals_val_get(qs_section, "CORE_PPL", i_val=itmp)
1009 qs_control%do_ppl_method = itmp
1010
1011 CALL section_vals_val_get(qs_section, "PW_GRID_LAYOUT", i_vals=tmplist)
1012 qs_control%pw_grid_opt%distribution_layout = tmplist
1013 CALL section_vals_val_get(qs_section, "PW_GRID_BLOCKED", i_val=qs_control%pw_grid_opt%blocked)
1014
1015 !Integers extrapolation
1016 CALL section_vals_val_get(qs_section, "EXTRAPOLATION", i_val=qs_control%wf_interpolation_method_nr)
1017 CALL section_vals_val_get(qs_section, "EXTRAPOLATION_ORDER", i_val=qs_control%wf_extrapolation_order)
1018
1019 !Method
1020 CALL section_vals_val_get(qs_section, "METHOD", i_val=qs_control%method_id)
1021 qs_control%gapw = .false.
1022 qs_control%gapw_xc = .false.
1023 qs_control%gpw = .false.
1024 qs_control%pao = .false.
1025 qs_control%dftb = .false.
1026 qs_control%xtb = .false.
1027 qs_control%semi_empirical = .false.
1028 qs_control%ofgpw = .false.
1029 qs_control%lrigpw = .false.
1030 qs_control%rigpw = .false.
1031 SELECT CASE (qs_control%method_id)
1032 CASE (do_method_gapw)
1033 CALL cite_reference(lippert1999)
1034 CALL cite_reference(krack2000)
1035 qs_control%gapw = .true.
1036 CASE (do_method_gapw_xc)
1037 qs_control%gapw_xc = .true.
1038 CASE (do_method_gpw)
1039 CALL cite_reference(lippert1997)
1040 CALL cite_reference(vandevondele2005a)
1041 qs_control%gpw = .true.
1042 CASE (do_method_ofgpw)
1043 qs_control%ofgpw = .true.
1044 CASE (do_method_lrigpw)
1045 qs_control%lrigpw = .true.
1046 CASE (do_method_rigpw)
1047 qs_control%rigpw = .true.
1048 CASE (do_method_dftb)
1049 qs_control%dftb = .true.
1050 CALL cite_reference(porezag1995)
1051 CALL cite_reference(seifert1996)
1052 CASE (do_method_xtb)
1053 qs_control%xtb = .true.
1054 CALL cite_reference(grimme2017)
1055 CALL cite_reference(pracht2019)
1056 CASE (do_method_mndo)
1057 CALL cite_reference(dewar1977)
1058 qs_control%semi_empirical = .true.
1059 CASE (do_method_am1)
1060 CALL cite_reference(dewar1985)
1061 qs_control%semi_empirical = .true.
1062 CASE (do_method_pm3)
1063 CALL cite_reference(stewart1989)
1064 qs_control%semi_empirical = .true.
1065 CASE (do_method_pnnl)
1066 CALL cite_reference(schenter2008)
1067 qs_control%semi_empirical = .true.
1068 CASE (do_method_pm6)
1069 CALL cite_reference(stewart2007)
1070 qs_control%semi_empirical = .true.
1071 CASE (do_method_pm6fm)
1072 CALL cite_reference(vanvoorhis2015)
1073 qs_control%semi_empirical = .true.
1074 CASE (do_method_pdg)
1075 CALL cite_reference(repasky2002)
1076 qs_control%semi_empirical = .true.
1077 CASE (do_method_rm1)
1078 CALL cite_reference(rocha2006)
1079 qs_control%semi_empirical = .true.
1080 CASE (do_method_mndod)
1081 CALL cite_reference(dewar1977)
1082 CALL cite_reference(thiel1992)
1083 qs_control%semi_empirical = .true.
1084 END SELECT
1085
1086 CALL section_vals_get(mull_section, explicit=qs_control%mulliken_restraint)
1087
1088 IF (qs_control%mulliken_restraint) THEN
1089 CALL section_vals_val_get(mull_section, "STRENGTH", r_val=qs_control%mulliken_restraint_control%strength)
1090 CALL section_vals_val_get(mull_section, "TARGET", r_val=qs_control%mulliken_restraint_control%target)
1091 CALL section_vals_val_get(mull_section, "ATOMS", n_rep_val=n_rep)
1092 jj = 0
1093 DO k = 1, n_rep
1094 CALL section_vals_val_get(mull_section, "ATOMS", i_rep_val=k, i_vals=tmplist)
1095 jj = jj + SIZE(tmplist)
1096 END DO
1097 qs_control%mulliken_restraint_control%natoms = jj
1098 IF (qs_control%mulliken_restraint_control%natoms < 1) &
1099 cpabort("Need at least 1 atom to use mulliken constraints")
1100 ALLOCATE (qs_control%mulliken_restraint_control%atoms(qs_control%mulliken_restraint_control%natoms))
1101 jj = 0
1102 DO k = 1, n_rep
1103 CALL section_vals_val_get(mull_section, "ATOMS", i_rep_val=k, i_vals=tmplist)
1104 DO j = 1, SIZE(tmplist)
1105 jj = jj + 1
1106 qs_control%mulliken_restraint_control%atoms(jj) = tmplist(j)
1107 END DO
1108 END DO
1109 END IF
1110 CALL section_vals_get(ddapc_restraint_section, n_repetition=nrep, explicit=qs_control%ddapc_restraint)
1111 IF (qs_control%ddapc_restraint) THEN
1112 ALLOCATE (qs_control%ddapc_restraint_control(nrep))
1113 CALL read_ddapc_section(qs_control, qs_section=qs_section)
1114 qs_control%ddapc_restraint_is_spin = .false.
1115 qs_control%ddapc_explicit_potential = .false.
1116 END IF
1117
1118 CALL section_vals_get(s2_restraint_section, explicit=qs_control%s2_restraint)
1119 IF (qs_control%s2_restraint) THEN
1120 CALL section_vals_val_get(s2_restraint_section, "STRENGTH", &
1121 r_val=qs_control%s2_restraint_control%strength)
1122 CALL section_vals_val_get(s2_restraint_section, "TARGET", &
1123 r_val=qs_control%s2_restraint_control%target)
1124 CALL section_vals_val_get(s2_restraint_section, "FUNCTIONAL_FORM", &
1125 i_val=qs_control%s2_restraint_control%functional_form)
1126 END IF
1127
1128 CALL section_vals_get(cdft_control_section, explicit=qs_control%cdft)
1129 IF (qs_control%cdft) THEN
1130 CALL read_cdft_control_section(qs_control, cdft_control_section)
1131 END IF
1132
1133 ! Semi-empirical code
1134 IF (qs_control%semi_empirical) THEN
1135 CALL section_vals_val_get(se_section, "ORTHOGONAL_BASIS", &
1136 l_val=qs_control%se_control%orthogonal_basis)
1137 CALL section_vals_val_get(se_section, "DELTA", &
1138 r_val=qs_control%se_control%delta)
1139 CALL section_vals_val_get(se_section, "ANALYTICAL_GRADIENTS", &
1140 l_val=qs_control%se_control%analytical_gradients)
1141 CALL section_vals_val_get(se_section, "FORCE_KDSO-D_EXCHANGE", &
1142 l_val=qs_control%se_control%force_kdsod_EX)
1143 ! Integral Screening
1144 CALL section_vals_val_get(se_section, "INTEGRAL_SCREENING", &
1145 i_val=qs_control%se_control%integral_screening)
1146 IF (qs_control%method_id == do_method_pnnl) THEN
1147 IF (qs_control%se_control%integral_screening /= do_se_is_slater) &
1148 CALL cp_warn(__location__, &
1149 "PNNL semi-empirical parameterization supports only the Slater type "// &
1150 "integral scheme. Revert to Slater and continue the calculation.")
1151 qs_control%se_control%integral_screening = do_se_is_slater
1152 END IF
1153 ! Global Arrays variable
1154 CALL section_vals_val_get(se_section, "GA%NCELLS", &
1155 i_val=qs_control%se_control%ga_ncells)
1156 ! Long-Range correction
1157 CALL section_vals_val_get(se_section, "LR_CORRECTION%CUTOFF", &
1158 r_val=qs_control%se_control%cutoff_lrc)
1159 qs_control%se_control%taper_lrc = qs_control%se_control%cutoff_lrc
1160 CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_TAPER", &
1161 explicit=explicit)
1162 IF (explicit) THEN
1163 CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_TAPER", &
1164 r_val=qs_control%se_control%taper_lrc)
1165 END IF
1166 CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_RANGE", &
1167 r_val=qs_control%se_control%range_lrc)
1168 ! Coulomb
1169 CALL section_vals_val_get(se_section, "COULOMB%CUTOFF", &
1170 r_val=qs_control%se_control%cutoff_cou)
1171 qs_control%se_control%taper_cou = qs_control%se_control%cutoff_cou
1172 CALL section_vals_val_get(se_section, "COULOMB%RC_TAPER", &
1173 explicit=explicit)
1174 IF (explicit) THEN
1175 CALL section_vals_val_get(se_section, "COULOMB%RC_TAPER", &
1176 r_val=qs_control%se_control%taper_cou)
1177 END IF
1178 CALL section_vals_val_get(se_section, "COULOMB%RC_RANGE", &
1179 r_val=qs_control%se_control%range_cou)
1180 ! Exchange
1181 CALL section_vals_val_get(se_section, "EXCHANGE%CUTOFF", &
1182 r_val=qs_control%se_control%cutoff_exc)
1183 qs_control%se_control%taper_exc = qs_control%se_control%cutoff_exc
1184 CALL section_vals_val_get(se_section, "EXCHANGE%RC_TAPER", &
1185 explicit=explicit)
1186 IF (explicit) THEN
1187 CALL section_vals_val_get(se_section, "EXCHANGE%RC_TAPER", &
1188 r_val=qs_control%se_control%taper_exc)
1189 END IF
1190 CALL section_vals_val_get(se_section, "EXCHANGE%RC_RANGE", &
1191 r_val=qs_control%se_control%range_exc)
1192 ! Screening (only if the integral scheme is of dumped type)
1193 IF (qs_control%se_control%integral_screening == do_se_is_kdso_d) THEN
1194 CALL section_vals_val_get(se_section, "SCREENING%RC_TAPER", &
1195 r_val=qs_control%se_control%taper_scr)
1196 CALL section_vals_val_get(se_section, "SCREENING%RC_RANGE", &
1197 r_val=qs_control%se_control%range_scr)
1198 END IF
1199 ! Periodic Type Calculation
1200 CALL section_vals_val_get(se_section, "PERIODIC", &
1201 i_val=qs_control%se_control%periodic_type)
1202 SELECT CASE (qs_control%se_control%periodic_type)
1203 CASE (do_se_lr_none)
1204 qs_control%se_control%do_ewald = .false.
1205 qs_control%se_control%do_ewald_r3 = .false.
1206 qs_control%se_control%do_ewald_gks = .false.
1207 CASE (do_se_lr_ewald)
1208 qs_control%se_control%do_ewald = .true.
1209 qs_control%se_control%do_ewald_r3 = .false.
1210 qs_control%se_control%do_ewald_gks = .false.
1211 CASE (do_se_lr_ewald_gks)
1212 qs_control%se_control%do_ewald = .false.
1213 qs_control%se_control%do_ewald_r3 = .false.
1214 qs_control%se_control%do_ewald_gks = .true.
1215 IF (qs_control%method_id /= do_method_pnnl) &
1216 CALL cp_abort(__location__, &
1217 "A periodic semi-empirical calculation was requested with a long-range "// &
1218 "summation on the single integral evaluation. This scheme is supported "// &
1219 "only by the PNNL parameterization.")
1220 CASE (do_se_lr_ewald_r3)
1221 qs_control%se_control%do_ewald = .true.
1222 qs_control%se_control%do_ewald_r3 = .true.
1223 qs_control%se_control%do_ewald_gks = .false.
1224 IF (qs_control%se_control%integral_screening /= do_se_is_kdso) &
1225 CALL cp_abort(__location__, &
1226 "A periodic semi-empirical calculation was requested with a long-range "// &
1227 "summation for the slowly convergent part 1/R^3, which is not congruent "// &
1228 "with the integral screening chosen. The only integral screening supported "// &
1229 "by this periodic type calculation is the standard Klopman-Dewar-Sabelli-Ohno.")
1230 END SELECT
1231
1232 ! dispersion pair potentials
1233 CALL section_vals_val_get(se_section, "DISPERSION", &
1234 l_val=qs_control%se_control%dispersion)
1235 CALL section_vals_val_get(se_section, "DISPERSION_RADIUS", &
1236 r_val=qs_control%se_control%rcdisp)
1237 CALL section_vals_val_get(se_section, "COORDINATION_CUTOFF", &
1238 r_val=qs_control%se_control%epscn)
1239 CALL section_vals_val_get(se_section, "D3_SCALING", r_vals=scal)
1240 qs_control%se_control%sd3(1) = scal(1)
1241 qs_control%se_control%sd3(2) = scal(2)
1242 qs_control%se_control%sd3(3) = scal(3)
1243 CALL section_vals_val_get(se_section, "DISPERSION_PARAMETER_FILE", &
1244 c_val=qs_control%se_control%dispersion_parameter_file)
1245
1246 ! Stop the execution for non-implemented features
1247 IF (qs_control%se_control%periodic_type == do_se_lr_ewald_r3) THEN
1248 cpabort("EWALD_R3 not implemented yet!")
1249 END IF
1250
1251 IF (qs_control%method_id == do_method_mndo .OR. &
1252 qs_control%method_id == do_method_am1 .OR. &
1253 qs_control%method_id == do_method_mndod .OR. &
1254 qs_control%method_id == do_method_pdg .OR. &
1255 qs_control%method_id == do_method_pm3 .OR. &
1256 qs_control%method_id == do_method_pm6 .OR. &
1257 qs_control%method_id == do_method_pm6fm .OR. &
1258 qs_control%method_id == do_method_pnnl .OR. &
1259 qs_control%method_id == do_method_rm1) THEN
1260 qs_control%se_control%orthogonal_basis = .true.
1261 END IF
1262 END IF
1263
1264 ! DFTB code
1265 IF (qs_control%dftb) THEN
1266 CALL section_vals_val_get(dftb_section, "ORTHOGONAL_BASIS", &
1267 l_val=qs_control%dftb_control%orthogonal_basis)
1268 CALL section_vals_val_get(dftb_section, "SELF_CONSISTENT", &
1269 l_val=qs_control%dftb_control%self_consistent)
1270 CALL section_vals_val_get(dftb_section, "DISPERSION", &
1271 l_val=qs_control%dftb_control%dispersion)
1272 CALL section_vals_val_get(dftb_section, "DIAGONAL_DFTB3", &
1273 l_val=qs_control%dftb_control%dftb3_diagonal)
1274 CALL section_vals_val_get(dftb_section, "HB_SR_GAMMA", &
1275 l_val=qs_control%dftb_control%hb_sr_damp)
1276 CALL section_vals_val_get(dftb_section, "EPS_DISP", &
1277 r_val=qs_control%dftb_control%eps_disp)
1278 CALL section_vals_val_get(dftb_section, "DO_EWALD", explicit=explicit)
1279 IF (explicit) THEN
1280 CALL section_vals_val_get(dftb_section, "DO_EWALD", &
1281 l_val=qs_control%dftb_control%do_ewald)
1282 ELSE
1283 qs_control%dftb_control%do_ewald = (qs_control%periodicity /= 0)
1284 END IF
1285 CALL section_vals_val_get(dftb_parameter, "PARAM_FILE_PATH", &
1286 c_val=qs_control%dftb_control%sk_file_path)
1287 CALL section_vals_val_get(dftb_parameter, "PARAM_FILE_NAME", &
1288 c_val=qs_control%dftb_control%sk_file_list)
1289 CALL section_vals_val_get(dftb_parameter, "HB_SR_PARAM", &
1290 r_val=qs_control%dftb_control%hb_sr_para)
1291 CALL section_vals_val_get(dftb_parameter, "SK_FILE", n_rep_val=n_var)
1292 ALLOCATE (qs_control%dftb_control%sk_pair_list(3, n_var))
1293 DO k = 1, n_var
1294 CALL section_vals_val_get(dftb_parameter, "SK_FILE", i_rep_val=k, &
1295 c_vals=clist)
1296 qs_control%dftb_control%sk_pair_list(1:3, k) = clist(1:3)
1297 END DO
1298 ! Dispersion type
1299 CALL section_vals_val_get(dftb_parameter, "DISPERSION_TYPE", &
1300 i_val=qs_control%dftb_control%dispersion_type)
1301 CALL section_vals_val_get(dftb_parameter, "UFF_FORCE_FIELD", &
1302 c_val=qs_control%dftb_control%uff_force_field)
1303 ! D3 Dispersion
1304 CALL section_vals_val_get(dftb_parameter, "DISPERSION_RADIUS", &
1305 r_val=qs_control%dftb_control%rcdisp)
1306 CALL section_vals_val_get(dftb_parameter, "COORDINATION_CUTOFF", &
1307 r_val=qs_control%dftb_control%epscn)
1308 CALL section_vals_val_get(dftb_parameter, "D2_EXP_PRE", &
1309 r_val=qs_control%dftb_control%exp_pre)
1310 CALL section_vals_val_get(dftb_parameter, "D2_SCALING", &
1311 r_val=qs_control%dftb_control%scaling)
1312 CALL section_vals_val_get(dftb_parameter, "D3_SCALING", r_vals=scal)
1313 qs_control%dftb_control%sd3(1) = scal(1)
1314 qs_control%dftb_control%sd3(2) = scal(2)
1315 qs_control%dftb_control%sd3(3) = scal(3)
1316 CALL section_vals_val_get(dftb_parameter, "D3BJ_SCALING", r_vals=scal)
1317 qs_control%dftb_control%sd3bj(1) = scal(1)
1318 qs_control%dftb_control%sd3bj(2) = scal(2)
1319 qs_control%dftb_control%sd3bj(3) = scal(3)
1320 qs_control%dftb_control%sd3bj(4) = scal(4)
1321 CALL section_vals_val_get(dftb_parameter, "DISPERSION_PARAMETER_FILE", &
1322 c_val=qs_control%dftb_control%dispersion_parameter_file)
1323
1324 IF (qs_control%dftb_control%dispersion) CALL cite_reference(zhechkov2005)
1325 IF (qs_control%dftb_control%self_consistent) CALL cite_reference(elstner1998)
1326 IF (qs_control%dftb_control%hb_sr_damp) CALL cite_reference(hu2007)
1327 END IF
1328
1329 ! xTB code
1330 IF (qs_control%xtb) THEN
1331 CALL section_vals_val_get(xtb_section, "GFN_TYPE", i_val=qs_control%xtb_control%gfn_type)
1332 CALL section_vals_val_get(xtb_section, "DO_EWALD", explicit=explicit)
1333 IF (explicit) THEN
1334 CALL section_vals_val_get(xtb_section, "DO_EWALD", &
1335 l_val=qs_control%xtb_control%do_ewald)
1336 ELSE
1337 qs_control%xtb_control%do_ewald = (qs_control%periodicity /= 0)
1338 END IF
1339 ! vdW
1340 CALL section_vals_val_get(xtb_section, "VDW_POTENTIAL", explicit=explicit)
1341 IF (explicit) THEN
1342 CALL section_vals_val_get(xtb_section, "VDW_POTENTIAL", c_val=cval)
1343 CALL uppercase(cval)
1344 SELECT CASE (cval)
1345 CASE ("NONE")
1346 qs_control%xtb_control%vdw_type = xtb_vdw_type_none
1347 CASE ("DFTD3")
1348 qs_control%xtb_control%vdw_type = xtb_vdw_type_d3
1349 CASE ("DFTD4")
1350 qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
1351 CASE DEFAULT
1352 cpabort("vdW type")
1353 END SELECT
1354 ELSE
1355 SELECT CASE (qs_control%xtb_control%gfn_type)
1356 CASE (0)
1357 qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
1358 CASE (1)
1359 qs_control%xtb_control%vdw_type = xtb_vdw_type_d3
1360 CASE (2)
1361 qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
1362 cpabort("gfn2-xtb tbd")
1363 CASE DEFAULT
1364 cpabort("GFN type")
1365 END SELECT
1366 END IF
1367 !
1368 CALL section_vals_val_get(xtb_section, "STO_NG", i_val=ngauss)
1369 qs_control%xtb_control%sto_ng = ngauss
1370 CALL section_vals_val_get(xtb_section, "HYDROGEN_STO_NG", i_val=ngauss)
1371 qs_control%xtb_control%h_sto_ng = ngauss
1372 CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_PATH", &
1373 c_val=qs_control%xtb_control%parameter_file_path)
1374 CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_NAME", explicit=explicit)
1375 IF (explicit) THEN
1376 CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_NAME", &
1377 c_val=qs_control%xtb_control%parameter_file_name)
1378 ELSE
1379 SELECT CASE (qs_control%xtb_control%gfn_type)
1380 CASE (0)
1381 qs_control%xtb_control%parameter_file_name = "xTB0_parameters"
1382 CASE (1)
1383 qs_control%xtb_control%parameter_file_name = "xTB1_parameters"
1384 CASE (2)
1385 cpabort("gfn2-xtb tbd")
1386 CASE DEFAULT
1387 cpabort("GFN type")
1388 END SELECT
1389 END IF
1390 ! D3 Dispersion
1391 CALL section_vals_val_get(xtb_parameter, "DISPERSION_RADIUS", &
1392 r_val=qs_control%xtb_control%rcdisp)
1393 CALL section_vals_val_get(xtb_parameter, "COORDINATION_CUTOFF", &
1394 r_val=qs_control%xtb_control%epscn)
1395 CALL section_vals_val_get(xtb_parameter, "D3BJ_SCALING", explicit=explicit)
1396 IF (explicit) THEN
1397 CALL section_vals_val_get(xtb_parameter, "D3BJ_SCALING", r_vals=scal)
1398 qs_control%xtb_control%s6 = scal(1)
1399 qs_control%xtb_control%s8 = scal(2)
1400 ELSE
1401 SELECT CASE (qs_control%xtb_control%gfn_type)
1402 CASE (0)
1403 qs_control%xtb_control%s6 = 1.00_dp
1404 qs_control%xtb_control%s8 = 2.85_dp
1405 CASE (1)
1406 qs_control%xtb_control%s6 = 1.00_dp
1407 qs_control%xtb_control%s8 = 2.40_dp
1408 CASE (2)
1409 cpabort("gfn2-xtb tbd")
1410 CASE DEFAULT
1411 cpabort("GFN type")
1412 END SELECT
1413 END IF
1414 CALL section_vals_val_get(xtb_parameter, "D3BJ_PARAM", explicit=explicit)
1415 IF (explicit) THEN
1416 CALL section_vals_val_get(xtb_parameter, "D3BJ_PARAM", r_vals=scal)
1417 qs_control%xtb_control%a1 = scal(1)
1418 qs_control%xtb_control%a2 = scal(2)
1419 ELSE
1420 SELECT CASE (qs_control%xtb_control%gfn_type)
1421 CASE (0)
1422 qs_control%xtb_control%a1 = 0.80_dp
1423 qs_control%xtb_control%a2 = 4.60_dp
1424 CASE (1)
1425 qs_control%xtb_control%a1 = 0.63_dp
1426 qs_control%xtb_control%a2 = 5.00_dp
1427 CASE (2)
1428 cpabort("gfn2-xtb tbd")
1429 CASE DEFAULT
1430 cpabort("GFN type")
1431 END SELECT
1432 END IF
1433 CALL section_vals_val_get(xtb_parameter, "DISPERSION_PARAMETER_FILE", &
1434 c_val=qs_control%xtb_control%dispersion_parameter_file)
1435 ! global parameters
1436 CALL section_vals_val_get(xtb_parameter, "HUCKEL_CONSTANTS", explicit=explicit)
1437 IF (explicit) THEN
1438 CALL section_vals_val_get(xtb_parameter, "HUCKEL_CONSTANTS", r_vals=scal)
1439 qs_control%xtb_control%ks = scal(1)
1440 qs_control%xtb_control%kp = scal(2)
1441 qs_control%xtb_control%kd = scal(3)
1442 qs_control%xtb_control%ksp = scal(4)
1443 qs_control%xtb_control%k2sh = scal(5)
1444 IF (qs_control%xtb_control%gfn_type == 0) THEN
1445 ! enforce ksp for gfn0
1446 qs_control%xtb_control%ksp = 0.5_dp*(scal(1) + scal(2))
1447 END IF
1448 ELSE
1449 SELECT CASE (qs_control%xtb_control%gfn_type)
1450 CASE (0)
1451 qs_control%xtb_control%ks = 2.00_dp
1452 qs_control%xtb_control%kp = 2.4868_dp
1453 qs_control%xtb_control%kd = 2.27_dp
1454 qs_control%xtb_control%ksp = 2.2434_dp
1455 qs_control%xtb_control%k2sh = 1.1241_dp
1456 CASE (1)
1457 qs_control%xtb_control%ks = 1.85_dp
1458 qs_control%xtb_control%kp = 2.25_dp
1459 qs_control%xtb_control%kd = 2.00_dp
1460 qs_control%xtb_control%ksp = 2.08_dp
1461 qs_control%xtb_control%k2sh = 2.85_dp
1462 CASE (2)
1463 cpabort("gfn2-xtb tbd")
1464 CASE DEFAULT
1465 cpabort("GFN type")
1466 END SELECT
1467 END IF
1468 CALL section_vals_val_get(xtb_parameter, "COULOMB_CONSTANTS", explicit=explicit)
1469 IF (explicit) THEN
1470 CALL section_vals_val_get(xtb_parameter, "COULOMB_CONSTANTS", r_vals=scal)
1471 qs_control%xtb_control%kg = scal(1)
1472 qs_control%xtb_control%kf = scal(2)
1473 ELSE
1474 SELECT CASE (qs_control%xtb_control%gfn_type)
1475 CASE (0)
1476 qs_control%xtb_control%kg = 2.00_dp
1477 qs_control%xtb_control%kf = 1.50_dp
1478 CASE (1)
1479 qs_control%xtb_control%kg = 2.00_dp
1480 qs_control%xtb_control%kf = 1.50_dp
1481 CASE (2)
1482 cpabort("gfn2-xtb tbd")
1483 CASE DEFAULT
1484 cpabort("GFN type")
1485 END SELECT
1486 END IF
1487 CALL section_vals_val_get(xtb_parameter, "CN_CONSTANTS", r_vals=scal)
1488 qs_control%xtb_control%kcns = scal(1)
1489 qs_control%xtb_control%kcnp = scal(2)
1490 qs_control%xtb_control%kcnd = scal(3)
1491 !
1492 CALL section_vals_val_get(xtb_parameter, "EN_CONSTANTS", explicit=explicit)
1493 IF (explicit) THEN
1494 CALL section_vals_val_get(xtb_parameter, "EN_CONSTANTS", r_vals=scal)
1495 SELECT CASE (qs_control%xtb_control%gfn_type)
1496 CASE (0)
1497 qs_control%xtb_control%ksen = scal(1)
1498 qs_control%xtb_control%kpen = scal(2)
1499 qs_control%xtb_control%kden = scal(3)
1500 CASE (1)
1501 qs_control%xtb_control%ken = scal(1)
1502 CASE (2)
1503 cpabort("gfn2-xtb tbd")
1504 CASE DEFAULT
1505 cpabort("GFN type")
1506 END SELECT
1507 ELSE
1508 SELECT CASE (qs_control%xtb_control%gfn_type)
1509 CASE (0)
1510 qs_control%xtb_control%ksen = 0.006_dp
1511 qs_control%xtb_control%kpen = -0.001_dp
1512 qs_control%xtb_control%kden = -0.002_dp
1513 CASE (1)
1514 qs_control%xtb_control%ken = -0.007_dp
1515 CASE (2)
1516 cpabort("gfn2-xtb tbd")
1517 CASE DEFAULT
1518 cpabort("GFN type")
1519 END SELECT
1520 END IF
1521 ! ben
1522 CALL section_vals_val_get(xtb_parameter, "BEN_CONSTANT", r_vals=scal)
1523 qs_control%xtb_control%ben = scal(1)
1524 ! enscale (hidden parameter in repulsion
1525 CALL section_vals_val_get(xtb_parameter, "ENSCALE", explicit=explicit)
1526 IF (explicit) THEN
1527 CALL section_vals_val_get(xtb_parameter, "ENSCALE", &
1528 r_val=qs_control%xtb_control%enscale)
1529 ELSE
1530 SELECT CASE (qs_control%xtb_control%gfn_type)
1531 CASE (0)
1532 qs_control%xtb_control%enscale = -0.09_dp
1533 CASE (1)
1534 qs_control%xtb_control%enscale = 0._dp
1535 CASE (2)
1536 cpabort("gfn2-xtb tbd")
1537 CASE DEFAULT
1538 cpabort("GFN type")
1539 END SELECT
1540 END IF
1541 ! XB
1542 CALL section_vals_val_get(xtb_section, "USE_HALOGEN_CORRECTION", &
1543 l_val=qs_control%xtb_control%xb_interaction)
1544 CALL section_vals_val_get(xtb_parameter, "HALOGEN_BINDING", r_vals=scal)
1545 qs_control%xtb_control%kxr = scal(1)
1546 qs_control%xtb_control%kx2 = scal(2)
1547 ! NONBONDED interactions
1548 CALL section_vals_val_get(xtb_section, "DO_NONBONDED", &
1549 l_val=qs_control%xtb_control%do_nonbonded)
1550 CALL section_vals_get(nonbonded_section, explicit=explicit)
1551 IF (explicit .AND. qs_control%xtb_control%do_nonbonded) THEN
1552 CALL section_vals_get(genpot_section, explicit=explicit, n_repetition=ngp)
1553 IF (explicit) THEN
1554 CALL pair_potential_reallocate(qs_control%xtb_control%nonbonded, 1, ngp, gp=.true.)
1555 CALL read_gp_section(qs_control%xtb_control%nonbonded, genpot_section, 0)
1556 END IF
1557 END IF !nonbonded
1558 CALL section_vals_val_get(xtb_section, "EPS_PAIRPOTENTIAL", &
1559 r_val=qs_control%xtb_control%eps_pair)
1560 ! SR Coulomb
1561 CALL section_vals_val_get(xtb_parameter, "COULOMB_SR_CUT", r_vals=scal)
1562 qs_control%xtb_control%coulomb_sr_cut = scal(1)
1563 CALL section_vals_val_get(xtb_parameter, "COULOMB_SR_EPS", r_vals=scal)
1564 qs_control%xtb_control%coulomb_sr_eps = scal(1)
1565 ! XB_radius
1566 CALL section_vals_val_get(xtb_parameter, "XB_RADIUS", r_val=qs_control%xtb_control%xb_radius)
1567 ! Kab
1568 CALL section_vals_val_get(xtb_parameter, "KAB_PARAM", n_rep_val=n_rep)
1569 ! Coulomb
1570 SELECT CASE (qs_control%xtb_control%gfn_type)
1571 CASE (0)
1572 qs_control%xtb_control%coulomb_interaction = .false.
1573 qs_control%xtb_control%coulomb_lr = .false.
1574 qs_control%xtb_control%tb3_interaction = .false.
1575 qs_control%xtb_control%check_atomic_charges = .false.
1576 CALL section_vals_val_get(xtb_section, "VARIATIONAL_DIPOLE", &
1577 l_val=qs_control%xtb_control%var_dipole)
1578 CASE (1)
1579 ! For debugging purposes
1580 CALL section_vals_val_get(xtb_section, "COULOMB_INTERACTION", &
1581 l_val=qs_control%xtb_control%coulomb_interaction)
1582 CALL section_vals_val_get(xtb_section, "COULOMB_LR", &
1583 l_val=qs_control%xtb_control%coulomb_lr)
1584 CALL section_vals_val_get(xtb_section, "TB3_INTERACTION", &
1585 l_val=qs_control%xtb_control%tb3_interaction)
1586 ! Check for bad atomic charges
1587 CALL section_vals_val_get(xtb_section, "CHECK_ATOMIC_CHARGES", &
1588 l_val=qs_control%xtb_control%check_atomic_charges)
1589 qs_control%xtb_control%var_dipole = .false.
1590 CASE (2)
1591 cpabort("gfn2-xtb tbd")
1592 CASE DEFAULT
1593 cpabort("GFN type")
1594 END SELECT
1595 qs_control%xtb_control%kab_nval = n_rep
1596 IF (n_rep > 0) THEN
1597 ALLOCATE (qs_control%xtb_control%kab_param(3, n_rep))
1598 ALLOCATE (qs_control%xtb_control%kab_types(2, n_rep))
1599 ALLOCATE (qs_control%xtb_control%kab_vals(n_rep))
1600 DO j = 1, n_rep
1601 CALL section_vals_val_get(xtb_parameter, "KAB_PARAM", i_rep_val=j, c_vals=clist)
1602 qs_control%xtb_control%kab_param(1, j) = clist(1)
1603 CALL get_ptable_info(clist(1), &
1604 ielement=qs_control%xtb_control%kab_types(1, j))
1605 qs_control%xtb_control%kab_param(2, j) = clist(2)
1606 CALL get_ptable_info(clist(2), &
1607 ielement=qs_control%xtb_control%kab_types(2, j))
1608 qs_control%xtb_control%kab_param(3, j) = clist(3)
1609 READ (clist(3), '(F10.0)') qs_control%xtb_control%kab_vals(j)
1610 END DO
1611 END IF
1612
1613 IF (qs_control%xtb_control%gfn_type == 0) THEN
1614 CALL section_vals_val_get(xtb_parameter, "SRB_PARAMETER", r_vals=scal)
1615 qs_control%xtb_control%ksrb = scal(1)
1616 qs_control%xtb_control%esrb = scal(2)
1617 qs_control%xtb_control%gscal = scal(3)
1618 qs_control%xtb_control%c1srb = scal(4)
1619 qs_control%xtb_control%c2srb = scal(5)
1620 qs_control%xtb_control%shift = scal(6)
1621 END IF
1622
1623 CALL section_vals_val_get(xtb_section, "EN_SHIFT_TYPE", c_val=cval)
1624 CALL uppercase(cval)
1625 SELECT CASE (trim(cval))
1626 CASE ("SELECT")
1627 qs_control%xtb_control%enshift_type = 0
1628 CASE ("MOLECULE")
1629 qs_control%xtb_control%enshift_type = 1
1630 CASE ("CRYSTAL")
1631 qs_control%xtb_control%enshift_type = 2
1632 CASE DEFAULT
1633 cpabort("Unknown value for EN_SHIFT_TYPE")
1634 END SELECT
1635
1636 ! EEQ solver params
1637 CALL read_eeq_param(eeq_section, qs_control%xtb_control%eeq_sparam)
1638
1639 END IF
1640
1641 ! Optimize LRI basis set
1642 CALL section_vals_get(lri_optbas_section, explicit=qs_control%lri_optbas)
1643
1644 ! Use instead the tblite
1645 CALL section_vals_val_get(xtb_tblite, "_SECTION_PARAMETERS_", &
1646 l_val=qs_control%xtb_control%do_tblite)
1647 CALL section_vals_val_get(xtb_tblite, "METHOD", &
1648 i_val=qs_control%xtb_control%tblite_method)
1649 IF (qs_control%xtb_control%do_tblite) THEN
1650 CALL cite_reference(caldeweyher2017)
1651 CALL cite_reference(caldeweyher2020)
1652 CALL cite_reference(asgeirsson2017)
1653 CALL cite_reference(grimme2017)
1654 CALL cite_reference(bannwarth2019)
1655 !Ewald sum included in tblite
1656 qs_control%xtb_control%do_ewald = .false.
1657 END IF
1658
1659 CALL timestop(handle)
1660 END SUBROUTINE read_qs_section
1661
1662! **************************************************************************************************
1663!> \brief Read TDDFPT-related input parameters.
1664!> \param t_control TDDFPT control parameters
1665!> \param t_section TDDFPT input section
1666!> \param qs_control Quickstep control parameters
1667! **************************************************************************************************
1668 SUBROUTINE read_tddfpt2_control(t_control, t_section, qs_control)
1669 TYPE(tddfpt2_control_type), POINTER :: t_control
1670 TYPE(section_vals_type), POINTER :: t_section
1671 TYPE(qs_control_type), POINTER :: qs_control
1672
1673 CHARACTER(LEN=*), PARAMETER :: routinen = 'read_tddfpt2_control'
1674
1675 CHARACTER(LEN=default_string_length), &
1676 DIMENSION(:), POINTER :: tmpstringlist
1677 INTEGER :: handle, irep, isize, nrep
1678 INTEGER, ALLOCATABLE, DIMENSION(:) :: inds
1679 LOGICAL :: do_ewald, do_exchange, expl, explicit, &
1680 multigrid_set
1681 REAL(kind=dp) :: filter, fval, hfx
1682 TYPE(section_vals_type), POINTER :: dipole_section, mgrid_section, &
1683 soc_section, stda_section, xc_func, &
1684 xc_section
1685
1686 CALL timeset(routinen, handle)
1687
1688 CALL section_vals_val_get(t_section, "_SECTION_PARAMETERS_", l_val=t_control%enabled)
1689
1690 CALL section_vals_val_get(t_section, "NSTATES", i_val=t_control%nstates)
1691 CALL section_vals_val_get(t_section, "MAX_ITER", i_val=t_control%niters)
1692 CALL section_vals_val_get(t_section, "MAX_KV", i_val=t_control%nkvs)
1693 CALL section_vals_val_get(t_section, "NLUMO", i_val=t_control%nlumo)
1694 CALL section_vals_val_get(t_section, "NPROC_STATE", i_val=t_control%nprocs)
1695 CALL section_vals_val_get(t_section, "KERNEL", i_val=t_control%kernel)
1696 CALL section_vals_val_get(t_section, "SPINFLIP", i_val=t_control%spinflip)
1697 CALL section_vals_val_get(t_section, "OE_CORR", i_val=t_control%oe_corr)
1698 CALL section_vals_val_get(t_section, "EV_SHIFT", r_val=t_control%ev_shift)
1699 CALL section_vals_val_get(t_section, "EOS_SHIFT", r_val=t_control%eos_shift)
1700
1701 CALL section_vals_val_get(t_section, "CONVERGENCE", r_val=t_control%conv)
1702 CALL section_vals_val_get(t_section, "MIN_AMPLITUDE", r_val=t_control%min_excitation_amplitude)
1703 CALL section_vals_val_get(t_section, "ORTHOGONAL_EPS", r_val=t_control%orthogonal_eps)
1704
1705 CALL section_vals_val_get(t_section, "RESTART", l_val=t_control%is_restart)
1706 CALL section_vals_val_get(t_section, "RKS_TRIPLETS", l_val=t_control%rks_triplets)
1707 CALL section_vals_val_get(t_section, "DO_LRIGPW", l_val=t_control%do_lrigpw)
1708 CALL section_vals_val_get(t_section, "DO_SMEARING", l_val=t_control%do_smearing)
1709 CALL section_vals_val_get(t_section, "DO_BSE", l_val=t_control%do_bse)
1710 CALL section_vals_val_get(t_section, "ADMM_KERNEL_CORRECTION_SYMMETRIC", l_val=t_control%admm_symm)
1711 CALL section_vals_val_get(t_section, "ADMM_KERNEL_XC_CORRECTION", l_val=t_control%admm_xc_correction)
1712 CALL section_vals_val_get(t_section, "EXCITON_DESCRIPTORS", l_val=t_control%do_exciton_descriptors)
1713 CALL section_vals_val_get(t_section, "DIRECTIONAL_EXCITON_DESCRIPTORS", l_val=t_control%do_directional_exciton_descriptors)
1714
1715 ! read automatically generated auxiliary basis for LRI
1716 CALL section_vals_val_get(t_section, "AUTO_BASIS", n_rep_val=nrep)
1717 DO irep = 1, nrep
1718 CALL section_vals_val_get(t_section, "AUTO_BASIS", i_rep_val=irep, c_vals=tmpstringlist)
1719 IF (SIZE(tmpstringlist) == 2) THEN
1720 CALL uppercase(tmpstringlist(2))
1721 SELECT CASE (tmpstringlist(2))
1722 CASE ("X")
1723 isize = -1
1724 CASE ("SMALL")
1725 isize = 0
1726 CASE ("MEDIUM")
1727 isize = 1
1728 CASE ("LARGE")
1729 isize = 2
1730 CASE ("HUGE")
1731 isize = 3
1732 CASE DEFAULT
1733 cpabort("Unknown basis size in AUTO_BASIS keyword:"//trim(tmpstringlist(1)))
1734 END SELECT
1735 !
1736 SELECT CASE (tmpstringlist(1))
1737 CASE ("X")
1738 CASE ("P_LRI_AUX")
1739 t_control%auto_basis_p_lri_aux = isize
1740 CASE DEFAULT
1741 cpabort("Unknown basis type in AUTO_BASIS keyword:"//trim(tmpstringlist(1)))
1742 END SELECT
1743 ELSE
1744 CALL cp_abort(__location__, &
1745 "AUTO_BASIS keyword in &PROPERTIES &TDDFT section has a wrong number of arguments.")
1746 END IF
1747 END DO
1748
1749 IF (t_control%conv < 0) &
1750 t_control%conv = abs(t_control%conv)
1751
1752 ! DIPOLE_MOMENTS subsection
1753 dipole_section => section_vals_get_subs_vals(t_section, "DIPOLE_MOMENTS")
1754 CALL section_vals_val_get(dipole_section, "DIPOLE_FORM", explicit=explicit)
1755 IF (explicit) THEN
1756 CALL section_vals_val_get(dipole_section, "DIPOLE_FORM", i_val=t_control%dipole_form)
1757 ELSE
1758 t_control%dipole_form = 0
1759 END IF
1760 CALL section_vals_val_get(dipole_section, "REFERENCE", i_val=t_control%dipole_reference)
1761 CALL section_vals_val_get(dipole_section, "REFERENCE_POINT", explicit=explicit)
1762 IF (explicit) THEN
1763 CALL section_vals_val_get(dipole_section, "REFERENCE_POINT", r_vals=t_control%dipole_ref_point)
1764 ELSE
1765 NULLIFY (t_control%dipole_ref_point)
1766 IF (t_control%dipole_form == tddfpt_dipole_length .AND. t_control%dipole_reference == use_mom_ref_user) THEN
1767 cpabort("User-defined reference point should be given explicitly")
1768 END IF
1769 END IF
1770
1771 !SOC subsection
1772 soc_section => section_vals_get_subs_vals(t_section, "SOC")
1773 CALL section_vals_get(soc_section, explicit=explicit)
1774 IF (explicit) THEN
1775 t_control%do_soc = .true.
1776 END IF
1777
1778 ! MGRID subsection
1779 mgrid_section => section_vals_get_subs_vals(t_section, "MGRID")
1780 CALL section_vals_get(mgrid_section, explicit=t_control%mgrid_is_explicit)
1781
1782 IF (t_control%mgrid_is_explicit) THEN
1783 CALL section_vals_val_get(mgrid_section, "NGRIDS", i_val=t_control%mgrid_ngrids, explicit=explicit)
1784 IF (.NOT. explicit) t_control%mgrid_ngrids = SIZE(qs_control%e_cutoff)
1785
1786 CALL section_vals_val_get(mgrid_section, "CUTOFF", r_val=t_control%mgrid_cutoff, explicit=explicit)
1787 IF (.NOT. explicit) t_control%mgrid_cutoff = qs_control%cutoff
1788
1789 CALL section_vals_val_get(mgrid_section, "PROGRESSION_FACTOR", &
1790 r_val=t_control%mgrid_progression_factor, explicit=explicit)
1791 IF (explicit) THEN
1792 IF (t_control%mgrid_progression_factor <= 1.0_dp) &
1793 CALL cp_abort(__location__, &
1794 "Progression factor should be greater then 1.0 to ensure multi-grid ordering")
1795 ELSE
1796 t_control%mgrid_progression_factor = qs_control%progression_factor
1797 END IF
1798
1799 CALL section_vals_val_get(mgrid_section, "COMMENSURATE", l_val=t_control%mgrid_commensurate_mgrids, explicit=explicit)
1800 IF (.NOT. explicit) t_control%mgrid_commensurate_mgrids = qs_control%commensurate_mgrids
1801 IF (t_control%mgrid_commensurate_mgrids) THEN
1802 IF (explicit) THEN
1803 t_control%mgrid_progression_factor = 4.0_dp
1804 ELSE
1805 t_control%mgrid_progression_factor = qs_control%progression_factor
1806 END IF
1807 END IF
1808
1809 CALL section_vals_val_get(mgrid_section, "REL_CUTOFF", r_val=t_control%mgrid_relative_cutoff, explicit=explicit)
1810 IF (.NOT. explicit) t_control%mgrid_relative_cutoff = qs_control%relative_cutoff
1811
1812 CALL section_vals_val_get(mgrid_section, "MULTIGRID_SET", l_val=multigrid_set, explicit=explicit)
1813 IF (.NOT. explicit) multigrid_set = .false.
1814 IF (multigrid_set) THEN
1815 CALL section_vals_val_get(mgrid_section, "MULTIGRID_CUTOFF", r_vals=t_control%mgrid_e_cutoff)
1816 ELSE
1817 NULLIFY (t_control%mgrid_e_cutoff)
1818 END IF
1819
1820 CALL section_vals_val_get(mgrid_section, "REALSPACE", l_val=t_control%mgrid_realspace_mgrids, explicit=explicit)
1821 IF (.NOT. explicit) t_control%mgrid_realspace_mgrids = qs_control%realspace_mgrids
1822
1823 CALL section_vals_val_get(mgrid_section, "SKIP_LOAD_BALANCE_DISTRIBUTED", &
1824 l_val=t_control%mgrid_skip_load_balance, explicit=explicit)
1825 IF (.NOT. explicit) t_control%mgrid_skip_load_balance = qs_control%skip_load_balance_distributed
1826
1827 IF (ASSOCIATED(t_control%mgrid_e_cutoff)) THEN
1828 IF (SIZE(t_control%mgrid_e_cutoff) /= t_control%mgrid_ngrids) &
1829 cpabort("Inconsistent values for number of multi-grids")
1830
1831 ! sort multi-grids in descending order according to their cutoff values
1832 t_control%mgrid_e_cutoff = -t_control%mgrid_e_cutoff
1833 ALLOCATE (inds(t_control%mgrid_ngrids))
1834 CALL sort(t_control%mgrid_e_cutoff, t_control%mgrid_ngrids, inds)
1835 DEALLOCATE (inds)
1836 t_control%mgrid_e_cutoff = -t_control%mgrid_e_cutoff
1837 END IF
1838 END IF
1839
1840 ! expand XC subsection (if given explicitly)
1841 xc_section => section_vals_get_subs_vals(t_section, "XC")
1842 xc_func => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
1843 CALL section_vals_get(xc_func, explicit=explicit)
1844 IF (explicit) &
1845 CALL xc_functionals_expand(xc_func, xc_section)
1846
1847 ! sTDA subsection
1848 stda_section => section_vals_get_subs_vals(t_section, "STDA")
1849 IF (t_control%kernel == tddfpt_kernel_stda) THEN
1850 t_control%stda_control%hfx_fraction = 0.0_dp
1851 t_control%stda_control%do_exchange = .true.
1852 t_control%stda_control%eps_td_filter = 1.e-10_dp
1853 t_control%stda_control%mn_alpha = -99.0_dp
1854 t_control%stda_control%mn_beta = -99.0_dp
1855 ! set default for Ewald method (on/off) dependent on periodicity
1856 SELECT CASE (qs_control%periodicity)
1857 CASE (0)
1858 t_control%stda_control%do_ewald = .false.
1859 CASE (1)
1860 t_control%stda_control%do_ewald = .true.
1861 CASE (2)
1862 t_control%stda_control%do_ewald = .true.
1863 CASE (3)
1864 t_control%stda_control%do_ewald = .true.
1865 CASE DEFAULT
1866 cpabort("Illegal value for periodiciy")
1867 END SELECT
1868 CALL section_vals_get(stda_section, explicit=explicit)
1869 IF (explicit) THEN
1870 CALL section_vals_val_get(stda_section, "HFX_FRACTION", r_val=hfx, explicit=expl)
1871 IF (expl) t_control%stda_control%hfx_fraction = hfx
1872 CALL section_vals_val_get(stda_section, "EPS_TD_FILTER", r_val=filter, explicit=expl)
1873 IF (expl) t_control%stda_control%eps_td_filter = filter
1874 CALL section_vals_val_get(stda_section, "DO_EWALD", l_val=do_ewald, explicit=expl)
1875 IF (expl) t_control%stda_control%do_ewald = do_ewald
1876 CALL section_vals_val_get(stda_section, "DO_EXCHANGE", l_val=do_exchange, explicit=expl)
1877 IF (expl) t_control%stda_control%do_exchange = do_exchange
1878 CALL section_vals_val_get(stda_section, "MATAGA_NISHIMOTO_CEXP", r_val=fval)
1879 t_control%stda_control%mn_alpha = fval
1880 CALL section_vals_val_get(stda_section, "MATAGA_NISHIMOTO_XEXP", r_val=fval)
1881 t_control%stda_control%mn_beta = fval
1882 END IF
1883 CALL section_vals_val_get(stda_section, "COULOMB_SR_CUT", r_val=fval)
1884 t_control%stda_control%coulomb_sr_cut = fval
1885 CALL section_vals_val_get(stda_section, "COULOMB_SR_EPS", r_val=fval)
1886 t_control%stda_control%coulomb_sr_eps = fval
1887 END IF
1888
1889 CALL timestop(handle)
1890 END SUBROUTINE read_tddfpt2_control
1891
1892! **************************************************************************************************
1893!> \brief Write the DFT control parameters to the output unit.
1894!> \param dft_control ...
1895!> \param dft_section ...
1896! **************************************************************************************************
1897 SUBROUTINE write_dft_control(dft_control, dft_section)
1898 TYPE(dft_control_type), POINTER :: dft_control
1899 TYPE(section_vals_type), POINTER :: dft_section
1900
1901 CHARACTER(len=*), PARAMETER :: routinen = 'write_dft_control'
1902
1903 CHARACTER(LEN=20) :: tmpstr
1904 INTEGER :: handle, i, i_rep, n_rep, output_unit
1905 REAL(kind=dp) :: density_cut, density_smooth_cut_range, &
1906 gradient_cut, tau_cut
1907 TYPE(cp_logger_type), POINTER :: logger
1908 TYPE(enumeration_type), POINTER :: enum
1909 TYPE(keyword_type), POINTER :: keyword
1910 TYPE(section_type), POINTER :: section
1911 TYPE(section_vals_type), POINTER :: xc_section
1912
1913 IF (dft_control%qs_control%semi_empirical) RETURN
1914 IF (dft_control%qs_control%dftb) RETURN
1915 IF (dft_control%qs_control%xtb) THEN
1916 CALL write_xtb_control(dft_control%qs_control%xtb_control, dft_section)
1917 RETURN
1918 END IF
1919 CALL timeset(routinen, handle)
1920
1921 NULLIFY (logger)
1922 logger => cp_get_default_logger()
1923
1924 output_unit = cp_print_key_unit_nr(logger, dft_section, &
1925 "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
1926
1927 IF (output_unit > 0) THEN
1928
1929 xc_section => section_vals_get_subs_vals(dft_section, "XC")
1930
1931 IF (dft_control%uks) THEN
1932 WRITE (unit=output_unit, fmt="(/,T2,A,T78,A)") &
1933 "DFT| Spin unrestricted (spin-polarized) Kohn-Sham calculation", "UKS"
1934 ELSE IF (dft_control%roks) THEN
1935 WRITE (unit=output_unit, fmt="(/,T2,A,T77,A)") &
1936 "DFT| Spin restricted open Kohn-Sham calculation", "ROKS"
1937 ELSE
1938 WRITE (unit=output_unit, fmt="(/,T2,A,T78,A)") &
1939 "DFT| Spin restricted Kohn-Sham (RKS) calculation", "RKS"
1940 END IF
1941
1942 WRITE (unit=output_unit, fmt="(T2,A,T76,I5)") &
1943 "DFT| Multiplicity", dft_control%multiplicity
1944 WRITE (unit=output_unit, fmt="(T2,A,T76,I5)") &
1945 "DFT| Number of spin states", dft_control%nspins
1946
1947 WRITE (unit=output_unit, fmt="(T2,A,T76,I5)") &
1948 "DFT| Charge", dft_control%charge
1949
1950 IF (dft_control%sic_method_id /= sic_none) CALL cite_reference(vandevondele2005b)
1951 SELECT CASE (dft_control%sic_method_id)
1952 CASE (sic_none)
1953 tmpstr = "NO"
1954 CASE (sic_mauri_spz)
1955 tmpstr = "SPZ/MAURI SIC"
1956 CASE (sic_mauri_us)
1957 tmpstr = "US/MAURI SIC"
1958 CASE (sic_ad)
1959 tmpstr = "AD SIC"
1960 CASE (sic_eo)
1961 tmpstr = "Explicit Orbital SIC"
1962 CASE DEFAULT
1963 ! fix throughout the cp2k for this option
1964 cpabort("SIC option unknown")
1965 END SELECT
1966
1967 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
1968 "DFT| Self-interaction correction (SIC)", adjustr(trim(tmpstr))
1969
1970 IF (dft_control%sic_method_id /= sic_none) THEN
1971 WRITE (unit=output_unit, fmt="(T2,A,T66,ES15.6)") &
1972 "DFT| SIC scaling parameter a", dft_control%sic_scaling_a, &
1973 "DFT| SIC scaling parameter b", dft_control%sic_scaling_b
1974 END IF
1975
1976 IF (dft_control%sic_method_id == sic_eo) THEN
1977 IF (dft_control%sic_list_id == sic_list_all) THEN
1978 WRITE (unit=output_unit, fmt="(T2,A,T66,A)") &
1979 "DFT| SIC orbitals", "ALL"
1980 END IF
1981 IF (dft_control%sic_list_id == sic_list_unpaired) THEN
1982 WRITE (unit=output_unit, fmt="(T2,A,T66,A)") &
1983 "DFT| SIC orbitals", "UNPAIRED"
1984 END IF
1985 END IF
1986
1987 CALL section_vals_val_get(xc_section, "density_cutoff", r_val=density_cut)
1988 CALL section_vals_val_get(xc_section, "gradient_cutoff", r_val=gradient_cut)
1989 CALL section_vals_val_get(xc_section, "tau_cutoff", r_val=tau_cut)
1990 CALL section_vals_val_get(xc_section, "density_smooth_cutoff_range", r_val=density_smooth_cut_range)
1991
1992 WRITE (unit=output_unit, fmt="(T2,A,T66,ES15.6)") &
1993 "DFT| Cutoffs: density ", density_cut, &
1994 "DFT| gradient", gradient_cut, &
1995 "DFT| tau ", tau_cut, &
1996 "DFT| cutoff_smoothing_range", density_smooth_cut_range
1997 CALL section_vals_val_get(xc_section, "XC_GRID%XC_SMOOTH_RHO", &
1998 c_val=tmpstr)
1999 WRITE (output_unit, '( A, T61, A )') &
2000 " DFT| XC density smoothing ", adjustr(tmpstr)
2001 CALL section_vals_val_get(xc_section, "XC_GRID%XC_DERIV", &
2002 c_val=tmpstr)
2003 WRITE (output_unit, '( A, T61, A )') &
2004 " DFT| XC derivatives ", adjustr(tmpstr)
2005 IF (dft_control%dft_plus_u) THEN
2006 NULLIFY (enum, keyword, section)
2007 CALL create_dft_section(section)
2008 keyword => section_get_keyword(section, "PLUS_U_METHOD")
2009 CALL keyword_get(keyword, enum=enum)
2010 WRITE (unit=output_unit, fmt="(/,T2,A,T41,A40)") &
2011 "DFT+U| Method", adjustr(trim(enum_i2c(enum, dft_control%plus_u_method_id)))
2012 WRITE (unit=output_unit, fmt="(T2,A)") &
2013 "DFT+U| Check atomic kind information for details"
2014 CALL section_release(section)
2015 END IF
2016
2017 WRITE (unit=output_unit, fmt="(A)") ""
2018 CALL xc_write(output_unit, xc_section, dft_control%lsd)
2019
2020 IF (dft_control%apply_period_efield) THEN
2021 WRITE (unit=output_unit, fmt="(A)") ""
2022 IF (dft_control%period_efield%displacement_field) THEN
2023 WRITE (unit=output_unit, fmt="(T2,A)") &
2024 "PERIODIC_EFIELD| Use displacement field formulation"
2025 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,ES14.6)") &
2026 "PERIODIC_EFIELD| Displacement field filter: x", &
2027 dft_control%period_efield%d_filter(1), &
2028 "PERIODIC_EFIELD| y", &
2029 dft_control%period_efield%d_filter(2), &
2030 "PERIODIC_EFIELD| z", &
2031 dft_control%period_efield%d_filter(3)
2032 END IF
2033 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,ES14.6)") &
2034 "PERIODIC_EFIELD| Polarisation vector: x", &
2035 dft_control%period_efield%polarisation(1), &
2036 "PERIODIC_EFIELD| y", &
2037 dft_control%period_efield%polarisation(2), &
2038 "PERIODIC_EFIELD| z", &
2039 dft_control%period_efield%polarisation(3)
2040
2041 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,I14)") &
2042 "PERIODIC_EFIELD| Start Frame:", &
2043 dft_control%period_efield%start_frame, &
2044 "PERIODIC_EFIELD| End Frame:", &
2045 dft_control%period_efield%end_frame
2046
2047 IF (ALLOCATED(dft_control%period_efield%strength_list)) THEN
2048 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,I14)") &
2049 "PERIODIC_EFIELD| Number of Intensities:", &
2050 SIZE(dft_control%period_efield%strength_list)
2051 WRITE (unit=output_unit, fmt="(T2,A,I10,T66,1X,ES14.6)") &
2052 "PERIODIC_EFIELD| Intensity List [a.u.] ", &
2053 1, dft_control%period_efield%strength_list(1)
2054 DO i = 2, SIZE(dft_control%period_efield%strength_list)
2055 WRITE (unit=output_unit, fmt="(T2,A,I10,T66,1X,ES14.6)") &
2056 "PERIODIC_EFIELD| ", &
2057 i, dft_control%period_efield%strength_list(i)
2058 END DO
2059 ELSE
2060 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,ES14.6)") &
2061 "PERIODIC_EFIELD| Intensity [a.u.]:", &
2062 dft_control%period_efield%strength
2063 END IF
2064
2065 IF (sqrt(dot_product(dft_control%period_efield%polarisation, &
2066 dft_control%period_efield%polarisation)) < epsilon(0.0_dp)) THEN
2067 cpabort("Invalid (too small) polarisation vector specified for PERIODIC_EFIELD")
2068 END IF
2069 END IF
2070
2071 IF (dft_control%do_sccs) THEN
2072 WRITE (unit=output_unit, fmt="(/,T2,A)") &
2073 "SCCS| Self-consistent continuum solvation model"
2074 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2075 "SCCS| Relative permittivity of the solvent (medium)", &
2076 dft_control%sccs_control%epsilon_solvent, &
2077 "SCCS| Absolute permittivity [a.u.]", &
2078 dft_control%sccs_control%epsilon_solvent/fourpi
2079 SELECT CASE (dft_control%sccs_control%method_id)
2080 CASE (sccs_andreussi)
2081 WRITE (unit=output_unit, fmt="(T2,A,/,(T2,A,T61,ES20.6))") &
2082 "SCCS| Dielectric function proposed by Andreussi et al.", &
2083 "SCCS| rho_max", dft_control%sccs_control%rho_max, &
2084 "SCCS| rho_min", dft_control%sccs_control%rho_min
2085 CASE (sccs_fattebert_gygi)
2086 WRITE (unit=output_unit, fmt="(T2,A,/,(T2,A,T61,ES20.6))") &
2087 "SCCS| Dielectric function proposed by Fattebert and Gygi", &
2088 "SCCS| beta", dft_control%sccs_control%beta, &
2089 "SCCS| rho_zero", dft_control%sccs_control%rho_zero
2090 CASE DEFAULT
2091 cpabort("Invalid SCCS model specified. Please, check your input!")
2092 END SELECT
2093 SELECT CASE (dft_control%sccs_control%derivative_method)
2094 CASE (sccs_derivative_fft)
2095 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2096 "SCCS| Numerical derivative calculation", &
2097 adjustr("FFT")
2098 CASE (sccs_derivative_cd3)
2099 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2100 "SCCS| Numerical derivative calculation", &
2101 adjustr("3-point stencil central differences")
2102 CASE (sccs_derivative_cd5)
2103 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2104 "SCCS| Numerical derivative calculation", &
2105 adjustr("5-point stencil central differences")
2106 CASE (sccs_derivative_cd7)
2107 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2108 "SCCS| Numerical derivative calculation", &
2109 adjustr("7-point stencil central differences")
2110 CASE DEFAULT
2111 CALL cp_abort(__location__, &
2112 "Invalid derivative method specified for SCCS model. "// &
2113 "Please, check your input!")
2114 END SELECT
2115 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2116 "SCCS| Repulsion parameter alpha [mN/m] = [dyn/cm]", &
2117 cp_unit_from_cp2k(dft_control%sccs_control%alpha_solvent, "mN/m")
2118 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2119 "SCCS| Dispersion parameter beta [GPa]", &
2120 cp_unit_from_cp2k(dft_control%sccs_control%beta_solvent, "GPa")
2121 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2122 "SCCS| Surface tension gamma [mN/m] = [dyn/cm]", &
2123 cp_unit_from_cp2k(dft_control%sccs_control%gamma_solvent, "mN/m")
2124 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2125 "SCCS| Mixing parameter applied during the iteration cycle", &
2126 dft_control%sccs_control%mixing
2127 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2128 "SCCS| Tolerance for the convergence of the SCCS iteration cycle", &
2129 dft_control%sccs_control%eps_sccs
2130 WRITE (unit=output_unit, fmt="(T2,A,T61,I20)") &
2131 "SCCS| Maximum number of iteration steps", &
2132 dft_control%sccs_control%max_iter
2133 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2134 "SCCS| SCF convergence threshold for starting the SCCS iteration", &
2135 dft_control%sccs_control%eps_scf
2136 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2137 "SCCS| Numerical increment for the cavity surface calculation", &
2138 dft_control%sccs_control%delta_rho
2139 END IF
2140
2141 WRITE (unit=output_unit, fmt="(A)") ""
2142
2143 END IF
2144
2145 IF (dft_control%hairy_probes .EQV. .true.) THEN
2146 n_rep = SIZE(dft_control%probe)
2147 IF (output_unit > 0) THEN
2148 DO i_rep = 1, n_rep
2149 WRITE (unit=output_unit, fmt="(T2,A,I5)") &
2150 "HP | hair probe set", i_rep
2151 WRITE (unit=output_unit, fmt="(T2,A,T61,*(I5))") &
2152 "HP| atom indexes", &
2153 (dft_control%probe(i_rep)%atom_ids(i), i=1, dft_control%probe(i_rep)%natoms)
2154 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2155 "HP| potential", dft_control%probe(i_rep)%mu
2156 WRITE (unit=output_unit, fmt="(T2,A,T61,F20.2)") &
2157 "HP| temperature", dft_control%probe(i_rep)%T
2158 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2159 "HP| eps_hp", dft_control%probe(i_rep)%eps_hp
2160 END DO
2161 END IF
2162 END IF
2163
2164 CALL cp_print_key_finished_output(output_unit, logger, dft_section, &
2165 "PRINT%DFT_CONTROL_PARAMETERS")
2166
2167 CALL timestop(handle)
2168
2169 END SUBROUTINE write_dft_control
2170
2171! **************************************************************************************************
2172!> \brief Write the ADMM control parameters to the output unit.
2173!> \param admm_control ...
2174!> \param dft_section ...
2175! **************************************************************************************************
2176 SUBROUTINE write_admm_control(admm_control, dft_section)
2177 TYPE(admm_control_type), POINTER :: admm_control
2178 TYPE(section_vals_type), POINTER :: dft_section
2179
2180 INTEGER :: iounit
2181 TYPE(cp_logger_type), POINTER :: logger
2182
2183 NULLIFY (logger)
2184 logger => cp_get_default_logger()
2185
2186 iounit = cp_print_key_unit_nr(logger, dft_section, &
2187 "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
2188
2189 IF (iounit > 0) THEN
2190
2191 SELECT CASE (admm_control%admm_type)
2192 CASE (no_admm_type)
2193 WRITE (unit=iounit, fmt="(/,T2,A,T77,A)") "ADMM| Specific ADMM type specified", "NONE"
2194 CASE (admm1_type)
2195 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM1"
2196 CASE (admm2_type)
2197 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM2"
2198 CASE (admms_type)
2199 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMS"
2200 CASE (admmp_type)
2201 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMP"
2202 CASE (admmq_type)
2203 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMQ"
2204 CASE DEFAULT
2205 cpabort("admm_type")
2206 END SELECT
2207
2208 SELECT CASE (admm_control%purification_method)
2209 CASE (do_admm_purify_none)
2210 WRITE (unit=iounit, fmt="(T2,A,T77,A)") "ADMM| Density matrix purification method", "NONE"
2212 WRITE (unit=iounit, fmt="(T2,A,T75,A)") "ADMM| Density matrix purification method", "Cauchy"
2214 WRITE (unit=iounit, fmt="(T2,A,T66,A)") "ADMM| Density matrix purification method", "Cauchy subspace"
2216 WRITE (unit=iounit, fmt="(T2,A,T63,A)") "ADMM| Density matrix purification method", "MO diagonalization"
2218 WRITE (unit=iounit, fmt="(T2,A,T71,A)") "ADMM| Density matrix purification method", "MO no diag"
2220 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Density matrix purification method", "McWeeny"
2222 WRITE (unit=iounit, fmt="(T2,A,T73,A)") "ADMM| Density matrix purification method", "NONE(DM)"
2223 CASE DEFAULT
2224 cpabort("admm_purification_method")
2225 END SELECT
2226
2227 SELECT CASE (admm_control%method)
2229 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Orbital projection on ADMM basis"
2231 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Blocked Fock matrix projection with full purification"
2233 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Blocked Fock matrix projection"
2235 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Orbital projection with charge constrain"
2236 CASE DEFAULT
2237 cpabort("admm method")
2238 END SELECT
2239
2240 SELECT CASE (admm_control%scaling_model)
2243 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Use Merlot (2014) scaling model"
2244 CASE DEFAULT
2245 cpabort("admm scaling_model")
2246 END SELECT
2247
2248 WRITE (unit=iounit, fmt="(T2,A,T61,G20.10)") "ADMM| eps_filter", admm_control%eps_filter
2249
2250 SELECT CASE (admm_control%aux_exch_func)
2252 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| No exchange functional correction term used"
2254 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "(W)PBEX"
2256 WRITE (unit=iounit, fmt="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "PBEX"
2258 WRITE (unit=iounit, fmt="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "OPTX"
2260 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "Becke88"
2262 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "SlaterX"
2263 CASE DEFAULT
2264 cpabort("admm aux_exch_func")
2265 END SELECT
2266
2267 WRITE (unit=iounit, fmt="(A)") ""
2268
2269 END IF
2270
2271 CALL cp_print_key_finished_output(iounit, logger, dft_section, &
2272 "PRINT%DFT_CONTROL_PARAMETERS")
2273 END SUBROUTINE write_admm_control
2274
2275! **************************************************************************************************
2276!> \brief Write the xTB control parameters to the output unit.
2277!> \param xtb_control ...
2278!> \param dft_section ...
2279! **************************************************************************************************
2280 SUBROUTINE write_xtb_control(xtb_control, dft_section)
2281 TYPE(xtb_control_type), POINTER :: xtb_control
2282 TYPE(section_vals_type), POINTER :: dft_section
2283
2284 CHARACTER(len=*), PARAMETER :: routinen = 'write_xtb_control'
2285
2286 INTEGER :: handle, output_unit
2287 TYPE(cp_logger_type), POINTER :: logger
2288
2289 CALL timeset(routinen, handle)
2290 NULLIFY (logger)
2291 logger => cp_get_default_logger()
2292
2293 output_unit = cp_print_key_unit_nr(logger, dft_section, &
2294 "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
2295
2296 IF (output_unit > 0) THEN
2297
2298 WRITE (unit=output_unit, fmt="(/,T2,A,T31,A50)") &
2299 "xTB| Parameter file", adjustr(trim(xtb_control%parameter_file_name))
2300 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2301 "xTB| Basis expansion STO-NG", xtb_control%sto_ng
2302 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2303 "xTB| Basis expansion STO-NG for Hydrogen", xtb_control%h_sto_ng
2304 WRITE (unit=output_unit, fmt="(T2,A,T71,E10.4)") &
2305 "xTB| Repulsive pair potential accuracy", xtb_control%eps_pair
2306 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.6)") &
2307 "xTB| Repulsive enhancement factor", xtb_control%enscale
2308 WRITE (unit=output_unit, fmt="(T2,A,T71,L10)") &
2309 "xTB| Halogen interaction potential", xtb_control%xb_interaction
2310 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2311 "xTB| Halogen interaction potential cutoff radius", xtb_control%xb_radius
2312 WRITE (unit=output_unit, fmt="(T2,A,T71,L10)") &
2313 "xTB| Nonbonded interactions", xtb_control%do_nonbonded
2314 SELECT CASE (xtb_control%vdw_type)
2315 CASE (xtb_vdw_type_none)
2316 WRITE (unit=output_unit, fmt="(T2,A)") "xTB| No vdW potential selected"
2317 CASE (xtb_vdw_type_d3)
2318 WRITE (unit=output_unit, fmt="(T2,A,T72,A)") "xTB| vdW potential type:", "DFTD3(BJ)"
2319 WRITE (unit=output_unit, fmt="(T2,A,T31,A50)") &
2320 "xTB| D3 Dispersion: Parameter file", adjustr(trim(xtb_control%dispersion_parameter_file))
2321 CASE (xtb_vdw_type_d4)
2322 WRITE (unit=output_unit, fmt="(T2,A,T76,A)") "xTB| vdW potential type:", "DFTD4"
2323 WRITE (unit=output_unit, fmt="(T2,A,T31,A50)") &
2324 "xTB| D4 Dispersion: Parameter file", adjustr(trim(xtb_control%dispersion_parameter_file))
2325 CASE DEFAULT
2326 cpabort("vdw type")
2327 END SELECT
2328 WRITE (unit=output_unit, fmt="(T2,A,T51,3F10.3)") &
2329 "xTB| Huckel constants ks kp kd", xtb_control%ks, xtb_control%kp, xtb_control%kd
2330 WRITE (unit=output_unit, fmt="(T2,A,T61,2F10.3)") &
2331 "xTB| Huckel constants ksp k2sh", xtb_control%ksp, xtb_control%k2sh
2332 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2333 "xTB| Mataga-Nishimoto exponent", xtb_control%kg
2334 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2335 "xTB| Repulsion potential exponent", xtb_control%kf
2336 WRITE (unit=output_unit, fmt="(T2,A,T51,3F10.3)") &
2337 "xTB| Coordination number scaling kcn(s) kcn(p) kcn(d)", &
2338 xtb_control%kcns, xtb_control%kcnp, xtb_control%kcnd
2339 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2340 "xTB| Electronegativity scaling", xtb_control%ken
2341 WRITE (unit=output_unit, fmt="(T2,A,T61,2F10.3)") &
2342 "xTB| Halogen potential scaling kxr kx2", xtb_control%kxr, xtb_control%kx2
2343 WRITE (unit=output_unit, fmt="(/)")
2344
2345 END IF
2346
2347 CALL cp_print_key_finished_output(output_unit, logger, dft_section, &
2348 "PRINT%DFT_CONTROL_PARAMETERS")
2349
2350 CALL timestop(handle)
2351
2352 END SUBROUTINE write_xtb_control
2353
2354! **************************************************************************************************
2355!> \brief Purpose: Write the QS control parameters to the output unit.
2356!> \param qs_control ...
2357!> \param dft_section ...
2358! **************************************************************************************************
2359 SUBROUTINE write_qs_control(qs_control, dft_section)
2360 TYPE(qs_control_type), INTENT(IN) :: qs_control
2361 TYPE(section_vals_type), POINTER :: dft_section
2362
2363 CHARACTER(len=*), PARAMETER :: routinen = 'write_qs_control'
2364
2365 CHARACTER(len=20) :: method, quadrature
2366 INTEGER :: handle, i, igrid_level, ngrid_level, &
2367 output_unit
2368 TYPE(cp_logger_type), POINTER :: logger
2369 TYPE(ddapc_restraint_type), POINTER :: ddapc_restraint_control
2370 TYPE(enumeration_type), POINTER :: enum
2371 TYPE(keyword_type), POINTER :: keyword
2372 TYPE(section_type), POINTER :: qs_section
2373 TYPE(section_vals_type), POINTER :: print_section_vals, qs_section_vals
2374
2375 IF (qs_control%semi_empirical) RETURN
2376 IF (qs_control%dftb) RETURN
2377 IF (qs_control%xtb) RETURN
2378 CALL timeset(routinen, handle)
2379 NULLIFY (logger, print_section_vals, qs_section, qs_section_vals)
2380 logger => cp_get_default_logger()
2381 print_section_vals => section_vals_get_subs_vals(dft_section, "PRINT")
2382 qs_section_vals => section_vals_get_subs_vals(dft_section, "QS")
2383 CALL section_vals_get(qs_section_vals, section=qs_section)
2384
2385 NULLIFY (enum, keyword)
2386 keyword => section_get_keyword(qs_section, "METHOD")
2387 CALL keyword_get(keyword, enum=enum)
2388 method = trim(enum_i2c(enum, qs_control%method_id))
2389
2390 NULLIFY (enum, keyword)
2391 keyword => section_get_keyword(qs_section, "QUADRATURE")
2392 CALL keyword_get(keyword, enum=enum)
2393 quadrature = trim(enum_i2c(enum, qs_control%gapw_control%quadrature))
2394
2395 output_unit = cp_print_key_unit_nr(logger, print_section_vals, &
2396 "DFT_CONTROL_PARAMETERS", extension=".Log")
2397 IF (output_unit > 0) THEN
2398 ngrid_level = SIZE(qs_control%e_cutoff)
2399 WRITE (unit=output_unit, fmt="(/,T2,A,T61,A20)") &
2400 "QS| Method:", adjustr(method)
2401 IF (qs_control%pw_grid_opt%spherical) THEN
2402 WRITE (unit=output_unit, fmt="(T2,A,T61,A)") &
2403 "QS| Density plane wave grid type", " SPHERICAL HALFSPACE"
2404 ELSE IF (qs_control%pw_grid_opt%fullspace) THEN
2405 WRITE (unit=output_unit, fmt="(T2,A,T57,A)") &
2406 "QS| Density plane wave grid type", " NON-SPHERICAL FULLSPACE"
2407 ELSE
2408 WRITE (unit=output_unit, fmt="(T2,A,T57,A)") &
2409 "QS| Density plane wave grid type", " NON-SPHERICAL HALFSPACE"
2410 END IF
2411 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2412 "QS| Number of grid levels:", SIZE(qs_control%e_cutoff)
2413 IF (ngrid_level == 1) THEN
2414 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2415 "QS| Density cutoff [a.u.]:", qs_control%e_cutoff(1)
2416 ELSE
2417 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2418 "QS| Density cutoff [a.u.]:", qs_control%cutoff
2419 IF (qs_control%commensurate_mgrids) &
2420 WRITE (unit=output_unit, fmt="(T2,A)") "QS| Using commensurate multigrids"
2421 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2422 "QS| Multi grid cutoff [a.u.]: 1) grid level", qs_control%e_cutoff(1)
2423 WRITE (unit=output_unit, fmt="(T2,A,I3,A,T71,F10.1)") &
2424 ("QS| ", igrid_level, ") grid level", &
2425 qs_control%e_cutoff(igrid_level), &
2426 igrid_level=2, SIZE(qs_control%e_cutoff))
2427 END IF
2428 IF (qs_control%pao) THEN
2429 WRITE (unit=output_unit, fmt="(T2,A)") "QS| PAO active"
2430 END IF
2431 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2432 "QS| Grid level progression factor:", qs_control%progression_factor
2433 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2434 "QS| Relative density cutoff [a.u.]:", qs_control%relative_cutoff
2435 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2436 "QS| Interaction thresholds: eps_pgf_orb:", &
2437 qs_control%eps_pgf_orb, &
2438 "QS| eps_filter_matrix:", &
2439 qs_control%eps_filter_matrix, &
2440 "QS| eps_core_charge:", &
2441 qs_control%eps_core_charge, &
2442 "QS| eps_rho_gspace:", &
2443 qs_control%eps_rho_gspace, &
2444 "QS| eps_rho_rspace:", &
2445 qs_control%eps_rho_rspace, &
2446 "QS| eps_gvg_rspace:", &
2447 qs_control%eps_gvg_rspace, &
2448 "QS| eps_ppl:", &
2449 qs_control%eps_ppl, &
2450 "QS| eps_ppnl:", &
2451 qs_control%eps_ppnl
2452 IF (qs_control%gapw) THEN
2453 IF (qs_control%gapw_control%accurate_xcint) THEN
2454 WRITE (unit=output_unit, fmt="(T2,A,T69,F12.6)") &
2455 "QS| GAPW| XC integration using accurate scheme: Ref. exponent =", &
2456 qs_control%gapw_control%aweights
2457 END IF
2458 !
2459 SELECT CASE (qs_control%gapw_control%basis_1c)
2460 CASE (gapw_1c_orb)
2461 WRITE (unit=output_unit, fmt="(T2,A)") &
2462 "QS| GAPW| One center basis from orbital basis primitives"
2463 CASE (gapw_1c_small)
2464 WRITE (unit=output_unit, fmt="(T2,A)") &
2465 "QS| GAPW| One center basis extended with primitives (small:s)"
2466 CASE (gapw_1c_medium)
2467 WRITE (unit=output_unit, fmt="(T2,A)") &
2468 "QS| GAPW| One center basis extended with primitives (medium:sp)"
2469 CASE (gapw_1c_large)
2470 WRITE (unit=output_unit, fmt="(T2,A)") &
2471 "QS| GAPW| One center basis extended with primitives (large:spd)"
2472 CASE (gapw_1c_very_large)
2473 WRITE (unit=output_unit, fmt="(T2,A)") &
2474 "QS| GAPW| One center basis extended with primitives (very large:spdf)"
2475 CASE DEFAULT
2476 cpabort("basis_1c incorrect")
2477 END SELECT
2478 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2479 "QS| GAPW| eps_fit:", &
2480 qs_control%gapw_control%eps_fit, &
2481 "QS| GAPW| eps_iso:", &
2482 qs_control%gapw_control%eps_iso, &
2483 "QS| GAPW| eps_svd:", &
2484 qs_control%gapw_control%eps_svd, &
2485 "QS| GAPW| eps_cpc:", &
2486 qs_control%gapw_control%eps_cpc
2487 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2488 "QS| GAPW| atom-r-grid: quadrature:", &
2489 adjustr(quadrature)
2490 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2491 "QS| GAPW| atom-s-grid: max l :", &
2492 qs_control%gapw_control%lmax_sphere, &
2493 "QS| GAPW| max_l_rho0 :", &
2494 qs_control%gapw_control%lmax_rho0
2495 IF (qs_control%gapw_control%non_paw_atoms) THEN
2496 WRITE (unit=output_unit, fmt="(T2,A)") &
2497 "QS| GAPW| At least one kind is NOT PAW, i.e. it has only soft AO "
2498 END IF
2499 IF (qs_control%gapw_control%nopaw_as_gpw) THEN
2500 WRITE (unit=output_unit, fmt="(T2,A)") &
2501 "QS| GAPW| The NOT PAW atoms are treated fully GPW"
2502 END IF
2503 END IF
2504 IF (qs_control%gapw_xc) THEN
2505 SELECT CASE (qs_control%gapw_control%basis_1c)
2506 CASE (gapw_1c_orb)
2507 WRITE (unit=output_unit, fmt="(T2,A)") &
2508 "QS| GAPW_XC| One center basis from orbital basis primitives"
2509 CASE (gapw_1c_small)
2510 WRITE (unit=output_unit, fmt="(T2,A)") &
2511 "QS| GAPW_XC| One center basis extended with primitives (small:s)"
2512 CASE (gapw_1c_medium)
2513 WRITE (unit=output_unit, fmt="(T2,A)") &
2514 "QS| GAPW_XC| One center basis extended with primitives (medium:sp)"
2515 CASE (gapw_1c_large)
2516 WRITE (unit=output_unit, fmt="(T2,A)") &
2517 "QS| GAPW_XC| One center basis extended with primitives (large:spd)"
2518 CASE (gapw_1c_very_large)
2519 WRITE (unit=output_unit, fmt="(T2,A)") &
2520 "QS| GAPW_XC| One center basis extended with primitives (very large:spdf)"
2521 CASE DEFAULT
2522 cpabort("basis_1c incorrect")
2523 END SELECT
2524 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2525 "QS| GAPW_XC| eps_fit:", &
2526 qs_control%gapw_control%eps_fit, &
2527 "QS| GAPW_XC| eps_iso:", &
2528 qs_control%gapw_control%eps_iso, &
2529 "QS| GAPW_XC| eps_svd:", &
2530 qs_control%gapw_control%eps_svd
2531 WRITE (unit=output_unit, fmt="(T2,A,T55,A30)") &
2532 "QS| GAPW_XC|atom-r-grid: quadrature:", &
2533 enum_i2c(enum, qs_control%gapw_control%quadrature)
2534 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2535 "QS| GAPW_XC| atom-s-grid: max l :", &
2536 qs_control%gapw_control%lmax_sphere
2537 END IF
2538 IF (qs_control%mulliken_restraint) THEN
2539 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2540 "QS| Mulliken restraint target", qs_control%mulliken_restraint_control%target
2541 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2542 "QS| Mulliken restraint strength", qs_control%mulliken_restraint_control%strength
2543 WRITE (unit=output_unit, fmt="(T2,A,T73,I8)") &
2544 "QS| Mulliken restraint atoms: ", qs_control%mulliken_restraint_control%natoms
2545 WRITE (unit=output_unit, fmt="(5I8)") qs_control%mulliken_restraint_control%atoms
2546 END IF
2547 IF (qs_control%ddapc_restraint) THEN
2548 DO i = 1, SIZE(qs_control%ddapc_restraint_control)
2549 ddapc_restraint_control => qs_control%ddapc_restraint_control(i)
2550 IF (SIZE(qs_control%ddapc_restraint_control) > 1) &
2551 WRITE (unit=output_unit, fmt="(T2,A,T3,I8)") &
2552 "QS| parameters for DDAPC restraint number", i
2553 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2554 "QS| ddapc restraint target", ddapc_restraint_control%target
2555 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2556 "QS| ddapc restraint strength", ddapc_restraint_control%strength
2557 WRITE (unit=output_unit, fmt="(T2,A,T73,I8)") &
2558 "QS| ddapc restraint atoms: ", ddapc_restraint_control%natoms
2559 WRITE (unit=output_unit, fmt="(5I8)") ddapc_restraint_control%atoms
2560 WRITE (unit=output_unit, fmt="(T2,A)") "Coefficients:"
2561 WRITE (unit=output_unit, fmt="(5F6.2)") ddapc_restraint_control%coeff
2562 SELECT CASE (ddapc_restraint_control%functional_form)
2563 CASE (do_ddapc_restraint)
2564 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2565 "QS| ddapc restraint functional form :", "RESTRAINT"
2566 CASE (do_ddapc_constraint)
2567 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2568 "QS| ddapc restraint functional form :", "CONSTRAINT"
2569 CASE DEFAULT
2570 cpabort("Unknown ddapc restraint")
2571 END SELECT
2572 END DO
2573 END IF
2574 IF (qs_control%s2_restraint) THEN
2575 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2576 "QS| s2 restraint target", qs_control%s2_restraint_control%target
2577 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2578 "QS| s2 restraint strength", qs_control%s2_restraint_control%strength
2579 SELECT CASE (qs_control%s2_restraint_control%functional_form)
2580 CASE (do_s2_restraint)
2581 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2582 "QS| s2 restraint functional form :", "RESTRAINT"
2583 cpabort("Not yet implemented")
2584 CASE (do_s2_constraint)
2585 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2586 "QS| s2 restraint functional form :", "CONSTRAINT"
2587 CASE DEFAULT
2588 cpabort("Unknown ddapc restraint")
2589 END SELECT
2590 END IF
2591 END IF
2592 CALL cp_print_key_finished_output(output_unit, logger, print_section_vals, &
2593 "DFT_CONTROL_PARAMETERS")
2594
2595 CALL timestop(handle)
2596
2597 END SUBROUTINE write_qs_control
2598
2599! **************************************************************************************************
2600!> \brief reads the input parameters needed for ddapc.
2601!> \param qs_control ...
2602!> \param qs_section ...
2603!> \param ddapc_restraint_section ...
2604!> \author fschiff
2605!> \note
2606!> either reads DFT%QS%DDAPC_RESTRAINT or PROPERTIES%ET_coupling
2607!> if(qs_section is present the DFT part is read, if ddapc_restraint_section
2608!> is present ET_COUPLING is read. Avoid having both!!!
2609! **************************************************************************************************
2610 SUBROUTINE read_ddapc_section(qs_control, qs_section, ddapc_restraint_section)
2611
2612 TYPE(qs_control_type), INTENT(INOUT) :: qs_control
2613 TYPE(section_vals_type), OPTIONAL, POINTER :: qs_section, ddapc_restraint_section
2614
2615 INTEGER :: i, j, jj, k, n_rep
2616 INTEGER, DIMENSION(:), POINTER :: tmplist
2617 REAL(kind=dp), DIMENSION(:), POINTER :: rtmplist
2618 TYPE(ddapc_restraint_type), POINTER :: ddapc_restraint_control
2619 TYPE(section_vals_type), POINTER :: ddapc_section
2620
2621 IF (PRESENT(ddapc_restraint_section)) THEN
2622 IF (ASSOCIATED(qs_control%ddapc_restraint_control)) THEN
2623 IF (SIZE(qs_control%ddapc_restraint_control) >= 2) &
2624 cpabort("ET_COUPLING cannot be used in combination with a normal restraint")
2625 ELSE
2626 ddapc_section => ddapc_restraint_section
2627 ALLOCATE (qs_control%ddapc_restraint_control(1))
2628 END IF
2629 END IF
2630
2631 IF (PRESENT(qs_section)) THEN
2632 NULLIFY (ddapc_section)
2633 ddapc_section => section_vals_get_subs_vals(qs_section, &
2634 "DDAPC_RESTRAINT")
2635 END IF
2636
2637 DO i = 1, SIZE(qs_control%ddapc_restraint_control)
2638
2639 CALL ddapc_control_create(qs_control%ddapc_restraint_control(i))
2640 ddapc_restraint_control => qs_control%ddapc_restraint_control(i)
2641
2642 CALL section_vals_val_get(ddapc_section, "STRENGTH", i_rep_section=i, &
2643 r_val=ddapc_restraint_control%strength)
2644 CALL section_vals_val_get(ddapc_section, "TARGET", i_rep_section=i, &
2645 r_val=ddapc_restraint_control%target)
2646 CALL section_vals_val_get(ddapc_section, "FUNCTIONAL_FORM", i_rep_section=i, &
2647 i_val=ddapc_restraint_control%functional_form)
2648 CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
2649 n_rep_val=n_rep)
2650 CALL section_vals_val_get(ddapc_section, "TYPE_OF_DENSITY", i_rep_section=i, &
2651 i_val=ddapc_restraint_control%density_type)
2652
2653 jj = 0
2654 DO k = 1, n_rep
2655 CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
2656 i_rep_val=k, i_vals=tmplist)
2657 DO j = 1, SIZE(tmplist)
2658 jj = jj + 1
2659 END DO
2660 END DO
2661 IF (jj < 1) cpabort("Need at least 1 atom to use ddapc constraints")
2662 ddapc_restraint_control%natoms = jj
2663 IF (ASSOCIATED(ddapc_restraint_control%atoms)) &
2664 DEALLOCATE (ddapc_restraint_control%atoms)
2665 ALLOCATE (ddapc_restraint_control%atoms(ddapc_restraint_control%natoms))
2666 jj = 0
2667 DO k = 1, n_rep
2668 CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
2669 i_rep_val=k, i_vals=tmplist)
2670 DO j = 1, SIZE(tmplist)
2671 jj = jj + 1
2672 ddapc_restraint_control%atoms(jj) = tmplist(j)
2673 END DO
2674 END DO
2675
2676 IF (ASSOCIATED(ddapc_restraint_control%coeff)) &
2677 DEALLOCATE (ddapc_restraint_control%coeff)
2678 ALLOCATE (ddapc_restraint_control%coeff(ddapc_restraint_control%natoms))
2679 ddapc_restraint_control%coeff = 1.0_dp
2680
2681 CALL section_vals_val_get(ddapc_section, "COEFF", i_rep_section=i, &
2682 n_rep_val=n_rep)
2683 jj = 0
2684 DO k = 1, n_rep
2685 CALL section_vals_val_get(ddapc_section, "COEFF", i_rep_section=i, &
2686 i_rep_val=k, r_vals=rtmplist)
2687 DO j = 1, SIZE(rtmplist)
2688 jj = jj + 1
2689 IF (jj > ddapc_restraint_control%natoms) &
2690 cpabort("Need the same number of coeff as there are atoms ")
2691 ddapc_restraint_control%coeff(jj) = rtmplist(j)
2692 END DO
2693 END DO
2694 IF (jj < ddapc_restraint_control%natoms .AND. jj /= 0) &
2695 cpabort("Need no or the same number of coeff as there are atoms.")
2696 END DO
2697 k = 0
2698 DO i = 1, SIZE(qs_control%ddapc_restraint_control)
2699 IF (qs_control%ddapc_restraint_control(i)%functional_form == &
2700 do_ddapc_constraint) k = k + 1
2701 END DO
2702 IF (k == 2) CALL cp_abort(__location__, &
2703 "Only a single constraint possible yet, try to use restraints instead ")
2704
2705 END SUBROUTINE read_ddapc_section
2706
2707! **************************************************************************************************
2708!> \brief ...
2709!> \param dft_control ...
2710!> \param efield_section ...
2711! **************************************************************************************************
2712 SUBROUTINE read_efield_sections(dft_control, efield_section)
2713 TYPE(dft_control_type), POINTER :: dft_control
2714 TYPE(section_vals_type), POINTER :: efield_section
2715
2716 CHARACTER(len=default_path_length) :: file_name
2717 INTEGER :: i, io, j, n, unit_nr
2718 REAL(kind=dp), DIMENSION(:), POINTER :: tmp_vals
2719 TYPE(efield_type), POINTER :: efield
2720 TYPE(section_vals_type), POINTER :: tmp_section
2721
2722 DO i = 1, SIZE(dft_control%efield_fields)
2723 NULLIFY (dft_control%efield_fields(i)%efield)
2724 ALLOCATE (dft_control%efield_fields(i)%efield)
2725 efield => dft_control%efield_fields(i)%efield
2726 NULLIFY (efield%envelop_i_vars, efield%envelop_r_vars)
2727 CALL section_vals_val_get(efield_section, "INTENSITY", i_rep_section=i, &
2728 r_val=efield%strength)
2729
2730 CALL section_vals_val_get(efield_section, "POLARISATION", i_rep_section=i, &
2731 r_vals=tmp_vals)
2732 ALLOCATE (efield%polarisation(SIZE(tmp_vals)))
2733 efield%polarisation = tmp_vals
2734 CALL section_vals_val_get(efield_section, "PHASE", i_rep_section=i, &
2735 r_val=efield%phase_offset)
2736 CALL section_vals_val_get(efield_section, "ENVELOP", i_rep_section=i, &
2737 i_val=efield%envelop_id)
2738 CALL section_vals_val_get(efield_section, "WAVELENGTH", i_rep_section=i, &
2739 r_val=efield%wavelength)
2740 CALL section_vals_val_get(efield_section, "VEC_POT_INITIAL", i_rep_section=i, &
2741 r_vals=tmp_vals)
2742 efield%vec_pot_initial = tmp_vals
2743
2744 IF (efield%envelop_id == constant_env) THEN
2745 ALLOCATE (efield%envelop_i_vars(2))
2746 tmp_section => section_vals_get_subs_vals(efield_section, "CONSTANT_ENV", i_rep_section=i)
2747 CALL section_vals_val_get(tmp_section, "START_STEP", &
2748 i_val=efield%envelop_i_vars(1))
2749 CALL section_vals_val_get(tmp_section, "END_STEP", &
2750 i_val=efield%envelop_i_vars(2))
2751 ELSE IF (efield%envelop_id == gaussian_env) THEN
2752 ALLOCATE (efield%envelop_r_vars(2))
2753 tmp_section => section_vals_get_subs_vals(efield_section, "GAUSSIAN_ENV", i_rep_section=i)
2754 CALL section_vals_val_get(tmp_section, "T0", &
2755 r_val=efield%envelop_r_vars(1))
2756 CALL section_vals_val_get(tmp_section, "SIGMA", &
2757 r_val=efield%envelop_r_vars(2))
2758 ELSE IF (efield%envelop_id == ramp_env) THEN
2759 ALLOCATE (efield%envelop_i_vars(4))
2760 tmp_section => section_vals_get_subs_vals(efield_section, "RAMP_ENV", i_rep_section=i)
2761 CALL section_vals_val_get(tmp_section, "START_STEP_IN", &
2762 i_val=efield%envelop_i_vars(1))
2763 CALL section_vals_val_get(tmp_section, "END_STEP_IN", &
2764 i_val=efield%envelop_i_vars(2))
2765 CALL section_vals_val_get(tmp_section, "START_STEP_OUT", &
2766 i_val=efield%envelop_i_vars(3))
2767 CALL section_vals_val_get(tmp_section, "END_STEP_OUT", &
2768 i_val=efield%envelop_i_vars(4))
2769 ELSE IF (efield%envelop_id == custom_env) THEN
2770 tmp_section => section_vals_get_subs_vals(efield_section, "CUSTOM_ENV", i_rep_section=i)
2771 CALL section_vals_val_get(tmp_section, "EFIELD_FILE_NAME", c_val=file_name)
2772 CALL open_file(file_name=trim(file_name), file_action="READ", file_status="OLD", unit_number=unit_nr)
2773 !Determine the number of lines in file
2774 n = 0
2775 DO WHILE (.true.)
2776 READ (unit_nr, *, iostat=io)
2777 IF (io /= 0) EXIT
2778 n = n + 1
2779 END DO
2780 rewind(unit_nr)
2781 ALLOCATE (efield%envelop_r_vars(n + 1))
2782 !Store the timestep of the list in the first entry of the r_vars
2783 CALL section_vals_val_get(tmp_section, "TIMESTEP", r_val=efield%envelop_r_vars(1))
2784 !Read the file
2785 DO j = 2, n + 1
2786 READ (unit_nr, *) efield%envelop_r_vars(j)
2787 efield%envelop_r_vars(j) = cp_unit_to_cp2k(efield%envelop_r_vars(j), "volt/m")
2788 END DO
2789 CALL close_file(unit_nr)
2790 END IF
2791 END DO
2792 END SUBROUTINE read_efield_sections
2793
2794! **************************************************************************************************
2795!> \brief reads the input parameters needed real time propagation
2796!> \param dft_control ...
2797!> \param rtp_section ...
2798!> \author fschiff
2799! **************************************************************************************************
2800 SUBROUTINE read_rtp_section(dft_control, rtp_section)
2801
2802 TYPE(dft_control_type), INTENT(INOUT) :: dft_control
2803 TYPE(section_vals_type), POINTER :: rtp_section
2804
2805 INTEGER :: i, j, n_elems
2806 INTEGER, DIMENSION(:), POINTER :: tmp
2807 LOGICAL :: is_present, local_moment_possible
2808 TYPE(section_vals_type), POINTER :: proj_mo_section, subsection
2809
2810 ALLOCATE (dft_control%rtp_control)
2811 CALL section_vals_val_get(rtp_section, "MAX_ITER", &
2812 i_val=dft_control%rtp_control%max_iter)
2813 CALL section_vals_val_get(rtp_section, "MAT_EXP", &
2814 i_val=dft_control%rtp_control%mat_exp)
2815 CALL section_vals_val_get(rtp_section, "ASPC_ORDER", &
2816 i_val=dft_control%rtp_control%aspc_order)
2817 CALL section_vals_val_get(rtp_section, "EXP_ACCURACY", &
2818 r_val=dft_control%rtp_control%eps_exp)
2819 CALL section_vals_val_get(rtp_section, "RTBSE%_SECTION_PARAMETERS_", &
2820 i_val=dft_control%rtp_control%rtp_method)
2821 CALL section_vals_val_get(rtp_section, "RTBSE%RTBSE_HAMILTONIAN", &
2822 i_val=dft_control%rtp_control%rtbse_ham)
2823 CALL section_vals_val_get(rtp_section, "PROPAGATOR", &
2824 i_val=dft_control%rtp_control%propagator)
2825 CALL section_vals_val_get(rtp_section, "EPS_ITER", &
2826 r_val=dft_control%rtp_control%eps_ener)
2827 CALL section_vals_val_get(rtp_section, "INITIAL_WFN", &
2828 i_val=dft_control%rtp_control%initial_wfn)
2829 CALL section_vals_val_get(rtp_section, "HFX_BALANCE_IN_CORE", &
2830 l_val=dft_control%rtp_control%hfx_redistribute)
2831 CALL section_vals_val_get(rtp_section, "APPLY_WFN_MIX_INIT_RESTART", &
2832 l_val=dft_control%rtp_control%apply_wfn_mix_init_restart)
2833 CALL section_vals_val_get(rtp_section, "APPLY_DELTA_PULSE", &
2834 l_val=dft_control%rtp_control%apply_delta_pulse)
2835 CALL section_vals_val_get(rtp_section, "APPLY_DELTA_PULSE_MAG", &
2836 l_val=dft_control%rtp_control%apply_delta_pulse_mag)
2837 CALL section_vals_val_get(rtp_section, "VELOCITY_GAUGE", &
2838 l_val=dft_control%rtp_control%velocity_gauge)
2839 CALL section_vals_val_get(rtp_section, "VG_COM_NL", &
2840 l_val=dft_control%rtp_control%nl_gauge_transform)
2841 CALL section_vals_val_get(rtp_section, "PERIODIC", &
2842 l_val=dft_control%rtp_control%periodic)
2843 CALL section_vals_val_get(rtp_section, "DENSITY_PROPAGATION", &
2844 l_val=dft_control%rtp_control%linear_scaling)
2845 CALL section_vals_val_get(rtp_section, "MCWEENY_MAX_ITER", &
2846 i_val=dft_control%rtp_control%mcweeny_max_iter)
2847 CALL section_vals_val_get(rtp_section, "ACCURACY_REFINEMENT", &
2848 i_val=dft_control%rtp_control%acc_ref)
2849 CALL section_vals_val_get(rtp_section, "MCWEENY_EPS", &
2850 r_val=dft_control%rtp_control%mcweeny_eps)
2851 CALL section_vals_val_get(rtp_section, "DELTA_PULSE_SCALE", &
2852 r_val=dft_control%rtp_control%delta_pulse_scale)
2853 CALL section_vals_val_get(rtp_section, "DELTA_PULSE_DIRECTION", &
2854 i_vals=tmp)
2855 dft_control%rtp_control%delta_pulse_direction = tmp
2856 CALL section_vals_val_get(rtp_section, "SC_CHECK_START", &
2857 i_val=dft_control%rtp_control%sc_check_start)
2858 proj_mo_section => section_vals_get_subs_vals(rtp_section, "PRINT%PROJECTION_MO")
2859 CALL section_vals_get(proj_mo_section, explicit=is_present)
2860 IF (is_present) THEN
2861 IF (dft_control%rtp_control%linear_scaling) &
2862 CALL cp_abort(__location__, &
2863 "You have defined a time dependent projection of mos, but "// &
2864 "only the density matrix is propagated (DENSITY_PROPAGATION "// &
2865 ".TRUE.). Please either use MO-based real time DFT or do not "// &
2866 "define any PRINT%PROJECTION_MO section")
2867 dft_control%rtp_control%is_proj_mo = .true.
2868 ELSE
2869 dft_control%rtp_control%is_proj_mo = .false.
2870 END IF
2871 ! Moment trace
2872 local_moment_possible = (dft_control%rtp_control%rtp_method == rtp_method_bse) .OR. &
2873 ((.NOT. dft_control%rtp_control%periodic) .AND. dft_control%rtp_control%linear_scaling)
2874 ! TODO : Implement for other moment operators
2875 subsection => section_vals_get_subs_vals(rtp_section, "PRINT%MOMENTS")
2876 CALL section_vals_get(subsection, explicit=is_present)
2877 ! Trigger the flag
2878 dft_control%rtp_control%save_local_moments = &
2879 is_present .OR. dft_control%rtp_control%save_local_moments
2880 IF (is_present .AND. (.NOT. local_moment_possible)) THEN
2881 CALL cp_abort(__location__, "Moments trace printing only "// &
2882 "implemented in non-periodic systems in linear scaling. "// &
2883 "Please use DFT%PRINT%MOMENTS for other printing.")
2884 END IF
2885 CALL section_vals_val_get(rtp_section, "PRINT%MOMENTS%REFERENCE", &
2886 i_val=dft_control%rtp_control%moment_trace_ref_type)
2887 CALL section_vals_val_get(rtp_section, "PRINT%MOMENTS%REFERENCE_POINT", &
2888 r_vals=dft_control%rtp_control%moment_trace_user_ref_point)
2889 ! Moment Fourier transform
2890 subsection => section_vals_get_subs_vals(rtp_section, "PRINT%MOMENTS_FT")
2891 CALL section_vals_get(subsection, explicit=is_present)
2892 ! Trigger the flag
2893 dft_control%rtp_control%save_local_moments = &
2894 is_present .OR. dft_control%rtp_control%save_local_moments
2895 IF (is_present .AND. (.NOT. local_moment_possible)) THEN
2896 ! Not implemented
2897 CALL cp_abort(__location__, "Moments Fourier transform printing "// &
2898 "implemented only for non-periodic systems in linear scaling.")
2899 END IF
2900 ! General FT settings
2901 CALL section_vals_val_get(rtp_section, "FT%DAMPING", &
2902 r_val=dft_control%rtp_control%ft_damping)
2903 CALL section_vals_val_get(rtp_section, "FT%START_TIME", &
2904 r_val=dft_control%rtp_control%ft_t0)
2905 ! Padé settings
2906 subsection => section_vals_get_subs_vals(rtp_section, "FT%PADE")
2907 CALL section_vals_val_get(subsection, "_SECTION_PARAMETERS_", &
2908 l_val=dft_control%rtp_control%pade_requested)
2909 CALL section_vals_val_get(subsection, "E_MIN", &
2910 r_val=dft_control%rtp_control%pade_e_min)
2911 CALL section_vals_val_get(subsection, "E_STEP", &
2912 r_val=dft_control%rtp_control%pade_e_step)
2913 CALL section_vals_val_get(subsection, "E_MAX", &
2914 r_val=dft_control%rtp_control%pade_e_max)
2915 CALL section_vals_val_get(subsection, "FIT_E_MIN", &
2916 r_val=dft_control%rtp_control%pade_fit_e_min)
2917 CALL section_vals_val_get(subsection, "FIT_E_MAX", &
2918 r_val=dft_control%rtp_control%pade_fit_e_max)
2919 ! If default settings used for fit_e_min/max, rewrite with appropriate values
2920 IF (dft_control%rtp_control%pade_fit_e_min < 0) THEN
2921 dft_control%rtp_control%pade_fit_e_min = dft_control%rtp_control%pade_e_min
2922 END IF
2923 IF (dft_control%rtp_control%pade_fit_e_max < 0) THEN
2924 dft_control%rtp_control%pade_fit_e_max = dft_control%rtp_control%pade_e_max
2925 END IF
2926 ! Polarizability settings
2927 subsection => section_vals_get_subs_vals(rtp_section, "PRINT%POLARIZABILITY")
2928 CALL section_vals_get(subsection, explicit=is_present)
2929 ! Trigger the flag
2930 dft_control%rtp_control%save_local_moments = &
2931 is_present .OR. dft_control%rtp_control%save_local_moments
2932 IF (is_present .AND. (.NOT. local_moment_possible)) THEN
2933 ! Not implemented
2934 CALL cp_abort(__location__, "Polarizability printing "// &
2935 "implemented only for non-periodic systems.")
2936 END IF
2937 CALL section_vals_val_get(subsection, "ELEMENT", explicit=is_present, n_rep_val=n_elems)
2938 NULLIFY (dft_control%rtp_control%print_pol_elements)
2939 IF (is_present) THEN
2940 ! Explicit list of elements
2941 ! Allocate the array
2942 ALLOCATE (dft_control%rtp_control%print_pol_elements(n_elems, 2))
2943 DO i = 1, n_elems
2944 CALL section_vals_val_get(subsection, "ELEMENT", i_vals=tmp, i_rep_val=i)
2945 dft_control%rtp_control%print_pol_elements(i, :) = tmp(:)
2946 END DO
2947 ! Do basic sanity checks for pol_element
2948 DO i = 1, n_elems
2949 DO j = 1, 2
2950 IF (dft_control%rtp_control%print_pol_elements(i, j) > 3 .OR. &
2951 dft_control%rtp_control%print_pol_elements(i, j) < 1) &
2952 cpabort("Polarisation tensor element not 1,2 or 3 in at least one index")
2953 END DO
2954 END DO
2955 END IF
2956
2957 ! Finally, allow printing of FT observables also in the case when they are not explicitly
2958 ! required, but they are available, i.e. non-periodic linear scaling calculation
2959 dft_control%rtp_control%save_local_moments = &
2960 dft_control%rtp_control%save_local_moments .OR. &
2961 ((.NOT. dft_control%rtp_control%periodic) .AND. dft_control%rtp_control%linear_scaling)
2962
2963 END SUBROUTINE read_rtp_section
2964! **************************************************************************************************
2965!> \brief Tries to guess the elements of polarization to print
2966!> \param dftc DFT parameters
2967!> \param elems 2D array, where the guessed element indeces are stored
2968!> \date 11.2025
2969!> \author Stepan Marek
2970! **************************************************************************************************
2971 SUBROUTINE guess_pol_elements(dftc, elems)
2972 TYPE(dft_control_type) :: dftc
2973 INTEGER, DIMENSION(:, :), POINTER :: elems
2974
2975 INTEGER :: i, i_nonzero, n_nonzero
2976 LOGICAL :: pol_vector_known
2977 REAL(kind=dp), DIMENSION(3) :: pol_vector
2978
2979 pol_vector_known = .false.
2980
2981 ! TODO : More relevant elements for magnetic pulse?
2982 IF (dftc%rtp_control%apply_delta_pulse .OR. dftc%rtp_control%apply_delta_pulse_mag) THEN
2983 pol_vector(:) = real(dftc%rtp_control%delta_pulse_direction(:), kind=dp)
2984 ELSE
2985 ! Maybe RT field is applied?
2986 pol_vector(:) = dftc%efield_fields(1)%efield%polarisation(:)
2987 END IF
2988 IF (dot_product(pol_vector, pol_vector) > 0.0_dp) pol_vector_known = .true.
2989
2990 IF (.NOT. pol_vector_known) THEN
2991 cpabort("Cannot guess polarization elements - please specify!")
2992 ELSE
2993 ! Check whether just one element is non-zero
2994 n_nonzero = 0
2995 DO i = 1, 3
2996 IF (pol_vector(i) /= 0.0_dp) THEN
2997 n_nonzero = n_nonzero + 1
2998 i_nonzero = i
2999 END IF
3000 END DO
3001 IF (n_nonzero > 1) THEN
3002 CALL cp_abort(__location__, &
3003 "More than one non-zero field elements - "// &
3004 "cannot guess polarizability elements - please specify!")
3005 ELSE IF (n_nonzero == 0) THEN
3006 CALL cp_abort(__location__, &
3007 "No non-zero field elements - "// &
3008 "cannot guess polarizability elements - please specify!")
3009 ELSE
3010 ! Clear guess can be made
3011 NULLIFY (elems)
3012 ALLOCATE (elems(3, 2))
3013 DO i = 1, 3
3014 elems(i, 1) = i
3015 elems(i, 2) = i_nonzero
3016 END DO
3017 END IF
3018 END IF
3019 END SUBROUTINE guess_pol_elements
3020
3021! **************************************************************************************************
3022!> \brief Parses the BLOCK_LIST keywords from the ADMM section
3023!> \param admm_control ...
3024!> \param dft_section ...
3025! **************************************************************************************************
3026 SUBROUTINE read_admm_block_list(admm_control, dft_section)
3027 TYPE(admm_control_type), POINTER :: admm_control
3028 TYPE(section_vals_type), POINTER :: dft_section
3029
3030 INTEGER :: irep, list_size, n_rep
3031 INTEGER, DIMENSION(:), POINTER :: tmplist
3032
3033 NULLIFY (tmplist)
3034
3035 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%BLOCK_LIST", &
3036 n_rep_val=n_rep)
3037
3038 ALLOCATE (admm_control%blocks(n_rep))
3039
3040 DO irep = 1, n_rep
3041 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%BLOCK_LIST", &
3042 i_rep_val=irep, i_vals=tmplist)
3043 list_size = SIZE(tmplist)
3044 ALLOCATE (admm_control%blocks(irep)%list(list_size))
3045 admm_control%blocks(irep)%list(:) = tmplist(:)
3046 END DO
3047
3048 END SUBROUTINE read_admm_block_list
3049
3050! **************************************************************************************************
3051!> \brief ...
3052!> \param dft_control ...
3053!> \param hairy_probes_section ...
3054!> \param
3055!> \param
3056! **************************************************************************************************
3057 SUBROUTINE read_hairy_probes_sections(dft_control, hairy_probes_section)
3058 TYPE(dft_control_type), POINTER :: dft_control
3059 TYPE(section_vals_type), POINTER :: hairy_probes_section
3060
3061 INTEGER :: i, j, jj, kk, n_rep
3062 INTEGER, DIMENSION(:), POINTER :: tmplist
3063
3064 DO i = 1, SIZE(dft_control%probe)
3065 NULLIFY (dft_control%probe(i)%atom_ids)
3066
3067 CALL section_vals_val_get(hairy_probes_section, "ATOM_IDS", i_rep_section=i, n_rep_val=n_rep)
3068 jj = 0
3069 DO kk = 1, n_rep
3070 CALL section_vals_val_get(hairy_probes_section, "ATOM_IDS", i_rep_section=i, i_rep_val=kk, i_vals=tmplist)
3071 jj = jj + SIZE(tmplist)
3072 END DO
3073
3074 dft_control%probe(i)%natoms = jj
3075 IF (dft_control%probe(i)%natoms < 1) &
3076 cpabort("Need at least 1 atom to use hair probes formalism")
3077 ALLOCATE (dft_control%probe(i)%atom_ids(dft_control%probe(i)%natoms))
3078
3079 jj = 0
3080 DO kk = 1, n_rep
3081 CALL section_vals_val_get(hairy_probes_section, "ATOM_IDS", i_rep_section=i, i_rep_val=kk, i_vals=tmplist)
3082 DO j = 1, SIZE(tmplist)
3083 jj = jj + 1
3084 dft_control%probe(i)%atom_ids(jj) = tmplist(j)
3085 END DO
3086 END DO
3087
3088 CALL section_vals_val_get(hairy_probes_section, "MU", i_rep_section=i, r_val=dft_control%probe(i)%mu)
3089
3090 CALL section_vals_val_get(hairy_probes_section, "T", i_rep_section=i, r_val=dft_control%probe(i)%T)
3091
3092 CALL section_vals_val_get(hairy_probes_section, "ALPHA", i_rep_section=i, r_val=dft_control%probe(i)%alpha)
3093
3094 CALL section_vals_val_get(hairy_probes_section, "eps_hp", i_rep_section=i, r_val=dft_control%probe(i)%eps_hp)
3095 END DO
3096
3097 END SUBROUTINE read_hairy_probes_sections
3098! **************************************************************************************************
3099
3100END MODULE cp_control_utils
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public vandevondele2005b
integer, save, public umari2002
integer, save, public yin2017
integer, save, public stewart2007
integer, save, public caldeweyher2020
integer, save, public stengel2009
integer, save, public vandevondele2005a
integer, save, public caldeweyher2017
integer, save, public grimme2017
integer, save, public lippert1999
integer, save, public dewar1977
integer, save, public elstner1998
integer, save, public vanvoorhis2015
integer, save, public repasky2002
integer, save, public hu2007
integer, save, public andreussi2012
integer, save, public asgeirsson2017
integer, save, public rocha2006
integer, save, public lippert1997
integer, save, public fattebert2002
integer, save, public thiel1992
integer, save, public pracht2019
integer, save, public porezag1995
integer, save, public bannwarth2019
integer, save, public souza2002
integer, save, public schenter2008
integer, save, public krack2000
integer, save, public dewar1985
integer, save, public stewart1989
integer, save, public seifert1996
integer, save, public zhechkov2005
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dft_control_create(dft_control)
allocates and perform a very basic initialization
subroutine, public expot_control_create(expot_control)
...
subroutine, public maxwell_control_create(maxwell_control)
...
subroutine, public ddapc_control_create(ddapc_restraint_control)
create the ddapc_restraint_type
subroutine, public admm_control_create(admm_control)
...
Utilities to set up the control types.
subroutine, public write_qs_control(qs_control, dft_section)
Purpose: Write the QS control parameters to the output unit.
subroutine, public read_rixs_control(rixs_control, rixs_section, qs_control)
Reads the input and stores in the rixs_control_type.
subroutine, public read_tddfpt2_control(t_control, t_section, qs_control)
Read TDDFPT-related input parameters.
subroutine, public read_dft_control(dft_control, dft_section)
...
subroutine, public read_qs_section(qs_control, qs_section)
...
subroutine, public write_admm_control(admm_control, dft_section)
Write the ADMM control parameters to the output unit.
subroutine, public write_dft_control(dft_control, dft_section)
Write the DFT control parameters to the output unit.
subroutine, public read_ddapc_section(qs_control, qs_section, ddapc_restraint_section)
reads the input parameters needed for ddapc.
subroutine, public read_mgrid_section(qs_control, dft_section)
...
Utility routines to open and close files. Tracking of preconnections.
Definition cp_files.F:16
subroutine, public open_file(file_name, file_status, file_form, file_action, file_position, file_pad, unit_number, debug, skip_get_unit_number, file_access)
Opens the requested file using a free unit number.
Definition cp_files.F:311
subroutine, public close_file(unit_number, file_status, keep_preconnection)
Close an open file given by its logical unit number. Optionally, keep the file and unit preconnected.
Definition cp_files.F:122
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_read_line(parser, nline, at_end)
Read the next line from a logical unit "unit" (I/O node only). Skip (nline-1) lines and skip also all...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_reset(parser)
Resets the parser: rewinding the unit and re-initializing all parser structures.
subroutine, public parser_release(parser)
releases the parser
subroutine, public parser_create(parser, file_name, unit_nr, para_env, end_section_label, separator_chars, comment_char, continuation_char, quote_char, section_char, parse_white_lines, initial_variables, apply_preprocessing)
Start a parser run. Initial variables allow to @SET stuff before opening the file.
unit conversion facility
Definition cp_units.F:30
real(kind=dp) function, public cp_unit_from_cp2k(value, unit_str, defaults, power)
converts from the internal cp2k units to the given unit
Definition cp_units.F:1178
real(kind=dp) function, public cp_unit_to_cp2k(value, unit_str, defaults, power)
converts to the internal cp2k units to the given unit
Definition cp_units.F:1149
Input definition and setup for EEQ model.
Definition eeq_input.F:12
subroutine, public read_eeq_param(eeq_section, eeq_sparam)
...
Definition eeq_input.F:110
subroutine, public read_gp_section(nonbonded, section, start)
Reads the GENPOT - generic potential section.
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public sic_list_unpaired
integer, parameter, public sic_mauri_spz
integer, parameter, public do_method_ofgpw
integer, parameter, public do_admm_purify_mo_no_diag
integer, parameter, public do_se_lr_ewald_gks
integer, parameter, public do_admm_aux_exch_func_opt_libxc
integer, parameter, public do_s2_restraint
integer, parameter, public do_admm_purify_none
integer, parameter, public do_method_rigpw
integer, parameter, public do_s2_constraint
integer, parameter, public use_mom_ref_user
integer, parameter, public do_method_gpw
integer, parameter, public gapw_1c_large
integer, parameter, public do_method_pdg
integer, parameter, public do_admm_purify_none_dm
integer, parameter, public do_method_pnnl
integer, parameter, public do_ddapc_constraint
integer, parameter, public do_se_lr_none
integer, parameter, public do_admm_purify_mcweeny
integer, parameter, public do_se_lr_ewald
integer, parameter, public do_admm_blocking_purify_full
integer, parameter, public ramp_env
integer, parameter, public do_se_is_kdso_d
integer, parameter, public gapw_1c_medium
integer, parameter, public do_admm_aux_exch_func_sx_libxc
integer, parameter, public admm2_type
integer, parameter, public xtb_vdw_type_d3
integer, parameter, public sic_list_all
integer, parameter, public constant_env
integer, parameter, public sic_eo
integer, parameter, public sccs_derivative_cd5
integer, parameter, public do_admm_aux_exch_func_bee
integer, parameter, public no_admm_type
integer, parameter, public do_admm_blocked_projection
integer, parameter, public do_admm_basis_projection
integer, parameter, public do_method_rm1
integer, parameter, public do_admm_aux_exch_func_default_libxc
integer, parameter, public do_admm_aux_exch_func_opt
integer, parameter, public gapw_1c_small
integer, parameter, public do_admm_aux_exch_func_none
integer, parameter, public do_admm_purify_cauchy_subspace
integer, parameter, public do_method_pm3
integer, parameter, public do_admm_aux_exch_func_bee_libxc
integer, parameter, public admm1_type
integer, parameter, public do_admm_aux_exch_func_pbex_libxc
integer, parameter, public do_method_mndo
integer, parameter, public gapw_1c_orb
integer, parameter, public do_admm_aux_exch_func_default
integer, parameter, public xtb_vdw_type_d4
integer, parameter, public do_pwgrid_ns_fullspace
integer, parameter, public gapw_1c_very_large
integer, parameter, public rtp_method_bse
integer, parameter, public do_method_gapw
integer, parameter, public admms_type
integer, parameter, public do_admm_charge_constrained_projection
integer, parameter, public do_admm_purify_cauchy
integer, parameter, public sccs_fattebert_gygi
integer, parameter, public gaussian_env
integer, parameter, public sccs_derivative_cd7
integer, parameter, public do_method_mndod
integer, parameter, public xtb_vdw_type_none
integer, parameter, public do_method_am1
integer, parameter, public do_method_dftb
integer, parameter, public tddfpt_dipole_length
integer, parameter, public sccs_derivative_fft
integer, parameter, public tddfpt_kernel_stda
integer, parameter, public do_pwgrid_spherical
integer, parameter, public do_se_lr_ewald_r3
integer, parameter, public do_se_is_kdso
integer, parameter, public do_admm_purify_mo_diag
integer, parameter, public do_method_lrigpw
integer, parameter, public sic_mauri_us
integer, parameter, public sic_none
integer, parameter, public do_se_is_slater
integer, parameter, public custom_env
integer, parameter, public do_method_xtb
integer, parameter, public do_ddapc_restraint
integer, parameter, public do_pwgrid_ns_halfspace
integer, parameter, public sccs_derivative_cd3
integer, parameter, public do_method_pm6fm
integer, parameter, public admmq_type
integer, parameter, public sccs_andreussi
integer, parameter, public sic_ad
integer, parameter, public do_admm_exch_scaling_none
integer, parameter, public admmp_type
integer, parameter, public do_method_gapw_xc
integer, parameter, public do_admm_exch_scaling_merlot
integer, parameter, public real_time_propagation
integer, parameter, public numerical
integer, parameter, public do_method_pm6
integer, parameter, public do_admm_aux_exch_func_pbex
integer, parameter, public slater
checks the input and perform some automatic "magic" on it
subroutine, public xc_functionals_expand(functionals, xc_section)
expand a shortcutted functional section
function that build the dft section of the input
subroutine, public create_dft_section(section)
creates the dft section
represents an enumeration, i.e. a mapping between integers and strings
character(len=default_string_length) function, public enum_i2c(enum, i)
maps an integer to a string
represents keywords in an input
subroutine, public keyword_get(keyword, names, usage, description, type_of_var, n_var, default_value, lone_keyword_value, repeats, enum, citations)
...
objects that represent the structure of input sections and the data contained in an input section
subroutine, public section_vals_val_set(section_vals, keyword_name, i_rep_section, i_rep_val, val, l_val, i_val, r_val, c_val, l_vals_ptr, i_vals_ptr, r_vals_ptr, c_vals_ptr)
sets the requested value
integer function, public section_get_ival(section_vals, keyword_name)
...
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
recursive type(keyword_type) function, pointer, public section_get_keyword(section, keyword_name)
returns the requested keyword
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
integer, parameter, public default_path_length
Definition kinds.F:58
Definition of mathematical constants and functions.
real(kind=dp), parameter, public fourpi
subroutine, public pair_potential_reallocate(p, lb1_new, ub1_new, lj, lj_charmm, williams, goodwin, eam, nequip, bmhft, bmhftd, ipbv, buck4r, buckmo, gp, tersoff, siepmann, gal, gal21, tab, deepmd, ace)
Cleans the potential parameter type.
Periodic Table related data definitions.
subroutine, public get_ptable_info(symbol, number, amass, ielement, covalent_radius, metallic_radius, vdw_radius, found)
Pass information about the kind given the element symbol.
Utility subroutines for CDFT calculations.
subroutine, public read_cdft_control_section(qs_control, cdft_control_section)
reads the input parameters needed for CDFT with OT
Input control types for NEGF/SMEAGOL transport calculations.
subroutine, public read_smeagol_control(smeagol_control, smeagol_section)
Read SMEAGOL-related input parameters.
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
All kind of helpful little routines.
Definition util.F:14
Define XAS TDP control type and associated create, release, etc subroutines, as well as XAS TDP envir...
subroutine, public read_xas_tdp_control(xas_tdp_control, xas_tdp_section)
Reads the inputs and stores in xas_tdp_control_type.
input constants for xc
integer, parameter, public xc_deriv_collocate
Writes information on XC functionals to output.
subroutine, public xc_write(iounit, xc_section, lsd)
...
Exchange and Correlation functional calculations.
Definition xc.F:17
logical function, public xc_uses_norm_drho(xc_fun_section, lsd)
...
Definition xc.F:111
logical function, public xc_uses_kinetic_energy_density(xc_fun_section, lsd)
...
Definition xc.F:91
type of a logger, at the moment it contains just a print level starting at which level it should be l...
represent a keyword in the input
represent a section of the input file