# | Line 5 | Line 5 | |
---|---|---|
5 | * redistribute this software in source and binary code form, provided | |
6 | * that the following conditions are met: | |
7 | * | |
8 | < | * 1. Acknowledgement of the program authors must be made in any |
9 | < | * publication of scientific results based in part on use of the |
10 | < | * program. An acceptable form of acknowledgement is citation of |
11 | < | * the article in which the program was described (Matthew |
12 | < | * A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher |
13 | < | * J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented |
14 | < | * Parallel Simulation Engine for Molecular Dynamics," |
15 | < | * J. Comput. Chem. 26, pp. 252-271 (2005)) |
16 | < | * |
17 | < | * 2. Redistributions of source code must retain the above copyright |
8 | > | * 1. Redistributions of source code must retain the above copyright |
9 | * notice, this list of conditions and the following disclaimer. | |
10 | * | |
11 | < | * 3. Redistributions in binary form must reproduce the above copyright |
11 | > | * 2. Redistributions in binary form must reproduce the above copyright |
12 | * notice, this list of conditions and the following disclaimer in the | |
13 | * documentation and/or other materials provided with the | |
14 | * distribution. | |
# | Line 37 | Line 28 | |
28 | * University of Notre Dame has been advised of the possibility of | |
29 | * such damages. | |
30 | * | |
31 | + | * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your |
32 | + | * research, please cite the appropriate papers when you publish your |
33 | + | * work. Good starting points are: |
34 | + | * |
35 | + | * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). |
36 | + | * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). |
37 | + | * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). |
38 | + | * [4] Vardeman & Gezelter, in progress (2009). |
39 | * | |
40 | + | * |
41 | * Triangle.cpp | |
42 | * | |
43 | < | * Purpose: Provide basic triangle object for OOPSE |
43 | > | * Purpose: Provide basic triangle object for OpenMD |
44 | * | |
45 | * Created by Charles F. Vardeman II on 29 July 2008. | |
46 | * @author Charles F. Vardeman II | |
47 | < | * @version $Id: Triangle.cpp,v 1.2 2008-12-05 16:20:38 chuckv Exp $ |
47 | > | * @version $Id: Triangle.cpp,v 1.4 2009-11-25 20:02:01 gezelter Exp $ |
48 | * | |
49 | */ | |
50 | ||
51 | #include "math/Triangle.hpp" | |
52 | ||
53 | < | using namespace oopse; |
53 | > | using namespace OpenMD; |
54 | ||
55 | ||
56 | < | Triangle::Triangle() : HaveNormal_(false), HaveCentroid_(false),HaveArea_(false), area_(0.0), normal_(V3Zero), |
57 | < | centroid_(V3Zero),facetVelocity_(V3Zero), mass_(0.0), |
58 | < | a_(V3Zero),b_(V3Zero),c_(V3Zero){ |
56 | > | Triangle::Triangle() : HaveNormal_(false), HaveCentroid_(false), |
57 | > | HaveArea_(false), area_(0.0), normal_(V3Zero), |
58 | > | centroid_(V3Zero), facetVelocity_(V3Zero), mass_(0.0), |
59 | > | a_(V3Zero), b_(V3Zero), c_(V3Zero){ |
60 | } | |
61 | ||
62 | void Triangle::addVertices(Vector3d P1, Vector3d P2, Vector3d P3){ | |
# | Line 87 | Line 88 | Vector3d Triangle::computeCentroid(){ | |
88 | centroid_ = (vertices_[0] + vertices_[1] + vertices_[2])/3.0; | |
89 | return centroid_; | |
90 | } | |
91 | + | |
92 | + | |
93 | + | Mat3x3d Triangle::computeHydrodynamicTensor(RealType viscosity) { |
94 | + | |
95 | + | Vector3d u0 = -a_; |
96 | + | Vector3d v0 = centroid_ - vertices_[0]; |
97 | + | RealType s0 = 0.5*cross(u0,v0).length(); |
98 | + | |
99 | + | Vector3d u1 = -c_; |
100 | + | Vector3d v1 = centroid_ - vertices_[1]; |
101 | + | RealType s1 = 0.5*cross(u1,v1).length(); |
102 | + | |
103 | + | Vector3d u2 = b_; |
104 | + | Vector3d v2 = centroid_ - vertices_[2]; |
105 | + | RealType s2 = 0.5*cross(u2,v2).length(); |
106 | + | |
107 | + | Mat3x3d H; |
108 | + | H = hydro_tensor(centroid_,centroid_,vertices_[1],vertices_[0],s0,viscosity)+ |
109 | + | hydro_tensor(centroid_,centroid_,vertices_[1],vertices_[2],s1,viscosity)+ |
110 | + | hydro_tensor(centroid_,centroid_,vertices_[2],vertices_[0],s2,viscosity); |
111 | + | |
112 | + | return H.inverse(); |
113 | + | } |
114 | + | |
115 | + | Mat3x3d Triangle::hydro_tensor( |
116 | + | const Vector3d& ri, |
117 | + | const Vector3d& rj0, |
118 | + | const Vector3d& rj1, |
119 | + | const Vector3d& rj2, |
120 | + | RealType s, RealType viscosity){ |
121 | + | |
122 | + | Vector3d v2 = (rj0 + rj1 + rj2)/3.0; // sub-centroid |
123 | + | Vector3d dr = ri - v2; // real centroid to sub-centroid |
124 | + | RealType l2 = 1.0/dr.lengthSquare(); |
125 | + | |
126 | + | Mat3x3d G; |
127 | + | G = (SquareMatrix3<RealType>::identity() + outProduct(dr,dr)*l2)*sqrt(l2); |
128 | + | |
129 | + | G *= 0.125/3.14159285358979; |
130 | + | G *= s/viscosity; |
131 | + | return G; |
132 | + | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |