32class Euclidian3Geometry
41 virtual ~Euclidian3Geometry() {}
87 IComputeLine(Euclidian3Geometry* geom)
89 , m_coords(geom->m_coords)
91 virtual ~IComputeLine() {}
93 Euclidian3Geometry* m_geom;
97 struct ComputeLine2 :
public IComputeLine
99 ComputeLine2(Euclidian3Geometry* geom)
105 struct IComputeSurface
107 IComputeSurface(Euclidian3Geometry* geom)
109 , m_coords(geom->m_coords)
111 virtual ~IComputeSurface() {}
112 virtual void computeOrientedMeasureAndCenter(
const ItemWithNodes& item,
Real3& orientation,
Real3& center) = 0;
113 Euclidian3Geometry* m_geom;
117 struct ComputeTriangle3
118 :
public IComputeSurface
120 ComputeTriangle3(Euclidian3Geometry* geom)
121 : IComputeSurface(geom)
126 struct ComputeQuad4 :
public IComputeSurface
128 ComputeQuad4(Euclidian3Geometry* geom)
129 : IComputeSurface(geom)
134 struct ComputePentagon5 :
public IComputeSurface
136 ComputePentagon5(Euclidian3Geometry* geom)
137 : IComputeSurface(geom)
142 struct ComputeHexagon6 :
public IComputeSurface
144 ComputeHexagon6(Euclidian3Geometry* geom)
145 : IComputeSurface(geom)
150 struct IComputeVolume
152 IComputeVolume(Euclidian3Geometry* geom)
154 , m_coords(geom->m_coords)
156 virtual ~IComputeVolume() {}
157 virtual void computeOrientedMeasureAndCenter(
const ItemWithNodes& item,
Real& measure,
Real3& center) = 0;
159 Euclidian3Geometry* m_geom;
163 struct ComputeTetraedron4 :
public IComputeVolume
165 ComputeTetraedron4(Euclidian3Geometry* geom)
166 : IComputeVolume(geom)
172 struct ComputeHeptaedron10 :
public IComputeVolume
174 ComputeHeptaedron10(Euclidian3Geometry* geom)
175 : IComputeVolume(geom)
180 ARCANE_UNUSED(measure);
181 ARCANE_UNUSED(center);
192 struct ComputeOctaedron12
193 :
public IComputeVolume
195 ComputeOctaedron12(Euclidian3Geometry* geom)
196 : IComputeVolume(geom)
201 ARCANE_UNUSED(measure);
202 ARCANE_UNUSED(center);
213 struct ComputeGenericVolume :
public IComputeVolume
215 ComputeGenericVolume(Euclidian3Geometry* geom)
216 : IComputeVolume(geom)
239 static inline Real computeTriangleSurface(
const Real3& n0,
const Real3& n1,
const Real3& n2)
246 return (n0 + n1 + n2) / 3.0;
249 static inline Real computeTetraedronVolume(
const Real3& n0,
const Real3& n1,
const Real3& n2,
const Real3& n3)
254 static inline Real3 computeTetraedronCenter(
const Real3& n0,
const Real3& n1,
const Real3& n2,
const Real3& n3)
256 return 0.25 * (n0 + n1 + n2 + n3);
259 static inline Real3 computeQuadrilateralCenter(
const Real3& n0,
const Real3& n1,
const Real3& n2,
const Real3& n3)
261 const Real s0 = computeTriangleSurface(n0, n1, n2);
262 const Real s1 = computeTriangleSurface(n0, n2, n3);
263 const Real s2 = computeTriangleSurface(n1, n2, n3);
264 const Real s3 = computeTriangleSurface(n0, n1, n3);
265 return (s0 * computeTriangleCenter(n0, n1, n2) +
266 s1 * computeTriangleCenter(n0, n2, n3) +
267 s2 * computeTriangleCenter(n1, n2, n3) +
268 s3 * computeTriangleCenter(n0, n1, n3)) /
272 static inline Real3 computePentagonalCenter(
const Real3& n0,
const Real3& n1,
const Real3& n2,
const Real3& n3,
const Real3& n4)
274 const Real s0 = computeTriangleSurface(n4, n0, n1);
275 const Real s1 = computeTriangleSurface(n0, n1, n2);
276 const Real s2 = computeTriangleSurface(n1, n2, n3);
277 const Real s3 = computeTriangleSurface(n2, n3, n4);
278 const Real s4 = computeTriangleSurface(n3, n4, n0);
279 const Real s5 = computeTriangleSurface(n0, n2, n3);
280 const Real s6 = computeTriangleSurface(n1, n3, n4);
281 const Real s7 = computeTriangleSurface(n2, n4, n0);
282 const Real s8 = computeTriangleSurface(n3, n0, n1);
283 const Real s9 = computeTriangleSurface(n4, n1, n2);
285 return (2 * (s0 * computeTriangleCenter(n4, n0, n1) + s1 * computeTriangleCenter(n0, n1, n2) + s2 * computeTriangleCenter(n1, n2, n3) + s3 * computeTriangleCenter(n2, n3, n4) + s4 * computeTriangleCenter(n3, n4, n0)) +
286 s5 * computeTriangleCenter(n0, n2, n3) +
287 s6 * computeTriangleCenter(n1, n3, n4) +
288 s7 * computeTriangleCenter(n2, n4, n0) +
289 s8 * computeTriangleCenter(n3, n0, n1) +
290 s9 * computeTriangleCenter(n4, n1, n2)) /
291 (2 * (s0 + s1 + s2 + s3 + s4) + s5 + s6 + s7 + s8 + s9);
294 static inline Real3 computeHexagonalCenter(
const Real3& n0,
const Real3& n1,
const Real3& n2,
const Real3& n3,
const Real3& n4,
const Real3& n5)
296 const Real s0 = computeTriangleSurface(n0, n1, n5);
297 const Real s1 = computeTriangleSurface(n1, n2, n3);
298 const Real s2 = computeTriangleSurface(n3, n4, n5);
299 const Real s3 = computeTriangleSurface(n1, n3, n5);
300 const Real s4 = computeTriangleSurface(n0, n1, n2);
301 const Real s5 = computeTriangleSurface(n2, n3, n4);
302 const Real s6 = computeTriangleSurface(n4, n5, n0);
303 const Real s7 = computeTriangleSurface(n0, n2, n4);
305 return (s0 * computeTriangleCenter(n0, n1, n5) +
306 s1 * computeTriangleCenter(n1, n2, n3) +
307 s2 * computeTriangleCenter(n3, n4, n5) +
308 s3 * computeTriangleCenter(n1, n3, n5) +
309 s4 * computeTriangleCenter(n0, n1, n2) +
310 s5 * computeTriangleCenter(n2, n3, n4) +
311 s6 * computeTriangleCenter(n4, n5, n0) +
312 s7 * computeTriangleCenter(n0, n2, n4)) /
313 (s0 + s1 + s2 + s3 + s4 + s5 + s6 + s7);