(git:744416f)
Loading...
Searching...
No Matches
exstates_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 Types for excited states potential energies
10!> \par History
11!> 2020.01 created
12!> \author JGH
13! **************************************************************************************************
15 USE cp_dbcsr_api, ONLY: dbcsr_p_type
17 USE cp_fm_types, ONLY: cp_fm_release,&
21 USE kinds, ONLY: dp
22 USE pw_types, ONLY: pw_r3d_rs_type
25#include "./base/base_uses.f90"
26
27 IMPLICIT NONE
28
29 PRIVATE
30
31 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'exstates_types'
32
35 PUBLIC :: wfn_history_type
36
37! *****************************************************************************
38
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! *****************************************************************************
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
81CONTAINS
82
83! **************************************************************************************************
84!> \brief ...
85!> \param ex_env ...
86! **************************************************************************************************
87 SUBROUTINE exstate_release(ex_env)
88 TYPE(excited_energy_type), POINTER :: ex_env
89
90 IF (ASSOCIATED(ex_env)) THEN
91
92 CALL cp_fm_release(ex_env%evect)
93 CALL cp_fm_release(ex_env%cpmos)
94 !
95 CALL cp_fm_release(ex_env%bse_w_matrix_MO)
96 CALL cp_fm_release(ex_env%bse_a_matrix_MO)
97 !
98 CALL exstate_matrix_release(ex_env)
99 !
100 CALL exstate_potential_release(ex_env)
101 !
102 CALL cp_fm_release(ex_env%wfn_history%evect)
103 CALL cp_fm_release(ex_env%wfn_history%cpmos)
104
105 IF (ALLOCATED(ex_env%gw_eigen)) THEN
106 DEALLOCATE (ex_env%gw_eigen)
107 END IF
108
109 DEALLOCATE (ex_env)
110
111 END IF
112
113 END SUBROUTINE exstate_release
114
115! **************************************************************************************************
116!> \brief ...
117!> \param ex_env ...
118! **************************************************************************************************
119 SUBROUTINE exstate_matrix_release(ex_env)
120 TYPE(excited_energy_type), POINTER :: ex_env
121
122 IF (ASSOCIATED(ex_env)) THEN
123 IF (ASSOCIATED(ex_env%matrix_ks)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_ks)
124 NULLIFY (ex_env%matrix_ks)
125 IF (ASSOCIATED(ex_env%matrix_pe)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe)
126 NULLIFY (ex_env%matrix_pe)
127 IF (ASSOCIATED(ex_env%matrix_hz)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_hz)
128 NULLIFY (ex_env%matrix_hz)
129 IF (ASSOCIATED(ex_env%matrix_pe_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe_admm)
130 NULLIFY (ex_env%matrix_pe_admm)
131 IF (ASSOCIATED(ex_env%matrix_px1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1)
132 NULLIFY (ex_env%matrix_px1)
133 IF (ASSOCIATED(ex_env%matrix_px1_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_admm)
134 NULLIFY (ex_env%matrix_px1_admm)
135 IF (ASSOCIATED(ex_env%matrix_px1_asymm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_asymm)
136 NULLIFY (ex_env%matrix_px1_asymm)
137 IF (ASSOCIATED(ex_env%matrix_px1_admm_asymm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_admm_asymm)
138 NULLIFY (ex_env%matrix_px1_admm_asymm)
139 IF (ASSOCIATED(ex_env%matrix_wx1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_wx1)
140 NULLIFY (ex_env%matrix_wx1)
141 END IF
142
143 END SUBROUTINE exstate_matrix_release
144
145! **************************************************************************************************
146!> \brief ...
147!> \param ex_env ...
148! **************************************************************************************************
149 SUBROUTINE exstate_potential_release(ex_env)
150 TYPE(excited_energy_type), POINTER :: ex_env
151
152 INTEGER :: iab
153
154 IF (ASSOCIATED(ex_env)) THEN
155 IF (ASSOCIATED(ex_env%vh_rspace%pw_grid)) THEN
156 CALL ex_env%vh_rspace%release()
157 END IF
158 IF (ASSOCIATED(ex_env%vxc_rspace)) THEN
159 DO iab = 1, SIZE(ex_env%vxc_rspace)
160 CALL ex_env%vxc_rspace(iab)%release()
161 END DO
162 DEALLOCATE (ex_env%vxc_rspace)
163 NULLIFY (ex_env%vxc_rspace)
164 END IF
165 IF (ASSOCIATED(ex_env%vtau_rspace)) THEN
166 DO iab = 1, SIZE(ex_env%vtau_rspace)
167 CALL ex_env%vtau_rspace(iab)%release()
168 END DO
169 DEALLOCATE (ex_env%vtau_rspace)
170 NULLIFY (ex_env%vtau_rspace)
171 END IF
172 IF (ASSOCIATED(ex_env%vadmm_rspace)) THEN
173 DO iab = 1, SIZE(ex_env%vadmm_rspace)
174 CALL ex_env%vadmm_rspace(iab)%release()
175 END DO
176 DEALLOCATE (ex_env%vadmm_rspace)
177 NULLIFY (ex_env%vadmm_rspace)
178 END IF
179 IF (ASSOCIATED(ex_env%vadmm_tau_rspace)) THEN
180 DO iab = 1, SIZE(ex_env%vadmm_tau_rspace)
181 CALL ex_env%vadmm_tau_rspace(iab)%release()
182 END DO
183 DEALLOCATE (ex_env%vadmm_tau_rspace)
184 NULLIFY (ex_env%vadmm_tau_rspace)
185 END IF
186 IF (ASSOCIATED(ex_env%local_rho_set)) THEN
187 CALL local_rho_set_release(ex_env%local_rho_set)
188 NULLIFY (ex_env%local_rho_set)
189 END IF
190 IF (ASSOCIATED(ex_env%local_rho_set_admm)) THEN
191 CALL local_rho_set_release(ex_env%local_rho_set_admm)
192 NULLIFY (ex_env%local_rho_set_admm)
193 END IF
194 END IF
195
196 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 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 cpassert(.NOT. ASSOCIATED(ex_env))
213 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 IF (excited_state) THEN
220 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 l_val=ex_env%debug_forces)
223 ELSE
224 ex_env%state = 0
225 END IF
226 ex_env%wfn_history%evalue = 0.0_dp
227 ex_env%wfn_history%state = ex_env%state
228 ex_env%wfn_history%xsval = 1.0_dp
229 ex_env%wfn_history%gsval = 1.0_dp
230 ex_env%wfn_history%gsmin = 1.0_dp
231 NULLIFY (ex_env%wfn_history%cpmos)
232 NULLIFY (ex_env%wfn_history%evect)
233
234 END SUBROUTINE exstate_create
235
236END MODULE exstates_types
DBCSR operations in CP2K.
represent a full matrix distributed on many processors
Definition cp_fm_types.F:15
Types for excited states potential energies.
subroutine, public exstate_create(ex_env, excited_state, dft_section)
Allocates and intitializes exstate_env.
subroutine, public exstate_release(ex_env)
...
subroutine, public exstate_matrix_release(ex_env)
...
subroutine, public exstate_potential_release(ex_env)
...
objects that represent the structure of input sections and the data contained in an input section
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
subroutine, public local_rho_set_release(local_rho_set)
...
represent a full matrix
Contains information on the excited states energy.