14#include "arcane/mesh/NodeFamily.h"
16#include "arcane/utils/FatalErrorException.h"
17#include "arcane/utils/PlatformUtils.h"
18#include "arcane/utils/ITraceMng.h"
19#include "arcane/utils/ValueConvert.h"
21#include "arcane/core/ISubDomain.h"
22#include "arcane/core/ItemPrinter.h"
23#include "arcane/core/VariableTypes.h"
24#include "arcane/core/IMesh.h"
26#include "arcane/core/Connectivity.h"
27#include "arcane/core/ConnectivityItemVector.h"
28#include "arcane/core/Properties.h"
30#include "arcane/mesh/IncrementalItemConnectivity.h"
31#include "arcane/mesh/CompactIncrementalItemConnectivity.h"
32#include "arcane/mesh/ItemConnectivitySelector.h"
33#include "arcane/mesh/AbstractItemFamilyTopologyModifier.h"
34#include "arcane/mesh/NewWithLegacyConnectivity.h"
35#include "arcane/mesh/FaceFamily.h"
80 _setTopologyModifier(
new TopologyModifier(
this));
89 delete m_nodes_coords;
103 m_nodes_coords =
nullptr;
111 m_edge_connectivity =
dynamic_cast<NewWithLegacyConnectivityType<NodeFamily,EdgeFamily>::type*
>(m_mesh->
itemFamilyNetwork()->getConnectivity(
this,
mesh()->edgeFamily(),connectivityName(
this,
mesh()->edgeFamily())));
112 m_face_connectivity =
dynamic_cast<NewWithLegacyConnectivityType<NodeFamily,FaceFamily>::type*
>(m_mesh->
itemFamilyNetwork()->getConnectivity(
this,m_face_family,connectivityName(
this,
mesh()->faceFamily())));
113 m_cell_connectivity =
dynamic_cast<NewWithLegacyConnectivityType<NodeFamily,CellFamily>::type*
>(m_mesh->
itemFamilyNetwork()->getConnectivity(
this,
mesh()->cellFamily(),connectivityName(
this,
mesh()->cellFamily())));
117 m_edge_connectivity =
new EdgeConnectivity(
this,
mesh()->edgeFamily(),
"NodeEdge");
118 m_face_connectivity =
new FaceConnectivity(
this,m_face_family,
"NodeFace");
119 m_cell_connectivity =
new CellConnectivity(
this,
mesh()->cellFamily(),
"NodeCell");
121 m_hparent_connectivity =
new HParentConnectivity(
this,
this,
"HParentNode");
122 m_hchild_connectivity =
new HChildConnectivity(
this,
this,
"HChildNode");
124 _addConnectivitySelector(m_edge_connectivity);
125 _addConnectivitySelector(m_face_connectivity);
126 _addConnectivitySelector(m_cell_connectivity);
127 _addConnectivitySelector(m_hparent_connectivity);
128 _addConnectivitySelector(m_hchild_connectivity);
130 _buildConnectivitySelectors();
137preAllocate(Integer nb_item)
139 this->_preAllocate(nb_item,
true);
149 m_nodes_coords->setUsed(
true);
150 ItemFamily::_endAllocate();
157addCellToNode(Node node,Cell new_cell)
159 _checkValidSourceTargetItems(node,new_cell);
160 Int32 cell_lid = new_cell.localId();
161 m_cell_connectivity->addConnectedItem(ItemLocalId(node),ItemLocalId(cell_lid));
168addFaceToNode(Node node,Face new_face)
170 if (m_no_face_connectivity)
173 _checkValidSourceTargetItems(node,new_face);
174 m_face_connectivity->addConnectedItem(ItemLocalId(node),ItemLocalId(new_face));
181addEdgeToNode(Node node,Edge new_edge)
183 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_NodeToEdge))
186 _checkValidSourceTargetItems(node,new_edge);
187 m_edge_connectivity->addConnectedItem(ItemLocalId(node),ItemLocalId(new_edge));
194removeEdgeFromNode(ItemLocalId node,ItemLocalId edge_to_remove)
196 if (!Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_NodeToEdge))
198 m_edge_connectivity->removeConnectedItem(node,edge_to_remove);
205removeFaceFromNode(ItemLocalId node,ItemLocalId face_to_remove)
207 if (m_no_face_connectivity)
210 m_face_connectivity->removeConnectedItem(node,face_to_remove);
217removeCellFromNode(Node node,ItemLocalId cell_to_remove_lid)
219 _checkValidItem(node);
220 m_cell_connectivity->removeConnectedItem(ItemLocalId(node),cell_to_remove_lid);
229 _checkValidItem(node);
243 debug() <<
"Creating the ghosts nodes list";
250inline void NodeFamily::
251_removeNode(
Node node)
269 m_cell_connectivity->replaceItem(node,index,cell);
281 m_edge_connectivity->replaceItem(node,index,edge);
293 m_face_connectivity->replaceItem(node,index,face);
302 m_mesh_connectivity =
c;
303 if (Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_HasEdge))
304 m_edge_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Node,
IK_Edge);
305 m_face_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Node,
IK_Face);
306 m_cell_prealloc = Connectivity::getPrealloc(m_mesh_connectivity,
IK_Node,
IK_Cell);
307 m_face_connectivity->setPreAllocatedSize(m_face_prealloc);
308 m_cell_connectivity->setPreAllocatedSize(m_cell_prealloc);
309 debug() <<
"Family " <<
name() <<
" prealloc "
310 << m_edge_prealloc <<
" by edge, "
311 << m_face_prealloc <<
" by face, "
312 << m_cell_prealloc <<
" by cell.";
313 m_no_face_connectivity = !Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_NodeToFace);
330 bool operator()(Int32
item1,Int32
item2)
const
332 return m_items.uniqueId(
item1) < m_items.uniqueId(
item2);
351 bool operator()(Integer
item1,Integer
item2)
const
353 m_msg->
info() <<
"** Compare ptr=" << m_items.
data()
355 <<
" i1=" << m_items[
item1] <<
" i2=" << m_items[
item2]
356 <<
" uid1=" << m_items[
item1]->uniqueId()
357 <<
" uid2=" << m_items[
item2]->uniqueId();
358 return m_items[
item1]->uniqueId() < m_items[
item2]->uniqueId();
388sortInternalReferences()
391 _sortConnectedItems(
mesh()->cellFamily(),m_cell_connectivity->trueCustomConnectivity());
397 info(4) <<
"Sorting connected faces and edges family=" <<
fullName();
398 _sortConnectedItems(m_face_family,m_face_connectivity->trueCustomConnectivity());
399 if (Connectivity::hasConnectivity(m_mesh_connectivity,Connectivity::CT_NodeToEdge))
400 _sortConnectedItems(
mesh()->edgeFamily(),m_edge_connectivity->trueCustomConnectivity());
414 m_face_family->reorientFacesIfNeeded();
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Fonctions utilitaires sur le maillage.
Interface d'une famille d'entités.
virtual ItemInfoListView itemInfoListView()=0
Vue sur la liste d'informations sur les entités.
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.
Vue sur une liste pour obtenir des informations sur les entités.
Index d'un Item dans une variable.
impl::ItemBase itemBase() const
Partie interne de l'entité.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Int32 nbCell() const
Nombre de mailles connectées au noeud.
bool getBoolWithDefault(const String &name, bool default_value) const
Valeur de la propriété de nom name.
Modification de la topologie des entités d'une famille.
Connectivité incrémentale item->item[].
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 notifyItemsUniqueIdChanged() override
Notifie que les numéros uniques des entités ont été modifiées.
void computeSynchronizeInfos() override
Construit les structures nécessaires à la synchronisation.
Properties * properties() override
Propriétés associées à cette famille.
String name() const override
Nom de la famille.
void replaceCell(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une maille d'une entité.
void replaceFace(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une face d'une entité.
void replaceEdge(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une arête d'une entité.
void computeSynchronizeInfos() override
Construit les structures nécessaires à la synchronisation.
void replaceCell(ItemLocalId node, Integer index, ItemLocalId cell)
Remplace la maille d'index index du noeud node avec celle de localId() node_lid.
void removeNodeIfNotConnected(Node node)
Supprime le noeud siln'est plus connecté
void replaceFace(ItemLocalId node, Integer index, ItemLocalId face)
Remplace la face d'index index du noeud node avec celle de localId() face_lid.
void notifyItemsUniqueIdChanged() override
Notifie que les numéros uniques des entités ont été modifiées.
void setConnectivity(const Integer c)
Définit la connectivité active pour le maillage associé
void replaceEdge(ItemLocalId node, Integer index, ItemLocalId edge)
Remplace l'arête d'index index du noeud node avec celle de localId() face_lid.
ItemTypeInfo * m_node_type
Instance contenant le type des noeuds.
bool m_is_sort_connected_faces_and_edges
Indique si on trie les faces et arêtes connectées aux noeuds.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
constexpr const_pointer data() const noexcept
Pointeur sur la mémoire allouée.
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
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.
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
@ 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.