Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
src/arcane/cartesianmesh/NodeDirectionMng.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* NodeDirectionMng.cc (C) 2000-2022 */
9/* */
10/* Infos sur les noeuds d'une direction X Y ou Z d'un maillage structuré. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CARTESIANMESH_NODEDIRECTIONMNG_H
13#define ARCANE_CARTESIANMESH_NODEDIRECTIONMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18#include "arcane/Item.h"
19#include "arcane/ItemEnumerator.h"
20#include "arcane/VariableTypedef.h"
21#include "arcane/IndexedItemConnectivityView.h"
22
23#include "arcane/cartesianmesh/CartesianMeshGlobal.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
40class ARCANE_CARTESIANMESH_EXPORT DirNode
41{
42 friend NodeDirectionMng;
43 friend class DirNodeLocalId;
44
45 private:
46
47 typedef signed char IndexType;
48 static constexpr IndexType NULL_CELL = -1;
49
51 {
52 public:
53
54 ARCCORE_HOST_DEVICE IndexType operator[](Int32 i) const
55 {
56 ARCANE_CHECK_AT(i, 8);
57 return m_indexes[i];
58 }
59
60 public:
61
62 IndexType m_indexes[8];
63 };
64
65 private:
66
67 // Seul NodeDirectionMng à le droit de construire un DirNode.
68 DirNode(Node current, Node next, Node prev, DirNodeCellIndex idx)
69 : m_current(current)
70 , m_previous(prev)
71 , m_next(next)
72 , m_cell_index(idx)
73 {}
74
75 public:
76
78 Node previous() const { return m_previous; }
80 NodeLocalId previousId() const { return m_previous.itemLocalId(); }
82 Node next() const { return m_next; }
84 NodeLocalId nextId() const { return m_next.itemLocalId(); }
92 Int32 cellIndex(Int32 position) const { return m_cell_index[position]; }
99 CellLocalId cellId(Int32 position) const
100 {
101 Int32 x = cellIndex(position);
102 return (x == NULL_CELL) ? CellLocalId(NULL_ITEM_LOCAL_ID) : CellLocalId(m_current.cellId(x));
103 }
110 Cell cell(Int32 position) const
111 {
112 Int32 x = cellIndex(position);
113 return (x == NULL_CELL) ? Cell() : Cell(m_current.cell(x));
114 }
115
117 Cell nextLeftCell() const { return cell(CNP_NextLeft); }
119 Cell nextRightCell() const { return cell(CNP_NextRight); }
121 Cell previousRightCell() const { return cell(CNP_PreviousRight); }
123 Cell previousLeftCell() const { return cell(CNP_PreviousLeft); }
124
126 CellLocalId nextLeftCellId() const { return cellId(CNP_NextLeft); }
128 CellLocalId nextRightCellId() const { return cellId(CNP_NextRight); }
130 CellLocalId previousRightCellId() const { return cellId(CNP_PreviousRight); }
132 CellLocalId previousLeftCellId() const { return cellId(CNP_PreviousLeft); }
133
135 Cell topNextLeftCell() const { return cell(CNP_TopNextLeft); }
137 Cell topNextRightCell() const { return cell(CNP_TopNextRight); }
139 Cell topPreviousRightCell() const { return cell(CNP_TopPreviousRight); }
141 Cell topPreviousLeftCell() const { return cell(CNP_TopPreviousLeft); }
142
144 CellLocalId topNextLeftCellId() const { return cellId(CNP_TopNextLeft); }
146 CellLocalId topNextRightCellId() const { return cellId(CNP_TopNextRight); }
148 CellLocalId topPreviousRightCellId() const { return cellId(CNP_TopPreviousRight); }
150 CellLocalId topPreviousLeftCellId() const { return cellId(CNP_TopPreviousLeft); }
151
152 private:
153
154 Node m_current;
155 Node m_previous;
156 Node m_next;
157 DirNodeCellIndex m_cell_index;
158};
159
160/*---------------------------------------------------------------------------*/
161/*---------------------------------------------------------------------------*/
169class ARCANE_CARTESIANMESH_EXPORT DirNodeLocalId
170{
171 friend NodeDirectionMng;
172
173 private:
174
175 typedef signed char IndexType;
176 static constexpr IndexType NULL_CELL = -1;
177
178 private:
179
180 // Seul NodeDirectionMng à le droit de construire un DirNode.
181 ARCCORE_HOST_DEVICE DirNodeLocalId(NodeLocalId current, NodeLocalId next, NodeLocalId prev,
184 : m_current(current)
185 , m_previous(prev)
186 , m_next(next)
187 , m_cell_index(idx)
188 , m_view(view)
189 {}
190
191 public:
192
194 ARCCORE_HOST_DEVICE NodeLocalId previous() const { return m_previous; }
196 ARCCORE_HOST_DEVICE NodeLocalId previousId() const { return m_previous; }
198 ARCCORE_HOST_DEVICE NodeLocalId next() const { return m_next; }
200 ARCCORE_HOST_DEVICE NodeLocalId nextId() const { return m_next; }
208 ARCCORE_HOST_DEVICE Int32 cellIndex(Int32 position) const { return m_cell_index[position]; }
215 ARCCORE_HOST_DEVICE CellLocalId cellId(Int32 position) const
216 {
217 Int32 x = cellIndex(position);
218 return (x == NULL_CELL) ? CellLocalId(NULL_ITEM_LOCAL_ID) : m_view.cellId(m_current, x);
219 }
220
222 ARCCORE_HOST_DEVICE CellLocalId nextLeftCellId() const { return cellId(CNP_NextLeft); }
224 ARCCORE_HOST_DEVICE CellLocalId nextRightCellId() const { return cellId(CNP_NextRight); }
226 ARCCORE_HOST_DEVICE CellLocalId previousRightCellId() const { return cellId(CNP_PreviousRight); }
228 ARCCORE_HOST_DEVICE CellLocalId previousLeftCellId() const { return cellId(CNP_PreviousLeft); }
229
231 ARCCORE_HOST_DEVICE CellLocalId topNextLeftCellId() const { return cellId(CNP_TopNextLeft); }
233 ARCCORE_HOST_DEVICE CellLocalId topNextRightCellId() const { return cellId(CNP_TopNextRight); }
235 ARCCORE_HOST_DEVICE CellLocalId topPreviousRightCellId() const { return cellId(CNP_TopPreviousRight); }
237 ARCCORE_HOST_DEVICE CellLocalId topPreviousLeftCellId() const { return cellId(CNP_TopPreviousLeft); }
238
239 private:
240
241 NodeLocalId m_current;
242 NodeLocalId m_previous;
243 NodeLocalId m_next;
244 DirNode::DirNodeCellIndex m_cell_index;
246};
247
248/*---------------------------------------------------------------------------*/
249/*---------------------------------------------------------------------------*/
255class ARCANE_CARTESIANMESH_EXPORT NodeDirectionMng
256{
257 friend CartesianMeshImpl;
258 friend CartesianMeshPatch;
259 class Impl;
262
263 private:
264
266 {
267 public:
268
274 ItemDirectionInfo() = default;
276 : m_next_lid(next_lid)
277 , m_previous_lid(prev_lid)
278 {}
279
280 public:
281
286
287 public:
288
289 void setCellIndexes(IndexType idx[8])
290 {
291 for (int i = 0; i < 8; ++i)
292 m_cell_index.m_indexes[i] = idx[i];
293 }
294 DirNodeCellIndex m_cell_index;
295 };
296
297 public:
298
305
306 public:
307
310 {
311 return _node(n.localId());
312 }
313
316 {
317 return _node(n.localId());
318 }
319
322 {
323 return _node(n.localId());
324 }
325
327 ARCCORE_HOST_DEVICE DirNodeLocalId dirNodeId(NodeLocalId n) const
328 {
329 return _dirNodeId(n);
330 }
331
333 NodeGroup allNodes() const;
334
341 NodeGroup innerNodes() const;
342
349 NodeGroup outerNodes() const;
350
353 {
354 return _node(n.localId());
355 }
356
359 {
360 return _node(n.localId());
361 }
362
365 {
366 return _node(inode.itemLocalId());
367 }
368
371 {
372 return m_direction;
373 }
374
375 protected:
376
384 void _internalComputeInfos(const CellDirectionMng& cell_dm, const NodeGroup& all_nodes,
386
391 void _internalInit(ICartesianMesh* cm, eMeshDirection dir, Integer patch_index);
392
397 void _internalDestroy();
398
404 void _internalResizeInfos(Int32 new_size);
405
406 private:
407
408 SmallSpan<ItemDirectionInfo> m_infos_view;
409 NodeInfoListView m_nodes;
410 eMeshDirection m_direction;
411 IndexedNodeCellConnectivityView m_node_cell_view;
412 Impl* m_p;
413
414 private:
415
417 DirNode _node(Int32 local_id) const
418 {
419 ItemDirectionInfo d = m_infos_view[local_id];
420 return DirNode(m_nodes[local_id], m_nodes[d.m_next_lid], m_nodes[d.m_previous_lid], d.m_cell_index);
421 }
422
424 ARCCORE_HOST_DEVICE DirNodeLocalId _dirNodeId(NodeLocalId local_id) const
425 {
426 ItemDirectionInfo d = m_infos_view[local_id.localId()];
427 return DirNodeLocalId(local_id, d.m_next_lid, d.m_previous_lid, d.m_cell_index, m_node_cell_view);
428 }
429
430 void _computeNodeCellInfos(const CellDirectionMng& cell_dm,
432 void _filterNodes();
433};
434
435/*---------------------------------------------------------------------------*/
436/*---------------------------------------------------------------------------*/
437
438} // End namespace Arcane
439
440/*---------------------------------------------------------------------------*/
441/*---------------------------------------------------------------------------*/
442
443#endif
444
Infos spécifiques à un maillage cartésien.
Informations par direction pour chaque genre d'entité du maillage.
Infos sur les mailles d'une direction spécifique X,Y ou Z d'un maillage structuré.
Maille d'un maillage.
Definition Item.h:1178
Noeud avant et après un noeud suivant une direction.
ARCCORE_HOST_DEVICE NodeLocalId previous() const
Maille avant.
ARCCORE_HOST_DEVICE CellLocalId topNextRightCellId() const
Noeud devant à droite dans la direction.
ARCCORE_HOST_DEVICE CellLocalId nextRightCellId() const
Noeud devant à droite dans la direction.
ARCCORE_HOST_DEVICE NodeLocalId nextId() const
Maille après.
ARCCORE_HOST_DEVICE NodeLocalId next() const
Maille après.
ARCCORE_HOST_DEVICE CellLocalId nextLeftCellId() const
Noeud devant à gauche dans la direction.
ARCCORE_HOST_DEVICE Int32 cellIndex(Int32 position) const
Indice dans la liste des mailles de ce noeud d'une maille en fonction de sa position.
ARCCORE_HOST_DEVICE CellLocalId topPreviousRightCellId() const
Noeud derrière à droite dans la direction.
ARCCORE_HOST_DEVICE CellLocalId cellId(Int32 position) const
Indice local d'une maille en fonction de sa position par rapport à ce noeud.
ARCCORE_HOST_DEVICE CellLocalId previousRightCellId() const
Noeud derrière à droite dans la direction.
ARCCORE_HOST_DEVICE NodeLocalId previousId() const
Maille avant.
ARCCORE_HOST_DEVICE CellLocalId topPreviousLeftCellId() const
Noeud derrière à gauche dans la direction.
ARCCORE_HOST_DEVICE CellLocalId previousLeftCellId() const
Noeud derrière à gauche dans la direction.
ARCCORE_HOST_DEVICE CellLocalId topNextLeftCellId() const
Noeud devant à gauche dans la direction.
Noeud avant et après un noeud suivant une direction.
CellLocalId topNextRightCellId() const
Noeud devant à droite dans la direction.
NodeLocalId previousId() const
Maille avant.
CellLocalId previousLeftCellId() const
Noeud derrière à gauche dans la direction.
Cell cell(Int32 position) const
Maille en fonction de sa position par rapport à ce noeud.
CellLocalId previousRightCellId() const
Noeud derrière à droite dans la direction.
NodeLocalId nextId() const
Maille après.
CellLocalId topPreviousRightCellId() const
Noeud derrière à droite dans la direction.
CellLocalId topNextLeftCellId() const
Noeud devant à gauche dans la direction.
Cell previousLeftCell() const
Noeud derrière à gauche dans la direction.
Cell previousRightCell() const
Noeud derrière à droite dans la direction.
CellLocalId cellId(Int32 position) const
Indice local d'une maille en fonction de sa position par rapport à ce noeud.
CellLocalId nextLeftCellId() const
Noeud devant à gauche dans la direction.
CellLocalId nextRightCellId() const
Noeud devant à droite dans la direction.
Cell nextRightCell() const
Noeud devant à droite dans la direction.
Cell topNextLeftCell() const
Noeud devant à gauche dans la direction.
Cell topPreviousRightCell() const
Noeud derrière à droite dans la direction.
Cell topPreviousLeftCell() const
Noeud derrière à gauche dans la direction.
Int32 cellIndex(Int32 position) const
Indice dans la liste des mailles de ce noeud d'une maille en fonction de sa position.
Cell topNextRightCell() const
Noeud devant à droite dans la direction.
CellLocalId topPreviousLeftCellId() const
Noeud derrière à gauche dans la direction.
Cell nextLeftCell() const
Noeud devant à gauche dans la direction.
Interface d'un maillage cartésien.
Enumérateur sur une liste typée d'entités de type ItemType.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:210
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Infos sur les noeuds d'une direction spécifique X,Y ou Z d'un maillage structuré.
DirNode operator[](NodeLocalId n) const
Noeud direction correspondant au noeud n.
DirNode dirNode(NodeLocalId n) const
Noeud direction correspondant au noeud n.
DirNode operator[](NodeEnumerator inode) const
Noeud direction correspondant à l'itérateur du noeud inode.
ARCCORE_HOST_DEVICE DirNodeLocalId dirNodeId(NodeLocalId n) const
Noeud direction correspondant au noeud n.
DirNode operator[](Node n)
Noeud direction correspondant au noeud n.
DirNode node(NodeLocalId n) const
Noeud direction correspondant au noeud n.
DirNode _node(Int32 local_id) const
Noeud direction correspondant au noeud de numéro local local_id.
eMeshDirection direction() const
Valeur de la direction.
ARCCORE_HOST_DEVICE DirNodeLocalId _dirNodeId(NodeLocalId local_id) const
Noeud direction correspondant au noeud de numéro local local_id.
DirNode node(Node n) const
Noeud direction correspondant au noeud n.
Vue sur les informations des noeuds.
Noeud d'un maillage.
Definition Dom.h:204
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eMeshDirection
Type de la direction pour un maillage structuré
NodeLocalId m_previous_lid
entité avant l'entité courante dans la direction
ItemDirectionInfo()=default
Constructeur par défaut.
NodeLocalId m_next_lid
entité après l'entité courante dans la direction