Arcane  v3.14.10.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-2024 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-2024 */
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/core/Item.h"
22
23#include "arcane/utils/TraceAccessor.h"
24
25#include "arcane/cartesianmesh/ICartesianMeshNumberingMng.h"
26
27#include <unordered_map>
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane
33{
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37
39: public TraceAccessor
41{
42 public:
43
44 explicit CartesianMeshNumberingMng(IMesh* mesh);
45
46 public:
47
48 void prepareLevel(Int32 level) override;
49 void updateFirstLevel() override;
50
51 Int64 firstCellUniqueId(Integer level) override;
52 Int64 firstNodeUniqueId(Integer level) override;
53 Int64 firstFaceUniqueId(Integer level) override;
54
55 Int64 globalNbCellsX(Integer level) const override;
56 Int64 globalNbCellsY(Integer level) const override;
57 Int64 globalNbCellsZ(Integer level) const override;
58
59 Int64 globalNbNodesX(Integer level) const override;
60 Int64 globalNbNodesY(Integer level) const override;
61 Int64 globalNbNodesZ(Integer level) const override;
62
63 Int64 globalNbFacesX(Integer level) const override;
64 Int64 globalNbFacesY(Integer level) const override;
65 Int64 globalNbFacesZ(Integer level) const override;
66
67 Int64 globalNbFacesXCartesianView(Integer level) const override;
68 Int64 globalNbFacesYCartesianView(Integer level) const override;
69 Int64 globalNbFacesZCartesianView(Integer level) const override;
70
71 Int64 nbCellInLevel(Integer level) const override;
72 Int64 nbNodeInLevel(Integer level) const override;
73 Int64 nbFaceInLevel(Integer level) const override;
74
75 Integer pattern() const override;
76
77 Int32 cellLevel(Int64 uid) const override;
78 Int32 nodeLevel(Int64 uid) const override;
79 Int32 faceLevel(Int64 uid) const override;
80
81 Int64 offsetLevelToLevel(Int64 coord, Integer level_from, Integer level_to) const override;
82 Int64 faceOffsetLevelToLevel(Int64 coord, Integer level_from, Integer level_to) const override;
83
84 Int64 cellUniqueIdToCoordX(Int64 uid, Integer level) override;
85 Int64 cellUniqueIdToCoordX(Cell cell) override;
86
87 Int64 cellUniqueIdToCoordY(Int64 uid, Integer level) override;
88 Int64 cellUniqueIdToCoordY(Cell cell) override;
89
90 Int64 cellUniqueIdToCoordZ(Int64 uid, Integer level) override;
91 Int64 cellUniqueIdToCoordZ(Cell cell) override;
92
93 Int64 nodeUniqueIdToCoordX(Int64 uid, Integer level) override;
94 Int64 nodeUniqueIdToCoordX(Node node) override;
95
96 Int64 nodeUniqueIdToCoordY(Int64 uid, Integer level) override;
97 Int64 nodeUniqueIdToCoordY(Node node) override;
98
99 Int64 nodeUniqueIdToCoordZ(Int64 uid, Integer level) override;
100 Int64 nodeUniqueIdToCoordZ(Node node) override;
101
102 Int64 faceUniqueIdToCoordX(Int64 uid, Integer level) override;
103 Int64 faceUniqueIdToCoordX(Face face) override;
104
105 Int64 faceUniqueIdToCoordY(Int64 uid, Integer level) override;
106 Int64 faceUniqueIdToCoordY(Face face) override;
107
108 Int64 faceUniqueIdToCoordZ(Int64 uid, Integer level) override;
109 Int64 faceUniqueIdToCoordZ(Face face) override;
110
111 Int64 cellUniqueId(Integer level, Int64x3 cell_coord) override;
112 Int64 cellUniqueId(Integer level, Int64x2 cell_coord) override;
113
114 Int64 nodeUniqueId(Integer level, Int64x3 node_coord) override;
115 Int64 nodeUniqueId(Integer level, Int64x2 node_coord) override;
116
117 Int64 faceUniqueId(Integer level, Int64x3 face_coord) override;
118 Int64 faceUniqueId(Integer level, Int64x2 face_coord) override;
119
120 Integer nbNodeByCell() override;
121 void cellNodeUniqueIds(ArrayView<Int64> uid, Integer level, Int64x3 cell_coord) override;
122 void cellNodeUniqueIds(ArrayView<Int64> uid, Integer level, Int64x2 cell_coord) override;
123 void cellNodeUniqueIds(ArrayView<Int64> uid, Integer level, Int64 cell_uid) override;
124
125 Integer nbFaceByCell() override;
126 void cellFaceUniqueIds(ArrayView<Int64> uid, Integer level, Int64x3 cell_coord) override;
127 void cellFaceUniqueIds(ArrayView<Int64> uid, Integer level, Int64x2 cell_coord) override;
128 void cellFaceUniqueIds(ArrayView<Int64> uid, Integer level, Int64 cell_uid) override;
129
130 void cellUniqueIdsAroundCell(ArrayView<Int64> uid, Int64 cell_uid, Int32 level) override;
131 void cellUniqueIdsAroundCell(ArrayView<Int64> uid, Cell cell) override;
132
133 void setChildNodeCoordinates(Cell parent_cell) override;
134 void setParentNodeCoordinates(Cell parent_cell) override;
135
136 Int64 parentCellUniqueIdOfCell(Int64 uid, Integer level, bool do_fatal) override;
137 Int64 parentCellUniqueIdOfCell(Cell cell, bool do_fatal) override;
138
139 Int64 childCellUniqueIdOfCell(Cell cell, Int64x3 child_coord_in_parent) override;
140 Int64 childCellUniqueIdOfCell(Cell cell, Int64x2 child_coord_in_parent) override;
141 Int64 childCellUniqueIdOfCell(Cell cell, Int64 child_index_in_parent) override;
142
143 Cell childCellOfCell(Cell cell, Int64x3 child_coord_in_parent) override;
144 Cell childCellOfCell(Cell cell, Int64x2 child_coord_in_parent) override;
145
146 Int64 parentNodeUniqueIdOfNode(Int64 uid, Integer level, bool do_fatal) override;
147 Int64 parentNodeUniqueIdOfNode(Node node, bool do_fatal) override;
148
149 Int64 childNodeUniqueIdOfNode(Int64 uid, Integer level) override;
150 Int64 childNodeUniqueIdOfNode(Node node) override;
151
152 Int64 parentFaceUniqueIdOfFace(Int64 uid, Integer level, bool do_fatal) override;
153 Int64 parentFaceUniqueIdOfFace(Face face, bool do_fatal) override;
154
155 Int64 childFaceUniqueIdOfFace(Int64 uid, Integer level, Int64 child_index_in_parent) override;
156 Int64 childFaceUniqueIdOfFace(Face face, Int64 child_index_in_parent) override;
157
158 private:
159
160 /*!
161 * \brief Méthode permettant de récupérer le nombre de faces des trois parties de la numérotation.
162 *
163 * En effet, pour numéroter en 3D, on numérote d'abord les faces xy, puis les faces yz et enfin
164 * les faces zx. Cette méthode permet de récupérer le nombre de faces {xy, yz, zx}.
165 *
166 * \param level Le niveau de la numérotation.
167 * \return Le nombre de faces {xy, yz, zx}.
168 */
169 Int64x3 face3DNumberingThreeParts(Integer level) const;
170
171 private:
172
173 IMesh* m_mesh;
174
175 Integer m_dimension;
176 Integer m_pattern;
177
178 UniqueArray<Int32> m_p_to_l_level;
179 Int32 m_max_level;
180 Int32 m_min_level;
181
182 Int64 m_latest_cell_uid;
183 UniqueArray<Int64> m_first_cell_uid_level;
184
185 Int64 m_latest_node_uid;
186 UniqueArray<Int64> m_first_node_uid_level;
187
188 Int64 m_latest_face_uid;
189 UniqueArray<Int64> m_first_face_uid_level;
190
191 Int64x3 m_nb_cell;
192
193 // Partie conversion numérotation d'origine <-> nouvelle numérotation (face).
194 bool m_converting_numbering_face;
195 Integer m_ori_level;
196 std::unordered_map<Int64, Int64> m_face_ori_numbering_to_new;
197 std::unordered_map<Int64, Int64> m_face_new_numbering_to_ori;
198};
199
200/*---------------------------------------------------------------------------*/
201/*---------------------------------------------------------------------------*/
202
203} // End namespace Arcane
204
205/*---------------------------------------------------------------------------*/
206/*---------------------------------------------------------------------------*/
207
208#endif //ARCANE_CARTESIANMESH_CARTESIANMESHNUMBERINGMNG_H
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:1178
Face d'une maille.
Definition Item.h:932
Noeud d'un maillage.
Definition Dom.h:204
Classe gérant un vecteur de dimension 2 de type T.
Definition Vector2.h:36
Vue modifiable d'un tableau d'un type T.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-