14#include "arcane/mesh/CellFamily.h"
16#include "arcane/utils/FatalErrorException.h"
18#include "arcane/core/IMesh.h"
19#include "arcane/core/ISubDomain.h"
20#include "arcane/core/ItemInternalEnumerator.h"
21#include "arcane/core/Connectivity.h"
23#include "arcane/mesh/NodeFamily.h"
24#include "arcane/mesh/EdgeFamily.h"
25#include "arcane/mesh/FaceFamily.h"
26#include "arcane/mesh/CellMerger.h"
27#include "arcane/mesh/IncrementalItemConnectivity.h"
28#include "arcane/mesh/CompactIncrementalItemConnectivity.h"
29#include "arcane/mesh/ItemConnectivitySelector.h"
30#include "arcane/mesh/AbstractItemFamilyTopologyModifier.h"
31#include "arcane/mesh/NewWithLegacyConnectivity.h"
82, m_mesh_connectivity(0)
89, m_hparent_connectivity(
nullptr)
91 _setTopologyModifier(
new TopologyModifier(
this));
116 auto* nc = network->getConnectivity(
this,m_node_family,connectivityName(
this,m_node_family));
117 using NodeNetwork = NewWithLegacyConnectivityType<CellFamily,NodeFamily>::type;
119 using EdgeNetwork = NewWithLegacyConnectivityType<CellFamily,EdgeFamily>::type;
120 auto* ec = network->getConnectivity(
this,m_edge_family,connectivityName(
this,m_edge_family));
122 using FaceNetwork = NewWithLegacyConnectivityType<CellFamily,FaceFamily>::type;
123 auto* fc = network->getConnectivity(
this,m_face_family,connectivityName(
this,m_face_family));
127 m_node_connectivity =
new NodeConnectivity(
this,m_node_family,
"CellNode");
128 m_edge_connectivity =
new EdgeConnectivity(
this,m_edge_family,
"CellEdge");
129 m_face_connectivity =
new FaceConnectivity(
this,m_face_family,
"CellFace");
131 m_hparent_connectivity =
new HParentConnectivity(
this,
this,
"HParentCell");
132 m_hchild_connectivity =
new HChildConnectivity(
this,
this,
"HChildCell");
134 _addConnectivitySelector(m_node_connectivity);
135 _addConnectivitySelector(m_edge_connectivity);
136 _addConnectivitySelector(m_face_connectivity);
137 _addConnectivitySelector(m_hparent_connectivity);
138 _addConnectivitySelector(m_hchild_connectivity);
140 _buildConnectivitySelectors();
146inline void CellFamily::
147_createOne(ItemInternal* item,
Int64 uid,ItemTypeInfo* type)
149 ItemLocalId item_lid(item);
150 m_item_internal_list->cells = _itemsInternal();
151 _allocateInfos(item,uid,type);
152 auto nc = m_node_connectivity->trueCustomConnectivity();
153 nc->addConnectedItems(item_lid,type->nbLocalNode());
154 if (m_edge_prealloc!=0){
155 auto ec = m_edge_connectivity->trueCustomConnectivity();
156 ec->addConnectedItems(item_lid,type->nbLocalEdge());
158 auto fc = m_face_connectivity->trueCustomConnectivity();
159 fc->addConnectedItems(item_lid,type->nbLocalFace());
165inline void CellFamily::
166_createOne(ItemInternal* item,
Int64 uid,ItemTypeId type_id)
168 _createOne(item,uid,_itemTypeMng()->typeFromId(type_id));
208findOrAllocOne(
Int64 uid,ItemTypeId type_id,
bool& is_alloc)
210 return findOrAllocOne(uid,_itemTypeMng()->typeFromId(type_id),is_alloc);
219 ItemInternal* item = _allocOne(uid);
220 _createOne(item,uid,type);
227ItemInternal* CellFamily::
228findOrAllocOne(
Int64 uid,ItemTypeInfo* type,
bool& is_alloc)
231 ItemInternal* item = _findOrAllocOne(uid,is_alloc);
233 _createOne(item,uid,type);
241preAllocate(Integer nb_item)
243 this->_preAllocate(nb_item,
true);
252 debug() <<
"Creating the list of ghosts cells";
274 m_node_family->removeCellFromNode(node,
cell_lid);
284 _checkValidItem(
icell);
285 if (
icell.itemBase().isSuppressed())
292 if (
icell.level() >0){
293 _removeParentCellToCell(
icell);
318 _checkValidItem(
icell);
319 if (
icell.itemBase().isSuppressed())
325 if (
icell.level() >0){
326 _removeParentCellToCell(
icell);
378 _removeDetachedOne(cell);
388 for( Integer i=0, is=
local_ids.size(); i<is; ++i ){
402 m_node_connectivity->replaceItem(cell,index,node);
414 m_edge_connectivity->replaceItem(cell,index,edge);
426 m_face_connectivity->replaceItem(cell,index,face);
435 m_hchild_connectivity->replaceItem(cell,index,
child_cell);
444 m_hparent_connectivity->replaceItem(cell,index,
parent_cell);
453 m_mesh_connectivity =
c;
454 m_node_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Cell,
IK_Node);
455 m_node_connectivity->setPreAllocatedSize(m_node_prealloc);
457 if (
mesh()->dimension()==3){
460 if (Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_HasEdge))
463 m_face_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Cell,
IK_Face);
464 m_face_connectivity->setPreAllocatedSize(m_face_prealloc);
465 debug() <<
"Family " <<
name() <<
" prealloc "
466 << m_node_prealloc <<
" by node, "
467 << m_edge_prealloc <<
" by edge, "
468 << m_face_prealloc <<
" by face.";
514 Integer nb_children = children_cells_lid.size();
515 auto c = m_hchild_connectivity->trueCustomConnectivity();
517 ItemLocalId item_lid(parent_cell);
518 c->addConnectedItems(item_lid,nb_children);
523 for( Integer i=0; i<nb_children; ++i )
524 x->replaceHChild(ItemLocalId(parent_cell),i,ItemLocalId(children_cells_lid[i]));
533_removeParentCellToCell(Cell cell)
535 m_hparent_connectivity->removeConnectedItems(ItemLocalId(cell));
542_removeChildCellToCell(Cell parent_cell,Cell cell)
544 m_hchild_connectivity->removeConnectedItem(ItemLocalId(parent_cell),ItemLocalId(cell));
552_removeChildrenCellsToCell(Cell parent_cell)
554 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.
Classe pour convertir un CellLocalId vers une maille.
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.