OpenMD
3.2
Molecular Dynamics in the Open
Toggle main menu visibility
Loading...
Searching...
No Matches
Thermo.hpp
1
/*
2
* Copyright (c) 2004-present, The University of Notre Dame. All rights
3
* reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
*
8
* 1. Redistributions of source code must retain the above copyright notice,
9
* this list of conditions and the following disclaimer.
10
*
11
* 2. Redistributions in binary form must reproduce the above copyright notice,
12
* this list of conditions and the following disclaimer in the documentation
13
* and/or other materials provided with the distribution.
14
*
15
* 3. Neither the name of the copyright holder nor the names of its
16
* contributors may be used to endorse or promote products derived from
17
* this software without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
* POSSIBILITY OF SUCH DAMAGE.
30
*
31
* SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
32
* research, please cite the following paper when you publish your work:
33
*
34
* [1] Drisko et al., J. Open Source Softw. 9, 7004 (2024).
35
*
36
* Good starting points for code and simulation methodology are:
37
*
38
* [2] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
39
* [3] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
40
* [4] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).
41
* [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
42
* [6] Kuang & Gezelter, Mol. Phys., 110, 691-701 (2012).
43
* [7] Lamichhane, Gezelter & Newman, J. Chem. Phys. 141, 134109 (2014).
44
* [8] Bhattarai, Newman & Gezelter, Phys. Rev. B 99, 094106 (2019).
45
* [9] Drisko & Gezelter, J. Chem. Theory Comput. 20, 4986-4997 (2024).
46
*/
47
48
#ifndef BRAINS_THERMO_HPP
49
#define BRAINS_THERMO_HPP
50
51
#include "
brains/SimInfo.hpp
"
52
#include "
primitives/Atom.hpp
"
53
#include "
perturbations/VelocityField.hpp
"
54
55
namespace
OpenMD
{
56
57
class
Thermo {
58
public
:
59
Thermo(
SimInfo
* info);
60
61
// note: all the following energies are in kcal/mol
62
63
RealType getTranslationalKinetic();
// the translational kinetic energy
64
RealType getRotationalKinetic();
// the rotational kinetic energy
65
RealType getElectronicKinetic();
// the electronic kinetic energy
66
RealType getKinetic();
// the total kinetic energy
67
RealType getPotential();
// the total potential energy
68
potVec getSelectionPotentials();
// the potential energy of a selection
69
70
RealType getTotalEnergy();
// gets the total energy
71
72
RealType getTemperature();
// Gives the instant temp. in K
73
RealType getElectronicTemperature();
// gives the instant electronic
74
// temperature in K
75
RealType getNetCharge();
// gives the total net charge on the system
76
RealType getChargeMomentum();
// gives the instantaneous charge momentum in
77
// kcal fs / e / mol
78
std::vector<Vector3d> getCurrentDensity();
79
80
RealType getPressure();
// gives the instant pressure in atm;
81
RealType getPressure(
Snapshot
* snap);
// gives the instant pressure in atm
82
// for a given snapshot;
83
84
/** \brief gives the pressure tensor in amu*fs^-2*Ang^-1 */
85
Mat3x3d
getPressureTensor
();
86
/** \brief gives the pressure tensor in amu*fs^-2*Ang^-1 for a given
87
* snapshot */
88
Mat3x3d
getPressureTensor
(
Snapshot
* snap);
89
90
RealType getVolume();
// gives the volume in Ang^3
91
92
/** \brief accumulate and return the simulation box dipole moment in C*m */
93
Vector3d
getSystemDipole
();
94
95
/** \brief accumulate and return the simulation box dipole moment in debye
96
* Angstroms */
97
Mat3x3d
getSystemQuadrupole
();
98
99
Vector3d getHeatFlux();
100
101
/** \brief Returns the center of the mass of the whole system.*/
102
Vector3d
getCom
();
103
104
/** \brief Returns the velocity of center of mass of the whole system.*/
105
Vector3d
getComVel
();
106
107
/** \brief Returns the center of the mass and Center of Mass velocity of
108
the whole system.*/
109
void
getComAll
(Vector3d& com, Vector3d& comVel);
110
111
/** \brief Returns the inertia tensor and the total angular
112
momentum for for the entire system
113
* \param[out] inertiaTensor the inertia tensor
114
* \param[out] angularMomentum the angular momentum vector
115
* \ingroup surface
116
*/
117
void
getInertiaTensor
(Mat3x3d& inertiaTensor, Vector3d& angularMomentum);
118
119
/** \brief Returns the Axis-aligned bounding box for the current system.
120
*/
121
Mat3x3d
getBoundingBox
();
122
123
/** \brief Returns system angular momentum */
124
Vector3d
getAngularMomentum
();
125
126
/** \brief Returns volume of system as estimated by an ellipsoid defined
127
by the radii of gyration */
128
RealType
getGyrationalVolume
();
129
130
/** \brief Overloaded version of gyrational volume that also returns
131
det(I) so dV/dr can be calculated */
132
void
getGyrationalVolume
(RealType& vol, RealType& detI);
133
134
RealType getHullVolume();
135
136
RealType getTaggedAtomPairDistance();
137
138
private
:
139
SimInfo
* info_ {
nullptr
};
140
std::unique_ptr<VelocityField> velField_;
141
bool
usePeculiarVelocities_ {
false
};
142
143
};
144
}
// namespace OpenMD
145
146
#endif
Atom.hpp
SimInfo.hpp
VelocityField.hpp
Linear (homogeneous) ambient velocity field, queried at a location.
OpenMD::SimInfo
One of the heavy-weight classes of OpenMD, SimInfo maintains objects and variables relating to the cu...
Definition
SimInfo.hpp:96
OpenMD::Snapshot
The Snapshot class is a repository storing dynamic data during a Simulation.
Definition
Snapshot.hpp:166
OpenMD::Thermo::getPressureTensor
Mat3x3d getPressureTensor()
gives the pressure tensor in amu*fs^-2*Ang^-1
Definition
Thermo.cpp:483
OpenMD::Thermo::getSystemDipole
Vector3d getSystemDipole()
accumulate and return the simulation box dipole moment in C*m
Definition
Thermo.cpp:575
OpenMD::Thermo::getComAll
void getComAll(Vector3d &com, Vector3d &comVel)
Returns the center of the mass and Center of Mass velocity of the whole system.
Definition
Thermo.cpp:913
OpenMD::Thermo::getInertiaTensor
void getInertiaTensor(Mat3x3d &inertiaTensor, Vector3d &angularMomentum)
Returns the inertia tensor and the total angular momentum for for the entire system.
Definition
Thermo.cpp:972
OpenMD::Thermo::getGyrationalVolume
RealType getGyrationalVolume()
Returns volume of system as estimated by an ellipsoid defined by the radii of gyration.
Definition
Thermo.cpp:1159
OpenMD::Thermo::getCom
Vector3d getCom()
Returns the center of the mass of the whole system.
Definition
Thermo.cpp:879
OpenMD::Thermo::getSystemQuadrupole
Mat3x3d getSystemQuadrupole()
accumulate and return the simulation box dipole moment in debye Angstroms
Definition
Thermo.cpp:672
OpenMD::Thermo::getAngularMomentum
Vector3d getAngularMomentum()
Returns system angular momentum.
Definition
Thermo.cpp:1113
OpenMD::Thermo::getComVel
Vector3d getComVel()
Returns the velocity of center of mass of the whole system.
Definition
Thermo.cpp:841
OpenMD::Thermo::getBoundingBox
Mat3x3d getBoundingBox()
Returns the Axis-aligned bounding box for the current system.
Definition
Thermo.cpp:1057
OpenMD
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.
Definition
ActionCorrFunc.cpp:63
brains
Thermo.hpp
Generated on
for OpenMD by
1.17.0