Arcane  v4.1.1.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
CartesianMeshNumberingMngInternal.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* CartesianMeshNumberingMngInternal.h (C) 2000-2025 */
9/* */
10/* Gestionnaire de numérotation de maillage cartesian. La numérotation */
11/* des mailles et des noeuds est assez classique, la numérotation des faces */
12/* est expliquée (entre autres) dans les méthodes 'faceUniqueId()' et */
13/* 'cellFaceUniqueIds()'. */
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#ifndef ARCANE_CARTESIANMESH_INTERNAL_CARTESIANMESHNUMBERINGMNGINTERNAL_H
18#define ARCANE_CARTESIANMESH_INTERNAL_CARTESIANMESHNUMBERINGMNGINTERNAL_H
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23#include "arcane/cartesianmesh/internal/ICartesianMeshNumberingMngInternal.h"
24
25#include "arcane/utils/TraceAccessor.h"
26#include "arcane/utils/Vector3.h"
27
28#include "arcane/core/Item.h"
29
30#include <unordered_map>
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35namespace Arcane
36{
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
41class CartesianMeshNumberingMngInternal
42: public TraceAccessor
44{
45 public:
46
47 explicit CartesianMeshNumberingMngInternal(IMesh* mesh);
48
49 public:
50
51 void _build() override;
52 void _saveInfosInProperties() override;
53 void _recreateFromDump() override;
54
56
57 void printStatus() override;
58
59 void prepareLevel(Int32 level) override;
60 void updateFirstLevel() override;
61
62 Int64 firstCellUniqueId(Integer level) const override;
63 Int64 firstNodeUniqueId(Integer level) const override;
64 Int64 firstFaceUniqueId(Integer level) const override;
65
66 Int64 globalNbCellsX(Integer level) const override;
67 Int64 globalNbCellsY(Integer level) const override;
68 Int64 globalNbCellsZ(Integer level) const override;
69
70 Int64 globalNbNodesX(Integer level) const override;
71 Int64 globalNbNodesY(Integer level) const override;
72 Int64 globalNbNodesZ(Integer level) const override;
73
74 Int64 globalNbFacesX(Integer level) const override;
75 Int64 globalNbFacesY(Integer level) const override;
76 Int64 globalNbFacesZ(Integer level) const override;
77
78 Int64 globalNbFacesXCartesianView(Integer level) const override;
79 Int64 globalNbFacesYCartesianView(Integer level) const override;
80 Int64 globalNbFacesZCartesianView(Integer level) const override;
81
82 Int64 nbCellInLevel(Integer level) const override;
83 Int64 nbNodeInLevel(Integer level) const override;
84 Int64 nbFaceInLevel(Integer level) const override;
85
86 Integer pattern() const override;
87
88 Int32 cellLevel(Int64 uid) const override;
89 Int32 nodeLevel(Int64 uid) const override;
90 Int32 faceLevel(Int64 uid) const override;
91
92 Int64 offsetLevelToLevel(Int64 coord, Integer level_from, Integer level_to) const override;
93 Int64 faceOffsetLevelToLevel(Int64 coord, Integer level_from, Integer level_to) const override;
94
95 Int64 cellUniqueIdToCoordX(Int64 uid, Integer level) override;
96 Int64 cellUniqueIdToCoordX(Cell cell) override;
97
98 Int64 cellUniqueIdToCoordY(Int64 uid, Integer level) override;
99 Int64 cellUniqueIdToCoordY(Cell cell) override;
100
101 Int64 cellUniqueIdToCoordZ(Int64 uid, Integer level) override;
102 Int64 cellUniqueIdToCoordZ(Cell cell) override;
103
104 Int64 nodeUniqueIdToCoordX(Int64 uid, Integer level) override;
105 Int64 nodeUniqueIdToCoordX(Node node) override;
106
107 Int64 nodeUniqueIdToCoordY(Int64 uid, Integer level) override;
108 Int64 nodeUniqueIdToCoordY(Node node) override;
109
110 Int64 nodeUniqueIdToCoordZ(Int64 uid, Integer level) override;
111 Int64 nodeUniqueIdToCoordZ(Node node) override;
112
113 Int64 faceUniqueIdToCoordX(Int64 uid, Integer level) override;
114 Int64 faceUniqueIdToCoordX(Face face) override;
115
116 Int64 faceUniqueIdToCoordY(Int64 uid, Integer level) override;
117 Int64 faceUniqueIdToCoordY(Face face) override;
118
119 Int64 faceUniqueIdToCoordZ(Int64 uid, Integer level) override;
120 Int64 faceUniqueIdToCoordZ(Face face) override;
121
122 Int64 cellUniqueId(Integer level, Int64x3 cell_coord) override;
123 Int64 cellUniqueId(Integer level, Int64x2 cell_coord) override;
124
125 Int64 nodeUniqueId(Integer level, Int64x3 node_coord) override;
126 Int64 nodeUniqueId(Integer level, Int64x2 node_coord) override;
127
128 Int64 faceUniqueId(Integer level, Int64x3 face_coord) override;
129 Int64 faceUniqueId(Integer level, Int64x2 face_coord) override;
130
131 Integer nbNodeByCell() override;
132 void cellNodeUniqueIds(ArrayView<Int64> uid, Integer level, Int64x3 cell_coord) override;
133 void cellNodeUniqueIds(ArrayView<Int64> uid, Integer level, Int64x2 cell_coord) override;
134 void cellNodeUniqueIds(ArrayView<Int64> uid, Integer level, Int64 cell_uid) override;
135 void cellNodeUniqueIds(ArrayView<Int64> uid, Cell cell) override;
136
137 Integer nbFaceByCell() override;
138 void cellFaceUniqueIds(ArrayView<Int64> uid, Integer level, Int64x3 cell_coord) override;
139 void cellFaceUniqueIds(ArrayView<Int64> uid, Integer level, Int64x2 cell_coord) override;
140 void cellFaceUniqueIds(ArrayView<Int64> uid, Integer level, Int64 cell_uid) override;
141 void cellFaceUniqueIds(ArrayView<Int64> uid, Cell cell) override;
142
143 void cellUniqueIdsAroundCell(ArrayView<Int64> uid, Int64x3 cell_coord, Int32 level) override;
144 void cellUniqueIdsAroundCell(ArrayView<Int64> uid, Int64x2 cell_coord, Int32 level) override;
145 void cellUniqueIdsAroundCell(ArrayView<Int64> uid, Int64 cell_uid, Int32 level) override;
146 void cellUniqueIdsAroundCell(ArrayView<Int64> uid, Cell cell) override;
147
148 void cellUniqueIdsAroundNode(ArrayView<Int64> uid, Int64x3 node_coord, Int32 level) override;
149 void cellUniqueIdsAroundNode(ArrayView<Int64> uid, Int64x2 node_coord, Int32 level) override;
150 void cellUniqueIdsAroundNode(ArrayView<Int64> uid, Int64 node_uid, Int32 level) override;
151 void cellUniqueIdsAroundNode(ArrayView<Int64> uid, Node node) override;
152
153 void setChildNodeCoordinates(Cell parent_cell) override;
154 void setParentNodeCoordinates(Cell parent_cell) override;
155
156 Int64 parentCellUniqueIdOfCell(Int64 uid, Integer level, bool do_fatal) override;
157 Int64 parentCellUniqueIdOfCell(Cell cell, bool do_fatal) override;
158
159 Int64 childCellUniqueIdOfCell(Cell cell, Int64x3 child_coord_in_parent) override;
160 Int64 childCellUniqueIdOfCell(Cell cell, Int64x2 child_coord_in_parent) override;
161 Int64 childCellUniqueIdOfCell(Cell cell, Int64 child_index_in_parent) override;
162
163 Cell childCellOfCell(Cell cell, Int64x3 child_coord_in_parent) override;
164 Cell childCellOfCell(Cell cell, Int64x2 child_coord_in_parent) override;
165
166 Int64 parentNodeUniqueIdOfNode(Int64 uid, Integer level, bool do_fatal) override;
167 Int64 parentNodeUniqueIdOfNode(Node node, bool do_fatal) override;
168
169 Int64 childNodeUniqueIdOfNode(Int64 uid, Integer level) override;
170 Int64 childNodeUniqueIdOfNode(Node node) override;
171
172 Int64 parentFaceUniqueIdOfFace(Int64 uid, Integer level, bool do_fatal) override;
173 Int64 parentFaceUniqueIdOfFace(Face face, bool do_fatal) override;
174
175 Int64 childFaceUniqueIdOfFace(Int64 uid, Integer level, Int64 child_index_in_parent) override;
176 Int64 childFaceUniqueIdOfFace(Face face, Int64 child_index_in_parent) override;
177
178 private:
179
189 Int64x3 _face3DNumberingThreeParts(Integer level) const;
190
191 static void _pushFront(UniqueArray<Int64>& array, Int64 elem);
192
193 private:
194
195 IMesh* m_mesh;
196
197 Ref<Properties> m_properties;
198
199 Integer m_dimension;
200 Integer m_pattern;
201
202 UniqueArray<Int32> m_p_to_l_level;
203 Int32 m_max_level;
204 Int32 m_min_level;
205
206 Int64 m_latest_cell_uid;
207 UniqueArray<Int64> m_first_cell_uid_level;
208
209 Int64 m_latest_node_uid;
210 UniqueArray<Int64> m_first_node_uid_level;
211
212 Int64 m_latest_face_uid;
213 UniqueArray<Int64> m_first_face_uid_level;
214
215 Int64x3 m_nb_cell_ground;
216
217 // Partie conversion numérotation d'origine <-> nouvelle numérotation (face).
218 bool m_converting_numbering_face;
219 Integer m_ori_level;
220 std::unordered_map<Int64, Int64> m_face_ori_numbering_to_new;
221 std::unordered_map<Int64, Int64> m_face_new_numbering_to_ori;
222};
223
224/*---------------------------------------------------------------------------*/
225/*---------------------------------------------------------------------------*/
226
227} // End namespace Arcane
228
229/*---------------------------------------------------------------------------*/
230/*---------------------------------------------------------------------------*/
231
232#endif //ARCANE_CARTESIANMESH_CARTESIANMESHNUMBERINGMNGINTERNAL_H
Vue modifiable d'un tableau d'un type T.
Int64 globalNbFacesY(Integer level) const override
Méthode permettant de récupérer le nombre de faces global en Y d'un niveau.
Int64 firstCellUniqueId(Integer level) const override
Méthode permettant de récupérer le premier unique id utilisé par les mailles d'un niveau....
Int64 firstFaceUniqueId(Integer level) const override
Méthode permettant de récupérer le premier unique id utilisé par les faces d'un niveau....
Int64 nbNodeInLevel(Integer level) const override
Méthode permettant de récupérer le nombre de noeuds total dans un niveau.
void printStatus() override
Méthode permettant de décrire l'état de l'objet.
Int64 nodeUniqueIdToCoordX(Int64 uid, Integer level) override
Méthode permettant de récupérer la coordonnée en X d'un noeud grâce à son uniqueId.
Int64 offsetLevelToLevel(Int64 coord, Integer level_from, Integer level_to) const override
Méthode permettant d'obtenir la position du premier noeud/maille fille à partir de la position du noe...
Int64 cellUniqueIdToCoordY(Int64 uid, Integer level) override
Méthode permettant de récupérer la coordonnée en Y d'une maille grâce à son uniqueId.
Int64 faceUniqueIdToCoordZ(Int64 uid, Integer level) override
Méthode permettant de récupérer la coordonnée en Z d'une face grâce à son uniqueId.
Int64 cellUniqueIdToCoordX(Int64 uid, Integer level) override
Méthode permettant de récupérer la coordonnée en X d'une maille grâce à son uniqueId.
Int64 faceUniqueIdToCoordY(Int64 uid, Integer level) override
Méthode permettant de récupérer la coordonnée en Y d'une face grâce à son uniqueId.
Integer pattern() const override
Méthode permettant de récupérer le pattern de raffinement utilisé dans chaque maille....
Int64 faceUniqueId(Integer level, Int64x3 face_coord) override
Méthode permettant de récupérer l'uniqueId d'une face à partir de sa position et de son niveau.
void setChildNodeCoordinates(Cell parent_cell) override
Méthode permettant de définir les coordonnées spatiales des noeuds des mailles enfants d'une maille p...
Int64 firstNodeUniqueId(Integer level) const override
Méthode permettant de récupérer le premier unique id utilisé par les noeuds d'un niveau....
void prepareLevel(Int32 level) override
Méthode permettant de préparer un nouveau niveau.
Int64 globalNbFacesX(Integer level) const override
Méthode permettant de récupérer le nombre de faces global en X d'un niveau.
Int64 faceUniqueIdToCoordX(Int64 uid, Integer level) override
Méthode permettant de récupérer la coordonnée en X d'une face grâce à son uniqueId.
Int64 globalNbCellsY(Integer level) const override
Méthode permettant de récupérer le nombre de mailles global en Y d'un niveau.
Int64 faceOffsetLevelToLevel(Int64 coord, Integer level_from, Integer level_to) const override
Méthode permettant d'obtenir la position de la première face enfant à partir de la position de la fac...
Int64 globalNbCellsX(Integer level) const override
Méthode permettant de récupérer le nombre de mailles global en X d'un niveau.
Int32 faceLevel(Int64 uid) const override
Méthode permettant de récupérer le niveau d'une face avec son uid.
void updateFirstLevel() override
Méthode permettant de mettre à jour le premier niveau.
Int64 globalNbNodesY(Integer level) const override
Méthode permettant de récupérer le nombre de noeuds global en Y d'un niveau.
void cellNodeUniqueIds(ArrayView< Int64 > uid, Integer level, Int64x3 cell_coord) override
Méthode permettant de récupérer les uniqueIds des noeuds d'une maille à partir de ses coordonnées.
Int64 nodeUniqueId(Integer level, Int64x3 node_coord) override
Méthode permettant de récupérer l'uniqueId d'un noeud à partir de sa position et de son niveau.
Int64 cellUniqueId(Integer level, Int64x3 cell_coord) override
Méthode permettant de récupérer l'uniqueId d'une maille à partir de sa position et de son niveau.
void cellUniqueIdsAroundNode(ArrayView< Int64 > uid, Int64x3 node_coord, Int32 level) override
Méthode permettant de récupérer les uniqueIds des mailles autour d'un noeud.
Int64x3 _face3DNumberingThreeParts(Integer level) const
Méthode permettant de récupérer le nombre de faces des trois parties de la numérotation.
Int64 parentNodeUniqueIdOfNode(Int64 uid, Integer level, bool do_fatal) override
Méthode permettant de récupérer l'uniqueId du parent d'un noeud.
void renumberingFacesLevel0FromOriginalArcaneNumbering() override
Méthode permettant de renuméroter les faces du niveau 0.
Int64 childCellUniqueIdOfCell(Cell cell, Int64x3 child_coord_in_parent) override
Méthode permettant de récupérer l'uniqueId d'une maille enfant d'une maille parent à partir de la pos...
Int64 parentFaceUniqueIdOfFace(Int64 uid, Integer level, bool do_fatal) override
Méthode permettant de récupérer l'uniqueId du parent d'une face.
Int64 globalNbFacesXCartesianView(Integer level) const override
Méthode permettant de récupérer la taille de la vue "grille cartésienne" contenant les faces.
Int64 globalNbFacesZ(Integer level) const override
Méthode permettant de récupérer le nombre de faces global en Z d'un niveau.
Int64 globalNbCellsZ(Integer level) const override
Méthode permettant de récupérer le nombre de mailles global en Z d'un niveau.
Int64 nbFaceInLevel(Integer level) const override
Méthode permettant de récupérer le nombre de faces total dans un niveau.
Int32 cellLevel(Int64 uid) const override
Méthode permettant de récupérer le niveau d'une maille avec son uid.
Int64 childNodeUniqueIdOfNode(Int64 uid, Integer level) override
Méthode permettant de récupérer l'uniqueId d'un noeud enfant d'un noeud parent.
Int64 globalNbFacesYCartesianView(Integer level) const override
Méthode permettant de récupérer la taille de la vue "grille cartésienne" contenant les faces.
Int64 parentCellUniqueIdOfCell(Int64 uid, Integer level, bool do_fatal) override
Méthode permettant de récupérer l'uniqueId du parent d'une maille.
Int64 nbCellInLevel(Integer level) const override
Méthode permettant de récupérer le nombre de mailles total dans un niveau.
Integer nbNodeByCell() override
Méthode permettant de récupérer le nombre de noeuds dans une maille.
Int64 cellUniqueIdToCoordZ(Int64 uid, Integer level) override
Méthode permettant de récupérer la coordonnée en Z d'une maille grâce à son uniqueId.
Int64 nodeUniqueIdToCoordZ(Int64 uid, Integer level) override
Méthode permettant de récupérer la coordonnée en Z d'un noeud grâce à son uniqueId.
Int64 globalNbNodesX(Integer level) const override
Méthode permettant de récupérer le nombre de noeuds global en X d'un niveau.
void setParentNodeCoordinates(Cell parent_cell) override
Méthode permettant de définir les coordonnées spatiales des noeuds d'une maille parent....
Int64 globalNbNodesZ(Integer level) const override
Méthode permettant de récupérer le nombre de noeuds global en Z d'un niveau.
Int64 childFaceUniqueIdOfFace(Int64 uid, Integer level, Int64 child_index_in_parent) override
Méthode permettant de récupérer l'uniqueId d'une face enfant d'une face parent à partir de l'index de...
Integer nbFaceByCell() override
Méthode permettant de récupérer le nombre de faces dans une maille.
void cellFaceUniqueIds(ArrayView< Int64 > uid, Integer level, Int64x3 cell_coord) override
Méthode permettant de récupérer les uniqueIds des faces d'une maille à partir de ses coordonnées.
Int64 globalNbFacesZCartesianView(Integer level) const override
Méthode permettant de récupérer la taille de la vue "grille cartésienne" contenant les faces.
Cell childCellOfCell(Cell cell, Int64x3 child_coord_in_parent) override
Méthode permettant de récupérer une maille enfant d'une maille parent à partir de la position de la m...
Int32 nodeLevel(Int64 uid) const override
Méthode permettant de récupérer le niveau d'un noeud avec son uid.
void cellUniqueIdsAroundCell(ArrayView< Int64 > uid, Int64x3 cell_coord, Int32 level) override
Méthode permettant de récupérer les uniqueIds des mailles autour d'une maille.
Int64 nodeUniqueIdToCoordY(Int64 uid, Integer level) override
Méthode permettant de récupérer la coordonnée en Y d'un noeud grâce à son uniqueId.
Maille d'un maillage.
Definition Item.h:1214
Face d'une maille.
Definition Item.h:964
Interface de gestionnaire de numérotation pour maillage cartesian.
Noeud d'un maillage.
Definition Item.h:582
Référence à une instance.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
std::int32_t Int32
Type entier signé sur 32 bits.