(git:b6ef100)
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 ! ODA diagnostics for the most recent raw-step line search.
107 REAL(kind=dp) :: oda_lambda = 0.0_dp, oda_energy = 0.0_dp, oda_gradient0 = 0.0_dp, oda_gradient1 = 0.0_dp
108 INTEGER :: oda_evaluations = 0
109 CHARACTER(len=15) :: iter_method = "", oda_status = ""
110 COMPLEX(KIND=dp), DIMENSION(:, :, :), POINTER :: cc_buffer => null()
111 LOGICAL :: print_iter_line = .false., skip_mixing = .false., skip_diis = .false., needs_ortho = .false., &
112 adiis_check_next = .false., adiis_validated = .false., &
113 raw_map_delta_valid = .false.
114 TYPE(mixing_storage_type), POINTER :: mixing_store => null()
115 TYPE(cp_fm_type), DIMENSION(:), POINTER :: scf_work1 => null(), scf_work1_red => null()
116 TYPE(cp_fm_type), POINTER :: scf_work2 => null(), ortho => null(), ortho_m1 => null(), &
117 s_half => null(), s_minus_one => null(), &
118 scf_work2_red => null(), ortho_red => null(), ortho_m1_red => null()
119 TYPE(krylov_space_type), POINTER :: krylov_space => null()
120 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: p_delta => null(), p_mix_new => null()
121 TYPE(dbcsr_type), POINTER :: ortho_dbcsr => null(), buf1_dbcsr => null(), buf2_dbcsr => null()
122 TYPE(preconditioner_p_type), DIMENSION(:), POINTER :: ot_preconditioner => null()
123 TYPE(qs_ot_type), POINTER, DIMENSION(:) :: qs_ot_env => null()
124 TYPE(qs_diis_buffer_type), POINTER :: scf_diis_buffer => null()
125 TYPE(qs_scf_subspace_buffer_type), POINTER :: scf_subspace_buffer => null()
126 TYPE(subspace_env_type), POINTER :: subspace_env => null()
127 TYPE(davidson_type), POINTER, DIMENSION(:) :: block_davidson_env => null()
128 TYPE(fb_env_obj) :: filter_matrix_env = fb_env_obj()
129 TYPE(floating_basis_type) :: floating_basis = floating_basis_type()
130 !> reference molecular orbitals for the maximum overlap method
131 TYPE(cp_fm_type), DIMENSION(:), POINTER :: mom_ref_mo_coeff => null()
132 !> MOM-related work matrices
133 TYPE(cp_fm_type), DIMENSION(:), POINTER :: mom_overlap => null(), mom_s_mo_coeff => null()
134 END TYPE qs_scf_env_type
135
136CONTAINS
137
138! **************************************************************************************************
139!> \brief allocates and initialize an scf_env
140!> \param scf_env the scf env to initialize
141!> \par History
142!> 02.2003 created [fawzi]
143!> \author fawzi
144! **************************************************************************************************
145 SUBROUTINE scf_env_create(scf_env)
146 TYPE(qs_scf_env_type), INTENT(OUT) :: scf_env
147
148 CHARACTER(len=*), PARAMETER :: routinen = 'scf_env_create'
149
150 INTEGER :: handle
151
152 CALL timeset(routinen, handle)
153
154 scf_env%iter_count = 0
155 scf_env%nelectron = 0
156 scf_env%iter_param = 0.0_dp
157 scf_env%iter_delta = 0.0_dp
158 scf_env%step_norm = 0.0_dp
159 scf_env%raw_map_delta = 0.0_dp
160 scf_env%oda_lambda = 0.0_dp
161 scf_env%oda_energy = 0.0_dp
162 scf_env%oda_gradient0 = 0.0_dp
163 scf_env%oda_gradient1 = 0.0_dp
164 scf_env%oda_evaluations = 0
165 scf_env%oda_status = ""
166 scf_env%iter_method = ""
167 scf_env%print_iter_line = .true.
168 scf_env%skip_mixing = .false.
169 scf_env%skip_diis = .false.
170 scf_env%needs_ortho = .false.
171 scf_env%adiis_check_next = .false.
172 scf_env%adiis_validated = .false.
173 scf_env%raw_map_delta_valid = .false.
174 scf_env%method = -1
175 scf_env%mixing_method = -1
176 scf_env%p_mix_alpha = 1.0_dp
177 scf_env%cholesky_method = -1
178 scf_env%outer_scf%iter_count = 0
179 scf_env%sum_zeff_corr = 0.0_dp
180 NULLIFY (scf_env%outer_scf%variables)
181 NULLIFY (scf_env%outer_scf%gradient)
182 NULLIFY (scf_env%outer_scf%energy)
183 NULLIFY (scf_env%outer_scf%count)
184 NULLIFY (scf_env%outer_scf%inv_jacobian)
185 scf_env%outer_scf%deallocate_jacobian = .true.
186 NULLIFY (scf_env%scf_work1)
187 NULLIFY (scf_env%scf_work2)
188 NULLIFY (scf_env%scf_work1_red)
189 NULLIFY (scf_env%scf_work2_red)
190 NULLIFY (scf_env%ortho)
191 NULLIFY (scf_env%ortho_red)
192 NULLIFY (scf_env%ortho_dbcsr)
193 NULLIFY (scf_env%ortho_m1)
194 NULLIFY (scf_env%ortho_m1_red)
195 NULLIFY (scf_env%p_mix_new)
196 NULLIFY (scf_env%ot_preconditioner)
197 NULLIFY (scf_env%qs_ot_env)
198 NULLIFY (scf_env%scf_diis_buffer)
199 NULLIFY (scf_env%scf_subspace_buffer)
200 NULLIFY (scf_env%buf1_dbcsr)
201 NULLIFY (scf_env%buf2_dbcsr)
202 NULLIFY (scf_env%s_half)
203 NULLIFY (scf_env%p_delta)
204 NULLIFY (scf_env%s_minus_one)
205 NULLIFY (scf_env%cc_buffer)
206 NULLIFY (scf_env%mixing_store)
207 NULLIFY (scf_env%krylov_space)
208 NULLIFY (scf_env%subspace_env)
209 NULLIFY (scf_env%block_davidson_env)
210 NULLIFY (scf_env%floating_basis%gradient)
211 CALL fb_env_nullify(scf_env%filter_matrix_env)
212 NULLIFY (scf_env%mom_ref_mo_coeff)
213 NULLIFY (scf_env%mom_overlap)
214 NULLIFY (scf_env%mom_s_mo_coeff)
215
216 CALL timestop(handle)
217
218 END SUBROUTINE scf_env_create
219
220! **************************************************************************************************
221!> \brief function to be called to inform the scf_env about changes
222!> \param scf_env the scf env to inform
223!> \par History
224!> 03.2003 created [fawzi]
225!> \author fawzi
226! **************************************************************************************************
227 SUBROUTINE scf_env_did_change(scf_env)
228 TYPE(qs_scf_env_type), INTENT(INOUT) :: scf_env
229
230 CHARACTER(len=*), PARAMETER :: routinen = 'scf_env_did_change'
231
232 INTEGER :: handle
233
234 CALL timeset(routinen, handle)
235
236 IF (ASSOCIATED(scf_env%p_mix_new)) THEN
237 CALL dbcsr_deallocate_matrix_set(scf_env%p_mix_new)
238 END IF
239 IF (ASSOCIATED(scf_env%p_delta)) THEN
240 CALL dbcsr_deallocate_matrix_set(scf_env%p_delta)
241 END IF
242 IF (ASSOCIATED(scf_env%scf_subspace_buffer)) THEN
243 CALL qs_scf_subspace_buffer_release(scf_env%scf_subspace_buffer)
244 DEALLOCATE (scf_env%scf_subspace_buffer)
245 END IF
246 CALL cp_fm_release(scf_env%mom_ref_mo_coeff)
247
248 CALL timestop(handle)
249
250 END SUBROUTINE scf_env_did_change
251
252! **************************************************************************************************
253!> \brief releases an scf_env (see doc/ReferenceCounting.html)
254!> \param scf_env the environment to release
255!> \par History
256!> 02.2003 created [fawzi]
257!> \author fawzi
258! **************************************************************************************************
259 SUBROUTINE scf_env_release(scf_env)
260
261 TYPE(qs_scf_env_type), INTENT(INOUT) :: scf_env
262
263 CHARACTER(len=*), PARAMETER :: routinen = 'scf_env_release'
264
265 INTEGER :: handle, i
266
267 CALL timeset(routinen, handle)
268
269 CALL cp_fm_release(scf_env%scf_work1)
270 IF (ASSOCIATED(scf_env%scf_work1_red)) THEN
271 CALL cp_fm_release(scf_env%scf_work1_red)
272 DEALLOCATE (scf_env%scf_work1_red)
273 NULLIFY (scf_env%scf_work1_red)
274 END IF
275 IF (ASSOCIATED(scf_env%scf_work2)) THEN
276 CALL cp_fm_release(scf_env%scf_work2)
277 DEALLOCATE (scf_env%scf_work2)
278 NULLIFY (scf_env%scf_work2)
279 END IF
280 IF (ASSOCIATED(scf_env%scf_work2_red)) THEN
281 CALL cp_fm_release(scf_env%scf_work2_red)
282 DEALLOCATE (scf_env%scf_work2_red)
283 NULLIFY (scf_env%scf_work2_red)
284 END IF
285 IF (ASSOCIATED(scf_env%ortho)) THEN
286 CALL cp_fm_release(scf_env%ortho)
287 DEALLOCATE (scf_env%ortho)
288 NULLIFY (scf_env%ortho)
289 END IF
290 IF (ASSOCIATED(scf_env%ortho_red)) THEN
291 CALL cp_fm_release(scf_env%ortho_red)
292 DEALLOCATE (scf_env%ortho_red)
293 NULLIFY (scf_env%ortho_red)
294 END IF
295 IF (ASSOCIATED(scf_env%ortho_m1)) THEN
296 CALL cp_fm_release(scf_env%ortho_m1)
297 DEALLOCATE (scf_env%ortho_m1)
298 NULLIFY (scf_env%ortho_m1)
299 END IF
300 IF (ASSOCIATED(scf_env%ortho_m1_red)) THEN
301 CALL cp_fm_release(scf_env%ortho_m1_red)
302 DEALLOCATE (scf_env%ortho_m1_red)
303 NULLIFY (scf_env%ortho_m1_red)
304 END IF
305 IF (ASSOCIATED(scf_env%ortho_dbcsr)) THEN
306 ! we should not end up here, and give back using the pools
307 CALL dbcsr_deallocate_matrix(scf_env%ortho_dbcsr)
308 END IF
309 IF (ASSOCIATED(scf_env%buf1_dbcsr)) THEN
310 ! we should not end up here, and give back using the pools
311 CALL dbcsr_deallocate_matrix(scf_env%buf1_dbcsr)
312 END IF
313 IF (ASSOCIATED(scf_env%buf2_dbcsr)) THEN
314 ! we should not end up here, and give back using the pools
315 CALL dbcsr_deallocate_matrix(scf_env%buf2_dbcsr)
316 END IF
317 IF (ASSOCIATED(scf_env%s_half)) THEN
318 CALL cp_fm_release(scf_env%s_half)
319 DEALLOCATE (scf_env%s_half)
320 END IF
321 IF (ASSOCIATED(scf_env%s_minus_one)) THEN
322 CALL cp_fm_release(scf_env%s_minus_one)
323 DEALLOCATE (scf_env%s_minus_one)
324 END IF
325 IF (ASSOCIATED(scf_env%p_mix_new)) THEN
326 ! we should not end up here, and give back using the pools
327 CALL dbcsr_deallocate_matrix_set(scf_env%p_mix_new)
328 END IF
329 IF (ASSOCIATED(scf_env%p_delta)) THEN
330 ! we should not end up here, and give back using the pools
331 CALL dbcsr_deallocate_matrix_set(scf_env%p_delta)
332 END IF
333 IF (ASSOCIATED(scf_env%ot_preconditioner)) THEN
334 DO i = 1, SIZE(scf_env%ot_preconditioner)
335 IF (ASSOCIATED(scf_env%ot_preconditioner(i)%preconditioner)) THEN
336 CALL destroy_preconditioner(scf_env%ot_preconditioner(i)%preconditioner)
337 DEALLOCATE (scf_env%ot_preconditioner(i)%preconditioner)
338 END IF
339 END DO
340 DEALLOCATE (scf_env%ot_preconditioner)
341 END IF
342 IF (ASSOCIATED(scf_env%qs_ot_env)) THEN
343 DO i = 1, SIZE(scf_env%qs_ot_env)
344 CALL qs_ot_destroy(scf_env%qs_ot_env(i))
345 END DO
346 DEALLOCATE (scf_env%qs_ot_env)
347 END IF
348 IF (ASSOCIATED(scf_env%scf_diis_buffer)) THEN
349 CALL qs_diis_b_release(scf_env%scf_diis_buffer)
350 DEALLOCATE (scf_env%scf_diis_buffer)
351 END IF
352 IF (ASSOCIATED(scf_env%scf_subspace_buffer)) THEN
353 CALL qs_scf_subspace_buffer_release(scf_env%scf_subspace_buffer)
354 DEALLOCATE (scf_env%scf_subspace_buffer)
355 END IF
356 IF (ASSOCIATED(scf_env%outer_scf%variables)) THEN
357 DEALLOCATE (scf_env%outer_scf%variables)
358 END IF
359 IF (ASSOCIATED(scf_env%outer_scf%count)) THEN
360 DEALLOCATE (scf_env%outer_scf%count)
361 END IF
362 IF (ASSOCIATED(scf_env%outer_scf%gradient)) THEN
363 DEALLOCATE (scf_env%outer_scf%gradient)
364 END IF
365 IF (ASSOCIATED(scf_env%outer_scf%inv_jacobian)) THEN
366 DEALLOCATE (scf_env%outer_scf%inv_jacobian)
367 END IF
368 IF (ASSOCIATED(scf_env%outer_scf%energy)) THEN
369 DEALLOCATE (scf_env%outer_scf%energy)
370 END IF
371 IF (ASSOCIATED(scf_env%cc_buffer)) THEN
372 DEALLOCATE (scf_env%cc_buffer)
373 END IF
374 IF (ASSOCIATED(scf_env%mixing_store)) THEN
375 CALL mixing_storage_release(scf_env%mixing_store)
376 DEALLOCATE (scf_env%mixing_store)
377 END IF
378 IF (ASSOCIATED(scf_env%krylov_space)) THEN
379 CALL krylov_space_release(scf_env%krylov_space)
380 END IF
381 IF (ASSOCIATED(scf_env%subspace_env)) THEN
382 CALL diag_subspace_env_release(scf_env%subspace_env)
383 END IF
384 IF (ASSOCIATED(scf_env%block_davidson_env)) THEN
385 CALL block_davidson_release(scf_env%block_davidson_env)
386 END IF
387 IF (fb_env_has_data(scf_env%filter_matrix_env)) THEN
388 CALL fb_env_release(scf_env%filter_matrix_env)
389 END IF
390 IF (ASSOCIATED(scf_env%floating_basis%gradient)) THEN
391 DEALLOCATE (scf_env%floating_basis%gradient)
392 END IF
393 CALL cp_fm_release(scf_env%mom_ref_mo_coeff)
394 CALL cp_fm_release(scf_env%mom_overlap)
395 CALL cp_fm_release(scf_env%mom_s_mo_coeff)
396
397 CALL timestop(handle)
398
399 END SUBROUTINE scf_env_release
400
401! **************************************************************************************************
402!> \brief creates krylov space
403!> \param krylov_space ...
404!> \param scf_section ...
405!> \par History
406!> 05.2009 created [MI]
407!> \author [MI]
408! **************************************************************************************************
409 SUBROUTINE krylov_space_create(krylov_space, scf_section)
410
411 TYPE(krylov_space_type), POINTER :: krylov_space
412 TYPE(section_vals_type), POINTER :: scf_section
413
414 cpassert(.NOT. ASSOCIATED(krylov_space))
415 ALLOCATE (krylov_space)
416
417 NULLIFY (krylov_space%c_eval, krylov_space%t_eval)
418 NULLIFY (krylov_space%v_mat)
419 NULLIFY (krylov_space%mo_conv, krylov_space%mo_refine)
420 NULLIFY (krylov_space%chc_mat, krylov_space%c_vec)
421 NULLIFY (krylov_space%tmp_mat)
422 NULLIFY (krylov_space%block1_mat, krylov_space%block2_mat)
423 NULLIFY (krylov_space%block3_mat, krylov_space%block4_mat, krylov_space%block5_mat)
424
425 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%MAX_ITER", &
426 i_val=krylov_space%max_iter)
427 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%NKRYLOV", &
428 i_val=krylov_space%nkrylov)
429 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%NBLOCK", &
430 i_val=krylov_space%nblock)
431 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%EPS_KRYLOV", &
432 r_val=krylov_space%eps_conv)
433 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%EPS_STD_DIAG", &
434 r_val=krylov_space%eps_std_diag)
435 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%EPS_ADAPT", &
436 r_val=krylov_space%eps_adapt)
437 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%KRYLOV%CHECK_MOS_CONV", &
438 l_val=krylov_space%always_check_conv)
439
440 END SUBROUTINE krylov_space_create
441
442! **************************************************************************************************
443!> \brief releases krylov space
444!> \param krylov_space ...
445!> \par History
446!> 05.2009 created [MI]
447!> \author [MI]
448! **************************************************************************************************
449 SUBROUTINE krylov_space_release(krylov_space)
450 TYPE(krylov_space_type), POINTER :: krylov_space
451
452 IF (ASSOCIATED(krylov_space)) THEN
453
454 DEALLOCATE (krylov_space%c_eval)
455 DEALLOCATE (krylov_space%t_eval)
456
457 CALL cp_fm_release(krylov_space%v_mat)
458 CALL cp_fm_release(krylov_space%mo_conv)
459 CALL cp_fm_release(krylov_space%mo_refine)
460 CALL cp_fm_release(krylov_space%chc_mat)
461 CALL cp_fm_release(krylov_space%c_vec)
462
463 IF (ASSOCIATED(krylov_space%tmp_mat)) THEN
464 CALL cp_fm_release(krylov_space%tmp_mat)
465 DEALLOCATE (krylov_space%tmp_mat)
466 END IF
467 IF (ASSOCIATED(krylov_space%block1_mat)) THEN
468 CALL cp_fm_release(krylov_space%block1_mat)
469 DEALLOCATE (krylov_space%block1_mat)
470 END IF
471 IF (ASSOCIATED(krylov_space%block2_mat)) THEN
472 CALL cp_fm_release(krylov_space%block2_mat)
473 DEALLOCATE (krylov_space%block2_mat)
474 END IF
475 IF (ASSOCIATED(krylov_space%block3_mat)) THEN
476 CALL cp_fm_release(krylov_space%block3_mat)
477 DEALLOCATE (krylov_space%block3_mat)
478 END IF
479 IF (ASSOCIATED(krylov_space%block4_mat)) THEN
480 CALL cp_fm_release(krylov_space%block4_mat)
481 DEALLOCATE (krylov_space%block4_mat)
482 END IF
483 IF (ASSOCIATED(krylov_space%block5_mat)) THEN
484 CALL cp_fm_release(krylov_space%block5_mat)
485 DEALLOCATE (krylov_space%block5_mat)
486 END IF
487
488 DEALLOCATE (krylov_space)
489
490 NULLIFY (krylov_space)
491 END IF
492
493 END SUBROUTINE krylov_space_release
494
495! **************************************************************************************************
496!> \brief creates subspace-rotation environment
497!> \param subspace_env ...
498!> \param scf_section ...
499!> \param ecut ...
500!> \par History
501!> 09.2009 created [MI]
502!> \author [MI]
503! **************************************************************************************************
504 SUBROUTINE diag_subspace_env_create(subspace_env, scf_section, ecut)
505
506 TYPE(subspace_env_type), POINTER :: subspace_env
507 TYPE(section_vals_type), POINTER :: scf_section
508 REAL(dp), INTENT(IN) :: ecut
509
510 LOGICAL :: do_mixing
511 TYPE(section_vals_type), POINTER :: mixing_section
512
513 cpassert(.NOT. ASSOCIATED(subspace_env))
514 ALLOCATE (subspace_env)
515
516 NULLIFY (subspace_env%p_matrix_store)
517 NULLIFY (subspace_env%p_matrix_mix)
518 NULLIFY (subspace_env%chc_mat)
519 NULLIFY (subspace_env%c_vec)
520 NULLIFY (subspace_env%c0)
521 NULLIFY (subspace_env%mixing_store)
522 NULLIFY (mixing_section)
523
524 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%MAX_ITER", &
525 i_val=subspace_env%max_iter)
526 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%EPS_ENE", &
527 r_val=subspace_env%eps_ene)
528 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%EPS_SKIP_SUB_DIAG", &
529 r_val=subspace_env%eps_diag_sub)
530 CALL section_vals_val_get(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%EPS_ADAPT_SCF", &
531 r_val=subspace_env%eps_adapt)
532 subspace_env%mixing_method = 0
533 do_mixing = .false.
534 mixing_section => section_vals_get_subs_vals(scf_section, "DIAGONALIZATION%DIAG_SUB_SCF%MIXING")
535 CALL section_vals_val_get(mixing_section, "_SECTION_PARAMETERS_", &
536 l_val=do_mixing)
537 IF (do_mixing) THEN
538 CALL section_vals_val_get(mixing_section, "METHOD", &
539 i_val=subspace_env%mixing_method)
540 IF (subspace_env%mixing_method >= direct_mixing_nr) THEN
541 ALLOCATE (subspace_env%mixing_store)
542 CALL mixing_storage_create(subspace_env%mixing_store, mixing_section, &
543 subspace_env%mixing_method, ecut=ecut)
544 END IF
545 END IF
546
547 END SUBROUTINE diag_subspace_env_create
548
549! **************************************************************************************************
550!> \brief releases subspace-rotation environment
551!> \param subspace_env ...
552!> \par History
553!> 09.2009 created [MI]
554!> \author [MI]
555! **************************************************************************************************
556 SUBROUTINE diag_subspace_env_release(subspace_env)
557 TYPE(subspace_env_type), POINTER :: subspace_env
558
559 IF (ASSOCIATED(subspace_env)) THEN
560
561 IF (ASSOCIATED(subspace_env%p_matrix_store)) THEN
562
563 cpassert(.true.)
564 CALL dbcsr_deallocate_matrix_set(subspace_env%p_matrix_store)
565 END IF
566 CALL cp_fm_release(subspace_env%chc_mat)
567 CALL cp_fm_release(subspace_env%c_vec)
568 CALL cp_fm_release(subspace_env%c0)
569
570 IF (ASSOCIATED(subspace_env%mixing_store)) THEN
571 CALL mixing_storage_release(subspace_env%mixing_store)
572 DEALLOCATE (subspace_env%mixing_store)
573 END IF
574
575 DEALLOCATE (subspace_env)
576 END IF
577
578 END SUBROUTINE diag_subspace_env_release
579
580END 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