14#include "arcane/mesh/EdgeFamily.h"
16#include "arcane/utils/FatalErrorException.h"
18#include "arcane/IMesh.h"
20#include "arcane/MeshUtils.h"
21#include "arcane/ItemPrinter.h"
22#include "arcane/Connectivity.h"
24#include "arcane/mesh/NodeFamily.h"
25#include "arcane/mesh/CompactIncrementalItemConnectivity.h"
26#include "arcane/mesh/ItemConnectivitySelector.h"
27#include "arcane/mesh/AbstractItemFamilyTopologyModifier.h"
28#include "arcane/mesh/NewWithLegacyConnectivity.h"
61 _setTopologyModifier(
new TopologyModifier(
this));
80 m_edge_type = itm->typeFromId(IT_Line2);
86 m_node_connectivity =
dynamic_cast<NewWithLegacyConnectivityType<EdgeFamily,NodeFamily>::type*
>(m_mesh->
itemFamilyNetwork()->getConnectivity(
this,
mesh()->nodeFamily(),connectivityName(
this,
mesh()->nodeFamily())));
87 m_face_connectivity =
dynamic_cast<NewWithLegacyConnectivityType<EdgeFamily,FaceFamily>::type*
>(m_mesh->
itemFamilyNetwork()->getConnectivity(
this,
mesh()->
faceFamily(),connectivityName(
this,
mesh()->faceFamily())));
88 m_cell_connectivity =
dynamic_cast<NewWithLegacyConnectivityType<EdgeFamily,CellFamily>::type*
>(m_mesh->
itemFamilyNetwork()->getConnectivity(
this,
mesh()->cellFamily(),connectivityName(
this,
mesh()->cellFamily())));
92 m_node_connectivity =
new NodeConnectivity(
this,
mesh()->nodeFamily(),
"EdgeNode");
93 m_face_connectivity =
new FaceConnectivity(
this,
mesh()->faceFamily(),
"EdgeFace");
94 m_cell_connectivity =
new CellConnectivity(
this,
mesh()->cellFamily(),
"EdgeCell");
97 _addConnectivitySelector(m_node_connectivity);
98 _addConnectivitySelector(m_face_connectivity);
99 _addConnectivitySelector(m_cell_connectivity);
101 _buildConnectivitySelectors();
107inline void EdgeFamily::
108_createOne(ItemInternal* item,
Int64 uid)
110 m_item_internal_list->edges = _itemsInternal();
111 _allocateInfos(item,uid,m_edge_type);
112 auto nc = m_node_connectivity->trueCustomConnectivity();
114 nc->addConnectedItems(ItemLocalId(item),2);
128 ARCANE_ASSERT((
type_id == IT_Line2),(
""));
143 _createOne(item,uid);
162 ARCANE_ASSERT((
type_id == IT_Line2),(
""));
183 _createOne(item,uid);
194 this->_preAllocate(
nb_item,
true);
204 debug() <<
"Creating the list of ghosts edges";
217 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToNode))
219 m_node_connectivity->replaceItem(edge,index,node);
228 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToCell))
230 _checkValidSourceTargetItems(edge,
new_cell);
240 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToFace))
242 _checkValidSourceTargetItems(edge,
new_face);
249inline void EdgeFamily::
250_removeEdge(
Edge edge)
252 for(
Node node : edge.nodes() )
267 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToCell))
269 _checkValidItem(edge);
279 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToFace))
290 _checkValidItem(edge);
302 m_mesh_connectivity =
c;
303 m_has_edge = Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_HasEdge);
305 m_node_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Edge,
IK_Node);
306 m_face_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Edge,
IK_Face);
307 m_cell_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Edge,
IK_Cell);
309 debug() <<
"Family " <<
name() <<
" prealloc "
310 << m_node_prealloc <<
" by node, "
311 << m_face_prealloc <<
" by face, "
312 << m_cell_prealloc <<
" by cell.";
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Int32 nbCell() const
Nombre de mailles connectées à l'arête.
virtual IItemFamily * nodeFamily()=0
Retourne la famille des noeuds.
virtual IItemFamily * faceFamily()=0
Retourne la famille des faces.
virtual bool useMeshItemFamilyDependencies() const =0
check if the network itemFamily dependencies is activated
virtual ItemTypeMng * itemTypeMng() const =0
Gestionnaire de types d'entités associé
virtual IItemFamilyNetwork * itemFamilyNetwork()=0
Interface du réseau de familles (familles connectées)
bool isSuppressed() const
Vrai si l'entité est supprimée.
Structure interne d'une entité de maillage.
Index d'un Item dans une variable.
Type d'une entité (Item).
Classe de base d'un élément de maillage.
impl::ItemBase itemBase() const
Partie interne de l'entité.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Modification de la topologie des entités d'une famille.
void replaceNode(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace un noeud d'une entité.
void removeCellFromEdge(Edge edge, ItemLocalId cell_to_remove_lid)
Supprime une maille d'une arête.
virtual void computeSynchronizeInfos() override
Construit les structures nécessaires à la synchronisation.
void removeFaceFromEdge(ItemLocalId edge, ItemLocalId face_to_remove)
Supprime une maille d'une arête.
Item findOrAllocOne(Int64 uid, ItemTypeId type_id, MeshInfos &mesh_info, bool &is_alloc) override
Récupère ou alloue une arête de numéro unique uid et de type type.Ajout générique d'item.
void setConnectivity(const Integer c)
Définit la connectivité active pour le maillage associé
NodeFamily * m_node_family
Famille des noeuds associée à cette famille.
void removeEdgeIfNotConnected(Edge edge)
Supprime l'arête si elle n'est plus connectée.
void addFaceToEdge(Edge edge, Face new_face)
Ajoute une maille voisine à une arête.
void replaceNode(ItemLocalId edge, Integer index, ItemLocalId node)
Remplace le noeud d'index index de l'arête edge avec celui de localId() node_lid.
Item allocOne(Int64 uid, ItemTypeId type_id, MeshInfos &mesh_info) override
Version appelées dans l'ajout générique d'item.
void addCellToEdge(Edge edge, Cell new_cell)
Ajoute une maille voisine à une arête.
IMesh * mesh() const override
Maillage associé
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.
Chaîne de caractères unicode.
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flot pour un message de debug.
@ 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.