Arcane  4.1.11.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
CellFamily.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* CellFamily.cc (C) 2000-2025 */
9/* */
10/* Cell Family. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/mesh/CellFamily.h"
15
16#include "arcane/utils/FatalErrorException.h"
17
18#include "arcane/core/IMesh.h"
19#include "arcane/core/ISubDomain.h"
20#include "arcane/core/ItemInternalEnumerator.h"
21#include "arcane/core/Connectivity.h"
22
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"
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36namespace Arcane::mesh
37{
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
41
43: public AbstractItemFamilyTopologyModifier
44{
45 public:
46
47 TopologyModifier(CellFamily* f)
48 : AbstractItemFamilyTopologyModifier(f)
49 , m_true_family(f)
50 {}
51
52 public:
53
54 void replaceNode(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
55 {
56 m_true_family->replaceNode(item_lid, index, new_lid);
57 }
58 void replaceEdge(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
59 {
60 m_true_family->replaceEdge(item_lid, index, new_lid);
61 }
62 void replaceFace(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
63 {
64 m_true_family->replaceFace(item_lid, index, new_lid);
65 }
66 void replaceHParent(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
67 {
68 m_true_family->replaceHParent(item_lid, index, new_lid);
69 }
70 void replaceHChild(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
71 {
72 m_true_family->replaceHChild(item_lid, index, new_lid);
73 }
74
75 private:
76
77 CellFamily* m_true_family;
78};
79
80/*---------------------------------------------------------------------------*/
81/*---------------------------------------------------------------------------*/
82
83CellFamily::
84CellFamily(IMesh* mesh, const String& name)
85: ItemFamily(mesh, IK_Cell, name)
86, m_node_prealloc(0)
87, m_edge_prealloc(0)
88, m_face_prealloc(0)
89, m_mesh_connectivity(0)
90, m_node_family(nullptr)
91, m_edge_family(nullptr)
92, m_face_family(nullptr)
93, m_node_connectivity(nullptr)
94, m_edge_connectivity(nullptr)
95, m_face_connectivity(nullptr)
96, m_hparent_connectivity(nullptr)
97{
98 _setTopologyModifier(new TopologyModifier(this));
99}
100
101/*---------------------------------------------------------------------------*/
102/*---------------------------------------------------------------------------*/
103
104CellFamily::
105~CellFamily()
106{
107}
108
109/*---------------------------------------------------------------------------*/
110/*---------------------------------------------------------------------------*/
111
112void CellFamily::
113build()
114{
115 ItemFamily::build();
116
117 m_node_family = ARCANE_CHECK_POINTER(dynamic_cast<NodeFamily*>(m_mesh->nodeFamily()));
118 m_edge_family = ARCANE_CHECK_POINTER(dynamic_cast<EdgeFamily*>(m_mesh->edgeFamily()));
119 m_face_family = ARCANE_CHECK_POINTER(dynamic_cast<FaceFamily*>(m_mesh->faceFamily()));
120
121 IItemFamilyNetwork* network = m_mesh->itemFamilyNetwork();
122 if (m_mesh->useMeshItemFamilyDependencies()) { // temporary to fill legacy, even with family dependencies
123 auto* nc = network->getConnectivity(this, m_node_family, connectivityName(this, m_node_family));
124 using NodeNetwork = NewWithLegacyConnectivityType<CellFamily, NodeFamily>::type;
125 m_node_connectivity = ARCANE_CHECK_POINTER(dynamic_cast<NodeNetwork*>(nc));
126 using EdgeNetwork = NewWithLegacyConnectivityType<CellFamily, EdgeFamily>::type;
127 auto* ec = network->getConnectivity(this, m_edge_family, connectivityName(this, m_edge_family));
128 m_edge_connectivity = ARCANE_CHECK_POINTER(dynamic_cast<EdgeNetwork*>(ec));
129 using FaceNetwork = NewWithLegacyConnectivityType<CellFamily, FaceFamily>::type;
130 auto* fc = network->getConnectivity(this, m_face_family, connectivityName(this, m_face_family));
131 m_face_connectivity = ARCANE_CHECK_POINTER(dynamic_cast<FaceNetwork*>(fc));
132 }
133 else {
134 m_node_connectivity = new NodeConnectivity(this, m_node_family, "CellNode");
135 m_edge_connectivity = new EdgeConnectivity(this, m_edge_family, "CellEdge");
136 m_face_connectivity = new FaceConnectivity(this, m_face_family, "CellFace");
137 }
138 m_hparent_connectivity = new HParentConnectivity(this, this, "HParentCell");
139 m_hchild_connectivity = new HChildConnectivity(this, this, "HChildCell");
140
141 _addConnectivitySelector(m_node_connectivity);
142 _addConnectivitySelector(m_edge_connectivity);
143 _addConnectivitySelector(m_face_connectivity);
144 _addConnectivitySelector(m_hparent_connectivity);
145 _addConnectivitySelector(m_hchild_connectivity);
146
147 _buildConnectivitySelectors();
148}
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
152
153inline void CellFamily::
154_createOne(ItemInternal* item, Int64 uid, ItemTypeInfo* type)
155{
156 ItemLocalId item_lid(item);
157 m_item_internal_list->cells = _itemsInternal();
158 _allocateInfos(item, uid, type);
159 auto nc = m_node_connectivity->trueCustomConnectivity();
160 nc->addConnectedItems(item_lid, type->nbLocalNode());
161 if (m_edge_prealloc != 0) {
162 auto ec = m_edge_connectivity->trueCustomConnectivity();
163 ec->addConnectedItems(item_lid, type->nbLocalEdge());
164 }
165 auto fc = m_face_connectivity->trueCustomConnectivity();
166 fc->addConnectedItems(item_lid, type->nbLocalFace());
167}
168
169/*---------------------------------------------------------------------------*/
170/*---------------------------------------------------------------------------*/
171
172inline void CellFamily::
173_createOne(ItemInternal* item, Int64 uid, ItemTypeId type_id)
174{
175 _createOne(item, uid, _itemTypeMng()->typeFromId(type_id));
176}
177
178/*---------------------------------------------------------------------------*/
179/*---------------------------------------------------------------------------*/
180
182allocOne(Int64 uid, ItemTypeId type_id, MeshInfos& mesh_info)
183{
184 ++mesh_info.nbCell();
185 return allocOne(uid, type_id);
186}
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
190
191Item CellFamily::
192findOrAllocOne(Int64 uid, ItemTypeId type_id, MeshInfos& mesh_info, bool& is_alloc)
193{
194 auto cell = findOrAllocOne(uid, type_id, is_alloc);
195 if (is_alloc)
196 ++mesh_info.nbCell();
197 return cell;
198}
199
200/*---------------------------------------------------------------------------*/
201/*---------------------------------------------------------------------------*/
202
204allocOne(Int64 uid, ItemTypeId type_id)
205{
206 ItemInternal* item = _allocOne(uid);
207 _createOne(item, uid, type_id);
208 return item;
209}
210
211/*---------------------------------------------------------------------------*/
212/*---------------------------------------------------------------------------*/
213
214Cell CellFamily::
215findOrAllocOne(Int64 uid, ItemTypeId type_id, bool& is_alloc)
216{
217 return findOrAllocOne(uid, _itemTypeMng()->typeFromId(type_id), is_alloc);
218}
219
220/*---------------------------------------------------------------------------*/
221/*---------------------------------------------------------------------------*/
222
223ItemInternal* CellFamily::
224allocOne(Int64 uid, ItemTypeInfo* type)
225{
226 ItemInternal* item = _allocOne(uid);
227 _createOne(item, uid, type);
228 return item;
229}
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
234ItemInternal* CellFamily::
235findOrAllocOne(Int64 uid, ItemTypeInfo* type, bool& is_alloc)
236{
237 // ARCANE_ASSERT((type->typeId() != IT_Line2),("Bad new 1D cell uid=%ld", uid)); // Assertion OK, but expensive ?
238 ItemInternal* item = _findOrAllocOne(uid, is_alloc);
239 if (is_alloc)
240 _createOne(item, uid, type);
241 return item;
242}
243
244/*---------------------------------------------------------------------------*/
245/*---------------------------------------------------------------------------*/
246
247void CellFamily::
248preAllocate(Integer nb_item)
249{
250 this->_preAllocate(nb_item, true);
251}
252
253/*---------------------------------------------------------------------------*/
254/*---------------------------------------------------------------------------*/
255
258{
259 debug() << "Creating the list of ghost cells";
261}
262
263/*---------------------------------------------------------------------------*/
264/*---------------------------------------------------------------------------*/
265
268{
269 ItemLocalId cell_lid(cell.localId());
270
271 // Must first remove faces, then edges, then nodes
272 // see notes on _removeOne in the families.
273 // NOTE GG: it is normally no longer necessary to do this in a fixed order
274 // because these methods do not delete the entities. Destruction
275 // happens when calling removeNotConnectedSubItems().
276 for (Face face : cell.faces())
277 m_face_family->removeCellFromFace(face, cell_lid);
278 for (Edge edge : cell.edges())
279 m_edge_family->removeCellFromEdge(edge, cell_lid);
280 for (Node node : cell.nodes())
281 m_node_family->removeCellFromNode(node, cell_lid);
282}
283
284/*---------------------------------------------------------------------------*/
285/*---------------------------------------------------------------------------*/
286
288removeCell(Cell icell)
289{
290#ifdef ARCANE_CHECK
291 _checkValidItem(icell);
292 if (icell.itemBase().isSuppressed())
293 ARCANE_FATAL("Cell '{0}' is already removed", icell.uniqueId());
294#endif
295 // TODO: remove connected faces and edges.
296 _removeSubItems(icell);
299 if (icell.level() > 0) {
300 _removeParentCellToCell(icell);
301 Cell parent_cell = icell.hParent();
302 _removeChildCellToCell(parent_cell, icell);
303 }
304 _removeOne(icell);
305}
306
307/*---------------------------------------------------------------------------*/
308/*---------------------------------------------------------------------------*/
309
312{
313 CellLocalIdToCellConverter cells(this);
314 for (Int32 lid : cells_local_id)
315 removeCell(cells[lid]);
316}
317
318/*---------------------------------------------------------------------------*/
319/*---------------------------------------------------------------------------*/
320
322detachCell(Cell icell)
323{
324#ifdef ARCANE_CHECK
325 _checkValidItem(icell);
326 if (icell.itemBase().isSuppressed())
327 ARCANE_FATAL("Cell '{0}' is already removed", icell.uniqueId());
328#endif /* ARCANE_CHECK */
329
330 _removeSubItems(icell);
332 if (icell.level() > 0) {
333 _removeParentCellToCell(icell);
334 Cell parent_cell = icell.hParent();
335 _removeChildCellToCell(parent_cell, icell);
336 }
337 _detachOne(icell);
338}
339
340/*---------------------------------------------------------------------------*/
341/*---------------------------------------------------------------------------*/
342
344detachCells2(Int32ConstArrayView cells_local_id)
345{
346 // Implemented in ItemFamily. Even if only cells are detached, the implementation
347 // is not CellFamily specific, thx to ItemFamilyNetwork
348 _detachCells2(cells_local_id);
349}
350
351/*---------------------------------------------------------------------------*/
352/*---------------------------------------------------------------------------*/
359{
360 // The order (faces, then edges then nodes) is important.
361 // Do not change.
362
363 // Remove faces from the mesh that are no longer connected
364 for (Face face : cell.faces())
365 m_face_family->removeFaceIfNotConnected(face);
366
367 // Remove edges from the mesh that are no longer connected
368 for (Edge edge : cell.edges())
369 m_edge_family->removeEdgeIfNotConnected(edge);
370
371 // remove nodes from the mesh that are no longer connected
372 for (Node node : cell.nodes())
373 m_node_family->removeNodeIfNotConnected(node);
374}
375
376/*---------------------------------------------------------------------------*/
377/*---------------------------------------------------------------------------*/
378
381{
383
384 // remove the cell
385 _removeDetachedOne(cell);
386}
387
388/*---------------------------------------------------------------------------*/
389/*---------------------------------------------------------------------------*/
390
392internalRemoveItems(Int32ConstArrayView local_ids, bool keep_ghost)
393{
394 ARCANE_UNUSED(keep_ghost);
395 for (Integer i = 0, is = local_ids.size(); i < is; ++i) {
396 removeCell(m_item_internal_list->cells[local_ids[i]]);
397 }
398}
399
400/*---------------------------------------------------------------------------*/
401/*---------------------------------------------------------------------------*/
408{
409 m_node_connectivity->replaceItem(cell, index, node);
410}
411
412/*---------------------------------------------------------------------------*/
413/*---------------------------------------------------------------------------*/
420{
421 m_edge_connectivity->replaceItem(cell, index, edge);
422}
423
424/*---------------------------------------------------------------------------*/
425/*---------------------------------------------------------------------------*/
432{
433 m_face_connectivity->replaceItem(cell, index, face);
434}
435
436/*---------------------------------------------------------------------------*/
437/*---------------------------------------------------------------------------*/
438
439void CellFamily::
440replaceHChild(ItemLocalId cell, Integer index, ItemLocalId child_cell)
441{
442 m_hchild_connectivity->replaceItem(cell, index, child_cell);
443}
444
445/*---------------------------------------------------------------------------*/
446/*---------------------------------------------------------------------------*/
447
448void CellFamily::
449replaceHParent(ItemLocalId cell, Integer index, ItemLocalId parent_cell)
450{
451 m_hparent_connectivity->replaceItem(cell, index, parent_cell);
452}
453
454/*---------------------------------------------------------------------------*/
455/*---------------------------------------------------------------------------*/
456
459{
460 m_mesh_connectivity = c;
461 m_node_prealloc = Connectivity::getPrealloc(m_mesh_connectivity, IK_Cell, IK_Node);
462 m_node_connectivity->setPreAllocatedSize(m_node_prealloc);
463 // Edges only exist in dimension 3.
464 if (mesh()->dimension() == 3) {
465 Integer edge_prealloc = Connectivity::getPrealloc(m_mesh_connectivity, IK_Cell, IK_Edge);
466 m_edge_connectivity->setPreAllocatedSize(edge_prealloc);
467 if (Connectivity::hasConnectivity(m_mesh_connectivity, Connectivity::CT_HasEdge))
468 m_edge_prealloc = edge_prealloc;
469 }
470 m_face_prealloc = Connectivity::getPrealloc(m_mesh_connectivity, IK_Cell, IK_Face);
471 m_face_connectivity->setPreAllocatedSize(m_face_prealloc);
472 debug() << "Family " << name() << " prealloc "
473 << m_node_prealloc << " by node, "
474 << m_edge_prealloc << " by edge, "
475 << m_face_prealloc << " by face.";
476}
477
478/*---------------------------------------------------------------------------*/
479/*---------------------------------------------------------------------------*/
480
482_addParentCellToCell(Cell cell, Cell parent_cell)
483{
484 m_hparent_connectivity->addConnectedItem(ItemLocalId(cell), ItemLocalId(parent_cell));
485}
486
487/*---------------------------------------------------------------------------*/
488/*---------------------------------------------------------------------------*/
489
490void CellFamily::
491_addChildCellToCell2(Cell iparent_cell, Cell child_cell)
492{
493 m_hchild_connectivity->addConnectedItem(ItemLocalId(iparent_cell), ItemLocalId(child_cell));
494}
495
496/*---------------------------------------------------------------------------*/
497/*---------------------------------------------------------------------------*/
498
499void CellFamily::
500_addChildCellToCell(Cell iparent_cell, Integer position, Cell child_cell)
501{
502 Cell parent_cell(iparent_cell);
503 // NOTE GG: The old method below in comment seems
504 // to only work if \a position corresponds to parent_cell->nbHChildren().
505 // And in this case, it is not necessary to make 2 calls.
506 // m_hchild_connectivity->addConnectedItem(parent_cell,ItemLocalId(NULL_ITEM_LOCAL_ID));
507 Int32 nb_connected = m_hchild_connectivity->trueCustomConnectivity()->nbConnectedItem(parent_cell);
508 for (Int32 i = nb_connected; i < (position + 1); ++i)
509 m_hchild_connectivity->addConnectedItem(parent_cell, ItemLocalId(NULL_ITEM_LOCAL_ID));
510 auto x = _topologyModifier();
511 x->replaceHChild(ItemLocalId(iparent_cell), position, child_cell);
512 parent_cell.mutableItemBase().addFlags(ItemFlags::II_Inactive);
513}
514
515/*---------------------------------------------------------------------------*/
516/*---------------------------------------------------------------------------*/
517
518void CellFamily::
519_addChildrenCellsToCell(Cell parent_cell, Int32ConstArrayView children_cells_lid)
520{
521 Integer nb_children = children_cells_lid.size();
522 auto c = m_hchild_connectivity->trueCustomConnectivity();
523 if (c) {
524 ItemLocalId item_lid(parent_cell);
525 c->addConnectedItems(item_lid, nb_children);
526 }
527 _updateSharedInfo();
528
529 auto x = _topologyModifier();
530 for (Integer i = 0; i < nb_children; ++i)
531 x->replaceHChild(ItemLocalId(parent_cell), i, ItemLocalId(children_cells_lid[i]));
532
533 parent_cell.mutableItemBase().addFlags(ItemFlags::II_Inactive);
534}
535
536/*---------------------------------------------------------------------------*/
537/*---------------------------------------------------------------------------*/
538
539void CellFamily::
540_removeParentCellToCell(Cell cell)
541{
542 m_hparent_connectivity->removeConnectedItems(ItemLocalId(cell));
543}
544
545/*---------------------------------------------------------------------------*/
546/*---------------------------------------------------------------------------*/
547
548void CellFamily::
549_removeChildCellToCell(Cell parent_cell, Cell cell)
550{
551 m_hchild_connectivity->removeConnectedItem(ItemLocalId(parent_cell), ItemLocalId(cell));
552 parent_cell.mutableItemBase().removeFlags(ItemFlags::II_Inactive);
553}
554
555/*---------------------------------------------------------------------------*/
556/*---------------------------------------------------------------------------*/
557
558void CellFamily::
559_removeChildrenCellsToCell(Cell parent_cell)
560{
561 m_hchild_connectivity->removeConnectedItems(ItemLocalId(parent_cell));
562 parent_cell.mutableItemBase().removeFlags(ItemFlags::II_Inactive);
563}
564
565/*---------------------------------------------------------------------------*/
566/*---------------------------------------------------------------------------*/
567
568} // namespace Arcane::mesh
569
570/*---------------------------------------------------------------------------*/
571/*---------------------------------------------------------------------------*/
#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.
Maille d'un maillage.
Definition Item.h:1214
FaceConnectedListViewType faces() const
Liste des faces de la maille.
Definition Item.h:1298
Int32 level() const
Definition Item.h:1368
Cell hParent() const
Definition Item.h:1327
EdgeConnectedListViewType edges() const
Liste des arêtes de la maille.
Definition Item.h:1316
Vue constante d'un tableau de type T.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Arête d'une maille.
Definition Item.h:826
Face d'une maille.
Definition Item.h:964
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).
bool isSuppressed() const
Vrai si l'entité est supprimée.
@ II_Inactive
L'entité est inactive //COARSEN_INACTIVE,.
Definition ItemFlags.h:80
Structure interne d'une entité de maillage.
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Type d'une entité (Item).
Definition ItemTypeId.h:32
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
Definition Item.h:794
Classe de base d'un élément de maillage.
Definition Item.h:83
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:219
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Definition Item.h:225
impl::ItemBase itemBase() const
Partie interne de l'entité.
Definition Item.h:369
Noeud d'un maillage.
Definition Item.h:582
Chaîne de caractères unicode.
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flot pour un message de debug.
void replaceFace(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une face d'une entité.
Definition CellFamily.cc:62
void replaceNode(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace un noeud d'une entité.
Definition CellFamily.cc:54
void replaceHParent(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une entité parente d'une entité.
Definition CellFamily.cc:66
void replaceEdge(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une arête d'une entité.
Definition CellFamily.cc:58
void replaceHChild(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Remplace une entité enfant d'une entité.
Definition CellFamily.cc:70
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)
Replaces the node at index index of the mesh cell with that of localId() node.
void removeCell(Cell cell)
void removeCells(ConstArrayView< Int32 > cells_local_id)
Removes the meshes whose local numbers are cells_local_id.
void removeDetachedCell(Cell cell)
virtual void computeSynchronizeInfos() override
Construit les structures nécessaires à la synchronisation.
void _removeNotConnectedSubItems(Cell cell)
Removes mesh sub-entities that are not connected to any mesh.
void _addParentCellToCell(Cell cell, Cell parent_cell)
AMR.
void replaceFace(ItemLocalId cell, Integer index, ItemLocalId face)
Replaces the face at index index of the mesh cell with that of localId() face.
void detachCell(Cell cell)
void replaceEdge(ItemLocalId cell, Integer index, ItemLocalId edge)
Replaces the edge at index index of the mesh cell with that of localId() edge.
void setConnectivity(const Integer c)
Defines the active connectivity for the associated mesh.
Integer nbConnectedItem(ItemLocalId lid) const final
Nombre d'entité connectées à l'entité source de numéro local lid.
IMesh * mesh() const override
Maillage associé
IItemFamilyTopologyModifier * _topologyModifier() override
Interface du modificateur de topologie.
Definition ItemFamily.h:402
void computeSynchronizeInfos() override
Construit les structures nécessaires à la synchronisation.
String name() const override
Nom de la famille.
Definition ItemFamily.h:140
Class containing mesh information.
Definition MeshInfos.h:36
Integer & nbCell()
Number of cells in the mesh.
Definition MeshInfos.h:69
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:482
@ 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.
@ Cell
Le maillage est AMR par maille.
Definition MeshKind.h:52
std::int32_t Int32
Type entier signé sur 32 bits.