(git:b6ef100)
Loading...
Searching...
No Matches
qs_scf_subspace_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 Data types for the ADIIS SCF subspace accelerator.
10! **************************************************************************************************
12
15 USE kinds, ONLY: dp
16#include "./base/base_uses.f90"
17
18 IMPLICIT NONE
19
20 PRIVATE
21
22 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_scf_subspace_types'
23
28
29! **************************************************************************************************
30!> \brief History buffer holding strictly paired P and F[P] SCF states.
31!>
32!> Matrix history is stored in the real-space cell representation. This is
33!> the representation of the density that actually built the current KS
34!> matrix, and therefore applies to both Gamma-point and k-point runs.
35! **************************************************************************************************
37 INTEGER :: nbuffer = 0
38 INTEGER :: ncall = 0
39 INTEGER :: nstored = 0
40 INTEGER :: last_status = 0
41 LOGICAL :: last_restart = .false.
42 LOGICAL :: use_combined_fock = .false.
43 LOGICAL :: diis_state_valid = .false.
44 REAL(kind=dp) :: last_objective = 0.0_dp
45 ! Total coefficient weight assigned to all entries older than the current raw Fock.
46 REAL(kind=dp) :: last_old_fock_weight = 0.0_dp
47 REAL(kind=dp) :: diis_weight = 0.0_dp
48 TYPE(dbcsr_p_type), DIMENSION(:, :, :), POINTER :: density => null()
49 TYPE(dbcsr_p_type), DIMENSION(:, :, :), POINTER :: fock => null()
50 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: combined_fock => null()
51 INTEGER, DIMENSION(:), ALLOCATABLE :: generation
52 REAL(kind=dp), DIMENSION(:, :), ALLOCATABLE :: pf_metric
53 REAL(kind=dp), DIMENSION(:), ALLOCATABLE :: coefficients, state_energy
55
56CONTAINS
57
58! **************************************************************************************************
59!> \brief Initialize SCF subspace history metadata.
60!> \param buffer Buffer to initialize.
61!> \param nbuffer Maximum number of paired history entries.
62! **************************************************************************************************
63 PURE SUBROUTINE qs_scf_subspace_buffer_create(buffer, nbuffer)
64
65 TYPE(qs_scf_subspace_buffer_type), INTENT(OUT) :: buffer
66 INTEGER, INTENT(IN) :: nbuffer
67
68 buffer%nbuffer = max(nbuffer, 0)
69 buffer%ncall = 0
70 buffer%nstored = 0
71 buffer%last_status = 0
72 buffer%last_restart = .false.
73 buffer%use_combined_fock = .false.
74 buffer%diis_state_valid = .false.
75 buffer%last_objective = 0.0_dp
76 buffer%last_old_fock_weight = 0.0_dp
77 buffer%diis_weight = 0.0_dp
78 NULLIFY (buffer%density, buffer%fock, buffer%combined_fock)
79
81
82! **************************************************************************************************
83!> \brief Clear logical history while retaining allocated matrix storage.
84!> \param buffer Buffer to clear.
85! **************************************************************************************************
86 PURE SUBROUTINE qs_scf_subspace_buffer_clear(buffer)
87
88 TYPE(qs_scf_subspace_buffer_type), INTENT(INOUT) :: buffer
89
90 buffer%ncall = 0
91 buffer%nstored = 0
92 buffer%last_status = 0
93 buffer%last_restart = .false.
94 buffer%use_combined_fock = .false.
95 buffer%diis_state_valid = .false.
96 buffer%last_objective = 0.0_dp
97 buffer%last_old_fock_weight = 0.0_dp
98 buffer%diis_weight = 0.0_dp
99 IF (ALLOCATED(buffer%generation)) buffer%generation = 0
100 IF (ALLOCATED(buffer%pf_metric)) buffer%pf_metric = 0.0_dp
101 IF (ALLOCATED(buffer%coefficients)) buffer%coefficients = 0.0_dp
102 IF (ALLOCATED(buffer%state_energy)) buffer%state_energy = huge(1.0_dp)
103
104 END SUBROUTINE qs_scf_subspace_buffer_clear
105
106! **************************************************************************************************
107!> \brief Release all matrices and scalar storage owned by a subspace buffer.
108!> \param buffer Buffer to release.
109! **************************************************************************************************
111
112 TYPE(qs_scf_subspace_buffer_type), INTENT(INOUT) :: buffer
113
114 INTEGER :: icell, islot, ispin
115
116 IF (ASSOCIATED(buffer%density)) THEN
117 DO icell = 1, SIZE(buffer%density, 3)
118 DO ispin = 1, SIZE(buffer%density, 2)
119 DO islot = 1, SIZE(buffer%density, 1)
120 IF (ASSOCIATED(buffer%density(islot, ispin, icell)%matrix)) THEN
121 CALL dbcsr_deallocate_matrix(buffer%density(islot, ispin, icell)%matrix)
122 END IF
123 END DO
124 END DO
125 END DO
126 DEALLOCATE (buffer%density)
127 END IF
128
129 IF (ASSOCIATED(buffer%fock)) THEN
130 DO icell = 1, SIZE(buffer%fock, 3)
131 DO ispin = 1, SIZE(buffer%fock, 2)
132 DO islot = 1, SIZE(buffer%fock, 1)
133 IF (ASSOCIATED(buffer%fock(islot, ispin, icell)%matrix)) THEN
134 CALL dbcsr_deallocate_matrix(buffer%fock(islot, ispin, icell)%matrix)
135 END IF
136 END DO
137 END DO
138 END DO
139 DEALLOCATE (buffer%fock)
140 END IF
141
142 IF (ASSOCIATED(buffer%combined_fock)) THEN
143 DO icell = 1, SIZE(buffer%combined_fock, 2)
144 DO ispin = 1, SIZE(buffer%combined_fock, 1)
145 IF (ASSOCIATED(buffer%combined_fock(ispin, icell)%matrix)) THEN
146 CALL dbcsr_deallocate_matrix(buffer%combined_fock(ispin, icell)%matrix)
147 END IF
148 END DO
149 END DO
150 DEALLOCATE (buffer%combined_fock)
151 END IF
152
153 IF (ALLOCATED(buffer%generation)) DEALLOCATE (buffer%generation)
154 IF (ALLOCATED(buffer%pf_metric)) DEALLOCATE (buffer%pf_metric)
155 IF (ALLOCATED(buffer%coefficients)) DEALLOCATE (buffer%coefficients)
156 IF (ALLOCATED(buffer%state_energy)) DEALLOCATE (buffer%state_energy)
157 CALL qs_scf_subspace_buffer_create(buffer, 0)
158
159 END SUBROUTINE qs_scf_subspace_buffer_release
160
161END MODULE qs_scf_subspace_types
subroutine, public dbcsr_deallocate_matrix(matrix)
...
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Data types for the ADIIS SCF subspace accelerator.
pure subroutine, public qs_scf_subspace_buffer_create(buffer, nbuffer)
Initialize SCF subspace history metadata.
subroutine, public qs_scf_subspace_buffer_release(buffer)
Release all matrices and scalar storage owned by a subspace buffer.
pure subroutine, public qs_scf_subspace_buffer_clear(buffer)
Clear logical history while retaining allocated matrix storage.
History buffer holding strictly paired P and F[P] SCF states.