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 1293 by chuckv, Sun Sep 14 01:32:26 2008 UTC vs.
Revision 1390 by gezelter, Wed Nov 25 20:02:06 2009 UTC

# 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.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.1 2008-09-14 01:32:25 chuckv Exp $
47 > *  @version $Id: Triangle.hpp,v 1.6 2009-11-25 20:02:01 gezelter Exp $
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  
83 <    void addVertex(StuntDouble* thisSD){
83 >    void addVertices(Vector3d P1, Vector3d P2, Vector3d P3);
84 >
85 >    void addVertexSD(StuntDouble* thisSD){
86        vertexSD_.push_back(thisSD);
87      }
88 <    
88 >
89      std::vector<StuntDouble*> getVertices(){return vertexSD_;}
90  
91      void setArea(RealType area) {
92        area_ = area;
93 +      HaveArea_ = true;
94      }
95      
96 <    Vector3d getNormal() {
97 <      return normal_;
96 >    Vector3d getNormal() {
97 >      if (HaveNormal_) {
98 >        return normal_;
99 >      } else {
100 >        return computeNormal();
101 >      }
102      }
103      
104      RealType getArea() {
105 <      return area_;
105 >      if(HaveArea_){
106 >        return area_;
107 >      }else{
108 >        return computeArea();
109 >      }
110      }
111  
112 +    RealType computeArea();
113 +    Vector3d computeNormal();
114 +    Vector3d computeCentroid();
115 +
116      void setCentroid(Vector3d centroid) {
117        centroid_ = centroid;
118 +      HaveCentroid_ = true;
119      }
120  
121 <    Vector3d getCentroid() {
122 <      return centroid_;
121 >    Vector3d getCentroid() {
122 >      if (HaveCentroid_) {
123 >        return centroid_;
124 >      } else {
125 >        return computeCentroid();
126 >      }
127      }
128 +    
129 +    Vector3d getFacetVelocity(){
130 +      return facetVelocity_;
131 +    }
132 +    
133 +    void setFacetVelocity(Vector3d facetVelocity){
134 +      facetVelocity_ = facetVelocity;
135 +    }
136  
137 +    void setFacetMass(RealType mass){
138 +      mass_ = mass;
139 +    }
140 +
141 +    RealType getFacetMass(){
142 +      return mass_;
143 +    }
144 +
145 +    RealType a(){
146 +      return a_.length();
147 +    }
148 +
149 +    RealType b(){
150 +      return b_.length();
151 +    }
152 +
153 +    RealType c(){
154 +      return c_.length();
155 +    }
156 +
157 +    RealType getHydroLength() {
158 +      RealType a1 = a();
159 +      RealType b1 = b();
160 +      RealType c1 = c();
161 +      RealType t1 =  a1 + b1 + c1;
162 +      RealType t4 =  a1 + b1 - c1;
163 +
164 +      return 32.0 * c1 / log(t1*t1/t4/t4);
165 +    }
166 +
167 +
168 +    RealType getIncircleRadius() {
169 +      return 2.0 * getArea() / (a() + b() + c());
170 +    }
171 +
172 +    RealType getCircumcircleRadius() {
173 +      RealType a1 = a();
174 +      RealType b1 = b();
175 +      RealType c1 = c();
176 +      RealType t1 =  a1 + b1 + c1;
177 +      RealType t2 = -a1 + b1 + c1;
178 +      RealType t3 =  a1 - b1 + c1;
179 +      RealType t4 =  a1 + b1 - c1;
180 +      RealType junk = t1*t2*t3*t4;
181 +      return a1 * b1 * c1 / sqrt(t1 * t2 * t3 * t4);
182 +    }
183 +      
184 +    Mat3x3d computeHydrodynamicTensor(RealType viscosity);
185 +
186 +
187    private:
188 +    Mat3x3d hydro_tensor(const Vector3d& ri, const Vector3d& rj0, const Vector3d& rj1, const Vector3d& rj2,RealType s, RealType viscosity);
189 +    
190      /* Local Indentity of vertex atoms in pos array*/
191      std::vector <StuntDouble*> vertexSD_;
192      Vector3d normal_;
193      Vector3d centroid_;
194 +    Vector3d vertices_[3];
195      RealType area_;
196 +    RealType mass_;
197 +    Vector3d facetVelocity_;
198 +    //Length of triangle sides
199 +    Vector3d a_,b_,c_;
200 +    RealType alpha_,beta_,gamma_;
201 +    bool HaveArea_;
202 +    bool HaveNormal_;
203 +    bool HaveCentroid_;
204      
205    }; // End class Triangle
206      
207      
208  
209 < } //End Namespace oopse
209 > } //end namespace OpenMD
210  
211  
212  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines