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.