(git:ccc2433)
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,&
17  cp_fm_type
18  USE dbcsr_api, ONLY: dbcsr_p_type
20  USE input_section_types, ONLY: section_vals_type,&
22  USE kinds, ONLY: dp
23  USE pw_types, ONLY: pw_r3d_rs_type
25  local_rho_type
26 #include "./base/base_uses.f90"
27 
28  IMPLICIT NONE
29 
30  PRIVATE
31 
32  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'exstates_types'
33 
34  PUBLIC :: excited_energy_type, exstate_release, exstate_create
36  PUBLIC :: wfn_history_type
37 
38 ! *****************************************************************************
39 
40  TYPE wfn_history_type
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 ! *****************************************************************************
54  TYPE excited_energy_type
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 
80 CONTAINS
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 
223 END 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)
...