(git:d18deda)
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: &
17 cite_reference
18 USE cp_control_types, ONLY: &
22 USE cp_files, ONLY: close_file,&
33 USE cp_units, ONLY: cp_unit_from_cp2k,&
35 USE eeq_input, ONLY: read_eeq_param
37 USE input_constants, ONLY: &
66 USE input_section_types, ONLY: &
69 USE kinds, ONLY: default_path_length,&
71 dp
72 USE mathconstants, ONLY: fourpi
78 USE util, ONLY: sort
82 USE xc_write_output, ONLY: xc_write
83#include "./base/base_uses.f90"
84
85 IMPLICIT NONE
86
87 PRIVATE
88
89 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'cp_control_utils'
90
91 PUBLIC :: read_dft_control, &
99CONTAINS
100
101! **************************************************************************************************
102!> \brief ...
103!> \param dft_control ...
104!> \param dft_section ...
105! **************************************************************************************************
106 SUBROUTINE read_dft_control(dft_control, dft_section)
107 TYPE(dft_control_type), POINTER :: dft_control
108 TYPE(section_vals_type), POINTER :: dft_section
109
110 CHARACTER(len=default_path_length) :: basis_set_file_name, &
111 intensities_file_name, &
112 potential_file_name
113 CHARACTER(LEN=default_string_length), &
114 DIMENSION(:), POINTER :: tmpstringlist
115 INTEGER :: admmtype, irep, isize, method_id, nrep, &
116 xc_deriv_method_id
117 LOGICAL :: at_end, do_hfx, do_ot, do_rpa_admm, &
118 do_rtp, exopt1, exopt2, exopt3, &
119 explicit, is_present, l_param, not_se, &
120 was_present
121 REAL(kind=dp) :: density_cut, gradient_cut, tau_cut
122 REAL(kind=dp), DIMENSION(:), POINTER :: pol
123 TYPE(cp_logger_type), POINTER :: logger
124 TYPE(cp_parser_type) :: parser
125 TYPE(section_vals_type), POINTER :: hfx_section, maxwell_section, &
126 sccs_section, scf_section, &
127 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 ! check for the presence of the low spin roks section
400 tmp_section => section_vals_get_subs_vals(dft_section, "LOW_SPIN_ROKS")
401 CALL section_vals_get(tmp_section, explicit=dft_control%low_spin_roks)
402
403 dft_control%sic_method_id = sic_none
404 dft_control%sic_scaling_a = 1.0_dp
405 dft_control%sic_scaling_b = 1.0_dp
406
407 ! DFT+U
408 dft_control%dft_plus_u = .false.
409 CALL section_vals_val_get(dft_section, "PLUS_U_METHOD", i_val=method_id)
410 dft_control%plus_u_method_id = method_id
411
412 ! Smearing in use
413 dft_control%smear = .false.
414
415 ! Surface dipole correction
416 dft_control%correct_surf_dip = .false.
417 CALL section_vals_val_get(dft_section, "SURFACE_DIPOLE_CORRECTION", l_val=dft_control%correct_surf_dip)
418 CALL section_vals_val_get(dft_section, "SURF_DIP_DIR", i_val=dft_control%dir_surf_dip)
419 dft_control%pos_dir_surf_dip = -1.0_dp
420 CALL section_vals_val_get(dft_section, "SURF_DIP_POS", r_val=dft_control%pos_dir_surf_dip)
421 ! another logical variable, surf_dip_correct_switch, is introduced for
422 ! implementation of "SURF_DIP_SWITCH" [SGh]
423 dft_control%switch_surf_dip = .false.
424 dft_control%surf_dip_correct_switch = dft_control%correct_surf_dip
425 CALL section_vals_val_get(dft_section, "SURF_DIP_SWITCH", l_val=dft_control%switch_surf_dip)
426 dft_control%correct_el_density_dip = .false.
427 CALL section_vals_val_get(dft_section, "CORE_CORR_DIP", l_val=dft_control%correct_el_density_dip)
428 IF (dft_control%correct_el_density_dip) THEN
429 IF (dft_control%correct_surf_dip) THEN
430 ! Do nothing, move on
431 ELSE
432 dft_control%correct_el_density_dip = .false.
433 cpwarn("CORE_CORR_DIP keyword is activated only if SURFACE_DIPOLE_CORRECTION is TRUE")
434 END IF
435 END IF
436
437 CALL section_vals_val_get(dft_section, "BASIS_SET_FILE_NAME", &
438 c_val=basis_set_file_name)
439 CALL section_vals_val_get(dft_section, "POTENTIAL_FILE_NAME", &
440 c_val=potential_file_name)
441
442 ! Read the input section
443 tmp_section => section_vals_get_subs_vals(dft_section, "sic")
444 CALL section_vals_val_get(tmp_section, "SIC_METHOD", &
445 i_val=dft_control%sic_method_id)
446 CALL section_vals_val_get(tmp_section, "ORBITAL_SET", &
447 i_val=dft_control%sic_list_id)
448 CALL section_vals_val_get(tmp_section, "SIC_SCALING_A", &
449 r_val=dft_control%sic_scaling_a)
450 CALL section_vals_val_get(tmp_section, "SIC_SCALING_B", &
451 r_val=dft_control%sic_scaling_b)
452
453 do_rtp = .false.
454 tmp_section => section_vals_get_subs_vals(dft_section, "REAL_TIME_PROPAGATION")
455 CALL section_vals_get(tmp_section, explicit=is_present)
456 IF (is_present) THEN
457 CALL read_rtp_section(dft_control, tmp_section)
458 do_rtp = .true.
459 END IF
460
461 ! Read the input section
462 tmp_section => section_vals_get_subs_vals(dft_section, "XAS")
463 CALL section_vals_get(tmp_section, explicit=dft_control%do_xas_calculation)
464 IF (dft_control%do_xas_calculation) THEN
465 ! Override with section parameter
466 CALL section_vals_val_get(tmp_section, "_SECTION_PARAMETERS_", &
467 l_val=dft_control%do_xas_calculation)
468 END IF
469
470 tmp_section => section_vals_get_subs_vals(dft_section, "XAS_TDP")
471 CALL section_vals_get(tmp_section, explicit=dft_control%do_xas_tdp_calculation)
472 IF (dft_control%do_xas_tdp_calculation) THEN
473 ! Override with section parameter
474 CALL section_vals_val_get(tmp_section, "_SECTION_PARAMETERS_", &
475 l_val=dft_control%do_xas_tdp_calculation)
476 END IF
477
478 ! Read the finite field input section
479 dft_control%apply_efield = .false.
480 dft_control%apply_efield_field = .false. !this is for RTP
481 dft_control%apply_vector_potential = .false. !this is for RTP
482 tmp_section => section_vals_get_subs_vals(dft_section, "EFIELD")
483 CALL section_vals_get(tmp_section, n_repetition=nrep, explicit=is_present)
484 IF (is_present) THEN
485 ALLOCATE (dft_control%efield_fields(nrep))
486 CALL read_efield_sections(dft_control, tmp_section)
487 IF (do_rtp) THEN
488 IF (.NOT. dft_control%rtp_control%velocity_gauge) THEN
489 dft_control%apply_efield_field = .true.
490 ELSE
491 dft_control%apply_vector_potential = .true.
492 ! Use this input value of vector potential to (re)start RTP
493 dft_control%rtp_control%vec_pot = dft_control%efield_fields(1)%efield%vec_pot_initial
494 END IF
495 ELSE
496 dft_control%apply_efield = .true.
497 cpassert(nrep == 1)
498 END IF
499 END IF
500
501 ! Read the finite field input section for periodic fields
502 tmp_section => section_vals_get_subs_vals(dft_section, "PERIODIC_EFIELD")
503 CALL section_vals_get(tmp_section, explicit=dft_control%apply_period_efield)
504 IF (dft_control%apply_period_efield) THEN
505 ALLOCATE (dft_control%period_efield)
506 CALL section_vals_val_get(tmp_section, "POLARISATION", r_vals=pol)
507 dft_control%period_efield%polarisation(1:3) = pol(1:3)
508 CALL section_vals_val_get(tmp_section, "D_FILTER", r_vals=pol)
509 dft_control%period_efield%d_filter(1:3) = pol(1:3)
510 CALL section_vals_val_get(tmp_section, "INTENSITY", &
511 r_val=dft_control%period_efield%strength)
512 dft_control%period_efield%displacement_field = .false.
513 CALL section_vals_val_get(tmp_section, "DISPLACEMENT_FIELD", &
514 l_val=dft_control%period_efield%displacement_field)
515
516 CALL section_vals_val_get(tmp_section, "INTENSITY_LIST", r_vals=pol)
517
518 CALL section_vals_val_get(tmp_section, "INTENSITIES_FILE_NAME", c_val=intensities_file_name)
519
520 IF (SIZE(pol) > 1 .OR. pol(1) /= 0.0_dp) THEN
521 ! if INTENSITY_LIST is present, INTENSITY and INTENSITIES_FILE_NAME must not be present
522 IF (dft_control%period_efield%strength /= 0.0_dp .OR. intensities_file_name /= "") THEN
523 CALL cp_abort(__location__, "[PERIODIC FIELD] Only one of INTENSITY, INTENSITY_LIST "// &
524 "or INTENSITIES_FILE_NAME can be specified.")
525 END IF
526
527 ALLOCATE (dft_control%period_efield%strength_list(SIZE(pol)))
528 dft_control%period_efield%strength_list(1:SIZE(pol)) = pol(1:SIZE(pol))
529 END IF
530
531 IF (intensities_file_name /= "") THEN
532 ! if INTENSITIES_FILE_NAME is present, INTENSITY must not be present
533 IF (dft_control%period_efield%strength /= 0.0_dp) THEN
534 CALL cp_abort(__location__, "[PERIODIC FIELD] Only one of INTENSITY, INTENSITY_LIST "// &
535 "or INTENSITIES_FILE_NAME can be specified.")
536 END IF
537
538 CALL parser_create(parser, intensities_file_name)
539
540 nrep = 0
541 DO WHILE (.true.)
542 CALL parser_read_line(parser, 1, at_end)
543 IF (at_end) EXIT
544 nrep = nrep + 1
545 END DO
546
547 IF (nrep == 0) THEN
548 cpabort("[PERIODIC FIELD] No intensities found in INTENSITIES_FILE_NAME")
549 END IF
550
551 ALLOCATE (dft_control%period_efield%strength_list(nrep))
552
553 CALL parser_reset(parser)
554 DO irep = 1, nrep
555 CALL parser_read_line(parser, 1)
556 READ (parser%input_line, *) dft_control%period_efield%strength_list(irep)
557 END DO
558
559 CALL parser_release(parser)
560 END IF
561
562 CALL section_vals_val_get(tmp_section, "START_FRAME", &
563 i_val=dft_control%period_efield%start_frame)
564 CALL section_vals_val_get(tmp_section, "END_FRAME", &
565 i_val=dft_control%period_efield%end_frame)
566
567 IF (dft_control%period_efield%end_frame /= -1) THEN
568 ! check if valid bounds are given
569 ! if an end frame is given, the number of active frames must be a
570 ! multiple of the number of intensities
571 IF (dft_control%period_efield%start_frame > dft_control%period_efield%end_frame) THEN
572 cpabort("[PERIODIC FIELD] START_FRAME > END_FRAME")
573 ELSE IF (dft_control%period_efield%start_frame < 1) THEN
574 cpabort("[PERIODIC FIELD] START_FRAME < 1")
575 ELSE IF (mod(dft_control%period_efield%end_frame - &
576 dft_control%period_efield%start_frame + 1, SIZE(pol)) /= 0) THEN
577 CALL cp_abort(__location__, &
578 "[PERIODIC FIELD] Number of active frames must be a multiple of the number of intensities")
579 END IF
580 END IF
581
582 ! periodic fields don't work with RTP
583 cpassert(.NOT. do_rtp)
584 IF (dft_control%period_efield%displacement_field) THEN
585 CALL cite_reference(stengel2009)
586 ELSE
587 CALL cite_reference(souza2002)
588 CALL cite_reference(umari2002)
589 END IF
590 END IF
591
592 ! Read the external potential input section
593 tmp_section => section_vals_get_subs_vals(dft_section, "EXTERNAL_POTENTIAL")
594 CALL section_vals_get(tmp_section, explicit=dft_control%apply_external_potential)
595 IF (dft_control%apply_external_potential) THEN
596 CALL expot_control_create(dft_control%expot_control)
597 CALL section_vals_val_get(tmp_section, "READ_FROM_CUBE", &
598 l_val=dft_control%expot_control%read_from_cube)
599 CALL section_vals_val_get(tmp_section, "STATIC", &
600 l_val=dft_control%expot_control%static)
601 CALL section_vals_val_get(tmp_section, "SCALING_FACTOR", &
602 r_val=dft_control%expot_control%scaling_factor)
603 ! External potential using Maxwell equation
604 maxwell_section => section_vals_get_subs_vals(tmp_section, "MAXWELL")
605 CALL section_vals_get(maxwell_section, explicit=is_present)
606 IF (is_present) THEN
607 dft_control%expot_control%maxwell_solver = .true.
608 CALL maxwell_control_create(dft_control%maxwell_control)
609 ! read the input values from Maxwell section
610 CALL section_vals_val_get(maxwell_section, "TEST_REAL", &
611 r_val=dft_control%maxwell_control%real_test)
612 CALL section_vals_val_get(maxwell_section, "TEST_INTEGER", &
613 i_val=dft_control%maxwell_control%int_test)
614 CALL section_vals_val_get(maxwell_section, "TEST_LOGICAL", &
615 l_val=dft_control%maxwell_control%log_test)
616 ELSE
617 dft_control%expot_control%maxwell_solver = .false.
618 END IF
619 END IF
620
621 ! Read the SCCS input section if present
622 sccs_section => section_vals_get_subs_vals(dft_section, "SCCS")
623 CALL section_vals_get(sccs_section, explicit=is_present)
624 IF (is_present) THEN
625 ! Check section parameter if SCCS is activated
626 CALL section_vals_val_get(sccs_section, "_SECTION_PARAMETERS_", &
627 l_val=dft_control%do_sccs)
628 IF (dft_control%do_sccs) THEN
629 ALLOCATE (dft_control%sccs_control)
630 CALL section_vals_val_get(sccs_section, "RELATIVE_PERMITTIVITY", &
631 r_val=dft_control%sccs_control%epsilon_solvent)
632 CALL section_vals_val_get(sccs_section, "ALPHA", &
633 r_val=dft_control%sccs_control%alpha_solvent)
634 CALL section_vals_val_get(sccs_section, "BETA", &
635 r_val=dft_control%sccs_control%beta_solvent)
636 CALL section_vals_val_get(sccs_section, "DELTA_RHO", &
637 r_val=dft_control%sccs_control%delta_rho)
638 CALL section_vals_val_get(sccs_section, "DERIVATIVE_METHOD", &
639 i_val=dft_control%sccs_control%derivative_method)
640 CALL section_vals_val_get(sccs_section, "METHOD", &
641 i_val=dft_control%sccs_control%method_id)
642 CALL section_vals_val_get(sccs_section, "EPS_SCCS", &
643 r_val=dft_control%sccs_control%eps_sccs)
644 CALL section_vals_val_get(sccs_section, "EPS_SCF", &
645 r_val=dft_control%sccs_control%eps_scf)
646 CALL section_vals_val_get(sccs_section, "GAMMA", &
647 r_val=dft_control%sccs_control%gamma_solvent)
648 CALL section_vals_val_get(sccs_section, "MAX_ITER", &
649 i_val=dft_control%sccs_control%max_iter)
650 CALL section_vals_val_get(sccs_section, "MIXING", &
651 r_val=dft_control%sccs_control%mixing)
652 SELECT CASE (dft_control%sccs_control%method_id)
653 CASE (sccs_andreussi)
654 tmp_section => section_vals_get_subs_vals(sccs_section, "ANDREUSSI")
655 CALL section_vals_val_get(tmp_section, "RHO_MAX", &
656 r_val=dft_control%sccs_control%rho_max)
657 CALL section_vals_val_get(tmp_section, "RHO_MIN", &
658 r_val=dft_control%sccs_control%rho_min)
659 IF (dft_control%sccs_control%rho_max < dft_control%sccs_control%rho_min) THEN
660 CALL cp_abort(__location__, &
661 "The SCCS parameter RHO_MAX is smaller than RHO_MIN. "// &
662 "Please, check your input!")
663 END IF
664 CALL cite_reference(andreussi2012)
666 tmp_section => section_vals_get_subs_vals(sccs_section, "FATTEBERT-GYGI")
667 CALL section_vals_val_get(tmp_section, "BETA", &
668 r_val=dft_control%sccs_control%beta)
669 IF (dft_control%sccs_control%beta < 0.5_dp) THEN
670 CALL cp_abort(__location__, &
671 "A value smaller than 0.5 for the SCCS parameter beta "// &
672 "causes numerical problems. Please, check your input!")
673 END IF
674 CALL section_vals_val_get(tmp_section, "RHO_ZERO", &
675 r_val=dft_control%sccs_control%rho_zero)
676 CALL cite_reference(fattebert2002)
677 CASE DEFAULT
678 cpabort("Invalid SCCS model specified. Please, check your input!")
679 END SELECT
680 CALL cite_reference(yin2017)
681 END IF
682 END IF
683
684 ! ZMP added input sections
685 ! Read the external density input section
686 tmp_section => section_vals_get_subs_vals(dft_section, "EXTERNAL_DENSITY")
687 CALL section_vals_get(tmp_section, explicit=dft_control%apply_external_density)
688
689 ! Read the external vxc input section
690 tmp_section => section_vals_get_subs_vals(dft_section, "EXTERNAL_VXC")
691 CALL section_vals_get(tmp_section, explicit=dft_control%apply_external_vxc)
692
693 ! SMEAGOL interface
694 tmp_section => section_vals_get_subs_vals(dft_section, "SMEAGOL")
695 CALL read_smeagol_control(dft_control%smeagol_control, tmp_section)
696
697 END SUBROUTINE read_dft_control
698
699! **************************************************************************************************
700!> \brief ...
701!> \param qs_control ...
702!> \param dft_section ...
703! **************************************************************************************************
704 SUBROUTINE read_mgrid_section(qs_control, dft_section)
705
706 TYPE(qs_control_type), INTENT(INOUT) :: qs_control
707 TYPE(section_vals_type), POINTER :: dft_section
708
709 CHARACTER(len=*), PARAMETER :: routinen = 'read_mgrid_section'
710
711 INTEGER :: handle, igrid_level, ngrid_level
712 LOGICAL :: explicit, multigrid_set
713 REAL(dp) :: cutoff
714 REAL(dp), DIMENSION(:), POINTER :: cutofflist
715 TYPE(section_vals_type), POINTER :: mgrid_section
716
717 CALL timeset(routinen, handle)
718
719 NULLIFY (mgrid_section, cutofflist)
720 mgrid_section => section_vals_get_subs_vals(dft_section, "MGRID")
721
722 CALL section_vals_val_get(mgrid_section, "NGRIDS", i_val=ngrid_level)
723 CALL section_vals_val_get(mgrid_section, "MULTIGRID_SET", l_val=multigrid_set)
724 CALL section_vals_val_get(mgrid_section, "CUTOFF", r_val=cutoff)
725 CALL section_vals_val_get(mgrid_section, "PROGRESSION_FACTOR", r_val=qs_control%progression_factor)
726 CALL section_vals_val_get(mgrid_section, "COMMENSURATE", l_val=qs_control%commensurate_mgrids)
727 CALL section_vals_val_get(mgrid_section, "REALSPACE", l_val=qs_control%realspace_mgrids)
728 CALL section_vals_val_get(mgrid_section, "REL_CUTOFF", r_val=qs_control%relative_cutoff)
729 CALL section_vals_val_get(mgrid_section, "SKIP_LOAD_BALANCE_DISTRIBUTED", &
730 l_val=qs_control%skip_load_balance_distributed)
731
732 ! For SE and DFTB possibly override with new defaults
733 IF (qs_control%semi_empirical .OR. qs_control%dftb .OR. qs_control%xtb) THEN
734 ngrid_level = 1
735 multigrid_set = .false.
736 ! Override default cutoff value unless user specified an explicit argument..
737 CALL section_vals_val_get(mgrid_section, "CUTOFF", explicit=explicit, r_val=cutoff)
738 IF (.NOT. explicit) cutoff = 1.0_dp
739 END IF
740
741 ALLOCATE (qs_control%e_cutoff(ngrid_level))
742 qs_control%cutoff = cutoff
743
744 IF (multigrid_set) THEN
745 ! Read the values from input
746 IF (qs_control%commensurate_mgrids) THEN
747 cpabort("Do not specify cutoffs for the commensurate grids (NYI)")
748 END IF
749
750 CALL section_vals_val_get(mgrid_section, "MULTIGRID_CUTOFF", r_vals=cutofflist)
751 IF (ASSOCIATED(cutofflist)) THEN
752 IF (SIZE(cutofflist, 1) /= ngrid_level) THEN
753 cpabort("Number of multi-grids requested and number of cutoff values do not match")
754 END IF
755 DO igrid_level = 1, ngrid_level
756 qs_control%e_cutoff(igrid_level) = cutofflist(igrid_level)
757 END DO
758 END IF
759 ! set cutoff to smallest value in multgrid available with >= cutoff
760 DO igrid_level = ngrid_level, 1, -1
761 IF (qs_control%cutoff <= qs_control%e_cutoff(igrid_level)) THEN
762 qs_control%cutoff = qs_control%e_cutoff(igrid_level)
763 EXIT
764 END IF
765 ! set largest grid value to cutoff
766 IF (igrid_level == 1) THEN
767 qs_control%cutoff = qs_control%e_cutoff(1)
768 END IF
769 END DO
770 ELSE
771 IF (qs_control%commensurate_mgrids) qs_control%progression_factor = 4.0_dp
772 qs_control%e_cutoff(1) = qs_control%cutoff
773 DO igrid_level = 2, ngrid_level
774 qs_control%e_cutoff(igrid_level) = qs_control%e_cutoff(igrid_level - 1)/ &
775 qs_control%progression_factor
776 END DO
777 END IF
778 ! check that multigrids are ordered
779 DO igrid_level = 2, ngrid_level
780 IF (qs_control%e_cutoff(igrid_level) > qs_control%e_cutoff(igrid_level - 1)) THEN
781 cpabort("The cutoff values for the multi-grids are not ordered from large to small")
782 ELSE IF (qs_control%e_cutoff(igrid_level) == qs_control%e_cutoff(igrid_level - 1)) THEN
783 cpabort("The same cutoff value was specified for two multi-grids")
784 END IF
785 END DO
786 CALL timestop(handle)
787 END SUBROUTINE read_mgrid_section
788
789! **************************************************************************************************
790!> \brief ...
791!> \param qs_control ...
792!> \param qs_section ...
793! **************************************************************************************************
794 SUBROUTINE read_qs_section(qs_control, qs_section)
795
796 TYPE(qs_control_type), INTENT(INOUT) :: qs_control
797 TYPE(section_vals_type), POINTER :: qs_section
798
799 CHARACTER(len=*), PARAMETER :: routinen = 'read_qs_section'
800
801 CHARACTER(LEN=default_string_length) :: cval
802 CHARACTER(LEN=default_string_length), &
803 DIMENSION(:), POINTER :: clist
804 INTEGER :: handle, itmp, j, jj, k, n_rep, n_var, &
805 ngauss, ngp, nrep
806 INTEGER, DIMENSION(:), POINTER :: tmplist
807 LOGICAL :: explicit, was_present
808 REAL(dp) :: tmp, tmpsqrt, value
809 REAL(dp), POINTER :: scal(:)
810 TYPE(section_vals_type), POINTER :: cdft_control_section, ddapc_restraint_section, &
811 dftb_parameter, dftb_section, eeq_section, genpot_section, lri_optbas_section, &
812 mull_section, nonbonded_section, s2_restraint_section, se_section, xtb_parameter, &
813 xtb_section
814
815 CALL timeset(routinen, handle)
816
817 was_present = .false.
818 NULLIFY (mull_section, ddapc_restraint_section, s2_restraint_section, &
819 se_section, dftb_section, xtb_section, dftb_parameter, xtb_parameter, lri_optbas_section, &
820 cdft_control_section, genpot_section, eeq_section)
821
822 mull_section => section_vals_get_subs_vals(qs_section, "MULLIKEN_RESTRAINT")
823 ddapc_restraint_section => section_vals_get_subs_vals(qs_section, "DDAPC_RESTRAINT")
824 s2_restraint_section => section_vals_get_subs_vals(qs_section, "S2_RESTRAINT")
825 se_section => section_vals_get_subs_vals(qs_section, "SE")
826 dftb_section => section_vals_get_subs_vals(qs_section, "DFTB")
827 xtb_section => section_vals_get_subs_vals(qs_section, "xTB")
828 dftb_parameter => section_vals_get_subs_vals(dftb_section, "PARAMETER")
829 xtb_parameter => section_vals_get_subs_vals(xtb_section, "PARAMETER")
830 eeq_section => section_vals_get_subs_vals(xtb_section, "EEQ")
831 lri_optbas_section => section_vals_get_subs_vals(qs_section, "OPTIMIZE_LRI_BASIS")
832 cdft_control_section => section_vals_get_subs_vals(qs_section, "CDFT")
833 nonbonded_section => section_vals_get_subs_vals(xtb_section, "NONBONDED")
834 genpot_section => section_vals_get_subs_vals(nonbonded_section, "GENPOT")
835
836 ! Setup all defaults values and overwrite input parameters
837 ! EPS_DEFAULT should set the target accuracy in the total energy (~per electron) or a closely related value
838 CALL section_vals_val_get(qs_section, "EPS_DEFAULT", r_val=value)
839 tmpsqrt = sqrt(value) ! a trick to work around a NAG 5.1 optimizer bug
840
841 ! random choice ?
842 qs_control%eps_core_charge = value/100.0_dp
843 ! correct if all Gaussians would have the same radius (overlap will be smaller than eps_pgf_orb**2).
844 ! Can be significantly in error if not... requires fully new screening/pairlist procedures
845 qs_control%eps_pgf_orb = tmpsqrt
846 qs_control%eps_kg_orb = qs_control%eps_pgf_orb
847 ! consistent since also a kind of overlap
848 qs_control%eps_ppnl = qs_control%eps_pgf_orb/100.0_dp
849 ! accuracy is basically set by the overlap, this sets an empirical shift
850 qs_control%eps_ppl = 1.0e-2_dp
851 !
852 qs_control%gapw_control%eps_cpc = value
853 ! expexted error in the density
854 qs_control%eps_rho_gspace = value
855 qs_control%eps_rho_rspace = value
856 ! error in the gradient, can be the sqrt of the error in the energy, ignored if map_consistent
857 qs_control%eps_gvg_rspace = tmpsqrt
858 !
859 CALL section_vals_val_get(qs_section, "EPS_CORE_CHARGE", n_rep_val=n_rep)
860 IF (n_rep /= 0) THEN
861 CALL section_vals_val_get(qs_section, "EPS_CORE_CHARGE", r_val=qs_control%eps_core_charge)
862 END IF
863 CALL section_vals_val_get(qs_section, "EPS_GVG_RSPACE", n_rep_val=n_rep)
864 IF (n_rep /= 0) THEN
865 CALL section_vals_val_get(qs_section, "EPS_GVG_RSPACE", r_val=qs_control%eps_gvg_rspace)
866 END IF
867 CALL section_vals_val_get(qs_section, "EPS_PGF_ORB", n_rep_val=n_rep)
868 IF (n_rep /= 0) THEN
869 CALL section_vals_val_get(qs_section, "EPS_PGF_ORB", r_val=qs_control%eps_pgf_orb)
870 END IF
871 CALL section_vals_val_get(qs_section, "EPS_KG_ORB", n_rep_val=n_rep)
872 IF (n_rep /= 0) THEN
873 CALL section_vals_val_get(qs_section, "EPS_KG_ORB", r_val=tmp)
874 qs_control%eps_kg_orb = sqrt(tmp)
875 END IF
876 CALL section_vals_val_get(qs_section, "EPS_PPL", n_rep_val=n_rep)
877 IF (n_rep /= 0) THEN
878 CALL section_vals_val_get(qs_section, "EPS_PPL", r_val=qs_control%eps_ppl)
879 END IF
880 CALL section_vals_val_get(qs_section, "EPS_PPNL", n_rep_val=n_rep)
881 IF (n_rep /= 0) THEN
882 CALL section_vals_val_get(qs_section, "EPS_PPNL", r_val=qs_control%eps_ppnl)
883 END IF
884 CALL section_vals_val_get(qs_section, "EPS_RHO", n_rep_val=n_rep)
885 IF (n_rep /= 0) THEN
886 CALL section_vals_val_get(qs_section, "EPS_RHO", r_val=qs_control%eps_rho_gspace)
887 qs_control%eps_rho_rspace = qs_control%eps_rho_gspace
888 END IF
889 CALL section_vals_val_get(qs_section, "EPS_RHO_RSPACE", n_rep_val=n_rep)
890 IF (n_rep /= 0) THEN
891 CALL section_vals_val_get(qs_section, "EPS_RHO_RSPACE", r_val=qs_control%eps_rho_rspace)
892 END IF
893 CALL section_vals_val_get(qs_section, "EPS_RHO_GSPACE", n_rep_val=n_rep)
894 IF (n_rep /= 0) THEN
895 CALL section_vals_val_get(qs_section, "EPS_RHO_GSPACE", r_val=qs_control%eps_rho_gspace)
896 END IF
897 CALL section_vals_val_get(qs_section, "EPS_FILTER_MATRIX", n_rep_val=n_rep)
898 IF (n_rep /= 0) THEN
899 CALL section_vals_val_get(qs_section, "EPS_FILTER_MATRIX", r_val=qs_control%eps_filter_matrix)
900 END IF
901 CALL section_vals_val_get(qs_section, "EPS_CPC", n_rep_val=n_rep)
902 IF (n_rep /= 0) THEN
903 CALL section_vals_val_get(qs_section, "EPS_CPC", r_val=qs_control%gapw_control%eps_cpc)
904 END IF
905
906 CALL section_vals_val_get(qs_section, "EPSFIT", r_val=qs_control%gapw_control%eps_fit)
907 CALL section_vals_val_get(qs_section, "EPSISO", r_val=qs_control%gapw_control%eps_iso)
908 CALL section_vals_val_get(qs_section, "EPSSVD", r_val=qs_control%gapw_control%eps_svd)
909 CALL section_vals_val_get(qs_section, "EPSRHO0", r_val=qs_control%gapw_control%eps_Vrho0)
910 CALL section_vals_val_get(qs_section, "ALPHA0_HARD", r_val=qs_control%gapw_control%alpha0_hard)
911 qs_control%gapw_control%lrho1_eq_lrho0 = .false.
912 qs_control%gapw_control%alpha0_hard_from_input = .false.
913 IF (qs_control%gapw_control%alpha0_hard /= 0.0_dp) qs_control%gapw_control%alpha0_hard_from_input = .true.
914 CALL section_vals_val_get(qs_section, "FORCE_PAW", l_val=qs_control%gapw_control%force_paw)
915 CALL section_vals_val_get(qs_section, "MAX_RAD_LOCAL", r_val=qs_control%gapw_control%max_rad_local)
916
917 CALL section_vals_val_get(qs_section, "MIN_PAIR_LIST_RADIUS", r_val=qs_control%pairlist_radius)
918
919 CALL section_vals_val_get(qs_section, "LS_SCF", l_val=qs_control%do_ls_scf)
920 CALL section_vals_val_get(qs_section, "ALMO_SCF", l_val=qs_control%do_almo_scf)
921 CALL section_vals_val_get(qs_section, "KG_METHOD", l_val=qs_control%do_kg)
922
923 ! Logicals
924 CALL section_vals_val_get(qs_section, "REF_EMBED_SUBSYS", l_val=qs_control%ref_embed_subsys)
925 CALL section_vals_val_get(qs_section, "CLUSTER_EMBED_SUBSYS", l_val=qs_control%cluster_embed_subsys)
926 CALL section_vals_val_get(qs_section, "HIGH_LEVEL_EMBED_SUBSYS", l_val=qs_control%high_level_embed_subsys)
927 CALL section_vals_val_get(qs_section, "DFET_EMBEDDED", l_val=qs_control%dfet_embedded)
928 CALL section_vals_val_get(qs_section, "DMFET_EMBEDDED", l_val=qs_control%dmfet_embedded)
929
930 ! Integers gapw
931 CALL section_vals_val_get(qs_section, "LMAXN1", i_val=qs_control%gapw_control%lmax_sphere)
932 CALL section_vals_val_get(qs_section, "LMAXN0", i_val=qs_control%gapw_control%lmax_rho0)
933 CALL section_vals_val_get(qs_section, "LADDN0", i_val=qs_control%gapw_control%ladd_rho0)
934 CALL section_vals_val_get(qs_section, "QUADRATURE", i_val=qs_control%gapw_control%quadrature)
935 ! GAPW 1c basis
936 CALL section_vals_val_get(qs_section, "GAPW_1C_BASIS", i_val=qs_control%gapw_control%basis_1c)
937 IF (qs_control%gapw_control%basis_1c /= gapw_1c_orb) THEN
938 qs_control%gapw_control%eps_svd = max(qs_control%gapw_control%eps_svd, 1.e-12_dp)
939 END IF
940
941 ! Integers grids
942 CALL section_vals_val_get(qs_section, "PW_GRID", i_val=itmp)
943 SELECT CASE (itmp)
945 qs_control%pw_grid_opt%spherical = .true.
946 qs_control%pw_grid_opt%fullspace = .false.
948 qs_control%pw_grid_opt%spherical = .false.
949 qs_control%pw_grid_opt%fullspace = .true.
951 qs_control%pw_grid_opt%spherical = .false.
952 qs_control%pw_grid_opt%fullspace = .false.
953 END SELECT
954
955 ! Method for PPL calculation
956 CALL section_vals_val_get(qs_section, "CORE_PPL", i_val=itmp)
957 qs_control%do_ppl_method = itmp
958
959 CALL section_vals_val_get(qs_section, "PW_GRID_LAYOUT", i_vals=tmplist)
960 qs_control%pw_grid_opt%distribution_layout = tmplist
961 CALL section_vals_val_get(qs_section, "PW_GRID_BLOCKED", i_val=qs_control%pw_grid_opt%blocked)
962
963 !Integers extrapolation
964 CALL section_vals_val_get(qs_section, "EXTRAPOLATION", i_val=qs_control%wf_interpolation_method_nr)
965 CALL section_vals_val_get(qs_section, "EXTRAPOLATION_ORDER", i_val=qs_control%wf_extrapolation_order)
966
967 !Method
968 CALL section_vals_val_get(qs_section, "METHOD", i_val=qs_control%method_id)
969 qs_control%gapw = .false.
970 qs_control%gapw_xc = .false.
971 qs_control%gpw = .false.
972 qs_control%pao = .false.
973 qs_control%dftb = .false.
974 qs_control%xtb = .false.
975 qs_control%semi_empirical = .false.
976 qs_control%ofgpw = .false.
977 qs_control%lrigpw = .false.
978 qs_control%rigpw = .false.
979 SELECT CASE (qs_control%method_id)
980 CASE (do_method_gapw)
981 CALL cite_reference(lippert1999)
982 CALL cite_reference(krack2000)
983 qs_control%gapw = .true.
984 CASE (do_method_gapw_xc)
985 qs_control%gapw_xc = .true.
986 CASE (do_method_gpw)
987 CALL cite_reference(lippert1997)
988 CALL cite_reference(vandevondele2005a)
989 qs_control%gpw = .true.
990 CASE (do_method_ofgpw)
991 qs_control%ofgpw = .true.
992 CASE (do_method_lrigpw)
993 qs_control%lrigpw = .true.
994 CASE (do_method_rigpw)
995 qs_control%rigpw = .true.
996 CASE (do_method_dftb)
997 qs_control%dftb = .true.
998 CALL cite_reference(porezag1995)
999 CALL cite_reference(seifert1996)
1000 CASE (do_method_xtb)
1001 qs_control%xtb = .true.
1002 CALL cite_reference(grimme2017)
1003 CALL cite_reference(pracht2019)
1004 CASE (do_method_mndo)
1005 CALL cite_reference(dewar1977)
1006 qs_control%semi_empirical = .true.
1007 CASE (do_method_am1)
1008 CALL cite_reference(dewar1985)
1009 qs_control%semi_empirical = .true.
1010 CASE (do_method_pm3)
1011 CALL cite_reference(stewart1989)
1012 qs_control%semi_empirical = .true.
1013 CASE (do_method_pnnl)
1014 CALL cite_reference(schenter2008)
1015 qs_control%semi_empirical = .true.
1016 CASE (do_method_pm6)
1017 CALL cite_reference(stewart2007)
1018 qs_control%semi_empirical = .true.
1019 CASE (do_method_pm6fm)
1020 CALL cite_reference(vanvoorhis2015)
1021 qs_control%semi_empirical = .true.
1022 CASE (do_method_pdg)
1023 CALL cite_reference(repasky2002)
1024 qs_control%semi_empirical = .true.
1025 CASE (do_method_rm1)
1026 CALL cite_reference(rocha2006)
1027 qs_control%semi_empirical = .true.
1028 CASE (do_method_mndod)
1029 CALL cite_reference(dewar1977)
1030 CALL cite_reference(thiel1992)
1031 qs_control%semi_empirical = .true.
1032 END SELECT
1033
1034 CALL section_vals_get(mull_section, explicit=qs_control%mulliken_restraint)
1035
1036 IF (qs_control%mulliken_restraint) THEN
1037 CALL section_vals_val_get(mull_section, "STRENGTH", r_val=qs_control%mulliken_restraint_control%strength)
1038 CALL section_vals_val_get(mull_section, "TARGET", r_val=qs_control%mulliken_restraint_control%target)
1039 CALL section_vals_val_get(mull_section, "ATOMS", n_rep_val=n_rep)
1040 jj = 0
1041 DO k = 1, n_rep
1042 CALL section_vals_val_get(mull_section, "ATOMS", i_rep_val=k, i_vals=tmplist)
1043 jj = jj + SIZE(tmplist)
1044 END DO
1045 qs_control%mulliken_restraint_control%natoms = jj
1046 IF (qs_control%mulliken_restraint_control%natoms < 1) &
1047 cpabort("Need at least 1 atom to use mulliken constraints")
1048 ALLOCATE (qs_control%mulliken_restraint_control%atoms(qs_control%mulliken_restraint_control%natoms))
1049 jj = 0
1050 DO k = 1, n_rep
1051 CALL section_vals_val_get(mull_section, "ATOMS", i_rep_val=k, i_vals=tmplist)
1052 DO j = 1, SIZE(tmplist)
1053 jj = jj + 1
1054 qs_control%mulliken_restraint_control%atoms(jj) = tmplist(j)
1055 END DO
1056 END DO
1057 END IF
1058 CALL section_vals_get(ddapc_restraint_section, n_repetition=nrep, explicit=qs_control%ddapc_restraint)
1059 IF (qs_control%ddapc_restraint) THEN
1060 ALLOCATE (qs_control%ddapc_restraint_control(nrep))
1061 CALL read_ddapc_section(qs_control, qs_section=qs_section)
1062 qs_control%ddapc_restraint_is_spin = .false.
1063 qs_control%ddapc_explicit_potential = .false.
1064 END IF
1065
1066 CALL section_vals_get(s2_restraint_section, explicit=qs_control%s2_restraint)
1067 IF (qs_control%s2_restraint) THEN
1068 CALL section_vals_val_get(s2_restraint_section, "STRENGTH", &
1069 r_val=qs_control%s2_restraint_control%strength)
1070 CALL section_vals_val_get(s2_restraint_section, "TARGET", &
1071 r_val=qs_control%s2_restraint_control%target)
1072 CALL section_vals_val_get(s2_restraint_section, "FUNCTIONAL_FORM", &
1073 i_val=qs_control%s2_restraint_control%functional_form)
1074 END IF
1075
1076 CALL section_vals_get(cdft_control_section, explicit=qs_control%cdft)
1077 IF (qs_control%cdft) THEN
1078 CALL read_cdft_control_section(qs_control, cdft_control_section)
1079 END IF
1080
1081 ! Semi-empirical code
1082 IF (qs_control%semi_empirical) THEN
1083 CALL section_vals_val_get(se_section, "ORTHOGONAL_BASIS", &
1084 l_val=qs_control%se_control%orthogonal_basis)
1085 CALL section_vals_val_get(se_section, "DELTA", &
1086 r_val=qs_control%se_control%delta)
1087 CALL section_vals_val_get(se_section, "ANALYTICAL_GRADIENTS", &
1088 l_val=qs_control%se_control%analytical_gradients)
1089 CALL section_vals_val_get(se_section, "FORCE_KDSO-D_EXCHANGE", &
1090 l_val=qs_control%se_control%force_kdsod_EX)
1091 ! Integral Screening
1092 CALL section_vals_val_get(se_section, "INTEGRAL_SCREENING", &
1093 i_val=qs_control%se_control%integral_screening)
1094 IF (qs_control%method_id == do_method_pnnl) THEN
1095 IF (qs_control%se_control%integral_screening /= do_se_is_slater) &
1096 CALL cp_warn(__location__, &
1097 "PNNL semi-empirical parameterization supports only the Slater type "// &
1098 "integral scheme. Revert to Slater and continue the calculation.")
1099 qs_control%se_control%integral_screening = do_se_is_slater
1100 END IF
1101 ! Global Arrays variable
1102 CALL section_vals_val_get(se_section, "GA%NCELLS", &
1103 i_val=qs_control%se_control%ga_ncells)
1104 ! Long-Range correction
1105 CALL section_vals_val_get(se_section, "LR_CORRECTION%CUTOFF", &
1106 r_val=qs_control%se_control%cutoff_lrc)
1107 qs_control%se_control%taper_lrc = qs_control%se_control%cutoff_lrc
1108 CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_TAPER", &
1109 explicit=explicit)
1110 IF (explicit) THEN
1111 CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_TAPER", &
1112 r_val=qs_control%se_control%taper_lrc)
1113 END IF
1114 CALL section_vals_val_get(se_section, "LR_CORRECTION%RC_RANGE", &
1115 r_val=qs_control%se_control%range_lrc)
1116 ! Coulomb
1117 CALL section_vals_val_get(se_section, "COULOMB%CUTOFF", &
1118 r_val=qs_control%se_control%cutoff_cou)
1119 qs_control%se_control%taper_cou = qs_control%se_control%cutoff_cou
1120 CALL section_vals_val_get(se_section, "COULOMB%RC_TAPER", &
1121 explicit=explicit)
1122 IF (explicit) THEN
1123 CALL section_vals_val_get(se_section, "COULOMB%RC_TAPER", &
1124 r_val=qs_control%se_control%taper_cou)
1125 END IF
1126 CALL section_vals_val_get(se_section, "COULOMB%RC_RANGE", &
1127 r_val=qs_control%se_control%range_cou)
1128 ! Exchange
1129 CALL section_vals_val_get(se_section, "EXCHANGE%CUTOFF", &
1130 r_val=qs_control%se_control%cutoff_exc)
1131 qs_control%se_control%taper_exc = qs_control%se_control%cutoff_exc
1132 CALL section_vals_val_get(se_section, "EXCHANGE%RC_TAPER", &
1133 explicit=explicit)
1134 IF (explicit) THEN
1135 CALL section_vals_val_get(se_section, "EXCHANGE%RC_TAPER", &
1136 r_val=qs_control%se_control%taper_exc)
1137 END IF
1138 CALL section_vals_val_get(se_section, "EXCHANGE%RC_RANGE", &
1139 r_val=qs_control%se_control%range_exc)
1140 ! Screening (only if the integral scheme is of dumped type)
1141 IF (qs_control%se_control%integral_screening == do_se_is_kdso_d) THEN
1142 CALL section_vals_val_get(se_section, "SCREENING%RC_TAPER", &
1143 r_val=qs_control%se_control%taper_scr)
1144 CALL section_vals_val_get(se_section, "SCREENING%RC_RANGE", &
1145 r_val=qs_control%se_control%range_scr)
1146 END IF
1147 ! Periodic Type Calculation
1148 CALL section_vals_val_get(se_section, "PERIODIC", &
1149 i_val=qs_control%se_control%periodic_type)
1150 SELECT CASE (qs_control%se_control%periodic_type)
1151 CASE (do_se_lr_none)
1152 qs_control%se_control%do_ewald = .false.
1153 qs_control%se_control%do_ewald_r3 = .false.
1154 qs_control%se_control%do_ewald_gks = .false.
1155 CASE (do_se_lr_ewald)
1156 qs_control%se_control%do_ewald = .true.
1157 qs_control%se_control%do_ewald_r3 = .false.
1158 qs_control%se_control%do_ewald_gks = .false.
1159 CASE (do_se_lr_ewald_gks)
1160 qs_control%se_control%do_ewald = .false.
1161 qs_control%se_control%do_ewald_r3 = .false.
1162 qs_control%se_control%do_ewald_gks = .true.
1163 IF (qs_control%method_id /= do_method_pnnl) &
1164 CALL cp_abort(__location__, &
1165 "A periodic semi-empirical calculation was requested with a long-range "// &
1166 "summation on the single integral evaluation. This scheme is supported "// &
1167 "only by the PNNL parameterization.")
1168 CASE (do_se_lr_ewald_r3)
1169 qs_control%se_control%do_ewald = .true.
1170 qs_control%se_control%do_ewald_r3 = .true.
1171 qs_control%se_control%do_ewald_gks = .false.
1172 IF (qs_control%se_control%integral_screening /= do_se_is_kdso) &
1173 CALL cp_abort(__location__, &
1174 "A periodic semi-empirical calculation was requested with a long-range "// &
1175 "summation for the slowly convergent part 1/R^3, which is not congruent "// &
1176 "with the integral screening chosen. The only integral screening supported "// &
1177 "by this periodic type calculation is the standard Klopman-Dewar-Sabelli-Ohno.")
1178 END SELECT
1179
1180 ! dispersion pair potentials
1181 CALL section_vals_val_get(se_section, "DISPERSION", &
1182 l_val=qs_control%se_control%dispersion)
1183 CALL section_vals_val_get(se_section, "DISPERSION_RADIUS", &
1184 r_val=qs_control%se_control%rcdisp)
1185 CALL section_vals_val_get(se_section, "COORDINATION_CUTOFF", &
1186 r_val=qs_control%se_control%epscn)
1187 CALL section_vals_val_get(se_section, "D3_SCALING", r_vals=scal)
1188 qs_control%se_control%sd3(1) = scal(1)
1189 qs_control%se_control%sd3(2) = scal(2)
1190 qs_control%se_control%sd3(3) = scal(3)
1191 CALL section_vals_val_get(se_section, "DISPERSION_PARAMETER_FILE", &
1192 c_val=qs_control%se_control%dispersion_parameter_file)
1193
1194 ! Stop the execution for non-implemented features
1195 IF (qs_control%se_control%periodic_type == do_se_lr_ewald_r3) THEN
1196 cpabort("EWALD_R3 not implemented yet!")
1197 END IF
1198
1199 IF (qs_control%method_id == do_method_mndo .OR. &
1200 qs_control%method_id == do_method_am1 .OR. &
1201 qs_control%method_id == do_method_mndod .OR. &
1202 qs_control%method_id == do_method_pdg .OR. &
1203 qs_control%method_id == do_method_pm3 .OR. &
1204 qs_control%method_id == do_method_pm6 .OR. &
1205 qs_control%method_id == do_method_pm6fm .OR. &
1206 qs_control%method_id == do_method_pnnl .OR. &
1207 qs_control%method_id == do_method_rm1) THEN
1208 qs_control%se_control%orthogonal_basis = .true.
1209 END IF
1210 END IF
1211
1212 ! DFTB code
1213 IF (qs_control%dftb) THEN
1214 CALL section_vals_val_get(dftb_section, "ORTHOGONAL_BASIS", &
1215 l_val=qs_control%dftb_control%orthogonal_basis)
1216 CALL section_vals_val_get(dftb_section, "SELF_CONSISTENT", &
1217 l_val=qs_control%dftb_control%self_consistent)
1218 CALL section_vals_val_get(dftb_section, "DISPERSION", &
1219 l_val=qs_control%dftb_control%dispersion)
1220 CALL section_vals_val_get(dftb_section, "DIAGONAL_DFTB3", &
1221 l_val=qs_control%dftb_control%dftb3_diagonal)
1222 CALL section_vals_val_get(dftb_section, "HB_SR_GAMMA", &
1223 l_val=qs_control%dftb_control%hb_sr_damp)
1224 CALL section_vals_val_get(dftb_section, "EPS_DISP", &
1225 r_val=qs_control%dftb_control%eps_disp)
1226 CALL section_vals_val_get(dftb_section, "DO_EWALD", explicit=explicit)
1227 IF (explicit) THEN
1228 CALL section_vals_val_get(dftb_section, "DO_EWALD", &
1229 l_val=qs_control%dftb_control%do_ewald)
1230 ELSE
1231 qs_control%dftb_control%do_ewald = (qs_control%periodicity /= 0)
1232 END IF
1233 CALL section_vals_val_get(dftb_parameter, "PARAM_FILE_PATH", &
1234 c_val=qs_control%dftb_control%sk_file_path)
1235 CALL section_vals_val_get(dftb_parameter, "PARAM_FILE_NAME", &
1236 c_val=qs_control%dftb_control%sk_file_list)
1237 CALL section_vals_val_get(dftb_parameter, "HB_SR_PARAM", &
1238 r_val=qs_control%dftb_control%hb_sr_para)
1239 CALL section_vals_val_get(dftb_parameter, "SK_FILE", n_rep_val=n_var)
1240 ALLOCATE (qs_control%dftb_control%sk_pair_list(3, n_var))
1241 DO k = 1, n_var
1242 CALL section_vals_val_get(dftb_parameter, "SK_FILE", i_rep_val=k, &
1243 c_vals=clist)
1244 qs_control%dftb_control%sk_pair_list(1:3, k) = clist(1:3)
1245 END DO
1246 ! Dispersion type
1247 CALL section_vals_val_get(dftb_parameter, "DISPERSION_TYPE", &
1248 i_val=qs_control%dftb_control%dispersion_type)
1249 CALL section_vals_val_get(dftb_parameter, "UFF_FORCE_FIELD", &
1250 c_val=qs_control%dftb_control%uff_force_field)
1251 ! D3 Dispersion
1252 CALL section_vals_val_get(dftb_parameter, "DISPERSION_RADIUS", &
1253 r_val=qs_control%dftb_control%rcdisp)
1254 CALL section_vals_val_get(dftb_parameter, "COORDINATION_CUTOFF", &
1255 r_val=qs_control%dftb_control%epscn)
1256 CALL section_vals_val_get(dftb_parameter, "D2_EXP_PRE", &
1257 r_val=qs_control%dftb_control%exp_pre)
1258 CALL section_vals_val_get(dftb_parameter, "D2_SCALING", &
1259 r_val=qs_control%dftb_control%scaling)
1260 CALL section_vals_val_get(dftb_parameter, "D3_SCALING", r_vals=scal)
1261 qs_control%dftb_control%sd3(1) = scal(1)
1262 qs_control%dftb_control%sd3(2) = scal(2)
1263 qs_control%dftb_control%sd3(3) = scal(3)
1264 CALL section_vals_val_get(dftb_parameter, "D3BJ_SCALING", r_vals=scal)
1265 qs_control%dftb_control%sd3bj(1) = scal(1)
1266 qs_control%dftb_control%sd3bj(2) = scal(2)
1267 qs_control%dftb_control%sd3bj(3) = scal(3)
1268 qs_control%dftb_control%sd3bj(4) = scal(4)
1269 CALL section_vals_val_get(dftb_parameter, "DISPERSION_PARAMETER_FILE", &
1270 c_val=qs_control%dftb_control%dispersion_parameter_file)
1271
1272 IF (qs_control%dftb_control%dispersion) CALL cite_reference(zhechkov2005)
1273 IF (qs_control%dftb_control%self_consistent) CALL cite_reference(elstner1998)
1274 IF (qs_control%dftb_control%hb_sr_damp) CALL cite_reference(hu2007)
1275 END IF
1276
1277 ! xTB code
1278 IF (qs_control%xtb) THEN
1279 CALL section_vals_val_get(xtb_section, "GFN_TYPE", i_val=qs_control%xtb_control%gfn_type)
1280 CALL section_vals_val_get(xtb_section, "DO_EWALD", explicit=explicit)
1281 IF (explicit) THEN
1282 CALL section_vals_val_get(xtb_section, "DO_EWALD", &
1283 l_val=qs_control%xtb_control%do_ewald)
1284 ELSE
1285 qs_control%xtb_control%do_ewald = (qs_control%periodicity /= 0)
1286 END IF
1287 ! vdW
1288 CALL section_vals_val_get(xtb_section, "VDW_POTENTIAL", explicit=explicit)
1289 IF (explicit) THEN
1290 CALL section_vals_val_get(xtb_section, "VDW_POTENTIAL", c_val=cval)
1291 CALL uppercase(cval)
1292 SELECT CASE (cval)
1293 CASE ("NONE")
1294 qs_control%xtb_control%vdw_type = xtb_vdw_type_none
1295 CASE ("DFTD3")
1296 qs_control%xtb_control%vdw_type = xtb_vdw_type_d3
1297 CASE ("DFTD4")
1298 qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
1299 CASE DEFAULT
1300 cpabort("vdW type")
1301 END SELECT
1302 ELSE
1303 SELECT CASE (qs_control%xtb_control%gfn_type)
1304 CASE (0)
1305 qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
1306 CASE (1)
1307 qs_control%xtb_control%vdw_type = xtb_vdw_type_d3
1308 CASE (2)
1309 qs_control%xtb_control%vdw_type = xtb_vdw_type_d4
1310 cpabort("gfn2-xtb tbd")
1311 CASE DEFAULT
1312 cpabort("GFN type")
1313 END SELECT
1314 END IF
1315 !
1316 CALL section_vals_val_get(xtb_section, "STO_NG", i_val=ngauss)
1317 qs_control%xtb_control%sto_ng = ngauss
1318 CALL section_vals_val_get(xtb_section, "HYDROGEN_STO_NG", i_val=ngauss)
1319 qs_control%xtb_control%h_sto_ng = ngauss
1320 CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_PATH", &
1321 c_val=qs_control%xtb_control%parameter_file_path)
1322 CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_NAME", explicit=explicit)
1323 IF (explicit) THEN
1324 CALL section_vals_val_get(xtb_parameter, "PARAM_FILE_NAME", &
1325 c_val=qs_control%xtb_control%parameter_file_name)
1326 ELSE
1327 SELECT CASE (qs_control%xtb_control%gfn_type)
1328 CASE (0)
1329 qs_control%xtb_control%parameter_file_name = "xTB0_parameters"
1330 CASE (1)
1331 qs_control%xtb_control%parameter_file_name = "xTB1_parameters"
1332 CASE (2)
1333 cpabort("gfn2-xtb tbd")
1334 CASE DEFAULT
1335 cpabort("GFN type")
1336 END SELECT
1337 END IF
1338 ! D3 Dispersion
1339 CALL section_vals_val_get(xtb_parameter, "DISPERSION_RADIUS", &
1340 r_val=qs_control%xtb_control%rcdisp)
1341 CALL section_vals_val_get(xtb_parameter, "COORDINATION_CUTOFF", &
1342 r_val=qs_control%xtb_control%epscn)
1343 CALL section_vals_val_get(xtb_parameter, "D3BJ_SCALING", explicit=explicit)
1344 IF (explicit) THEN
1345 CALL section_vals_val_get(xtb_parameter, "D3BJ_SCALING", r_vals=scal)
1346 qs_control%xtb_control%s6 = scal(1)
1347 qs_control%xtb_control%s8 = scal(2)
1348 ELSE
1349 SELECT CASE (qs_control%xtb_control%gfn_type)
1350 CASE (0)
1351 qs_control%xtb_control%s6 = 1.00_dp
1352 qs_control%xtb_control%s8 = 2.85_dp
1353 CASE (1)
1354 qs_control%xtb_control%s6 = 1.00_dp
1355 qs_control%xtb_control%s8 = 2.40_dp
1356 CASE (2)
1357 cpabort("gfn2-xtb tbd")
1358 CASE DEFAULT
1359 cpabort("GFN type")
1360 END SELECT
1361 END IF
1362 CALL section_vals_val_get(xtb_parameter, "D3BJ_PARAM", explicit=explicit)
1363 IF (explicit) THEN
1364 CALL section_vals_val_get(xtb_parameter, "D3BJ_PARAM", r_vals=scal)
1365 qs_control%xtb_control%a1 = scal(1)
1366 qs_control%xtb_control%a2 = scal(2)
1367 ELSE
1368 SELECT CASE (qs_control%xtb_control%gfn_type)
1369 CASE (0)
1370 qs_control%xtb_control%a1 = 0.80_dp
1371 qs_control%xtb_control%a2 = 4.60_dp
1372 CASE (1)
1373 qs_control%xtb_control%a1 = 0.63_dp
1374 qs_control%xtb_control%a2 = 5.00_dp
1375 CASE (2)
1376 cpabort("gfn2-xtb tbd")
1377 CASE DEFAULT
1378 cpabort("GFN type")
1379 END SELECT
1380 END IF
1381 CALL section_vals_val_get(xtb_parameter, "DISPERSION_PARAMETER_FILE", &
1382 c_val=qs_control%xtb_control%dispersion_parameter_file)
1383 ! global parameters
1384 CALL section_vals_val_get(xtb_parameter, "HUCKEL_CONSTANTS", explicit=explicit)
1385 IF (explicit) THEN
1386 CALL section_vals_val_get(xtb_parameter, "HUCKEL_CONSTANTS", r_vals=scal)
1387 qs_control%xtb_control%ks = scal(1)
1388 qs_control%xtb_control%kp = scal(2)
1389 qs_control%xtb_control%kd = scal(3)
1390 qs_control%xtb_control%ksp = scal(4)
1391 qs_control%xtb_control%k2sh = scal(5)
1392 IF (qs_control%xtb_control%gfn_type == 0) THEN
1393 ! enforce ksp for gfn0
1394 qs_control%xtb_control%ksp = 0.5_dp*(scal(1) + scal(2))
1395 END IF
1396 ELSE
1397 SELECT CASE (qs_control%xtb_control%gfn_type)
1398 CASE (0)
1399 qs_control%xtb_control%ks = 2.00_dp
1400 qs_control%xtb_control%kp = 2.4868_dp
1401 qs_control%xtb_control%kd = 2.27_dp
1402 qs_control%xtb_control%ksp = 2.2434_dp
1403 qs_control%xtb_control%k2sh = 1.1241_dp
1404 CASE (1)
1405 qs_control%xtb_control%ks = 1.85_dp
1406 qs_control%xtb_control%kp = 2.25_dp
1407 qs_control%xtb_control%kd = 2.00_dp
1408 qs_control%xtb_control%ksp = 2.08_dp
1409 qs_control%xtb_control%k2sh = 2.85_dp
1410 CASE (2)
1411 cpabort("gfn2-xtb tbd")
1412 CASE DEFAULT
1413 cpabort("GFN type")
1414 END SELECT
1415 END IF
1416 CALL section_vals_val_get(xtb_parameter, "COULOMB_CONSTANTS", explicit=explicit)
1417 IF (explicit) THEN
1418 CALL section_vals_val_get(xtb_parameter, "COULOMB_CONSTANTS", r_vals=scal)
1419 qs_control%xtb_control%kg = scal(1)
1420 qs_control%xtb_control%kf = scal(2)
1421 ELSE
1422 SELECT CASE (qs_control%xtb_control%gfn_type)
1423 CASE (0)
1424 qs_control%xtb_control%kg = 2.00_dp
1425 qs_control%xtb_control%kf = 1.50_dp
1426 CASE (1)
1427 qs_control%xtb_control%kg = 2.00_dp
1428 qs_control%xtb_control%kf = 1.50_dp
1429 CASE (2)
1430 cpabort("gfn2-xtb tbd")
1431 CASE DEFAULT
1432 cpabort("GFN type")
1433 END SELECT
1434 END IF
1435 CALL section_vals_val_get(xtb_parameter, "CN_CONSTANTS", r_vals=scal)
1436 qs_control%xtb_control%kcns = scal(1)
1437 qs_control%xtb_control%kcnp = scal(2)
1438 qs_control%xtb_control%kcnd = scal(3)
1439 !
1440 CALL section_vals_val_get(xtb_parameter, "EN_CONSTANTS", explicit=explicit)
1441 IF (explicit) THEN
1442 CALL section_vals_val_get(xtb_parameter, "EN_CONSTANTS", r_vals=scal)
1443 SELECT CASE (qs_control%xtb_control%gfn_type)
1444 CASE (0)
1445 qs_control%xtb_control%ksen = scal(1)
1446 qs_control%xtb_control%kpen = scal(2)
1447 qs_control%xtb_control%kden = scal(3)
1448 CASE (1)
1449 qs_control%xtb_control%ken = scal(1)
1450 CASE (2)
1451 cpabort("gfn2-xtb tbd")
1452 CASE DEFAULT
1453 cpabort("GFN type")
1454 END SELECT
1455 ELSE
1456 SELECT CASE (qs_control%xtb_control%gfn_type)
1457 CASE (0)
1458 qs_control%xtb_control%ksen = 0.006_dp
1459 qs_control%xtb_control%kpen = -0.001_dp
1460 qs_control%xtb_control%kden = -0.002_dp
1461 CASE (1)
1462 qs_control%xtb_control%ken = -0.007_dp
1463 CASE (2)
1464 cpabort("gfn2-xtb tbd")
1465 CASE DEFAULT
1466 cpabort("GFN type")
1467 END SELECT
1468 END IF
1469 ! ben
1470 CALL section_vals_val_get(xtb_parameter, "BEN_CONSTANT", r_vals=scal)
1471 qs_control%xtb_control%ben = scal(1)
1472 ! enscale (hidden parameter in repulsion
1473 CALL section_vals_val_get(xtb_parameter, "ENSCALE", explicit=explicit)
1474 IF (explicit) THEN
1475 CALL section_vals_val_get(xtb_parameter, "ENSCALE", &
1476 r_val=qs_control%xtb_control%enscale)
1477 ELSE
1478 SELECT CASE (qs_control%xtb_control%gfn_type)
1479 CASE (0)
1480 qs_control%xtb_control%enscale = -0.09_dp
1481 CASE (1)
1482 qs_control%xtb_control%enscale = 0._dp
1483 CASE (2)
1484 cpabort("gfn2-xtb tbd")
1485 CASE DEFAULT
1486 cpabort("GFN type")
1487 END SELECT
1488 END IF
1489 ! XB
1490 CALL section_vals_val_get(xtb_section, "USE_HALOGEN_CORRECTION", &
1491 l_val=qs_control%xtb_control%xb_interaction)
1492 CALL section_vals_val_get(xtb_parameter, "HALOGEN_BINDING", r_vals=scal)
1493 qs_control%xtb_control%kxr = scal(1)
1494 qs_control%xtb_control%kx2 = scal(2)
1495 ! NONBONDED interactions
1496 CALL section_vals_val_get(xtb_section, "DO_NONBONDED", &
1497 l_val=qs_control%xtb_control%do_nonbonded)
1498 CALL section_vals_get(nonbonded_section, explicit=explicit)
1499 IF (explicit .AND. qs_control%xtb_control%do_nonbonded) THEN
1500 CALL section_vals_get(genpot_section, explicit=explicit, n_repetition=ngp)
1501 IF (explicit) THEN
1502 CALL pair_potential_reallocate(qs_control%xtb_control%nonbonded, 1, ngp, gp=.true.)
1503 CALL read_gp_section(qs_control%xtb_control%nonbonded, genpot_section, 0)
1504 END IF
1505 END IF !nonbonded
1506 CALL section_vals_val_get(xtb_section, "EPS_PAIRPOTENTIAL", &
1507 r_val=qs_control%xtb_control%eps_pair)
1508 ! SR Coulomb
1509 CALL section_vals_val_get(xtb_parameter, "COULOMB_SR_CUT", r_vals=scal)
1510 qs_control%xtb_control%coulomb_sr_cut = scal(1)
1511 CALL section_vals_val_get(xtb_parameter, "COULOMB_SR_EPS", r_vals=scal)
1512 qs_control%xtb_control%coulomb_sr_eps = scal(1)
1513 ! XB_radius
1514 CALL section_vals_val_get(xtb_parameter, "XB_RADIUS", r_val=qs_control%xtb_control%xb_radius)
1515 ! Kab
1516 CALL section_vals_val_get(xtb_parameter, "KAB_PARAM", n_rep_val=n_rep)
1517 ! Coulomb
1518 SELECT CASE (qs_control%xtb_control%gfn_type)
1519 CASE (0)
1520 qs_control%xtb_control%coulomb_interaction = .false.
1521 qs_control%xtb_control%coulomb_lr = .false.
1522 qs_control%xtb_control%tb3_interaction = .false.
1523 qs_control%xtb_control%check_atomic_charges = .false.
1524 CALL section_vals_val_get(xtb_section, "VARIATIONAL_DIPOLE", &
1525 l_val=qs_control%xtb_control%var_dipole)
1526 CASE (1)
1527 ! For debugging purposes
1528 CALL section_vals_val_get(xtb_section, "COULOMB_INTERACTION", &
1529 l_val=qs_control%xtb_control%coulomb_interaction)
1530 CALL section_vals_val_get(xtb_section, "COULOMB_LR", &
1531 l_val=qs_control%xtb_control%coulomb_lr)
1532 CALL section_vals_val_get(xtb_section, "TB3_INTERACTION", &
1533 l_val=qs_control%xtb_control%tb3_interaction)
1534 ! Check for bad atomic charges
1535 CALL section_vals_val_get(xtb_section, "CHECK_ATOMIC_CHARGES", &
1536 l_val=qs_control%xtb_control%check_atomic_charges)
1537 qs_control%xtb_control%var_dipole = .false.
1538 CASE (2)
1539 cpabort("gfn2-xtb tbd")
1540 CASE DEFAULT
1541 cpabort("GFN type")
1542 END SELECT
1543 qs_control%xtb_control%kab_nval = n_rep
1544 IF (n_rep > 0) THEN
1545 ALLOCATE (qs_control%xtb_control%kab_param(3, n_rep))
1546 ALLOCATE (qs_control%xtb_control%kab_types(2, n_rep))
1547 ALLOCATE (qs_control%xtb_control%kab_vals(n_rep))
1548 DO j = 1, n_rep
1549 CALL section_vals_val_get(xtb_parameter, "KAB_PARAM", i_rep_val=j, c_vals=clist)
1550 qs_control%xtb_control%kab_param(1, j) = clist(1)
1551 CALL get_ptable_info(clist(1), &
1552 ielement=qs_control%xtb_control%kab_types(1, j))
1553 qs_control%xtb_control%kab_param(2, j) = clist(2)
1554 CALL get_ptable_info(clist(2), &
1555 ielement=qs_control%xtb_control%kab_types(2, j))
1556 qs_control%xtb_control%kab_param(3, j) = clist(3)
1557 READ (clist(3), '(F10.0)') qs_control%xtb_control%kab_vals(j)
1558 END DO
1559 END IF
1560
1561 IF (qs_control%xtb_control%gfn_type == 0) THEN
1562 CALL section_vals_val_get(xtb_parameter, "SRB_PARAMETER", r_vals=scal)
1563 qs_control%xtb_control%ksrb = scal(1)
1564 qs_control%xtb_control%esrb = scal(2)
1565 qs_control%xtb_control%gscal = scal(3)
1566 qs_control%xtb_control%c1srb = scal(4)
1567 qs_control%xtb_control%c2srb = scal(5)
1568 qs_control%xtb_control%shift = scal(6)
1569 END IF
1570
1571 CALL section_vals_val_get(xtb_section, "EN_SHIFT_TYPE", c_val=cval)
1572 CALL uppercase(cval)
1573 SELECT CASE (trim(cval))
1574 CASE ("SELECT")
1575 qs_control%xtb_control%enshift_type = 0
1576 CASE ("MOLECULE")
1577 qs_control%xtb_control%enshift_type = 1
1578 CASE ("CRYSTAL")
1579 qs_control%xtb_control%enshift_type = 2
1580 CASE DEFAULT
1581 cpabort("Unknown value for EN_SHIFT_TYPE")
1582 END SELECT
1583
1584 ! EEQ solver params
1585 CALL read_eeq_param(eeq_section, qs_control%xtb_control%eeq_sparam)
1586
1587 END IF
1588
1589 ! Optimize LRI basis set
1590 CALL section_vals_get(lri_optbas_section, explicit=qs_control%lri_optbas)
1591
1592 CALL timestop(handle)
1593 END SUBROUTINE read_qs_section
1594
1595! **************************************************************************************************
1596!> \brief Read TDDFPT-related input parameters.
1597!> \param t_control TDDFPT control parameters
1598!> \param t_section TDDFPT input section
1599!> \param qs_control Quickstep control parameters
1600! **************************************************************************************************
1601 SUBROUTINE read_tddfpt2_control(t_control, t_section, qs_control)
1602 TYPE(tddfpt2_control_type), POINTER :: t_control
1603 TYPE(section_vals_type), POINTER :: t_section
1604 TYPE(qs_control_type), POINTER :: qs_control
1605
1606 CHARACTER(LEN=*), PARAMETER :: routinen = 'read_tddfpt2_control'
1607
1608 CHARACTER(LEN=default_string_length), &
1609 DIMENSION(:), POINTER :: tmpstringlist
1610 INTEGER :: handle, irep, isize, nrep
1611 INTEGER, ALLOCATABLE, DIMENSION(:) :: inds
1612 LOGICAL :: do_ewald, do_exchange, expl, explicit, &
1613 multigrid_set
1614 REAL(kind=dp) :: filter, fval, hfx
1615 TYPE(section_vals_type), POINTER :: dipole_section, mgrid_section, &
1616 soc_section, stda_section, xc_func, &
1617 xc_section
1618
1619 CALL timeset(routinen, handle)
1620
1621 CALL section_vals_val_get(t_section, "_SECTION_PARAMETERS_", l_val=t_control%enabled)
1622
1623 CALL section_vals_val_get(t_section, "NSTATES", i_val=t_control%nstates)
1624 CALL section_vals_val_get(t_section, "MAX_ITER", i_val=t_control%niters)
1625 CALL section_vals_val_get(t_section, "MAX_KV", i_val=t_control%nkvs)
1626 CALL section_vals_val_get(t_section, "NLUMO", i_val=t_control%nlumo)
1627 CALL section_vals_val_get(t_section, "NPROC_STATE", i_val=t_control%nprocs)
1628 CALL section_vals_val_get(t_section, "KERNEL", i_val=t_control%kernel)
1629 CALL section_vals_val_get(t_section, "OE_CORR", i_val=t_control%oe_corr)
1630 CALL section_vals_val_get(t_section, "EV_SHIFT", r_val=t_control%ev_shift)
1631 CALL section_vals_val_get(t_section, "EOS_SHIFT", r_val=t_control%eos_shift)
1632
1633 CALL section_vals_val_get(t_section, "CONVERGENCE", r_val=t_control%conv)
1634 CALL section_vals_val_get(t_section, "MIN_AMPLITUDE", r_val=t_control%min_excitation_amplitude)
1635 CALL section_vals_val_get(t_section, "ORTHOGONAL_EPS", r_val=t_control%orthogonal_eps)
1636
1637 CALL section_vals_val_get(t_section, "RESTART", l_val=t_control%is_restart)
1638 CALL section_vals_val_get(t_section, "RKS_TRIPLETS", l_val=t_control%rks_triplets)
1639 CALL section_vals_val_get(t_section, "DO_LRIGPW", l_val=t_control%do_lrigpw)
1640 CALL section_vals_val_get(t_section, "DO_SMEARING", l_val=t_control%do_smearing)
1641 CALL section_vals_val_get(t_section, "ADMM_KERNEL_CORRECTION_SYMMETRIC", l_val=t_control%admm_symm)
1642 CALL section_vals_val_get(t_section, "ADMM_KERNEL_XC_CORRECTION", l_val=t_control%admm_xc_correction)
1643 CALL section_vals_val_get(t_section, "EXCITON_DESCRIPTORS", l_val=t_control%do_exciton_descriptors)
1644 CALL section_vals_val_get(t_section, "DIRECTIONAL_EXCITON_DESCRIPTORS", l_val=t_control%do_directional_exciton_descriptors)
1645
1646 ! read automatically generated auxiliary basis for LRI
1647 CALL section_vals_val_get(t_section, "AUTO_BASIS", n_rep_val=nrep)
1648 DO irep = 1, nrep
1649 CALL section_vals_val_get(t_section, "AUTO_BASIS", i_rep_val=irep, c_vals=tmpstringlist)
1650 IF (SIZE(tmpstringlist) == 2) THEN
1651 CALL uppercase(tmpstringlist(2))
1652 SELECT CASE (tmpstringlist(2))
1653 CASE ("X")
1654 isize = -1
1655 CASE ("SMALL")
1656 isize = 0
1657 CASE ("MEDIUM")
1658 isize = 1
1659 CASE ("LARGE")
1660 isize = 2
1661 CASE ("HUGE")
1662 isize = 3
1663 CASE DEFAULT
1664 cpabort("Unknown basis size in AUTO_BASIS keyword:"//trim(tmpstringlist(1)))
1665 END SELECT
1666 !
1667 SELECT CASE (tmpstringlist(1))
1668 CASE ("X")
1669 CASE ("P_LRI_AUX")
1670 t_control%auto_basis_p_lri_aux = isize
1671 CASE DEFAULT
1672 cpabort("Unknown basis type in AUTO_BASIS keyword:"//trim(tmpstringlist(1)))
1673 END SELECT
1674 ELSE
1675 CALL cp_abort(__location__, &
1676 "AUTO_BASIS keyword in &PROPERTIES &TDDFT section has a wrong number of arguments.")
1677 END IF
1678 END DO
1679
1680 IF (t_control%conv < 0) &
1681 t_control%conv = abs(t_control%conv)
1682
1683 ! DIPOLE_MOMENTS subsection
1684 dipole_section => section_vals_get_subs_vals(t_section, "DIPOLE_MOMENTS")
1685 CALL section_vals_val_get(dipole_section, "DIPOLE_FORM", explicit=explicit)
1686 IF (explicit) THEN
1687 CALL section_vals_val_get(dipole_section, "DIPOLE_FORM", i_val=t_control%dipole_form)
1688 ELSE
1689 t_control%dipole_form = 0
1690 END IF
1691 CALL section_vals_val_get(dipole_section, "REFERENCE", i_val=t_control%dipole_reference)
1692 CALL section_vals_val_get(dipole_section, "REFERENCE_POINT", explicit=explicit)
1693 IF (explicit) THEN
1694 CALL section_vals_val_get(dipole_section, "REFERENCE_POINT", r_vals=t_control%dipole_ref_point)
1695 ELSE
1696 NULLIFY (t_control%dipole_ref_point)
1697 IF (t_control%dipole_form == tddfpt_dipole_length .AND. t_control%dipole_reference == use_mom_ref_user) THEN
1698 cpabort("User-defined reference point should be given explicitly")
1699 END IF
1700 END IF
1701
1702 !SOC subsection
1703 soc_section => section_vals_get_subs_vals(t_section, "SOC")
1704 CALL section_vals_get(soc_section, explicit=explicit)
1705 IF (explicit) THEN
1706 t_control%do_soc = .true.
1707 END IF
1708
1709 ! MGRID subsection
1710 mgrid_section => section_vals_get_subs_vals(t_section, "MGRID")
1711 CALL section_vals_get(mgrid_section, explicit=t_control%mgrid_is_explicit)
1712
1713 IF (t_control%mgrid_is_explicit) THEN
1714 CALL section_vals_val_get(mgrid_section, "NGRIDS", i_val=t_control%mgrid_ngrids, explicit=explicit)
1715 IF (.NOT. explicit) t_control%mgrid_ngrids = SIZE(qs_control%e_cutoff)
1716
1717 CALL section_vals_val_get(mgrid_section, "CUTOFF", r_val=t_control%mgrid_cutoff, explicit=explicit)
1718 IF (.NOT. explicit) t_control%mgrid_cutoff = qs_control%cutoff
1719
1720 CALL section_vals_val_get(mgrid_section, "PROGRESSION_FACTOR", &
1721 r_val=t_control%mgrid_progression_factor, explicit=explicit)
1722 IF (explicit) THEN
1723 IF (t_control%mgrid_progression_factor <= 1.0_dp) &
1724 CALL cp_abort(__location__, &
1725 "Progression factor should be greater then 1.0 to ensure multi-grid ordering")
1726 ELSE
1727 t_control%mgrid_progression_factor = qs_control%progression_factor
1728 END IF
1729
1730 CALL section_vals_val_get(mgrid_section, "COMMENSURATE", l_val=t_control%mgrid_commensurate_mgrids, explicit=explicit)
1731 IF (.NOT. explicit) t_control%mgrid_commensurate_mgrids = qs_control%commensurate_mgrids
1732 IF (t_control%mgrid_commensurate_mgrids) THEN
1733 IF (explicit) THEN
1734 t_control%mgrid_progression_factor = 4.0_dp
1735 ELSE
1736 t_control%mgrid_progression_factor = qs_control%progression_factor
1737 END IF
1738 END IF
1739
1740 CALL section_vals_val_get(mgrid_section, "REL_CUTOFF", r_val=t_control%mgrid_relative_cutoff, explicit=explicit)
1741 IF (.NOT. explicit) t_control%mgrid_relative_cutoff = qs_control%relative_cutoff
1742
1743 CALL section_vals_val_get(mgrid_section, "MULTIGRID_SET", l_val=multigrid_set, explicit=explicit)
1744 IF (.NOT. explicit) multigrid_set = .false.
1745 IF (multigrid_set) THEN
1746 CALL section_vals_val_get(mgrid_section, "MULTIGRID_CUTOFF", r_vals=t_control%mgrid_e_cutoff)
1747 ELSE
1748 NULLIFY (t_control%mgrid_e_cutoff)
1749 END IF
1750
1751 CALL section_vals_val_get(mgrid_section, "REALSPACE", l_val=t_control%mgrid_realspace_mgrids, explicit=explicit)
1752 IF (.NOT. explicit) t_control%mgrid_realspace_mgrids = qs_control%realspace_mgrids
1753
1754 CALL section_vals_val_get(mgrid_section, "SKIP_LOAD_BALANCE_DISTRIBUTED", &
1755 l_val=t_control%mgrid_skip_load_balance, explicit=explicit)
1756 IF (.NOT. explicit) t_control%mgrid_skip_load_balance = qs_control%skip_load_balance_distributed
1757
1758 IF (ASSOCIATED(t_control%mgrid_e_cutoff)) THEN
1759 IF (SIZE(t_control%mgrid_e_cutoff) /= t_control%mgrid_ngrids) &
1760 cpabort("Inconsistent values for number of multi-grids")
1761
1762 ! sort multi-grids in descending order according to their cutoff values
1763 t_control%mgrid_e_cutoff = -t_control%mgrid_e_cutoff
1764 ALLOCATE (inds(t_control%mgrid_ngrids))
1765 CALL sort(t_control%mgrid_e_cutoff, t_control%mgrid_ngrids, inds)
1766 DEALLOCATE (inds)
1767 t_control%mgrid_e_cutoff = -t_control%mgrid_e_cutoff
1768 END IF
1769 END IF
1770
1771 ! expand XC subsection (if given explicitly)
1772 xc_section => section_vals_get_subs_vals(t_section, "XC")
1773 xc_func => section_vals_get_subs_vals(xc_section, "XC_FUNCTIONAL")
1774 CALL section_vals_get(xc_func, explicit=explicit)
1775 IF (explicit) &
1776 CALL xc_functionals_expand(xc_func, xc_section)
1777
1778 ! sTDA subsection
1779 stda_section => section_vals_get_subs_vals(t_section, "STDA")
1780 IF (t_control%kernel == tddfpt_kernel_stda) THEN
1781 t_control%stda_control%hfx_fraction = 0.0_dp
1782 t_control%stda_control%do_exchange = .true.
1783 t_control%stda_control%eps_td_filter = 1.e-10_dp
1784 t_control%stda_control%mn_alpha = -99.0_dp
1785 t_control%stda_control%mn_beta = -99.0_dp
1786 ! set default for Ewald method (on/off) dependent on periodicity
1787 SELECT CASE (qs_control%periodicity)
1788 CASE (0)
1789 t_control%stda_control%do_ewald = .false.
1790 CASE (1)
1791 t_control%stda_control%do_ewald = .true.
1792 CASE (2)
1793 t_control%stda_control%do_ewald = .true.
1794 CASE (3)
1795 t_control%stda_control%do_ewald = .true.
1796 CASE DEFAULT
1797 cpabort("Illegal value for periodiciy")
1798 END SELECT
1799 CALL section_vals_get(stda_section, explicit=explicit)
1800 IF (explicit) THEN
1801 CALL section_vals_val_get(stda_section, "HFX_FRACTION", r_val=hfx, explicit=expl)
1802 IF (expl) t_control%stda_control%hfx_fraction = hfx
1803 CALL section_vals_val_get(stda_section, "EPS_TD_FILTER", r_val=filter, explicit=expl)
1804 IF (expl) t_control%stda_control%eps_td_filter = filter
1805 CALL section_vals_val_get(stda_section, "DO_EWALD", l_val=do_ewald, explicit=expl)
1806 IF (expl) t_control%stda_control%do_ewald = do_ewald
1807 CALL section_vals_val_get(stda_section, "DO_EXCHANGE", l_val=do_exchange, explicit=expl)
1808 IF (expl) t_control%stda_control%do_exchange = do_exchange
1809 CALL section_vals_val_get(stda_section, "MATAGA_NISHIMOTO_CEXP", r_val=fval)
1810 t_control%stda_control%mn_alpha = fval
1811 CALL section_vals_val_get(stda_section, "MATAGA_NISHIMOTO_XEXP", r_val=fval)
1812 t_control%stda_control%mn_beta = fval
1813 END IF
1814 CALL section_vals_val_get(stda_section, "COULOMB_SR_CUT", r_val=fval)
1815 t_control%stda_control%coulomb_sr_cut = fval
1816 CALL section_vals_val_get(stda_section, "COULOMB_SR_EPS", r_val=fval)
1817 t_control%stda_control%coulomb_sr_eps = fval
1818 END IF
1819
1820 CALL timestop(handle)
1821 END SUBROUTINE read_tddfpt2_control
1822
1823! **************************************************************************************************
1824!> \brief Write the DFT control parameters to the output unit.
1825!> \param dft_control ...
1826!> \param dft_section ...
1827! **************************************************************************************************
1828 SUBROUTINE write_dft_control(dft_control, dft_section)
1829 TYPE(dft_control_type), POINTER :: dft_control
1830 TYPE(section_vals_type), POINTER :: dft_section
1831
1832 CHARACTER(len=*), PARAMETER :: routinen = 'write_dft_control'
1833
1834 CHARACTER(LEN=20) :: tmpstr
1835 INTEGER :: handle, i, output_unit
1836 REAL(kind=dp) :: density_cut, density_smooth_cut_range, &
1837 gradient_cut, tau_cut
1838 TYPE(cp_logger_type), POINTER :: logger
1839 TYPE(enumeration_type), POINTER :: enum
1840 TYPE(keyword_type), POINTER :: keyword
1841 TYPE(section_type), POINTER :: section
1842 TYPE(section_vals_type), POINTER :: xc_section
1843
1844 IF (dft_control%qs_control%semi_empirical) RETURN
1845 IF (dft_control%qs_control%dftb) RETURN
1846 IF (dft_control%qs_control%xtb) THEN
1847 CALL write_xtb_control(dft_control%qs_control%xtb_control, dft_section)
1848 RETURN
1849 END IF
1850 CALL timeset(routinen, handle)
1851
1852 NULLIFY (logger)
1853 logger => cp_get_default_logger()
1854
1855 output_unit = cp_print_key_unit_nr(logger, dft_section, &
1856 "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
1857
1858 IF (output_unit > 0) THEN
1859
1860 xc_section => section_vals_get_subs_vals(dft_section, "XC")
1861
1862 IF (dft_control%uks) THEN
1863 WRITE (unit=output_unit, fmt="(/,T2,A,T78,A)") &
1864 "DFT| Spin unrestricted (spin-polarized) Kohn-Sham calculation", "UKS"
1865 ELSE IF (dft_control%roks) THEN
1866 WRITE (unit=output_unit, fmt="(/,T2,A,T77,A)") &
1867 "DFT| Spin restricted open Kohn-Sham calculation", "ROKS"
1868 ELSE
1869 WRITE (unit=output_unit, fmt="(/,T2,A,T78,A)") &
1870 "DFT| Spin restricted Kohn-Sham (RKS) calculation", "RKS"
1871 END IF
1872
1873 WRITE (unit=output_unit, fmt="(T2,A,T76,I5)") &
1874 "DFT| Multiplicity", dft_control%multiplicity
1875 WRITE (unit=output_unit, fmt="(T2,A,T76,I5)") &
1876 "DFT| Number of spin states", dft_control%nspins
1877
1878 WRITE (unit=output_unit, fmt="(T2,A,T76,I5)") &
1879 "DFT| Charge", dft_control%charge
1880
1881 IF (dft_control%sic_method_id .NE. sic_none) CALL cite_reference(vandevondele2005b)
1882 SELECT CASE (dft_control%sic_method_id)
1883 CASE (sic_none)
1884 tmpstr = "NO"
1885 CASE (sic_mauri_spz)
1886 tmpstr = "SPZ/MAURI SIC"
1887 CASE (sic_mauri_us)
1888 tmpstr = "US/MAURI SIC"
1889 CASE (sic_ad)
1890 tmpstr = "AD SIC"
1891 CASE (sic_eo)
1892 tmpstr = "Explicit Orbital SIC"
1893 CASE DEFAULT
1894 ! fix throughout the cp2k for this option
1895 cpabort("SIC option unknown")
1896 END SELECT
1897
1898 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
1899 "DFT| Self-interaction correction (SIC)", adjustr(trim(tmpstr))
1900
1901 IF (dft_control%sic_method_id /= sic_none) THEN
1902 WRITE (unit=output_unit, fmt="(T2,A,T66,ES15.6)") &
1903 "DFT| SIC scaling parameter a", dft_control%sic_scaling_a, &
1904 "DFT| SIC scaling parameter b", dft_control%sic_scaling_b
1905 END IF
1906
1907 IF (dft_control%sic_method_id == sic_eo) THEN
1908 IF (dft_control%sic_list_id == sic_list_all) THEN
1909 WRITE (unit=output_unit, fmt="(T2,A,T66,A)") &
1910 "DFT| SIC orbitals", "ALL"
1911 END IF
1912 IF (dft_control%sic_list_id == sic_list_unpaired) THEN
1913 WRITE (unit=output_unit, fmt="(T2,A,T66,A)") &
1914 "DFT| SIC orbitals", "UNPAIRED"
1915 END IF
1916 END IF
1917
1918 CALL section_vals_val_get(xc_section, "density_cutoff", r_val=density_cut)
1919 CALL section_vals_val_get(xc_section, "gradient_cutoff", r_val=gradient_cut)
1920 CALL section_vals_val_get(xc_section, "tau_cutoff", r_val=tau_cut)
1921 CALL section_vals_val_get(xc_section, "density_smooth_cutoff_range", r_val=density_smooth_cut_range)
1922
1923 WRITE (unit=output_unit, fmt="(T2,A,T66,ES15.6)") &
1924 "DFT| Cutoffs: density ", density_cut, &
1925 "DFT| gradient", gradient_cut, &
1926 "DFT| tau ", tau_cut, &
1927 "DFT| cutoff_smoothing_range", density_smooth_cut_range
1928 CALL section_vals_val_get(xc_section, "XC_GRID%XC_SMOOTH_RHO", &
1929 c_val=tmpstr)
1930 WRITE (output_unit, '( A, T61, A )') &
1931 " DFT| XC density smoothing ", adjustr(tmpstr)
1932 CALL section_vals_val_get(xc_section, "XC_GRID%XC_DERIV", &
1933 c_val=tmpstr)
1934 WRITE (output_unit, '( A, T61, A )') &
1935 " DFT| XC derivatives ", adjustr(tmpstr)
1936 IF (dft_control%dft_plus_u) THEN
1937 NULLIFY (enum, keyword, section)
1938 CALL create_dft_section(section)
1939 keyword => section_get_keyword(section, "PLUS_U_METHOD")
1940 CALL keyword_get(keyword, enum=enum)
1941 WRITE (unit=output_unit, fmt="(/,T2,A,T41,A40)") &
1942 "DFT+U| Method", adjustr(trim(enum_i2c(enum, dft_control%plus_u_method_id)))
1943 WRITE (unit=output_unit, fmt="(T2,A)") &
1944 "DFT+U| Check atomic kind information for details"
1945 CALL section_release(section)
1946 END IF
1947
1948 WRITE (unit=output_unit, fmt="(A)") ""
1949 CALL xc_write(output_unit, xc_section, dft_control%lsd)
1950
1951 IF (dft_control%apply_period_efield) THEN
1952 WRITE (unit=output_unit, fmt="(A)") ""
1953 IF (dft_control%period_efield%displacement_field) THEN
1954 WRITE (unit=output_unit, fmt="(T2,A)") &
1955 "PERIODIC_EFIELD| Use displacement field formulation"
1956 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,ES14.6)") &
1957 "PERIODIC_EFIELD| Displacement field filter: x", &
1958 dft_control%period_efield%d_filter(1), &
1959 "PERIODIC_EFIELD| y", &
1960 dft_control%period_efield%d_filter(2), &
1961 "PERIODIC_EFIELD| z", &
1962 dft_control%period_efield%d_filter(3)
1963 END IF
1964 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,ES14.6)") &
1965 "PERIODIC_EFIELD| Polarisation vector: x", &
1966 dft_control%period_efield%polarisation(1), &
1967 "PERIODIC_EFIELD| y", &
1968 dft_control%period_efield%polarisation(2), &
1969 "PERIODIC_EFIELD| z", &
1970 dft_control%period_efield%polarisation(3)
1971
1972 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,I14)") &
1973 "PERIODIC_EFIELD| Start Frame:", &
1974 dft_control%period_efield%start_frame, &
1975 "PERIODIC_EFIELD| End Frame:", &
1976 dft_control%period_efield%end_frame
1977
1978 IF (ALLOCATED(dft_control%period_efield%strength_list)) THEN
1979 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,I14)") &
1980 "PERIODIC_EFIELD| Number of Intensities:", &
1981 SIZE(dft_control%period_efield%strength_list)
1982 WRITE (unit=output_unit, fmt="(T2,A,I10,T66,1X,ES14.6)") &
1983 "PERIODIC_EFIELD| Intensity List [a.u.] ", &
1984 1, dft_control%period_efield%strength_list(1)
1985 DO i = 2, SIZE(dft_control%period_efield%strength_list)
1986 WRITE (unit=output_unit, fmt="(T2,A,I10,T66,1X,ES14.6)") &
1987 "PERIODIC_EFIELD| ", &
1988 i, dft_control%period_efield%strength_list(i)
1989 END DO
1990 ELSE
1991 WRITE (unit=output_unit, fmt="(T2,A,T66,1X,ES14.6)") &
1992 "PERIODIC_EFIELD| Intensity [a.u.]:", &
1993 dft_control%period_efield%strength
1994 END IF
1995
1996 IF (sqrt(dot_product(dft_control%period_efield%polarisation, &
1997 dft_control%period_efield%polarisation)) < epsilon(0.0_dp)) THEN
1998 cpabort("Invalid (too small) polarisation vector specified for PERIODIC_EFIELD")
1999 END IF
2000 END IF
2001
2002 IF (dft_control%do_sccs) THEN
2003 WRITE (unit=output_unit, fmt="(/,T2,A)") &
2004 "SCCS| Self-consistent continuum solvation model"
2005 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2006 "SCCS| Relative permittivity of the solvent (medium)", &
2007 dft_control%sccs_control%epsilon_solvent, &
2008 "SCCS| Absolute permittivity [a.u.]", &
2009 dft_control%sccs_control%epsilon_solvent/fourpi
2010 SELECT CASE (dft_control%sccs_control%method_id)
2011 CASE (sccs_andreussi)
2012 WRITE (unit=output_unit, fmt="(T2,A,/,(T2,A,T61,ES20.6))") &
2013 "SCCS| Dielectric function proposed by Andreussi et al.", &
2014 "SCCS| rho_max", dft_control%sccs_control%rho_max, &
2015 "SCCS| rho_min", dft_control%sccs_control%rho_min
2016 CASE (sccs_fattebert_gygi)
2017 WRITE (unit=output_unit, fmt="(T2,A,/,(T2,A,T61,ES20.6))") &
2018 "SCCS| Dielectric function proposed by Fattebert and Gygi", &
2019 "SCCS| beta", dft_control%sccs_control%beta, &
2020 "SCCS| rho_zero", dft_control%sccs_control%rho_zero
2021 CASE DEFAULT
2022 cpabort("Invalid SCCS model specified. Please, check your input!")
2023 END SELECT
2024 SELECT CASE (dft_control%sccs_control%derivative_method)
2025 CASE (sccs_derivative_fft)
2026 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2027 "SCCS| Numerical derivative calculation", &
2028 adjustr("FFT")
2029 CASE (sccs_derivative_cd3)
2030 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2031 "SCCS| Numerical derivative calculation", &
2032 adjustr("3-point stencil central differences")
2033 CASE (sccs_derivative_cd5)
2034 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2035 "SCCS| Numerical derivative calculation", &
2036 adjustr("5-point stencil central differences")
2037 CASE (sccs_derivative_cd7)
2038 WRITE (unit=output_unit, fmt="(T2,A,T46,A35)") &
2039 "SCCS| Numerical derivative calculation", &
2040 adjustr("7-point stencil central differences")
2041 CASE DEFAULT
2042 CALL cp_abort(__location__, &
2043 "Invalid derivative method specified for SCCS model. "// &
2044 "Please, check your input!")
2045 END SELECT
2046 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2047 "SCCS| Repulsion parameter alpha [mN/m] = [dyn/cm]", &
2048 cp_unit_from_cp2k(dft_control%sccs_control%alpha_solvent, "mN/m")
2049 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2050 "SCCS| Dispersion parameter beta [GPa]", &
2051 cp_unit_from_cp2k(dft_control%sccs_control%beta_solvent, "GPa")
2052 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2053 "SCCS| Surface tension gamma [mN/m] = [dyn/cm]", &
2054 cp_unit_from_cp2k(dft_control%sccs_control%gamma_solvent, "mN/m")
2055 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2056 "SCCS| Mixing parameter applied during the iteration cycle", &
2057 dft_control%sccs_control%mixing
2058 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2059 "SCCS| Tolerance for the convergence of the SCCS iteration cycle", &
2060 dft_control%sccs_control%eps_sccs
2061 WRITE (unit=output_unit, fmt="(T2,A,T61,I20)") &
2062 "SCCS| Maximum number of iteration steps", &
2063 dft_control%sccs_control%max_iter
2064 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2065 "SCCS| SCF convergence threshold for starting the SCCS iteration", &
2066 dft_control%sccs_control%eps_scf
2067 WRITE (unit=output_unit, fmt="(T2,A,T61,ES20.6)") &
2068 "SCCS| Numerical increment for the cavity surface calculation", &
2069 dft_control%sccs_control%delta_rho
2070 END IF
2071
2072 WRITE (unit=output_unit, fmt="(A)") ""
2073
2074 END IF
2075
2076 CALL cp_print_key_finished_output(output_unit, logger, dft_section, &
2077 "PRINT%DFT_CONTROL_PARAMETERS")
2078
2079 CALL timestop(handle)
2080
2081 END SUBROUTINE write_dft_control
2082
2083! **************************************************************************************************
2084!> \brief Write the ADMM control parameters to the output unit.
2085!> \param admm_control ...
2086!> \param dft_section ...
2087! **************************************************************************************************
2088 SUBROUTINE write_admm_control(admm_control, dft_section)
2089 TYPE(admm_control_type), POINTER :: admm_control
2090 TYPE(section_vals_type), POINTER :: dft_section
2091
2092 INTEGER :: iounit
2093 TYPE(cp_logger_type), POINTER :: logger
2094
2095 NULLIFY (logger)
2096 logger => cp_get_default_logger()
2097
2098 iounit = cp_print_key_unit_nr(logger, dft_section, &
2099 "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
2100
2101 IF (iounit > 0) THEN
2102
2103 SELECT CASE (admm_control%admm_type)
2104 CASE (no_admm_type)
2105 WRITE (unit=iounit, fmt="(/,T2,A,T77,A)") "ADMM| Specific ADMM type specified", "NONE"
2106 CASE (admm1_type)
2107 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM1"
2108 CASE (admm2_type)
2109 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMM2"
2110 CASE (admms_type)
2111 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMS"
2112 CASE (admmp_type)
2113 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMP"
2114 CASE (admmq_type)
2115 WRITE (unit=iounit, fmt="(/,T2,A,T76,A)") "ADMM| Specific ADMM type specified", "ADMMQ"
2116 CASE DEFAULT
2117 cpabort("admm_type")
2118 END SELECT
2119
2120 SELECT CASE (admm_control%purification_method)
2121 CASE (do_admm_purify_none)
2122 WRITE (unit=iounit, fmt="(T2,A,T77,A)") "ADMM| Density matrix purification method", "NONE"
2124 WRITE (unit=iounit, fmt="(T2,A,T75,A)") "ADMM| Density matrix purification method", "Cauchy"
2126 WRITE (unit=iounit, fmt="(T2,A,T66,A)") "ADMM| Density matrix purification method", "Cauchy subspace"
2128 WRITE (unit=iounit, fmt="(T2,A,T63,A)") "ADMM| Density matrix purification method", "MO diagonalization"
2130 WRITE (unit=iounit, fmt="(T2,A,T71,A)") "ADMM| Density matrix purification method", "MO no diag"
2132 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Density matrix purification method", "McWeeny"
2134 WRITE (unit=iounit, fmt="(T2,A,T73,A)") "ADMM| Density matrix purification method", "NONE(DM)"
2135 CASE DEFAULT
2136 cpabort("admm_purification_method")
2137 END SELECT
2138
2139 SELECT CASE (admm_control%method)
2141 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Orbital projection on ADMM basis"
2143 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Blocked Fock matrix projection with full purification"
2145 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Blocked Fock matrix projection"
2147 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Orbital projection with charge constrain"
2148 CASE DEFAULT
2149 cpabort("admm method")
2150 END SELECT
2151
2152 SELECT CASE (admm_control%scaling_model)
2155 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| Use Merlot (2014) scaling model"
2156 CASE DEFAULT
2157 cpabort("admm scaling_model")
2158 END SELECT
2159
2160 WRITE (unit=iounit, fmt="(T2,A,T61,G20.10)") "ADMM| eps_filter", admm_control%eps_filter
2161
2162 SELECT CASE (admm_control%aux_exch_func)
2164 WRITE (unit=iounit, fmt="(T2,A)") "ADMM| No exchange functional correction term used"
2166 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "(W)PBEX"
2168 WRITE (unit=iounit, fmt="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "PBEX"
2170 WRITE (unit=iounit, fmt="(T2,A,T77,A)") "ADMM| Exchange functional in correction term", "OPTX"
2172 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "Becke88"
2174 WRITE (unit=iounit, fmt="(T2,A,T74,A)") "ADMM| Exchange functional in correction term", "SlaterX"
2175 CASE DEFAULT
2176 cpabort("admm aux_exch_func")
2177 END SELECT
2178
2179 WRITE (unit=iounit, fmt="(A)") ""
2180
2181 END IF
2182
2183 CALL cp_print_key_finished_output(iounit, logger, dft_section, &
2184 "PRINT%DFT_CONTROL_PARAMETERS")
2185 END SUBROUTINE write_admm_control
2186
2187! **************************************************************************************************
2188!> \brief Write the xTB control parameters to the output unit.
2189!> \param xtb_control ...
2190!> \param dft_section ...
2191! **************************************************************************************************
2192 SUBROUTINE write_xtb_control(xtb_control, dft_section)
2193 TYPE(xtb_control_type), POINTER :: xtb_control
2194 TYPE(section_vals_type), POINTER :: dft_section
2195
2196 CHARACTER(len=*), PARAMETER :: routinen = 'write_xtb_control'
2197
2198 INTEGER :: handle, output_unit
2199 TYPE(cp_logger_type), POINTER :: logger
2200
2201 CALL timeset(routinen, handle)
2202 NULLIFY (logger)
2203 logger => cp_get_default_logger()
2204
2205 output_unit = cp_print_key_unit_nr(logger, dft_section, &
2206 "PRINT%DFT_CONTROL_PARAMETERS", extension=".Log")
2207
2208 IF (output_unit > 0) THEN
2209
2210 WRITE (unit=output_unit, fmt="(/,T2,A,T31,A50)") &
2211 "xTB| Parameter file", adjustr(trim(xtb_control%parameter_file_name))
2212 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2213 "xTB| Basis expansion STO-NG", xtb_control%sto_ng
2214 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2215 "xTB| Basis expansion STO-NG for Hydrogen", xtb_control%h_sto_ng
2216 WRITE (unit=output_unit, fmt="(T2,A,T71,E10.4)") &
2217 "xTB| Repulsive pair potential accuracy", xtb_control%eps_pair
2218 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.6)") &
2219 "xTB| Repulsive enhancement factor", xtb_control%enscale
2220 WRITE (unit=output_unit, fmt="(T2,A,T71,L10)") &
2221 "xTB| Halogen interaction potential", xtb_control%xb_interaction
2222 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2223 "xTB| Halogen interaction potential cutoff radius", xtb_control%xb_radius
2224 WRITE (unit=output_unit, fmt="(T2,A,T71,L10)") &
2225 "xTB| Nonbonded interactions", xtb_control%do_nonbonded
2226 SELECT CASE (xtb_control%vdw_type)
2227 CASE (xtb_vdw_type_none)
2228 WRITE (unit=output_unit, fmt="(T2,A)") "xTB| No vdW potential selected"
2229 CASE (xtb_vdw_type_d3)
2230 WRITE (unit=output_unit, fmt="(T2,A,T72,A)") "xTB| vdW potential type:", "DFTD3(BJ)"
2231 WRITE (unit=output_unit, fmt="(T2,A,T31,A50)") &
2232 "xTB| D3 Dispersion: Parameter file", adjustr(trim(xtb_control%dispersion_parameter_file))
2233 CASE (xtb_vdw_type_d4)
2234 WRITE (unit=output_unit, fmt="(T2,A,T76,A)") "xTB| vdW potential type:", "DFTD4"
2235 WRITE (unit=output_unit, fmt="(T2,A,T31,A50)") &
2236 "xTB| D4 Dispersion: Parameter file", adjustr(trim(xtb_control%dispersion_parameter_file))
2237 CASE DEFAULT
2238 cpabort("vdw type")
2239 END SELECT
2240 WRITE (unit=output_unit, fmt="(T2,A,T51,3F10.3)") &
2241 "xTB| Huckel constants ks kp kd", xtb_control%ks, xtb_control%kp, xtb_control%kd
2242 WRITE (unit=output_unit, fmt="(T2,A,T61,2F10.3)") &
2243 "xTB| Huckel constants ksp k2sh", xtb_control%ksp, xtb_control%k2sh
2244 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2245 "xTB| Mataga-Nishimoto exponent", xtb_control%kg
2246 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2247 "xTB| Repulsion potential exponent", xtb_control%kf
2248 WRITE (unit=output_unit, fmt="(T2,A,T51,3F10.3)") &
2249 "xTB| Coordination number scaling kcn(s) kcn(p) kcn(d)", &
2250 xtb_control%kcns, xtb_control%kcnp, xtb_control%kcnd
2251 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.3)") &
2252 "xTB| Electronegativity scaling", xtb_control%ken
2253 WRITE (unit=output_unit, fmt="(T2,A,T61,2F10.3)") &
2254 "xTB| Halogen potential scaling kxr kx2", xtb_control%kxr, xtb_control%kx2
2255 WRITE (unit=output_unit, fmt="(/)")
2256
2257 END IF
2258
2259 CALL cp_print_key_finished_output(output_unit, logger, dft_section, &
2260 "PRINT%DFT_CONTROL_PARAMETERS")
2261
2262 CALL timestop(handle)
2263
2264 END SUBROUTINE write_xtb_control
2265
2266! **************************************************************************************************
2267!> \brief Purpose: Write the QS control parameters to the output unit.
2268!> \param qs_control ...
2269!> \param dft_section ...
2270! **************************************************************************************************
2271 SUBROUTINE write_qs_control(qs_control, dft_section)
2272 TYPE(qs_control_type), INTENT(IN) :: qs_control
2273 TYPE(section_vals_type), POINTER :: dft_section
2274
2275 CHARACTER(len=*), PARAMETER :: routinen = 'write_qs_control'
2276
2277 CHARACTER(len=20) :: method, quadrature
2278 INTEGER :: handle, i, igrid_level, ngrid_level, &
2279 output_unit
2280 TYPE(cp_logger_type), POINTER :: logger
2281 TYPE(ddapc_restraint_type), POINTER :: ddapc_restraint_control
2282 TYPE(enumeration_type), POINTER :: enum
2283 TYPE(keyword_type), POINTER :: keyword
2284 TYPE(section_type), POINTER :: qs_section
2285 TYPE(section_vals_type), POINTER :: print_section_vals, qs_section_vals
2286
2287 IF (qs_control%semi_empirical) RETURN
2288 IF (qs_control%dftb) RETURN
2289 IF (qs_control%xtb) RETURN
2290 CALL timeset(routinen, handle)
2291 NULLIFY (logger, print_section_vals, qs_section, qs_section_vals)
2292 logger => cp_get_default_logger()
2293 print_section_vals => section_vals_get_subs_vals(dft_section, "PRINT")
2294 qs_section_vals => section_vals_get_subs_vals(dft_section, "QS")
2295 CALL section_vals_get(qs_section_vals, section=qs_section)
2296
2297 NULLIFY (enum, keyword)
2298 keyword => section_get_keyword(qs_section, "METHOD")
2299 CALL keyword_get(keyword, enum=enum)
2300 method = enum_i2c(enum, qs_control%method_id)
2301
2302 NULLIFY (enum, keyword)
2303 keyword => section_get_keyword(qs_section, "QUADRATURE")
2304 CALL keyword_get(keyword, enum=enum)
2305 quadrature = enum_i2c(enum, qs_control%gapw_control%quadrature)
2306
2307 output_unit = cp_print_key_unit_nr(logger, print_section_vals, &
2308 "DFT_CONTROL_PARAMETERS", extension=".Log")
2309 IF (output_unit > 0) THEN
2310 ngrid_level = SIZE(qs_control%e_cutoff)
2311 WRITE (unit=output_unit, fmt="(/,T2,A,T61,A20)") &
2312 "QS| Method:", adjustr(method)
2313 IF (qs_control%pw_grid_opt%spherical) THEN
2314 WRITE (unit=output_unit, fmt="(T2,A,T61,A)") &
2315 "QS| Density plane wave grid type", " SPHERICAL HALFSPACE"
2316 ELSE IF (qs_control%pw_grid_opt%fullspace) THEN
2317 WRITE (unit=output_unit, fmt="(T2,A,T57,A)") &
2318 "QS| Density plane wave grid type", " NON-SPHERICAL FULLSPACE"
2319 ELSE
2320 WRITE (unit=output_unit, fmt="(T2,A,T57,A)") &
2321 "QS| Density plane wave grid type", " NON-SPHERICAL HALFSPACE"
2322 END IF
2323 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2324 "QS| Number of grid levels:", SIZE(qs_control%e_cutoff)
2325 IF (ngrid_level == 1) THEN
2326 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2327 "QS| Density cutoff [a.u.]:", qs_control%e_cutoff(1)
2328 ELSE
2329 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2330 "QS| Density cutoff [a.u.]:", qs_control%cutoff
2331 IF (qs_control%commensurate_mgrids) &
2332 WRITE (unit=output_unit, fmt="(T2,A)") "QS| Using commensurate multigrids"
2333 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2334 "QS| Multi grid cutoff [a.u.]: 1) grid level", qs_control%e_cutoff(1)
2335 WRITE (unit=output_unit, fmt="(T2,A,I3,A,T71,F10.1)") &
2336 ("QS| ", igrid_level, ") grid level", &
2337 qs_control%e_cutoff(igrid_level), &
2338 igrid_level=2, SIZE(qs_control%e_cutoff))
2339 END IF
2340 IF (qs_control%pao) THEN
2341 WRITE (unit=output_unit, fmt="(T2,A)") "QS| PAO active"
2342 END IF
2343 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2344 "QS| Grid level progression factor:", qs_control%progression_factor
2345 WRITE (unit=output_unit, fmt="(T2,A,T71,F10.1)") &
2346 "QS| Relative density cutoff [a.u.]:", qs_control%relative_cutoff
2347 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2348 "QS| Interaction thresholds: eps_pgf_orb:", &
2349 qs_control%eps_pgf_orb, &
2350 "QS| eps_filter_matrix:", &
2351 qs_control%eps_filter_matrix, &
2352 "QS| eps_core_charge:", &
2353 qs_control%eps_core_charge, &
2354 "QS| eps_rho_gspace:", &
2355 qs_control%eps_rho_gspace, &
2356 "QS| eps_rho_rspace:", &
2357 qs_control%eps_rho_rspace, &
2358 "QS| eps_gvg_rspace:", &
2359 qs_control%eps_gvg_rspace, &
2360 "QS| eps_ppl:", &
2361 qs_control%eps_ppl, &
2362 "QS| eps_ppnl:", &
2363 qs_control%eps_ppnl
2364 IF (qs_control%gapw) THEN
2365 SELECT CASE (qs_control%gapw_control%basis_1c)
2366 CASE (gapw_1c_orb)
2367 WRITE (unit=output_unit, fmt="(T2,A)") &
2368 "QS| GAPW| One center basis from orbital basis primitives"
2369 CASE (gapw_1c_small)
2370 WRITE (unit=output_unit, fmt="(T2,A)") &
2371 "QS| GAPW| One center basis extended with primitives (small:s)"
2372 CASE (gapw_1c_medium)
2373 WRITE (unit=output_unit, fmt="(T2,A)") &
2374 "QS| GAPW| One center basis extended with primitives (medium:sp)"
2375 CASE (gapw_1c_large)
2376 WRITE (unit=output_unit, fmt="(T2,A)") &
2377 "QS| GAPW| One center basis extended with primitives (large:spd)"
2378 CASE (gapw_1c_very_large)
2379 WRITE (unit=output_unit, fmt="(T2,A)") &
2380 "QS| GAPW| One center basis extended with primitives (very large:spdf)"
2381 CASE DEFAULT
2382 cpabort("basis_1c incorrect")
2383 END SELECT
2384 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2385 "QS| GAPW| eps_fit:", &
2386 qs_control%gapw_control%eps_fit, &
2387 "QS| GAPW| eps_iso:", &
2388 qs_control%gapw_control%eps_iso, &
2389 "QS| GAPW| eps_svd:", &
2390 qs_control%gapw_control%eps_svd, &
2391 "QS| GAPW| eps_cpc:", &
2392 qs_control%gapw_control%eps_cpc
2393 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2394 "QS| GAPW| atom-r-grid: quadrature:", &
2395 adjustr(quadrature)
2396 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2397 "QS| GAPW| atom-s-grid: max l :", &
2398 qs_control%gapw_control%lmax_sphere, &
2399 "QS| GAPW| max_l_rho0 :", &
2400 qs_control%gapw_control%lmax_rho0
2401 IF (qs_control%gapw_control%non_paw_atoms) THEN
2402 WRITE (unit=output_unit, fmt="(T2,A)") &
2403 "QS| GAPW| At least one kind is NOT PAW, i.e. it has only soft AO "
2404 END IF
2405 IF (qs_control%gapw_control%nopaw_as_gpw) THEN
2406 WRITE (unit=output_unit, fmt="(T2,A)") &
2407 "QS| GAPW| The NOT PAW atoms are treated fully GPW"
2408 END IF
2409 END IF
2410 IF (qs_control%gapw_xc) THEN
2411 SELECT CASE (qs_control%gapw_control%basis_1c)
2412 CASE (gapw_1c_orb)
2413 WRITE (unit=output_unit, fmt="(T2,A)") &
2414 "QS| GAPW_XC| One center basis from orbital basis primitives"
2415 CASE (gapw_1c_small)
2416 WRITE (unit=output_unit, fmt="(T2,A)") &
2417 "QS| GAPW_XC| One center basis extended with primitives (small:s)"
2418 CASE (gapw_1c_medium)
2419 WRITE (unit=output_unit, fmt="(T2,A)") &
2420 "QS| GAPW_XC| One center basis extended with primitives (medium:sp)"
2421 CASE (gapw_1c_large)
2422 WRITE (unit=output_unit, fmt="(T2,A)") &
2423 "QS| GAPW_XC| One center basis extended with primitives (large:spd)"
2424 CASE (gapw_1c_very_large)
2425 WRITE (unit=output_unit, fmt="(T2,A)") &
2426 "QS| GAPW_XC| One center basis extended with primitives (very large:spdf)"
2427 CASE DEFAULT
2428 cpabort("basis_1c incorrect")
2429 END SELECT
2430 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2431 "QS| GAPW_XC| eps_fit:", &
2432 qs_control%gapw_control%eps_fit, &
2433 "QS| GAPW_XC| eps_iso:", &
2434 qs_control%gapw_control%eps_iso, &
2435 "QS| GAPW_XC| eps_svd:", &
2436 qs_control%gapw_control%eps_svd
2437 WRITE (unit=output_unit, fmt="(T2,A,T55,A30)") &
2438 "QS| GAPW_XC|atom-r-grid: quadrature:", &
2439 enum_i2c(enum, qs_control%gapw_control%quadrature)
2440 WRITE (unit=output_unit, fmt="(T2,A,T71,I10)") &
2441 "QS| GAPW_XC| atom-s-grid: max l :", &
2442 qs_control%gapw_control%lmax_sphere
2443 END IF
2444 IF (qs_control%mulliken_restraint) THEN
2445 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2446 "QS| Mulliken restraint target", qs_control%mulliken_restraint_control%target
2447 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2448 "QS| Mulliken restraint strength", qs_control%mulliken_restraint_control%strength
2449 WRITE (unit=output_unit, fmt="(T2,A,T73,I8)") &
2450 "QS| Mulliken restraint atoms: ", qs_control%mulliken_restraint_control%natoms
2451 WRITE (unit=output_unit, fmt="(5I8)") qs_control%mulliken_restraint_control%atoms
2452 END IF
2453 IF (qs_control%ddapc_restraint) THEN
2454 DO i = 1, SIZE(qs_control%ddapc_restraint_control)
2455 ddapc_restraint_control => qs_control%ddapc_restraint_control(i)
2456 IF (SIZE(qs_control%ddapc_restraint_control) .GT. 1) &
2457 WRITE (unit=output_unit, fmt="(T2,A,T3,I8)") &
2458 "QS| parameters for DDAPC restraint number", i
2459 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2460 "QS| ddapc restraint target", ddapc_restraint_control%target
2461 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2462 "QS| ddapc restraint strength", ddapc_restraint_control%strength
2463 WRITE (unit=output_unit, fmt="(T2,A,T73,I8)") &
2464 "QS| ddapc restraint atoms: ", ddapc_restraint_control%natoms
2465 WRITE (unit=output_unit, fmt="(5I8)") ddapc_restraint_control%atoms
2466 WRITE (unit=output_unit, fmt="(T2,A)") "Coefficients:"
2467 WRITE (unit=output_unit, fmt="(5F6.2)") ddapc_restraint_control%coeff
2468 SELECT CASE (ddapc_restraint_control%functional_form)
2469 CASE (do_ddapc_restraint)
2470 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2471 "QS| ddapc restraint functional form :", "RESTRAINT"
2472 CASE (do_ddapc_constraint)
2473 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2474 "QS| ddapc restraint functional form :", "CONSTRAINT"
2475 CASE DEFAULT
2476 cpabort("Unknown ddapc restraint")
2477 END SELECT
2478 END DO
2479 END IF
2480 IF (qs_control%s2_restraint) THEN
2481 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2482 "QS| s2 restraint target", qs_control%s2_restraint_control%target
2483 WRITE (unit=output_unit, fmt="(T2,A,T73,ES8.1)") &
2484 "QS| s2 restraint strength", qs_control%s2_restraint_control%strength
2485 SELECT CASE (qs_control%s2_restraint_control%functional_form)
2486 CASE (do_s2_restraint)
2487 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2488 "QS| s2 restraint functional form :", "RESTRAINT"
2489 cpabort("Not yet implemented")
2490 CASE (do_s2_constraint)
2491 WRITE (unit=output_unit, fmt="(T2,A,T61,A20)") &
2492 "QS| s2 restraint functional form :", "CONSTRAINT"
2493 CASE DEFAULT
2494 cpabort("Unknown ddapc restraint")
2495 END SELECT
2496 END IF
2497 END IF
2498 CALL cp_print_key_finished_output(output_unit, logger, print_section_vals, &
2499 "DFT_CONTROL_PARAMETERS")
2500
2501 CALL timestop(handle)
2502
2503 END SUBROUTINE write_qs_control
2504
2505! **************************************************************************************************
2506!> \brief reads the input parameters needed for ddapc.
2507!> \param qs_control ...
2508!> \param qs_section ...
2509!> \param ddapc_restraint_section ...
2510!> \author fschiff
2511!> \note
2512!> either reads DFT%QS%DDAPC_RESTRAINT or PROPERTIES%ET_coupling
2513!> if(qs_section is present the DFT part is read, if ddapc_restraint_section
2514!> is present ET_COUPLING is read. Avoid having both!!!
2515! **************************************************************************************************
2516 SUBROUTINE read_ddapc_section(qs_control, qs_section, ddapc_restraint_section)
2517
2518 TYPE(qs_control_type), INTENT(INOUT) :: qs_control
2519 TYPE(section_vals_type), OPTIONAL, POINTER :: qs_section, ddapc_restraint_section
2520
2521 INTEGER :: i, j, jj, k, n_rep
2522 INTEGER, DIMENSION(:), POINTER :: tmplist
2523 REAL(kind=dp), DIMENSION(:), POINTER :: rtmplist
2524 TYPE(ddapc_restraint_type), POINTER :: ddapc_restraint_control
2525 TYPE(section_vals_type), POINTER :: ddapc_section
2526
2527 IF (PRESENT(ddapc_restraint_section)) THEN
2528 IF (ASSOCIATED(qs_control%ddapc_restraint_control)) THEN
2529 IF (SIZE(qs_control%ddapc_restraint_control) .GE. 2) &
2530 cpabort("ET_COUPLING cannot be used in combination with a normal restraint")
2531 ELSE
2532 ddapc_section => ddapc_restraint_section
2533 ALLOCATE (qs_control%ddapc_restraint_control(1))
2534 END IF
2535 END IF
2536
2537 IF (PRESENT(qs_section)) THEN
2538 NULLIFY (ddapc_section)
2539 ddapc_section => section_vals_get_subs_vals(qs_section, &
2540 "DDAPC_RESTRAINT")
2541 END IF
2542
2543 DO i = 1, SIZE(qs_control%ddapc_restraint_control)
2544
2545 CALL ddapc_control_create(qs_control%ddapc_restraint_control(i))
2546 ddapc_restraint_control => qs_control%ddapc_restraint_control(i)
2547
2548 CALL section_vals_val_get(ddapc_section, "STRENGTH", i_rep_section=i, &
2549 r_val=ddapc_restraint_control%strength)
2550 CALL section_vals_val_get(ddapc_section, "TARGET", i_rep_section=i, &
2551 r_val=ddapc_restraint_control%target)
2552 CALL section_vals_val_get(ddapc_section, "FUNCTIONAL_FORM", i_rep_section=i, &
2553 i_val=ddapc_restraint_control%functional_form)
2554 CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
2555 n_rep_val=n_rep)
2556 CALL section_vals_val_get(ddapc_section, "TYPE_OF_DENSITY", i_rep_section=i, &
2557 i_val=ddapc_restraint_control%density_type)
2558
2559 jj = 0
2560 DO k = 1, n_rep
2561 CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
2562 i_rep_val=k, i_vals=tmplist)
2563 DO j = 1, SIZE(tmplist)
2564 jj = jj + 1
2565 END DO
2566 END DO
2567 IF (jj < 1) cpabort("Need at least 1 atom to use ddapc constraints")
2568 ddapc_restraint_control%natoms = jj
2569 IF (ASSOCIATED(ddapc_restraint_control%atoms)) &
2570 DEALLOCATE (ddapc_restraint_control%atoms)
2571 ALLOCATE (ddapc_restraint_control%atoms(ddapc_restraint_control%natoms))
2572 jj = 0
2573 DO k = 1, n_rep
2574 CALL section_vals_val_get(ddapc_section, "ATOMS", i_rep_section=i, &
2575 i_rep_val=k, i_vals=tmplist)
2576 DO j = 1, SIZE(tmplist)
2577 jj = jj + 1
2578 ddapc_restraint_control%atoms(jj) = tmplist(j)
2579 END DO
2580 END DO
2581
2582 IF (ASSOCIATED(ddapc_restraint_control%coeff)) &
2583 DEALLOCATE (ddapc_restraint_control%coeff)
2584 ALLOCATE (ddapc_restraint_control%coeff(ddapc_restraint_control%natoms))
2585 ddapc_restraint_control%coeff = 1.0_dp
2586
2587 CALL section_vals_val_get(ddapc_section, "COEFF", i_rep_section=i, &
2588 n_rep_val=n_rep)
2589 jj = 0
2590 DO k = 1, n_rep
2591 CALL section_vals_val_get(ddapc_section, "COEFF", i_rep_section=i, &
2592 i_rep_val=k, r_vals=rtmplist)
2593 DO j = 1, SIZE(rtmplist)
2594 jj = jj + 1
2595 IF (jj > ddapc_restraint_control%natoms) &
2596 cpabort("Need the same number of coeff as there are atoms ")
2597 ddapc_restraint_control%coeff(jj) = rtmplist(j)
2598 END DO
2599 END DO
2600 IF (jj < ddapc_restraint_control%natoms .AND. jj .NE. 0) &
2601 cpabort("Need no or the same number of coeff as there are atoms.")
2602 END DO
2603 k = 0
2604 DO i = 1, SIZE(qs_control%ddapc_restraint_control)
2605 IF (qs_control%ddapc_restraint_control(i)%functional_form == &
2606 do_ddapc_constraint) k = k + 1
2607 END DO
2608 IF (k == 2) CALL cp_abort(__location__, &
2609 "Only a single constraint possible yet, try to use restraints instead ")
2610
2611 END SUBROUTINE read_ddapc_section
2612
2613! **************************************************************************************************
2614!> \brief ...
2615!> \param dft_control ...
2616!> \param efield_section ...
2617! **************************************************************************************************
2618 SUBROUTINE read_efield_sections(dft_control, efield_section)
2619 TYPE(dft_control_type), POINTER :: dft_control
2620 TYPE(section_vals_type), POINTER :: efield_section
2621
2622 CHARACTER(len=default_path_length) :: file_name
2623 INTEGER :: i, io, j, n, unit_nr
2624 REAL(kind=dp), DIMENSION(:), POINTER :: tmp_vals
2625 TYPE(efield_type), POINTER :: efield
2626 TYPE(section_vals_type), POINTER :: tmp_section
2627
2628 DO i = 1, SIZE(dft_control%efield_fields)
2629 NULLIFY (dft_control%efield_fields(i)%efield)
2630 ALLOCATE (dft_control%efield_fields(i)%efield)
2631 efield => dft_control%efield_fields(i)%efield
2632 NULLIFY (efield%envelop_i_vars, efield%envelop_r_vars)
2633 CALL section_vals_val_get(efield_section, "INTENSITY", i_rep_section=i, &
2634 r_val=efield%strength)
2635
2636 CALL section_vals_val_get(efield_section, "POLARISATION", i_rep_section=i, &
2637 r_vals=tmp_vals)
2638 ALLOCATE (efield%polarisation(SIZE(tmp_vals)))
2639 efield%polarisation = tmp_vals
2640 CALL section_vals_val_get(efield_section, "PHASE", i_rep_section=i, &
2641 r_val=efield%phase_offset)
2642 CALL section_vals_val_get(efield_section, "ENVELOP", i_rep_section=i, &
2643 i_val=efield%envelop_id)
2644 CALL section_vals_val_get(efield_section, "WAVELENGTH", i_rep_section=i, &
2645 r_val=efield%wavelength)
2646 CALL section_vals_val_get(efield_section, "VEC_POT_INITIAL", i_rep_section=i, &
2647 r_vals=tmp_vals)
2648 efield%vec_pot_initial = tmp_vals
2649
2650 IF (efield%envelop_id == constant_env) THEN
2651 ALLOCATE (efield%envelop_i_vars(2))
2652 tmp_section => section_vals_get_subs_vals(efield_section, "CONSTANT_ENV", i_rep_section=i)
2653 CALL section_vals_val_get(tmp_section, "START_STEP", &
2654 i_val=efield%envelop_i_vars(1))
2655 CALL section_vals_val_get(tmp_section, "END_STEP", &
2656 i_val=efield%envelop_i_vars(2))
2657 ELSE IF (efield%envelop_id == gaussian_env) THEN
2658 ALLOCATE (efield%envelop_r_vars(2))
2659 tmp_section => section_vals_get_subs_vals(efield_section, "GAUSSIAN_ENV", i_rep_section=i)
2660 CALL section_vals_val_get(tmp_section, "T0", &
2661 r_val=efield%envelop_r_vars(1))
2662 CALL section_vals_val_get(tmp_section, "SIGMA", &
2663 r_val=efield%envelop_r_vars(2))
2664 ELSE IF (efield%envelop_id == ramp_env) THEN
2665 ALLOCATE (efield%envelop_i_vars(4))
2666 tmp_section => section_vals_get_subs_vals(efield_section, "RAMP_ENV", i_rep_section=i)
2667 CALL section_vals_val_get(tmp_section, "START_STEP_IN", &
2668 i_val=efield%envelop_i_vars(1))
2669 CALL section_vals_val_get(tmp_section, "END_STEP_IN", &
2670 i_val=efield%envelop_i_vars(2))
2671 CALL section_vals_val_get(tmp_section, "START_STEP_OUT", &
2672 i_val=efield%envelop_i_vars(3))
2673 CALL section_vals_val_get(tmp_section, "END_STEP_OUT", &
2674 i_val=efield%envelop_i_vars(4))
2675 ELSE IF (efield%envelop_id == custom_env) THEN
2676 tmp_section => section_vals_get_subs_vals(efield_section, "CUSTOM_ENV", i_rep_section=i)
2677 CALL section_vals_val_get(tmp_section, "EFIELD_FILE_NAME", c_val=file_name)
2678 CALL open_file(file_name=trim(file_name), file_action="READ", file_status="OLD", unit_number=unit_nr)
2679 !Determine the number of lines in file
2680 n = 0
2681 DO WHILE (.true.)
2682 READ (unit_nr, *, iostat=io)
2683 IF (io /= 0) EXIT
2684 n = n + 1
2685 END DO
2686 rewind(unit_nr)
2687 ALLOCATE (efield%envelop_r_vars(n + 1))
2688 !Store the timestep of the list in the first entry of the r_vars
2689 CALL section_vals_val_get(tmp_section, "TIMESTEP", r_val=efield%envelop_r_vars(1))
2690 !Read the file
2691 DO j = 2, n + 1
2692 READ (unit_nr, *) efield%envelop_r_vars(j)
2693 efield%envelop_r_vars(j) = cp_unit_to_cp2k(efield%envelop_r_vars(j), "volt/m")
2694 END DO
2695 CALL close_file(unit_nr)
2696 END IF
2697 END DO
2698 END SUBROUTINE read_efield_sections
2699
2700! **************************************************************************************************
2701!> \brief reads the input parameters needed real time propagation
2702!> \param dft_control ...
2703!> \param rtp_section ...
2704!> \author fschiff
2705! **************************************************************************************************
2706 SUBROUTINE read_rtp_section(dft_control, rtp_section)
2707
2708 TYPE(dft_control_type), INTENT(INOUT) :: dft_control
2709 TYPE(section_vals_type), POINTER :: rtp_section
2710
2711 INTEGER, DIMENSION(:), POINTER :: tmp
2712 LOGICAL :: is_present
2713 TYPE(section_vals_type), POINTER :: proj_mo_section
2714
2715 ALLOCATE (dft_control%rtp_control)
2716 CALL section_vals_val_get(rtp_section, "MAX_ITER", &
2717 i_val=dft_control%rtp_control%max_iter)
2718 CALL section_vals_val_get(rtp_section, "MAT_EXP", &
2719 i_val=dft_control%rtp_control%mat_exp)
2720 CALL section_vals_val_get(rtp_section, "ASPC_ORDER", &
2721 i_val=dft_control%rtp_control%aspc_order)
2722 CALL section_vals_val_get(rtp_section, "EXP_ACCURACY", &
2723 r_val=dft_control%rtp_control%eps_exp)
2724 CALL section_vals_val_get(rtp_section, "RTBSE%_SECTION_PARAMETERS_", &
2725 i_val=dft_control%rtp_control%rtp_method)
2726 CALL section_vals_val_get(rtp_section, "RTBSE%RTBSE_HAMILTONIAN", &
2727 i_val=dft_control%rtp_control%rtbse_ham)
2728 CALL section_vals_val_get(rtp_section, "PROPAGATOR", &
2729 i_val=dft_control%rtp_control%propagator)
2730 CALL section_vals_val_get(rtp_section, "EPS_ITER", &
2731 r_val=dft_control%rtp_control%eps_ener)
2732 CALL section_vals_val_get(rtp_section, "INITIAL_WFN", &
2733 i_val=dft_control%rtp_control%initial_wfn)
2734 CALL section_vals_val_get(rtp_section, "HFX_BALANCE_IN_CORE", &
2735 l_val=dft_control%rtp_control%hfx_redistribute)
2736 CALL section_vals_val_get(rtp_section, "APPLY_WFN_MIX_INIT_RESTART", &
2737 l_val=dft_control%rtp_control%apply_wfn_mix_init_restart)
2738 CALL section_vals_val_get(rtp_section, "APPLY_DELTA_PULSE", &
2739 l_val=dft_control%rtp_control%apply_delta_pulse)
2740 CALL section_vals_val_get(rtp_section, "APPLY_DELTA_PULSE_MAG", &
2741 l_val=dft_control%rtp_control%apply_delta_pulse_mag)
2742 CALL section_vals_val_get(rtp_section, "VELOCITY_GAUGE", &
2743 l_val=dft_control%rtp_control%velocity_gauge)
2744 CALL section_vals_val_get(rtp_section, "VG_COM_NL", &
2745 l_val=dft_control%rtp_control%nl_gauge_transform)
2746 CALL section_vals_val_get(rtp_section, "PERIODIC", &
2747 l_val=dft_control%rtp_control%periodic)
2748 CALL section_vals_val_get(rtp_section, "DENSITY_PROPAGATION", &
2749 l_val=dft_control%rtp_control%linear_scaling)
2750 CALL section_vals_val_get(rtp_section, "MCWEENY_MAX_ITER", &
2751 i_val=dft_control%rtp_control%mcweeny_max_iter)
2752 CALL section_vals_val_get(rtp_section, "ACCURACY_REFINEMENT", &
2753 i_val=dft_control%rtp_control%acc_ref)
2754 CALL section_vals_val_get(rtp_section, "MCWEENY_EPS", &
2755 r_val=dft_control%rtp_control%mcweeny_eps)
2756 CALL section_vals_val_get(rtp_section, "DELTA_PULSE_SCALE", &
2757 r_val=dft_control%rtp_control%delta_pulse_scale)
2758 CALL section_vals_val_get(rtp_section, "DELTA_PULSE_DIRECTION", &
2759 i_vals=tmp)
2760 dft_control%rtp_control%delta_pulse_direction = tmp
2761 CALL section_vals_val_get(rtp_section, "SC_CHECK_START", &
2762 i_val=dft_control%rtp_control%sc_check_start)
2763 proj_mo_section => section_vals_get_subs_vals(rtp_section, "PRINT%PROJECTION_MO")
2764 CALL section_vals_get(proj_mo_section, explicit=is_present)
2765 IF (is_present) THEN
2766 IF (dft_control%rtp_control%linear_scaling) &
2767 CALL cp_abort(__location__, &
2768 "You have defined a time dependent projection of mos, but "// &
2769 "only the density matrix is propagated (DENSITY_PROPAGATION "// &
2770 ".TRUE.). Please either use MO-based real time DFT or do not "// &
2771 "define any PRINT%PROJECTION_MO section")
2772 dft_control%rtp_control%is_proj_mo = .true.
2773 ELSE
2774 dft_control%rtp_control%is_proj_mo = .false.
2775 END IF
2776
2777 END SUBROUTINE read_rtp_section
2778
2779! **************************************************************************************************
2780!> \brief Parses the BLOCK_LIST keywords from the ADMM section
2781!> \param admm_control ...
2782!> \param dft_section ...
2783! **************************************************************************************************
2784 SUBROUTINE read_admm_block_list(admm_control, dft_section)
2785 TYPE(admm_control_type), POINTER :: admm_control
2786 TYPE(section_vals_type), POINTER :: dft_section
2787
2788 INTEGER :: irep, list_size, n_rep
2789 INTEGER, DIMENSION(:), POINTER :: tmplist
2790
2791 NULLIFY (tmplist)
2792
2793 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%BLOCK_LIST", &
2794 n_rep_val=n_rep)
2795
2796 ALLOCATE (admm_control%blocks(n_rep))
2797
2798 DO irep = 1, n_rep
2799 CALL section_vals_val_get(dft_section, "AUXILIARY_DENSITY_MATRIX_METHOD%BLOCK_LIST", &
2800 i_rep_val=irep, i_vals=tmplist)
2801 list_size = SIZE(tmplist)
2802 ALLOCATE (admm_control%blocks(irep)%list(list_size))
2803 admm_control%blocks(irep)%list(:) = tmplist(:)
2804 END DO
2805
2806 END SUBROUTINE read_admm_block_list
2807
2808END 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 stengel2009
integer, save, public vandevondele2005a
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 rocha2006
integer, save, public lippert1997
integer, save, public fattebert2002
integer, save, public thiel1992
integer, save, public pracht2019
integer, save, public porezag1995
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_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:308
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:119
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:1179
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:1150
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 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)
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
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