# | Line 1 | Line 1 | |
---|---|---|
1 | < | /* Copyright (c) 2008 The University of Notre Dame. All Rights Reserved. |
1 | > | /* Copyright (c) 2008, 2010 The University of Notre Dame. All Rights Reserved. |
2 | * | |
3 | * The University of Notre Dame grants you ("Licensee") a | |
4 | * non-exclusive, royalty free, license to use, modify and | |
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.1 2008-11-14 15:44:34 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), HaveUnitNormal_(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 66 | Line 67 | void Triangle::addVertices(Vector3d P1, Vector3d P2, V | |
67 | // Compute some quantites like a,b,c | |
68 | a_ = P1-P2; | |
69 | b_ = P1-P3; | |
70 | < | c_ = P1-P3; |
70 | > | c_ = P2-P3; |
71 | } | |
72 | ||
73 | ||
# | Line 75 | Line 76 | RealType Triangle::computeArea(){ | |
76 | area_ = getNormal().length() * 0.5; | |
77 | return area_; | |
78 | } | |
79 | < | |
79 | > | // This should return the normal for our calculations. |
80 | Vector3d Triangle::computeNormal(){ | |
81 | HaveNormal_ = true; | |
82 | normal_ = cross(a_,b_); | |
83 | return normal_; | |
84 | } | |
85 | + | // This should return the normal for our calculations. |
86 | + | Vector3d Triangle::computeUnitNormal(){ |
87 | + | HaveUnitNormal_ = true; |
88 | + | unitnormal_ = cross(a_,b_); |
89 | + | unitnormal_.normalize(); |
90 | + | return unitnormal_; |
91 | + | } |
92 | ||
93 | Vector3d Triangle::computeCentroid(){ | |
94 | HaveCentroid_ = true; | |
95 | centroid_ = (vertices_[0] + vertices_[1] + vertices_[2])/3.0; | |
96 | return centroid_; | |
97 | } | |
98 | + | |
99 | + | |
100 | + | Mat3x3d Triangle::computeHydrodynamicTensor(RealType viscosity) { |
101 | + | |
102 | + | Vector3d u0 = -a_; |
103 | + | Vector3d v0 = centroid_ - vertices_[0]; |
104 | + | RealType s0 = 0.5*cross(u0,v0).length(); |
105 | + | |
106 | + | Vector3d u1 = -c_; |
107 | + | Vector3d v1 = centroid_ - vertices_[1]; |
108 | + | RealType s1 = 0.5*cross(u1,v1).length(); |
109 | + | |
110 | + | Vector3d u2 = b_; |
111 | + | Vector3d v2 = centroid_ - vertices_[2]; |
112 | + | RealType s2 = 0.5*cross(u2,v2).length(); |
113 | + | |
114 | + | Mat3x3d H; |
115 | + | H = hydro_tensor(centroid_,centroid_,vertices_[1],vertices_[0],s0,viscosity)+ |
116 | + | hydro_tensor(centroid_,centroid_,vertices_[1],vertices_[2],s1,viscosity)+ |
117 | + | hydro_tensor(centroid_,centroid_,vertices_[2],vertices_[0],s2,viscosity); |
118 | + | |
119 | + | return H.inverse(); |
120 | + | } |
121 | + | |
122 | + | Mat3x3d Triangle::hydro_tensor( |
123 | + | const Vector3d& ri, |
124 | + | const Vector3d& rj0, |
125 | + | const Vector3d& rj1, |
126 | + | const Vector3d& rj2, |
127 | + | RealType s, RealType viscosity){ |
128 | + | |
129 | + | Vector3d v2 = (rj0 + rj1 + rj2)/3.0; // sub-centroid |
130 | + | Vector3d dr = ri - v2; // real centroid to sub-centroid |
131 | + | RealType l2 = 1.0/dr.lengthSquare(); |
132 | + | |
133 | + | Mat3x3d G; |
134 | + | G = (SquareMatrix3<RealType>::identity() + outProduct(dr,dr)*l2)*sqrt(l2); |
135 | + | |
136 | + | G *= 0.125/3.14159285358979; |
137 | + | G *= s/viscosity; |
138 | + | return G; |
139 | + | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |