Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
src/arcane/cartesianmesh/CellDirectionMng.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/* CellDirectionMng.cc (C) 2000-2023 */
9/* */
10/* Infos sur les mailles d'une direction X Y ou Z d'un maillage structuré. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CARTESIANMESH_CELLDIRECTIONMNG_H
13#define ARCANE_CARTESIANMESH_CELLDIRECTIONMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18
19#include "arcane/Item.h"
20#include "arcane/ItemEnumerator.h"
21#include "arcane/IndexedItemConnectivityView.h"
22
23#include "arcane/cartesianmesh/CartesianMeshGlobal.h"
24#include "arcane/cartesianmesh/CartesianItemDirectionInfo.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
41class ARCANE_CARTESIANMESH_EXPORT DirCell
42{
43 public:
44
45 DirCell(Cell n, Cell p)
46 : m_previous(p)
47 , m_next(n)
48 {}
49
50 public:
51
53 Cell previous() const { return m_previous; }
55 CellLocalId previousId() const { return CellLocalId(m_previous.localId()); }
57 Cell next() const { return m_next; }
59 CellLocalId nextId() const { return CellLocalId(m_next.localId()); }
60
61 private:
62
63 Cell m_previous;
64 Cell m_next;
65};
66
67/*---------------------------------------------------------------------------*/
68/*---------------------------------------------------------------------------*/
76class ARCANE_CARTESIANMESH_EXPORT DirCellLocalId
77{
78 public:
79
80 constexpr ARCCORE_HOST_DEVICE DirCellLocalId(CellLocalId n, CellLocalId p)
81 : m_previous(p)
82 , m_next(n)
83 {}
84
85 public:
86
88 constexpr ARCCORE_HOST_DEVICE CellLocalId previous() const { return m_previous; }
90 constexpr ARCCORE_HOST_DEVICE CellLocalId previousId() const { return m_previous; }
92 constexpr ARCCORE_HOST_DEVICE CellLocalId next() const { return m_next; }
94 constexpr ARCCORE_HOST_DEVICE CellLocalId nextId() const { return m_next; }
95
96 private:
97
98 CellLocalId m_previous;
99 CellLocalId m_next;
100};
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
111class ARCANE_CARTESIANMESH_EXPORT DirCellNode
112{
113 friend CellDirectionMng;
114 using Int8 = std::int8_t;
115
116 private:
117
118 DirCellNode(Cell c, const Int8* nodes_indirection)
119 : m_cell(c)
120 , m_nodes_indirection(nodes_indirection)
121 {}
122
123 public:
124
126 Cell cell() const { return m_cell; }
128 CellLocalId cellId() const { return CellLocalId(m_cell.localId()); }
129
131 Node nextLeft() const { return m_cell.node(m_nodes_indirection[CNP_NextLeft]); }
133 Node nextRight() const { return m_cell.node(m_nodes_indirection[CNP_NextRight]); }
135 Node previousRight() const { return m_cell.node(m_nodes_indirection[CNP_PreviousRight]); }
137 Node previousLeft() const { return m_cell.node(m_nodes_indirection[CNP_PreviousLeft]); }
138
140 NodeLocalId nextLeftId() const { return NodeLocalId(m_cell.nodeId(m_nodes_indirection[CNP_NextLeft])); }
142 NodeLocalId nextRightId() const { return NodeLocalId(m_cell.nodeId(m_nodes_indirection[CNP_NextRight])); }
144 NodeLocalId previousRightId() const { return NodeLocalId(m_cell.nodeId(m_nodes_indirection[CNP_PreviousRight])); }
146 NodeLocalId previousLeftId() const { return NodeLocalId(m_cell.nodeId(m_nodes_indirection[CNP_PreviousLeft])); }
147
149 Node topNextLeft() const { return m_cell.node(m_nodes_indirection[CNP_TopNextLeft]); }
151 Node topNextRight() const { return m_cell.node(m_nodes_indirection[CNP_TopNextRight]); }
153 Node topPreviousRight() const { return m_cell.node(m_nodes_indirection[CNP_TopPreviousRight]); }
155 Node topPreviousLeft() const { return m_cell.node(m_nodes_indirection[CNP_TopPreviousLeft]); }
156
158 NodeLocalId topNextLeftId() const { return NodeLocalId(m_cell.nodeId(m_nodes_indirection[CNP_TopNextLeft])); }
160 NodeLocalId topNextRightId() const { return NodeLocalId(m_cell.nodeId(m_nodes_indirection[CNP_TopNextRight])); }
162 NodeLocalId topPreviousRightId() const { return NodeLocalId(m_cell.nodeId(m_nodes_indirection[CNP_TopPreviousRight])); }
164 NodeLocalId topPreviousLeftId() const { return NodeLocalId(m_cell.nodeId(m_nodes_indirection[CNP_TopPreviousLeft])); }
165
166 private:
167
168 Cell m_cell;
169 const Int8* m_nodes_indirection;
170};
171
172/*---------------------------------------------------------------------------*/
173/*---------------------------------------------------------------------------*/
181class ARCANE_CARTESIANMESH_EXPORT DirCellNodeLocalId
182{
183 friend CellDirectionMng;
184 using Int8 = std::int8_t;
185
186 private:
187
189 : m_cell(c)
190 , m_nodes_indirection(nodes_indirection)
191 , m_view(view)
192 {}
193
194 public:
195
197 ARCCORE_HOST_DEVICE CellLocalId cellId() const { return m_cell; }
198
200 ARCCORE_HOST_DEVICE NodeLocalId nextLeftId() const { return m_view.nodeId(m_cell, m_nodes_indirection[CNP_NextLeft]); }
202 ARCCORE_HOST_DEVICE NodeLocalId nextRightId() const { return m_view.nodeId(m_cell, m_nodes_indirection[CNP_NextRight]); }
204 ARCCORE_HOST_DEVICE NodeLocalId previousRightId() const { return m_view.nodeId(m_cell, m_nodes_indirection[CNP_PreviousRight]); }
206 ARCCORE_HOST_DEVICE NodeLocalId previousLeftId() const { return m_view.nodeId(m_cell, m_nodes_indirection[CNP_PreviousLeft]); }
207
209 ARCCORE_HOST_DEVICE NodeLocalId topNextLeftId() const { return m_view.nodeId(m_cell, m_nodes_indirection[CNP_TopNextLeft]); }
211 ARCCORE_HOST_DEVICE NodeLocalId topNextRightId() const { return m_view.nodeId(m_cell, m_nodes_indirection[CNP_TopNextRight]); }
213 ARCCORE_HOST_DEVICE NodeLocalId topPreviousRightId() const { return m_view.nodeId(m_cell, m_nodes_indirection[CNP_TopPreviousRight]); }
215 ARCCORE_HOST_DEVICE NodeLocalId topPreviousLeftId() const { return m_view.nodeId(m_cell, m_nodes_indirection[CNP_TopPreviousLeft]); }
216
217 private:
218
219 CellLocalId m_cell;
220 const Int8* m_nodes_indirection;
222};
223
224/*---------------------------------------------------------------------------*/
225/*---------------------------------------------------------------------------*/
233class ARCANE_CARTESIANMESH_EXPORT DirCellFace
234{
235 friend CellDirectionMng;
236
237 private:
238
240 : m_cell(c)
241 , m_next_face_index(next_face_index)
242 , m_previous_face_index(previous_face_index)
243 {
244 }
245
246 public:
247
249 Cell cell() const { return m_cell; }
251 CellLocalId cellId() const { return m_cell.itemLocalId(); }
252
254 Face next() const { return m_cell.face(m_next_face_index); }
256 FaceLocalId nextId() const { return m_cell.faceId(m_next_face_index); }
257
259 Face previous() const { return m_cell.face(m_previous_face_index); }
261 FaceLocalId previousId() const { return m_cell.faceId(m_previous_face_index); }
262
264 Int32 nextLocalIndex() const { return m_next_face_index; }
265
267 Int32 previousLocalIndex() const { return m_previous_face_index; }
268
269 private:
270
271 Cell m_cell;
272 Int32 m_next_face_index;
273 Int32 m_previous_face_index;
274};
275
276/*---------------------------------------------------------------------------*/
277/*---------------------------------------------------------------------------*/
285class ARCANE_CARTESIANMESH_EXPORT DirCellFaceLocalId
286{
287 friend CellDirectionMng;
288
289 private:
290
291 ARCCORE_HOST_DEVICE DirCellFaceLocalId(CellLocalId c, Int32 next_face_index,
294 : m_cell(c)
295 , m_next_face_index(next_face_index)
296 , m_previous_face_index(previous_face_index)
297 , m_view(view)
298 {
299 }
300
301 public:
302
304 ARCCORE_HOST_DEVICE CellLocalId cell() const { return m_cell; }
306 ARCCORE_HOST_DEVICE CellLocalId cellId() const { return m_cell; }
307
309 ARCCORE_HOST_DEVICE FaceLocalId next() const { return m_view.faceId(m_cell, m_next_face_index); }
311 ARCCORE_HOST_DEVICE FaceLocalId nextId() const { return m_view.faceId(m_cell, m_next_face_index); }
312
314 ARCCORE_HOST_DEVICE FaceLocalId previous() const { return m_view.faceId(m_cell, m_previous_face_index); }
316 ARCCORE_HOST_DEVICE FaceLocalId previousId() const { return m_view.faceId(m_cell, m_previous_face_index); }
317
319 ARCCORE_HOST_DEVICE Int32 nextLocalIndex() const { return m_next_face_index; }
320
322 ARCCORE_HOST_DEVICE Int32 previousLocalIndex() const { return m_previous_face_index; }
323
324 private:
325
326 CellLocalId m_cell;
327 Int32 m_next_face_index;
328 Int32 m_previous_face_index;
330};
331
332/*---------------------------------------------------------------------------*/
333/*---------------------------------------------------------------------------*/
361class ARCANE_CARTESIANMESH_EXPORT CellDirectionMng
362{
363 friend CartesianMeshImpl;
364 friend CartesianMeshPatch;
365 class Impl;
366 static const int MAX_NB_NODE = 8;
367 using Int8 = std::int8_t;
368
369 private:
370
372
373 public:
374
381
382 public:
383
386 {
387 return _cell(c.localId());
388 }
391 {
392 return _cell(c.localId());
393 }
396 {
397 return _cell(c.localId());
398 }
400 ARCCORE_HOST_DEVICE DirCellLocalId dirCellId(CellLocalId c) const
401 {
402 return _dirCellId(c);
403 }
404
407 {
408 return DirCellNode(c, m_nodes_indirection);
409 }
410
413 {
414 return DirCellNode(m_cells[c.localId()], m_nodes_indirection);
415 }
416
419 {
420 return DirCellNode(m_cells[c.localId()], m_nodes_indirection);
421 }
422
425 {
426 return DirCellNodeLocalId(c, m_nodes_indirection, m_cell_node_view);
427 }
428
431 {
432 return DirCellFace(c, m_next_face_index, m_previous_face_index);
433 }
436 {
437 return DirCellFace(m_cells[c.localId()], m_next_face_index, m_previous_face_index);
438 }
439
442 {
443 return DirCellFaceLocalId(c, m_next_face_index, m_previous_face_index, m_cell_face_view);
444 }
445
447 CellGroup allCells() const;
448
456 CellGroup innerCells() const;
463 CellGroup outerCells() const;
464
467 {
468 return _cell(c.localId());
469 }
470
473 {
474 return _cell(c.localId());
475 }
476
479 {
480 return _cell(icell.itemLocalId());
481 }
482
491 Int64 globalNbCell() const;
492
501 Int32 ownNbCell() const;
502
521 Int32 subDomainOffset() const;
522
541 Int64 ownCellOffset() const;
542
543 private:
544
546 DirCell _cell(Int32 local_id) const
547 {
548 ItemDirectionInfo d = m_infos_view[local_id];
549 return DirCell(m_cells[d.m_next_lid], m_cells[d.m_previous_lid]);
550 }
551
553 ARCCORE_HOST_DEVICE DirCellLocalId _dirCellId(Int32 local_id) const
554 {
555 ItemDirectionInfo d = m_infos_view[local_id];
557 }
558
559 void setNodesIndirection(ConstArrayView<Int8> nodes_indirection);
560
561 protected:
562
568 void _internalComputeInnerAndOuterItems(const ItemGroup& items);
569
574 void _internalInit(ICartesianMesh* cm, eMeshDirection dir, Integer patch_index);
575
580 void _internalDestroy();
581
586 void _internalSetLocalFaceIndex(Int32 next_index, Int32 previous_index)
587 {
588 m_next_face_index = next_index;
589 m_previous_face_index = previous_index;
590 }
591
597 void _internalResizeInfos(Int32 new_size);
598
599 void _internalSetOffsetAndNbCellInfos(Int64 global_nb_cell, Int32 own_nb_cell,
601
602 public:
603
606 {
607 return m_direction;
608 }
609
610 private:
611
612 SmallSpan<ItemDirectionInfo> m_infos_view;
613 CellInfoListView m_cells;
614 eMeshDirection m_direction;
615 Int32 m_next_face_index;
616 Int32 m_previous_face_index;
617 Int8 m_nodes_indirection[MAX_NB_NODE];
618 Impl* m_p = nullptr;
619 IndexedCellNodeConnectivityView m_cell_node_view;
620 IndexedCellFaceConnectivityView m_cell_face_view;
621};
622
623/*---------------------------------------------------------------------------*/
624/*---------------------------------------------------------------------------*/
625
626} // End namespace Arcane
627
628/*---------------------------------------------------------------------------*/
629/*---------------------------------------------------------------------------*/
630
631#endif
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é.
eMeshDirection direction() const
Valeur de la direction.
ARCCORE_HOST_DEVICE DirCellFaceLocalId dirCellFaceId(CellLocalId c) const
Maille avec infos directionnelles aux faces correspondant à la maille c.
DirCellFace cellFace(Cell c) const
Maille avec infos directionnelles aux faces correspondant à la maille c.
DirCell cell(CellLocalId c) const
Maille direction correspondant à la maille c.
ARCCORE_HOST_DEVICE DirCellLocalId dirCellId(CellLocalId c) const
Maille direction correspondant à la maille c.
DirCellFace cellFace(CellLocalId c) const
Maille avec infos directionnelles aux faces correspondant à la maille c.
DirCellNode cellNode(Cell c) const
Maille avec infos directionnelles aux noeuds correspondant à la maille c.
DirCell dirCell(CellLocalId c) const
Maille direction correspondant à la maille c.
DirCell cell(Cell c) const
Maille direction correspondant à la maille c.
DirCellNode cellNode(CellLocalId c) const
Maille avec infos directionnelles aux noeuds correspondant à la maille c.
DirCellNode dirCellNode(CellLocalId c) const
Maille avec infos directionnelles aux noeuds correspondant à la maille c.
DirCell operator[](CellEnumerator icell) const
Maille direction correspondant à l'itérateur de la maille icell.
DirCell operator[](CellLocalId c) const
Maille direction correspondant à la maille c.
void _internalSetLocalFaceIndex(Int32 next_index, Int32 previous_index)
ARCCORE_HOST_DEVICE DirCellNodeLocalId dirCellNodeId(CellLocalId c) const
Maille avec infos directionnelles aux noeuds correspondant à la maille c.
DirCell operator[](Cell c) const
Maille direction correspondant à la maille c.
ARCCORE_HOST_DEVICE DirCellLocalId _dirCellId(Int32 local_id) const
Maille direction correspondant à la maille de numéro local local_id.
DirCell _cell(Int32 local_id) const
Maille direction correspondant à la maille de numéro local local_id.
Vue sur les informations des mailles.
Maille d'un maillage.
Definition Item.h:1178
Maille avec info directionnelle des faces.
ARCCORE_HOST_DEVICE FaceLocalId previous() const
Face connectée à la maille d'avant la maille courante dans la direction.
ARCCORE_HOST_DEVICE CellLocalId cellId() const
Maille associée.
ARCCORE_HOST_DEVICE FaceLocalId previousId() const
Face connectée à la maille d'avant la maille courante dans la direction.
ARCCORE_HOST_DEVICE Int32 nextLocalIndex() const
Indice locale dans la maille de la face next()
ARCCORE_HOST_DEVICE Int32 previousLocalIndex() const
Indice locale dans la maille de la face previous()
ARCCORE_HOST_DEVICE FaceLocalId next() const
Face connectée à la maille d'après la maille courante dans la direction.
ARCCORE_HOST_DEVICE CellLocalId cell() const
Maille associée.
ARCCORE_HOST_DEVICE FaceLocalId nextId() const
Face connectée à la maille d'après la maille courante dans la direction.
Maille avec info directionnelle des faces.
Int32 nextLocalIndex() const
Indice locale dans la maille de la face next()
Face next() const
Face connectée à la maille d'après la maille courante dans la direction.
FaceLocalId nextId() const
Face connectée à la maille d'après la maille courante dans la direction.
Face previous() const
Face connectée à la maille d'avant la maille courante dans la direction.
FaceLocalId previousId() const
Face connectée à la maille d'avant la maille courante dans la direction.
CellLocalId cellId() const
Maille associée.
Int32 previousLocalIndex() const
Indice locale dans la maille de la face previous()
Maille avant et après une maille suivant une direction.
constexpr ARCCORE_HOST_DEVICE CellLocalId nextId() const
Maille après.
constexpr ARCCORE_HOST_DEVICE CellLocalId previous() const
Maille avant.
constexpr ARCCORE_HOST_DEVICE CellLocalId next() const
Maille après.
constexpr ARCCORE_HOST_DEVICE CellLocalId previousId() const
Maille avant.
Maille avec info directionnelle des noeuds.
ARCCORE_HOST_DEVICE NodeLocalId nextLeftId() const
Noeud devant à gauche dans la direction.
ARCCORE_HOST_DEVICE NodeLocalId topNextRightId() const
Noeud devant à droite dans la direction.
ARCCORE_HOST_DEVICE CellLocalId cellId() const
Maille associée.
ARCCORE_HOST_DEVICE NodeLocalId topPreviousLeftId() const
Noeud derrière à gauche dans la direction.
ARCCORE_HOST_DEVICE NodeLocalId topNextLeftId() const
Noeud devant à gauche dans la direction.
ARCCORE_HOST_DEVICE NodeLocalId previousLeftId() const
Noeud derrière à gauche dans la direction.
ARCCORE_HOST_DEVICE NodeLocalId nextRightId() const
Noeud devant à droite dans la direction.
ARCCORE_HOST_DEVICE NodeLocalId topPreviousRightId() const
Noeud derrière à droite dans la direction.
ARCCORE_HOST_DEVICE NodeLocalId previousRightId() const
Noeud derrière à droite dans la direction.
Maille avec info directionnelle des noeuds.
Node nextRight() const
Noeud devant à droite dans la direction.
CellLocalId cellId() const
Maille associée.
Node previousRight() const
Noeud derrière à droite dans la direction.
NodeLocalId topNextLeftId() const
Noeud devant à gauche dans la direction.
NodeLocalId nextRightId() const
Noeud devant à droite dans la direction.
NodeLocalId topNextRightId() const
Noeud devant à droite dans la direction.
NodeLocalId nextLeftId() const
Noeud devant à gauche dans la direction.
Node nextLeft() const
Noeud devant à gauche dans la direction.
Node topNextRight() const
Noeud devant à droite dans la direction.
NodeLocalId topPreviousLeftId() const
Noeud derrière à gauche dans la direction.
NodeLocalId topPreviousRightId() const
Noeud derrière à droite dans la direction.
NodeLocalId previousLeftId() const
Noeud derrière à gauche dans la direction.
NodeLocalId previousRightId() const
Noeud derrière à droite dans la direction.
Node topPreviousRight() const
Noeud derrière à droite dans la direction.
Node topNextLeft() const
Noeud devant à gauche dans la direction.
Node previousLeft() const
Noeud derrière à gauche dans la direction.
Node topPreviousLeft() const
Noeud derrière à gauche dans la direction.
Maille avant et après une maille suivant une direction.
CellLocalId nextId() const
Maille après.
CellLocalId previousId() const
Maille avant.
Face d'une maille.
Definition Item.h:932
Interface d'un maillage cartésien.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Noeud d'un maillage.
Definition Dom.h:204
Structure interne contenant l'entité devant et derriére dans une direction.
ItemLocalId m_next_lid
entité après l'entité courante dans la direction
ItemLocalId m_previous_lid
entité avant l'entité courante dans la direction
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Arccore::Int8 Int8
Type représentant un entier sur 8 bits.
eMeshDirection
Type de la direction pour un maillage structuré