(git:374b731)
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-2024 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! **************************************************************************************************
16 USE cp_fm_types, ONLY: cp_fm_release,&
18 USE dbcsr_api, ONLY: dbcsr_p_type
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
42 REAL(kind=dp) :: evalue
43 TYPE(cp_fm_type), POINTER, DIMENSION(:) :: evect => null()
44 TYPE(cp_fm_type), POINTER, DIMENSION(:) :: cpmos => null()
45 REAL(kind=dp) :: xsval, gsval, gsmin
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
56 REAL(kind=dp) :: evalue
57 INTEGER :: xc_kernel_method
58 REAL(kind=dp) :: eps_delta_rho = 1.e-02_dp
59 INTEGER :: diff_order
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
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
78 END TYPE excited_energy_type
79
80CONTAINS
81
82! **************************************************************************************************
83!> \brief ...
84!> \param ex_env ...
85! **************************************************************************************************
86 SUBROUTINE exstate_release(ex_env)
87 TYPE(excited_energy_type), POINTER :: ex_env
88
89 IF (ASSOCIATED(ex_env)) THEN
90
91 CALL cp_fm_release(ex_env%evect)
92 CALL cp_fm_release(ex_env%cpmos)
93 !
94 CALL exstate_matrix_release(ex_env)
95 !
96 CALL exstate_potential_release(ex_env)
97 !
98 CALL cp_fm_release(ex_env%wfn_history%evect)
99 CALL cp_fm_release(ex_env%wfn_history%cpmos)
100
101 DEALLOCATE (ex_env)
102
103 END IF
104
105 END SUBROUTINE exstate_release
106
107! **************************************************************************************************
108!> \brief ...
109!> \param ex_env ...
110! **************************************************************************************************
111 SUBROUTINE exstate_matrix_release(ex_env)
112 TYPE(excited_energy_type), POINTER :: ex_env
113
114 IF (ASSOCIATED(ex_env)) THEN
115 IF (ASSOCIATED(ex_env%matrix_pe)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe)
116 NULLIFY (ex_env%matrix_pe)
117 IF (ASSOCIATED(ex_env%matrix_hz)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_hz)
118 NULLIFY (ex_env%matrix_hz)
119 IF (ASSOCIATED(ex_env%matrix_pe_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_pe_admm)
120 NULLIFY (ex_env%matrix_pe_admm)
121 IF (ASSOCIATED(ex_env%matrix_px1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1)
122 NULLIFY (ex_env%matrix_px1)
123 IF (ASSOCIATED(ex_env%matrix_px1_admm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_admm)
124 NULLIFY (ex_env%matrix_px1_admm)
125 IF (ASSOCIATED(ex_env%matrix_px1_asymm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_asymm)
126 NULLIFY (ex_env%matrix_px1_asymm)
127 IF (ASSOCIATED(ex_env%matrix_px1_admm_asymm)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_px1_admm_asymm)
128 NULLIFY (ex_env%matrix_px1_admm_asymm)
129 IF (ASSOCIATED(ex_env%matrix_wx1)) CALL dbcsr_deallocate_matrix_set(ex_env%matrix_wx1)
130 NULLIFY (ex_env%matrix_wx1)
131 END IF
132
133 END SUBROUTINE exstate_matrix_release
134
135! **************************************************************************************************
136!> \brief ...
137!> \param ex_env ...
138! **************************************************************************************************
139 SUBROUTINE exstate_potential_release(ex_env)
140 TYPE(excited_energy_type), POINTER :: ex_env
141
142 INTEGER :: iab
143
144 IF (ASSOCIATED(ex_env)) THEN
145 IF (ASSOCIATED(ex_env%vh_rspace%pw_grid)) THEN
146 CALL ex_env%vh_rspace%release()
147 END IF
148 IF (ASSOCIATED(ex_env%vxc_rspace)) THEN
149 DO iab = 1, SIZE(ex_env%vxc_rspace)
150 CALL ex_env%vxc_rspace(iab)%release()
151 END DO
152 DEALLOCATE (ex_env%vxc_rspace)
153 NULLIFY (ex_env%vxc_rspace)
154 END IF
155 IF (ASSOCIATED(ex_env%vtau_rspace)) THEN
156 DO iab = 1, SIZE(ex_env%vtau_rspace)
157 CALL ex_env%vtau_rspace(iab)%release()
158 END DO
159 DEALLOCATE (ex_env%vtau_rspace)
160 NULLIFY (ex_env%vtau_rspace)
161 END IF
162 IF (ASSOCIATED(ex_env%vadmm_rspace)) THEN
163 DO iab = 1, SIZE(ex_env%vadmm_rspace)
164 CALL ex_env%vadmm_rspace(iab)%release()
165 END DO
166 DEALLOCATE (ex_env%vadmm_rspace)
167 NULLIFY (ex_env%vadmm_rspace)
168 END IF
169 IF (ASSOCIATED(ex_env%local_rho_set)) THEN
170 CALL local_rho_set_release(ex_env%local_rho_set)
171 NULLIFY (ex_env%local_rho_set)
172 END IF
173 IF (ASSOCIATED(ex_env%local_rho_set_admm)) THEN
174 CALL local_rho_set_release(ex_env%local_rho_set_admm)
175 NULLIFY (ex_env%local_rho_set_admm)
176 END IF
177 END IF
178
179 END SUBROUTINE exstate_potential_release
180
181! **************************************************************************************************
182!> \brief Allocates and intitializes exstate_env
183!> \param ex_env the object to create
184!> \param excited_state ...
185!> \param dft_section ...
186!> \par History
187!> 2020.01 created
188!> \author JGH
189! **************************************************************************************************
190 SUBROUTINE exstate_create(ex_env, excited_state, dft_section)
191 TYPE(excited_energy_type), POINTER :: ex_env
192 LOGICAL, INTENT(IN) :: excited_state
193 TYPE(section_vals_type), POINTER :: dft_section
194
195 cpassert(.NOT. ASSOCIATED(ex_env))
196 ALLOCATE (ex_env)
197 ex_env%evalue = 0.0_dp
198 NULLIFY (ex_env%evect)
199 IF (excited_state) THEN
200 CALL section_vals_val_get(dft_section, "EXCITED_STATES%STATE", i_val=ex_env%state)
201 CALL section_vals_val_get(dft_section, "EXCITED_STATES%XC_KERNEL_METHOD", &
202 i_val=ex_env%xc_kernel_method)
203 CALL section_vals_val_get(dft_section, "EXCITED_STATES%DEBUG_FORCES", &
204 l_val=ex_env%debug_forces)
205 CALL section_vals_val_get(dft_section, "EXCITED_STATES%EPS_DELTA_RHO", &
206 r_val=ex_env%eps_delta_rho)
207 CALL section_vals_val_get(dft_section, "EXCITED_STATES%DIFF_ORDER", &
208 i_val=ex_env%diff_order)
209 ELSE
210 ex_env%state = 0
211 ex_env%xc_kernel_method = xc_kernel_method_best
212 END IF
213 ex_env%wfn_history%evalue = 0.0_dp
214 ex_env%wfn_history%state = ex_env%state
215 ex_env%wfn_history%xsval = 1.0_dp
216 ex_env%wfn_history%gsval = 1.0_dp
217 ex_env%wfn_history%gsmin = 1.0_dp
218 NULLIFY (ex_env%wfn_history%cpmos)
219 NULLIFY (ex_env%wfn_history%evect)
220
221 END SUBROUTINE exstate_create
222
223END 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.