Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
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/*---------------------------------------------------------------------------*/
353
360{
361 // The order (faces, then edges then nodes) is important.
362 // Do not change.
363
364 // Remove faces from the cell that are no longer connected
365 for (Face face : cell.faces())
366 m_face_family->removeFaceIfNotConnected(face);
367
368 // Remove edges from the cell that are no longer connected
369 for (Edge edge : cell.edges())
370 m_edge_family->removeEdgeIfNotConnected(edge);
371
372 // remove nodes from the cell that are no longer connected
373 for (Node node : cell.nodes())
374 m_node_family->removeNodeIfNotConnected(node);
375}
376
377/*---------------------------------------------------------------------------*/
378/*---------------------------------------------------------------------------*/
379
382{
384
385 // remove the cell
386 _removeDetachedOne(cell);
387}
388
389/*---------------------------------------------------------------------------*/
390/*---------------------------------------------------------------------------*/
391
393internalRemoveItems(Int32ConstArrayView local_ids, bool keep_ghost)
394{
395 ARCANE_UNUSED(keep_ghost);
396 for (Integer i = 0, is = local_ids.size(); i < is; ++i) {
397 removeCell(m_item_internal_list->cells[local_ids[i]]);
398 }
399}
400
401/*---------------------------------------------------------------------------*/
402/*---------------------------------------------------------------------------*/
403
410{
411 m_node_connectivity->replaceItem(cell, index, node);
412}
413
414/*---------------------------------------------------------------------------*/
415/*---------------------------------------------------------------------------*/
416
423{
424 m_edge_connectivity->replaceItem(cell, index, edge);
425}
426
427/*---------------------------------------------------------------------------*/
428/*---------------------------------------------------------------------------*/
429
436{
437 m_face_connectivity->replaceItem(cell, index, face);
438}
439
440/*---------------------------------------------------------------------------*/
441/*---------------------------------------------------------------------------*/
442
443void CellFamily::
444replaceHChild(ItemLocalId cell, Integer index, ItemLocalId child_cell)
445{
446 m_hchild_connectivity->replaceItem(cell, index, child_cell);
447}
448
449/*---------------------------------------------------------------------------*/
450/*---------------------------------------------------------------------------*/
451
452void CellFamily::
453replaceHParent(ItemLocalId cell, Integer index, ItemLocalId parent_cell)
454{
455 m_hparent_connectivity->replaceItem(cell, index, parent_cell);
456}
457
458/*---------------------------------------------------------------------------*/
459/*---------------------------------------------------------------------------*/
460
463{
464 m_mesh_connectivity = c;
465 m_node_prealloc = Connectivity::getPrealloc(m_mesh_connectivity, IK_Cell, IK_Node);
466 m_node_connectivity->setPreAllocatedSize(m_node_prealloc);
467 // Edges only exist in dimension 3.
468 if (mesh()->dimension() == 3) {
469 Integer edge_prealloc = Connectivity::getPrealloc(m_mesh_connectivity, IK_Cell, IK_Edge);
470 m_edge_connectivity->setPreAllocatedSize(edge_prealloc);
471 if (Connectivity::hasConnectivity(m_mesh_connectivity, Connectivity::CT_HasEdge))
472 m_edge_prealloc = edge_prealloc;
473 }
474 m_face_prealloc = Connectivity::getPrealloc(m_mesh_connectivity, IK_Cell, IK_Face);
475 m_face_connectivity->setPreAllocatedSize(m_face_prealloc);
476 debug() << "Family " << name() << " prealloc "
477 << m_node_prealloc << " by node, "
478 << m_edge_prealloc << " by edge, "
479 << m_face_prealloc << " by face.";
480}
481
482/*---------------------------------------------------------------------------*/
483/*---------------------------------------------------------------------------*/
484
486_addParentCellToCell(Cell cell, Cell parent_cell)
487{
488 m_hparent_connectivity->addConnectedItem(ItemLocalId(cell), ItemLocalId(parent_cell));
489}
490
491/*---------------------------------------------------------------------------*/
492/*---------------------------------------------------------------------------*/
493
494void CellFamily::
495_addChildCellToCell2(Cell iparent_cell, Cell child_cell)
496{
497 m_hchild_connectivity->addConnectedItem(ItemLocalId(iparent_cell), ItemLocalId(child_cell));
498}
499
500/*---------------------------------------------------------------------------*/
501/*---------------------------------------------------------------------------*/
502
503void CellFamily::
504_addChildCellToCell(Cell iparent_cell, Integer position, Cell child_cell)
505{
506 Cell parent_cell(iparent_cell);
507 // NOTE GG: The old method below in comment seems
508 // to only work if \a position corresponds to parent_cell->nbHChildren().
509 // And in this case, it is not necessary to make 2 calls.
510 // m_hchild_connectivity->addConnectedItem(parent_cell,ItemLocalId(NULL_ITEM_LOCAL_ID));
511 Int32 nb_connected = m_hchild_connectivity->trueCustomConnectivity()->nbConnectedItem(parent_cell);
512 for (Int32 i = nb_connected; i < (position + 1); ++i)
513 m_hchild_connectivity->addConnectedItem(parent_cell, ItemLocalId(NULL_ITEM_LOCAL_ID));
514 auto x = _topologyModifier();
515 x->replaceHChild(ItemLocalId(iparent_cell), position, child_cell);
516 parent_cell.mutableItemBase().addFlags(ItemFlags::II_Inactive);
517}
518
519/*---------------------------------------------------------------------------*/
520/*---------------------------------------------------------------------------*/
521
522void CellFamily::
523_addChildrenCellsToCell(Cell parent_cell, Int32ConstArrayView children_cells_lid)
524{
525 Integer nb_children = children_cells_lid.size();
526 auto c = m_hchild_connectivity->trueCustomConnectivity();
527 if (c) {
528 ItemLocalId item_lid(parent_cell);
529 c->addConnectedItems(item_lid, nb_children);
530 }
531 _updateSharedInfo();
532
533 auto x = _topologyModifier();
534 for (Integer i = 0; i < nb_children; ++i)
535 x->replaceHChild(ItemLocalId(parent_cell), i, ItemLocalId(children_cells_lid[i]));
536
537 parent_cell.mutableItemBase().addFlags(ItemFlags::II_Inactive);
538}
539
540/*---------------------------------------------------------------------------*/
541/*---------------------------------------------------------------------------*/
542
543void CellFamily::
544_removeParentCellToCell(Cell cell)
545{
546 m_hparent_connectivity->removeConnectedItems(ItemLocalId(cell));
547}
548
549/*---------------------------------------------------------------------------*/
550/*---------------------------------------------------------------------------*/
551
552void CellFamily::
553_removeChildCellToCell(Cell parent_cell, Cell cell)
554{
555 m_hchild_connectivity->removeConnectedItem(ItemLocalId(parent_cell), ItemLocalId(cell));
556 parent_cell.mutableItemBase().removeFlags(ItemFlags::II_Inactive);
557}
558
559/*---------------------------------------------------------------------------*/
560/*---------------------------------------------------------------------------*/
561
562void CellFamily::
563_removeChildrenCellsToCell(Cell parent_cell)
564{
565 m_hchild_connectivity->removeConnectedItems(ItemLocalId(parent_cell));
566 parent_cell.mutableItemBase().removeFlags(ItemFlags::II_Inactive);
567}
568
569/*---------------------------------------------------------------------------*/
570/*---------------------------------------------------------------------------*/
571
572} // namespace Arcane::mesh
573
574/*---------------------------------------------------------------------------*/
575/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro returning the pointer ptr if it is not null or throwing an exception if it is null.
#define ARCANE_FATAL(...)
Macro throwing a FatalErrorException.
Class to convert a CellLocalId to a cell.
Cell of a mesh.
Definition Item.h:1300
FaceConnectedListViewType faces() const
List of faces of the cell.
Definition Item.h:1403
Int32 level() const
Definition Item.h:1473
Cell hParent() const
Definition Item.h:1432
EdgeConnectedListViewType edges() const
List of edges of the cell.
Definition Item.h:1421
Constant view of an array of type T.
constexpr Integer size() const noexcept
Number of elements in the array.
Edge of a cell.
Definition Item.h:875
Face of a cell.
Definition Item.h:1032
virtual IItemFamily * nodeFamily()=0
Returns the node family.
virtual IItemFamily * edgeFamily()=0
Returns the edge family.
virtual IItemFamily * faceFamily()=0
Returns the face family.
virtual bool useMeshItemFamilyDependencies() const =0
check if the network itemFamily dependencies is activated
virtual IItemFamilyNetwork * itemFamilyNetwork()=0
Family network interface (connected families).
bool isSuppressed() const
True if the entity is suppressed.
@ II_Inactive
The entity is inactive //COARSEN_INACTIVE,.
Definition ItemFlags.h:80
Internal structure of a mesh entity.
Index of an Item in a variable.
Definition ItemLocalId.h:42
Type of an entity (Item).
Definition ItemTypeId.h:33
NodeConnectedListViewType nodes() const
List of nodes of the entity.
Definition Item.h:843
Base class for a mesh element.
Definition Item.h:84
constexpr Int32 localId() const
Local identifier of the entity in the processor subdomain.
Definition Item.h:233
ItemUniqueId uniqueId() const
Unique identifier across all domains.
Definition Item.h:239
impl::ItemBase itemBase() const
Internal part of the entity.
Definition Item.h:383
Node of a mesh.
Definition Item.h:598
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flow for a debug message.
void replaceFace(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Replaces a face of an entity.
Definition CellFamily.cc:62
void replaceNode(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Replaces a node of an entity.
Definition CellFamily.cc:54
void replaceHParent(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Replaces a parent entity of an entity.
Definition CellFamily.cc:66
void replaceEdge(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Replaces an edge of an entity.
Definition CellFamily.cc:58
void replaceHChild(ItemLocalId item_lid, Integer index, ItemLocalId new_lid) override
Replaces a child entity of an entity.
Definition CellFamily.cc:70
void _removeSubItems(Cell cell)
Item allocOne(Int64 uid, ItemTypeId type_id, MeshInfos &mesh_info) override
Allocates an element in the family and updates the corresponding mesh_info.
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 cell cell with that of localId() node.
void removeCell(Cell cell)
void removeCells(ConstArrayView< Int32 > cells_local_id)
Removes the cells whose local numbers are cells_local_id.
void removeDetachedCell(Cell cell)
virtual void computeSynchronizeInfos() override
Constructs the structures necessary for synchronization.
void _removeNotConnectedSubItems(Cell cell)
Removes cell sub-entities that are not connected to any cell.
void _addParentCellToCell(Cell cell, Cell parent_cell)
AMR.
void replaceFace(ItemLocalId cell, Integer index, ItemLocalId face)
Replaces the face at index index of the cell 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 cell 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
Number of entities connected to the source entity with local ID lid.
IMesh * mesh() const override
Associated mesh.
IItemFamilyTopologyModifier * _topologyModifier() override
Topology modifier interface.
Definition ItemFamily.h:402
void computeSynchronizeInfos() override
Constructs the structures necessary for synchronization.
String name() const override
Family name.
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
Signed integer type of 64 bits.
Int32 Integer
Type representing an integer.
ConstArrayView< Int32 > Int32ConstArrayView
C equivalent of a 1D array of 32-bit integers.
Definition UtilsTypes.h:482
@ IK_Node
Node mesh entity.
@ IK_Cell
Cell mesh entity.
@ IK_Face
Face mesh entity.
@ IK_Edge
Edge mesh entity.
@ Cell
The mesh is AMR by cell.
Definition MeshKind.h:53
std::int32_t Int32
Signed integer type of 32 bits.