Line data Source code
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 : !> \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 : xtb_spinpol = 0.0_dp ! spin-polarised Hamiltonian energy within GFN1/2-xTB
85 : REAL(KIND=dp), DIMENSION(:), POINTER :: ddapc_restraint => NULL()
86 : END TYPE qs_energy_type
87 :
88 : ! Public data types
89 :
90 : PUBLIC :: qs_energy_type
91 :
92 : ! Public subroutines
93 :
94 : PUBLIC :: allocate_qs_energy, &
95 : deallocate_qs_energy, &
96 : init_qs_energy
97 :
98 : CONTAINS
99 :
100 : ! **************************************************************************************************
101 : !> \brief Allocate and/or initialise a Quickstep energy data structure.
102 : !> \param qs_energy ...
103 : !> \date 13.06.2002
104 : !> \author MK
105 : !> \version 1.0
106 : ! **************************************************************************************************
107 8684 : SUBROUTINE allocate_qs_energy(qs_energy)
108 :
109 : TYPE(qs_energy_type), POINTER :: qs_energy
110 :
111 : CHARACTER(len=*), PARAMETER :: routineN = 'allocate_qs_energy'
112 :
113 : INTEGER :: handle
114 :
115 8684 : CALL timeset(routineN, handle)
116 8684 : IF (.NOT. ASSOCIATED(qs_energy)) THEN
117 8684 : ALLOCATE (qs_energy)
118 : NULLIFY (qs_energy%ddapc_restraint)
119 : END IF
120 :
121 8684 : CALL init_qs_energy(qs_energy)
122 8684 : CALL timestop(handle)
123 :
124 8684 : END SUBROUTINE allocate_qs_energy
125 :
126 : ! **************************************************************************************************
127 : !> \brief Deallocate a Quickstep energy data structure.
128 : !> \param qs_energy ...
129 : !> \date 13.06.2002
130 : !> \author MK
131 : !> \version 1.0
132 : ! **************************************************************************************************
133 8684 : SUBROUTINE deallocate_qs_energy(qs_energy)
134 : TYPE(qs_energy_type), POINTER :: qs_energy
135 :
136 8684 : IF (ASSOCIATED(qs_energy)) THEN
137 8684 : IF (ASSOCIATED(qs_energy%ddapc_restraint)) THEN
138 8684 : DEALLOCATE (qs_energy%ddapc_restraint)
139 : END IF
140 8684 : DEALLOCATE (qs_energy)
141 : ELSE
142 : CALL cp_abort(__LOCATION__, &
143 : "The qs_energy pointer is not associated "// &
144 0 : "and cannot be deallocated")
145 : END IF
146 :
147 8684 : END SUBROUTINE deallocate_qs_energy
148 :
149 : ! **************************************************************************************************
150 : !> \brief Initialise a Quickstep energy data structure.
151 : !> \param qs_energy ...
152 : !> \date 13.06.2002
153 : !> \author MK
154 : !> \version 1.0
155 : ! **************************************************************************************************
156 8684 : SUBROUTINE init_qs_energy(qs_energy)
157 :
158 : TYPE(qs_energy_type), POINTER :: qs_energy
159 :
160 8684 : IF (ASSOCIATED(qs_energy)) THEN
161 8684 : qs_energy%core = 0.0_dp
162 8684 : qs_energy%core_overlap = 0.0_dp
163 8684 : qs_energy%core_overlap0 = 0.0_dp
164 8684 : qs_energy%core_self = 0.0_dp
165 8684 : qs_energy%core_cneo = 0.0_dp
166 8684 : qs_energy%repulsive = 0.0_dp
167 8684 : qs_energy%dispersion = 0.0_dp
168 8684 : qs_energy%gcp = 0.0_dp
169 8684 : qs_energy%qmmm_el = 0.0_dp
170 8684 : qs_energy%qmmm_nu = 0.0_dp
171 8684 : qs_energy%ex = 0.0_dp
172 8684 : qs_energy%exc = 0.0_dp
173 8684 : qs_energy%exc_aux_fit = 0.0_dp
174 8684 : qs_energy%exc1 = 0.0_dp
175 8684 : qs_energy%exc1_aux_fit = 0.0_dp
176 8684 : qs_energy%e_hartree = 0.0_dp
177 8684 : qs_energy%hartree = 0.0_dp
178 8684 : qs_energy%hartree_1c = 0.0_dp
179 8684 : qs_energy%image_charge = 0.0_dp
180 8684 : qs_energy%mulliken = 0.0_dp
181 8684 : qs_energy%cdft = 0.0_dp
182 8684 : qs_energy%efield = 0.0_dp
183 8684 : qs_energy%efield_core = 0.0_dp
184 8684 : qs_energy%ee = 0.0_dp
185 8684 : qs_energy%ee_core = 0.0_dp
186 8684 : qs_energy%s2_restraint = 0.0_dp
187 8684 : qs_energy%dft_plus_u = 0.0_dp
188 8684 : qs_energy%sccs_hartree = 0.0_dp
189 8684 : qs_energy%sccs_pol = 0.0_dp
190 8684 : qs_energy%sccs_cav = 0.0_dp
191 8684 : qs_energy%sccs_dis = 0.0_dp
192 8684 : qs_energy%sccs_rep = 0.0_dp
193 8684 : qs_energy%sccs_sol = 0.0_dp
194 8684 : qs_energy%dftb3 = 0.0_dp
195 8684 : qs_energy%kTS = 0.0_dp
196 8684 : qs_energy%mp2 = 0.0_dp
197 8684 : qs_energy%efermi = 0.0_dp
198 8684 : qs_energy%kinetic = 0.0_dp
199 8684 : qs_energy%surf_dipole = 0.0_dp
200 8684 : qs_energy%excited_state = 0.0_dp
201 8684 : qs_energy%total = 0.0_dp
202 8684 : qs_energy%singles_corr = 0.0_dp
203 8684 : qs_energy%nonscf_correction = 0.0_dp
204 8684 : IF (.NOT. ASSOCIATED(qs_energy%ddapc_restraint)) THEN
205 8684 : ALLOCATE (qs_energy%ddapc_restraint(1))
206 : END IF
207 17368 : qs_energy%ddapc_restraint(:) = 0.0_dp
208 : ELSE
209 : CALL cp_abort(__LOCATION__, &
210 : "The qs_energy pointer is not associated "// &
211 0 : "and cannot be initialised")
212 : END IF
213 :
214 8684 : END SUBROUTINE init_qs_energy
215 :
216 0 : END MODULE qs_energy_types
|