(git:374b731)
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-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,&
18 USE dbcsr_api, ONLY: dbcsr_deallocate_matrix,&
19 dbcsr_p_type,&
20 dbcsr_type
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, &
58
59 PUBLIC :: qs_scf_env_type
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! **************************************************************************************************
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
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! **************************************************************************************************
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
122CONTAINS
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
522END 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
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)
...
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 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