ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/math/Triangle.hpp
(Generate patch)

Comparing trunk/src/math/Triangle.hpp (file contents):
Revision 1307 by chuckv, Mon Oct 20 19:36:32 2008 UTC vs.
Revision 1442 by gezelter, Mon May 10 17:28:26 2010 UTC

# 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.hpp
42   *
43 < *  Purpose: Provide facets from hull to oopse
43 > *  Purpose: Provide basic triangle class for OpenMD. Hates Particle class.
44   *
45   *  Created by Charles F. Vardeman II on 29 July 2008.
46   *  @author  Charles F. Vardeman II
47 < *  @version $Id: Triangle.hpp,v 1.2 2008-10-20 19:36:32 chuckv Exp $
47 > *  @version $Id$
48   *
49   */
50  
# Line 53 | Line 53
53   #define MATH_FACET_HPP
54  
55   #include "math/Vector3.hpp"
56 + #include "math/SquareMatrix3.hpp"
57   #include "config.h"
58   #include "primitives/StuntDouble.hpp"
59  
60   #include <vector>
61  
62  
63 < namespace oopse {
63 > namespace OpenMD {
64  
65   /**
66     * @class Triangle
67     *
68 <   * Triangle provides geometric data to oopse. Triangle includes
68 >   * Triangle provides geometric data to OpenMD. Triangle includes
69     * information about the normal, centroid and the atoms
70     * that belong to this triangle.
71     */
72    class Triangle {
73  
74    public:
75 <    Triangle(){};
75 >    Triangle();
76      virtual ~Triangle() { };
77  
78      void setNormal(Vector3d normal) {
79        normal_ = normal;
80 +      HaveNormal_ = true;
81      }
82 +    void setUnitNormal(Vector3d normal) {
83 +      unitnormal_ = normal;
84 +      HaveUnitNormal_ = true;
85 +    }
86  
87 <    void addVertex(StuntDouble* thisSD){
87 >    void addVertices(Vector3d P1, Vector3d P2, Vector3d P3);
88 >
89 >    void addVertexSD(StuntDouble* thisSD){
90        vertexSD_.push_back(thisSD);
91      }
92 <    
92 >
93      std::vector<StuntDouble*> getVertices(){return vertexSD_;}
94  
95      void setArea(RealType area) {
96        area_ = area;
97 +      HaveArea_ = true;
98      }
99      
100 <    Vector3d getNormal() {
101 <      return normal_;
100 >    Vector3d getNormal() {
101 >      if (HaveNormal_) {
102 >        return normal_;
103 >      } else {
104 >        return computeNormal();
105 >      }
106      }
107 +   Vector3d getUnitNormal() {
108 +      if (HaveUnitNormal_) {
109 +        return unitnormal_;
110 +      } else {
111 +        return computeUnitNormal();
112 +      }
113 +    }
114      
115      RealType getArea() {
116 <      return area_;
116 >      if(HaveArea_){
117 >        return area_;
118 >      }else{
119 >        return computeArea();
120 >      }
121      }
122  
123 +    RealType computeArea();
124 +    Vector3d computeNormal();
125 +    Vector3d computeCentroid();
126 +    Vector3d computeUnitNormal();
127 +
128      void setCentroid(Vector3d centroid) {
129        centroid_ = centroid;
130 +      HaveCentroid_ = true;
131      }
132  
133 <    Vector3d getCentroid() {
134 <      return centroid_;
133 >    Vector3d getCentroid() {
134 >      if (HaveCentroid_) {
135 >        return centroid_;
136 >      } else {
137 >        return computeCentroid();
138 >      }
139      }
140 <
140 >    
141      Vector3d getFacetVelocity(){
142        return facetVelocity_;
143      }
# Line 112 | Line 146 | namespace oopse {
146        facetVelocity_ = facetVelocity;
147      }
148  
149 +    void setFacetMass(RealType mass){
150 +      mass_ = mass;
151 +    }
152  
153 +    RealType getFacetMass(){
154 +      return mass_;
155 +    }
156 +
157 +    RealType a(){
158 +      return a_.length();
159 +    }
160 +
161 +    RealType b(){
162 +      return b_.length();
163 +    }
164 +
165 +    RealType c(){
166 +      return c_.length();
167 +    }
168 +
169 +    RealType getHydroLength() {
170 +      RealType a1 = a();
171 +      RealType b1 = b();
172 +      RealType c1 = c();
173 +      RealType t1 =  a1 + b1 + c1;
174 +      RealType t4 =  a1 + b1 - c1;
175 +
176 +      return 32.0 * c1 / log(t1*t1/t4/t4);
177 +    }
178 +
179 +
180 +    RealType getIncircleRadius() {
181 +      return 2.0 * getArea() / (a() + b() + c());
182 +    }
183 +
184 +    RealType getCircumcircleRadius() {
185 +      RealType a1 = a();
186 +      RealType b1 = b();
187 +      RealType c1 = c();
188 +      RealType t1 =  a1 + b1 + c1;
189 +      RealType t2 = -a1 + b1 + c1;
190 +      RealType t3 =  a1 - b1 + c1;
191 +      RealType t4 =  a1 + b1 - c1;
192 +      RealType junk = t1*t2*t3*t4;
193 +      return a1 * b1 * c1 / sqrt(t1 * t2 * t3 * t4);
194 +    }
195 +      
196 +    Mat3x3d computeHydrodynamicTensor(RealType viscosity);
197 +
198 +
199    private:
200 +    Mat3x3d hydro_tensor(const Vector3d& ri, const Vector3d& rj0, const Vector3d& rj1, const Vector3d& rj2,RealType s, RealType viscosity);
201 +    
202      /* Local Indentity of vertex atoms in pos array*/
203      std::vector <StuntDouble*> vertexSD_;
204      Vector3d normal_;
205 +    Vector3d unitnormal_;
206      Vector3d centroid_;
207 <    RealType area_;
207 >    Vector3d vertices_[3];
208 >    RealType area_;    
209 >    RealType mass_;
210      Vector3d facetVelocity_;
211 +    //Length of triangle sides
212 +    Vector3d a_,b_,c_;
213 +    RealType alpha_,beta_,gamma_;
214 +    bool HaveArea_;
215 +    bool HaveNormal_;
216 +    bool HaveUnitNormal_;
217 +    bool HaveCentroid_;
218      
219    }; // End class Triangle
220      
221      
222  
223 < } //End Namespace oopse
223 > } //end namespace OpenMD
224  
225  
226  

Comparing trunk/src/math/Triangle.hpp (property svn:keywords):
Revision 1307 by chuckv, Mon Oct 20 19:36:32 2008 UTC vs.
Revision 1442 by gezelter, Mon May 10 17:28:26 2010 UTC

# Line 0 | Line 1
1 + Author Id Revision Date

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines