(git:936074a)
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-2025 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 td_section => section_vals_get_subs_vals(rixs_section, "TDDFPT")
736 CALL read_tddfpt2_control(rixs_control%tddfpt2_control, td_section, qs_control)
737
738 xas_section => section_vals_get_subs_vals(rixs_section, "XAS_TDP")
739 CALL read_xas_tdp_control(rixs_control%xas_tdp_control, xas_section)
740
741 END SUBROUTINE read_rixs_control
742
743! **************************************************************************************************
744!> \brief ...
745!> \param qs_control ...
746!> \param dft_section ...
747! **************************************************************************************************
748 SUBROUTINE read_mgrid_section(qs_control, dft_section)
749
750 TYPE(qs_control_type), INTENT(INOUT) :: qs_control
751 TYPE(section_vals_type), POINTER :: dft_section
752
753 CHARACTER(len=*), PARAMETER :: routinen = 'read_mgrid_section'
754
755 INTEGER :: handle, igrid_level, ngrid_level
756 LOGICAL :: explicit, multigrid_set
757 REAL(dp) :: cutoff
758 REAL(dp), DIMENSION(:), POINTER :: cutofflist
759 TYPE(section_vals_type), POINTER :: mgrid_section
760
761 CALL timeset(routinen, handle)
762
763 NULLIFY (mgrid_section, cutofflist)
764 mgrid_section => section_vals_get_subs_vals(dft_section, "MGRID")
765
766 CALL section_vals_val_get(mgrid_section, "NGRIDS", i_val=ngrid_level)
767 CALL section_vals_val_get(mgrid_section, "MULTIGRID_SET", l_val=multigrid_set)
768 CALL section_vals_val_get(mgrid_section, "CUTOFF", r_val=cutoff)
769 CALL section_vals_val_get(mgrid_section, "PROGRESSION_FACTOR", r_val=qs_control%progression_factor)
770 CALL section_vals_val_get(mgrid_section, "COMMENSURATE", l_val=qs_control%commensurate_mgrids)
771 CALL section_vals_val_get(mgrid_section, "REALSPACE", l_val=qs_control%realspace_mgrids)
772 CALL section_vals_val_get(mgrid_section, "REL_CUTOFF", r_val=qs_control%relative_cutoff)
773 CALL section_vals_val_get(mgrid_section, "SKIP_LOAD_BALANCE_DISTRIBUTED", &
774 l_val=qs_control%skip_load_balance_distributed)
775
776 ! For SE and DFTB possibly override with new defaults
777 IF (qs_control%semi_empirical .OR. qs_control%dftb .OR. qs_control%xtb) THEN
778 ngrid_level = 1
779 multigrid_set = .false.
780 ! Override default cutoff value unless user specified an explicit argument..
781 CALL section_vals_val_get(mgrid_section, "CUTOFF", explicit=explicit, r_val=cutoff)
782 IF (.NOT. explicit) cutoff = 1.0_dp
783 END IF
784
785 ALLOCATE (qs_control%e_cutoff(ngrid_level))
786 qs_control%cutoff = cutoff
787
788 IF (multigrid_set) THEN
789 ! Read the values from input
790 IF (qs_control%commensurate_mgrids) THEN
791 cpabort("Do not specify cutoffs for the commensurate grids (NYI)")
792 END IF
793
794 CALL section_vals_val_get(mgrid_section, "MULTIGRID_CUTOFF", r_vals=cutofflist)
795 IF (ASSOCIATED(cutofflist)) THEN
796 IF (SIZE(cutofflist, 1) /= ngrid_level) THEN
797 cpabort("Number of multi-grids requested and number of cutoff values do not match")
798 END IF
799 DO igrid_level = 1, ngrid_level
800 qs_control%e_cutoff(igrid_level) = cutofflist(igrid_level)
801 END DO
802 END IF
803 ! set cutoff to smallest value in multgrid available with >= cutoff
804 DO igrid_level = ngrid_level, 1, -1
805 IF (qs_control%cutoff <= qs_control%e_cutoff(igrid_level)) THEN
806 qs_control%cutoff = qs_control%e_cutoff(igrid_level)
807 EXIT
808 END IF
809 ! set largest grid value to cutoff
810 IF (igrid_level == 1) THEN
811 qs_control%cutoff = qs_control%e_cutoff(1)
812 END IF
813 END DO
814 ELSE
815 IF (qs_control%commensurate_mgrids) qs_control%progression_factor = 4.0_dp
816 qs_control%e_cutoff(1) = qs_control%cutoff
817 DO igrid_level = 2, ngrid_level
818 qs_control%e_cutoff(igrid_level) = qs_control%e_cutoff(igrid_level - 1)/ &
819 qs_control%progression_factor
820 END DO
821 END IF
822 ! check that multigrids are ordered
823 DO igrid_level = 2, ngrid_level
824 IF (qs_control%e_cutoff(igrid_level) > qs_control%e_cutoff(igrid_level - 1)) THEN
825 cpabort("The cutoff values for the multi-grids are not ordered from large to small")
826 ELSE IF (qs_control%e_cutoff(igrid_level) == qs_control%e_cutoff(igrid_level - 1)) THEN
827 cpabort("The same cutoff value was specified for two multi-grids")
828 END IF
829 END DO
830 CALL timestop(handle)
831 END SUBROUTINE read_mgrid_section
832
833! **************************************************************************************************
834!> \brief ...
835!> \param qs_control ...
836!> \param qs_section ...
837! **************************************************************************************************
838 SUBROUTINE read_qs_section(qs_control, qs_section)
839
840 TYPE(qs_control_type), INTENT(INOUT) :: qs_control
841 TYPE(section_vals_type), POINTER :: qs_section
842
843 CHARACTER(len=*), PARAMETER :: routinen = 'read_qs_section'
844
845 CHARACTER(LEN=default_string_length) :: cval
846 CHARACTER(LEN=default_string_length), &
847 DIMENSION(:), POINTER :: clist
848 INTEGER :: handle, itmp, j, jj, k, n_rep, n_var, &
849 ngauss, ngp, nrep
850 INTEGER, DIMENSION(:), POINTER :: tmplist
851 LOGICAL :: explicit, was_present
852 REAL(dp) :: tmp, tmpsqrt, value
853 REAL(dp), POINTER :: scal(:)
854 TYPE(section_vals_type), POINTER :: cdft_control_section, ddapc_restraint_section, &
855 dftb_parameter, dftb_section, eeq_section, genpot_section, lri_optbas_section, &
856 mull_section, nonbonded_section, s2_restraint_section, se_section, xtb_parameter, &
857 xtb_section, xtb_tblite
858
859 CALL timeset(routinen, handle)
860
861 was_present = .false.
862 NULLIFY (mull_section, ddapc_restraint_section, s2_restraint_section, &
863 se_section, dftb_section, xtb_section, dftb_parameter, xtb_parameter, lri_optbas_section, &
864 cdft_control_section, genpot_section, eeq_section)
865
866 mull_section => section_vals_get_subs_vals(qs_section, "MULLIKEN_RESTRAINT")
867 ddapc_restraint_section => section_vals_get_subs_vals(qs_section, "DDAPC_RESTRAINT")
868 s2_restraint_section => section_vals_get_subs_vals(qs_section, "S2_RESTRAINT")
869 se_section => section_vals_get_subs_vals(qs_section, "SE")
870 dftb_section => section_vals_get_subs_vals(qs_section, "DFTB")
871 xtb_section => section_vals_get_subs_vals(qs_section, "xTB")
872 dftb_parameter => section_vals_get_subs_vals(dftb_section, "PARAMETER")
873 xtb_parameter => section_vals_get_subs_vals(xtb_section, "PARAMETER")
874 eeq_section => section_vals_get_subs_vals(xtb_section, "EEQ")
875 lri_optbas_section => section_vals_get_subs_vals(qs_section, "OPTIMIZE_LRI_BASIS")
876 cdft_control_section => section_vals_get_subs_vals(qs_section, "CDFT")
877 nonbonded_section => section_vals_get_subs_vals(xtb_section, "NONBONDED")
878 genpot_section => section_vals_get_subs_vals(nonbonded_section, "GENPOT")
879 xtb_tblite => section_vals_get_subs_vals(xtb_section, "TBLITE")
880
881 ! Setup all defaults values and overwrite input parameters
882 ! EPS_DEFAULT should set the target accuracy in the total energy (~per electron) or a closely related value
883 CALL section_vals_val_get(qs_section, "EPS_DEFAULT", r_val=value)
884 tmpsqrt = sqrt(value) ! a trick to work around a NAG 5.1 optimizer bug
885
886 ! random choice ?
887 qs_control%eps_core_charge = value/100.0_dp
888 ! correct if all Gaussians would have the same radius (overlap will be smaller than eps_pgf_orb**2).
889 ! Can be significantly in error if not... requires fully new screening/pairlist procedures
890 qs_control%eps_pgf_orb = tmpsqrt
891 qs_control%eps_kg_orb = qs_control%eps_pgf_orb
892 ! consistent since also a kind of overlap
893 qs_control%eps_ppnl = qs_control%eps_pgf_orb/100.0_dp
894 ! accuracy is basically set by the overlap, this sets an empirical shift
895 qs_control%eps_ppl = 1.0e-2_dp
896 !
897 qs_control%gapw_control%eps_cpc = value
898 ! expexted error in the density
899 qs_control%eps_rho_gspace = value
900 qs_control%eps_rho_rspace = value
901 ! error in the gradient, can be the sqrt of the error in the energy, ignored if map_consistent
902 qs_control%eps_gvg_rspace = tmpsqrt
903 !
904 CALL section_vals_val_get(qs_section, "EPS_CORE_CHARGE", n_rep_val=n_rep)
905 IF (n_rep /= 0) THEN
906 CALL section_vals_val_get(qs_section, "EPS_CORE_CHARGE", r_val=qs_control%eps_core_charge)
907 END IF
908 CALL section_vals_val_get(qs_section, "EPS_GVG_RSPACE", n_rep_val=n_rep)
909 IF (n_rep /= 0) THEN
910 CALL section_vals_val_get(qs_section, "EPS_GVG_RSPACE", r_val=qs_control%eps_gvg_rspace)
911 END IF
912 CALL section_vals_val_get(qs_section, "EPS_PGF_ORB", n_rep_val=n_rep)
913 IF (n_rep /= 0) THEN
914 CALL section_vals_val_get(qs_section, "EPS_PGF_ORB", r_val=qs_control%eps_pgf_orb)
915 END IF
916 CALL section_vals_val_get(qs_section, "EPS_KG_ORB", n_rep_val=n_rep)
917 IF (n_rep /= 0) THEN
918 CALL section_vals_val_get(qs_section, "EPS_KG_ORB", r_val=tmp)
919 qs_control%eps_kg_orb = sqrt(tmp)
920 END IF
921 CALL section_vals_val_get(qs_section, "EPS_PPL", n_rep_val=n_rep)
922 IF (n_rep /= 0) THEN
923 CALL section_vals_val_get(qs_section, "EPS_PPL", r_val=qs_control%eps_ppl)
924 END IF
925 CALL section_vals_val_get(qs_section, "EPS_PPNL", n_rep_val=n_rep)
926 IF (n_rep /= 0) THEN
927 CALL section_vals_val_get(qs_section, "EPS_PPNL", r_val=qs_control%eps_ppnl)
928 END IF
929 CALL section_vals_val_get(qs_section, "EPS_RHO", n_rep_val=n_rep)
930 IF (n_rep /= 0) THEN
931 CALL section_vals_val_get(qs_section, "EPS_RHO", r_val=qs_control%eps_rho_gspace)
932 qs_control%eps_rho_rspace = qs_control%eps_rho_gspace
933 END IF
934 CALL section_vals_val_get(qs_section, "EPS_RHO_RSPACE", n_rep_val=n_rep)
935 IF (n_rep /= 0) THEN
936 CALL section_vals_val_get(qs_section, "EPS_RHO_RSPACE", r_val=qs_control%eps_rho_rspace)
937 END IF
938 CALL section_vals_val_get(qs_section, "EPS_RHO_GSPACE", n_rep_val=n_rep)
939 IF (n_rep /= 0) THEN
940 CALL section_vals_val_get(qs_section, "EPS_RHO_GSPACE", r_val=qs_control%eps_rho_gspace)
941 END IF
942 CALL section_vals_val_get(qs_section, "EPS_FILTER_MATRIX", n_rep_val=n_rep)
943 IF (n_rep /= 0) THEN
944 CALL section_vals_val_get(qs_section, "EPS_FILTER_MATRIX", r_val=qs_control%eps_filter_matrix)
945 END IF
946 CALL section_vals_val_get(qs_section, "EPS_CPC", n_rep_val=n_rep)
947 IF (n_rep /= 0) THEN
948 CALL section_vals_val_get(qs_section, "EPS_CPC", r_val=qs_control%gapw_control%eps_cpc)
949 END IF
950
951 CALL section_vals_val_get(qs_section, "EPSFIT", r_val=qs_control%gapw_control%eps_fit)
952 CALL section_vals_val_get(qs_section, "EPSISO", r_val=qs_control%gapw_control%eps_iso)
953 CALL section_vals_val_get(qs_section, "EPSSVD", r_val=qs_control%gapw_control%eps_svd)
954 CALL section_vals_val_get(qs_section, "EPSRHO0", r_val=qs_control%gapw_control%eps_Vrho0)
955 CALL section_vals_val_get(qs_section, "ALPHA0_HARD", r_val=qs_control%gapw_control%alpha0_hard)
956 qs_control%gapw_control%alpha0_hard_from_input = .false.
957 IF (qs_control%gapw_control%alpha0_hard /= 0.0_dp) qs_control%gapw_control%alpha0_hard_from_input = .true.
958 CALL section_vals_val_get(qs_section, "FORCE_PAW", l_val=qs_control%gapw_control%force_paw)
959 CALL section_vals_val_get(qs_section, "MAX_RAD_LOCAL", r_val=qs_control%gapw_control%max_rad_local)
960
961 CALL section_vals_val_get(qs_section, "MIN_PAIR_LIST_RADIUS", r_val=qs_control%pairlist_radius)
962
963 CALL section_vals_val_get(qs_section, "LS_SCF", l_val=qs_control%do_ls_scf)
964 CALL section_vals_val_get(qs_section, "ALMO_SCF", l_val=qs_control%do_almo_scf)
965 CALL section_vals_val_get(qs_section, "KG_METHOD", l_val=qs_control%do_kg)
966
967 ! Logicals
968 CALL section_vals_val_get(qs_section, "REF_EMBED_SUBSYS", l_val=qs_control%ref_embed_subsys)
969 CALL section_vals_val_get(qs_section, "CLUSTER_EMBED_SUBSYS", l_val=qs_control%cluster_embed_subsys)
970 CALL section_vals_val_get(qs_section, "HIGH_LEVEL_EMBED_SUBSYS", l_val=qs_control%high_level_embed_subsys)
971 CALL section_vals_val_get(qs_section, "DFET_EMBEDDED", l_val=qs_control%dfet_embedded)
972 CALL section_vals_val_get(qs_section, "DMFET_EMBEDDED", l_val=qs_control%dmfet_embedded)
973
974 ! Integers gapw
975 CALL section_vals_val_get(qs_section, "LMAXN1", i_val=qs_control%gapw_control%lmax_sphere)
976 CALL section_vals_val_get(qs_section, "LMAXN0", i_val=qs_control%gapw_control%lmax_rho0)
977 CALL section_vals_val_get(qs_section, "LADDN0", i_val=qs_control%gapw_control%ladd_rho0)
978 CALL section_vals_val_get(qs_section, "QUADRATURE", i_val=qs_control%gapw_control%quadrature)
979 ! GAPW 1c basis
980 CALL section_vals_val_get(qs_section, "GAPW_1C_BASIS", i_val=qs_control%gapw_control%basis_1c)
981 IF (qs_control%gapw_control%basis_1c /= gapw_1c_orb) THEN
982 qs_control%gapw_control%eps_svd = max(qs_control%gapw_control%eps_svd, 1.e-12_dp)
983 END IF
984
985 ! Integers grids
986 CALL section_vals_val_get(qs_section, "PW_GRID", i_val=itmp)
987 SELECT CASE (itmp)
989 qs_control%pw_grid_opt%spherical = .true.
990 qs_control%pw_grid_opt%fullspace = .false.
992 qs_control%pw_grid_opt%spherical = .false.
993 qs_control%pw_grid_opt%fullspace = .true.
995 qs_control%pw_grid_opt%spherical = .false.
996 qs_control%pw_grid_opt%fullspace = .false.
997 END SELECT
998
999 ! Method for PPL calculation
1000 CALL section_vals_val_get(qs_section, "CORE_PPL", i_val=itmp)
1001 qs_control%do_ppl_method = itmp
1002
1003 CALL section_vals_val_get(qs_section, "PW_GRID_LAYOUT", i_vals=tmplist)
1004 qs_control%pw_grid_opt%distribution_layout = tmplist
1005 CALL section_vals_val_get(qs_section, "PW_GRID_BLOCKED", i_val=qs_control%pw_grid_opt%blocked)
1006
1007 !Integers extrapolation
1008 CALL section_vals_val_get(qs_section, "EXTRAPOLATION", i_val=qs_control%wf_interpolation_method_nr)
1009 CALL section_vals_val_get(qs_section, "EXTRAPOLATION_ORDER", i_val=qs_control%wf_extrapolation_order)
1010
1011 !Method
1012 CALL section_vals_val_get(qs_section, "METHOD", i_val=qs_control%method_id)
1013 qs_control%gapw = .false.
1014 qs_control%gapw_xc = .false.
1015 qs_control%gpw = .false.
1016 qs_control%pao = .false.
1017 qs_control%dftb = .false.
1018 qs_control%xtb = .false.
1019 qs_control%semi_empirical = .false.
1020 qs_control%ofgpw = .false.
1021 qs_control%lrigpw = .false.
1022 qs_control%rigpw = .false.
1023 SELECT CASE (qs_control%method_id)
1024 CASE (do_method_gapw)
1025 CALL cite_reference(lippert1999)
1026 CALL cite_reference(krack2000)
1027 qs_control%gapw = .true.
1028 CASE (do_method_gapw_xc)
1029 qs_control%gapw_xc = .true.
1030 CASE (do_method_gpw)
1031 CALL cite_reference(lippert1997)
1032 CALL cite_reference(vandevondele2005a)
1033 qs_control%gpw = .true.
1034 CASE (do_method_ofgpw)
1035 qs_control%ofgpw = .true.
1036 CASE (do_method_lrigpw)
1037 qs_control%lrigpw = .true.
1038 CASE (do_method_rigpw)
1039 qs_control%rigpw = .true.
1040 CASE (do_method_dftb)
1041 qs_control%dftb = .true.
1042 CALL cite_reference(porezag1995)
1043 CALL cite_reference(seifert1996)
1044 CASE (do_method_xtb)
1045 qs_control%xtb = .true.
1046 CALL cite_reference(grimme2017)
1047 CALL cite_reference(pracht2019)
1048 CASE (do_method_mndo)
1049 CALL cite_reference(dewar1977)
1050 qs_control%semi_empirical = .true.
1051 CASE (do_method_am1)
1052 CALL cite_reference(dewar1985)
1053 qs_control%semi_empirical = .true.
1054 CASE (do_method_pm3)
1055 CALL cite_reference(stewart1989)
1056 qs_control%semi_empirical = .true.
1057 CASE (do_method_pnnl)
1058 CALL cite_reference(schenter2008)
1059 qs_control%semi_empirical = .true.
1060 CASE (do_method_pm6)
1061 CALL cite_reference(stewart2007)
1062 qs_control%semi_empirical = .true.
1063 CASE (do_method_pm6fm)
1064 CALL cite_reference(vanvoorhis2015)
1065 qs_control%semi_empirical = .true.
1066 CASE (do_method_pdg)
1067 CALL cite_reference(repasky2002)
1068 qs_control%semi_empirical = .true.
1069 CASE (do_method_rm1)
1070 CALL cite_reference(rocha2006)
1071 qs_control%semi_empirical = .true.
1072 CASE (do_method_mndod)
1073 CALL cite_reference(dewar1977)
1074 CALL cite_reference(thiel1992)
1075 qs_control%semi_empirical = .true.
1076 END SELECT
1077
1078 CALL section_vals_get(mull_section, explicit=qs_control%mulliken_restraint)
1079
1080 IF (qs_control%mulliken_restraint) THEN
1081 CALL section_vals_val_get(mull_section, "STRENGTH", r_val=qs_control%mulliken_restraint_control%strength)
1082 CALL section_vals_val_get(mull_section, "TARGET", r_val=qs_control%mulliken_restraint_control%target)
1083 CALL section_vals_val_get(mull_section, "ATOMS", n_rep_val=n_rep)
1084 jj = 0
1085 DO k = 1, n_rep
1086 CALL section_vals_val_get(mull_section, "ATOMS", i_rep_val=k, i_vals=tmplist)
1087 jj = jj + SIZE(tmplist)
1088 END DO
1089 qs_control%mulliken_restraint_control%natoms = jj
1090 IF (qs_control%mulliken_restraint_control%natoms < 1) &
1091 cpabort("Need at least 1 atom to use mulliken constraints")
1092 ALLOCATE (qs_control%mulliken_restraint_control%atoms(qs_control%mulliken_restraint_control%natoms))
1093 jj = 0
1094 DO k = 1, n_rep
1095 CALL section_vals_val_get(mull_section, "ATOMS", i_rep_val=k, i_vals=tmplist)
1096 DO j = 1, SIZE(tmplist)
1097 jj = jj + 1
1098 qs_control%mulliken_restraint_control%atoms(jj) = tmplist(j)
1099 END DO
1100 END DO
1101 END IF
1102 CALL section_vals_get(ddapc_restraint_section, n_repetition=nrep, explicit=qs_control%ddapc_restraint)
1103 IF (qs_control%ddapc_restraint) THEN
1104 ALLOCATE (qs_control%ddapc_restraint_control(nrep))
1105 CALL read_ddapc_section(qs_control, qs_section=qs_section)
1106 qs_control%ddapc_restraint_is_spin = .false.
1107 qs_control%ddapc_explicit_potential = .false.
1108 END IF
1109
1110 CALL section_vals_get(s2_restraint_section, explicit=qs_control%s2_restraint)
1111 IF (qs_control%s2_restraint) THEN
1112 CALL section_vals_val_get(s2_restraint_section, "STRENGTH", &
1113 r_val=qs_control%s2_restraint_control%strength)
1114 CALL section_vals_val_get(s2_restraint_section, "TARGET", &
1115 r_val=qs_control%s2_restraint_control%target)
1116 CALL section_vals_val_get(s2_restraint_section, "FUNCTIONAL_FORM", &
1117 i_val=qs_control%s2_restraint_control%functional_form)
1118 END IF
1119
1120 CALL section_vals_get(cdft_control_section, explicit=qs_control%cdft)
1121 IF (qs_control%cdft) THEN
1122 CALL read_cdft_control_section(qs_control, cdft_control_section)
1123 END IF
1124
1125 ! Semi-empirical code
1126 IF (qs_control%semi_empirical) THEN
1127 CALL section_vals_val_get(se_section, "ORTHOGONAL_BASIS", &
1128 l_val=qs_control%se_control%orthogonal_basis)
1129 CALL section_vals_val_get(se_section, "DELTA", &
1130 r_val=qs_control%se_control%delta)
1131 CALL section_vals_val_get(se_section, "ANALYTICAL_GRADIENTS", &
1132 l_val=qs_control%se_control%analytical_gradients)
1133 CALL section_vals_val_get(se_section, "FORCE_KDSO-D_EXCHANGE", &
1134 l_val=qs_control%se_control%force_kdsod_EX)
1135 ! Integral Screening
1136 CALL section_vals_val_get(se_section, "INTEGRAL_SCREENING", &
1137 i_val=qs_control%se_control%integral_screening)
1138 IF (qs_control%method_id == do_method_pnnl) THEN
1139 IF (qs_control%se_control%integral_screening /= do_se_is_slater) &
1140 CALL cp_warn(__location__, &
1141 "PNNL semi-empirical parameterization supports only the Slater type "// &
1142 "integral scheme. Revert to Slater and continue the calculation.")
1143 qs_control%se_control%integral_screening = do_se_is_slater
1144 END IF
1145 ! Global Arrays variable
1146 CALL section_vals_val_get(se_section, "GA%NCELLS", &
1147 i_val=qs_control%se_control%ga_ncells)
1148 ! Long-Range correction
1149 CALL section_vals_val_get(se_section, "LR_CORRECTION%CUTOFF", &
1150 r_val=qs_control%se_control%cutoff_lrc)
1151 qs_control%se_control%taper_lrc = qs_control%se_control%cutoff_lrc
1152 CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_TAPER", &
1153 explicit=explicit)
1154 IF (explicit) THEN
1155 CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_TAPER", &
1156 r_val=qs_control%se_control%taper_lrc)
1157 END IF
1158 CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_RANGE", &
1159 r_val=qs_control%se_control%range_lrc)
1160 ! Coulomb
1161 CALL section_vals_val_get(se_section, "COULOMB%CUTOFF", &
1162 r_val=qs_control%se_control%cutoff_cou)
1163 qs_control%se_control%taper_cou = qs_control%se_control%cutoff_cou
1164 CALL section_vals_val_get(se_section, "COULOMB%RC_TAPER", &
1165 explicit=explicit)
1166 IF (explicit) THEN
1167 CALL section_vals_val_get(se_section, "COULOMB%RC_TAPER", &
1168 r_val=qs_control%se_control%taper_cou)
1169 END IF
1170 CALL section_vals_val_get(se_section, "COULOMB%RC_RANGE", &
1171 r_val=qs_control%se_control%range_cou)
1172 ! Exchange
1173 CALL section_vals_val_get(se_section, "EXCHANGE%CUTOFF", &
1174 r_val=qs_control%se_control%cutoff_exc)
1175 qs_control%se_control%taper_exc = qs_control%se_control%cutoff_exc
1176 CALL section_vals_val_get(se_section, "EXCHANGE%RC_TAPER", &
1177 explicit=explicit)
1178 IF (explicit) THEN
1179 CALL section_vals_val_get(se_section, "EXCHANGE%RC_TAPER", &
1180 r_val=qs_control%se_control%taper_exc)
1181 END IF
1182 CALL section_vals_val_get(se_section, "EXCHANGE%RC_RANGE", &
1183 r_val=qs_control%se_control%range_exc)
1184 ! Screening (only if the integral scheme is of dumped type)
1185 IF (qs_control%se_control%integral_screening == do_se_is_kdso_d) THEN
1186 CALL section_vals_val_get(se_section, "SCREENING%RC_TAPER", &
1187 r_val=qs_control%se_control%taper_scr)
1188 CALL section_vals_val_get(se_section, "SCREENING%RC_RANGE", &
1189 r_val=qs_control%se_control%range_scr)
1190 END IF
1191 ! Periodic Type Calculation
1192 CALL section_vals_val_get(se_section, "PERIODIC", &
1193 i_val=qs_control%se_control%periodic_type)
1194 SELECT CASE (qs_control%se_control%periodic_type)
1195 CASE (do_se_lr_none)
1196 qs_control%se_control%do_ewald = .false.
1197 qs_control%se_control%do_ewald_r3 = .false.
1198 qs_control%se_control%do_ewald_gks = .false.
1199 CASE (do_se_lr_ewald)
1200 qs_control%se_control%do_ewald = .true.
1201 qs_control%se_control%do_ewald_r3 = .false.
1202 qs_control%se_control%do_ewald_gks = .false.
1203 CASE (do_se_lr_ewald_gks)
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 = .true.
1207 IF (qs_control%method_id /= do_method_pnnl) &
1208 CALL cp_abort(__location__, &
1209 "A periodic semi-empirical calculation was requested with a long-range "// &
1210 "summation on the single integral evaluation. This scheme is supported "// &
1211 "only by the PNNL parameterization.")
1212 CASE (do_se_lr_ewald_r3)
1213 qs_control%se_control%do_ewald = .true.
1214 qs_control%se_control%do_ewald_r3 = .true.
1215 qs_control%se_control%do_ewald_gks = .false.
1216 IF (qs_control%se_control%integral_screening /= do_se_is_kdso) &
1217 CALL cp_abort(__location__, &
1218 "A periodic semi-empirical calculation was requested with a long-range "// &
1219 "summation for the slowly convergent part 1/R^3, which is not congruent "// &
1220 "with the integral screening chosen. The only integral screening supported "// &
1221 "by this periodic type calculation is the standard Klopman-Dewar-Sabelli-Ohno.")
1222 END SELECT
1223
1224 ! dispersion pair potentials
1225 CALL section_vals_val_get(se_section, "DISPERSION", &
1226 l_val=qs_control%se_control%dispersion)
1227 CALL section_vals_val_get(se_section, "DISPERSION_RADIUS", &
1228 r_val=qs_control%se_control%rcdisp)
1229 CALL section_vals_val_get(se_section, "COORDINATION_CUTOFF", &
1230 r_val=qs_control%se_control%epscn)
1231 CALL section_vals_val_get(se_section, "D3_SCALING", r_vals=scal)
1232 qs_control%se_control%sd3(1) = scal(1)
1233 qs_control%se_control%sd3(2) = scal(2)
1234 qs_control%se_control%sd3(3) = scal(3)
1235 CALL section_vals_val_get(se_section, "DISPERSION_PARAMETER_FILE", &
1236 c_val=qs_control%se_control%dispersion_parameter_file)
1237
1238 ! Stop the execution for non-implemented features
1239 IF (qs_control%se_control%periodic_type == do_se_lr_ewald_r3) THEN
1240 cpabort("EWALD_R3 not implemented yet!")
1241 END IF
1242
1243 IF (qs_control%method_id == do_method_mndo .OR. &
1244 qs_control%method_id == do_method_am1 .OR. &
1245 qs_control%method_id == do_method_mndod .OR. &
1246 qs_control%method_id == do_method_pdg .OR. &
1247 qs_control%method_id == do_method_pm3 .OR. &
1248 qs_control%method_id == do_method_pm6 .OR. &
1249 qs_control%method_id == do_method_pm6fm .OR. &
1250 qs_control%method_id == do_method_pnnl .OR. &
1251 qs_control%method_id == do_method_rm1) THEN
1252 qs_control%se_control%orthogonal_basis = .true.
1253 END IF
1254 END IF
1255
1256 ! DFTB code
1257 IF (qs_control%dftb) THEN
1258 CALL section_vals_val_get(dftb_section, "ORTHOGONAL_BASIS", &
1259 l_val=qs_control%dftb_control%orthogonal_basis)
1260 CALL section_vals_val_get(dftb_section, "SELF_CONSISTENT", &
1261 l_val=qs_control%dftb_control%self_consistent)
1262 CALL section_vals_val_get(dftb_section, "DISPERSION", &
1263 l_val=qs_control%dftb_control%dispersion)
1264 CALL section_vals_val_get(dftb_section, "DIAGONAL_DFTB3", &
1265 l_val=qs_control%dftb_control%dftb3_diagonal)
1266 CALL section_vals_val_get(dftb_section, "HB_SR_GAMMA", &
1267 l_val=qs_control%dftb_control%hb_sr_damp)
1268 CALL section_vals_val_get(dftb_section, "EPS_DISP", &
1269 r_val=qs_control%dftb_control%eps_disp)
1270 CALL section_vals_val_get(dftb_section, "DO_EWALD", explicit=explicit)
1271 IF (explicit) THEN
1272 CALL section_vals_val_get(dftb_section, "DO_EWALD", &
1273 l_val=qs_control%dftb_control%do_ewald)
1274 ELSE
1275 qs_control%dftb_control%do_ewald = (qs_control%periodicity /= 0)
1276 END IF
1277 CALL section_vals_val_get(dftb_parameter, "PARAM_FILE_PATH", &
1278 c_val=qs_control%dftb_control%sk_file_path)
1279 CALL section_vals_val_get(dftb_parameter, "PARAM_FILE_NAME", &
1280 c_val=qs_control%dftb_control%sk_file_list)
1281 CALL section_vals_val_get(dftb_parameter, "HB_SR_PARAM", &
1282 r_val=qs_control%dftb_control%hb_sr_para)
1283 CALL section_vals_val_get(dftb_parameter, "SK_FILE", n_rep_val=n_var)
1284 ALLOCATE (qs_control%dftb_control%sk_pair_list(3, n_var))
1285 DO k = 1, n_var
1286 CALL section_vals_val_get(dftb_parameter, "SK_FILE", i_rep_val=k, &
1287 c_vals=clist)
1288 qs_control%dftb_control%sk_pair_list(1:3, k) = clist(1:3)
1289 END DO
1290 ! Dispersion type
1291 CALL section_vals_val_get(dftb_parameter, "DISPERSION_TYPE", &
1292 i_val=qs_control%dftb_control%dispersion_type)
1293 CALL section_vals_val_get(dftb_parameter, "UFF_FORCE_FIELD", &
1294 c_val=qs_control%dftb_control%uff_force_field)
1295 ! D3 Dispersion
1296 CALL section_vals_val_get(dftb_parameter, "DISPERSION_RADIUS", &
1297 r_val=qs_control%dftb_control%rcdisp)
1298 CALL section_vals_val_get(dftb_parameter, "COORDINATION_CUTOFF", &
1299 r_val=qs_control%dftb_control%epscn)
1300 CALL section_vals_val_get(dftb_parameter, "D2_EXP_PRE", &
1301 r_val=qs_control%dftb_control%exp_pre)
1302 CALL section_vals_val_get(dftb_parameter, "D2_SCALING", &
1303 r_val=qs_control%dftb_control%scaling)
1304 CALL section_vals_val_get(dftb_parameter, "D3_SCALING", r_vals=scal)
1305 qs_control%dftb_control%sd3(1) = scal(1)
1306 qs_control%dftb_control%sd3(2) = scal(2)
1307 qs_control%dftb_control%sd3(3) = scal(3)
1308 CALL section_vals_val_get(dftb_parameter, "D3BJ_SCALING", r_vals=scal)
1309 qs_control%dftb_control%sd3bj(1) = scal(1)
1310 qs_control%dftb_control%sd3bj(2) = scal(2)
1311 qs_control%dftb_control%sd3bj(3) = scal(3)
1312 qs_control%dftb_control%sd3bj(4) = scal(4)
1313 CALL section_vals_val_get(dftb_parameter, "DISPERSION_PARAMETER_FILE", &
1314 c_val=qs_control%dftb_control%dispersion_parameter_file)
1315
1316 IF (qs_control%dftb_control%dispersion) CALL cite_reference(zhechkov2005)
1317 IF (qs_control%dftb_control%self_consistent) CALL cite_reference(elstner1998)
1318 IF (qs_control%dftb_control%hb_sr_damp) CALL cite_reference(hu2007)
1319 END IF
1320
1321 ! xTB code
1322 IF (qs_control%xtb) THEN
1323 CALL section_vals_val_get(xtb_section, "GFN_TYPE", i_val=qs_control%xtb_control%gfn_type)
1324 CALL section_vals_val_get(xtb_section, "DO_EWALD", explicit=explicit)
1325 IF (explicit) THEN
1326 CALL section_vals_val_get(xtb_section, "DO_EWALD", &
1327 l_val=qs_control%xtb_control%do_ewald)
1328 ELSE
1329 qs_control%xtb_control%do_ewald = (qs_control%periodicity /= 0)
1330 END IF
1331 ! vdW
1332 CALL section_vals_val_get(xtb_section, "VDW_POTENTIAL", explicit=explicit)
1333 IF (explicit) THEN
1334 CALL section_vals_val_get(xtb_section, "VDW_POTENTIAL", c_val=cval)
1335 CALL uppercase(cval)
1336 SELECT CASE (cval)
1337 CASE ("NONE")
1338 qs_control%xtb_control%vdw_type = xtb_vdw_type_none
1339 CASE ("DFTD3")
1340 qs_control%xtb_control%vdw_type = xtb_vdw_type_d3
1341 CASE ("DFTD4")
1342 qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
1343 CASE DEFAULT
1344 cpabort("vdW type")
1345 END SELECT
1346 ELSE
1347 SELECT CASE (qs_control%xtb_control%gfn_type)
1348 CASE (0)
1349 qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
1350 CASE (1)
1351 qs_control%xtb_control%vdw_type = xtb_vdw_type_d3
1352 CASE (2)
1353 qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
1354 cpabort("gfn2-xtb tbd")
1355 CASE DEFAULT
1356 cpabort("GFN type")
1357 END SELECT
1358 END IF
1359 !
1360 CALL section_vals_val_get(xtb_section, "STO_NG", i_val=ngauss)
1361 qs_control%xtb_control%sto_ng = ngauss
1362 CALL section_vals_val_get(xtb_section, "HYDROGEN_STO_NG", i_val=ngauss)
1363 qs_control%xtb_control%h_sto_ng = ngauss
1364 CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_PATH", &
1365 c_val=qs_control%xtb_control%parameter_file_path)
1366 CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_NAME", explicit=explicit)
1367 IF (explicit) THEN
1368 CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_NAME", &
1369 c_val=qs_control%xtb_control%parameter_file_name)
1370 ELSE
1371 SELECT CASE (qs_control%xtb_control%gfn_type)
1372 CASE (0)
1373 qs_control%xtb_control%parameter_file_name = "xTB0_parameters"
1374 CASE (1)
1375 qs_control%xtb_control%parameter_file_name = "xTB1_parameters"
1376 CASE (2)
1377 cpabort("gfn2-xtb tbd")
1378 CASE DEFAULT
1379 cpabort("GFN type")
1380 END SELECT
1381 END IF
1382 ! D3 Dispersion
1383 CALL section_vals_val_get(xtb_parameter, "DISPERSION_RADIUS", &
1384 r_val=qs_control%xtb_control%rcdisp)
1385 CALL section_vals_val_get(xtb_parameter, "COORDINATION_CUTOFF", &
1386 r_val=qs_control%xtb_control%epscn)
1387 CALL section_vals_val_get(xtb_parameter, "D3BJ_SCALING", explicit=explicit)
1388 IF (explicit) THEN
1389 CALL section_vals_val_get(xtb_parameter, "D3BJ_SCALING", r_vals=scal)
1390 qs_control%xtb_control%s6 = scal(1)
1391 qs_control%xtb_control%s8 = scal(2)
1392 ELSE
1393 SELECT CASE (qs_control%xtb_control%gfn_type)
1394 CASE (0)
1395 qs_control%xtb_control%s6 = 1.00_dp
1396 qs_control%xtb_control%s8 = 2.85_dp
1397 CASE (1)
1398 qs_control%xtb_control%s6 = 1.00_dp
1399 qs_control%xtb_control%s8 = 2.40_dp
1400 CASE (2)
1401 cpabort("gfn2-xtb tbd")
1402 CASE DEFAULT
1403 cpabort("GFN type")
1404 END SELECT
1405 END IF
1406 CALL section_vals_val_get(xtb_parameter, "D3BJ_PARAM", explicit=explicit)
1407 IF (explicit) THEN
1408 CALL section_vals_val_get(xtb_parameter, "D3BJ_PARAM", r_vals=scal)
1409 qs_control%xtb_control%a1 = scal(1)
1410 qs_control%xtb_control%a2 = scal(2)
1411 ELSE
1412 SELECT CASE (qs_control%xtb_control%gfn_type)
1413 CASE (0)
1414 qs_control%xtb_control%a1 = 0.80_dp
1415 qs_control%xtb_control%a2 = 4.60_dp
1416 CASE (1)
1417 qs_control%xtb_control%a1 = 0.63_dp
1418 qs_control%xtb_control%a2 = 5.00_dp
1419 CASE (2)
1420 cpabort("gfn2-xtb tbd")
1421 CASE DEFAULT
1422 cpabort("GFN type")
1423 END SELECT
1424 END IF
1425 CALL section_vals_val_get(xtb_parameter, "DISPERSION_PARAMETER_FILE", &
1426 c_val=qs_control%xtb_control%dispersion_parameter_file)
1427 ! global parameters
1428 CALL section_vals_val_get(xtb_parameter, "HUCKEL_CONSTANTS", explicit=explicit)
1429 IF (explicit) THEN
1430 CALL section_vals_val_get(xtb_parameter, "HUCKEL_CONSTANTS", r_vals=scal)
1431 qs_control%xtb_control%ks = scal(1)
1432 qs_control%xtb_control%kp = scal(2)
1433 qs_control%xtb_control%kd = scal(3)
1434 qs_control%xtb_control%ksp = scal(4)
1435 qs_control%xtb_control%k2sh = scal(5)
1436 IF (qs_control%xtb_control%gfn_type == 0) THEN
1437 ! enforce ksp for gfn0
1438 qs_control%xtb_control%ksp = 0.5_dp*(scal(1) + scal(2))
1439 END IF
1440 ELSE
1441 SELECT CASE (qs_control%xtb_control%gfn_type)
1442 CASE (0)
1443 qs_control%xtb_control%ks = 2.00_dp
1444 qs_control%xtb_control%kp = 2.4868_dp
1445 qs_control%xtb_control%kd = 2.27_dp
1446 qs_control%xtb_control%ksp = 2.2434_dp
1447 qs_control%xtb_control%k2sh = 1.1241_dp
1448 CASE (1)
1449 qs_control%xtb_control%ks = 1.85_dp
1450 qs_control%xtb_control%kp = 2.25_dp
1451 qs_control%xtb_control%kd = 2.00_dp
1452 qs_control%xtb_control%ksp = 2.08_dp
1453 qs_control%xtb_control%k2sh = 2.85_dp
1454 CASE (2)
1455 cpabort("gfn2-xtb tbd")
1456 CASE DEFAULT
1457 cpabort("GFN type")
1458 END SELECT
1459 END IF
1460 CALL section_vals_val_get(xtb_parameter, "COULOMB_CONSTANTS", explicit=explicit)
1461 IF (explicit) THEN
1462 CALL section_vals_val_get(xtb_parameter, "COULOMB_CONSTANTS", r_vals=scal)
1463 qs_control%xtb_control%kg = scal(1)
1464 qs_control%xtb_control%kf = scal(2)
1465 ELSE
1466 SELECT CASE (qs_control%xtb_control%gfn_type)
1467 CASE (0)
1468 qs_control%xtb_control%kg = 2.00_dp
1469 qs_control%xtb_control%kf = 1.50_dp
1470 CASE (1)
1471 qs_control%xtb_control%kg = 2.00_dp
1472 qs_control%xtb_control%kf = 1.50_dp
1473 CASE (2)
1474 cpabort("gfn2-xtb tbd")
1475 CASE DEFAULT
1476 cpabort("GFN type")
1477 END SELECT
1478 END IF
1479 CALL section_vals_val_get(xtb_parameter, "CN_CONSTANTS", r_vals=scal)
1480 qs_control%xtb_control%kcns = scal(1)
1481 qs_control%xtb_control%kcnp = scal(2)
1482 qs_control%xtb_control%kcnd = scal(3)
1483 !
1484 CALL section_vals_val_get(xtb_parameter, "EN_CONSTANTS", explicit=explicit)
1485 IF (explicit) THEN
1486 CALL section_vals_val_get(xtb_parameter, "EN_CONSTANTS", r_vals=scal)
1487 SELECT CASE (qs_control%xtb_control%gfn_type)
1488 CASE (0)
1489 qs_control%xtb_control%ksen = scal(1)
1490 qs_control%xtb_control%kpen = scal(2)
1491 qs_control%xtb_control%kden = scal(3)
1492 CASE (1)
1493 qs_control%xtb_control%ken = scal(1)
1494 CASE (2)
1495 cpabort("gfn2-xtb tbd")
1496 CASE DEFAULT
1497 cpabort("GFN type")
1498 END SELECT
1499 ELSE
1500 SELECT CASE (qs_control%xtb_control%gfn_type)
1501 CASE (0)
1502 qs_control%xtb_control%ksen = 0.006_dp
1503 qs_control%xtb_control%kpen = -0.001_dp
1504 qs_control%xtb_control%kden = -0.002_dp
1505 CASE (1)
1506 qs_control%xtb_control%ken = -0.007_dp
1507 CASE (2)
1508 cpabort("gfn2-xtb tbd")
1509 CASE DEFAULT
1510 cpabort("GFN type")
1511 END SELECT
1512 END IF
1513 ! ben
1514 CALL section_vals_val_get(xtb_parameter, "BEN_CONSTANT", r_vals=scal)
1515 qs_control%xtb_control%ben = scal(1)
1516 ! enscale (hidden parameter in repulsion
1517 CALL section_vals_val_get(xtb_parameter, "ENSCALE", explicit=explicit)
1518 IF (explicit) THEN
1519 CALL section_vals_val_get(xtb_parameter, "ENSCALE", &
1520 r_val=qs_control%xtb_control%enscale)
1521 ELSE
1522 SELECT CASE (qs_control%xtb_control%gfn_type)
1523 CASE (0)
1524 qs_control%xtb_control%enscale = -0.09_dp
1525 CASE (1)
1526 qs_control%xtb_control%enscale = 0._dp
1527 CASE (2)
1528 cpabort("gfn2-xtb tbd")
1529 CASE DEFAULT
1530 cpabort("GFN type")
1531 END SELECT
1532 END IF
1533 ! XB
1534 CALL section_vals_val_get(xtb_section, "USE_HALOGEN_CORRECTION", &
1535 l_val=qs_control%xtb_control%xb_interaction)
1536 CALL section_vals_val_get(xtb_parameter, "HALOGEN_BINDING", r_vals=scal)
1537 qs_control%xtb_control%kxr = scal(1)
1538 qs_control%xtb_control%kx2 = scal(2)
1539 ! NONBONDED interactions
1540 CALL section_vals_val_get(xtb_section, "DO_NONBONDED", &
1541 l_val=qs_control%xtb_control%do_nonbonded)
1542 CALL section_vals_get(nonbonded_section, explicit=explicit)
1543 IF (explicit .AND. qs_control%xtb_control%do_nonbonded) THEN
1544 CALL section_vals_get(genpot_section, explicit=explicit, n_repetition=ngp)
1545 IF (explicit) THEN
1546 CALL pair_potential_reallocate(qs_control%xtb_control%nonbonded, 1, ngp, gp=.true.)
1547 CALL read_gp_section(qs_control%xtb_control%nonbonded, genpot_section, 0)
1548 END IF
1549 END IF !nonbonded
1550 CALL section_vals_val_get(xtb_section, "EPS_PAIRPOTENTIAL", &
1551 r_val=qs_control%xtb_control%eps_pair)
1552 ! SR Coulomb
1553 CALL section_vals_val_get(xtb_parameter, "COULOMB_SR_CUT", r_vals=scal)
1554 qs_control%xtb_control%coulomb_sr_cut = scal(1)
1555 CALL section_vals_val_get(xtb_parameter, "COULOMB_SR_EPS", r_vals=scal)
1556 qs_control%xtb_control%coulomb_sr_eps = scal(1)
1557 ! XB_radius
1558 CALL section_vals_val_get(xtb_parameter, "XB_RADIUS", r_val=qs_control%xtb_control%xb_radius)
1559 ! Kab
1560 CALL section_vals_val_get(xtb_parameter, "KAB_PARAM", n_rep_val=n_rep)
1561 ! Coulomb
1562 SELECT CASE (qs_control%xtb_control%gfn_type)
1563 CASE (0)
1564 qs_control%xtb_control%coulomb_interaction = .false.
1565 qs_control%xtb_control%coulomb_lr = .false.
1566 qs_control%xtb_control%tb3_interaction = .false.
1567 qs_control%xtb_control%check_atomic_charges = .false.
1568 CALL section_vals_val_get(xtb_section, "VARIATIONAL_DIPOLE", &
1569 l_val=qs_control%xtb_control%var_dipole)
1570 CASE (1)
1571 ! For debugging purposes
1572 CALL section_vals_val_get(xtb_section, "COULOMB_INTERACTION", &
1573 l_val=qs_control%xtb_control%coulomb_interaction)
1574 CALL section_vals_val_get(xtb_section, "COULOMB_LR", &
1575 l_val=qs_control%xtb_control%coulomb_lr)
1576 CALL section_vals_val_get(xtb_section, "TB3_INTERACTION", &
1577 l_val=qs_control%xtb_control%tb3_interaction)
1578 ! Check for bad atomic charges
1579 CALL section_vals_val_get(xtb_section, "CHECK_ATOMIC_CHARGES", &
1580 l_val=qs_control%xtb_control%check_atomic_charges)
1581 qs_control%xtb_control%var_dipole = .false.
1582 CASE (2)
1583 cpabort("gfn2-xtb tbd")
1584 CASE DEFAULT
1585 cpabort("GFN type")
1586 END SELECT
1587 qs_control%xtb_control%kab_nval = n_rep
1588 IF (n_rep > 0) THEN
1589 ALLOCATE (qs_control%xtb_control%kab_param(3, n_rep))
1590 ALLOCATE (qs_control%xtb_control%kab_types(2, n_rep))
1591 ALLOCATE (qs_control%xtb_control%kab_vals(n_rep))
1592 DO j = 1, n_rep
1593 CALL section_vals_val_get(xtb_parameter, "KAB_PARAM", i_rep_val=j, c_vals=clist)
1594 qs_control%xtb_control%kab_param(1, j) = clist(1)
1595 CALL get_ptable_info(clist(1), &
1596 ielement=qs_control%xtb_control%kab_types(1, j))
1597 qs_control%xtb_control%kab_param(2, j) = clist(2)
1598 CALL get_ptable_info(clist(2), &
1599 ielement=qs_control%xtb_control%kab_types(2, j))
1600 qs_control%xtb_control%kab_param(3, j) = clist(3)
1601 READ (clist(3), '(F10.0)') qs_control%xtb_control%kab_vals(j)
1602 END DO
1603 END IF
1604
1605 IF (qs_control%xtb_control%gfn_type == 0) THEN
1606 CALL section_vals_val_get(xtb_parameter, "SRB_PARAMETER", r_vals=scal)
1607 qs_control%xtb_control%ksrb = scal(1)
1608 qs_control%xtb_control%esrb = scal(2)
1609 qs_control%xtb_control%gscal = scal(3)
1610 qs_control%xtb_control%c1srb = scal(4)
1611 qs_control%xtb_control%c2srb = scal(5)
1612 qs_control%xtb_control%shift = scal(6)
1613 END IF
1614
1615 CALL section_vals_val_get(xtb_section, "EN_SHIFT_TYPE", c_val=cval)
1616 CALL uppercase(cval)
1617 SELECT CASE (trim(cval))
1618 CASE ("SELECT")
1619 qs_control%xtb_control%enshift_type = 0
1620 CASE ("MOLECULE")
1621 qs_control%xtb_control%enshift_type = 1
1622 CASE ("CRYSTAL")
1623 qs_control%xtb_control%enshift_type = 2
1624 CASE DEFAULT
1625 cpabort("Unknown value for EN_SHIFT_TYPE")
1626 END SELECT
1627
1628 ! EEQ solver params
1629 CALL read_eeq_param(eeq_section, qs_control%xtb_control%eeq_sparam)
1630
1631 END IF
1632
1633 ! Optimize LRI basis set
1634 CALL section_vals_get(lri_optbas_section, explicit=qs_control%lri_optbas)
1635
1636 ! Use instead the tblite
1637 CALL section_vals_val_get(xtb_tblite, "_SECTION_PARAMETERS_", &
1638 l_val=qs_control%xtb_control%do_tblite)
1639 CALL section_vals_val_get(xtb_tblite, "METHOD", &
1640 i_val=qs_control%xtb_control%tblite_method)
1641 IF (qs_control%xtb_control%do_tblite) THEN
1642 CALL cite_reference(caldeweyher2017)
1643 CALL cite_reference(caldeweyher2020)
1644 CALL cite_reference(asgeirsson2017)
1645 CALL cite_reference(grimme2017)
1646 CALL cite_reference(bannwarth2019)
1647 !Ewald sum included in tblite
1648 qs_control%xtb_control%do_ewald = .false.
1649 END IF
1650
1651 CALL timestop(handle)
1652 END SUBROUTINE read_qs_section
1653
1654! **************************************************************************************************
1655!> \brief Read TDDFPT-related input parameters.
1656!> \param t_control TDDFPT control parameters
1657!> \param t_section TDDFPT input section
1658!> \param qs_control Quickstep control parameters
1659! **************************************************************************************************
1660 SUBROUTINE read_tddfpt2_control(t_control, t_section, qs_control)
1661 TYPE(tddfpt2_control_type), POINTER :: t_control
1662 TYPE(section_vals_type), POINTER :: t_section
1663 TYPE(qs_control_type), POINTER :: qs_control
1664
1665 CHARACTER(LEN=*), PARAMETER :: routinen = 'read_tddfpt2_control'
1666
1667 CHARACTER(LEN=default_string_length), &
1668 DIMENSION(:), POINTER :: tmpstringlist
1669 INTEGER :: handle, irep, isize, nrep
1670 INTEGER, ALLOCATABLE, DIMENSION(:) :: inds
1671 LOGICAL :: do_ewald, do_exchange, expl, explicit, &
1672 multigrid_set
1673 REAL(kind=dp) :: filter, fval, hfx
1674 TYPE(section_vals_type), POINTER :: dipole_section, mgrid_section, &
1675 soc_section, stda_section, xc_func, &
1676 xc_section
1677
1678 CALL timeset(routinen, handle)
1679
1680 CALL section_vals_val_get(t_section, "_SECTION_PARAMETERS_", l_val=t_control%enabled)
1681
1682 CALL section_vals_val_get(t_section, "NSTATES", i_val=t_control%nstates)
1683 CALL section_vals_val_get(t_section, "MAX_ITER", i_val=t_control%niters)
1684 CALL section_vals_val_get(t_section, "MAX_KV", i_val=t_control%nkvs)
1685 CALL section_vals_val_get(t_section, "NLUMO", i_val=t_control%nlumo)
1686 CALL section_vals_val_get(t_section, "NPROC_STATE", i_val=t_control%nprocs)
1687 CALL section_vals_val_get(t_section, "KERNEL", i_val=t_control%kernel)
1688 CALL section_vals_val_get(t_section, "SPINFLIP", i_val=t_control%spinflip)
1689 CALL section_vals_val_get(t_section, "OE_CORR", i_val=t_control%oe_corr)
1690 CALL section_vals_val_get(t_section, "EV_SHIFT", r_val=t_control%ev_shift)
1691 CALL section_vals_val_get(t_section, "EOS_SHIFT", r_val=t_control%eos_shift)
1692
1693 CALL section_vals_val_get(t_section, "CONVERGENCE", r_val=t_control%conv)
1694 CALL section_vals_val_get(t_section, "MIN_AMPLITUDE", r_val=t_control%min_excitation_amplitude)
1695 CALL section_vals_val_get(t_section, "ORTHOGONAL_EPS", r_val=t_control%orthogonal_eps)
1696
1697 CALL section_vals_val_get(t_section, "RESTART", l_val=t_control%is_restart)
1698 CALL section_vals_val_get(t_section, "RKS_TRIPLETS", l_val=t_control%rks_triplets)
1699 CALL section_vals_val_get(t_section, "DO_LRIGPW", l_val=t_control%do_lrigpw)
1700 CALL section_vals_val_get(t_section, "DO_SMEARING", l_val=t_control%do_smearing)
1701 CALL section_vals_val_get(t_section, "DO_BSE", l_val=t_control%do_bse)
1702 CALL section_vals_val_get(t_section, "ADMM_KERNEL_CORRECTION_SYMMETRIC", l_val=t_control%admm_symm)
1703 CALL section_vals_val_get(t_section, "ADMM_KERNEL_XC_CORRECTION", l_val=t_control%admm_xc_correction)
1704 CALL section_vals_val_get(t_section, "EXCITON_DESCRIPTORS", l_val=t_control%do_exciton_descriptors)
1705 CALL section_vals_val_get(t_section, "DIRECTIONAL_EXCITON_DESCRIPTORS", l_val=t_control%do_directional_exciton_descriptors)
1706
1707 ! read automatically generated auxiliary basis for LRI
1708 CALL section_vals_val_get(t_section, "AUTO_BASIS", n_rep_val=nrep)
1709 DO irep = 1, nrep
1710 CALL section_vals_val_get(t_section, "AUTO_BASIS", i_rep_val=irep, c_vals=tmpstringlist)
1711 IF (SIZE(tmpstringlist) == 2) THEN
1712 CALL uppercase(tmpstringlist(2))
1713 SELECT CASE (tmpstringlist(2))
1714 CASE ("X")
1715 isize = -1
1716 CASE ("SMALL")
1717 isize = 0
1718 CASE ("MEDIUM")
1719 isize = 1
1720 CASE ("LARGE")
1721 isize = 2
1722 CASE ("HUGE")
1723 isize = 3
1724 CASE DEFAULT
1725 cpabort("Unknown basis size in AUTO_BASIS keyword:"//trim(tmpstringlist(1)))
1726 END SELECT
1727 !
1728 SELECT CASE (tmpstringlist(1))
1729 CASE ("X")
1730 CASE ("P_LRI_AUX")
1731 t_control%auto_basis_p_lri_aux = isize
1732 CASE DEFAULT
1733 cpabort("Unknown basis type in AUTO_BASIS keyword:"//trim(tmpstringlist(1)))
1734 END SELECT
1735 ELSE
1736 CALL cp_abort(__location__, &
1737 "AUTO_BASIS keyword in &PROPERTIES &TDDFT section has a wrong number of arguments.")
1738 END IF
1739 END DO
1740
1741 IF (t_control%conv < 0) &
1742 t_control%conv = abs(t_control%conv)
1743
1744 ! DIPOLE_MOMENTS subsection
1745 dipole_section => section_vals_get_subs_vals(t_section, "DIPOLE_MOMENTS")
1746 CALL section_vals_val_get(dipole_section, "DIPOLE_FORM", explicit=explicit)
1747 IF (explicit) THEN
1748 CALL section_vals_val_get(dipole_section, "DIPOLE_FORM", i_val=t_control%dipole_form)
1749 ELSE
1750 t_control%dipole_form = 0
1751 END IF
1752 CALL section_vals_val_get(dipole_section, "REFERENCE", i_val=t_control%dipole_reference)
1753 CALL section_vals_val_get(dipole_section, "REFERENCE_POINT", explicit=explicit)
1754 IF (explicit) THEN
1755 CALL section_vals_val_get(dipole_section, "REFERENCE_POINT", r_vals=t_control%dipole_ref_point)
1756 ELSE
1757 NULLIFY (t_control%dipole_ref_point)
1758 IF (t_control%dipole_form == tddfpt_dipole_length .AND. t_control%dipole_reference == use_mom_ref_user) THEN
1759 cpabort("User-defined reference point should be given explicitly")
1760 END IF
1761 END IF
1762
1763 !SOC subsection
1764 soc_section => section_vals_get_subs_vals(t_section, "SOC")
1765 CALL section_vals_get(soc_section, explicit=explicit)
1766 IF (explicit) THEN
1767 t_control%do_soc = .true.
1768 END IF
1769
1770 ! MGRID subsection
1771 mgrid_section => section_vals_get_subs_vals(t_section, "MGRID")
1772 CALL section_vals_get(mgrid_section, explicit=t_control%mgrid_is_explicit)
1773
1774 IF (t_control%mgrid_is_explicit) THEN
1775 CALL section_vals_val_get(mgrid_section, "NGRIDS", i_val=t_control%mgrid_ngrids, explicit=explicit)
1776 IF (.NOT. explicit) t_control%mgrid_ngrids = SIZE(qs_control%e_cutoff)
1777
1778 CALL section_vals_val_get(mgrid_section, "CUTOFF", r_val=t_control%mgrid_cutoff, explicit=explicit)
1779 IF (.NOT. explicit) t_control%mgrid_cutoff = qs_control%cutoff
1780
1781 CALL section_vals_val_get(mgrid_section, "PROGRESSION_FACTOR", &
1782 r_val=t_control%mgrid_progression_factor, explicit=explicit)
1783 IF (explicit) THEN
1784 IF (t_control%mgrid_progression_factor <= 1.0_dp) &
1785 CALL cp_abort(__location__, &
1786 "Progression factor should be greater then 1.0 to ensure multi-grid ordering")
1787 ELSE
1788 t_control%mgrid_progression_factor = qs_control%progression_factor
1789 END IF
1790
1791 CALL section_vals_val_get(mgrid_section, "COMMENSURATE", l_val=t_control%mgrid_commensurate_mgrids, explicit=explicit)
1792 IF (.NOT. explicit) t_control%mgrid_commensurate_mgrids = qs_control%commensurate_mgrids
1793 IF (t_control%mgrid_commensurate_mgrids) THEN
1794 IF (explicit) THEN
1795 t_control%mgrid_progression_factor = 4.0_dp
1796 ELSE
1797 t_control%mgrid_progression_factor = qs_control%progression_factor
1798 END IF
1799 END IF
1800
1801 CALL section_vals_val_get(mgrid_section, "REL_CUTOFF", r_val=t_control%mgrid_relative_cutoff, explicit=explicit)
1802 IF (.NOT. explicit) t_control%mgrid_relative_cutoff = qs_control%relative_cutoff
1803
1804 CALL section_vals_val_get(mgrid_section, "MULTIGRID_SET", l_val=multigrid_set, explicit=explicit)
1805 IF (.NOT. explicit) multigrid_set = .false.
1806 IF (multigrid_set) THEN
1807 CALL section_vals_val_get(mgrid_section, "MULTIGRID_CUTOFF", r_vals=t_control%mgrid_e_cutoff)
1808 ELSE
1809 NULLIFY (t_control%mgrid_e_cutoff)
1810 END IF
1811
1812 CALL section_vals_val_get(mgrid_section, "REALSPACE", l_val=t_control%mgrid_realspace_mgrids, explicit=explicit)
1813 IF (.NOT. explicit) t_control%mgrid_realspace_mgrids = qs_control%realspace_mgrids
1814
1815 CALL section_vals_val_get(mgrid_section, "SKIP_LOAD_BALANCE_DISTRIBUTED", &
1816 l_val=t_control%mgrid_skip_load_balance, explicit=explicit)
1817 IF (.NOT. explicit) t_control%mgrid_skip_load_balance = qs_control%skip_load_balance_distributed
1818
1819 IF (ASSOCIATED(t_control%mgrid_e_cutoff)) THEN
1820 IF (SIZE(t_control%mgrid_e_cutoff) /= t_control%mgrid_ngrids) &
1821 cpabort("Inconsistent values for number of multi-grids")
1822
1823 ! sort multi-grids in descending order according to their cutoff values
1824 t_control%mgrid_e_cutoff = -t_control%mgrid_e_cutoff
1825 ALLOCATE (inds(t_control%mgrid_ngrids))
1826 CALL sort(t_control%mgrid_e_cutoff, t_control%mgrid_ngrids, inds)
1827 DEALLOCATE (inds)
1828 t_control%mgrid_e_cutoff = -t_control%mgrid_e_cutoff
1829 END IF
1830 END IF
1831
1832 ! expand XC subsection (if given explicitly)
1833 xc_section => section_vals_get_subs_vals(t_section, "XC")
1834 xc_func => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
1835 CALL section_vals_get(xc_func, explicit=explicit)
1836 IF (explicit) &
1837 CALL xc_functionals_expand(xc_func, xc_section)
1838
1839 ! sTDA subsection
1840 stda_section => section_vals_get_subs_vals(t_section, "STDA")
1841 IF (t_control%kernel == tddfpt_kernel_stda) THEN
1842 t_control%stda_control%hfx_fraction = 0.0_dp
1843 t_control%stda_control%do_exchange = .true.
1844 t_control%stda_control%eps_td_filter = 1.e-10_dp
1845 t_control%stda_control%mn_alpha = -99.0_dp
1846 t_control%stda_control%mn_beta = -99.0_dp
1847 ! set default for Ewald method (on/off) dependent on periodicity
1848 SELECT CASE (qs_control%periodicity)
1849 CASE (0)
1850 t_control%stda_control%do_ewald = .false.
1851 CASE (1)
1852 t_control%stda_control%do_ewald = .true.
1853 CASE (2)
1854 t_control%stda_control%do_ewald = .true.
1855 CASE (3)
1856 t_control%stda_control%do_ewald = .true.
1857 CASE DEFAULT
1858 cpabort("Illegal value for periodiciy")
1859 END SELECT
1860 CALL section_vals_get(stda_section, explicit=explicit)
1861 IF (explicit) THEN
1862 CALL section_vals_val_get(stda_section, "HFX_FRACTION", r_val=hfx, explicit=expl)
1863 IF (expl) t_control%stda_control%hfx_fraction = hfx
1864 CALL section_vals_val_get(stda_section, "EPS_TD_FILTER", r_val=filter, explicit=expl)
1865 IF (expl) t_control%stda_control%eps_td_filter = filter
1866 CALL section_vals_val_get(stda_section, "DO_EWALD", l_val=do_ewald, explicit=expl)
1867 IF (expl) t_control%stda_control%do_ewald = do_ewald
1868 CALL section_vals_val_get(stda_section, "DO_EXCHANGE", l_val=do_exchange, explicit=expl)
1869 IF (expl) t_control%stda_control%do_exchange = do_exchange
1870 CALL section_vals_val_get(stda_section, "MATAGA_NISHIMOTO_CEXP", r_val=fval)
1871 t_control%stda_control%mn_alpha = fval
1872 CALL section_vals_val_get(stda_section, "MATAGA_NISHIMOTO_XEXP", r_val=fval)
1873 t_control%stda_control%mn_beta = fval
1874 END IF
1875 CALL section_vals_val_get(stda_section, "COULOMB_SR_CUT", r_val=fval)
1876 t_control%stda_control%coulomb_sr_cut = fval
1877 CALL section_vals_val_get(stda_section, "COULOMB_SR_EPS", r_val=fval)
1878 t_control%stda_control%coulomb_sr_eps = fval
1879 END IF
1880
1881 CALL timestop(handle)
1882 END SUBROUTINE read_tddfpt2_control
1883
1884! **************************************************************************************************
1885!> \brief Write the DFT control parameters to the output unit.
1886!> \param dft_control ...
1887!> \param dft_section ...
1888! **************************************************************************************************
1889 SUBROUTINE write_dft_control(dft_control, dft_section)
1890 TYPE(dft_control_type), POINTER :: dft_control
1891 TYPE(section_vals_type), POINTER :: dft_section
1892
1893 CHARACTER(len=*), PARAMETER :: routinen = 'write_dft_control'
1894
1895 CHARACTER(LEN=20) :: tmpstr
1896 INTEGER :: handle, i, i_rep, n_rep, output_unit
1897 REAL(kind=dp) :: density_cut, density_smooth_cut_range, &
1898 gradient_cut, tau_cut
1899 TYPE(cp_logger_type), POINTER :: logger
1900 TYPE(enumeration_type), POINTER :: enum
1901 TYPE(keyword_type), POINTER :: keyword
1902 TYPE(section_type), POINTER :: section
1903 TYPE(section_vals_type), POINTER :: xc_section
1904
1905 IF (dft_control%qs_control%semi_empirical) RETURN
1906 IF (dft_control%qs_control%dftb) RETURN
1907 IF (dft_control%qs_control%xtb) THEN
1908 CALL write_xtb_control(dft_control%qs_control%xtb_control, dft_section)
1909 RETURN
1910 END IF
1911 CALL timeset(routinen, handle)
1912
1913 NULLIFY (logger)
1914 logger => cp_get_default_logger()
1915
1916 output_unit = cp_print_key_unit_nr(logger, dft_section, &
1917 "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
1918
1919 IF (output_unit > 0) THEN
1920
1921 xc_section => section_vals_get_subs_vals(dft_section, "XC")
1922
1923 IF (dft_control%uks) THEN
1924 WRITE (unit=output_unit, fmt="(/,T2,A,T78,A)") &
1925 "DFT| Spin unrestricted (spin-polarized) Kohn-Sham calculation", "UKS"
1926 ELSE IF (dft_control%roks) THEN
1927 WRITE (unit=output_unit, fmt="(/,T2,A,T77,A)") &
1928 "DFT| Spin restricted open Kohn-Sham calculation", "ROKS"
1929 ELSE
1930 WRITE (unit=output_unit, fmt="(/,T2,A,T78,A)") &
1931 "DFT| Spin restricted Kohn-Sham (RKS) calculation", "RKS"
1932 END IF
1933
1934 WRITE (unit=output_unit, fmt="(T2,A,T76,I5)") &
1935 "DFT| Multiplicity", dft_control%multiplicity
1936 WRITE (unit=output_unit, fmt="(T2,A,T76,I5)") &
1937 "DFT| Number of spin states", dft_control%nspins
1938
1939 WRITE (unit=output_unit, fmt="(T2,A,T76,I5)") &
1940 "DFT| Charge", dft_control%charge
1941
1942 IF (dft_control%sic_method_id /= sic_none) CALL cite_reference(vandevondele2005b)
1943 SELECT CASE (dft_control%sic_method_id)
1944 CASE (sic_none)
1945 tmpstr = "NO"
1946 CASE (sic_mauri_spz)
1947 tmpstr = "SPZ/MAURI SIC"
1948 CASE (sic_mauri_us)
1949 tmpstr = "US/MAURI SIC"
1950 CASE (sic_ad)
1951 tmpstr = "AD SIC"
1952 CASE (sic_eo)
1953 tmpstr = "Explicit Orbital SIC"
1954 CASE DEFAULT
1955 ! fix throughout the cp2k for this option
1956 cpabort("SIC option unknown")
1957 END SELECT
1958
1959 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
1960 "DFT| Self-interaction correction (SIC)", adjustr(trim(tmpstr))
1961
1962 IF (dft_control%sic_method_id /= sic_none) THEN
1963 WRITE (unit=output_unit, fmt="(T2,A,T66,ES15.6)") &
1964 "DFT| SIC scaling parameter a", dft_control%sic_scaling_a, &
1965 "DFT| SIC scaling parameter b", dft_control%sic_scaling_b
1966 END IF
1967
1968 IF (dft_control%sic_method_id == sic_eo) THEN
1969 IF (dft_control%sic_list_id == sic_list_all) THEN
1970 WRITE (unit=output_unit, fmt="(T2,A,T66,A)") &
1971 "DFT| SIC orbitals", "ALL"
1972 END IF
1973 IF (dft_control%sic_list_id == sic_list_unpaired) THEN
1974 WRITE (unit=output_unit, fmt="(T2,A,T66,A)") &
1975 "DFT| SIC orbitals", "UNPAIRED"
1976 END IF
1977 END IF
1978
1979 CALL section_vals_val_get(xc_section, "density_cutoff", r_val=density_cut)
1980 CALL section_vals_val_get(xc_section, "gradient_cutoff", r_val=gradient_cut)
1981 CALL section_vals_val_get(xc_section, "tau_cutoff", r_val=tau_cut)
1982 CALL section_vals_val_get(xc_section, "density_smooth_cutoff_range", r_val=density_smooth_cut_range)
1983
1984 WRITE (unit=output_unit, fmt="(T2,A,T66,ES15.6)") &
1985 "DFT| Cutoffs: density ", density_cut, &
1986 "DFT| gradient", gradient_cut, &
1987 "DFT| tau ", tau_cut, &
1988 "DFT| cutoff_smoothing_range", density_smooth_cut_range
1989 CALL section_vals_val_get(xc_section, "XC_GRID%XC_SMOOTH_RHO", &
1990 c_val=tmpstr)
1991 WRITE (output_unit, '( A, T61, A )') &
1992 " DFT| XC density smoothing ", adjustr(tmpstr)
1993 CALL section_vals_val_get(xc_section, "XC_GRID%XC_DERIV", &
1994 c_val=tmpstr)
1995 WRITE (output_unit, '( A, T61, A )') &
1996 " DFT| XC derivatives ", adjustr(tmpstr)
1997 IF (dft_control%dft_plus_u) THEN
1998 NULLIFY (enum, keyword, section)
1999 CALL create_dft_section(section)
2000 keyword => section_get_keyword(section, "PLUS_U_METHOD")
2001 CALL keyword_get(keyword, enum=enum)
2002 WRITE (unit=output_unit, fmt="(/,T2,A,T41,A40)") &
2003 "DFT+U| Method", adjustr(trim(enum_i2c(enum, dft_control%plus_u_method_id)))
2004 WRITE (unit=output_unit, fmt="(T2,A)") &
2005 "DFT+U| Check atomic kind information for details"
2006 CALL section_release(section)
2007 END IF
2008
2009 WRITE (unit=output_unit, fmt="(A)") ""
2010 CALL xc_write(output_unit, xc_section, dft_control%lsd)
2011
2012 IF (dft_control%apply_period_efield) THEN
2013 WRITE (unit=output_unit, fmt="(A)") ""
2014 IF (dft_control%period_efield%displacement_field) THEN
2015 WRITE (unit=output_unit, fmt="(T2,A)") &
2016 "PERIODIC_EFIELD| Use displacement field formulation"
2017 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,ES14.6)") &
2018 "PERIODIC_EFIELD| Displacement field filter: x", &
2019 dft_control%period_efield%d_filter(1), &
2020 "PERIODIC_EFIELD| y", &
2021 dft_control%period_efield%d_filter(2), &
2022 "PERIODIC_EFIELD| z", &
2023 dft_control%period_efield%d_filter(3)
2024 END IF
2025 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,ES14.6)") &
2026 "PERIODIC_EFIELD| Polarisation vector: x", &
2027 dft_control%period_efield%polarisation(1), &
2028 "PERIODIC_EFIELD| y", &
2029 dft_control%period_efield%polarisation(2), &
2030 "PERIODIC_EFIELD| z", &
2031 dft_control%period_efield%polarisation(3)
2032
2033 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,I14)") &
2034 "PERIODIC_EFIELD| Start Frame:", &
2035 dft_control%period_efield%start_frame, &
2036 "PERIODIC_EFIELD| End Frame:", &
2037 dft_control%period_efield%end_frame
2038
2039 IF (ALLOCATED(dft_control%period_efield%strength_list)) THEN
2040 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,I14)") &
2041 "PERIODIC_EFIELD| Number of Intensities:", &
2042 SIZE(dft_control%period_efield%strength_list)
2043 WRITE (unit=output_unit, fmt="(T2,A,I10,T66,1X,ES14.6)") &
2044 "PERIODIC_EFIELD| Intensity List [a.u.] ", &
2045 1, dft_control%period_efield%strength_list(1)
2046 DO i = 2, SIZE(dft_control%period_efield%strength_list)
2047 WRITE (unit=output_unit, fmt="(T2,A,I10,T66,1X,ES14.6)") &
2048 "PERIODIC_EFIELD| ", &
2049 i, dft_control%period_efield%strength_list(i)
2050 END DO
2051 ELSE
2052 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,ES14.6)") &
2053 "PERIODIC_EFIELD| Intensity [a.u.]:", &
2054 dft_control%period_efield%strength
2055 END IF
2056
2057 IF (sqrt(dot_product(dft_control%period_efield%polarisation, &
2058 dft_control%period_efield%polarisation)) < epsilon(0.0_dp)) THEN
2059 cpabort("Invalid (too small) polarisation vector specified for PERIODIC_EFIELD")
2060 END IF
2061 END IF
2062
2063 IF (dft_control%do_sccs) THEN
2064 WRITE (unit=output_unit, fmt="(/,T2,A)") &
2065 "SCCS| Self-consistent continuum solvation model"
2066 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2067 "SCCS| Relative permittivity of the solvent (medium)", &
2068 dft_control%sccs_control%epsilon_solvent, &
2069 "SCCS| Absolute permittivity [a.u.]", &
2070 dft_control%sccs_control%epsilon_solvent/fourpi
2071 SELECT CASE (dft_control%sccs_control%method_id)
2072 CASE (sccs_andreussi)
2073 WRITE (unit=output_unit, fmt="(T2,A,/,(T2,A,T61,ES20.6))") &
2074 "SCCS| Dielectric function proposed by Andreussi et al.", &
2075 "SCCS| rho_max", dft_control%sccs_control%rho_max, &
2076 "SCCS| rho_min", dft_control%sccs_control%rho_min
2077 CASE (sccs_fattebert_gygi)
2078 WRITE (unit=output_unit, fmt="(T2,A,/,(T2,A,T61,ES20.6))") &
2079 "SCCS| Dielectric function proposed by Fattebert and Gygi", &
2080 "SCCS| beta", dft_control%sccs_control%beta, &
2081 "SCCS| rho_zero", dft_control%sccs_control%rho_zero
2082 CASE DEFAULT
2083 cpabort("Invalid SCCS model specified. Please, check your input!")
2084 END SELECT
2085 SELECT CASE (dft_control%sccs_control%derivative_method)
2086 CASE (sccs_derivative_fft)
2087 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2088 "SCCS| Numerical derivative calculation", &
2089 adjustr("FFT")
2090 CASE (sccs_derivative_cd3)
2091 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2092 "SCCS| Numerical derivative calculation", &
2093 adjustr("3-point stencil central differences")
2094 CASE (sccs_derivative_cd5)
2095 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2096 "SCCS| Numerical derivative calculation", &
2097 adjustr("5-point stencil central differences")
2098 CASE (sccs_derivative_cd7)
2099 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2100 "SCCS| Numerical derivative calculation", &
2101 adjustr("7-point stencil central differences")
2102 CASE DEFAULT
2103 CALL cp_abort(__location__, &
2104 "Invalid derivative method specified for SCCS model. "// &
2105 "Please, check your input!")
2106 END SELECT
2107 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2108 "SCCS| Repulsion parameter alpha [mN/m] = [dyn/cm]", &
2109 cp_unit_from_cp2k(dft_control%sccs_control%alpha_solvent, "mN/m")
2110 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2111 "SCCS| Dispersion parameter beta [GPa]", &
2112 cp_unit_from_cp2k(dft_control%sccs_control%beta_solvent, "GPa")
2113 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2114 "SCCS| Surface tension gamma [mN/m] = [dyn/cm]", &
2115 cp_unit_from_cp2k(dft_control%sccs_control%gamma_solvent, "mN/m")
2116 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2117 "SCCS| Mixing parameter applied during the iteration cycle", &
2118 dft_control%sccs_control%mixing
2119 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2120 "SCCS| Tolerance for the convergence of the SCCS iteration cycle", &
2121 dft_control%sccs_control%eps_sccs
2122 WRITE (unit=output_unit, fmt="(T2,A,T61,I20)") &
2123 "SCCS| Maximum number of iteration steps", &
2124 dft_control%sccs_control%max_iter
2125 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2126 "SCCS| SCF convergence threshold for starting the SCCS iteration", &
2127 dft_control%sccs_control%eps_scf
2128 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2129 "SCCS| Numerical increment for the cavity surface calculation", &
2130 dft_control%sccs_control%delta_rho
2131 END IF
2132
2133 WRITE (unit=output_unit, fmt="(A)") ""
2134
2135 END IF
2136
2137 IF (dft_control%hairy_probes .EQV. .true.) THEN
2138 n_rep = SIZE(dft_control%probe)
2139 IF (output_unit > 0) THEN
2140 DO i_rep = 1, n_rep
2141 WRITE (unit=output_unit, fmt="(T2,A,I5)") &
2142 "HP | hair probe set", i_rep
2143 WRITE (unit=output_unit, fmt="(T2,A,T61,*(I5))") &
2144 "HP| atom indexes", &
2145 (dft_control%probe(i_rep)%atom_ids(i), i=1, dft_control%probe(i_rep)%natoms)
2146 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2147 "HP| potential", dft_control%probe(i_rep)%mu
2148 WRITE (unit=output_unit, fmt="(T2,A,T61,F20.2)") &
2149 "HP| temperature", dft_control%probe(i_rep)%T
2150 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2151 "HP| eps_hp", dft_control%probe(i_rep)%eps_hp
2152 END DO
2153 END IF
2154 END IF
2155
2156 CALL cp_print_key_finished_output(output_unit, logger, dft_section, &
2157 "PRINT%DFT_CONTROL_PARAMETERS")
2158
2159 CALL timestop(handle)
2160
2161 END SUBROUTINE write_dft_control
2162
2163! **************************************************************************************************
2164!> \brief Write the ADMM control parameters to the output unit.
2165!> \param admm_control ...
2166!> \param dft_section ...
2167! **************************************************************************************************
2168 SUBROUTINE write_admm_control(admm_control, dft_section)
2169 TYPE(admm_control_type), POINTER :: admm_control
2170 TYPE(section_vals_type), POINTER :: dft_section
2171
2172 INTEGER :: iounit
2173 TYPE(cp_logger_type), POINTER :: logger
2174
2175 NULLIFY (logger)
2176 logger => cp_get_default_logger()
2177
2178 iounit = cp_print_key_unit_nr(logger, dft_section, &
2179 "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
2180
2181 IF (iounit > 0) THEN
2182
2183 SELECT CASE (admm_control%admm_type)
2184 CASE (no_admm_type)
2185 WRITE (unit=iounit, fmt="(/,T2,A,T77,A)") "ADMM| Specific ADMM type specified", "NONE"
2186 CASE (admm1_type)
2187 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM1"
2188 CASE (admm2_type)
2189 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM2"
2190 CASE (admms_type)
2191 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMS"
2192 CASE (admmp_type)
2193 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMP"
2194 CASE (admmq_type)
2195 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMQ"
2196 CASE DEFAULT
2197 cpabort("admm_type")
2198 END SELECT
2199
2200 SELECT CASE (admm_control%purification_method)
2201 CASE (do_admm_purify_none)
2202 WRITE (unit=iounit, fmt="(T2,A,T77,A)") "ADMM| Density matrix purification method", "NONE"
2204 WRITE (unit=iounit, fmt="(T2,A,T75,A)") "ADMM| Density matrix purification method", "Cauchy"
2206 WRITE (unit=iounit, fmt="(T2,A,T66,A)") "ADMM| Density matrix purification method", "Cauchy subspace"
2208 WRITE (unit=iounit, fmt="(T2,A,T63,A)") "ADMM| Density matrix purification method", "MO diagonalization"
2210 WRITE (unit=iounit, fmt="(T2,A,T71,A)") "ADMM| Density matrix purification method", "MO no diag"
2212 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Density matrix purification method", "McWeeny"
2214 WRITE (unit=iounit, fmt="(T2,A,T73,A)") "ADMM| Density matrix purification method", "NONE(DM)"
2215 CASE DEFAULT
2216 cpabort("admm_purification_method")
2217 END SELECT
2218
2219 SELECT CASE (admm_control%method)
2221 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Orbital projection on ADMM basis"
2223 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Blocked Fock matrix projection with full purification"
2225 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Blocked Fock matrix projection"
2227 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Orbital projection with charge constrain"
2228 CASE DEFAULT
2229 cpabort("admm method")
2230 END SELECT
2231
2232 SELECT CASE (admm_control%scaling_model)
2235 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Use Merlot (2014) scaling model"
2236 CASE DEFAULT
2237 cpabort("admm scaling_model")
2238 END SELECT
2239
2240 WRITE (unit=iounit, fmt="(T2,A,T61,G20.10)") "ADMM| eps_filter", admm_control%eps_filter
2241
2242 SELECT CASE (admm_control%aux_exch_func)
2244 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| No exchange functional correction term used"
2246 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "(W)PBEX"
2248 WRITE (unit=iounit, fmt="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "PBEX"
2250 WRITE (unit=iounit, fmt="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "OPTX"
2252 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "Becke88"
2254 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "SlaterX"
2255 CASE DEFAULT
2256 cpabort("admm aux_exch_func")
2257 END SELECT
2258
2259 WRITE (unit=iounit, fmt="(A)") ""
2260
2261 END IF
2262
2263 CALL cp_print_key_finished_output(iounit, logger, dft_section, &
2264 "PRINT%DFT_CONTROL_PARAMETERS")
2265 END SUBROUTINE write_admm_control
2266
2267! **************************************************************************************************
2268!> \brief Write the xTB control parameters to the output unit.
2269!> \param xtb_control ...
2270!> \param dft_section ...
2271! **************************************************************************************************
2272 SUBROUTINE write_xtb_control(xtb_control, dft_section)
2273 TYPE(xtb_control_type), POINTER :: xtb_control
2274 TYPE(section_vals_type), POINTER :: dft_section
2275
2276 CHARACTER(len=*), PARAMETER :: routinen = 'write_xtb_control'
2277
2278 INTEGER :: handle, output_unit
2279 TYPE(cp_logger_type), POINTER :: logger
2280
2281 CALL timeset(routinen, handle)
2282 NULLIFY (logger)
2283 logger => cp_get_default_logger()
2284
2285 output_unit = cp_print_key_unit_nr(logger, dft_section, &
2286 "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
2287
2288 IF (output_unit > 0) THEN
2289
2290 WRITE (unit=output_unit, fmt="(/,T2,A,T31,A50)") &
2291 "xTB| Parameter file", adjustr(trim(xtb_control%parameter_file_name))
2292 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2293 "xTB| Basis expansion STO-NG", xtb_control%sto_ng
2294 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2295 "xTB| Basis expansion STO-NG for Hydrogen", xtb_control%h_sto_ng
2296 WRITE (unit=output_unit, fmt="(T2,A,T71,E10.4)") &
2297 "xTB| Repulsive pair potential accuracy", xtb_control%eps_pair
2298 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.6)") &
2299 "xTB| Repulsive enhancement factor", xtb_control%enscale
2300 WRITE (unit=output_unit, fmt="(T2,A,T71,L10)") &
2301 "xTB| Halogen interaction potential", xtb_control%xb_interaction
2302 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2303 "xTB| Halogen interaction potential cutoff radius", xtb_control%xb_radius
2304 WRITE (unit=output_unit, fmt="(T2,A,T71,L10)") &
2305 "xTB| Nonbonded interactions", xtb_control%do_nonbonded
2306 SELECT CASE (xtb_control%vdw_type)
2307 CASE (xtb_vdw_type_none)
2308 WRITE (unit=output_unit, fmt="(T2,A)") "xTB| No vdW potential selected"
2309 CASE (xtb_vdw_type_d3)
2310 WRITE (unit=output_unit, fmt="(T2,A,T72,A)") "xTB| vdW potential type:", "DFTD3(BJ)"
2311 WRITE (unit=output_unit, fmt="(T2,A,T31,A50)") &
2312 "xTB| D3 Dispersion: Parameter file", adjustr(trim(xtb_control%dispersion_parameter_file))
2313 CASE (xtb_vdw_type_d4)
2314 WRITE (unit=output_unit, fmt="(T2,A,T76,A)") "xTB| vdW potential type:", "DFTD4"
2315 WRITE (unit=output_unit, fmt="(T2,A,T31,A50)") &
2316 "xTB| D4 Dispersion: Parameter file", adjustr(trim(xtb_control%dispersion_parameter_file))
2317 CASE DEFAULT
2318 cpabort("vdw type")
2319 END SELECT
2320 WRITE (unit=output_unit, fmt="(T2,A,T51,3F10.3)") &
2321 "xTB| Huckel constants ks kp kd", xtb_control%ks, xtb_control%kp, xtb_control%kd
2322 WRITE (unit=output_unit, fmt="(T2,A,T61,2F10.3)") &
2323 "xTB| Huckel constants ksp k2sh", xtb_control%ksp, xtb_control%k2sh
2324 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2325 "xTB| Mataga-Nishimoto exponent", xtb_control%kg
2326 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2327 "xTB| Repulsion potential exponent", xtb_control%kf
2328 WRITE (unit=output_unit, fmt="(T2,A,T51,3F10.3)") &
2329 "xTB| Coordination number scaling kcn(s) kcn(p) kcn(d)", &
2330 xtb_control%kcns, xtb_control%kcnp, xtb_control%kcnd
2331 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2332 "xTB| Electronegativity scaling", xtb_control%ken
2333 WRITE (unit=output_unit, fmt="(T2,A,T61,2F10.3)") &
2334 "xTB| Halogen potential scaling kxr kx2", xtb_control%kxr, xtb_control%kx2
2335 WRITE (unit=output_unit, fmt="(/)")
2336
2337 END IF
2338
2339 CALL cp_print_key_finished_output(output_unit, logger, dft_section, &
2340 "PRINT%DFT_CONTROL_PARAMETERS")
2341
2342 CALL timestop(handle)
2343
2344 END SUBROUTINE write_xtb_control
2345
2346! **************************************************************************************************
2347!> \brief Purpose: Write the QS control parameters to the output unit.
2348!> \param qs_control ...
2349!> \param dft_section ...
2350! **************************************************************************************************
2351 SUBROUTINE write_qs_control(qs_control, dft_section)
2352 TYPE(qs_control_type), INTENT(IN) :: qs_control
2353 TYPE(section_vals_type), POINTER :: dft_section
2354
2355 CHARACTER(len=*), PARAMETER :: routinen = 'write_qs_control'
2356
2357 CHARACTER(len=20) :: method, quadrature
2358 INTEGER :: handle, i, igrid_level, ngrid_level, &
2359 output_unit
2360 TYPE(cp_logger_type), POINTER :: logger
2361 TYPE(ddapc_restraint_type), POINTER :: ddapc_restraint_control
2362 TYPE(enumeration_type), POINTER :: enum
2363 TYPE(keyword_type), POINTER :: keyword
2364 TYPE(section_type), POINTER :: qs_section
2365 TYPE(section_vals_type), POINTER :: print_section_vals, qs_section_vals
2366
2367 IF (qs_control%semi_empirical) RETURN
2368 IF (qs_control%dftb) RETURN
2369 IF (qs_control%xtb) RETURN
2370 CALL timeset(routinen, handle)
2371 NULLIFY (logger, print_section_vals, qs_section, qs_section_vals)
2372 logger => cp_get_default_logger()
2373 print_section_vals => section_vals_get_subs_vals(dft_section, "PRINT")
2374 qs_section_vals => section_vals_get_subs_vals(dft_section, "QS")
2375 CALL section_vals_get(qs_section_vals, section=qs_section)
2376
2377 NULLIFY (enum, keyword)
2378 keyword => section_get_keyword(qs_section, "METHOD")
2379 CALL keyword_get(keyword, enum=enum)
2380 method = trim(enum_i2c(enum, qs_control%method_id))
2381
2382 NULLIFY (enum, keyword)
2383 keyword => section_get_keyword(qs_section, "QUADRATURE")
2384 CALL keyword_get(keyword, enum=enum)
2385 quadrature = trim(enum_i2c(enum, qs_control%gapw_control%quadrature))
2386
2387 output_unit = cp_print_key_unit_nr(logger, print_section_vals, &
2388 "DFT_CONTROL_PARAMETERS", extension=".Log")
2389 IF (output_unit > 0) THEN
2390 ngrid_level = SIZE(qs_control%e_cutoff)
2391 WRITE (unit=output_unit, fmt="(/,T2,A,T61,A20)") &
2392 "QS| Method:", adjustr(method)
2393 IF (qs_control%pw_grid_opt%spherical) THEN
2394 WRITE (unit=output_unit, fmt="(T2,A,T61,A)") &
2395 "QS| Density plane wave grid type", " SPHERICAL HALFSPACE"
2396 ELSE IF (qs_control%pw_grid_opt%fullspace) THEN
2397 WRITE (unit=output_unit, fmt="(T2,A,T57,A)") &
2398 "QS| Density plane wave grid type", " NON-SPHERICAL FULLSPACE"
2399 ELSE
2400 WRITE (unit=output_unit, fmt="(T2,A,T57,A)") &
2401 "QS| Density plane wave grid type", " NON-SPHERICAL HALFSPACE"
2402 END IF
2403 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2404 "QS| Number of grid levels:", SIZE(qs_control%e_cutoff)
2405 IF (ngrid_level == 1) THEN
2406 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2407 "QS| Density cutoff [a.u.]:", qs_control%e_cutoff(1)
2408 ELSE
2409 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2410 "QS| Density cutoff [a.u.]:", qs_control%cutoff
2411 IF (qs_control%commensurate_mgrids) &
2412 WRITE (unit=output_unit, fmt="(T2,A)") "QS| Using commensurate multigrids"
2413 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2414 "QS| Multi grid cutoff [a.u.]: 1) grid level", qs_control%e_cutoff(1)
2415 WRITE (unit=output_unit, fmt="(T2,A,I3,A,T71,F10.1)") &
2416 ("QS| ", igrid_level, ") grid level", &
2417 qs_control%e_cutoff(igrid_level), &
2418 igrid_level=2, SIZE(qs_control%e_cutoff))
2419 END IF
2420 IF (qs_control%pao) THEN
2421 WRITE (unit=output_unit, fmt="(T2,A)") "QS| PAO active"
2422 END IF
2423 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2424 "QS| Grid level progression factor:", qs_control%progression_factor
2425 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2426 "QS| Relative density cutoff [a.u.]:", qs_control%relative_cutoff
2427 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2428 "QS| Interaction thresholds: eps_pgf_orb:", &
2429 qs_control%eps_pgf_orb, &
2430 "QS| eps_filter_matrix:", &
2431 qs_control%eps_filter_matrix, &
2432 "QS| eps_core_charge:", &
2433 qs_control%eps_core_charge, &
2434 "QS| eps_rho_gspace:", &
2435 qs_control%eps_rho_gspace, &
2436 "QS| eps_rho_rspace:", &
2437 qs_control%eps_rho_rspace, &
2438 "QS| eps_gvg_rspace:", &
2439 qs_control%eps_gvg_rspace, &
2440 "QS| eps_ppl:", &
2441 qs_control%eps_ppl, &
2442 "QS| eps_ppnl:", &
2443 qs_control%eps_ppnl
2444 IF (qs_control%gapw) THEN
2445 SELECT CASE (qs_control%gapw_control%basis_1c)
2446 CASE (gapw_1c_orb)
2447 WRITE (unit=output_unit, fmt="(T2,A)") &
2448 "QS| GAPW| One center basis from orbital basis primitives"
2449 CASE (gapw_1c_small)
2450 WRITE (unit=output_unit, fmt="(T2,A)") &
2451 "QS| GAPW| One center basis extended with primitives (small:s)"
2452 CASE (gapw_1c_medium)
2453 WRITE (unit=output_unit, fmt="(T2,A)") &
2454 "QS| GAPW| One center basis extended with primitives (medium:sp)"
2455 CASE (gapw_1c_large)
2456 WRITE (unit=output_unit, fmt="(T2,A)") &
2457 "QS| GAPW| One center basis extended with primitives (large:spd)"
2458 CASE (gapw_1c_very_large)
2459 WRITE (unit=output_unit, fmt="(T2,A)") &
2460 "QS| GAPW| One center basis extended with primitives (very large:spdf)"
2461 CASE DEFAULT
2462 cpabort("basis_1c incorrect")
2463 END SELECT
2464 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2465 "QS| GAPW| eps_fit:", &
2466 qs_control%gapw_control%eps_fit, &
2467 "QS| GAPW| eps_iso:", &
2468 qs_control%gapw_control%eps_iso, &
2469 "QS| GAPW| eps_svd:", &
2470 qs_control%gapw_control%eps_svd, &
2471 "QS| GAPW| eps_cpc:", &
2472 qs_control%gapw_control%eps_cpc
2473 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2474 "QS| GAPW| atom-r-grid: quadrature:", &
2475 adjustr(quadrature)
2476 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2477 "QS| GAPW| atom-s-grid: max l :", &
2478 qs_control%gapw_control%lmax_sphere, &
2479 "QS| GAPW| max_l_rho0 :", &
2480 qs_control%gapw_control%lmax_rho0
2481 IF (qs_control%gapw_control%non_paw_atoms) THEN
2482 WRITE (unit=output_unit, fmt="(T2,A)") &
2483 "QS| GAPW| At least one kind is NOT PAW, i.e. it has only soft AO "
2484 END IF
2485 IF (qs_control%gapw_control%nopaw_as_gpw) THEN
2486 WRITE (unit=output_unit, fmt="(T2,A)") &
2487 "QS| GAPW| The NOT PAW atoms are treated fully GPW"
2488 END IF
2489 END IF
2490 IF (qs_control%gapw_xc) THEN
2491 SELECT CASE (qs_control%gapw_control%basis_1c)
2492 CASE (gapw_1c_orb)
2493 WRITE (unit=output_unit, fmt="(T2,A)") &
2494 "QS| GAPW_XC| One center basis from orbital basis primitives"
2495 CASE (gapw_1c_small)
2496 WRITE (unit=output_unit, fmt="(T2,A)") &
2497 "QS| GAPW_XC| One center basis extended with primitives (small:s)"
2498 CASE (gapw_1c_medium)
2499 WRITE (unit=output_unit, fmt="(T2,A)") &
2500 "QS| GAPW_XC| One center basis extended with primitives (medium:sp)"
2501 CASE (gapw_1c_large)
2502 WRITE (unit=output_unit, fmt="(T2,A)") &
2503 "QS| GAPW_XC| One center basis extended with primitives (large:spd)"
2504 CASE (gapw_1c_very_large)
2505 WRITE (unit=output_unit, fmt="(T2,A)") &
2506 "QS| GAPW_XC| One center basis extended with primitives (very large:spdf)"
2507 CASE DEFAULT
2508 cpabort("basis_1c incorrect")
2509 END SELECT
2510 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2511 "QS| GAPW_XC| eps_fit:", &
2512 qs_control%gapw_control%eps_fit, &
2513 "QS| GAPW_XC| eps_iso:", &
2514 qs_control%gapw_control%eps_iso, &
2515 "QS| GAPW_XC| eps_svd:", &
2516 qs_control%gapw_control%eps_svd
2517 WRITE (unit=output_unit, fmt="(T2,A,T55,A30)") &
2518 "QS| GAPW_XC|atom-r-grid: quadrature:", &
2519 enum_i2c(enum, qs_control%gapw_control%quadrature)
2520 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2521 "QS| GAPW_XC| atom-s-grid: max l :", &
2522 qs_control%gapw_control%lmax_sphere
2523 END IF
2524 IF (qs_control%mulliken_restraint) THEN
2525 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2526 "QS| Mulliken restraint target", qs_control%mulliken_restraint_control%target
2527 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2528 "QS| Mulliken restraint strength", qs_control%mulliken_restraint_control%strength
2529 WRITE (unit=output_unit, fmt="(T2,A,T73,I8)") &
2530 "QS| Mulliken restraint atoms: ", qs_control%mulliken_restraint_control%natoms
2531 WRITE (unit=output_unit, fmt="(5I8)") qs_control%mulliken_restraint_control%atoms
2532 END IF
2533 IF (qs_control%ddapc_restraint) THEN
2534 DO i = 1, SIZE(qs_control%ddapc_restraint_control)
2535 ddapc_restraint_control => qs_control%ddapc_restraint_control(i)
2536 IF (SIZE(qs_control%ddapc_restraint_control) > 1) &
2537 WRITE (unit=output_unit, fmt="(T2,A,T3,I8)") &
2538 "QS| parameters for DDAPC restraint number", i
2539 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2540 "QS| ddapc restraint target", ddapc_restraint_control%target
2541 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2542 "QS| ddapc restraint strength", ddapc_restraint_control%strength
2543 WRITE (unit=output_unit, fmt="(T2,A,T73,I8)") &
2544 "QS| ddapc restraint atoms: ", ddapc_restraint_control%natoms
2545 WRITE (unit=output_unit, fmt="(5I8)") ddapc_restraint_control%atoms
2546 WRITE (unit=output_unit, fmt="(T2,A)") "Coefficients:"
2547 WRITE (unit=output_unit, fmt="(5F6.2)") ddapc_restraint_control%coeff
2548 SELECT CASE (ddapc_restraint_control%functional_form)
2549 CASE (do_ddapc_restraint)
2550 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2551 "QS| ddapc restraint functional form :", "RESTRAINT"
2552 CASE (do_ddapc_constraint)
2553 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2554 "QS| ddapc restraint functional form :", "CONSTRAINT"
2555 CASE DEFAULT
2556 cpabort("Unknown ddapc restraint")
2557 END SELECT
2558 END DO
2559 END IF
2560 IF (qs_control%s2_restraint) THEN
2561 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2562 "QS| s2 restraint target", qs_control%s2_restraint_control%target
2563 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2564 "QS| s2 restraint strength", qs_control%s2_restraint_control%strength
2565 SELECT CASE (qs_control%s2_restraint_control%functional_form)
2566 CASE (do_s2_restraint)
2567 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2568 "QS| s2 restraint functional form :", "RESTRAINT"
2569 cpabort("Not yet implemented")
2570 CASE (do_s2_constraint)
2571 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2572 "QS| s2 restraint functional form :", "CONSTRAINT"
2573 CASE DEFAULT
2574 cpabort("Unknown ddapc restraint")
2575 END SELECT
2576 END IF
2577 END IF
2578 CALL cp_print_key_finished_output(output_unit, logger, print_section_vals, &
2579 "DFT_CONTROL_PARAMETERS")
2580
2581 CALL timestop(handle)
2582
2583 END SUBROUTINE write_qs_control
2584
2585! **************************************************************************************************
2586!> \brief reads the input parameters needed for ddapc.
2587!> \param qs_control ...
2588!> \param qs_section ...
2589!> \param ddapc_restraint_section ...
2590!> \author fschiff
2591!> \note
2592!> either reads DFT%QS%DDAPC_RESTRAINT or PROPERTIES%ET_coupling
2593!> if(qs_section is present the DFT part is read, if ddapc_restraint_section
2594!> is present ET_COUPLING is read. Avoid having both!!!
2595! **************************************************************************************************
2596 SUBROUTINE read_ddapc_section(qs_control, qs_section, ddapc_restraint_section)
2597
2598 TYPE(qs_control_type), INTENT(INOUT) :: qs_control
2599 TYPE(section_vals_type), OPTIONAL, POINTER :: qs_section, ddapc_restraint_section
2600
2601 INTEGER :: i, j, jj, k, n_rep
2602 INTEGER, DIMENSION(:), POINTER :: tmplist
2603 REAL(kind=dp), DIMENSION(:), POINTER :: rtmplist
2604 TYPE(ddapc_restraint_type), POINTER :: ddapc_restraint_control
2605 TYPE(section_vals_type), POINTER :: ddapc_section
2606
2607 IF (PRESENT(ddapc_restraint_section)) THEN
2608 IF (ASSOCIATED(qs_control%ddapc_restraint_control)) THEN
2609 IF (SIZE(qs_control%ddapc_restraint_control) >= 2) &
2610 cpabort("ET_COUPLING cannot be used in combination with a normal restraint")
2611 ELSE
2612 ddapc_section => ddapc_restraint_section
2613 ALLOCATE (qs_control%ddapc_restraint_control(1))
2614 END IF
2615 END IF
2616
2617 IF (PRESENT(qs_section)) THEN
2618 NULLIFY (ddapc_section)
2619 ddapc_section => section_vals_get_subs_vals(qs_section, &
2620 "DDAPC_RESTRAINT")
2621 END IF
2622
2623 DO i = 1, SIZE(qs_control%ddapc_restraint_control)
2624
2625 CALL ddapc_control_create(qs_control%ddapc_restraint_control(i))
2626 ddapc_restraint_control => qs_control%ddapc_restraint_control(i)
2627
2628 CALL section_vals_val_get(ddapc_section, "STRENGTH", i_rep_section=i, &
2629 r_val=ddapc_restraint_control%strength)
2630 CALL section_vals_val_get(ddapc_section, "TARGET", i_rep_section=i, &
2631 r_val=ddapc_restraint_control%target)
2632 CALL section_vals_val_get(ddapc_section, "FUNCTIONAL_FORM", i_rep_section=i, &
2633 i_val=ddapc_restraint_control%functional_form)
2634 CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
2635 n_rep_val=n_rep)
2636 CALL section_vals_val_get(ddapc_section, "TYPE_OF_DENSITY", i_rep_section=i, &
2637 i_val=ddapc_restraint_control%density_type)
2638
2639 jj = 0
2640 DO k = 1, n_rep
2641 CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
2642 i_rep_val=k, i_vals=tmplist)
2643 DO j = 1, SIZE(tmplist)
2644 jj = jj + 1
2645 END DO
2646 END DO
2647 IF (jj < 1) cpabort("Need at least 1 atom to use ddapc constraints")
2648 ddapc_restraint_control%natoms = jj
2649 IF (ASSOCIATED(ddapc_restraint_control%atoms)) &
2650 DEALLOCATE (ddapc_restraint_control%atoms)
2651 ALLOCATE (ddapc_restraint_control%atoms(ddapc_restraint_control%natoms))
2652 jj = 0
2653 DO k = 1, n_rep
2654 CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
2655 i_rep_val=k, i_vals=tmplist)
2656 DO j = 1, SIZE(tmplist)
2657 jj = jj + 1
2658 ddapc_restraint_control%atoms(jj) = tmplist(j)
2659 END DO
2660 END DO
2661
2662 IF (ASSOCIATED(ddapc_restraint_control%coeff)) &
2663 DEALLOCATE (ddapc_restraint_control%coeff)
2664 ALLOCATE (ddapc_restraint_control%coeff(ddapc_restraint_control%natoms))
2665 ddapc_restraint_control%coeff = 1.0_dp
2666
2667 CALL section_vals_val_get(ddapc_section, "COEFF", i_rep_section=i, &
2668 n_rep_val=n_rep)
2669 jj = 0
2670 DO k = 1, n_rep
2671 CALL section_vals_val_get(ddapc_section, "COEFF", i_rep_section=i, &
2672 i_rep_val=k, r_vals=rtmplist)
2673 DO j = 1, SIZE(rtmplist)
2674 jj = jj + 1
2675 IF (jj > ddapc_restraint_control%natoms) &
2676 cpabort("Need the same number of coeff as there are atoms ")
2677 ddapc_restraint_control%coeff(jj) = rtmplist(j)
2678 END DO
2679 END DO
2680 IF (jj < ddapc_restraint_control%natoms .AND. jj /= 0) &
2681 cpabort("Need no or the same number of coeff as there are atoms.")
2682 END DO
2683 k = 0
2684 DO i = 1, SIZE(qs_control%ddapc_restraint_control)
2685 IF (qs_control%ddapc_restraint_control(i)%functional_form == &
2686 do_ddapc_constraint) k = k + 1
2687 END DO
2688 IF (k == 2) CALL cp_abort(__location__, &
2689 "Only a single constraint possible yet, try to use restraints instead ")
2690
2691 END SUBROUTINE read_ddapc_section
2692
2693! **************************************************************************************************
2694!> \brief ...
2695!> \param dft_control ...
2696!> \param efield_section ...
2697! **************************************************************************************************
2698 SUBROUTINE read_efield_sections(dft_control, efield_section)
2699 TYPE(dft_control_type), POINTER :: dft_control
2700 TYPE(section_vals_type), POINTER :: efield_section
2701
2702 CHARACTER(len=default_path_length) :: file_name
2703 INTEGER :: i, io, j, n, unit_nr
2704 REAL(kind=dp), DIMENSION(:), POINTER :: tmp_vals
2705 TYPE(efield_type), POINTER :: efield
2706 TYPE(section_vals_type), POINTER :: tmp_section
2707
2708 DO i = 1, SIZE(dft_control%efield_fields)
2709 NULLIFY (dft_control%efield_fields(i)%efield)
2710 ALLOCATE (dft_control%efield_fields(i)%efield)
2711 efield => dft_control%efield_fields(i)%efield
2712 NULLIFY (efield%envelop_i_vars, efield%envelop_r_vars)
2713 CALL section_vals_val_get(efield_section, "INTENSITY", i_rep_section=i, &
2714 r_val=efield%strength)
2715
2716 CALL section_vals_val_get(efield_section, "POLARISATION", i_rep_section=i, &
2717 r_vals=tmp_vals)
2718 ALLOCATE (efield%polarisation(SIZE(tmp_vals)))
2719 efield%polarisation = tmp_vals
2720 CALL section_vals_val_get(efield_section, "PHASE", i_rep_section=i, &
2721 r_val=efield%phase_offset)
2722 CALL section_vals_val_get(efield_section, "ENVELOP", i_rep_section=i, &
2723 i_val=efield%envelop_id)
2724 CALL section_vals_val_get(efield_section, "WAVELENGTH", i_rep_section=i, &
2725 r_val=efield%wavelength)
2726 CALL section_vals_val_get(efield_section, "VEC_POT_INITIAL", i_rep_section=i, &
2727 r_vals=tmp_vals)
2728 efield%vec_pot_initial = tmp_vals
2729
2730 IF (efield%envelop_id == constant_env) THEN
2731 ALLOCATE (efield%envelop_i_vars(2))
2732 tmp_section => section_vals_get_subs_vals(efield_section, "CONSTANT_ENV", i_rep_section=i)
2733 CALL section_vals_val_get(tmp_section, "START_STEP", &
2734 i_val=efield%envelop_i_vars(1))
2735 CALL section_vals_val_get(tmp_section, "END_STEP", &
2736 i_val=efield%envelop_i_vars(2))
2737 ELSE IF (efield%envelop_id == gaussian_env) THEN
2738 ALLOCATE (efield%envelop_r_vars(2))
2739 tmp_section => section_vals_get_subs_vals(efield_section, "GAUSSIAN_ENV", i_rep_section=i)
2740 CALL section_vals_val_get(tmp_section, "T0", &
2741 r_val=efield%envelop_r_vars(1))
2742 CALL section_vals_val_get(tmp_section, "SIGMA", &
2743 r_val=efield%envelop_r_vars(2))
2744 ELSE IF (efield%envelop_id == ramp_env) THEN
2745 ALLOCATE (efield%envelop_i_vars(4))
2746 tmp_section => section_vals_get_subs_vals(efield_section, "RAMP_ENV", i_rep_section=i)
2747 CALL section_vals_val_get(tmp_section, "START_STEP_IN", &
2748 i_val=efield%envelop_i_vars(1))
2749 CALL section_vals_val_get(tmp_section, "END_STEP_IN", &
2750 i_val=efield%envelop_i_vars(2))
2751 CALL section_vals_val_get(tmp_section, "START_STEP_OUT", &
2752 i_val=efield%envelop_i_vars(3))
2753 CALL section_vals_val_get(tmp_section, "END_STEP_OUT", &
2754 i_val=efield%envelop_i_vars(4))
2755 ELSE IF (efield%envelop_id == custom_env) THEN
2756 tmp_section => section_vals_get_subs_vals(efield_section, "CUSTOM_ENV", i_rep_section=i)
2757 CALL section_vals_val_get(tmp_section, "EFIELD_FILE_NAME", c_val=file_name)
2758 CALL open_file(file_name=trim(file_name), file_action="READ", file_status="OLD", unit_number=unit_nr)
2759 !Determine the number of lines in file
2760 n = 0
2761 DO WHILE (.true.)
2762 READ (unit_nr, *, iostat=io)
2763 IF (io /= 0) EXIT
2764 n = n + 1
2765 END DO
2766 rewind(unit_nr)
2767 ALLOCATE (efield%envelop_r_vars(n + 1))
2768 !Store the timestep of the list in the first entry of the r_vars
2769 CALL section_vals_val_get(tmp_section, "TIMESTEP", r_val=efield%envelop_r_vars(1))
2770 !Read the file
2771 DO j = 2, n + 1
2772 READ (unit_nr, *) efield%envelop_r_vars(j)
2773 efield%envelop_r_vars(j) = cp_unit_to_cp2k(efield%envelop_r_vars(j), "volt/m")
2774 END DO
2775 CALL close_file(unit_nr)
2776 END IF
2777 END DO
2778 END SUBROUTINE read_efield_sections
2779
2780! **************************************************************************************************
2781!> \brief reads the input parameters needed real time propagation
2782!> \param dft_control ...
2783!> \param rtp_section ...
2784!> \author fschiff
2785! **************************************************************************************************
2786 SUBROUTINE read_rtp_section(dft_control, rtp_section)
2787
2788 TYPE(dft_control_type), INTENT(INOUT) :: dft_control
2789 TYPE(section_vals_type), POINTER :: rtp_section
2790
2791 INTEGER :: i, j, n_elems
2792 INTEGER, DIMENSION(:), POINTER :: tmp
2793 LOGICAL :: is_present, local_moment_possible
2794 TYPE(section_vals_type), POINTER :: proj_mo_section, subsection
2795
2796 ALLOCATE (dft_control%rtp_control)
2797 CALL section_vals_val_get(rtp_section, "MAX_ITER", &
2798 i_val=dft_control%rtp_control%max_iter)
2799 CALL section_vals_val_get(rtp_section, "MAT_EXP", &
2800 i_val=dft_control%rtp_control%mat_exp)
2801 CALL section_vals_val_get(rtp_section, "ASPC_ORDER", &
2802 i_val=dft_control%rtp_control%aspc_order)
2803 CALL section_vals_val_get(rtp_section, "EXP_ACCURACY", &
2804 r_val=dft_control%rtp_control%eps_exp)
2805 CALL section_vals_val_get(rtp_section, "RTBSE%_SECTION_PARAMETERS_", &
2806 i_val=dft_control%rtp_control%rtp_method)
2807 CALL section_vals_val_get(rtp_section, "RTBSE%RTBSE_HAMILTONIAN", &
2808 i_val=dft_control%rtp_control%rtbse_ham)
2809 CALL section_vals_val_get(rtp_section, "PROPAGATOR", &
2810 i_val=dft_control%rtp_control%propagator)
2811 CALL section_vals_val_get(rtp_section, "EPS_ITER", &
2812 r_val=dft_control%rtp_control%eps_ener)
2813 CALL section_vals_val_get(rtp_section, "INITIAL_WFN", &
2814 i_val=dft_control%rtp_control%initial_wfn)
2815 CALL section_vals_val_get(rtp_section, "HFX_BALANCE_IN_CORE", &
2816 l_val=dft_control%rtp_control%hfx_redistribute)
2817 CALL section_vals_val_get(rtp_section, "APPLY_WFN_MIX_INIT_RESTART", &
2818 l_val=dft_control%rtp_control%apply_wfn_mix_init_restart)
2819 CALL section_vals_val_get(rtp_section, "APPLY_DELTA_PULSE", &
2820 l_val=dft_control%rtp_control%apply_delta_pulse)
2821 CALL section_vals_val_get(rtp_section, "APPLY_DELTA_PULSE_MAG", &
2822 l_val=dft_control%rtp_control%apply_delta_pulse_mag)
2823 CALL section_vals_val_get(rtp_section, "VELOCITY_GAUGE", &
2824 l_val=dft_control%rtp_control%velocity_gauge)
2825 CALL section_vals_val_get(rtp_section, "VG_COM_NL", &
2826 l_val=dft_control%rtp_control%nl_gauge_transform)
2827 CALL section_vals_val_get(rtp_section, "PERIODIC", &
2828 l_val=dft_control%rtp_control%periodic)
2829 CALL section_vals_val_get(rtp_section, "DENSITY_PROPAGATION", &
2830 l_val=dft_control%rtp_control%linear_scaling)
2831 CALL section_vals_val_get(rtp_section, "MCWEENY_MAX_ITER", &
2832 i_val=dft_control%rtp_control%mcweeny_max_iter)
2833 CALL section_vals_val_get(rtp_section, "ACCURACY_REFINEMENT", &
2834 i_val=dft_control%rtp_control%acc_ref)
2835 CALL section_vals_val_get(rtp_section, "MCWEENY_EPS", &
2836 r_val=dft_control%rtp_control%mcweeny_eps)
2837 CALL section_vals_val_get(rtp_section, "DELTA_PULSE_SCALE", &
2838 r_val=dft_control%rtp_control%delta_pulse_scale)
2839 CALL section_vals_val_get(rtp_section, "DELTA_PULSE_DIRECTION", &
2840 i_vals=tmp)
2841 dft_control%rtp_control%delta_pulse_direction = tmp
2842 CALL section_vals_val_get(rtp_section, "SC_CHECK_START", &
2843 i_val=dft_control%rtp_control%sc_check_start)
2844 proj_mo_section => section_vals_get_subs_vals(rtp_section, "PRINT%PROJECTION_MO")
2845 CALL section_vals_get(proj_mo_section, explicit=is_present)
2846 IF (is_present) THEN
2847 IF (dft_control%rtp_control%linear_scaling) &
2848 CALL cp_abort(__location__, &
2849 "You have defined a time dependent projection of mos, but "// &
2850 "only the density matrix is propagated (DENSITY_PROPAGATION "// &
2851 ".TRUE.). Please either use MO-based real time DFT or do not "// &
2852 "define any PRINT%PROJECTION_MO section")
2853 dft_control%rtp_control%is_proj_mo = .true.
2854 ELSE
2855 dft_control%rtp_control%is_proj_mo = .false.
2856 END IF
2857 ! Moment trace
2858 local_moment_possible = (dft_control%rtp_control%rtp_method == rtp_method_bse) .OR. &
2859 ((.NOT. dft_control%rtp_control%periodic) .AND. dft_control%rtp_control%linear_scaling)
2860 ! TODO : Implement for other moment operators
2861 subsection => section_vals_get_subs_vals(rtp_section, "PRINT%MOMENTS")
2862 CALL section_vals_get(subsection, explicit=is_present)
2863 ! Trigger the flag
2864 dft_control%rtp_control%save_local_moments = &
2865 is_present .OR. dft_control%rtp_control%save_local_moments
2866 IF (is_present .AND. (.NOT. local_moment_possible)) THEN
2867 CALL cp_abort(__location__, "Moments trace printing only "// &
2868 "implemented in non-periodic systems in linear scaling. "// &
2869 "Please use DFT%PRINT%MOMENTS for other printing.")
2870 END IF
2871 CALL section_vals_val_get(rtp_section, "PRINT%MOMENTS%REFERENCE", &
2872 i_val=dft_control%rtp_control%moment_trace_ref_type)
2873 CALL section_vals_val_get(rtp_section, "PRINT%MOMENTS%REFERENCE_POINT", &
2874 r_vals=dft_control%rtp_control%moment_trace_user_ref_point)
2875 ! Moment Fourier transform
2876 subsection => section_vals_get_subs_vals(rtp_section, "PRINT%MOMENTS_FT")
2877 CALL section_vals_get(subsection, explicit=is_present)
2878 ! Trigger the flag
2879 dft_control%rtp_control%save_local_moments = &
2880 is_present .OR. dft_control%rtp_control%save_local_moments
2881 IF (is_present .AND. (.NOT. local_moment_possible)) THEN
2882 ! Not implemented
2883 CALL cp_abort(__location__, "Moments Fourier transform printing "// &
2884 "implemented only for non-periodic systems in linear scaling.")
2885 END IF
2886 ! General FT settings
2887 CALL section_vals_val_get(rtp_section, "FT%DAMPING", &
2888 r_val=dft_control%rtp_control%ft_damping)
2889 CALL section_vals_val_get(rtp_section, "FT%START_TIME", &
2890 r_val=dft_control%rtp_control%ft_t0)
2891 ! Padé settings
2892 subsection => section_vals_get_subs_vals(rtp_section, "FT%PADE")
2893 CALL section_vals_val_get(subsection, "_SECTION_PARAMETERS_", &
2894 l_val=dft_control%rtp_control%pade_requested)
2895 CALL section_vals_val_get(subsection, "E_MIN", &
2896 r_val=dft_control%rtp_control%pade_e_min)
2897 CALL section_vals_val_get(subsection, "E_STEP", &
2898 r_val=dft_control%rtp_control%pade_e_step)
2899 CALL section_vals_val_get(subsection, "E_MAX", &
2900 r_val=dft_control%rtp_control%pade_e_max)
2901 CALL section_vals_val_get(subsection, "FIT_E_MIN", &
2902 r_val=dft_control%rtp_control%pade_fit_e_min)
2903 CALL section_vals_val_get(subsection, "FIT_E_MAX", &
2904 r_val=dft_control%rtp_control%pade_fit_e_max)
2905 ! If default settings used for fit_e_min/max, rewrite with appropriate values
2906 IF (dft_control%rtp_control%pade_fit_e_min < 0) THEN
2907 dft_control%rtp_control%pade_fit_e_min = dft_control%rtp_control%pade_e_min
2908 END IF
2909 IF (dft_control%rtp_control%pade_fit_e_max < 0) THEN
2910 dft_control%rtp_control%pade_fit_e_max = dft_control%rtp_control%pade_e_max
2911 END IF
2912 ! Polarizability settings
2913 subsection => section_vals_get_subs_vals(rtp_section, "PRINT%POLARIZABILITY")
2914 CALL section_vals_get(subsection, explicit=is_present)
2915 ! Trigger the flag
2916 dft_control%rtp_control%save_local_moments = &
2917 is_present .OR. dft_control%rtp_control%save_local_moments
2918 IF (is_present .AND. (.NOT. local_moment_possible)) THEN
2919 ! Not implemented
2920 CALL cp_abort(__location__, "Polarizability printing "// &
2921 "implemented only for non-periodic systems.")
2922 END IF
2923 CALL section_vals_val_get(subsection, "ELEMENT", explicit=is_present, n_rep_val=n_elems)
2924 NULLIFY (dft_control%rtp_control%print_pol_elements)
2925 IF (is_present) THEN
2926 ! Explicit list of elements
2927 ! Allocate the array
2928 ALLOCATE (dft_control%rtp_control%print_pol_elements(n_elems, 2))
2929 DO i = 1, n_elems
2930 CALL section_vals_val_get(subsection, "ELEMENT", i_vals=tmp, i_rep_val=i)
2931 dft_control%rtp_control%print_pol_elements(i, :) = tmp(:)
2932 END DO
2933 ! Do basic sanity checks for pol_element
2934 DO i = 1, n_elems
2935 DO j = 1, 2
2936 IF (dft_control%rtp_control%print_pol_elements(i, j) > 3 .OR. &
2937 dft_control%rtp_control%print_pol_elements(i, j) < 1) &
2938 cpabort("Polarisation tensor element not 1,2 or 3 in at least one index")
2939 END DO
2940 END DO
2941 END IF
2942
2943 ! Finally, allow printing of FT observables also in the case when they are not explicitly
2944 ! required, but they are available, i.e. non-periodic linear scaling calculation
2945 dft_control%rtp_control%save_local_moments = &
2946 dft_control%rtp_control%save_local_moments .OR. &
2947 ((.NOT. dft_control%rtp_control%periodic) .AND. dft_control%rtp_control%linear_scaling)
2948
2949 END SUBROUTINE read_rtp_section
2950! **************************************************************************************************
2951!> \brief Tries to guess the elements of polarization to print
2952!> \param dftc DFT parameters
2953!> \param elems 2D array, where the guessed element indeces are stored
2954!> \date 11.2025
2955!> \author Stepan Marek
2956! **************************************************************************************************
2957 SUBROUTINE guess_pol_elements(dftc, elems)
2958 TYPE(dft_control_type) :: dftc
2959 INTEGER, DIMENSION(:, :), POINTER :: elems
2960
2961 INTEGER :: i, i_nonzero, n_nonzero
2962 LOGICAL :: pol_vector_known
2963 REAL(kind=dp), DIMENSION(3) :: pol_vector
2964
2965 pol_vector_known = .false.
2966
2967 ! TODO : More relevant elements for magnetic pulse?
2968 IF (dftc%rtp_control%apply_delta_pulse .OR. dftc%rtp_control%apply_delta_pulse_mag) THEN
2969 pol_vector(:) = real(dftc%rtp_control%delta_pulse_direction(:), kind=dp)
2970 ELSE
2971 ! Maybe RT field is applied?
2972 pol_vector(:) = dftc%efield_fields(1)%efield%polarisation(:)
2973 END IF
2974 IF (dot_product(pol_vector, pol_vector) > 0.0_dp) pol_vector_known = .true.
2975
2976 IF (.NOT. pol_vector_known) THEN
2977 cpabort("Cannot guess polarization elements - please specify!")
2978 ELSE
2979 ! Check whether just one element is non-zero
2980 n_nonzero = 0
2981 DO i = 1, 3
2982 IF (pol_vector(i) /= 0.0_dp) THEN
2983 n_nonzero = n_nonzero + 1
2984 i_nonzero = i
2985 END IF
2986 END DO
2987 IF (n_nonzero > 1) THEN
2988 CALL cp_abort(__location__, &
2989 "More than one non-zero field elements - "// &
2990 "cannot guess polarizability elements - please specify!")
2991 ELSE IF (n_nonzero == 0) THEN
2992 CALL cp_abort(__location__, &
2993 "No non-zero field elements - "// &
2994 "cannot guess polarizability elements - please specify!")
2995 ELSE
2996 ! Clear guess can be made
2997 NULLIFY (elems)
2998 ALLOCATE (elems(3, 2))
2999 DO i = 1, 3
3000 elems(i, 1) = i
3001 elems(i, 2) = i_nonzero
3002 END DO
3003 END IF
3004 END IF
3005 END SUBROUTINE guess_pol_elements
3006
3007! **************************************************************************************************
3008!> \brief Parses the BLOCK_LIST keywords from the ADMM section
3009!> \param admm_control ...
3010!> \param dft_section ...
3011! **************************************************************************************************
3012 SUBROUTINE read_admm_block_list(admm_control, dft_section)
3013 TYPE(admm_control_type), POINTER :: admm_control
3014 TYPE(section_vals_type), POINTER :: dft_section
3015
3016 INTEGER :: irep, list_size, n_rep
3017 INTEGER, DIMENSION(:), POINTER :: tmplist
3018
3019 NULLIFY (tmplist)
3020
3021 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%BLOCK_LIST", &
3022 n_rep_val=n_rep)
3023
3024 ALLOCATE (admm_control%blocks(n_rep))
3025
3026 DO irep = 1, n_rep
3027 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%BLOCK_LIST", &
3028 i_rep_val=irep, i_vals=tmplist)
3029 list_size = SIZE(tmplist)
3030 ALLOCATE (admm_control%blocks(irep)%list(list_size))
3031 admm_control%blocks(irep)%list(:) = tmplist(:)
3032 END DO
3033
3034 END SUBROUTINE read_admm_block_list
3035
3036! **************************************************************************************************
3037!> \brief ...
3038!> \param dft_control ...
3039!> \param hairy_probes_section ...
3040!> \param
3041!> \param
3042! **************************************************************************************************
3043 SUBROUTINE read_hairy_probes_sections(dft_control, hairy_probes_section)
3044 TYPE(dft_control_type), POINTER :: dft_control
3045 TYPE(section_vals_type), POINTER :: hairy_probes_section
3046
3047 INTEGER :: i, j, jj, kk, n_rep
3048 INTEGER, DIMENSION(:), POINTER :: tmplist
3049
3050 DO i = 1, SIZE(dft_control%probe)
3051 NULLIFY (dft_control%probe(i)%atom_ids)
3052
3053 CALL section_vals_val_get(hairy_probes_section, "ATOM_IDS", i_rep_section=i, n_rep_val=n_rep)
3054 jj = 0
3055 DO kk = 1, n_rep
3056 CALL section_vals_val_get(hairy_probes_section, "ATOM_IDS", i_rep_section=i, i_rep_val=kk, i_vals=tmplist)
3057 jj = jj + SIZE(tmplist)
3058 END DO
3059
3060 dft_control%probe(i)%natoms = jj
3061 IF (dft_control%probe(i)%natoms < 1) &
3062 cpabort("Need at least 1 atom to use hair probes formalism")
3063 ALLOCATE (dft_control%probe(i)%atom_ids(dft_control%probe(i)%natoms))
3064
3065 jj = 0
3066 DO kk = 1, n_rep
3067 CALL section_vals_val_get(hairy_probes_section, "ATOM_IDS", i_rep_section=i, i_rep_val=kk, i_vals=tmplist)
3068 DO j = 1, SIZE(tmplist)
3069 jj = jj + 1
3070 dft_control%probe(i)%atom_ids(jj) = tmplist(j)
3071 END DO
3072 END DO
3073
3074 CALL section_vals_val_get(hairy_probes_section, "MU", i_rep_section=i, r_val=dft_control%probe(i)%mu)
3075
3076 CALL section_vals_val_get(hairy_probes_section, "T", i_rep_section=i, r_val=dft_control%probe(i)%T)
3077
3078 CALL section_vals_val_get(hairy_probes_section, "ALPHA", i_rep_section=i, r_val=dft_control%probe(i)%alpha)
3079
3080 CALL section_vals_val_get(hairy_probes_section, "eps_hp", i_rep_section=i, r_val=dft_control%probe(i)%eps_hp)
3081 END DO
3082
3083 END SUBROUTINE read_hairy_probes_sections
3084! **************************************************************************************************
3085
3086END 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, quip, nequip, allegro, 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