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