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