OpenMD
3.2
Molecular Dynamics in the Open
Toggle main menu visibility
Loading...
Searching...
No Matches
HydroProp.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 HYDRODYNAMICS_HYDROPROP_HPP
49
#define HYDRODYNAMICS_HYDROPROP_HPP
50
51
#include "
math/SquareMatrix3.hpp
"
52
#include "
math/Vector3.hpp
"
53
54
namespace
OpenMD
{
55
56
/**
57
* @class HydroProp HydroProp.hpp "hydrodynamics/HydroProp.hpp"
58
* Container for information about the hydrodynamic behavior of objects
59
* interacting with surroundings.
60
* @note the units for the center of resistance (a location) are in Angstroms
61
*
62
* @note the units of the resistance tensor are:
63
* Xitt (Translation-translation) : kcal fs mol^-1 Angstroms^-2
64
* Xirt (Rotation-translation) : kcal fs mol^-1 Angstroms^-1 radians^-1
65
* Xitr (Translation-rotation) : kcal fs mol^-1 Angstroms^-1 radians^-1
66
* Xirr (Rotation-rotation) : kcal fs mol^-1 radians^-2
67
*
68
* @note the units of D, the diffusion tensor are:
69
* Dtt (Translation-translation) : Angstroms^2 fs^-1
70
* Drt (Rotation-translation) : Angstroms fs^-1
71
* Dtr (Translation-rotation) : Angstroms fs^-1
72
* Drr (Rotation-rotation) : fs^-1
73
*
74
* @note after setting the value of Xi manually, the complete() function
75
* should be called to perform the Cholesky Decomposition.
76
*/
77
class
HydroProp {
78
public
:
79
HydroProp();
80
HydroProp(Vector3d cor, Mat6x6d Xi);
81
82
void
setName(std::string name) { name_ = name; }
83
std::string getName() {
return
name_; }
84
85
void
setCenterOfResistance(Vector3d cor) {
86
cor_ = cor;
87
hasCOR_ =
true
;
88
}
89
Vector3d getCenterOfResistance() {
return
cor_; }
90
91
void
setResistanceTensor(Mat6x6d Xi) {
92
Xi_ = Xi;
93
hasXi_ =
true
;
94
complete();
95
}
96
Mat6x6d getResistanceTensor() {
return
Xi_; }
97
Mat3x3d getXitt();
98
Mat3x3d getXitr();
99
Mat3x3d getXirt();
100
Mat3x3d getXirr();
101
102
void
complete();
103
/*
104
* Returns the result of a Cholesky decomposition to obtain the
105
* square root matrix of the resistance tensor,
106
* \f[ \Xi = S S^T \f]
107
* where S is a lower triangular matrix.
108
*/
109
Mat6x6d getS();
110
111
Mat6x6d getDiffusionTensor(RealType temperature);
112
113
/*
114
* Recomputes the Resistance Tensor at a new location
115
*/
116
Mat6x6d getResistanceTensorAtPos(Vector3d pos);
117
/*
118
* Recomputes the Diffusion Tensor at a new location (and temperature)
119
*/
120
Mat6x6d getDiffusionTensorAtPos(Vector3d pos, RealType temperature);
121
/*
122
* Computes the Center Of Diffusion at a particular temperature
123
*/
124
Vector3d getCenterOfDiffusion(RealType temperature);
125
126
Mat3x3d getPitchMatrix();
127
RealType getScalarPitch();
128
void
pitchAxes(Mat3x3d& pitchAxes, Vector3d& pitches,
129
RealType& pitchScalar);
130
131
/*
132
* Computes the Center of Pitch
133
*/
134
Vector3d getCenterOfPitch();
135
136
private
:
137
std::string name_;
138
Vector3d cor_;
// Center of Resistance
139
Mat6x6d Xi_;
// Resistance Tensor
140
Mat6x6d S_;
// Cholesky Decomposition of Xi_
141
bool
hasCOR_;
142
bool
hasXi_;
143
bool
hasS_;
144
};
145
}
// namespace OpenMD
146
147
#endif
SquareMatrix3.hpp
Vector3.hpp
OpenMD
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.
Definition
ActionCorrFunc.cpp:63
hydrodynamics
HydroProp.hpp
Generated on
for OpenMD by
1.17.0