Arcane  v3.14.10.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);
70 static void computeTetraedron4(GeomShapeMutableView elem);
71 static void computePyramid5(GeomShapeMutableView elem);
72 static void computePentaedron6(GeomShapeMutableView elem);
73 static void computeHexaedron8(GeomShapeMutableView elem);
74 static void computeHeptaedron10(GeomShapeMutableView elem);
75 static void computeOctaedron12(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:1178
Node node(Int32 i) const
i-ème noeud de l'entité
Definition Item.h:768
Int32 nbNode() const
Nombre de noeuds de l'entité
Definition Item.h:765
Calcul des GeomShape en utilisant les barycentres.
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 compute(GeomShapeMutableView elem)
Méthode template.
Classe gérant les GeomShape des mailles d'un maillage.
Vue modifiable sur un GeomShape.