Arcane  4.2.3.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
GeomShapeView.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/* GeomShapeView.h (C) 2000-2026 */
9/* */
10/* Gestion des formes géométriques 2D et 3D. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_GEOMETRIC_GEOMSHAPEVIEW_H
13#define ARCANE_GEOMETRIC_GEOMSHAPEVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ITraceMng.h"
18#include "arcane/utils/ArrayView.h"
19#include "arcane/utils/Real3.h"
20
21#include "arcane/core/Item.h"
22
23#include "arcane/geometry/GeometricConnectic.h"
24#include "arcane/geometry/GeomElement.h"
25#include "arcane/geometry/CellConnectivity.h"
26#include "arcane/geometry/GeomShapeMutableView.h"
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31namespace Arcane::geometric
32{
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
41/*!
42 * \ingroup ArcaneGeometric
43 * \brief Vue constante sur une forme géométrique GeomShape.
44 *
45 * Une vue sur une forme géométrique permet de récupérer de manière
46 * optimisée la position des noeuds, des faces et des arêtes (en 3D)
47 * d'un objet géométrique.
48 *
49 * Cette classe gère une vue sur une forme géométrique. Il existe deux
50 * manières d'initialiser une vue:
51 * - en récupérant la vue associée à une maille du maillage via l'appel
52 * à GeomShapeMng::initShape(). Dans ce cas, il est possible de
53 * récupérer la maille associée via la méthode cell().
54 * - à partir d'une instance temporaire de GeomShape
55 * via une des deux méthodes initFromHexa() ou initFromQuad().
56 *
57 */
58class ARCANE_GEOMETRY_EXPORT GeomShapeView
59{
60 friend class GeomShapeMng;
61 friend class GeomShape;
62 friend class GeomShapeConnectivity;
63
64 private:
65
66 static CellConnectivity* global_cell_connectivity[NB_BASIC_ITEM_TYPE];
67 static GeomShapeConnectivity* global_connectivity;
68
69 public:
70
71 static void initializeConnectivity();
72
73 public:
74
75 GeomShapeView()
76 : m_cell_connectivity(global_cell_connectivity[IT_NullType])
77 , m_item_internal(ItemInternal::nullItem())
78 {
79 }
81 public:
83#include "arcane/geometry/GeneratedGeomShapeViewDeclarations.h"
84
85 public:
86
87 //! Remplit \a hexa avec les informations du \a i-ème sous-volume de contrôle
88 void fillSubZoneElement(HexaElementView hexa, Integer i);
89 //! Remplit \a quad avec les informations du \a i-ème sous-volume de contrôle
90 void fillSubZoneElement(QuadElementView quad, Integer i);
91
92 /*!
93 * \deprecated Utiliser GeomShape::initFromHexaedron8() à la place.
94 */
95 ARCANE_DEPRECATED_122 void initFromHexa(HexaElementConstView hexa,GeomShape& geom_cell);
96 /*!
97 * \deprecated Utiliser GeomShape::initFromQuad4() à la place.
98 */
99 ARCANE_DEPRECATED_122 void initFromQuad(QuadElementConstView hexa,GeomShape& geom_cell);
100
101 public:
102
103 /*!
104 * \name Récupération des coordonnées.
105 */
106 //@{
107 //! Position du \a ième noeud de la forme
108 constexpr const Real3 node(Integer i) const { return m_node_ptr[i]; }
109
110 //! Position du centre de la \a ième face de la forme
111 const Real3 face(Integer i) const
112 {
113 return m_face_ptr[i];
114 }
116 //! Position du centre de la forme
117 const Real3 center() const
118 {
119 return *m_center_ptr;
120 }
121
122 //! Position du centre de la \a i-ème arête de la forme
123 inline const Real3 edge(Integer i) const
125 return 0.5 * (node(m_cell_connectivity->m_edge_direct_connectic[(i*2)]) + node(m_cell_connectivity->m_edge_direct_connectic[(i*2)+1]));
126 }
127 //@}
128
129 //! Entité associée (null si aucune)
130 Item item() const { return Item(m_item_internal); }
131 //! Maille associée (null si aucune)
132 Cell cell() const { return Cell(m_item_internal); }
133 //! Face associée (null si aucune)
134 Face face() const { return Face(m_item_internal); }
136 protected:
137
138 void _setArray(const Real3* node_ptr,const Real3* face_ptr,const Real3* center_ptr)
139 {
140 m_node_ptr = node_ptr;
141 m_face_ptr = face_ptr;
142 m_center_ptr = center_ptr;
143 }
144
145 private:
146
147 ARCANE_RESTRICT const Real3* m_node_ptr = nullptr;
148 ARCANE_RESTRICT const Real3* m_face_ptr = nullptr;
149 ARCANE_RESTRICT const Real3* m_center_ptr = nullptr;
150 //! Informations sur la connectivité
151 CellConnectivity* m_cell_connectivity;
152 //! Information sur l'entité d'origine (ItemInternal::nullItem() si aucune)
153 ItemInternal* m_item_internal;
154
155 protected:
156
157 //TODO: A SUPPRIMER
158 constexpr const Real3POD* _nodeView() const { return (Real3POD*)(m_node_ptr); }
159
160 public:
161
162 /*!
163 * \name Informations sur la connectivité.
164 */
165 //@{
166 //! Informations de connectivité aux noeuds.
168 {
169 return m_cell_connectivity->nodeConnectic()[i];
170 }
171
172 //! Informations de connectivité aux arêtes.
175 return m_cell_connectivity->edgeConnectic()[i];
177
178 //! Informations de connectivité aux faces
180 {
181 return m_cell_connectivity->faceConnectic()[i];
183
184 //! Nombre de sous volume de controle
186 {
187 return m_cell_connectivity->nbSubZone();
188 }
189
190 //! Nombre de sous faces internes SVC
192 {
193 return m_cell_connectivity->nbSubZoneFace();
194 }
195
196 //! Numéro local du sommet associé au sous volume de controle
199 return m_cell_connectivity->nodeAssociation()[i];
200 }
201
202 const SVCFaceConnectic& svcFaceConnectic(Integer i) const
203 {
204 return m_cell_connectivity->SCVFaceConnectic()[i];
205 }
206
207 //! Numéro locaux dans le sous-volumes de contrôle
209 {
210 return m_cell_connectivity->m_edge_node_sub_zone_id[i];
211 }
212
213 Integer faceNodeSubZoneId(Integer i) const
214 {
215 return m_cell_connectivity->m_face_node_sub_zone_id[i];
216 }
217 //@}
218
219 /*!
220 * \brief Type géométrique de la forme.
222 * Si la forme est assossiée à une entité (récupérable via item()),
223 * il s'agit aussi du type de l'entité.
224 *
225 * Retourne \a GeomType::NullType si l'instance n'est pas initialisée.
226 */
228 {
229 return m_cell_connectivity->cellType();
230 }
231
232 protected:
233
234 void _setItem(Item item)
235 {
236 m_cell_connectivity = global_cell_connectivity[item.type()];
237 m_item_internal = ItemCompatibility::_itemInternal(item);
238 }
239
240 void _setNullItem(int item_type)
241 {
242 m_item_internal = ItemInternal::nullItem();
243 m_cell_connectivity = global_cell_connectivity[item_type];
244 }
246 private:
247
248};
249
250/*---------------------------------------------------------------------------*/
251/*---------------------------------------------------------------------------*/
252//TODO: Utiliser des Traits pour le nombre de noeuds et le nom du SVC.
253/*---------------------------------------------------------------------------*/
254/*---------------------------------------------------------------------------*/
255/*!
256 * \ingroup ArcaneGeometric
257 * \brief Vue sur forme géométrique 2D.
258 */
259class GeomShape2DView
260: public GeomShapeView
261{
262 public:
263 GeomShape2DView(){}
264 explicit GeomShape2DView(const GeomShapeView& rhs) : GeomShapeView(rhs){}
265};
267/*!
268 * \ingroup ArcaneGeometric
269 * \brief Vue sur forme géométrique 3D.
270 */
271class GeomShape3DView
272: public GeomShapeView
273{
274 public:
275 GeomShape3DView(){}
276 explicit GeomShape3DView(const GeomShapeView& rhs) : GeomShapeView(rhs){}
277};
278
279/*---------------------------------------------------------------------------*/
280/*---------------------------------------------------------------------------*/
282/*---------------------------------------------------------------------------*/
283/*---------------------------------------------------------------------------*/
284
285#include "arcane/geometry/GeneratedGeomShapeView.h"
286
287/*---------------------------------------------------------------------------*/
288/*---------------------------------------------------------------------------*/
289
290}
291
292/*---------------------------------------------------------------------------*/
293/*---------------------------------------------------------------------------*/
294
295//! A supprimer à terme
296#include "arcane/geometry/GeomShape.h"
297
298/*---------------------------------------------------------------------------*/
299/*---------------------------------------------------------------------------*/
300
301#endif
Maille d'un maillage.
Definition Item.h:1214
Face d'une maille.
Definition Item.h:964
Classe de base d'un élément de maillage.
Definition Item.h:83
Classe gérant un vecteur réel de 3 dimensions.
Informations sur la connectivité d'une maille.
Vue constante sur une forme géométrique GeomShape.
const EdgeConnectic & edgeConnectic(Integer i) const
Informations de connectivité aux arêtes.
Integer edgeNodeSubZoneId(Integer i) const
Numéro locaux dans le sous-volumes de contrôle.
const Real3 face(Integer i) const
Position du centre de la ième face de la forme.
GeomType geomType() const
Type géométrique de la forme.
Cell cell() const
Maille associée (null si aucune).
Integer nbSvcFace() const
Nombre de sous faces internes SVC.
ARCANE_DEPRECATED_122 void initFromHexa(HexaElementConstView hexa, GeomShape &geom_cell)
const Real3 edge(Integer i) const
Position du centre de la i-ème arête de la forme.
ARCANE_DEPRECATED_122 void initFromQuad(QuadElementConstView hexa, GeomShape &geom_cell)
Integer nbSubZone() const
Nombre de sous volume de controle.
Face face() const
Face associée (null si aucune).
const Real3 center() const
Position du centre de la forme.
const NodeConnectic & nodeConnectic(Integer i) const
Informations de connectivité aux noeuds.
const FaceConnectic & faceConnectic(Integer i) const
Informations de connectivité aux faces.
void fillSubZoneElement(HexaElementView hexa, Integer i)
Remplit hexa avec les informations du i-ème sous-volume de contrôle.
Integer nodeAssociation(Integer i) const
Numéro local du sommet associé au sous volume de controle.
Item item() const
Entité associée (null si aucune).
constexpr const Real3 node(Integer i) const
Position du ième noeud de la forme.
Forme géométrique.
Definition GeomShape.h:54
Enumération spécifiant le type de polygone ou polyèdre associé à un élément ou une forme géométrique.
Definition GeomType.h:45
Int32 Integer
Type représentant un entier.
Structures de connectique locale des mailles.
Structure de connectique locale.
Structures de connectique locale des mailles.
Structures de connectique locale des mailles et svc.