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