12#ifndef ARCANE_CARTESIANMESH_NODEDIRECTIONMNG_H
13#define ARCANE_CARTESIANMESH_NODEDIRECTIONMNG_H
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"
23#include "arcane/cartesianmesh/CartesianMeshGlobal.h"
47 typedef signed char IndexType;
48 static constexpr IndexType NULL_CELL = -1;
50 struct DirNodeCellIndex
54 ARCCORE_HOST_DEVICE IndexType operator[](Int32 i)
const
56 ARCANE_CHECK_AT(i, 8);
62 IndexType m_indexes[8];
92 Int32
cellIndex(Int32 position)
const {
return m_cell_index[position]; }
101 Int32 x = cellIndex(position);
112 Int32 x = cellIndex(position);
113 return (x == NULL_CELL) ?
Cell() :
Cell(m_current.cell(x));
157 DirNodeCellIndex m_cell_index;
175 typedef signed char IndexType;
176 static constexpr IndexType NULL_CELL = -1;
182 DirNode::DirNodeCellIndex idx,
208 ARCCORE_HOST_DEVICE Int32
cellIndex(Int32 position)
const {
return m_cell_index[position]; }
217 Int32 x = cellIndex(position);
218 return (x == NULL_CELL) ?
CellLocalId(NULL_ITEM_LOCAL_ID) : m_view.cellId(m_current, x);
244 DirNode::DirNodeCellIndex m_cell_index;
258 friend CartesianMeshPatch;
260 using IndexType = DirNode::IndexType;
261 using DirNodeCellIndex = DirNode::DirNodeCellIndex;
265 struct ItemDirectionInfo
274 ItemDirectionInfo() =
default;
275 ItemDirectionInfo(Int32 next_lid, Int32 prev_lid)
276 : m_next_lid(next_lid)
277 , m_previous_lid(prev_lid)
289 void setCellIndexes(IndexType idx[8])
291 for (
int i = 0; i < 8; ++i)
292 m_cell_index.m_indexes[i] = idx[i];
294 DirNodeCellIndex m_cell_index;
317 return _node(n.localId());
323 return _node(n.localId());
329 return _dirNodeId(n);
360 return _node(n.localId());
366 return _node(inode.itemLocalId());
397 void _internalDestroy();
404 void _internalResizeInfos(Int32 new_size);
417 DirNode _node(Int32 local_id)
const
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);
424 ARCCORE_HOST_DEVICE DirNodeLocalId _dirNodeId(NodeLocalId local_id)
const
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);
430 void _computeNodeCellInfos(
const CellDirectionMng& cell_dm,
431 const VariableCellReal3& cells_center);
Infos spécifiques à un maillage cartésien.
Infos sur les mailles d'une direction spécifique X,Y ou Z d'un maillage structuré.
Noeud avant et après un noeud suivant une direction.
__host__ __device__ CellLocalId nextLeftCellId() const
Noeud devant à gauche dans la direction.
__host__ __device__ CellLocalId topPreviousRightCellId() const
Noeud derrière à droite dans la direction.
__host__ __device__ NodeLocalId previousId() const
Maille avant.
__host__ __device__ CellLocalId topNextRightCellId() const
Noeud devant à droite dans la direction.
__host__ __device__ CellLocalId cellId(Int32 position) const
Indice local d'une maille en fonction de sa position par rapport à ce noeud.
__host__ __device__ CellLocalId topPreviousLeftCellId() const
Noeud derrière à gauche dans la direction.
__host__ __device__ Int32 cellIndex(Int32 position) const
Indice dans la liste des mailles de ce noeud d'une maille en fonction de sa position.
__host__ __device__ NodeLocalId nextId() const
Maille après.
__host__ __device__ NodeLocalId previous() const
Maille avant.
__host__ __device__ CellLocalId previousLeftCellId() const
Noeud derrière à gauche dans la direction.
__host__ __device__ CellLocalId topNextLeftCellId() const
Noeud devant à gauche dans la direction.
__host__ __device__ CellLocalId nextRightCellId() const
Noeud devant à droite dans la direction.
__host__ __device__ CellLocalId previousRightCellId() const
Noeud derrière à droite dans la direction.
__host__ __device__ NodeLocalId next() const
Maille après.
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.
Node next() const
Maille après.
Node previous() const
Maille avant.
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.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
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.
DirNode operator[](Node n)
Noeud direction correspondant au noeud n.
DirNode node(NodeLocalId n) const
Noeud direction correspondant au noeud n.
eMeshDirection direction() const
Valeur de la direction.
DirNode node(Node n) const
Noeud direction correspondant au noeud n.
__host__ __device__ DirNodeLocalId dirNodeId(NodeLocalId n) const
Noeud direction correspondant au noeud n.
Vue sur les informations des noeuds.
Vue d'un tableau d'éléments de type T.
ItemEnumeratorT< Node > NodeEnumerator
Enumérateurs sur des noeuds.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eMeshDirection
Type de la direction pour un maillage structuré