14#include "arcane/utils/FatalErrorException.h"
15#include "arcane/utils/ArgumentException.h"
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/PlatformUtils.h"
19#include "arcane/core/IItemFamily.h"
20#include "arcane/core/ItemGroup.h"
21#include "arcane/core/IMesh.h"
22#include "arcane/core/UnstructuredMeshConnectivity.h"
24#include "arcane/cartesianmesh/CellDirectionMng.h"
25#include "arcane/cartesianmesh/ICartesianMesh.h"
52 Int32 m_sub_domain_offset = -1;
53 Int32 m_own_nb_cell = -1;
54 Int64 m_global_nb_cell = -1;
55 Int64 m_own_cell_offset = -1;
64, m_next_face_index(-1)
65, m_previous_face_index(-1)
67 for(
Integer i=0; i<MAX_NB_NODE; ++i )
68 m_nodes_indirection[i] = (-1);
81 m_p->m_cartesian_mesh = cm;
82 m_p->m_patch_index = patch_index;
101 m_p->m_infos.resize(new_size);
102 m_infos_view = m_p->m_infos.view();
115 Int32 lid = iitem.itemLocalId();
116 Int32 i1 = m_infos_view[lid].m_next_lid;
117 Int32 i2 = m_infos_view[lid].m_previous_lid;
118 if (i1 == NULL_ITEM_LOCAL_ID || i2 == NULL_ITEM_LOCAL_ID)
123 int dir = (int)m_direction;
125 if (m_p->m_patch_index>=0)
126 base_group_name = base_group_name +
String(
"AMRPatch")+m_p->m_patch_index;
127 m_p->m_inner_all_items = family->
createGroup(
String(
"AllInner")+base_group_name,inner_lids,
true);
128 m_p->m_outer_all_items = family->
createGroup(
String(
"AllOuter")+base_group_name,outer_lids,
true);
129 m_p->m_all_items = items;
133 mesh_connectivity.setMesh(m_p->m_cartesian_mesh->mesh());
134 m_cell_node_view = mesh_connectivity.cellNode();
135 m_cell_face_view = mesh_connectivity.cellFace();
141void CellDirectionMng::
144 m_p->m_inpatch_all_items = in_patch_cells;
145 m_p->m_overall_all_items = overall_cells;
146 m_p->m_all_items = all_cells;
155 Int32 lid = icell.itemLocalId();
156 Int32 i1 = m_infos_view[lid].m_next_lid;
157 Int32 i2 = m_infos_view[lid].m_previous_lid;
158 if (i1 == NULL_ITEM_LOCAL_ID || i2 == NULL_ITEM_LOCAL_ID || overall_lid.
contains(i1) || overall_lid.
contains(i2))
163 int dir = (int)m_direction;
165 String base_group_name = String(
"Direction") + dir;
166 if (m_p->m_patch_index >= 0)
167 base_group_name = base_group_name + String(
"AMRPatch") + m_p->m_patch_index;
168 m_p->m_inner_all_items = family->createGroup(String(
"AllInner") + base_group_name, inner_lids,
true);
169 m_p->m_outer_all_items = family->createGroup(String(
"AllOuter") + base_group_name, outer_lids,
true);
170 m_cells = CellInfoListView(family);
172 UnstructuredMeshConnectivityView mesh_connectivity;
173 mesh_connectivity.setMesh(m_p->m_cartesian_mesh->
mesh());
174 m_cell_node_view = mesh_connectivity.cellNode();
175 m_cell_face_view = mesh_connectivity.cellFace();
184 return m_p->m_all_items;
193 return m_p->m_overall_all_items;
202 return m_p->m_inpatch_all_items;
211 return m_p->m_inner_all_items;
220 return m_p->m_outer_all_items;
226void CellDirectionMng::
229 for(
Integer i=0; i<MAX_NB_NODE; ++i )
230 m_nodes_indirection[i] = nodes_indirection[i];
234 tm->
info(4) <<
"Set computed indirection dir=" << (int)m_direction;
235 for(
Integer i=0; i<MAX_NB_NODE; ++i ){
236 tm->
info(5) <<
"Indirection i=" << i <<
" v=" << (int)m_nodes_indirection[i];
246 return (m_p) ? m_p->m_global_nb_cell : -1;
255 return (m_p) ? m_p->m_own_nb_cell : -1;
264 return (m_p) ? m_p->m_sub_domain_offset : -1;
273 return (m_p) ? m_p->m_own_cell_offset : -1;
279void CellDirectionMng::
280_internalSetOffsetAndNbCellInfos(
Int64 global_nb_cell,
Int32 own_nb_cell,
281 Int32 sub_domain_offset,
Int64 own_cell_offset)
283 m_p->m_global_nb_cell = global_nb_cell;
284 m_p->m_own_nb_cell = own_nb_cell;
285 m_p->m_sub_domain_offset = sub_domain_offset;
286 m_p->m_own_cell_offset = own_cell_offset;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
bool contains(ConstReferenceType v) const
Vrai si le tableau contient l'élément de valeur v.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
CellGroup outerCells() const
Groupe de toutes les mailles externes dans la direction.
CellGroup allCells() const
Groupe de toutes les mailles dans la direction.
Int64 ownCellOffset() const
Offset dans cette direction de la première maille propre de ce sous-domaine.
Int64 globalNbCell() const
Nombre global de mailles dans cette direction.
void _internalInit(ICartesianMesh *cm, eMeshDirection dir, Integer patch_index)
CellGroup innerCells() const
Groupe de toutes les mailles internes dans la direction.
CellDirectionMng()
Créé une instance vide.
CellGroup overallCells() const
Groupe de toutes les mailles de recouvrement dans la direction.
Int32 subDomainOffset() const
Offset dans cette direction du sous-domaine.
Int32 ownNbCell() const
Nombre de mailles propres dans cette direction.
void _internalResizeInfos(Int32 new_size)
Redimensionne le conteneur contenant les ItemDirectionInfo.
void _internalComputeInnerAndOuterItems(const ItemGroup &items)
Usage interne à Arcane. Calcul les entités internes et externes. Suppose que init() a été appelé.
CellGroup inPatchCells() const
Groupe de toutes les mailles du patch dans la direction.
Vue sur les informations des mailles.
Vue constante d'un tableau de type T.
Interface d'un maillage cartésien.
virtual ITraceMng * traceMng() const =0
Gestionnaire de trace associé.
virtual IMesh * mesh() const =0
Maillage associé à ce maillage cartésien.
Interface d'une famille d'entités.
virtual ItemGroup createGroup(const String &name, Int32ConstArrayView local_ids, bool do_override=false)=0
Créé un groupe d'entités de nom name contenant les entités local_ids.
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Groupe d'entités de maillage.
ItemVectorView view() const
Vue sur les entités du groupe.
IItemFamily * itemFamily() const
Famille d'entité à laquelle appartient ce groupe (0 pour le group nul)
void fillLocalIds(Array< Int32 > &ids) const
Ajoute à ids la liste des localIds() du vecteur.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
Vue sur les connectivités standards d'un maillage non structuré.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
-*- 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.
eMeshDirection
Type de la direction pour un maillage structuré
@ MD_DirInvalid
Direction invalide ou non initialisée.
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
std::int32_t Int32
Type entier signé sur 32 bits.