14#include "arcane/mesh/CellFamily.h"
16#include "arcane/utils/FatalErrorException.h"
18#include "arcane/mesh/NodeFamily.h"
19#include "arcane/mesh/EdgeFamily.h"
20#include "arcane/mesh/FaceFamily.h"
22#include "arcane/mesh/CellMerger.h"
24#include "arcane/IMesh.h"
25#include "arcane/ISubDomain.h"
26#include "arcane/ItemInternalEnumerator.h"
27#include "arcane/Connectivity.h"
28#include "arcane/mesh/IncrementalItemConnectivity.h"
29#include "arcane/mesh/CompactIncrementalItemConnectivity.h"
30#include "arcane/mesh/ItemConnectivitySelector.h"
31#include "arcane/mesh/AbstractItemFamilyTopologyModifier.h"
32#include "arcane/mesh/NewWithLegacyConnectivity.h"
83, m_mesh_connectivity(0)
90, m_hparent_connectivity(
nullptr)
92 _setTopologyModifier(
new TopologyModifier(
this));
117 auto* nc = network->getConnectivity(
this,m_node_family,connectivityName(
this,m_node_family));
118 using NodeNetwork = NewWithLegacyConnectivityType<CellFamily,NodeFamily>::type;
120 using EdgeNetwork = NewWithLegacyConnectivityType<CellFamily,EdgeFamily>::type;
121 auto* ec = network->getConnectivity(
this,m_edge_family,connectivityName(
this,m_edge_family));
123 using FaceNetwork = NewWithLegacyConnectivityType<CellFamily,FaceFamily>::type;
124 auto* fc = network->getConnectivity(
this,m_face_family,connectivityName(
this,m_face_family));
128 m_node_connectivity =
new NodeConnectivity(
this,m_node_family,
"CellNode");
129 m_edge_connectivity =
new EdgeConnectivity(
this,m_edge_family,
"CellEdge");
130 m_face_connectivity =
new FaceConnectivity(
this,m_face_family,
"CellFace");
132 m_hparent_connectivity =
new HParentConnectivity(
this,
this,
"HParentCell");
133 m_hchild_connectivity =
new HChildConnectivity(
this,
this,
"HChildCell");
135 _addConnectivitySelector(m_node_connectivity);
136 _addConnectivitySelector(m_edge_connectivity);
137 _addConnectivitySelector(m_face_connectivity);
138 _addConnectivitySelector(m_hparent_connectivity);
139 _addConnectivitySelector(m_hchild_connectivity);
141 _buildConnectivitySelectors();
147inline void CellFamily::
148_createOne(ItemInternal* item,
Int64 uid,ItemTypeInfo* type)
150 ItemLocalId item_lid(item);
151 m_item_internal_list->cells = _itemsInternal();
152 _allocateInfos(item,uid,type);
153 auto nc = m_node_connectivity->trueCustomConnectivity();
154 nc->addConnectedItems(item_lid,type->nbLocalNode());
155 if (m_edge_prealloc!=0){
156 auto ec = m_edge_connectivity->trueCustomConnectivity();
157 ec->addConnectedItems(item_lid,type->nbLocalEdge());
159 auto fc = m_face_connectivity->trueCustomConnectivity();
160 fc->addConnectedItems(item_lid,type->nbLocalFace());
166inline void CellFamily::
167_createOne(ItemInternal* item,
Int64 uid,ItemTypeId type_id)
169 _createOne(item,uid,_itemTypeMng()->typeFromId(type_id));
209findOrAllocOne(
Int64 uid,ItemTypeId type_id,
bool& is_alloc)
211 return findOrAllocOne(uid,_itemTypeMng()->typeFromId(type_id),is_alloc);
220 ItemInternal* item = _allocOne(uid);
221 _createOne(item,uid,type);
228ItemInternal* CellFamily::
229findOrAllocOne(
Int64 uid,ItemTypeInfo* type,
bool& is_alloc)
232 ItemInternal* item = _findOrAllocOne(uid,is_alloc);
234 _createOne(item,uid,type);
242preAllocate(Integer nb_item)
244 this->_preAllocate(nb_item,
true);
253 debug() <<
"Creating the list of ghosts cells";
275 m_node_family->removeCellFromNode(node,
cell_lid);
285 _checkValidItem(
icell);
286 if (
icell.itemBase().isSuppressed())
293 if (
icell.level() >0){
294 _removeParentCellToCell(
icell);
319 _checkValidItem(
icell);
320 if (
icell.itemBase().isSuppressed())
326 if (
icell.level() >0){
327 _removeParentCellToCell(
icell);
379 _removeDetachedOne(cell);
389 for( Integer i=0, is=
local_ids.size(); i<is; ++i ){
403 m_node_connectivity->replaceItem(cell,index,node);
415 m_edge_connectivity->replaceItem(cell,index,edge);
427 m_face_connectivity->replaceItem(cell,index,face);
436 m_hchild_connectivity->replaceItem(cell,index,
child_cell);
445 m_hparent_connectivity->replaceItem(cell,index,
parent_cell);
454 m_mesh_connectivity =
c;
455 m_node_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Cell,
IK_Node);
456 m_node_connectivity->setPreAllocatedSize(m_node_prealloc);
458 if (
mesh()->dimension()==3){
461 if (Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_HasEdge))
464 m_face_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Cell,
IK_Face);
465 m_face_connectivity->setPreAllocatedSize(m_face_prealloc);
466 debug() <<
"Family " <<
name() <<
" prealloc "
467 << m_node_prealloc <<
" by node, "
468 << m_edge_prealloc <<
" by edge, "
469 << m_face_prealloc <<
" by face.";
512 Integer nb_children = children_cells_lid.size();
513 auto c = m_hchild_connectivity->trueCustomConnectivity();
515 ItemLocalId item_lid(parent_cell);
516 c->addConnectedItems(item_lid,nb_children);
521 for( Integer i=0; i<nb_children; ++i )
522 x->replaceHChild(ItemLocalId(parent_cell),i,ItemLocalId(children_cells_lid[i]));
531_removeParentCellToCell(Cell cell)
533 m_hparent_connectivity->removeConnectedItems(ItemLocalId(cell));
540_removeChildCellToCell(Cell parent_cell,Cell cell)
542 m_hchild_connectivity->removeConnectedItem(ItemLocalId(parent_cell),ItemLocalId(cell));
550_removeChildrenCellsToCell(Cell parent_cell)
552 m_hchild_connectivity->removeConnectedItems(ItemLocalId(parent_cell));
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Vue sur les informations des mailles.
FaceConnectedListViewType faces() const
Liste des faces de la maille.
EdgeConnectedListViewType edges() const
Liste des arêtes de la maille.
virtual IItemFamily * nodeFamily()=0
Retourne la famille des noeuds.
virtual IItemFamily * edgeFamily()=0
Retourne la famille des arêtes.
virtual IItemFamily * faceFamily()=0
Retourne la famille des faces.
virtual bool useMeshItemFamilyDependencies() const =0
check if the network itemFamily dependencies is activated
virtual IItemFamilyNetwork * itemFamilyNetwork()=0
Interface du réseau de familles (familles connectées)
@ II_Inactive
L'entité est inactive //COARSEN_INACTIVE,.
Structure interne d'une entité de maillage.
Index d'un Item dans une variable.
Type d'une entité (Item).
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
Classe de base d'un élément de maillage.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Modification de la topologie des entités d'une famille.
void replaceFace(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une face d'une entité.
void replaceNode(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace un noeud d'une entité.
void replaceHParent(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une entité parente d'une entité.
void replaceEdge(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une arête d'une entité.
void replaceHChild(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une entité enfant d'une entité.
void _removeSubItems(Cell cell)
Item allocOne(Int64 uid, ItemTypeId type_id, MeshInfos &mesh_info) override
Alloue un élément dans la famille et met à jour le mesh_info correspondant.
void detachCells2(Int32ConstArrayView cell_local_ids)
virtual void internalRemoveItems(Int32ConstArrayView local_ids, bool keep_ghost=false) override
void replaceNode(ItemLocalId cell, Integer index, ItemLocalId node)
Remplace le noeud d'index index de la maille cell avec celui de localId() node.
void removeCell(Cell cell)
void removeCells(ConstArrayView< Int32 > cells_local_id)
Supprime les mailles dont les numéros locaux sont cells_local_id.
void removeDetachedCell(Cell cell)
virtual void computeSynchronizeInfos() override
Construit les structures nécessaires à la synchronisation.
void _removeNotConnectedSubItems(Cell cell)
Supprime les sous-entités de la maille qui ne sont connectées à aucune maille.
void _addParentCellToCell(Cell cell, Cell parent_cell)
AMR.
void replaceFace(ItemLocalId cell, Integer index, ItemLocalId face)
Remplace la face d'index index de la maille cell avec celle de localId() face.
void detachCell(Cell cell)
void replaceEdge(ItemLocalId cell, Integer index, ItemLocalId edge)
Remplace l'arête d'index index de la maille cell avec celle de localId() edge.
void setConnectivity(const Integer c)
Définit la connectivité active pour le maillage associé
void removeCellFromEdge(Edge edge, ItemLocalId cell_to_remove_lid)
Supprime une maille d'une arête.
void removeEdgeIfNotConnected(Edge edge)
Supprime l'arête si elle n'est plus connectée.
void removeCellFromFace(Face face, ItemLocalId cell_to_remove_lid)
Supprime une maille de la face.
void removeFaceIfNotConnected(Face face)
Supprime la face si elle n'est plus connectée.
IMesh * mesh() const override
Maillage associé
IItemFamilyTopologyModifier * _topologyModifier() override
Interface du modificateur de topologie.
void computeSynchronizeInfos() override
Construit les structures nécessaires à la synchronisation.
String name() const override
Nom de la famille.
Classe factorisant des informations sur le maillage.
void removeNodeIfNotConnected(Node node)
Supprime le noeud siln'est plus connecté
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flot pour un message de debug.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
@ IK_Node
Entité de maillage de genre noeud.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Face
Entité de maillage de genre face.
@ IK_Edge
Entité de maillage de genre arête.