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