(git:5f3bc36)
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-2025 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(local_rho_type), POINTER :: local_rho_set => null()
76 TYPE(local_rho_type), POINTER :: local_rho_set_admm => null()
77 TYPE(wfn_history_type) :: wfn_history = wfn_history_type()
78 TYPE(cp_fm_type), POINTER, DIMENSION(:, :) :: bse_w_matrix_mo => null()
79 REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: gw_eigen
80 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks => null()
81 END TYPE excited_energy_type
82
83CONTAINS
84
85! **************************************************************************************************
86!> \brief ...
87!> \param ex_env ...
88! **************************************************************************************************
89 SUBROUTINE exstate_release(ex_env)
90 TYPE(excited_energy_type), POINTER :: ex_env
91
92 IF (ASSOCIATED(ex_env)) THEN
93
94 CALL cp_fm_release(ex_env%evect)
95 CALL cp_fm_release(ex_env%cpmos)
96 !
97 CALL cp_fm_release(ex_env%bse_w_matrix_MO)
98 !
99 CALL exstate_matrix_release(ex_env)
100 !
101 CALL exstate_potential_release(ex_env)
102 !
103 CALL cp_fm_release(ex_env%wfn_history%evect)
104 CALL cp_fm_release(ex_env%wfn_history%cpmos)
105
106 IF (ALLOCATED(ex_env%gw_eigen)) &
107 DEALLOCATE (ex_env%gw_eigen)
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%local_rho_set)) THEN
180 CALL local_rho_set_release(ex_env%local_rho_set)
181 NULLIFY (ex_env%local_rho_set)
182 END IF
183 IF (ASSOCIATED(ex_env%local_rho_set_admm)) THEN
184 CALL local_rho_set_release(ex_env%local_rho_set_admm)
185 NULLIFY (ex_env%local_rho_set_admm)
186 END IF
187 END IF
188
189 END SUBROUTINE exstate_potential_release
190
191! **************************************************************************************************
192!> \brief Allocates and intitializes exstate_env
193!> \param ex_env the object to create
194!> \param excited_state ...
195!> \param dft_section ...
196!> \par History
197!> 2020.01 created
198!> \author JGH
199! **************************************************************************************************
200 SUBROUTINE exstate_create(ex_env, excited_state, dft_section)
201 TYPE(excited_energy_type), POINTER :: ex_env
202 LOGICAL, INTENT(IN) :: excited_state
203 TYPE(section_vals_type), POINTER :: dft_section
204
205 cpassert(.NOT. ASSOCIATED(ex_env))
206 ALLOCATE (ex_env)
207 ex_env%evalue = 0.0_dp
208 NULLIFY (ex_env%evect)
209 NULLIFY (ex_env%cpmos)
210 NULLIFY (ex_env%bse_w_matrix_MO)
211 IF (excited_state) THEN
212 CALL section_vals_val_get(dft_section, "EXCITED_STATES%STATE", i_val=ex_env%state)
213 CALL section_vals_val_get(dft_section, "EXCITED_STATES%XC_KERNEL_METHOD", &
214 i_val=ex_env%xc_kernel_method)
215 CALL section_vals_val_get(dft_section, "EXCITED_STATES%DEBUG_FORCES", &
216 l_val=ex_env%debug_forces)
217 CALL section_vals_val_get(dft_section, "EXCITED_STATES%EPS_DELTA_RHO", &
218 r_val=ex_env%eps_delta_rho)
219 CALL section_vals_val_get(dft_section, "EXCITED_STATES%DIFF_ORDER", &
220 i_val=ex_env%diff_order)
221 ELSE
222 ex_env%state = 0
223 ex_env%xc_kernel_method = xc_kernel_method_best
224 END IF
225 ex_env%wfn_history%evalue = 0.0_dp
226 ex_env%wfn_history%state = ex_env%state
227 ex_env%wfn_history%xsval = 1.0_dp
228 ex_env%wfn_history%gsval = 1.0_dp
229 ex_env%wfn_history%gsmin = 1.0_dp
230 NULLIFY (ex_env%wfn_history%cpmos)
231 NULLIFY (ex_env%wfn_history%evect)
232
233 END SUBROUTINE exstate_create
234
235END 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.