Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CartesianMeshNumberingMng.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/* CartesianMeshNumberingMng.h (C) 2000-2025 */
9/* */
10/* Gestionnaire de numérotation de maillage cartesian. La numérotation */
11/* utilisée ici est la même que celle utilisée dans la renumérotation V2. */
12/*---------------------------------------------------------------------------*/
13/*---------------------------------------------------------------------------*/
14
15#ifndef ARCANE_CARTESIANMESH_CARTESIANMESHNUMBERINGMNG_H
16#define ARCANE_CARTESIANMESH_CARTESIANMESHNUMBERINGMNG_H
17
18/*---------------------------------------------------------------------------*/
19/*---------------------------------------------------------------------------*/
20
21#include "arcane/cartesianmesh/ICartesianMeshNumberingMng.h"
22
23#include "arcane/utils/TraceAccessor.h"
24#include "arcane/utils/Vector3.h"
25
26#include "arcane/core/Item.h"
27
28#include <unordered_map>
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33namespace Arcane
34{
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38
39class CartesianMeshNumberingMng
40: public TraceAccessor
42{
43 public:
44
45 explicit CartesianMeshNumberingMng(IMesh* mesh);
46
47 public:
48
49 void prepareLevel(Int32 level) override;
50 void updateFirstLevel() override;
51
52 Int64 firstCellUniqueId(Integer level) override;
53 Int64 firstNodeUniqueId(Integer level) override;
54 Int64 firstFaceUniqueId(Integer level) override;
55
56 Int64 globalNbCellsX(Integer level) const override;
57 Int64 globalNbCellsY(Integer level) const override;
58 Int64 globalNbCellsZ(Integer level) const override;
59
60 Int64 globalNbNodesX(Integer level) const override;
61 Int64 globalNbNodesY(Integer level) const override;
62 Int64 globalNbNodesZ(Integer level) const override;
63
64 Int64 globalNbFacesX(Integer level) const override;
65 Int64 globalNbFacesY(Integer level) const override;
66 Int64 globalNbFacesZ(Integer level) const override;
67
68 Int64 globalNbFacesXCartesianView(Integer level) const override;
69 Int64 globalNbFacesYCartesianView(Integer level) const override;
70 Int64 globalNbFacesZCartesianView(Integer level) const override;
71
72 Int64 nbCellInLevel(Integer level) const override;
73 Int64 nbNodeInLevel(Integer level) const override;
74 Int64 nbFaceInLevel(Integer level) const override;
75
76 Integer pattern() const override;
77
78 Int32 cellLevel(Int64 uid) const override;
79 Int32 nodeLevel(Int64 uid) const override;
80 Int32 faceLevel(Int64 uid) const override;
81
82 Int64 offsetLevelToLevel(Int64 coord, Integer level_from, Integer level_to) const override;
83 Int64 faceOffsetLevelToLevel(Int64 coord, Integer level_from, Integer level_to) const override;
84
85 Int64 cellUniqueIdToCoordX(Int64 uid, Integer level) override;
86 Int64 cellUniqueIdToCoordX(Cell cell) override;
87
88 Int64 cellUniqueIdToCoordY(Int64 uid, Integer level) override;
89 Int64 cellUniqueIdToCoordY(Cell cell) override;
90
91 Int64 cellUniqueIdToCoordZ(Int64 uid, Integer level) override;
92 Int64 cellUniqueIdToCoordZ(Cell cell) override;
93
94 Int64 nodeUniqueIdToCoordX(Int64 uid, Integer level) override;
95 Int64 nodeUniqueIdToCoordX(Node node) override;
96
97 Int64 nodeUniqueIdToCoordY(Int64 uid, Integer level) override;
98 Int64 nodeUniqueIdToCoordY(Node node) override;
99
100 Int64 nodeUniqueIdToCoordZ(Int64 uid, Integer level) override;
101 Int64 nodeUniqueIdToCoordZ(Node node) override;
102
103 Int64 faceUniqueIdToCoordX(Int64 uid, Integer level) override;
104 Int64 faceUniqueIdToCoordX(Face face) override;
105
106 Int64 faceUniqueIdToCoordY(Int64 uid, Integer level) override;
107 Int64 faceUniqueIdToCoordY(Face face) override;
108
109 Int64 faceUniqueIdToCoordZ(Int64 uid, Integer level) override;
110 Int64 faceUniqueIdToCoordZ(Face face) override;
111
112 Int64 cellUniqueId(Integer level, Int64x3 cell_coord) override;
113 Int64 cellUniqueId(Integer level, Int64x2 cell_coord) override;
114
115 Int64 nodeUniqueId(Integer level, Int64x3 node_coord) override;
116 Int64 nodeUniqueId(Integer level, Int64x2 node_coord) override;
117
118 Int64 faceUniqueId(Integer level, Int64x3 face_coord) override;
119 Int64 faceUniqueId(Integer level, Int64x2 face_coord) override;
120
121 Integer nbNodeByCell() override;
122 void cellNodeUniqueIds(ArrayView<Int64> uid, Integer level, Int64x3 cell_coord) override;
123 void cellNodeUniqueIds(ArrayView<Int64> uid, Integer level, Int64x2 cell_coord) override;
124 void cellNodeUniqueIds(ArrayView<Int64> uid, Integer level, Int64 cell_uid) override;
125
126 Integer nbFaceByCell() override;
127 void cellFaceUniqueIds(ArrayView<Int64> uid, Integer level, Int64x3 cell_coord) override;
128 void cellFaceUniqueIds(ArrayView<Int64> uid, Integer level, Int64x2 cell_coord) override;
129 void cellFaceUniqueIds(ArrayView<Int64> uid, Integer level, Int64 cell_uid) override;
130
131 void cellUniqueIdsAroundCell(ArrayView<Int64> uid, Int64 cell_uid, Int32 level) override;
132 void cellUniqueIdsAroundCell(ArrayView<Int64> uid, Cell cell) override;
133
134 void setChildNodeCoordinates(Cell parent_cell) override;
135 void setParentNodeCoordinates(Cell parent_cell) override;
136
137 Int64 parentCellUniqueIdOfCell(Int64 uid, Integer level, bool do_fatal) override;
138 Int64 parentCellUniqueIdOfCell(Cell cell, bool do_fatal) override;
139
140 Int64 childCellUniqueIdOfCell(Cell cell, Int64x3 child_coord_in_parent) override;
141 Int64 childCellUniqueIdOfCell(Cell cell, Int64x2 child_coord_in_parent) override;
142 Int64 childCellUniqueIdOfCell(Cell cell, Int64 child_index_in_parent) override;
143
144 Cell childCellOfCell(Cell cell, Int64x3 child_coord_in_parent) override;
145 Cell childCellOfCell(Cell cell, Int64x2 child_coord_in_parent) override;
146
147 Int64 parentNodeUniqueIdOfNode(Int64 uid, Integer level, bool do_fatal) override;
148 Int64 parentNodeUniqueIdOfNode(Node node, bool do_fatal) override;
149
150 Int64 childNodeUniqueIdOfNode(Int64 uid, Integer level) override;
151 Int64 childNodeUniqueIdOfNode(Node node) override;
152
153 Int64 parentFaceUniqueIdOfFace(Int64 uid, Integer level, bool do_fatal) override;
154 Int64 parentFaceUniqueIdOfFace(Face face, bool do_fatal) override;
155
156 Int64 childFaceUniqueIdOfFace(Int64 uid, Integer level, Int64 child_index_in_parent) override;
157 Int64 childFaceUniqueIdOfFace(Face face, Int64 child_index_in_parent) override;
158
159 private:
160
161 /*!
162 * \brief Méthode permettant de récupérer le nombre de faces des trois parties de la numérotation.
163 *
164 * En effet, pour numéroter en 3D, on numérote d'abord les faces xy, puis les faces yz et enfin
165 * les faces zx. Cette méthode permet de récupérer le nombre de faces {xy, yz, zx}.
166 *
167 * \param level Le niveau de la numérotation.
168 * \return Le nombre de faces {xy, yz, zx}.
169 */
170 Int64x3 face3DNumberingThreeParts(Integer level) const;
171
172 private:
173
174 IMesh* m_mesh;
175
176 Integer m_dimension;
177 Integer m_pattern;
178
179 UniqueArray<Int32> m_p_to_l_level;
180 Int32 m_max_level;
181 Int32 m_min_level;
182
183 Int64 m_latest_cell_uid;
184 UniqueArray<Int64> m_first_cell_uid_level;
185
186 Int64 m_latest_node_uid;
187 UniqueArray<Int64> m_first_node_uid_level;
188
189 Int64 m_latest_face_uid;
190 UniqueArray<Int64> m_first_face_uid_level;
191
192 Int64x3 m_nb_cell;
193
194 // Partie conversion numérotation d'origine <-> nouvelle numérotation (face).
195 bool m_converting_numbering_face;
196 Integer m_ori_level;
197 std::unordered_map<Int64, Int64> m_face_ori_numbering_to_new;
198 std::unordered_map<Int64, Int64> m_face_new_numbering_to_ori;
199};
200
201/*---------------------------------------------------------------------------*/
202/*---------------------------------------------------------------------------*/
203
204} // End namespace Arcane
205
206/*---------------------------------------------------------------------------*/
207/*---------------------------------------------------------------------------*/
208
209#endif //ARCANE_CARTESIANMESH_CARTESIANMESHNUMBERINGMNG_H
Vue modifiable d'un tableau d'un type T.
Int64 parentCellUniqueIdOfCell(Int64 uid, Integer level, bool do_fatal) override
Méthode permettant de récupérer l'uniqueId du parent d'une maille.
Int32 nodeLevel(Int64 uid) const override
Méthode permettant de récupérer le niveau d'un noeud avec son uid.
Int64 parentNodeUniqueIdOfNode(Int64 uid, Integer level, bool do_fatal) override
Méthode permettant de récupérer l'uniqueId du parent d'un noeud.
Int64 globalNbNodesX(Integer level) const override
Méthode permettant de récupérer le nombre de noeuds global en X d'un niveau.
Int64 nbFaceInLevel(Integer level) const override
Méthode permettant de récupérer le nombre de faces total dans un niveau.
void prepareLevel(Int32 level) override
Méthode permettant de préparer un nouveau niveau.
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.
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.
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 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 firstFaceUniqueId(Integer level) 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.
Integer nbNodeByCell() override
Méthode permettant de récupérer le nombre de noeuds dans une maille.
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.
void updateFirstLevel() override
Méthode permettant de mettre à jour le premier niveau.
Int64 globalNbCellsX(Integer level) const override
Méthode permettant de récupérer le nombre de mailles global en X d'un niveau.
void cellUniqueIdsAroundCell(ArrayView< Int64 > uid, Int64 cell_uid, Int32 level) override
Méthode permettant de récupérer les uniqueIds des mailles autour de la maille passée en paramètre.
Integer pattern() const override
Méthode permettant de récupérer le pattern de raffinement utilisé dans chaque maille....
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.
Int32 cellLevel(Int64 uid) const override
Méthode permettant de récupérer le niveau d'une maille avec son uid.
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 globalNbFacesX(Integer level) const override
Méthode permettant de récupérer le nombre de faces global en X 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 globalNbNodesY(Integer level) const override
Méthode permettant de récupérer le nombre de noeuds global en Y d'un niveau.
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 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 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.
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...
Integer nbFaceByCell() override
Méthode permettant de récupérer le nombre de faces dans une maille.
Int64 globalNbNodesZ(Integer level) const override
Méthode permettant de récupérer le nombre de noeuds 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 childNodeUniqueIdOfNode(Int64 uid, Integer level) override
Méthode permettant de récupérer l'uniqueId d'un noeud enfant d'un noeud parent.
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 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.
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 firstNodeUniqueId(Integer level) override
Méthode permettant de récupérer le premier unique id utilisé par les noeuds d'un niveau....
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...
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 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 nbCellInLevel(Integer level) const override
Méthode permettant de récupérer le nombre de mailles total dans un niveau.
Int64 globalNbFacesY(Integer level) const override
Méthode permettant de récupérer le nombre de faces global en Y 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...
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.
Int32 faceLevel(Int64 uid) const override
Méthode permettant de récupérer le niveau d'une face avec son uid.
Int64 globalNbCellsY(Integer level) const override
Méthode permettant de récupérer le nombre de mailles global en Y d'un niveau.
Int64 globalNbFacesZ(Integer level) const override
Méthode permettant de récupérer le nombre de faces global en Z d'un niveau.
Int64 parentFaceUniqueIdOfFace(Int64 uid, Integer level, bool do_fatal) override
Méthode permettant de récupérer l'uniqueId du parent d'une face.
void setParentNodeCoordinates(Cell parent_cell) override
Méthode permettant de définir les coordonnées spatiales des noeuds d'une maille parent....
Int64 globalNbFacesYCartesianView(Integer level) const override
Méthode permettant de récupérer la taille de la vue "grille cartésienne" contenant les noeuds.
Int64 globalNbFacesXCartesianView(Integer level) const override
Méthode permettant de récupérer la taille de la vue "grille cartésienne" contenant les noeuds.
Int64 firstCellUniqueId(Integer level) override
Méthode permettant de récupérer le premier unique id utilisé par les mailles d'un niveau....
Int64 globalNbFacesZCartesianView(Integer level) const override
Méthode permettant de récupérer la taille de la vue "grille cartésienne" contenant les noeuds.
Maille d'un maillage.
Definition Item.h:1191
Face d'une maille.
Definition Item.h:944
Noeud d'un maillage.
Definition Item.h:573
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.