Line data Source code
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 : !> \par History
10 : !> JGH (11.08.2002) exchange and correlation energy now in exc
11 : !> TL (25.05.2004) qmmm energy
12 : !> \author MK (13.06.2002)
13 : ! **************************************************************************************************
14 : MODULE qs_energy_types
15 :
16 : USE kinds, ONLY: dp
17 : #include "./base/base_uses.f90"
18 :
19 : IMPLICIT NONE
20 :
21 : PRIVATE
22 :
23 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_energy_types'
24 :
25 : TYPE qs_energy_type
26 : REAL(KIND=dp) :: core = 0.0_dp, &
27 : core_overlap = 0.0_dp, &
28 : core_overlap0 = 0.0_dp, &
29 : core_self = 0.0_dp, &
30 : core_cneo = 0.0_dp, & ! quantum nuclear kinetic + v_core
31 : repulsive = 0.0_dp, &
32 : dispersion = 0.0_dp, &
33 : dispersion_sc = 0.0_dp, &
34 : gcp = 0.0_dp, &
35 : srb = 0.0_dp, &
36 : eeq = 0.0_dp, &
37 : el_stat = 0.0_dp, &
38 : ex = 0.0_dp, &
39 : exc = 0.0_dp, &
40 : exc_aux_fit = 0.0_dp, &
41 : exc1 = 0.0_dp, &
42 : exc1_aux_fit = 0.0_dp, & !the GAPW contribution to ADMM
43 : hartree = 0.0_dp, &
44 : hartree_1c = 0.0_dp, &
45 : e_hartree = 0.0_dp, & ! contains the hartree energy of electrons only
46 : ! computed if requested
47 : image_charge = 0.0_dp, &
48 : qmmm_el = 0.0_dp, &
49 : qmmm_nu = 0.0_dp, &
50 : mulliken = 0.0_dp, &
51 : cdft = 0.0_dp, &
52 : ee = 0.0_dp, &
53 : ee_core = 0.0_dp, &
54 : efield = 0.0_dp, &
55 : efield_core = 0.0_dp, &
56 : s2_restraint = 0.0_dp, &
57 : dft_plus_u = 0.0_dp, & ! DFT+U energy contribution
58 : sccs_hartree = 0.0_dp, & ! SCCS Hartree energy of solute + solvent
59 : sccs_pol = 0.0_dp, & ! SCCS polarisation energy
60 : sccs_cav = 0.0_dp, & ! SCCS cavitation energy
61 : sccs_dis = 0.0_dp, & ! SCCS dispersion free energy
62 : sccs_rep = 0.0_dp, & ! SCCS repulsion free energy
63 : sccs_sol = 0.0_dp, & ! SCCS solvation free energy
64 : ktS = 0.0_dp, & ! electronic entropic contribution
65 : efermi = 0.0_dp, & ! Fermi energy
66 : band = 0.0_dp, & ! Band energy (Tr PH)
67 : dftb3 = 0.0_dp, & ! DFTB 3rd order correction
68 : nonscf_correction = 0.0_dp, & ! e.g. Harris correction
69 : mp2 = 0.0_dp, &
70 : ! single excitations correction for all
71 : ! non-scf orbital(density) corrections
72 : ! for example, almo delocalization corrction
73 : singles_corr = 0.0_dp, &
74 : ! excitation energy
75 : excited_state = 0.0_dp, &
76 : total = 0.0_dp, &
77 : tot_old = 0.0_dp, &
78 : kinetic = 0.0_dp, & !total kinetic energy [rk]
79 : s_square = 0.0_dp, &
80 : surf_dipole = 0.0_dp, &
81 : embed_corr = 0.0_dp, & ! correction for embedding potential
82 : xtb_xb_inter = 0.0_dp, & ! correction for halogen bonding within GFN1-xTB
83 : xtb_nonbonded = 0.0_dp ! correction for nonbonded interactions within GFN1-xTB
84 : REAL(KIND=dp), DIMENSION(:), POINTER :: ddapc_restraint => NULL()
85 : END TYPE qs_energy_type
86 :
87 : ! Public data types
88 :
89 : PUBLIC :: qs_energy_type
90 :
91 : ! Public subroutines
92 :
93 : PUBLIC :: allocate_qs_energy, &
94 : deallocate_qs_energy, &
95 : init_qs_energy
96 :
97 : CONTAINS
98 :
99 : ! **************************************************************************************************
100 : !> \brief Allocate and/or initialise a Quickstep energy data structure.
101 : !> \param qs_energy ...
102 : !> \date 13.06.2002
103 : !> \author MK
104 : !> \version 1.0
105 : ! **************************************************************************************************
106 7464 : SUBROUTINE allocate_qs_energy(qs_energy)
107 :
108 : TYPE(qs_energy_type), POINTER :: qs_energy
109 :
110 : CHARACTER(len=*), PARAMETER :: routineN = 'allocate_qs_energy'
111 :
112 : INTEGER :: handle
113 :
114 7464 : CALL timeset(routineN, handle)
115 7464 : IF (.NOT. ASSOCIATED(qs_energy)) THEN
116 7464 : ALLOCATE (qs_energy)
117 : NULLIFY (qs_energy%ddapc_restraint)
118 : END IF
119 :
120 7464 : CALL init_qs_energy(qs_energy)
121 7464 : CALL timestop(handle)
122 :
123 7464 : END SUBROUTINE allocate_qs_energy
124 :
125 : ! **************************************************************************************************
126 : !> \brief Deallocate a Quickstep energy data structure.
127 : !> \param qs_energy ...
128 : !> \date 13.06.2002
129 : !> \author MK
130 : !> \version 1.0
131 : ! **************************************************************************************************
132 7464 : SUBROUTINE deallocate_qs_energy(qs_energy)
133 : TYPE(qs_energy_type), POINTER :: qs_energy
134 :
135 7464 : IF (ASSOCIATED(qs_energy)) THEN
136 7464 : IF (ASSOCIATED(qs_energy%ddapc_restraint)) THEN
137 7464 : DEALLOCATE (qs_energy%ddapc_restraint)
138 : END IF
139 7464 : DEALLOCATE (qs_energy)
140 : ELSE
141 : CALL cp_abort(__LOCATION__, &
142 : "The qs_energy pointer is not associated "// &
143 0 : "and cannot be deallocated")
144 : END IF
145 :
146 7464 : END SUBROUTINE deallocate_qs_energy
147 :
148 : ! **************************************************************************************************
149 : !> \brief Initialise a Quickstep energy data structure.
150 : !> \param qs_energy ...
151 : !> \date 13.06.2002
152 : !> \author MK
153 : !> \version 1.0
154 : ! **************************************************************************************************
155 7464 : SUBROUTINE init_qs_energy(qs_energy)
156 :
157 : TYPE(qs_energy_type), POINTER :: qs_energy
158 :
159 7464 : IF (ASSOCIATED(qs_energy)) THEN
160 7464 : qs_energy%core = 0.0_dp
161 7464 : qs_energy%core_overlap = 0.0_dp
162 7464 : qs_energy%core_overlap0 = 0.0_dp
163 7464 : qs_energy%core_self = 0.0_dp
164 7464 : qs_energy%core_cneo = 0.0_dp
165 7464 : qs_energy%repulsive = 0.0_dp
166 7464 : qs_energy%dispersion = 0.0_dp
167 7464 : qs_energy%gcp = 0.0_dp
168 7464 : qs_energy%qmmm_el = 0.0_dp
169 7464 : qs_energy%qmmm_nu = 0.0_dp
170 7464 : qs_energy%ex = 0.0_dp
171 7464 : qs_energy%exc = 0.0_dp
172 7464 : qs_energy%exc_aux_fit = 0.0_dp
173 7464 : qs_energy%exc1 = 0.0_dp
174 7464 : qs_energy%exc1_aux_fit = 0.0_dp
175 7464 : qs_energy%e_hartree = 0.0_dp
176 7464 : qs_energy%hartree = 0.0_dp
177 7464 : qs_energy%hartree_1c = 0.0_dp
178 7464 : qs_energy%image_charge = 0.0_dp
179 7464 : qs_energy%mulliken = 0.0_dp
180 7464 : qs_energy%cdft = 0.0_dp
181 7464 : qs_energy%efield = 0.0_dp
182 7464 : qs_energy%efield_core = 0.0_dp
183 7464 : qs_energy%ee = 0.0_dp
184 7464 : qs_energy%ee_core = 0.0_dp
185 7464 : qs_energy%s2_restraint = 0.0_dp
186 7464 : qs_energy%dft_plus_u = 0.0_dp
187 7464 : qs_energy%sccs_hartree = 0.0_dp
188 7464 : qs_energy%sccs_pol = 0.0_dp
189 7464 : qs_energy%sccs_cav = 0.0_dp
190 7464 : qs_energy%sccs_dis = 0.0_dp
191 7464 : qs_energy%sccs_rep = 0.0_dp
192 7464 : qs_energy%sccs_sol = 0.0_dp
193 7464 : qs_energy%dftb3 = 0.0_dp
194 7464 : qs_energy%kTS = 0.0_dp
195 7464 : qs_energy%mp2 = 0.0_dp
196 7464 : qs_energy%efermi = 0.0_dp
197 7464 : qs_energy%kinetic = 0.0_dp
198 7464 : qs_energy%surf_dipole = 0.0_dp
199 7464 : qs_energy%excited_state = 0.0_dp
200 7464 : qs_energy%total = 0.0_dp
201 7464 : qs_energy%singles_corr = 0.0_dp
202 7464 : qs_energy%nonscf_correction = 0.0_dp
203 7464 : IF (.NOT. ASSOCIATED(qs_energy%ddapc_restraint)) THEN
204 7464 : ALLOCATE (qs_energy%ddapc_restraint(1))
205 : END IF
206 14928 : qs_energy%ddapc_restraint(:) = 0.0_dp
207 : ELSE
208 : CALL cp_abort(__LOCATION__, &
209 : "The qs_energy pointer is not associated "// &
210 0 : "and cannot be initialised")
211 : END IF
212 :
213 7464 : END SUBROUTINE init_qs_energy
214 :
215 0 : END MODULE qs_energy_types
|