14#include "arcane/mesh/EdgeFamily.h"
16#include "arcane/utils/FatalErrorException.h"
18#include "arcane/core/IMesh.h"
21#include "arcane/core/ItemPrinter.h"
22#include "arcane/core/Connectivity.h"
23#include "arcane/core/NodesOfItemReorderer.h"
25#include "arcane/mesh/NodeFamily.h"
26#include "arcane/mesh/CompactIncrementalItemConnectivity.h"
27#include "arcane/mesh/ItemConnectivitySelector.h"
28#include "arcane/mesh/AbstractItemFamilyTopologyModifier.h"
29#include "arcane/mesh/NewWithLegacyConnectivity.h"
41:
public AbstractItemFamilyTopologyModifier
44 TopologyModifier(EdgeFamily* f)
45 : AbstractItemFamilyTopologyModifier(f), m_true_family(f){}
49 m_true_family->replaceNode(item_lid,index,new_lid);
52 EdgeFamily* m_true_family;
62 _setTopologyModifier(
new TopologyModifier(
this));
81 m_edge_type = itm->typeFromId(IT_Line2);
87 m_node_connectivity =
dynamic_cast<NewWithLegacyConnectivityType<EdgeFamily,NodeFamily>::type*
>(m_mesh->
itemFamilyNetwork()->getConnectivity(
this,
mesh()->nodeFamily(),connectivityName(
this,
mesh()->nodeFamily())));
88 m_face_connectivity =
dynamic_cast<NewWithLegacyConnectivityType<EdgeFamily,FaceFamily>::type*
>(m_mesh->
itemFamilyNetwork()->getConnectivity(
this,
mesh()->faceFamily(),connectivityName(
this,
mesh()->faceFamily())));
89 m_cell_connectivity =
dynamic_cast<NewWithLegacyConnectivityType<EdgeFamily,CellFamily>::type*
>(m_mesh->
itemFamilyNetwork()->getConnectivity(
this,
mesh()->cellFamily(),connectivityName(
this,
mesh()->cellFamily())));
93 m_node_connectivity =
new NodeConnectivity(
this,
mesh()->nodeFamily(),
"EdgeNode");
94 m_face_connectivity =
new FaceConnectivity(
this,
mesh()->faceFamily(),
"EdgeFace");
95 m_cell_connectivity =
new CellConnectivity(
this,
mesh()->cellFamily(),
"EdgeCell");
98 _addConnectivitySelector(m_node_connectivity);
99 _addConnectivitySelector(m_face_connectivity);
100 _addConnectivitySelector(m_cell_connectivity);
102 _buildConnectivitySelectors();
108inline void EdgeFamily::
109_createOne(ItemInternal* item,
Int64 uid)
111 m_item_internal_list->edges = _itemsInternal();
112 _allocateInfos(item,uid,m_edge_type);
113 auto nc = m_node_connectivity->trueCustomConnectivity();
115 nc->addConnectedItems(ItemLocalId(item),2);
129 ARCANE_ASSERT((type_id == IT_Line2),(
""));
130 ARCANE_UNUSED(type_id);
144 _createOne(item,uid);
163 ARCANE_ASSERT((type_id == IT_Line2),(
""));
164 ARCANE_UNUSED(type_id);
184 _createOne(item,uid);
195 this->_preAllocate(nb_item,
true);
205 debug() <<
"Creating the list of ghosts edges";
218 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToNode))
220 m_node_connectivity->replaceItem(edge,index,node);
229 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToCell))
231 _checkValidSourceTargetItems(edge,new_cell);
241 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToFace))
243 _checkValidSourceTargetItems(edge,new_face);
250inline void EdgeFamily::
251_removeEdge(
Edge edge)
268 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToCell))
270 _checkValidItem(edge);
271 m_cell_connectivity->removeConnectedItem(
ItemLocalId(edge),cell_to_remove_lid);
280 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_EdgeToFace))
282 m_face_connectivity->removeConnectedItem(edge,face_to_remove);
291 _checkValidItem(edge);
303 m_mesh_connectivity = c;
304 m_has_edge = Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_HasEdge);
306 m_node_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Edge,
IK_Node);
307 m_face_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Edge,
IK_Face);
308 m_cell_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Edge,
IK_Cell);
310 debug() <<
"Family " <<
name() <<
" prealloc "
311 << m_node_prealloc <<
" by node, "
312 << m_face_prealloc <<
" by face, "
313 << m_cell_prealloc <<
" by cell.";
320reorientEdgesIfNeeded()
334 if (edge_type == ITI_Line2 || edge_type == ITI_Line3) {
335 new_nodes_lid.
resize(nb_node);
336 for (
Int32 i = 0; i < nb_node; ++i)
337 new_nodes_lid[i] = edge.
nodeId(i);
341 std::swap(new_nodes_lid[0], new_nodes_lid[1]);
346 ARCANE_FATAL(
"Reorientation of edge of type '{0}' not yet supported", edge_type);
348 info() <<
"End Edge Reorientation";
#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.
Fonctions utilitaires sur le maillage.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
Int32 nbNode() const
Nombre de sommets de l'arête.
Int32 nbCell() const
Nombre de mailles connectées à l'arête.
virtual IItemFamily * nodeFamily()=0
Retourne la famille des noeuds.
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).
NodeLocalId nodeId(Int32 index) const
i-ème noeud de l'entité.
Node node(Int32 i) const
i-ème noeud de l'entité
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
Classe de base d'un élément de maillage.
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
ItemTypeId itemTypeId() const
Type de l'entité
impl::ItemBase itemBase() const
Partie interne de l'entité.
Classe utilitaire pour réordonner les noeuds d'une entité.
Tableau 1D de données avec buffer pré-alloué sur la pile.
Chaîne de caractères unicode.
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flot pour un message de debug.
TraceMessage info() const
Flot pour un message d'information.
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.
Connectivité incrémentale item->item[].
void replaceConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids) override
Remplace les entités de source_item par les entités de localId() target_local_ids.
IMesh * mesh() const override
Maillage associé
String fullName() const override
Nom complet de la famille (avec celui du maillage)
ItemGroup allItems() const override
Groupe de toutes les entités.
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.
Integer & nbEdge()
Nombre d'arêtes dans le maillage.
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
@ 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.
std::int32_t Int32
Type entier signé sur 32 bits.