# | Line 40 | Line 40 | |
---|---|---|
40 | * | |
41 | * Triangle.hpp | |
42 | * | |
43 | < | * Purpose: Provide facets from hull to oopse |
43 | > | * Purpose: Provide basic triangle class for oopse. 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: Triangle.hpp,v 1.5 2009-05-13 22:27:29 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 | ||
# | Line 71 | Line 72 | namespace oopse { | |
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 | < | |
128 | > | |
129 | Vector3d getFacetVelocity(){ | |
130 | return facetVelocity_; | |
131 | } | |
# | Line 112 | Line 134 | namespace oopse { | |
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 |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |