(git:474e12a)
Loading...
Searching...
No Matches
qs_scf_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 module that contains the definitions of the scf types
10!> \par History
11!> 02.2003 created [fawzi]
12!> \author fawzi
13! **************************************************************************************************
19 USE cp_fm_types, ONLY: cp_fm_release,&
24 USE kinds, ONLY: dp
40 USE qs_ot_types, ONLY: qs_ot_destroy,&
44#include "./base/base_uses.f90"
45
46 IMPLICIT NONE
47 PRIVATE
48
49 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
50
51 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_scf_types'
52
53 INTEGER, PARAMETER, PUBLIC :: general_diag_method_nr = 1, &
58 ot_method_nr = 10, &
61
62 PUBLIC :: qs_scf_env_type
66
67! **************************************************************************************************
68!> \brief wrapper for temporary and cached objects used in the scf iteration
69!> \par History
70!> 02.2003 created [fawzi]
71!> \author fawzi
72! **************************************************************************************************
74 INTEGER :: nkrylov = -1, nblock = -1, nmo_conv = -1, nmo_nc = -1, max_iter = -1
75 LOGICAL :: always_check_conv = .false.
76 REAL(dp) :: eps_std_diag = -1.0_dp, eps_conv = -1.0_dp, eps_adapt = -1.0_dp, max_res_norm = -1.0_dp, min_res_norm = -1.0_dp
77 REAL(dp), DIMENSION(:), POINTER :: c_eval => null(), t_eval => null()
78 TYPE(cp_fm_type), DIMENSION(:), POINTER :: v_mat => null(), mo_conv => null(), mo_refine => null()
79 TYPE(cp_fm_type), POINTER :: tmp_mat => null()
80 !NOTE: the following matrices are small and could be used as standard array rather than distributed fm
81 TYPE(cp_fm_type), POINTER :: block1_mat => null(), block2_mat => null(), block3_mat => null(), &
82 block4_mat => null(), block5_mat => null()
83 TYPE(cp_fm_type), DIMENSION(:), POINTER :: c_vec => null(), chc_mat => null()
84 END TYPE krylov_space_type
85
87 INTEGER :: max_iter = -1, mixing_method = -1
88 REAL(dp) :: eps_diag_sub = -1.0_dp, eps_ene = -1.0_dp, eps_adapt = -1.0_dp
89 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: p_matrix_store => null()
90 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: p_matrix_mix => null()
91 TYPE(cp_fm_type), DIMENSION(:), POINTER :: chc_mat => null(), c_vec => null(), c0 => null()
92 TYPE(mixing_storage_type), POINTER :: mixing_store => null()
93 END TYPE subspace_env_type
94
95 TYPE floating_basis_type
96 REAL(kind=dp), DIMENSION(:, :), POINTER :: gradient => null()
97 END TYPE floating_basis_type
98! **************************************************************************************************
101 INTEGER :: iter_count = -1
102 INTEGER :: cholesky_method = -1, nelectron = -1, method = -1, mixing_method = -1, nskip_mixing = -1
103 REAL(kind=dp) :: iter_param = -1.0_dp, iter_delta = -1.0_dp, p_mix_alpha = -1.0_dp, sum_zeff_corr = -1.0_dp
104 ! ADIIS diagnostics: accepted-step norm and raw-map delta.
105 REAL(kind=dp) :: step_norm = -1.0_dp, raw_map_delta = -1.0_dp
106 ! Occupied-space regularization used only to generate ADIIS candidates.
107 REAL(kind=dp) :: adiis_shift = 0.0_dp
108 CHARACTER(len=15) :: iter_method = ""
109 COMPLEX(KIND=dp), DIMENSION(:, :, :), POINTER :: cc_buffer => null()
110 LOGICAL :: print_iter_line = .false., skip_mixing = .false., skip_diis = .false., needs_ortho = .false., &
111 adiis_check_next = .false., adiis_validated = .false., &
112 raw_map_delta_valid = .false.
113 TYPE(mixing_storage_type), POINTER :: mixing_store => null()
114 TYPE(cp_fm_type), DIMENSION(:), POINTER :: scf_work1 => null(), scf_work1_red => null()
115 TYPE(cp_fm_type), POINTER :: scf_work2 => null(), ortho => null(), ortho_m1 => null(), &
116 s_half => null(), s_minus_one => null(), &
117 scf_work2_red => null(), ortho_red => null(), ortho_m1_red => null()
118 TYPE(krylov_space_type), POINTER :: krylov_space => null()
119 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: p_delta => null(), p_mix_new => null()
120 TYPE(dbcsr_type), POINTER :: ortho_dbcsr => null(), buf1_dbcsr => null(), buf2_dbcsr => null()
121 TYPE(preconditioner_p_type), DIMENSION(:), POINTER :: ot_preconditioner => null()
122 TYPE(qs_ot_type), POINTER, DIMENSION(:) :: qs_ot_env => null()
123 TYPE(qs_diis_buffer_type), POINTER :: scf_diis_buffer => null()
124 TYPE(qs_scf_subspace_buffer_type), POINTER :: scf_subspace_buffer => null()
125 TYPE(subspace_env_type), POINTER :: subspace_env => null()
126 TYPE(davidson_type), POINTER, DIMENSION(:) :: block_davidson_env => null()
127 TYPE(fb_env_obj) :: filter_matrix_env = fb_env_obj()
128 TYPE(floating_basis_type) :: floating_basis = floating_basis_type()
129 !> reference molecular orbitals for the maximum overlap method
130 TYPE(cp_fm_type), DIMENSION(:), POINTER :: mom_ref_mo_coeff => null()
131 !> MOM-related work matrices
132 TYPE(cp_fm_type), DIMENSION(:), POINTER :: mom_overlap => null(), mom_s_mo_coeff => null()
133 END TYPE qs_scf_env_type
134
135CONTAINS
136
137! **************************************************************************************************
138!> \brief allocates and initialize an scf_env
139!> \param scf_env the scf env to initialize
140!> \par History
141!> 02.2003 created [fawzi]
142!> \author fawzi
143! **************************************************************************************************
144 SUBROUTINE scf_env_create(scf_env)
145 TYPE(qs_scf_env_type), INTENT(OUT) :: scf_env
146
147 CHARACTER(len=*), PARAMETER :: routinen = 'scf_env_create'
148
149 INTEGER :: handle
150
151 CALL timeset(routinen, handle)
152
153 scf_env%iter_count = 0
154 scf_env%nelectron = 0
155 scf_env%iter_param = 0.0_dp
156 scf_env%iter_delta = 0.0_dp
157 scf_env%step_norm = 0.0_dp
158 scf_env%raw_map_delta = 0.0_dp
159 scf_env%iter_method = ""
160 scf_env%print_iter_line = .true.
161 scf_env%skip_mixing = .false.
162 scf_env%skip_diis = .false.
163 scf_env%needs_ortho = .false.
164 scf_env%adiis_check_next = .false.
165 scf_env%adiis_validated = .false.
166 scf_env%raw_map_delta_valid = .false.
167 scf_env%adiis_shift = 0.0_dp
168 scf_env%method = -1
169 scf_env%mixing_method = -1
170 scf_env%p_mix_alpha = 1.0_dp
171 scf_env%cholesky_method = -1
172 scf_env%outer_scf%iter_count = 0
173 scf_env%sum_zeff_corr = 0.0_dp
174 NULLIFY (scf_env%outer_scf%variables)
175 NULLIFY (scf_env%outer_scf%gradient)
176 NULLIFY (scf_env%outer_scf%energy)
177 NULLIFY (scf_env%outer_scf%count)
178 NULLIFY (scf_env%outer_scf%inv_jacobian)
179 scf_env%outer_scf%deallocate_jacobian = .true.
180 NULLIFY (scf_env%scf_work1)
181 NULLIFY (scf_env%scf_work2)
182 NULLIFY (scf_env%scf_work1_red)
183 NULLIFY (scf_env%scf_work2_red)
184 NULLIFY (scf_env%ortho)
185 NULLIFY (scf_env%ortho_red)
186 NULLIFY (scf_env%ortho_dbcsr)
187 NULLIFY (scf_env%ortho_m1)
188 NULLIFY (scf_env%ortho_m1_red)
189 NULLIFY (scf_env%p_mix_new)
190 NULLIFY (scf_env%ot_preconditioner)
191 NULLIFY (scf_env%qs_ot_env)
192 NULLIFY (scf_env%scf_diis_buffer)
193 NULLIFY (scf_env%scf_subspace_buffer)
194 NULLIFY (scf_env%buf1_dbcsr)
195 NULLIFY (scf_env%buf2_dbcsr)
196 NULLIFY (scf_env%s_half)
197 NULLIFY (scf_env%p_delta)
198 NULLIFY (scf_env%s_minus_one)
199 NULLIFY (scf_env%cc_buffer)
200 NULLIFY (scf_env%mixing_store)
201 NULLIFY (scf_env%krylov_space)
202 NULLIFY (scf_env%subspace_env)
203 NULLIFY (scf_env%block_davidson_env)
204 NULLIFY (scf_env%floating_basis%gradient)
205 CALL fb_env_nullify(scf_env%filter_matrix_env)
206 NULLIFY (scf_env%mom_ref_mo_coeff)
207 NULLIFY (scf_env%mom_overlap)
208 NULLIFY (scf_env%mom_s_mo_coeff)
209
210 CALL timestop(handle)
211
212 END SUBROUTINE scf_env_create
213
214! **************************************************************************************************
215!> \brief function to be called to inform the scf_env about changes
216!> \param scf_env the scf env to inform
217!> \par History
218!> 03.2003 created [fawzi]
219!> \author fawzi
220! **************************************************************************************************
221 SUBROUTINE scf_env_did_change(scf_env)
222 TYPE(qs_scf_env_type), INTENT(INOUT) :: scf_env
223
224 CHARACTER(len=*), PARAMETER :: routinen = 'scf_env_did_change'
225
226 INTEGER :: handle
227
228 CALL timeset(routinen, handle)
229
230 IF (ASSOCIATED(scf_env%p_mix_new)) THEN
231 CALL dbcsr_deallocate_matrix_set(scf_env%p_mix_new)
232 END IF
233 IF (ASSOCIATED(scf_env%p_delta)) THEN
234 CALL dbcsr_deallocate_matrix_set(scf_env%p_delta)
235 END IF
236 IF (ASSOCIATED(scf_env%scf_subspace_buffer)) THEN
237 CALL qs_scf_subspace_buffer_release(scf_env%scf_subspace_buffer)
238 DEALLOCATE (scf_env%scf_subspace_buffer)
239 END IF
240 CALL cp_fm_release(scf_env%mom_ref_mo_coeff)
241
242 CALL timestop(handle)
243
244 END SUBROUTINE scf_env_did_change
245
246! **************************************************************************************************
247!> \brief releases an scf_env (see doc/ReferenceCounting.html)
248!> \param scf_env the environment to release
249!> \par History
250!> 02.2003 created [fawzi]
251!> \author fawzi
252! **************************************************************************************************
253 SUBROUTINE scf_env_release(scf_env)
254
255 TYPE(qs_scf_env_type), INTENT(INOUT) :: scf_env
256
257 CHARACTER(len=*), PARAMETER :: routinen = 'scf_env_release'
258
259 INTEGER :: handle, i
260
261 CALL timeset(routinen, handle)
262
263 CALL cp_fm_release(scf_env%scf_work1)
264 IF (ASSOCIATED(scf_env%scf_work1_red)) THEN
265 CALL cp_fm_release(scf_env%scf_work1_red)
266 DEALLOCATE (scf_env%scf_work1_red)
267 NULLIFY (scf_env%scf_work1_red)
268 END IF
269 IF (ASSOCIATED(scf_env%scf_work2)) THEN
270 CALL cp_fm_release(scf_env%scf_work2)
271 DEALLOCATE (scf_env%scf_work2)
272 NULLIFY (scf_env%scf_work2)
273 END IF
274 IF (ASSOCIATED(scf_env%scf_work2_red)) THEN
275 CALL cp_fm_release(scf_env%scf_work2_red)
276 DEALLOCATE (scf_env%scf_work2_red)
277 NULLIFY (scf_env%scf_work2_red)
278 END IF
279 IF (ASSOCIATED(scf_env%ortho)) THEN
280 CALL cp_fm_release(scf_env%ortho)
281 DEALLOCATE (scf_env%ortho)
282 NULLIFY (scf_env%ortho)
283 END IF
284 IF (ASSOCIATED(scf_env%ortho_red)) THEN
285 CALL cp_fm_release(scf_env%ortho_red)
286 DEALLOCATE (scf_env%ortho_red)
287 NULLIFY (scf_env%ortho_red)
288 END IF
289 IF (ASSOCIATED(scf_env%ortho_m1)) THEN
290 CALL cp_fm_release(scf_env%ortho_m1)
291 DEALLOCATE (scf_env%ortho_m1)
292 NULLIFY (scf_env%ortho_m1)
293 END IF
294 IF (ASSOCIATED(scf_env%ortho_m1_red)) THEN
295 CALL cp_fm_release(scf_env%ortho_m1_red)
296 DEALLOCATE (scf_env%ortho_m1_red)
297 NULLIFY (scf_env%ortho_m1_red)
298 END IF
299 IF (ASSOCIATED(scf_env%ortho_dbcsr)) THEN
300 ! we should not end up here, and give back using the pools
301 CALL dbcsr_deallocate_matrix(scf_env%ortho_dbcsr)
302 END IF
303 IF (ASSOCIATED(scf_env%buf1_dbcsr)) THEN
304 ! we should not end up here, and give back using the pools
305 CALL dbcsr_deallocate_matrix(scf_env%buf1_dbcsr)
306 END IF
307 IF (ASSOCIATED(scf_env%buf2_dbcsr)) THEN
308 ! we should not end up here, and give back using the pools
309 CALL dbcsr_deallocate_matrix(scf_env%buf2_dbcsr)
310 END IF
311 IF (ASSOCIATED(scf_env%s_half)) THEN
312 CALL cp_fm_release(scf_env%s_half)
313 DEALLOCATE (scf_env%s_half)
314 END IF
315 IF (ASSOCIATED(scf_env%s_minus_one)) THEN
316 CALL cp_fm_release(scf_env%s_minus_one)
317 DEALLOCATE (scf_env%s_minus_one)
318 END IF
319 IF (ASSOCIATED(scf_env%p_mix_new)) THEN
320 ! we should not end up here, and give back using the pools
321 CALL dbcsr_deallocate_matrix_set(scf_env%p_mix_new)
322 END IF
323 IF (ASSOCIATED(scf_env%p_delta)) THEN
324 ! we should not end up here, and give back using the pools
325 CALL dbcsr_deallocate_matrix_set(scf_env%p_delta)
326 END IF
327 IF (ASSOCIATED(scf_env%ot_preconditioner)) THEN
328 DO i = 1, SIZE(scf_env%ot_preconditioner)
329 IF (ASSOCIATED(scf_env%ot_preconditioner(i)%preconditioner)) THEN
330 CALL destroy_preconditioner(scf_env%ot_preconditioner(i)%preconditioner)
331 DEALLOCATE (scf_env%ot_preconditioner(i)%preconditioner)
332 END IF
333 END DO
334 DEALLOCATE (scf_env%ot_preconditioner)
335 END IF
336 IF (ASSOCIATED(scf_env%qs_ot_env)) THEN
337 DO i = 1, SIZE(scf_env%qs_ot_env)
338 CALL qs_ot_destroy(scf_env%qs_ot_env(i))
339 END DO
340 DEALLOCATE (scf_env%qs_ot_env)
341 END IF
342 IF (ASSOCIATED(scf_env%scf_diis_buffer)) THEN
343 CALL qs_diis_b_release(scf_env%scf_diis_buffer)
344 DEALLOCATE (scf_env%scf_diis_buffer)
345 END IF
346 IF (ASSOCIATED(scf_env%scf_subspace_buffer)) THEN
347 CALL qs_scf_subspace_buffer_release(scf_env%scf_subspace_buffer)
348 DEALLOCATE (scf_env%scf_subspace_buffer)
349 END IF
350 IF (ASSOCIATED(scf_env%outer_scf%variables)) THEN
351 DEALLOCATE (scf_env%outer_scf%variables)
352 END IF
353 IF (ASSOCIATED(scf_env%outer_scf%count)) THEN
354 DEALLOCATE (scf_env%outer_scf%count)
355 END IF
356 IF (ASSOCIATED(scf_env%outer_scf%gradient)) THEN
357 DEALLOCATE (scf_env%outer_scf%gradient)
358 END IF
359 IF (ASSOCIATED(scf_env%outer_scf%inv_jacobian)) THEN
360 DEALLOCATE (scf_env%outer_scf%inv_jacobian)
361 END IF
362 IF (ASSOCIATED(scf_env%outer_scf%energy)) THEN
363 DEALLOCATE (scf_env%outer_scf%energy)
364 END IF
365 IF (ASSOCIATED(scf_env%cc_buffer)) THEN
366 DEALLOCATE (scf_env%cc_buffer)
367 END IF
368 IF (ASSOCIATED(scf_env%mixing_store)) THEN
369 CALL mixing_storage_release(scf_env%mixing_store)
370 DEALLOCATE (scf_env%mixing_store)
371 END IF
372 IF (ASSOCIATED(scf_env%krylov_space)) THEN
373 CALL krylov_space_release(scf_env%krylov_space)
374 END IF
375 IF (ASSOCIATED(scf_env%subspace_env)) THEN
376 CALL diag_subspace_env_release(scf_env%subspace_env)
377 END IF
378 IF (ASSOCIATED(scf_env%block_davidson_env)) THEN
379 CALL block_davidson_release(scf_env%block_davidson_env)
380 END IF
381 IF (fb_env_has_data(scf_env%filter_matrix_env)) THEN
382 CALL fb_env_release(scf_env%filter_matrix_env)
383 END IF
384 IF (ASSOCIATED(scf_env%floating_basis%gradient)) THEN
385 DEALLOCATE (scf_env%floating_basis%gradient)
386 END IF
387 CALL cp_fm_release(scf_env%mom_ref_mo_coeff)
388 CALL cp_fm_release(scf_env%mom_overlap)
389 CALL cp_fm_release(scf_env%mom_s_mo_coeff)
390
391 CALL timestop(handle)
392
393 END SUBROUTINE scf_env_release
394
395! **************************************************************************************************
396!> \brief creates krylov space
397!> \param krylov_space ...
398!> \param scf_section ...
399!> \par History
400!> 05.2009 created [MI]
401!> \author [MI]
402! **************************************************************************************************
403 SUBROUTINE krylov_space_create(krylov_space, scf_section)
404
405 TYPE(krylov_space_type), POINTER :: krylov_space
406 TYPE(section_vals_type), POINTER :: scf_section
407
408 cpassert(.NOT. ASSOCIATED(krylov_space))
409 ALLOCATE (krylov_space)
410
411 NULLIFY (krylov_space%c_eval, krylov_space%t_eval)
412 NULLIFY (krylov_space%v_mat)
413 NULLIFY (krylov_space%mo_conv, krylov_space%mo_refine)
414 NULLIFY (krylov_space%chc_mat, krylov_space%c_vec)
415 NULLIFY (krylov_space%tmp_mat)
416 NULLIFY (krylov_space%block1_mat, krylov_space%block2_mat)
417 NULLIFY (krylov_space%block3_mat, krylov_space%block4_mat, krylov_space%block5_mat)
418
419 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%MAX_ITER", &
420 i_val=krylov_space%max_iter)
421 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%NKRYLOV", &
422 i_val=krylov_space%nkrylov)
423 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%NBLOCK", &
424 i_val=krylov_space%nblock)
425 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%EPS_KRYLOV", &
426 r_val=krylov_space%eps_conv)
427 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%EPS_STD_DIAG", &
428 r_val=krylov_space%eps_std_diag)
429 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%EPS_ADAPT", &
430 r_val=krylov_space%eps_adapt)
431 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%CHECK_MOS_CONV", &
432 l_val=krylov_space%always_check_conv)
433
434 END SUBROUTINE krylov_space_create
435
436! **************************************************************************************************
437!> \brief releases krylov space
438!> \param krylov_space ...
439!> \par History
440!> 05.2009 created [MI]
441!> \author [MI]
442! **************************************************************************************************
443 SUBROUTINE krylov_space_release(krylov_space)
444 TYPE(krylov_space_type), POINTER :: krylov_space
445
446 IF (ASSOCIATED(krylov_space)) THEN
447
448 DEALLOCATE (krylov_space%c_eval)
449 DEALLOCATE (krylov_space%t_eval)
450
451 CALL cp_fm_release(krylov_space%v_mat)
452 CALL cp_fm_release(krylov_space%mo_conv)
453 CALL cp_fm_release(krylov_space%mo_refine)
454 CALL cp_fm_release(krylov_space%chc_mat)
455 CALL cp_fm_release(krylov_space%c_vec)
456
457 IF (ASSOCIATED(krylov_space%tmp_mat)) THEN
458 CALL cp_fm_release(krylov_space%tmp_mat)
459 DEALLOCATE (krylov_space%tmp_mat)
460 END IF
461 IF (ASSOCIATED(krylov_space%block1_mat)) THEN
462 CALL cp_fm_release(krylov_space%block1_mat)
463 DEALLOCATE (krylov_space%block1_mat)
464 END IF
465 IF (ASSOCIATED(krylov_space%block2_mat)) THEN
466 CALL cp_fm_release(krylov_space%block2_mat)
467 DEALLOCATE (krylov_space%block2_mat)
468 END IF
469 IF (ASSOCIATED(krylov_space%block3_mat)) THEN
470 CALL cp_fm_release(krylov_space%block3_mat)
471 DEALLOCATE (krylov_space%block3_mat)
472 END IF
473 IF (ASSOCIATED(krylov_space%block4_mat)) THEN
474 CALL cp_fm_release(krylov_space%block4_mat)
475 DEALLOCATE (krylov_space%block4_mat)
476 END IF
477 IF (ASSOCIATED(krylov_space%block5_mat)) THEN
478 CALL cp_fm_release(krylov_space%block5_mat)
479 DEALLOCATE (krylov_space%block5_mat)
480 END IF
481
482 DEALLOCATE (krylov_space)
483
484 NULLIFY (krylov_space)
485 END IF
486
487 END SUBROUTINE krylov_space_release
488
489! **************************************************************************************************
490!> \brief creates subspace-rotation environment
491!> \param subspace_env ...
492!> \param scf_section ...
493!> \param ecut ...
494!> \par History
495!> 09.2009 created [MI]
496!> \author [MI]
497! **************************************************************************************************
498 SUBROUTINE diag_subspace_env_create(subspace_env, scf_section, ecut)
499
500 TYPE(subspace_env_type), POINTER :: subspace_env
501 TYPE(section_vals_type), POINTER :: scf_section
502 REAL(dp), INTENT(IN) :: ecut
503
504 LOGICAL :: do_mixing
505 TYPE(section_vals_type), POINTER :: mixing_section
506
507 cpassert(.NOT. ASSOCIATED(subspace_env))
508 ALLOCATE (subspace_env)
509
510 NULLIFY (subspace_env%p_matrix_store)
511 NULLIFY (subspace_env%p_matrix_mix)
512 NULLIFY (subspace_env%chc_mat)
513 NULLIFY (subspace_env%c_vec)
514 NULLIFY (subspace_env%c0)
515 NULLIFY (subspace_env%mixing_store)
516 NULLIFY (mixing_section)
517
518 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%MAX_ITER", &
519 i_val=subspace_env%max_iter)
520 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%EPS_ENE", &
521 r_val=subspace_env%eps_ene)
522 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%EPS_SKIP_SUB_DIAG", &
523 r_val=subspace_env%eps_diag_sub)
524 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%EPS_ADAPT_SCF", &
525 r_val=subspace_env%eps_adapt)
526 subspace_env%mixing_method = 0
527 do_mixing = .false.
528 mixing_section => section_vals_get_subs_vals(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%MIXING")
529 CALL section_vals_val_get(mixing_section, "_SECTION_PARAMETERS_", &
530 l_val=do_mixing)
531 IF (do_mixing) THEN
532 CALL section_vals_val_get(mixing_section, "METHOD", &
533 i_val=subspace_env%mixing_method)
534 IF (subspace_env%mixing_method >= direct_mixing_nr) THEN
535 ALLOCATE (subspace_env%mixing_store)
536 CALL mixing_storage_create(subspace_env%mixing_store, mixing_section, &
537 subspace_env%mixing_method, ecut=ecut)
538 END IF
539 END IF
540
541 END SUBROUTINE diag_subspace_env_create
542
543! **************************************************************************************************
544!> \brief releases subspace-rotation environment
545!> \param subspace_env ...
546!> \par History
547!> 09.2009 created [MI]
548!> \author [MI]
549! **************************************************************************************************
550 SUBROUTINE diag_subspace_env_release(subspace_env)
551 TYPE(subspace_env_type), POINTER :: subspace_env
552
553 IF (ASSOCIATED(subspace_env)) THEN
554
555 IF (ASSOCIATED(subspace_env%p_matrix_store)) THEN
556
557 cpassert(.true.)
558 CALL dbcsr_deallocate_matrix_set(subspace_env%p_matrix_store)
559 END IF
560 CALL cp_fm_release(subspace_env%chc_mat)
561 CALL cp_fm_release(subspace_env%c_vec)
562 CALL cp_fm_release(subspace_env%c0)
563
564 IF (ASSOCIATED(subspace_env%mixing_store)) THEN
565 CALL mixing_storage_release(subspace_env%mixing_store)
566 DEALLOCATE (subspace_env%mixing_store)
567 END IF
568
569 DEALLOCATE (subspace_env)
570 END IF
571
572 END SUBROUTINE diag_subspace_env_release
573
574END MODULE qs_scf_types
subroutine, public dbcsr_deallocate_matrix(matrix)
...
DBCSR operations in CP2K.
represent a full matrix distributed on many processors
Definition cp_fm_types.F:15
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
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
parameters that control the outer loop of an SCF iteration
types of preconditioners
subroutine, public destroy_preconditioner(preconditioner_env)
...
module that contains the algorithms to perform an iterative diagonalization by the block-Davidson app...
subroutine, public block_davidson_release(bdav_env)
...
module that contains the definitions of the scf types
subroutine, public mixing_storage_release(mixing_store)
releases a mixing_storage
integer, parameter, public direct_mixing_nr
subroutine, public mixing_storage_create(mixing_store, mixing_section, mixing_method, ecut)
creates a mixing_storage
buffer for the diis of the scf
subroutine, public qs_diis_b_release(diis_buffer)
releases the given diis buffer (see doc/ReferenceCounting.html)
logical function, public fb_env_has_data(fb_env)
Checks if a fb_env object is associated with an actual data content or not.
subroutine, public fb_env_release(fb_env)
releases a given fb_env
subroutine, public fb_env_nullify(fb_env)
nullifies a fb_env object, note that this does not release the original object. This procedure is use...
orbital transformations
Definition qs_ot_types.F:15
subroutine, public qs_ot_destroy(qs_ot_env)
deallocates data
Data types for the ADIIS SCF subspace accelerator.
subroutine, public qs_scf_subspace_buffer_release(buffer)
Release all matrices and scalar storage owned by a subspace buffer.
module that contains the definitions of the scf types
subroutine, public scf_env_did_change(scf_env)
function to be called to inform the scf_env about changes
integer, parameter, public ot_diag_method_nr
subroutine, public krylov_space_create(krylov_space, scf_section)
creates krylov space
subroutine, public diag_subspace_env_create(subspace_env, scf_section, ecut)
creates subspace-rotation environment
integer, parameter, public filter_matrix_diag_method_nr
integer, parameter, public block_davidson_diag_method_nr
integer, parameter, public smeagol_method_nr
integer, parameter, public ot_method_nr
subroutine, public scf_env_create(scf_env)
allocates and initialize an scf_env
integer, parameter, public special_diag_method_nr
integer, parameter, public block_krylov_diag_method_nr
subroutine, public scf_env_release(scf_env)
releases an scf_env (see doc/ReferenceCounting.html)
integer, parameter, public general_diag_method_nr
represent a full matrix
keeps a buffer with the previous values of s,p,k
the object container which allows for the creation of an array of pointers to fb_env
History buffer holding strictly paired P and F[P] SCF states.
wrapper for temporary and cached objects used in the scf iteration