Arcane  v4.1.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
GeomShapeMng.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* GeomShapeMng.h (C) 2000-2026 */
9/* */
10/* Classe gérant les GeomShape d'un maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_GEOMETRIC_GEOMSHAPEMNG_H
13#define ARCANE_GEOMETRIC_GEOMSHAPEMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/VariableTypes.h"
18
19#include "arcane/geometry/GeomShapeView.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane::geometric
25{
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31/*!
32 * \ingroup ArcaneGeometric
33 * \brief Classe gérant les GeomShape des mailles d'un maillage.
34 *
35 * Cette classe stocke les informations des formes géométriques (GeomShape) associées
36 * aux mailles du maillage. Pour une maille, la récupération d'une vue se fait
37 * via la méthode initShape():
38 \code
39 GeomShapeMng shape_mng;
40 Cell cell;
41 GeomShapeView shape_view;
42 // Initialise la vue \a shape_view sur la maille \a cell
43 shape_mng.initShape(shape_view,cell);
44 \endcode
45 *
46 * Une vue peut-être utilisée plusieurs fois. Par exemple, si on souhaite
47 * itérer sur plusieurs mailles:
48 \code
49 * GeomShapeMng shape_mng;
50 * GeomShapeView shape_view;
51 * ENUMERATE_CELL(icell,allCells()){
52 * Cell cell = *icell;
53 * // Initialise la vue \a shape_view sur la maille \a cell
54 * shape_mng.initShape(shape_view,cell);
55 * info() << "Node0=" << shape_view.node(0);
56 * }
57 \endcode
58
59 * La vue récupérée par GeomShapeView est constante. Pour récupérer une
60 * vue modifiable, il faut utiliser mutableShapeView(). La vue modifiable
61 * sert uniquement à mettre à jour les différentes
62 * coordonnées (noeuds, centre des faces, ...).
63 *
64 * Avant de pouvoir utiliser une des méthodes initShape() ou mutableShapeView(),
65 * il faut initialiser une des instance par l'appel à initialize().
66 * L'initialisation effectue uniquement l'allocation mémoire mais ne met pas à jour
67 * les coordonnées.
68 * \warning La méthode initialize() doit aussi être appelée lorsque la topologie
69 * du maillage change, par exemple après un ajout ou suppression de maille.
70 *
71 * Cette classe gère uniquement les données sur les formes géométriques et
72 * ces dernières sont indépendantes des autres variables. Cela signifie
73 * que si les coordonnées d'un noeud du maillage change, il faut explicitement
74 * remettre à jour les informations de la forme géométrique. %Arcane fournit
75 * la classe BarycentricGeomShapeComputer pour cela mais l'utilisateur
76 * peut calculer ces informations d'une autre manière qu'en utilisant le barycentre.
77 *
78 * Toutes les instances de cette classe dont le nom name() est identique
79 * sont implicitement partagées et donc fournissent les mêmes GeomShapeView.
80 * Par exemple:
81 \code
82 IMesh* mesh;
83 GeomShapeMng shape_mng(mesh,"GenericElement");
84 GeomShapeMng shape_mng2(shape_mng);
85 // shape_mng et shape_mng2 partagent les mêmes GeomShapeView
86
87 GeomShapeMng shape_mng3(mesh,"AleGenericElement");
88 // shape_mng et shape_mng3 utilisent des valeurs différentes.
89 \endcode
90 *
91 */
92class ARCANE_GEOMETRY_EXPORT GeomShapeMng
93{
94 // NOTE:
95 // Comme cette classe peut-être utilisée par copie ou créée directement
96 // via des noms de variable, elle ne doit pas contenir de champs
97 // autres que des variables Arcane pour qu'il n'y ait pas d'incohérences
98 // entre les différentes instances.
99
100 public:
101
102 //! Initialise pour le maillage \a mesh avec le nom \a name
103 GeomShapeMng(IMesh* mesh,const String& name);
104 //! Initialise pour le maillage \a mesh avec le nom par défaut \a GenericElement
105 GeomShapeMng(IMesh* mesh);
106 //! Constructeur de recopie.
107 GeomShapeMng(const GeomShapeMng& rhs);
108
109 public:
110
111 //! Indique si l'instance est initialisée.
112 bool isInitialized() const { return m_cell_shape_nodes.arraySize()!=0; }
113
114 /*!
115 * \brief Initialise l'instance.
116 *
117 * Il n'y a besoin d'initialiser qu'une seule fois les instances qui
118 * ont le même nom.
119 */
120 void initialize();
121
122 //! Initialise la vue \a ge avec les informations de la maille \a cell
123 void initShape(GeomShapeView& ge,Cell cell) const
124 {
125 ge._setArray(m_cell_shape_nodes[cell].data(),m_cell_shape_faces[cell].data(),&m_cell_shape_centers[cell]);
126 ge._setItem(cell);
127 }
128
129 //! Retourne une vue modifiable sur la GeomShape de la maille \a cell
131 {
132 return GeomShapeMutableView(m_cell_shape_nodes[cell].data(),m_cell_shape_faces[cell].data(),&m_cell_shape_centers[cell]);
133 }
134
135 //! Nom du gestionnaire.
136 const String& name() const { return m_name; }
137
138 private:
139
140 String m_name;
141 VariableCellArrayReal3 m_cell_shape_nodes; //!< Elements génériques noeuds
142 VariableCellArrayReal3 m_cell_shape_faces; //!< Elements génériques face
143 VariableCellReal3 m_cell_shape_centers; //!< Elements génériques centre
144};
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
148
149typedef GeomShapeMng GeomCellMng;
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
153
154} // namespace Arcane::geometric
155
156/*---------------------------------------------------------------------------*/
157/*---------------------------------------------------------------------------*/
158
159#endif
Maille d'un maillage.
Definition Item.h:1214
Chaîne de caractères unicode.
GeomShapeMng(IMesh *mesh, const String &name)
Initialise pour le maillage mesh avec le nom name.
GeomShapeMutableView mutableShapeView(Cell cell)
Retourne une vue modifiable sur la GeomShape de la maille cell.
bool isInitialized() const
Indique si l'instance est initialisée.
void initShape(GeomShapeView &ge, Cell cell) const
Initialise la vue ge avec les informations de la maille cell.
const String & name() const
Nom du gestionnaire.
Vue modifiable sur un GeomShape.
Vue constante sur une forme géométrique GeomShape.
MeshVariableScalarRefT< Cell, Real3 > VariableCellReal3
Grandeur au centre des mailles de type coordonnées.
MeshVariableArrayRefT< Cell, Real3 > VariableCellArrayReal3
Grandeur au centre des mailles de type tableau de coordonnées.