14#include "arcane/IMesh.h"
16#include "arcane/AbstractItemOperationByBasicType.h"
18#include "arcane/geometric/BarycentricGeomShapeComputer.h"
19#include "arcane/geometric/GeomShapeMng.h"
25GEOMETRIC_BEGIN_NAMESPACE
32template <>
void BarycentricGeomShapeComputer::
33compute<GeomType::Quad4>(GeomShapeMutableView elem)
35 const Real3 nul_vector = Real3(0.,0.,0.);
40 for( Integer i = 0; i<4; ++i ){
43 elem.setCenter(0.25 * c);
46 _setFace2D(0, elem, 0 , 1);
47 _setFace2D(1, elem, 1 , 2);
48 _setFace2D(2, elem, 2 , 3);
49 _setFace2D(3, elem, 3 , 0);
55void BarycentricGeomShapeComputer::
68template <>
void BarycentricGeomShapeComputer::
79 elem.setCenter(c / 3.0);
82 _setFace2D(0, elem, 0 , 1);
83 _setFace2D(1, elem, 1 , 2);
84 _setFace2D(2, elem, 2 , 0);
86 elem.setFace(3, elem.node(0));
94void BarycentricGeomShapeComputer::
105template <>
void BarycentricGeomShapeComputer::
111 Real3 c = nul_vector;
116 elem.setCenter(0.125 * c);
119 _setFace3D(0, elem, 0 , 3 , 2 , 1);
120 _setFace3D(1, elem, 0 , 4 , 7 , 3);
121 _setFace3D(2, elem, 0 , 1 , 5 , 4);
122 _setFace3D(3, elem, 4 , 5 , 6 , 7);
123 _setFace3D(4, elem, 1 , 2 , 6 , 5);
124 _setFace3D(5, elem, 2 , 3 , 7 , 6);
130void BarycentricGeomShapeComputer::
141template<>
void BarycentricGeomShapeComputer::
147 Real3 c = nul_vector;
151 elem.setCenter(0.2 * c);
154 _setFace3D(0, elem, 0, 3, 2, 1);
155 _setFace3D(1, elem, 0, 4, 3);
156 _setFace3D(2, elem, 0, 1, 4);
157 _setFace3D(3, elem, 1, 2, 4);
158 _setFace3D(4, elem, 2, 3, 4);
161 elem.setFace(5, elem.node(4));
167void BarycentricGeomShapeComputer::
178template<>
void BarycentricGeomShapeComputer::
184 Real3 c = nul_vector;
189 elem.setCenter( (1./6.) * c );
191 _setFace3D(0, elem, 0, 2, 1);
192 _setFace3D(1, elem, 0, 3, 5, 2);
193 _setFace3D(2, elem, 0, 1, 4, 3);
194 _setFace3D(3, elem, 3, 4, 5);
195 _setFace3D(4, elem, 1, 2, 5, 4);
201void BarycentricGeomShapeComputer::
212template<>
void BarycentricGeomShapeComputer::
218 Real3 c = nul_vector;
220 for(
Integer i = 0; i<4; ++i ){
224 elem.setCenter(0.25 * c);
226 _setFace3D(0, elem, 0, 2, 1);
227 _setFace3D(1, elem, 0, 3, 2);
228 _setFace3D(2, elem, 0, 1, 3);
229 _setFace3D(3, elem, 3, 1, 2);
235void BarycentricGeomShapeComputer::
246template<>
void BarycentricGeomShapeComputer::
252 Real3 c = nul_vector;
254 for(
Integer i = 0; i<10; ++i )
258 elem.setCenter( 0.1 * c );
260 elem.setFace(0, 0.2 * ( elem.node(0) + elem.node(4) + elem.node(3) + elem.node(2) + elem.node(1) ));
261 elem.setFace(1, 0.2 * ( elem.node(5) + elem.node(6) + elem.node(7) + elem.node(8) + elem.node(9) ));
263 _setFace3D(2, elem, 0, 1, 6, 5);
264 _setFace3D(3, elem, 1, 2, 7, 6);
265 _setFace3D(4, elem, 2, 3, 8, 7);
266 _setFace3D(5, elem, 3, 4, 9, 8);
267 _setFace3D(6, elem, 4, 0, 5, 9);
273void BarycentricGeomShapeComputer::
284template<>
void BarycentricGeomShapeComputer::
290 Real3 c = nul_vector;
292 for(
Integer i = 0; i<12; ++i ){
296 elem.setCenter( (1./12.) * c );
298 elem.setFace(0, (1./6.) * ( elem.node(0) + elem.node(5) + elem.node( 4) + elem.node( 3) + elem.node( 2) + elem.node( 1) ));
299 elem.setFace(1, (1./6.) * ( elem.node(6) + elem.node(7) + elem.node( 8) + elem.node( 9) + elem.node(10) + elem.node(11) ));
300 _setFace3D(2, elem, 0, 1, 7, 6);
301 _setFace3D(3, elem, 1, 2, 8, 7);
302 _setFace3D(4, elem, 2, 3, 9, 8);
303 _setFace3D(5, elem, 3, 4, 10, 9);
304 _setFace3D(6, elem, 4, 5, 11, 10);
305 _setFace3D(7, elem, 5, 0, 6, 11);
311void BarycentricGeomShapeComputer::
320void BarycentricGeomShapeComputer::
342class BarycentricGeomShapeComputerByType
349 : m_shape_mng(shape_mng), m_node_coords(node_coords)
353 template<GeomType ItemType>
void
366 ARCANE_UNUSED(cells);
371 ARCANE_UNUSED(cells);
376 ARCANE_UNUSED(cells);
381 ARCANE_UNUSED(cells);
387 _applyGeneric<GeomType::Quad4>(cells);
391 _applyGeneric<GeomType::Triangle3>(cells);
396 _applyGeneric<GeomType::Hexaedron8>(cells);
401 _applyGeneric<GeomType::Pyramid5>(cells);
406 _applyGeneric<GeomType::Pentaedron6>(cells);
411 _applyGeneric<GeomType::Tetraedron4>(cells);
416 _applyGeneric<GeomType::Heptaedron10>(cells);
421 _applyGeneric<GeomType::Octaedron12>(cells);
429void BarycentricGeomShapeComputer::
439GEOMETRIC_END_NAMESPACE
Opérateur abstrait sur des entités rangées par type.
Exception lorsqu'une erreur fatale est survenue.
void applyOperation(IItemOperationByBasicType *operation) const
Applique l'opération operation sur les entités du groupe.
Vue sur un vecteur d'entités.
Int16 type() const
Type de l'entité
Classe gérant un vecteur de réel de dimension 3.
static void computeTetraedron4(GeomShapeMutableView elem)
Calcul des positions des noeuds d'une maille tétraédrique.
static void computeOctaedron12(GeomShapeMutableView elem)
Calcul des positions des noeuds d'une maille prismatique à base hexagonale.
static void setNodes(GeomShapeMutableView elem, const VariableNodeReal3 &node_coord, Cell cell)
Remplit les informations des noeuds de la maille cell avec les coordonnées de node_coord.
static void computeTriangle3(GeomShapeMutableView elem)
Calcul des positions des noeuds d'une maille triangulaire.
static void computeQuad4(GeomShapeMutableView elem)
Calcul des positions des noeuds d'une maille quadrangulaire.
static void computeHeptaedron10(GeomShapeMutableView elem)
Calcul des positions des noeuds d'une maille prismatique à base pentagonale.
static void compute(GeomShapeMutableView elem)
Méthode template.
static void computePentaedron6(GeomShapeMutableView elem)
Calcul des positions des noeuds d'une maille pentaédrique.
static void computePyramid5(GeomShapeMutableView elem)
Calcul des positions des noeuds d'une maille pyramidale.
static void computeHexaedron8(GeomShapeMutableView elem)
Calcul des positions des noeuds d'une maille hexaédrique.
Classe gérant les GeomShape des mailles d'un maillage.
Vue modifiable sur un GeomShape.
Enumération spécifiant le type de polygone ou polyèdre associé à un élément ou une forme géométrique.
@ Octaedron12
Prisme à base hexagonale.
@ Heptaedron10
Prisme à base pentagonale.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
Int32 Integer
Type représentant un entier.