Arcane  v3.14.10.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-2023 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-2023 */
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/Item.h"
22
23#include "arcane/geometric/GeometricConnectic.h"
24#include "arcane/geometric/GeomElement.h"
25#include "arcane/geometric/CellConnectivity.h"
26#include "arcane/geometric/GeomShapeMutableView.h"
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31namespace Arcane::geometric
32{
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37class GeomShapeConnectivity;
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_CEA_GEOMETRIC_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
76 : m_node_ptr(0), m_face_ptr(0), m_center_ptr(0),
77 m_cell_connectivity(global_cell_connectivity[IT_NullType]),
78 m_item_internal(ItemInternal::nullItem())
79 {
80 }
81
82 public:
83
84#include "arcane/geometric/GeneratedGeomShapeViewDeclarations.h"
85
86 public:
87
88 //! Remplit \a hexa avec les informations du \a i-ème sous-volume de contrôle
89 void fillSubZoneElement(HexaElementView hexa, Integer i);
90 //! Remplit \a quad avec les informations du \a i-ème sous-volume de contrôle
91 void fillSubZoneElement(QuadElementView quad, Integer i);
92
93 /*!
94 * \deprecated Utiliser GeomShape::initFromHexaedron8() à la place.
95 */
96 ARCANE_DEPRECATED_122 void initFromHexa(HexaElementConstView hexa,GeomShape& geom_cell);
97 /*!
98 * \deprecated Utiliser GeomShape::initFromQuad4() à la place.
99 */
100 ARCANE_DEPRECATED_122 void initFromQuad(QuadElementConstView hexa,GeomShape& geom_cell);
101
102 public:
103
104 /*!
105 * \name Récupération des coordonnées.
106 */
107 //@{
108 //! Position du \a ième noeud de la forme
109 const Real3 node(Integer i) const
110 {
111 return m_node_ptr[i];
112 }
113
114 //! Position du centre de la \a ième face de la forme
115 const Real3 face(Integer i) const
116 {
117 return m_face_ptr[i];
118 }
119
120 //! Position du centre de la forme
121 const Real3 center() const
122 {
123 return *m_center_ptr;
124 }
125
126 //! Position du centre de la \a i-ème arête de la forme
127 inline const Real3 edge(Integer i) const
128 {
129 return 0.5 * (node(m_cell_connectivity->m_edge_direct_connectic[(i*2)]) + node(m_cell_connectivity->m_edge_direct_connectic[(i*2)+1]));
130 }
131 //@}
132
133 //! Entité associée (null si aucune)
134 Item item() const { return Item(m_item_internal); }
135 //! Maille associée (null si aucune)
136 Cell cell() const { return Cell(m_item_internal); }
137 //! Face associée (null si aucune)
138 Face face() const { return Face(m_item_internal); }
139
140 protected:
141
142 void _setArray(const Real3* node_ptr,const Real3* face_ptr,const Real3* center_ptr)
143 {
144 m_node_ptr = node_ptr;
145 m_face_ptr = face_ptr;
146 m_center_ptr = center_ptr;
147 }
148
149 private:
150
151 ARCANE_RESTRICT const Real3* m_node_ptr;
152 ARCANE_RESTRICT const Real3* m_face_ptr;
153 ARCANE_RESTRICT const Real3* m_center_ptr;
154 //! Informations sur la connectivité
155 CellConnectivity* m_cell_connectivity;
156 //! Information sur l'entité d'origine (ItemInternal::nullItem() si aucune)
157 ItemInternal* m_item_internal;
158
159 protected:
160
161 //TODO: A SUPPRIMER
162 const Real3POD* _nodeView() const { return (Real3POD*)m_node_ptr; }
163
164 public:
165
166
167 public:
168 /*!
169 * \name Informations sur la connectivité.
170 */
171 //@{
172 //! Informations de connectivité aux noeuds.
173 const NodeConnectic& nodeConnectic(Integer i) const
174 {
175 return m_cell_connectivity->nodeConnectic()[i];
176 }
177
178 //! Informations de connectivité aux arêtes.
179 const EdgeConnectic& edgeConnectic(Integer i) const
180 {
181 return m_cell_connectivity->edgeConnectic()[i];
182 }
183
184 //! Informations de connectivité aux faces
185 const FaceConnectic& faceConnectic(Integer i) const
186 {
187 return m_cell_connectivity->faceConnectic()[i];
188 }
189
190 //! Nombre de sous volume de controle
191 Integer nbSubZone() const
192 {
193 return m_cell_connectivity->nbSubZone();
194 }
195
196 //! Nombre de sous faces internes SVC
197 Integer nbSvcFace() const
198 {
199 return m_cell_connectivity->nbSubZoneFace();
200 }
201
202 //! Numéro local du sommet associé au sous volume de controle
203 Integer nodeAssociation(Integer i) const
204 {
205 return m_cell_connectivity->nodeAssociation()[i];
206 }
207
208 const SVCFaceConnectic& svcFaceConnectic(Integer i) const
209 {
210 return m_cell_connectivity->SCVFaceConnectic()[i];
211 }
212
213 //! Numéro locaux dans le sous-volumes de contrôle
214 Integer edgeNodeSubZoneId(Integer i) const
215 {
216 return m_cell_connectivity->m_edge_node_sub_zone_id[i];
217 }
218
219 Integer faceNodeSubZoneId(Integer i) const
220 {
221 return m_cell_connectivity->m_face_node_sub_zone_id[i];
222 }
223 //@}
224
225 /*!
226 * \brief Type géométrique de la forme.
227 *
228 * Si la forme est assossiée à une entité (récupérable via item()),
229 * il s'agit aussi du type de l'entité.
230 *
231 * Retourne \a GeomType::NullType si l'instance n'est pas initialisée.
232 */
234 {
235 return m_cell_connectivity->cellType();
236 }
237
238 protected:
239
240 void _setItem(Item item)
241 {
242 m_cell_connectivity = global_cell_connectivity[item.type()];
243 m_item_internal = ItemCompatibility::_itemInternal(item);
244 }
245
246 void _setNullItem(int item_type)
247 {
248 m_item_internal = ItemInternal::nullItem();
249 m_cell_connectivity = global_cell_connectivity[item_type];
250 }
251
252 private:
253
254};
255
256/*---------------------------------------------------------------------------*/
257/*---------------------------------------------------------------------------*/
258//TODO: Utiliser des Traits pour le nombre de noeuds et le nom du SVC.
259/*---------------------------------------------------------------------------*/
260/*---------------------------------------------------------------------------*/
261/*!
262 * \ingroup ArcaneGeometric
263 * \brief Vue sur forme géométrique 2D.
264 */
266: public GeomShapeView
267{
268 public:
270 explicit GeomShape2DView(const GeomShapeView& rhs) : GeomShapeView(rhs){}
271};
272
273/*!
274 * \ingroup ArcaneGeometric
275 * \brief Vue sur forme géométrique 3D.
276 */
278: public GeomShapeView
279{
280 public:
282 explicit GeomShape3DView(const GeomShapeView& rhs) : GeomShapeView(rhs){}
283};
284
285/*---------------------------------------------------------------------------*/
286/*---------------------------------------------------------------------------*/
287
288/*---------------------------------------------------------------------------*/
289/*---------------------------------------------------------------------------*/
290
291#include "arcane/geometric/GeneratedGeomShapeView.h"
292
293/*---------------------------------------------------------------------------*/
294/*---------------------------------------------------------------------------*/
295
296}
297
298/*---------------------------------------------------------------------------*/
299/*---------------------------------------------------------------------------*/
300
301//! A supprimer à terme
302#include "arcane/geometric/GeomShape.h"
303
304/*---------------------------------------------------------------------------*/
305/*---------------------------------------------------------------------------*/
306
307#endif
Maille d'un maillage.
Definition Item.h:1178
Face d'une maille.
Definition Item.h:932
Classe de base d'un élément de maillage.
Definition Item.h:83
Int16 type() const
Type de l'entité
Definition Item.h:232
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Informations sur la connectivité d'une maille.
Vue sur forme géométrique 2D.
Vue sur forme géométrique 3D.
Classe gérant les GeomShape des mailles d'un maillage.
Vue constante sur une forme géométrique GeomShape.
const EdgeConnectic & edgeConnectic(Integer i) const
Informations de connectivité aux arêtes.
const Real3 node(Integer i) const
Position du ième noeud de la forme.
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.
const Real3 edge(Integer i) const
Position du centre de la i-ème arête de la forme.
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.
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)
Forme géométrique.
Definition GeomShape.h:55
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
Vue constante sur les éléments géométriques de type GeomType::Hexaedron8.
Vue modifiable sur les éléments géométriques de type GeomType::Hexaedron8.
Vue constante sur les éléments géométriques de type GeomType::Quad4.
Vue modifiable sur les éléments géométriques de type GeomType::Quad4.
Structures de connectique locale des mailles.
Structure de connectique locale.
Structures de connectique locale des mailles.
Structures de connectique locale des mailles et svc.