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