(git:08825b9)
Loading...
Searching...
No Matches
scf_control_types.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief parameters that control an scf iteration
10!> \note
11!> not in cp_control_types, to separate operator related parameters from
12!> method related parameters (as suggested by Matthias)
13!> \par History
14!> 09.2002 created [fawzi]
15!> \author Fawzi Mohamed
16! **************************************************************************************************
18
25 USE ieee_arithmetic, ONLY: ieee_is_finite
26 USE input_constants, ONLY: &
47 USE kinds, ONLY: default_path_length,&
49 dp
52 USE physcon, ONLY: evolt
58#include "./base/base_uses.f90"
59
60 IMPLICIT NONE
61
62 PRIVATE
63
64 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'scf_control_types'
65 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
66
67 ! Public data types
68
69 PUBLIC :: scf_control_type, &
70 smear_type, &
72
73 ! Public subroutines
74
75 PUBLIC :: scf_c_create, &
79
80! **************************************************************************************************
81!> \brief contains the parameters needed by a scf run
82!> \param density_guess how to choose the initial density
83!> (CORE,RANDOM,RESTART,ATOMIC,FROZEN)
84!> \param eps_eigval wanted error on the eigenvalues
85!> \param eps_scf whanted error on the whole scf
86!> \param level_shift amount of level shift
87!> \param p_mix how to mix the new and old densities in non diss iterations
88!> \param eps_lumos error on the lumos calculated at the end of the scf
89!> \param max_iter_lumus maxumum number of iterations used to calculate
90!> the lumos at the end of the scf
91!> \param max_scf max scf iterations
92!> \param added_mos additional number of MOs that might be used in the SCF
93!> \param step_size the optimizer step size
94!> \param cdft_opt_control settings for optimizers that work only together with CDFT constraints
95!> \par History
96!> 09.2002 created [fawzi]
97!> \author Fawzi Mohamed
98! **************************************************************************************************
100 LOGICAL :: do_smear = .false.
101 LOGICAL :: common_mu = .false.
102 INTEGER :: method = -1
103 REAL(kind=dp) :: electronic_temperature = -1.0_dp, &
104 fixed_mag_mom = -1.0_dp, &
105 eps_fermi_dirac = -1.0_dp, &
106 window_size = -1.0_dp, &
107 smearing_width = -1.0_dp
108 REAL(kind=dp), DIMENSION(:), POINTER :: list => null()
109 END TYPE smear_type
110
111 TYPE diagonalization_type
112 INTEGER :: method = -1, update_method = -1, max_history = -1
113 REAL(kind=dp) :: eps_jacobi = -1.0_dp
114 REAL(kind=dp) :: jacobi_threshold = -1.0_dp
115 REAL(kind=dp) :: adiis_shift = 0.0_dp
116 INTEGER :: max_iter = -1, nkrylov = -1, nblock_krylov = -1
117 LOGICAL :: adiis_verbose = .false.
118 ! Maximum Overlap Method
119 LOGICAL :: mom = .false., mom_didguess = .false.
120 INTEGER :: mom_proj_formula = -1
121 ! indices of de-occupied and newly occupied alpha / beta molecular orbitals
122 INTEGER, DIMENSION(:), POINTER :: mom_deocca => null(), mom_deoccb => null(), &
123 mom_occa => null(), mom_occb => null()
124 ! determines on SCF which iteration MOM will be switched on;
125 ! since MOs from the previous iteration should be available, it might be at least
126 ! 1 when wave-function has been read from restart file, or
127 ! 2 when the atomic guess method has been used
128 INTEGER :: mom_start = -1
129 INTEGER :: mom_type = -1
130 REAL(kind=dp) :: eps_iter = -1.0_dp
131 REAL(kind=dp) :: eps_adapt = -1.0_dp
132 TYPE(qs_ot_settings_type) :: ot_settings = qs_ot_settings_type()
133 END TYPE diagonalization_type
134
137 TYPE(smear_type), POINTER :: smear => null()
138 TYPE(diagonalization_type) :: diagonalization = diagonalization_type()
139 TYPE(gce_type), POINTER :: gce => null()
140 INTEGER :: density_guess = -1, mixing_method = -1
141 CHARACTER(LEN=default_path_length) :: external_density_file_name = ""
142 REAL(kind=dp) :: eps_eigval = -1.0_dp, eps_scf = -1.0_dp, eps_scf_hist = -1.0_dp, &
143 level_shift = -1.0_dp, &
144 eps_lumos = -1.0_dp, eps_diis = -1.0_dp
145 INTEGER :: max_iter_lumos = -1, max_diis = -1, nmixing = -1
146 INTEGER :: max_scf = -1, max_scf_hist = -1, &
147 maxl = -1, nkind = -1
148 LOGICAL :: do_diag_sub = .false., &
149 use_cholesky = .false., use_ot = .false., &
150 use_diag = .false., do_outer_scf_reortho = .false., &
151 ignore_convergence_failure = .false.
152 LOGICAL :: force_scf_calculation = .false.
153 LOGICAL :: non_selfconsistent = .false.
154 INTEGER, DIMENSION(2) :: added_mos = -1
155 LOGICAL, DIMENSION(2) :: added_mos_auto = .false.
156 INTEGER :: roks_scheme = -1
157 REAL(kind=dp) :: roks_f = -1.0_dp
158 REAL(kind=dp), DIMENSION(0:2, 0:2, 1:2) :: roks_parameter = -1.0_dp
159 END TYPE scf_control_type
160
162 LOGICAL :: do_gce = .false.
163 REAL(kind=dp) :: target_workfunction = 0.16_dp, &
164 ref_esp = 0.0_dp, &
165 mixing_coef = 0.3_dp, &
166 prev_workfunction = -1001.0_dp, &
167 nelec = 0.0_dp
168 END TYPE gce_type
169
170CONTAINS
171
172! **************************************************************************************************
173!> \brief allocates and initializes an scf control object with the default values
174!> \param scf_control the object to initialize
175!> \par History
176!> 09.2002 created [fawzi]
177!> - Default ROKS parameters added (05.04.06,MK)
178!> \author Fawzi Mohamed
179! **************************************************************************************************
180 SUBROUTINE scf_c_create(scf_control)
181
182 TYPE(scf_control_type), INTENT(INOUT) :: scf_control
183
184 CHARACTER(LEN=*), PARAMETER :: routinen = 'scf_c_create'
185
186 INTEGER :: handle
187
188 CALL timeset(routinen, handle)
189
190 ! Load the default values
191
192 IF (scf_control%non_selfconsistent) THEN
193 scf_control%density_guess = no_guess
194 ELSE
195 scf_control%density_guess = atomic_guess
196 END IF
197 scf_control%eps_eigval = 1.0e-5_dp
198 scf_control%eps_scf = 1.0e-5_dp
199 scf_control%eps_scf_hist = 0.0_dp
200 scf_control%eps_lumos = 1.0e-5_dp
201 scf_control%max_iter_lumos = 2999
202 scf_control%eps_diis = 0.1_dp
203 scf_control%level_shift = 0.0_dp
204 scf_control%max_diis = 4
205 scf_control%max_scf = 50
206 scf_control%nmixing = 2
207 scf_control%use_cholesky = .true.
208 scf_control%use_diag = .true.
209 scf_control%do_diag_sub = .false.
210 scf_control%use_ot = .false.
211 scf_control%ignore_convergence_failure = .false.
212 scf_control%force_scf_calculation = .false.
213 scf_control%do_outer_scf_reortho = .true.
214 scf_control%max_diis = 4
215 scf_control%eps_diis = 0.1_dp
216 scf_control%added_mos(:) = 0
217 scf_control%added_mos_auto(:) = .false.
218 scf_control%max_scf_hist = 0
219
220 !Mixing
221 IF (scf_control%non_selfconsistent) THEN
222 scf_control%mixing_method = no_mix
223 ELSE
224 scf_control%mixing_method = direct_p_mix
225 END IF
226
227 ! Diagonalization
228 scf_control%diagonalization%method = 0
229 scf_control%diagonalization%update_method = diag_update_method_mixing
230 scf_control%diagonalization%max_history = 16
231 scf_control%diagonalization%adiis_shift = 0.0_dp
232 scf_control%diagonalization%adiis_verbose = .false.
233 scf_control%diagonalization%eps_jacobi = 0.0_dp
234 scf_control%diagonalization%jacobi_threshold = 1.0e-7_dp
235 scf_control%diagonalization%max_iter = 0
236 scf_control%diagonalization%eps_iter = 0.0_dp
237 scf_control%diagonalization%eps_adapt = 0.0_dp
238 scf_control%diagonalization%nkrylov = 0
239 scf_control%diagonalization%nblock_krylov = 0
240 CALL qs_ot_settings_init(scf_control%diagonalization%ot_settings)
241
242 scf_control%diagonalization%mom = .false.
243 scf_control%diagonalization%mom_didguess = .false.
244 scf_control%diagonalization%mom_proj_formula = 0
245 NULLIFY (scf_control%diagonalization%mom_deoccA)
246 NULLIFY (scf_control%diagonalization%mom_deoccB)
247 NULLIFY (scf_control%diagonalization%mom_occA)
248 NULLIFY (scf_control%diagonalization%mom_occB)
249 scf_control%diagonalization%mom_start = 0
250
251 ! ROKS
252
253 scf_control%roks_scheme = high_spin_roks
254 scf_control%roks_f = 0.5_dp
255
256 ! Initialize the diagonal blocks with the default ROKS parameters
257 ! 0 = v)irtual, 1 = o)pen shell, 2 = c)losed shell
258
259 scf_control%roks_parameter(0, 0, 1) = 1.5_dp ! avv
260 scf_control%roks_parameter(0, 0, 2) = -0.5_dp ! bvv
261 scf_control%roks_parameter(1, 1, 1) = 0.5_dp ! aoo
262 scf_control%roks_parameter(1, 1, 2) = 0.5_dp ! boo
263 scf_control%roks_parameter(2, 2, 1) = -0.5_dp ! acc
264 scf_control%roks_parameter(2, 2, 2) = 1.5_dp ! bcc
265
266 ! Initialize off-diagonal blocks (fixed)
267
268 scf_control%roks_parameter(0, 1, 1) = 1.0_dp ! avo
269 scf_control%roks_parameter(0, 1, 2) = 0.0_dp ! bvo
270 scf_control%roks_parameter(0, 2, 1) = 0.5_dp ! avc
271 scf_control%roks_parameter(0, 2, 2) = 0.5_dp ! bvc
272 scf_control%roks_parameter(1, 2, 1) = 0.0_dp ! aoc
273 scf_control%roks_parameter(1, 2, 2) = 1.0_dp ! boc
274
275 ! Symmetry enforces
276
277 scf_control%roks_parameter(1, 0, 1) = scf_control%roks_parameter(0, 1, 1) ! aov
278 scf_control%roks_parameter(1, 0, 2) = scf_control%roks_parameter(0, 1, 2) ! bov
279 scf_control%roks_parameter(2, 0, 1) = scf_control%roks_parameter(0, 2, 1) ! acv
280 scf_control%roks_parameter(2, 0, 2) = scf_control%roks_parameter(0, 2, 2) ! bcv
281 scf_control%roks_parameter(2, 1, 1) = scf_control%roks_parameter(1, 2, 1) ! aco
282 scf_control%roks_parameter(2, 1, 2) = scf_control%roks_parameter(1, 2, 2) ! bco
283
284 ! Outer SCF default settings
285
286 scf_control%outer_scf%have_scf = .false.
287 scf_control%outer_scf%max_scf = 0
288 scf_control%outer_scf%eps_scf = 0.0_dp
289 scf_control%outer_scf%step_size = 0.0_dp
290 scf_control%outer_scf%type = -1
291 scf_control%outer_scf%optimizer = -1
292 scf_control%outer_scf%diis_buffer_length = -1
293 NULLIFY (scf_control%outer_scf%cdft_opt_control)
294
295 ! Smearing of the MO occupations
296
297 NULLIFY (scf_control%smear)
298
299 CALL timestop(handle)
300
301 END SUBROUTINE scf_c_create
302
303! **************************************************************************************************
304!> \brief releases the given scf_control (see cp2k/doc/ReferenceCounting.html)
305!> \param scf_control the object to free
306!> \par History
307!> 09.2002 created [fawzi]
308!> \author Fawzi Mohamed
309!> \note
310!> at the moment does nothing
311! **************************************************************************************************
312 SUBROUTINE scf_c_release(scf_control)
313
314 TYPE(scf_control_type), INTENT(INOUT) :: scf_control
315
316 IF (ASSOCIATED(scf_control%smear%list)) THEN
317 DEALLOCATE (scf_control%smear%list)
318 END IF
319 DEALLOCATE (scf_control%smear)
320
321 IF (ASSOCIATED(scf_control%outer_scf%cdft_opt_control)) THEN
322 CALL cdft_opt_type_release(scf_control%outer_scf%cdft_opt_control)
323 END IF
324
325 IF (ASSOCIATED(scf_control%gce)) THEN
326 DEALLOCATE (scf_control%gce)
327 END IF
328
329 ! Maximum overlap method orbital indices lists
330 ! mom_deoccA, mom_deoccB, mom_occA, mom_occB
331 ! points to memory allocated by input file parser,
332 ! so they do not have to be deallocated
333
334 END SUBROUTINE scf_c_release
335
336! **************************************************************************************************
337!> \brief reads the parameters of the scf section into the given scf_control
338!> \param scf_control the object that wil contain the values read
339!> \param inp_section ...
340!> \par History
341!> 05.2001 created [Matthias]
342!> 09.2002 creaded separated scf_control type [fawzi]
343!> \author Matthias Krack
344! **************************************************************************************************
345 SUBROUTINE scf_c_read_parameters(scf_control, inp_section)
346
347 TYPE(scf_control_type), INTENT(INOUT) :: scf_control
348 TYPE(section_vals_type), POINTER :: inp_section
349
350 CHARACTER(LEN=*), PARAMETER :: routinen = 'scf_c_read_parameters'
351
352 CHARACTER(LEN=default_string_length) :: added_mos_string, error_message
353 CHARACTER(LEN=default_string_length), &
354 DIMENSION(:), POINTER :: added_mos
355 INTEGER :: added_mos_value, cholesky_flag, handle, &
356 i, ialgo
357 LOGICAL :: do_mixing, explicit
358 REAL(kind=dp), DIMENSION(:), POINTER :: roks_parameter
359 TYPE(section_vals_type), POINTER :: adiis_section, gce_section, &
360 mixing_section, outer_scf_section, &
361 scf_section, smear_section
362
363 CALL timeset(routinen, handle)
364
365 scf_section => section_vals_get_subs_vals(inp_section, "SCF")
366 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%_SECTION_PARAMETERS_", &
367 l_val=scf_control%use_diag)
368 IF (scf_control%use_diag) THEN
369 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%_SECTION_PARAMETERS_", &
370 l_val=scf_control%do_diag_sub)
371 END IF
372 CALL section_vals_val_get(scf_section, "OT%_SECTION_PARAMETERS_", l_val=scf_control%use_ot)
373 IF (scf_control%use_diag .AND. scf_control%use_ot) THEN
374 ! don't allow both options to be true
375 cpabort("Don't activate OT and Diagonaliztion together")
376 ELSE IF (.NOT. (scf_control%use_diag .OR. scf_control%use_ot)) THEN
377 ! set default to diagonalization
378 scf_control%use_diag = .true.
379 END IF
380 CALL section_vals_val_get(scf_section, "OT%ALGORITHM", i_val=ialgo)
381 scf_control%do_outer_scf_reortho = ialgo == ot_algo_taylor_or_diag
382 CALL section_vals_val_get(scf_section, "SCF_GUESS", i_val=scf_control%density_guess)
383 CALL section_vals_val_get(scf_section, "EXTERNAL_DENSITY_FILE_NAME", &
384 c_val=scf_control%external_density_file_name)
385 IF (scf_control%density_guess == external_density_guess .AND. &
386 len_trim(scf_control%external_density_file_name) == 0) THEN
387 cpabort("SCF_GUESS EXTERNAL_DENSITY requires EXTERNAL_DENSITY_FILE_NAME")
388 END IF
389 CALL section_vals_val_get(scf_section, "eps_eigval", r_val=scf_control%eps_eigval)
390 CALL section_vals_val_get(scf_section, "cholesky", i_val=cholesky_flag)
391 IF (scf_control%use_ot) THEN
392 ! eps_diis default is 0 for OT
393 scf_control%eps_diis = 0.0_dp
394 CALL section_vals_val_get(scf_section, "EPS_DIIS", explicit=explicit)
395 IF (explicit) THEN
396 CALL section_vals_val_get(scf_section, "EPS_DIIS", r_val=scf_control%eps_diis)
397 END IF
398 ELSE
399 CALL section_vals_val_get(scf_section, "EPS_DIIS", r_val=scf_control%eps_diis)
400 END IF
401 IF (cholesky_flag > 0) THEN
402 scf_control%use_cholesky = .true.
403 END IF
404 CALL section_vals_val_get(scf_section, "IGNORE_CONVERGENCE_FAILURE", l_val=scf_control%ignore_convergence_failure)
405 CALL section_vals_val_get(scf_section, "FORCE_SCF_CALCULATION", l_val=scf_control%force_scf_calculation)
406 CALL section_vals_val_get(scf_section, "eps_scf", r_val=scf_control%eps_scf)
407 CALL section_vals_val_get(scf_section, "level_shift", r_val=scf_control%level_shift)
408 CALL section_vals_val_get(scf_section, "max_diis", i_val=scf_control%max_diis)
409 CALL section_vals_val_get(scf_section, "max_scf", i_val=scf_control%max_scf)
410
411 ! Diagonaliztion section
412 IF (scf_control%use_diag) THEN
413 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%ALGORITHM", &
414 i_val=scf_control%diagonalization%method)
415 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%UPDATE_METHOD", &
416 i_val=scf_control%diagonalization%update_method)
417 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%EPS_JACOBI", &
418 r_val=scf_control%diagonalization%eps_jacobi)
419 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%JACOBI_THRESHOLD", &
420 r_val=scf_control%diagonalization%jacobi_threshold)
421 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%MAX_ITER", &
422 i_val=scf_control%diagonalization%max_iter)
423 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%EPS_ITER", &
424 r_val=scf_control%diagonalization%eps_iter)
425 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%EPS_ADAPT", &
426 r_val=scf_control%diagonalization%eps_adapt)
427 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%NKRYLOV", &
428 i_val=scf_control%diagonalization%nkrylov)
429 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%NBLOCK", &
430 i_val=scf_control%diagonalization%nblock_krylov)
431 IF (scf_control%diagonalization%method == diag_ot) THEN
432 ! read OT section
433 CALL ot_diag_read_input(scf_control%diagonalization%ot_settings, scf_section)
434 END IF
435 ! read maximum overlap method's parameters
436 CALL section_vals_val_get(scf_section, "MOM%_SECTION_PARAMETERS_", &
437 l_val=scf_control%diagonalization%MOM)
438 IF (scf_control%diagonalization%mom) THEN
439 CALL section_vals_val_get(scf_section, "MOM%MOM_TYPE", &
440 i_val=scf_control%diagonalization%mom_type)
441
442 CALL section_vals_val_get(scf_section, "MOM%START_ITER", &
443 i_val=scf_control%diagonalization%mom_start)
444
445 CALL section_vals_val_get(scf_section, "MOM%DEOCC_ALPHA", &
446 i_vals=scf_control%diagonalization%mom_deoccA)
447
448 CALL section_vals_val_get(scf_section, "MOM%DEOCC_BETA", &
449 i_vals=scf_control%diagonalization%mom_deoccB)
450
451 CALL section_vals_val_get(scf_section, "MOM%OCC_ALPHA", &
452 i_vals=scf_control%diagonalization%mom_occA)
453
454 CALL section_vals_val_get(scf_section, "MOM%OCC_BETA", &
455 i_vals=scf_control%diagonalization%mom_occB)
456
457 CALL section_vals_val_get(scf_section, "MOM%PROJ_FORMULA", &
458 i_val=scf_control%diagonalization%mom_proj_formula)
459 END IF
460 END IF
461 ! Read ADIIS section
462 adiis_section => section_vals_get_subs_vals(scf_section, "ADIIS")
463 CALL section_vals_val_get(adiis_section, "MAX_HISTORY", &
464 i_val=scf_control%diagonalization%max_history)
465 CALL section_vals_val_get(adiis_section, "ADAPTIVE_LEVEL_SHIFT", &
466 r_val=scf_control%diagonalization%adiis_shift)
467 IF (.NOT. ieee_is_finite(scf_control%diagonalization%adiis_shift) .OR. &
468 scf_control%diagonalization%adiis_shift < 0.0_dp) THEN
469 cpabort("ADIIS%ADAPTIVE_LEVEL_SHIFT must be finite and nonnegative")
470 END IF
471 IF (scf_control%diagonalization%adiis_shift > 0.0_dp) THEN
472 IF (scf_control%diagonalization%update_method /= diag_update_method_adiis .OR. &
473 scf_control%diagonalization%max_history < 2) THEN
474 cpabort("ADAPTIVE_LEVEL_SHIFT requires UPDATE_METHOD ADIIS and MAX_HISTORY >= 2")
475 END IF
476 IF (scf_control%level_shift /= 0.0_dp) THEN
477 cpabort("ADAPTIVE_LEVEL_SHIFT cannot be combined with SCF%LEVEL_SHIFT")
478 END IF
479 END IF
480 CALL section_vals_val_get(adiis_section, "VERBOSE", &
481 l_val=scf_control%diagonalization%adiis_verbose)
482 ! Read ROKS parameters
483 CALL section_vals_val_get(scf_section, "ROKS_SCHEME", i_val=scf_control%roks_scheme)
484
485 SELECT CASE (scf_control%roks_scheme)
486 CASE (general_roks)
487 ! Read parameters for the general ROKS scheme
488 CALL section_vals_val_get(scf_section, "ROKS_F", r_val=scf_control%roks_f)
489 CASE (high_spin_roks)
490 ! Read high-spin ROKS parameters for the diagonal block
491 ! 0 = v)irtual, 1 = o)pen shell, 2 = c)losed shell
492 NULLIFY (roks_parameter)
493 CALL section_vals_val_get(scf_section, "ROKS_PARAMETERS", r_vals=roks_parameter)
494 IF (ASSOCIATED(roks_parameter)) THEN
495 scf_control%roks_parameter(2, 2, 1) = roks_parameter(1) ! acc
496 scf_control%roks_parameter(2, 2, 2) = roks_parameter(2) ! bcc
497 scf_control%roks_parameter(1, 1, 1) = roks_parameter(3) ! aoo
498 scf_control%roks_parameter(1, 1, 2) = roks_parameter(4) ! boo
499 scf_control%roks_parameter(0, 0, 1) = roks_parameter(5) ! avv
500 scf_control%roks_parameter(0, 0, 2) = roks_parameter(6) ! bvv
501 END IF
502 END SELECT
503
504 ! should be moved to printkey
505 CALL section_vals_val_get(scf_section, "eps_lumo", r_val=scf_control%eps_lumos)
506 CALL section_vals_val_get(scf_section, "max_iter_lumo", i_val=scf_control%max_iter_lumos)
507
508 ! Extra MOs, e.g. for smearing
509 CALL section_vals_val_get(scf_section, "added_mos", c_vals=added_mos)
510 cpassert(ASSOCIATED(added_mos))
511 IF (SIZE(added_mos) > 0) THEN
512 scf_control%added_mos_auto(:) = .false.
513 DO i = 1, min(SIZE(added_mos), SIZE(scf_control%added_mos))
514 added_mos_string = adjustl(added_mos(i))
515 CALL uppercase(added_mos_string)
516 IF (trim(added_mos_string) == "AUTO") THEN
517 scf_control%added_mos(i) = 0
518 scf_control%added_mos_auto(i) = .true.
519 ELSE
520 CALL read_integer_object(trim(added_mos(i)), added_mos_value, error_message)
521 IF (len_trim(error_message) > 0) THEN
522 CALL cp_abort(__location__, &
523 "Invalid ADDED_MOS value '"//trim(added_mos(i))// &
524 "'. Use an integer or AUTO.")
525 END IF
526 scf_control%added_mos(i) = added_mos_value
527 END IF
528 END DO
529 IF (SIZE(added_mos) == 1 .AND. scf_control%added_mos_auto(1)) THEN
530 scf_control%added_mos_auto(2) = .true.
531 END IF
532 END IF
533
534 CALL section_vals_val_get(scf_section, "max_scf_history", i_val=scf_control%max_scf_hist)
535 CALL section_vals_val_get(scf_section, "eps_scf_history", r_val=scf_control%eps_scf_hist)
536
537 IF (scf_control%level_shift /= 0.0_dp) scf_control%use_cholesky = .false.
538
539 ! Outer SCF subsection
540 outer_scf_section => section_vals_get_subs_vals(scf_section, "OUTER_SCF")
541 CALL outer_scf_read_parameters(scf_control%outer_scf, outer_scf_section)
542
543 smear_section => section_vals_get_subs_vals(scf_section, "SMEAR")
544 CALL init_smear(scf_control%smear)
545 CALL read_smear_section(scf_control%smear, smear_section)
546
547 do_mixing = .false.
548 mixing_section => section_vals_get_subs_vals(scf_section, "MIXING")
549 CALL section_vals_val_get(mixing_section, "_SECTION_PARAMETERS_", &
550 l_val=do_mixing)
551 IF (do_mixing) THEN
552 CALL section_vals_val_get(mixing_section, "METHOD", &
553 i_val=scf_control%mixing_method)
554 CALL section_vals_val_get(mixing_section, "NMIXING", i_val=scf_control%nmixing)
555 END IF ! do mixing
556
557 gce_section => section_vals_get_subs_vals(scf_section, "GCE")
558 CALL init_gce(scf_control%gce)
559 CALL read_gce_section(scf_control%gce, gce_section)
560
561 CALL timestop(handle)
562
563 END SUBROUTINE scf_c_read_parameters
564
565! **************************************************************************************************
566!> \brief ...
567!> \param smear ...
568! **************************************************************************************************
569 SUBROUTINE init_smear(smear)
570 TYPE(smear_type), POINTER :: smear
571
572 cpassert(.NOT. ASSOCIATED(smear))
573 ALLOCATE (smear)
574 smear%do_smear = .false.
575 smear%method = smear_energy_window
576 smear%electronic_temperature = 0.0_dp
577 smear%eps_fermi_dirac = 1.0e-5_dp
578 smear%fixed_mag_mom = -100.0_dp
579 smear%window_size = 0.0_dp
580 smear%smearing_width = 0.0_dp
581 NULLIFY (smear%list)
582 END SUBROUTINE init_smear
583
584! **************************************************************************************************
585!> \brief ...
586!> \param smear ...
587!> \param smear_section ...
588! **************************************************************************************************
589 SUBROUTINE read_smear_section(smear, smear_section)
590 TYPE(smear_type), POINTER :: smear
591 TYPE(section_vals_type), POINTER :: smear_section
592
593 REAL(kind=dp), DIMENSION(:), POINTER :: r_vals
594
595 NULLIFY (r_vals)
596
597 CALL section_vals_val_get(smear_section, "_SECTION_PARAMETERS_", &
598 l_val=smear%do_smear)
599 IF (smear%do_smear) THEN
600 CALL section_vals_val_get(smear_section, "METHOD", &
601 i_val=smear%method)
602 CALL section_vals_val_get(smear_section, "ELECTRONIC_TEMPERATURE", &
603 r_val=smear%electronic_temperature)
604 CALL section_vals_val_get(smear_section, "EPS_FERMI_DIRAC", &
605 r_val=smear%eps_fermi_dirac)
606 CALL section_vals_val_get(smear_section, "WINDOW_SIZE", &
607 r_val=smear%window_size)
608 IF (smear%method == smear_gaussian .OR. &
609 smear%method == smear_mp .OR. &
610 smear%method == smear_mv) THEN
611 CALL section_vals_val_get(smear_section, "SIGMA", &
612 r_val=smear%smearing_width)
613 END IF
614 IF (smear%method == smear_list) THEN
615 CALL section_vals_val_get(smear_section, "LIST", &
616 r_vals=r_vals)
617 cpassert(ASSOCIATED(r_vals))
618 ALLOCATE (smear%list(SIZE(r_vals)))
619 smear%list = r_vals
620 END IF
621 CALL section_vals_val_get(smear_section, "FIXED_MAGNETIC_MOMENT", &
622 r_val=smear%fixed_mag_mom)
623 END IF ! do smear
624 END SUBROUTINE read_smear_section
625
626! **************************************************************************************************
627!> \brief ...
628!> \param gce ...
629! **************************************************************************************************
630 SUBROUTINE init_gce(gce)
631 TYPE(gce_type), POINTER :: gce
632
633 cpassert(.NOT. ASSOCIATED(gce))
634 ALLOCATE (gce)
635 gce%do_gce = .false.
636 gce%target_workfunction = 0.16_dp
637 gce%prev_workfunction = -1001.0_dp
638 gce%ref_esp = 0.0_dp
639 gce%mixing_coef = 0.3_dp
640 END SUBROUTINE init_gce
641
642! **************************************************************************************************
643!> \brief ...
644!> \param gce ...
645!> \param gce_section ...
646! **************************************************************************************************
647 SUBROUTINE read_gce_section(gce, gce_section)
648 TYPE(gce_type), POINTER :: gce
649 TYPE(section_vals_type), POINTER :: gce_section
650
651 CALL section_vals_val_get(gce_section, "_SECTION_PARAMETERS_", &
652 l_val=gce%do_gce)
653 IF (gce%do_gce) THEN
654 CALL section_vals_val_get(gce_section, "TARGET_WORKFUNCTION", &
655 r_val=gce%target_workfunction)
656 CALL section_vals_val_get(gce_section, "MIXING_COEF", &
657 r_val=gce%mixing_coef)
658 END IF ! do gce
659 END SUBROUTINE read_gce_section
660
661! **************************************************************************************************
662!> \brief writes out the scf parameters
663!> \param scf_control the object you want to print
664!> \param dft_section ...
665!> \par History
666!> 05.2001 created [Matthias]
667!> 09.2002 created separated scf_control type [fawzi]
668!> \author Matthias Krack
669! **************************************************************************************************
670 SUBROUTINE scf_c_write_parameters(scf_control, dft_section)
671
672 TYPE(scf_control_type), INTENT(IN) :: scf_control
673 TYPE(section_vals_type), POINTER :: dft_section
674
675 CHARACTER(LEN=*), PARAMETER :: routinen = 'scf_c_write_parameters'
676
677 INTEGER :: handle, output_unit, roks_scheme
678 LOGICAL :: roks
679 REAL(kind=dp) :: elec_temp
680 TYPE(cp_logger_type), POINTER :: logger
681 TYPE(enumeration_type), POINTER :: enum
682 TYPE(keyword_type), POINTER :: keyword
683 TYPE(section_type), POINTER :: section
684 TYPE(section_vals_type), POINTER :: scf_section
685
686 CALL timeset(routinen, handle)
687
688 NULLIFY (logger)
689 logger => cp_get_default_logger()
690
691 NULLIFY (scf_section)
692 NULLIFY (section)
693
694 scf_section => section_vals_get_subs_vals(dft_section, "SCF")
695 output_unit = cp_print_key_unit_nr(logger, scf_section, "PRINT%PROGRAM_RUN_INFO", &
696 extension=".scfLog")
697
698 IF (output_unit > 0) THEN
699
700 IF (scf_control%max_scf > 0) THEN
701
702 CALL create_scf_section(section)
703
704 keyword => section_get_keyword(section, "SCF_GUESS")
705 CALL keyword_get(keyword, enum=enum)
706
707 IF (.NOT. scf_control%non_selfconsistent .OR. scf_control%force_scf_calculation) THEN
708 WRITE (unit=output_unit, &
709 fmt="(/,/,T2,A,T25,A,T51,A30,/,T25,56('-'),3(/,T25,A,T76,I5),/, "// &
710 "T25,56('-'),4(/,T25,A,T72,ES9.2),/,T25,56('-'), "// &
711 "1(/,T25,A,T71,F10.6))") &
712 "SCF PARAMETERS", &
713 "Density guess: ", adjustr(trim(enum_i2c(enum, scf_control%density_guess))), &
714 "max_scf: ", scf_control%max_scf, &
715 "max_scf_history: ", scf_control%max_scf_hist, &
716 "max_diis: ", scf_control%max_diis, &
717 "eps_scf: ", scf_control%eps_scf, &
718 "eps_scf_history: ", scf_control%eps_scf_hist, &
719 "eps_diis: ", scf_control%eps_diis, &
720 "eps_eigval: ", scf_control%eps_eigval, &
721 "level_shift [a.u.]:", scf_control%level_shift
722
723 IF (scf_control%density_guess == external_density_guess) THEN
724 WRITE (unit=output_unit, fmt="(T25,A,T51,A30)") &
725 "External density: ", adjustr(trim(scf_control%external_density_file_name))
726 END IF
727
728 IF (scf_control%use_diag) THEN
729 keyword => section_get_keyword(section, "DIAGONALIZATION%UPDATE_METHOD")
730 CALL keyword_get(keyword, enum=enum)
731 WRITE (unit=output_unit, fmt="(T25,A,T51,A30)") &
732 "SCF update method: ", &
733 adjustr(trim(enum_i2c(enum, scf_control%diagonalization%update_method)))
734 IF (scf_control%diagonalization%update_method == diag_update_method_adiis) THEN
735 WRITE (unit=output_unit, fmt="(T25,A,T71,I10)") &
736 "ADIIS max history: ", scf_control%diagonalization%max_history
737 END IF
738 END IF
739 END IF
740
741 IF (any(scf_control%added_mos_auto)) THEN
742 WRITE (unit=output_unit, fmt="(T25,A,T71,2I5)") &
743 "added MOs (auto) ", scf_control%added_mos
744 ELSE IF (sum(abs(scf_control%added_mos)) > 0) THEN
745 WRITE (unit=output_unit, fmt="(T25,A,T71,2I5)") &
746 "added MOs ", scf_control%added_mos
747 END IF
748
749 IF (scf_control%diagonalization%mom) THEN
750 ! TODO extend the output with further parameters
751 WRITE (unit=output_unit, fmt="(T25,A)") "MOM enabled"
752 END IF
753
754 IF (scf_control%mixing_method > 0 .AND. .NOT. scf_control%use_ot .AND. &
755 .NOT. scf_control%non_selfconsistent) THEN
756 keyword => section_get_keyword(section, "MIXING%METHOD")
757 CALL keyword_get(keyword, enum=enum)
758 WRITE (unit=output_unit, fmt="(T25,A,/,T25,A,T51,A30)") &
759 repeat("-", 56), &
760 "Mixing method: ", adjustr(trim(enum_i2c(enum, scf_control%mixing_method)))
761 IF (scf_control%mixing_method > 1) THEN
762 WRITE (unit=output_unit, fmt="(T47,A34)") "charge density mixing in g-space"
763 END IF
764 END IF
765 IF (scf_control%smear%do_smear) THEN
766 keyword => section_get_keyword(section, "SMEAR%METHOD")
767 CALL keyword_get(keyword, enum=enum)
768 WRITE (unit=output_unit, fmt="(T25,A,/,T25,A,T51,A30)") &
769 repeat("-", 56), &
770 "Smear method: ", adjustr(trim(enum_i2c(enum, scf_control%smear%method)))
771 SELECT CASE (scf_control%smear%method)
772 CASE (smear_fermi_dirac)
773 elec_temp = cp_unit_from_cp2k(scf_control%smear%electronic_temperature, &
774 "K")
775 WRITE (unit=output_unit, fmt="(T25,A,T61,F20.1)") &
776 "Electronic temperature [K]:", elec_temp
777 WRITE (unit=output_unit, fmt="(T25,A,T71,ES10.2)") &
778 "Electronic temperature [a.u.]:", scf_control%smear%electronic_temperature, &
779 "Accuracy threshold:", scf_control%smear%eps_fermi_dirac
780 IF (scf_control%smear%fixed_mag_mom > 0.0_dp) WRITE (unit=output_unit, fmt="(T25,A,T61,F20.1)") &
781 "Fixed magnetic moment set to:", scf_control%smear%fixed_mag_mom
783 WRITE (unit=output_unit, fmt="(T25,A,T71,ES10.2)") &
784 "Smearing width (sigma) [a.u.]:", scf_control%smear%smearing_width, &
785 "Accuracy threshold:", scf_control%smear%eps_fermi_dirac
786 IF (scf_control%smear%fixed_mag_mom > 0.0_dp) THEN
787 WRITE (unit=output_unit, fmt="(T25,A,T61,F20.1)") &
788 "Fixed magnetic moment set to:", scf_control%smear%fixed_mag_mom
789 END IF
791 WRITE (unit=output_unit, fmt="(T25,A,T71,F10.6)") &
792 "Smear window [a.u.]: ", scf_control%smear%window_size
793 END SELECT
794 END IF
795
796 IF (scf_control%gce%do_gce) THEN
797 WRITE (unit=output_unit, fmt="(T25,A,/,T25,A,T61,F20.6)") &
798 repeat("-", 56), &
799 "Target workfunction [eV]:", scf_control%gce%target_workfunction*evolt
800 WRITE (unit=output_unit, fmt="(T25,A,T61,F20.1)") "Mixing coefficient:", scf_control%gce%mixing_coef
801 WRITE (unit=output_unit, fmt="(T25,A)") "Grand canonical SCF is activated."
802 END IF
803
804 CALL section_vals_val_get(dft_section, "ROKS", l_val=roks)
805 IF (roks .AND. (.NOT. scf_control%use_ot)) THEN
806 CALL section_vals_val_get(scf_section, "ROKS_SCHEME", &
807 i_val=roks_scheme)
808 keyword => section_get_keyword(section, "ROKS_SCHEME")
809 CALL keyword_get(keyword, enum=enum)
810 WRITE (unit=output_unit, fmt="(T25,A,/,T25,A,T51,A30)") &
811 repeat("-", 56), &
812 "ROKS scheme:", adjustr(trim(enum_i2c(enum, roks_scheme)))
813 SELECT CASE (roks_scheme)
814 CASE (general_roks)
815 WRITE (unit=output_unit, fmt="(T25,A,T71,F10.6)") &
816 "ROKS parameter f:", scf_control%roks_f
817 CASE (high_spin_roks)
818 WRITE (unit=output_unit, &
819 fmt="(T25,A,6(/,T25,A,T71,F10.6))") &
820 "ROKS parameters: a)lpha, b)eta; c)losed, o)pen, v)irtual", &
821 "acc", scf_control%roks_parameter(2, 2, 1), &
822 "bcc", scf_control%roks_parameter(2, 2, 2), &
823 "aoo", scf_control%roks_parameter(1, 1, 1), &
824 "boo", scf_control%roks_parameter(1, 1, 2), &
825 "avv", scf_control%roks_parameter(0, 0, 1), &
826 "bvv", scf_control%roks_parameter(0, 0, 2)
827 END SELECT
828 END IF
829 CALL section_release(section)
830
831 IF (scf_control%outer_scf%have_scf) THEN
832 WRITE (output_unit, "(T25,56('-'),/,T25,A)") "Outer loop SCF in use "
833 SELECT CASE (scf_control%outer_scf%type)
834 CASE (outer_scf_none)
835 WRITE (output_unit, '(T25,A)') "No variables optimised in outer loop"
837 WRITE (output_unit, '(T25,A)') "DDAPC constraint enforced"
839 WRITE (output_unit, '(T25,A)') "S2 constraint enforced"
841 WRITE (output_unit, '(T25,A)') "Floating basis function optimization enforced"
843 cpabort("CDFT constraints must be defined in QS&CDFT")
844 CASE DEFAULT
845 cpabort("Unknown outer SCF type")
846 END SELECT
847 WRITE (output_unit, '(T25,A,T72,ES9.2)') "eps_scf", scf_control%outer_scf%eps_scf
848 WRITE (output_unit, '(T25,A,T72,I9)') "max_scf", scf_control%outer_scf%max_scf
849 SELECT CASE (scf_control%outer_scf%optimizer)
851 WRITE (output_unit, '(T25,A)') "No outer loop optimization"
853 WRITE (output_unit, '(T25,A)') "Steepest descent optimization"
855 WRITE (output_unit, '(T25,A)') "Gradient bisection"
856 WRITE (output_unit, '(T25,A,T72,I9)') "bisect_trust_count", scf_control%outer_scf%bisect_trust_count
858 WRITE (output_unit, '(T25,A)') "DIIS optimization"
859 WRITE (output_unit, '(T25,A,T72,I9)') "DIIS buffer length", &
860 scf_control%outer_scf%diis_buffer_length
863 cpabort("Selected optimizer only compatible with CDFT")
865 WRITE (output_unit, '(T25,A)') "Optimization with the secant method"
866 CASE DEFAULT
867 cpabort("Unknown outer SCF optimizer")
868 END SELECT
869 WRITE (output_unit, '(T25,A,T72,ES9.2)') "step_size", scf_control%outer_scf%step_size
870 ELSE
871 WRITE (output_unit, "(T25,56('-'),/,T25,A)") "No outer SCF"
872 END IF
873
874 END IF ! max_scf > 0
875
876 END IF ! output_unit > 0
877
878 CALL cp_print_key_finished_output(output_unit, logger, scf_section, &
879 "PRINT%PROGRAM_RUN_INFO")
880
881 CALL timestop(handle)
882
883 END SUBROUTINE scf_c_write_parameters
884
885! **************************************************************************************************
886
887! **************************************************************************************************
888!> \brief ...
889!> \param settings ...
890!> \param scf_section ...
891! **************************************************************************************************
892 SUBROUTINE ot_diag_read_input(settings, scf_section)
893 TYPE(qs_ot_settings_type) :: settings
894 TYPE(section_vals_type), POINTER :: scf_section
895
896 CHARACTER(len=*), PARAMETER :: routinen = 'ot_diag_read_input'
897
898 INTEGER :: handle, output_unit
899 LOGICAL :: explicit
900 TYPE(cp_logger_type), POINTER :: logger
901 TYPE(section_vals_type), POINTER :: ot_section
902
903 CALL timeset(routinen, handle)
904
905 logger => cp_get_default_logger()
906 output_unit = cp_print_key_unit_nr(logger, scf_section, "PRINT%PROGRAM_RUN_INFO", &
907 extension=".log")
908
909 ! decide default settings
910 CALL qs_ot_settings_init(settings)
911
912 ! use ot input new style
913 ot_section => section_vals_get_subs_vals(scf_section, "DIAGONALIZATION%OT")
914 CALL section_vals_get(ot_section, explicit=explicit)
915
916 CALL ot_readwrite_input(settings, ot_section, output_unit, eigensolver=.true.)
917
918 CALL cp_print_key_finished_output(output_unit, logger, scf_section, &
919 "PRINT%PROGRAM_RUN_INFO")
920
921 CALL timestop(handle)
922
923 END SUBROUTINE ot_diag_read_input
924
925! **************************************************************************************************
926
927END MODULE scf_control_types
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
Utility routines to read data from files. Kept as close as possible to the old parser because.
elemental subroutine, public read_integer_object(string, object, error_message)
Returns an integer number read from a string including products of integer numbers like iz1*iz2*iz3.
unit conversion facility
Definition cp_units.F:30
real(kind=dp) function, public cp_unit_from_cp2k(value, unit_str, defaults, power)
converts from the internal cp2k units to the given unit
Definition cp_units.F:1251
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public smear_fermi_dirac
integer, parameter, public external_density_guess
integer, parameter, public outer_scf_optimizer_sd
integer, parameter, public outer_scf_optimizer_bisect
integer, parameter, public outer_scf_optimizer_secant
integer, parameter, public smear_energy_window
integer, parameter, public outer_scf_cdft_constraint
integer, parameter, public no_guess
integer, parameter, public outer_scf_optimizer_broyden
integer, parameter, public atomic_guess
integer, parameter, public outer_scf_basis_center_opt
integer, parameter, public direct_p_mix
integer, parameter, public outer_scf_s2_constraint
integer, parameter, public ot_algo_taylor_or_diag
integer, parameter, public smear_list
integer, parameter, public no_mix
integer, parameter, public high_spin_roks
integer, parameter, public diag_update_method_mixing
integer, parameter, public diag_ot
integer, parameter, public outer_scf_ddapc_constraint
integer, parameter, public smear_gaussian
integer, parameter, public smear_mv
integer, parameter, public diag_update_method_adiis
integer, parameter, public outer_scf_optimizer_newton_ls
integer, parameter, public outer_scf_optimizer_none
integer, parameter, public outer_scf_optimizer_newton
integer, parameter, public general_roks
integer, parameter, public outer_scf_none
integer, parameter, public smear_mp
integer, parameter, public outer_scf_optimizer_diis
function that build the scf section of the input
subroutine, public create_scf_section(section)
creates the structure of the section with the DFT SCF parameters
represents an enumeration, i.e. a mapping between integers and strings
character(len=default_string_length) function, public enum_i2c(enum, i)
maps an integer to a string
represents keywords in an input
subroutine, public keyword_get(keyword, names, usage, description, type_of_var, n_var, default_value, lone_keyword_value, repeats, enum, citations)
...
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
recursive subroutine, public section_release(section)
releases the given keyword list (see doc/ReferenceCounting.html)
recursive type(keyword_type) function, pointer, public section_get_keyword(section, keyword_name)
returns the requested keyword
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
integer, parameter, public default_path_length
Definition kinds.F:58
An array-based list which grows on demand. When the internal array is full, a new array of twice the ...
Definition list.F:24
parameters that control the outer loop of an SCF iteration
subroutine, public outer_scf_read_parameters(outer_scf, outer_scf_section)
reads the parameters of the outer_scf section into the given outer_scf
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public evolt
Definition physcon.F:183
Control parameters for optimizers that work with CDFT constraints.
subroutine, public cdft_opt_type_release(cdft_opt_control)
releases the CDFT optimizer control object
orbital transformations
Definition qs_ot_types.F:15
subroutine, public qs_ot_settings_init(settings)
sets default values for the settings type
subroutine, public ot_readwrite_input(settings, ot_section, output_unit, complex_kpoints, eigensolver)
...
parameters that control an scf iteration
subroutine, public scf_c_read_parameters(scf_control, inp_section)
reads the parameters of the scf section into the given scf_control
subroutine, public scf_c_release(scf_control)
releases the given scf_control (see cp2k/doc/ReferenceCounting.html)
subroutine, public scf_c_write_parameters(scf_control, dft_section)
writes out the scf parameters
subroutine, public scf_c_create(scf_control)
allocates and initializes an scf control object with the default values
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
represent a keyword in the input
represent a section of the input file
contains the parameters needed by a scf run
notice, this variable needs to be copyable, needed for spins as e.g. in qs_ot_scf
Definition qs_ot_types.F:80
contains the parameters needed by a scf run