Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
BarycentricGeomShapeComputer.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* BarycentricGeomShapeComputer.h (C) 2000-2016 */
9/* */
10/* Calcul des GeomShape en utilisant les barycentres. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_GEOMETRIC_BARYCENTRICGEOMSHAPECOMPUTER_H
13#define ARCANE_GEOMETRIC_BARYCENTRICGEOMSHAPECOMPUTER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/VariableTypes.h"
18
19#include "arcane/geometric/GeomShapeView.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24ARCANE_BEGIN_NAMESPACE
25GEOMETRIC_BEGIN_NAMESPACE
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32/*!
33 * \ingroup ArcaneGeometric
34 * \brief Calcul des GeomShape en utilisant les barycentres.
35 *
36 * Cette classe permet de mettre à jour les coordonnées des noeuds
37 * d'un GeomShape et de calculer son centre et le centre de ses faces
38 * en utilisant la formule du barycentre. Ces coordonnées doivent
39 * être remises à jour dès qu'un des noeuds du maillage se déplace.
40 *
41 * Toutes les méthodes de cette classe sont statiques et il n'est donc
42 * pas utile de créer des instances.
43 *
44 * Il existe plusieurs manières de mettre à jour:
45 * - via computeAll(GeomShapeMng& shape_mng,VariableNodeReal3& coords,const CellGroup& cells),
46 * auquel cas tous les GeomShape des mailles de \a cells sont mise à jour. C'est
47 * la méthode la plus performante si on doit mettre à jour un grand nombre de
48 * mailles.
49 * - via computeAll(GeomShapeMutableView elem,const VariableNodeReal3& coords,Cell cell)
50 * si on souhaite mettre à jour maille par maille.
51 */
52class ARCANE_CEA_GEOMETRIC_EXPORT BarycentricGeomShapeComputer
53{
54 public:
55
56 //! Calcul les informations pour la maille \a cell
57 static void computeAll(GeomShapeMutableView elem,const VariableNodeReal3& coords,Cell cell);
58
59 //! Calcul les informations pour les mailles du groupe \a cells
60 static void computeAll(GeomShapeMng& shape_mng,VariableNodeReal3& coords,const CellGroup& cells);
61
62 /*!
63 * \name Calcul du centre et des centres des faces par type de maille
64 *
65 * Les coordonnées des noeuds de \a elem doivent déjà avoir été positionnées.
66 */
67 ///@{
68 static void computeTriangle3(GeomShapeMutableView elem);
69 static void computeQuad4(GeomShapeMutableView elem);
71 static void computePyramid5(GeomShapeMutableView elem);
76 ///@}
77
78 /*!
79 * \brief Méthode template.
80 *
81 * Le paramètre template \a ItemType doit correspondre à un des types
82 * suivants: GeomType::Triangle3, GeomType::Quad4, GeomType::Tetraedron4, GeomType::Pyramid5,
83 * GeomType::Pentaedron6, GeomType::Hexaedron8, GeomType::Heptaedron10, GeomType::Octaedron12.
84 *
85 * Les coordonnées des noeuds de \a elem doivent déjà avoir été positionnées,
86 * par exemple via l'appel à setNodes().
87 *
88 * L'appel se fait en spécifiant le type de maille tel que défini dans ArcaneTypes.h.
89 * Par exemple, pour un Quad4:
90 \code
91 Cell cell = ...;
92 GeomShapeMng shape_mng = ...;
93 GeomShapeMutableView shape_view(shape_mng.mutableShapeView(cell));
94 BarycentricGeomShapeComputer::compute<GeomType::Quad4>(shape_view);
95 \endcode
96 */
97 template<GeomType ItemType> static
99
100 //! Remplit les informations des noeuds de la maille \a cell avec les coordonnées de \a node_coord.
101 static void setNodes(GeomShapeMutableView elem,const VariableNodeReal3& node_coord,Cell cell)
102 {
103 Integer nb_node = cell.nbNode();
104 for( Integer node_id=0; node_id<nb_node; ++node_id){
105 elem.setNode(node_id,node_coord[cell.node(node_id)]);
106 }
107 }
108
109 private:
110
111 inline static void
112 _setFace3D(Integer fid,GeomShapeMutableView& elem,Integer id1,Integer id2,Integer id3,Integer id4)
113 {
114 elem.setFace(fid, 0.25 * ( elem.node(id1) + elem.node(id2) + elem.node(id3) + elem.node(id4) ));
115 }
116
117 inline static void
118 _setFace3D(Integer fid,GeomShapeMutableView& elem,Integer id1,Integer id2,Integer id3)
119 {
120 elem.setFace(fid, (1.0/3.0) * ( elem.node(id1) + elem.node(id2) + elem.node(id3) ));
121 }
122
123 inline static void
124 _setFace2D(Integer fid,GeomShapeMutableView& elem,Integer id1,Integer id2)
125 {
126 elem.setFace(fid,
127 Real3( 0.5 * ( elem.node(id1).x + elem.node(id2).x ),
128 0.5 * ( elem.node(id1).y + elem.node(id2).y ),
129 0.0));
130 }
131};
132
133/*---------------------------------------------------------------------------*/
134/*---------------------------------------------------------------------------*/
135
136GEOMETRIC_END_NAMESPACE
137ARCANE_END_NAMESPACE
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
142#endif
Maille d'un maillage.
Definition Item.h:1191
Node node(Int32 i) const
i-ème noeud de l'entité
Definition Item.h:779
Int32 nbNode() const
Nombre de noeuds de l'entité
Definition Item.h:776
Calcul des GeomShape en utilisant les barycentres.
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 computeAll(GeomShapeMutableView elem, const VariableNodeReal3 &coords, Cell cell)
Calcul les informations pour la maille cell.
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.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
Definition ItemTypes.h:183
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
Int32 Integer
Type représentant un entier.