Line data Source code
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 Types for excited states potential energies
10 : !> \par History
11 : !> 2020.01 created
12 : !> \author JGH
13 : ! **************************************************************************************************
14 : MODULE exstates_types
15 : USE cp_dbcsr_api, ONLY: dbcsr_p_type
16 : USE cp_dbcsr_operations, ONLY: dbcsr_deallocate_matrix_set
17 : USE cp_fm_types, ONLY: cp_fm_release,&
18 : cp_fm_type
19 : USE input_section_types, ONLY: section_vals_type,&
20 : section_vals_val_get
21 : USE kinds, ONLY: dp
22 : USE pw_types, ONLY: pw_r3d_rs_type
23 : USE qs_local_rho_types, ONLY: local_rho_set_release,&
24 : local_rho_type
25 : #include "./base/base_uses.f90"
26 :
27 : IMPLICIT NONE
28 :
29 : PRIVATE
30 :
31 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'exstates_types'
32 :
33 : PUBLIC :: excited_energy_type, exstate_release, exstate_create
34 : PUBLIC :: exstate_matrix_release, exstate_potential_release
35 : PUBLIC :: wfn_history_type
36 :
37 : ! *****************************************************************************
38 :
39 : TYPE wfn_history_type
40 : INTEGER :: state = -1
41 : REAL(KIND=dp) :: evalue = 0.0_dp
42 : TYPE(cp_fm_type), POINTER, DIMENSION(:) :: evect => NULL()
43 : TYPE(cp_fm_type), POINTER, DIMENSION(:) :: cpmos => NULL()
44 : REAL(KIND=dp) :: xsval = 0.0_dp, gsval = 0.0_dp, gsmin = 0.0_dp
45 : END TYPE wfn_history_type
46 :
47 : ! *****************************************************************************
48 : !> \brief Contains information on the excited states energy
49 : !> \par History
50 : !> 01.2020 created
51 : !> \author JGH
52 : ! *****************************************************************************
53 : TYPE excited_energy_type
54 : INTEGER :: state = -1
55 : REAL(KIND=dp) :: evalue = 0.0_dp
56 : LOGICAL :: debug_forces = .FALSE.
57 : TYPE(cp_fm_type), POINTER, DIMENSION(:) :: evect => NULL()
58 : TYPE(cp_fm_type), POINTER, DIMENSION(:) :: cpmos => NULL()
59 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pe => NULL()
60 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_hz => NULL()
61 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_pe_admm => NULL()
62 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_px1 => NULL()
63 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_px1_admm => NULL()
64 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_px1_asymm => NULL()
65 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_px1_admm_asymm => NULL()
66 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_wx1 => NULL()
67 : TYPE(pw_r3d_rs_type) :: vh_rspace = pw_r3d_rs_type()
68 : TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER :: vxc_rspace => NULL()
69 : TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER :: vtau_rspace => NULL()
70 : TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER :: vadmm_rspace => NULL()
71 : TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER :: vadmm_tau_rspace => NULL()
72 : TYPE(local_rho_type), POINTER :: local_rho_set => NULL()
73 : TYPE(local_rho_type), POINTER :: local_rho_set_admm => NULL()
74 : TYPE(wfn_history_type) :: wfn_history = wfn_history_type()
75 : TYPE(cp_fm_type), POINTER, DIMENSION(:, :) :: bse_w_matrix_MO => NULL()
76 : TYPE(cp_fm_type), POINTER, DIMENSION(:, :) :: bse_a_matrix_MO => NULL()
77 : REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: gw_eigen
78 : TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks => NULL()
79 : END TYPE excited_energy_type
80 :
81 : CONTAINS
82 :
83 : ! **************************************************************************************************
84 : !> \brief ...
85 : !> \param ex_env ...
86 : ! **************************************************************************************************
87 9032 : SUBROUTINE exstate_release(ex_env)
88 : TYPE(excited_energy_type), POINTER :: ex_env
89 :
90 9032 : IF (ASSOCIATED(ex_env)) THEN
91 :
92 9032 : CALL cp_fm_release(ex_env%evect)
93 9032 : CALL cp_fm_release(ex_env%cpmos)
94 : !
95 9032 : CALL cp_fm_release(ex_env%bse_w_matrix_MO)
96 9032 : CALL cp_fm_release(ex_env%bse_a_matrix_MO)
97 : !
98 9032 : CALL exstate_matrix_release(ex_env)
99 : !
100 9032 : CALL exstate_potential_release(ex_env)
101 : !
102 9032 : CALL cp_fm_release(ex_env%wfn_history%evect)
103 9032 : CALL cp_fm_release(ex_env%wfn_history%cpmos)
104 :
105 9032 : IF (ALLOCATED(ex_env%gw_eigen)) THEN
106 4 : DEALLOCATE (ex_env%gw_eigen)
107 : END IF
108 :
109 9032 : DEALLOCATE (ex_env)
110 :
111 : END IF
112 :
113 9032 : END SUBROUTINE exstate_release
114 :
115 : ! **************************************************************************************************
116 : !> \brief ...
117 : !> \param ex_env ...
118 : ! **************************************************************************************************
119 9032 : SUBROUTINE exstate_matrix_release(ex_env)
120 : TYPE(excited_energy_type), POINTER :: ex_env
121 :
122 9032 : IF (ASSOCIATED(ex_env)) THEN
123 9032 : IF (ASSOCIATED(ex_env%matrix_ks)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_ks)
124 9032 : NULLIFY (ex_env%matrix_ks)
125 9032 : IF (ASSOCIATED(ex_env%matrix_pe)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe)
126 9032 : NULLIFY (ex_env%matrix_pe)
127 9032 : IF (ASSOCIATED(ex_env%matrix_hz)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_hz)
128 9032 : NULLIFY (ex_env%matrix_hz)
129 9032 : IF (ASSOCIATED(ex_env%matrix_pe_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe_admm)
130 9032 : NULLIFY (ex_env%matrix_pe_admm)
131 9032 : IF (ASSOCIATED(ex_env%matrix_px1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1)
132 9032 : NULLIFY (ex_env%matrix_px1)
133 9032 : IF (ASSOCIATED(ex_env%matrix_px1_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_admm)
134 9032 : NULLIFY (ex_env%matrix_px1_admm)
135 9032 : IF (ASSOCIATED(ex_env%matrix_px1_asymm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_asymm)
136 9032 : NULLIFY (ex_env%matrix_px1_asymm)
137 9032 : IF (ASSOCIATED(ex_env%matrix_px1_admm_asymm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_admm_asymm)
138 9032 : NULLIFY (ex_env%matrix_px1_admm_asymm)
139 9032 : IF (ASSOCIATED(ex_env%matrix_wx1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_wx1)
140 9032 : NULLIFY (ex_env%matrix_wx1)
141 : END IF
142 :
143 9032 : END SUBROUTINE exstate_matrix_release
144 :
145 : ! **************************************************************************************************
146 : !> \brief ...
147 : !> \param ex_env ...
148 : ! **************************************************************************************************
149 9674 : SUBROUTINE exstate_potential_release(ex_env)
150 : TYPE(excited_energy_type), POINTER :: ex_env
151 :
152 : INTEGER :: iab
153 :
154 9674 : IF (ASSOCIATED(ex_env)) THEN
155 9674 : IF (ASSOCIATED(ex_env%vh_rspace%pw_grid)) THEN
156 642 : CALL ex_env%vh_rspace%release()
157 : END IF
158 9674 : IF (ASSOCIATED(ex_env%vxc_rspace)) THEN
159 1392 : DO iab = 1, SIZE(ex_env%vxc_rspace)
160 1392 : CALL ex_env%vxc_rspace(iab)%release()
161 : END DO
162 642 : DEALLOCATE (ex_env%vxc_rspace)
163 642 : NULLIFY (ex_env%vxc_rspace)
164 : END IF
165 9674 : IF (ASSOCIATED(ex_env%vtau_rspace)) THEN
166 0 : DO iab = 1, SIZE(ex_env%vtau_rspace)
167 0 : CALL ex_env%vtau_rspace(iab)%release()
168 : END DO
169 0 : DEALLOCATE (ex_env%vtau_rspace)
170 0 : NULLIFY (ex_env%vtau_rspace)
171 : END IF
172 9674 : IF (ASSOCIATED(ex_env%vadmm_rspace)) THEN
173 180 : DO iab = 1, SIZE(ex_env%vadmm_rspace)
174 180 : CALL ex_env%vadmm_rspace(iab)%release()
175 : END DO
176 86 : DEALLOCATE (ex_env%vadmm_rspace)
177 86 : NULLIFY (ex_env%vadmm_rspace)
178 : END IF
179 9674 : IF (ASSOCIATED(ex_env%vadmm_tau_rspace)) THEN
180 0 : DO iab = 1, SIZE(ex_env%vadmm_tau_rspace)
181 0 : CALL ex_env%vadmm_tau_rspace(iab)%release()
182 : END DO
183 0 : DEALLOCATE (ex_env%vadmm_tau_rspace)
184 0 : NULLIFY (ex_env%vadmm_tau_rspace)
185 : END IF
186 9674 : IF (ASSOCIATED(ex_env%local_rho_set)) THEN
187 156 : CALL local_rho_set_release(ex_env%local_rho_set)
188 156 : NULLIFY (ex_env%local_rho_set)
189 : END IF
190 9674 : IF (ASSOCIATED(ex_env%local_rho_set_admm)) THEN
191 24 : CALL local_rho_set_release(ex_env%local_rho_set_admm)
192 24 : NULLIFY (ex_env%local_rho_set_admm)
193 : END IF
194 : END IF
195 :
196 9674 : END SUBROUTINE exstate_potential_release
197 :
198 : ! **************************************************************************************************
199 : !> \brief Allocates and intitializes exstate_env
200 : !> \param ex_env the object to create
201 : !> \param excited_state ...
202 : !> \param dft_section ...
203 : !> \par History
204 : !> 2020.01 created
205 : !> \author JGH
206 : ! **************************************************************************************************
207 9032 : SUBROUTINE exstate_create(ex_env, excited_state, dft_section)
208 : TYPE(excited_energy_type), POINTER :: ex_env
209 : LOGICAL, INTENT(IN) :: excited_state
210 : TYPE(section_vals_type), POINTER :: dft_section
211 :
212 9032 : CPASSERT(.NOT. ASSOCIATED(ex_env))
213 9032 : ALLOCATE (ex_env)
214 : ex_env%evalue = 0.0_dp
215 : NULLIFY (ex_env%evect)
216 : NULLIFY (ex_env%cpmos)
217 : NULLIFY (ex_env%bse_w_matrix_MO)
218 : NULLIFY (ex_env%bse_a_matrix_MO)
219 9032 : IF (excited_state) THEN
220 440 : CALL section_vals_val_get(dft_section, "EXCITED_STATES%STATE", i_val=ex_env%state)
221 : CALL section_vals_val_get(dft_section, "EXCITED_STATES%DEBUG_FORCES", &
222 440 : l_val=ex_env%debug_forces)
223 : ELSE
224 8592 : ex_env%state = 0
225 : END IF
226 9032 : ex_env%wfn_history%evalue = 0.0_dp
227 9032 : ex_env%wfn_history%state = ex_env%state
228 9032 : ex_env%wfn_history%xsval = 1.0_dp
229 9032 : ex_env%wfn_history%gsval = 1.0_dp
230 9032 : ex_env%wfn_history%gsmin = 1.0_dp
231 9032 : NULLIFY (ex_env%wfn_history%cpmos)
232 9032 : NULLIFY (ex_env%wfn_history%evect)
233 :
234 9032 : END SUBROUTINE exstate_create
235 :
236 0 : END MODULE exstates_types
|