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