44#include "./base/base_uses.f90"
49 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
51 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_scf_types'
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()
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()
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()
95 TYPE floating_basis_type
96 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: gradient => null()
97 END TYPE floating_basis_type
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
105 REAL(kind=
dp) :: step_norm = -1.0_dp, raw_map_delta = -1.0_dp
107 REAL(kind=
dp) :: adiis_shift = 0.0_dp
108 CHARACTER(len=15) :: iter_method =
""
109 COMPLEX(KIND=dp),
DIMENSION(:, :, :),
POINTER :: cc_buffer => null()
110 LOGICAL :: print_iter_line = .false., skip_mixing = .false., skip_diis = .false., needs_ortho = .false., &
111 adiis_check_next = .false., adiis_validated = .false., &
112 raw_map_delta_valid = .false.
114 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: scf_work1 => null(), scf_work1_red => null()
115 TYPE(
cp_fm_type),
POINTER :: scf_work2 => null(), ortho => null(), ortho_m1 => null(), &
116 s_half => null(), s_minus_one => null(), &
117 scf_work2_red => null(), ortho_red => null(), ortho_m1_red => null()
119 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: p_delta => null(), p_mix_new => null()
120 TYPE(
dbcsr_type),
POINTER :: ortho_dbcsr => null(), buf1_dbcsr => null(), buf2_dbcsr => null()
122 TYPE(
qs_ot_type),
POINTER,
DIMENSION(:) :: qs_ot_env => null()
128 TYPE(floating_basis_type) :: floating_basis = floating_basis_type()
130 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mom_ref_mo_coeff => null()
132 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mom_overlap => null(), mom_s_mo_coeff => null()
147 CHARACTER(len=*),
PARAMETER :: routinen =
'scf_env_create'
151 CALL timeset(routinen, handle)
153 scf_env%iter_count = 0
154 scf_env%nelectron = 0
155 scf_env%iter_param = 0.0_dp
156 scf_env%iter_delta = 0.0_dp
157 scf_env%step_norm = 0.0_dp
158 scf_env%raw_map_delta = 0.0_dp
159 scf_env%iter_method =
""
160 scf_env%print_iter_line = .true.
161 scf_env%skip_mixing = .false.
162 scf_env%skip_diis = .false.
163 scf_env%needs_ortho = .false.
164 scf_env%adiis_check_next = .false.
165 scf_env%adiis_validated = .false.
166 scf_env%raw_map_delta_valid = .false.
167 scf_env%adiis_shift = 0.0_dp
169 scf_env%mixing_method = -1
170 scf_env%p_mix_alpha = 1.0_dp
171 scf_env%cholesky_method = -1
172 scf_env%outer_scf%iter_count = 0
173 scf_env%sum_zeff_corr = 0.0_dp
174 NULLIFY (scf_env%outer_scf%variables)
175 NULLIFY (scf_env%outer_scf%gradient)
176 NULLIFY (scf_env%outer_scf%energy)
177 NULLIFY (scf_env%outer_scf%count)
178 NULLIFY (scf_env%outer_scf%inv_jacobian)
179 scf_env%outer_scf%deallocate_jacobian = .true.
180 NULLIFY (scf_env%scf_work1)
181 NULLIFY (scf_env%scf_work2)
182 NULLIFY (scf_env%scf_work1_red)
183 NULLIFY (scf_env%scf_work2_red)
184 NULLIFY (scf_env%ortho)
185 NULLIFY (scf_env%ortho_red)
186 NULLIFY (scf_env%ortho_dbcsr)
187 NULLIFY (scf_env%ortho_m1)
188 NULLIFY (scf_env%ortho_m1_red)
189 NULLIFY (scf_env%p_mix_new)
190 NULLIFY (scf_env%ot_preconditioner)
191 NULLIFY (scf_env%qs_ot_env)
192 NULLIFY (scf_env%scf_diis_buffer)
193 NULLIFY (scf_env%scf_subspace_buffer)
194 NULLIFY (scf_env%buf1_dbcsr)
195 NULLIFY (scf_env%buf2_dbcsr)
196 NULLIFY (scf_env%s_half)
197 NULLIFY (scf_env%p_delta)
198 NULLIFY (scf_env%s_minus_one)
199 NULLIFY (scf_env%cc_buffer)
200 NULLIFY (scf_env%mixing_store)
201 NULLIFY (scf_env%krylov_space)
202 NULLIFY (scf_env%subspace_env)
203 NULLIFY (scf_env%block_davidson_env)
204 NULLIFY (scf_env%floating_basis%gradient)
206 NULLIFY (scf_env%mom_ref_mo_coeff)
207 NULLIFY (scf_env%mom_overlap)
208 NULLIFY (scf_env%mom_s_mo_coeff)
210 CALL timestop(handle)
224 CHARACTER(len=*),
PARAMETER :: routinen =
'scf_env_did_change'
228 CALL timeset(routinen, handle)
230 IF (
ASSOCIATED(scf_env%p_mix_new))
THEN
233 IF (
ASSOCIATED(scf_env%p_delta))
THEN
236 IF (
ASSOCIATED(scf_env%scf_subspace_buffer))
THEN
238 DEALLOCATE (scf_env%scf_subspace_buffer)
242 CALL timestop(handle)
257 CHARACTER(len=*),
PARAMETER :: routinen =
'scf_env_release'
261 CALL timeset(routinen, handle)
264 IF (
ASSOCIATED(scf_env%scf_work1_red))
THEN
266 DEALLOCATE (scf_env%scf_work1_red)
267 NULLIFY (scf_env%scf_work1_red)
269 IF (
ASSOCIATED(scf_env%scf_work2))
THEN
271 DEALLOCATE (scf_env%scf_work2)
272 NULLIFY (scf_env%scf_work2)
274 IF (
ASSOCIATED(scf_env%scf_work2_red))
THEN
276 DEALLOCATE (scf_env%scf_work2_red)
277 NULLIFY (scf_env%scf_work2_red)
279 IF (
ASSOCIATED(scf_env%ortho))
THEN
281 DEALLOCATE (scf_env%ortho)
282 NULLIFY (scf_env%ortho)
284 IF (
ASSOCIATED(scf_env%ortho_red))
THEN
286 DEALLOCATE (scf_env%ortho_red)
287 NULLIFY (scf_env%ortho_red)
289 IF (
ASSOCIATED(scf_env%ortho_m1))
THEN
291 DEALLOCATE (scf_env%ortho_m1)
292 NULLIFY (scf_env%ortho_m1)
294 IF (
ASSOCIATED(scf_env%ortho_m1_red))
THEN
296 DEALLOCATE (scf_env%ortho_m1_red)
297 NULLIFY (scf_env%ortho_m1_red)
299 IF (
ASSOCIATED(scf_env%ortho_dbcsr))
THEN
303 IF (
ASSOCIATED(scf_env%buf1_dbcsr))
THEN
307 IF (
ASSOCIATED(scf_env%buf2_dbcsr))
THEN
311 IF (
ASSOCIATED(scf_env%s_half))
THEN
313 DEALLOCATE (scf_env%s_half)
315 IF (
ASSOCIATED(scf_env%s_minus_one))
THEN
317 DEALLOCATE (scf_env%s_minus_one)
319 IF (
ASSOCIATED(scf_env%p_mix_new))
THEN
323 IF (
ASSOCIATED(scf_env%p_delta))
THEN
327 IF (
ASSOCIATED(scf_env%ot_preconditioner))
THEN
328 DO i = 1,
SIZE(scf_env%ot_preconditioner)
329 IF (
ASSOCIATED(scf_env%ot_preconditioner(i)%preconditioner))
THEN
331 DEALLOCATE (scf_env%ot_preconditioner(i)%preconditioner)
334 DEALLOCATE (scf_env%ot_preconditioner)
336 IF (
ASSOCIATED(scf_env%qs_ot_env))
THEN
337 DO i = 1,
SIZE(scf_env%qs_ot_env)
340 DEALLOCATE (scf_env%qs_ot_env)
342 IF (
ASSOCIATED(scf_env%scf_diis_buffer))
THEN
344 DEALLOCATE (scf_env%scf_diis_buffer)
346 IF (
ASSOCIATED(scf_env%scf_subspace_buffer))
THEN
348 DEALLOCATE (scf_env%scf_subspace_buffer)
350 IF (
ASSOCIATED(scf_env%outer_scf%variables))
THEN
351 DEALLOCATE (scf_env%outer_scf%variables)
353 IF (
ASSOCIATED(scf_env%outer_scf%count))
THEN
354 DEALLOCATE (scf_env%outer_scf%count)
356 IF (
ASSOCIATED(scf_env%outer_scf%gradient))
THEN
357 DEALLOCATE (scf_env%outer_scf%gradient)
359 IF (
ASSOCIATED(scf_env%outer_scf%inv_jacobian))
THEN
360 DEALLOCATE (scf_env%outer_scf%inv_jacobian)
362 IF (
ASSOCIATED(scf_env%outer_scf%energy))
THEN
363 DEALLOCATE (scf_env%outer_scf%energy)
365 IF (
ASSOCIATED(scf_env%cc_buffer))
THEN
366 DEALLOCATE (scf_env%cc_buffer)
368 IF (
ASSOCIATED(scf_env%mixing_store))
THEN
370 DEALLOCATE (scf_env%mixing_store)
372 IF (
ASSOCIATED(scf_env%krylov_space))
THEN
373 CALL krylov_space_release(scf_env%krylov_space)
375 IF (
ASSOCIATED(scf_env%subspace_env))
THEN
376 CALL diag_subspace_env_release(scf_env%subspace_env)
378 IF (
ASSOCIATED(scf_env%block_davidson_env))
THEN
384 IF (
ASSOCIATED(scf_env%floating_basis%gradient))
THEN
385 DEALLOCATE (scf_env%floating_basis%gradient)
391 CALL timestop(handle)
408 cpassert(.NOT.
ASSOCIATED(krylov_space))
409 ALLOCATE (krylov_space)
411 NULLIFY (krylov_space%c_eval, krylov_space%t_eval)
412 NULLIFY (krylov_space%v_mat)
413 NULLIFY (krylov_space%mo_conv, krylov_space%mo_refine)
414 NULLIFY (krylov_space%chc_mat, krylov_space%c_vec)
415 NULLIFY (krylov_space%tmp_mat)
416 NULLIFY (krylov_space%block1_mat, krylov_space%block2_mat)
417 NULLIFY (krylov_space%block3_mat, krylov_space%block4_mat, krylov_space%block5_mat)
420 i_val=krylov_space%max_iter)
422 i_val=krylov_space%nkrylov)
424 i_val=krylov_space%nblock)
426 r_val=krylov_space%eps_conv)
428 r_val=krylov_space%eps_std_diag)
430 r_val=krylov_space%eps_adapt)
432 l_val=krylov_space%always_check_conv)
443 SUBROUTINE krylov_space_release(krylov_space)
446 IF (
ASSOCIATED(krylov_space))
THEN
448 DEALLOCATE (krylov_space%c_eval)
449 DEALLOCATE (krylov_space%t_eval)
457 IF (
ASSOCIATED(krylov_space%tmp_mat))
THEN
459 DEALLOCATE (krylov_space%tmp_mat)
461 IF (
ASSOCIATED(krylov_space%block1_mat))
THEN
463 DEALLOCATE (krylov_space%block1_mat)
465 IF (
ASSOCIATED(krylov_space%block2_mat))
THEN
467 DEALLOCATE (krylov_space%block2_mat)
469 IF (
ASSOCIATED(krylov_space%block3_mat))
THEN
471 DEALLOCATE (krylov_space%block3_mat)
473 IF (
ASSOCIATED(krylov_space%block4_mat))
THEN
475 DEALLOCATE (krylov_space%block4_mat)
477 IF (
ASSOCIATED(krylov_space%block5_mat))
THEN
479 DEALLOCATE (krylov_space%block5_mat)
482 DEALLOCATE (krylov_space)
484 NULLIFY (krylov_space)
487 END SUBROUTINE krylov_space_release
502 REAL(
dp),
INTENT(IN) :: ecut
507 cpassert(.NOT.
ASSOCIATED(subspace_env))
508 ALLOCATE (subspace_env)
510 NULLIFY (subspace_env%p_matrix_store)
511 NULLIFY (subspace_env%p_matrix_mix)
512 NULLIFY (subspace_env%chc_mat)
513 NULLIFY (subspace_env%c_vec)
514 NULLIFY (subspace_env%c0)
515 NULLIFY (subspace_env%mixing_store)
516 NULLIFY (mixing_section)
519 i_val=subspace_env%max_iter)
521 r_val=subspace_env%eps_ene)
523 r_val=subspace_env%eps_diag_sub)
525 r_val=subspace_env%eps_adapt)
526 subspace_env%mixing_method = 0
533 i_val=subspace_env%mixing_method)
535 ALLOCATE (subspace_env%mixing_store)
537 subspace_env%mixing_method, ecut=ecut)
550 SUBROUTINE diag_subspace_env_release(subspace_env)
553 IF (
ASSOCIATED(subspace_env))
THEN
555 IF (
ASSOCIATED(subspace_env%p_matrix_store))
THEN
564 IF (
ASSOCIATED(subspace_env%mixing_store))
THEN
566 DEALLOCATE (subspace_env%mixing_store)
569 DEALLOCATE (subspace_env)
572 END SUBROUTINE diag_subspace_env_release
subroutine, public dbcsr_deallocate_matrix(matrix)
...
DBCSR operations in CP2K.
represent a full matrix distributed on many processors
Defines the basic variable types.
integer, parameter, public dp
parameters that control the outer loop of an SCF iteration
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...
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
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