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