14#include "arcane/utils/FatalErrorException.h"
15#include "arcane/utils/ITraceMng.h"
16#include "arcane/utils/StringBuilder.h"
17#include "arcane/utils/ScopedPtr.h"
18#include "arcane/utils/NotImplementedException.h"
19#include "arcane/utils/NotSupportedException.h"
20#include "arcane/utils/ArgumentException.h"
21#include "arcane/utils/CheckedConvert.h"
22#include "arcane/utils/PlatformUtils.h"
23#include "arcane/utils/OStringStream.h"
24#include "arcane/utils/ValueConvert.h"
26#include "arcane/core/IParallelMng.h"
27#include "arcane/core/ISubDomain.h"
28#include "arcane/core/VariableTypes.h"
29#include "arcane/core/IVariableMng.h"
30#include "arcane/core/IVariable.h"
31#include "arcane/core/IMesh.h"
32#include "arcane/core/IMeshSubMeshTransition.h"
33#include "arcane/core/IApplication.h"
34#include "arcane/core/IDataFactoryMng.h"
35#include "arcane/core/ItemInfoListView.h"
36#include "arcane/core/ItemPairGroup.h"
37#include "arcane/core/ItemPairGroupImpl.h"
38#include "arcane/core/IMeshUtilities.h"
39#include "arcane/core/IVariableSynchronizer.h"
40#include "arcane/core/ItemInternalSortFunction.h"
41#include "arcane/core/Properties.h"
42#include "arcane/core/ItemFamilyCompactInfos.h"
43#include "arcane/core/IMeshMng.h"
44#include "arcane/core/IMeshCompacter.h"
45#include "arcane/core/IMeshCompactMng.h"
46#include "arcane/core/MeshPartInfo.h"
47#include "arcane/core/ParallelMngUtils.h"
48#include "arcane/core/internal/IDataInternal.h"
49#include "arcane/core/internal/IItemFamilyInternal.h"
50#include "arcane/core/internal/IIncrementalItemConnectivityInternal.h"
51#include "arcane/core/datatype/IDataOperation.h"
53#include "arcane/mesh/ItemFamily.h"
54#include "arcane/mesh/ItemSharedInfoList.h"
55#include "arcane/mesh/ItemConnectivityInfo.h"
56#include "arcane/mesh/ItemConnectivitySelector.h"
57#include "arcane/mesh/AbstractItemFamilyTopologyModifier.h"
58#include "arcane/mesh/DynamicMeshKindInfos.h"
60#include "arcane/core/parallel/GhostItemsVariableParallelOperation.h"
61#include "arcane/core/parallel/IStat.h"
63#include "arcane/core/IIncrementalItemConnectivity.h"
64#include "arcane/core/IItemConnectivityMng.h"
65#include "arcane/core/IItemFamilyPolicyMng.h"
67#include "arcane/core/ItemPrinter.h"
68#include "arcane/core/ConnectivityItemVector.h"
69#include "arcane/core/IndexedItemConnectivityView.h"
71#include "arcane/mesh/ItemProperty.h"
72#include "arcane/mesh/ItemData.h"
73#include "arcane/mesh/ConnectivityNewWithDependenciesTypes.h"
89 template <
typename DataType>
void
90 _offsetArrayByOne(Array<DataType>* array)
92 Array<DataType>& v = *array;
93 MeshUtils::checkResizeArray(v, v.size() + 1,
false);
95 for (
Int32 i = (n - 1); i >= 1; --i)
117 return m_family->_unstructuredItemInternalConnectivityList();
125 return m_family->commonItemSharedInfo();
129 m_family->_addSourceConnectivity(connectivity);
133 m_family->_addTargetConnectivity(connectivity);
137 return m_family->_endAllocate();
145 return m_family->_addVariable(
var);
149 return m_family->_removeVariable(
var);
261, m_sub_domain(mesh->subDomain())
263, m_item_internal_list(mesh->meshItemInternalList())
264, m_common_item_shared_info(
new ItemSharedInfo(this, m_item_internal_list, &m_item_connectivity_list))
267, m_sub_domain_id(mesh->meshPartInfo().partRank())
270 m_infos->setItemFamily(
this);
271 m_connectivity_selector_list_by_item_kind.resize(ItemInternalConnectivityList::MAX_ITEM_KIND);
280 delete m_topology_modifier;
283 delete m_local_connectivity_info;
284 delete m_global_connectivity_info;
285 delete m_item_sort_function;
286 delete m_internal_variables;
287 delete m_item_shared_infos;
292 delete m_common_item_shared_info;
293 delete m_internal_api;
315 if (!m_topology_modifier)
316 m_topology_modifier =
new AbstractItemFamilyTopologyModifier(
this);
318 m_full_name = m_mesh->
name() +
"_" + m_name;
320 m_local_connectivity_info =
new ItemConnectivityInfo();
321 m_global_connectivity_info =
new ItemConnectivityInfo();
325 m_default_sub_domain_owner = 0;
326 m_is_parallel =
false;
329 m_is_parallel =
true;
339 String var_unique_ids_name(_variableName(
"FamilyUniqueIds"));
340 String var_owner_name(_variableName(
"FamilyOwner"));
341 String var_flags_name(_variableName(
"FamilyFlags"));
342 String var_typeid_name(_variableName(
"FamilyItemTypeId"));
343 String var_nb_parent_name(_variableName(
"FamilyItemNbParent"));
344 String var_count_name(_variableName(
"FamilyItemsShared"));
345 String var_groups_name(_variableName(
"FamilyGroupsName"));
346 String var_current_id_name(_variableName(
"FamilyCurrentId"));
347 String var_new_owner_name(_variableName(
"FamilyNewOwnerName"));
348 String var_parent_mesh_name(_variableName(
"ParentMeshName"));
349 String var_parent_family_name(_variableName(
"ParentFamilyName"));
350 String var_parent_family_depth_name(_variableName(
"ParentFamilyDepthName"));
351 String var_child_meshes_name(_variableName(
"ChildMeshesName"));
352 String var_child_families_name(_variableName(
"ChildFamiliesName"));
353 m_internal_variables =
new Variables(m_mesh,
name(),
itemKind(), var_count_name,
354 var_unique_ids_name, var_owner_name,
355 var_flags_name, var_typeid_name, var_nb_parent_name, var_groups_name,
356 var_current_id_name, var_new_owner_name,
357 var_parent_mesh_name, var_parent_family_name,
358 var_parent_family_depth_name,
359 var_child_meshes_name,
360 var_child_families_name);
374 m_item_sort_function = _defaultItemSortFunction();
377 String s = platform::getEnvironmentVariable(
"ARCANE_USE_LEGACY_COMPACT_ITEMS");
378 if (s ==
"TRUE" || s ==
"1") {
379 info() <<
"WARNING: Using legacy 'compactItem()' without compactReference()'";
380 m_use_legacy_compact_item =
true;
384 if (
auto v = Convert::Type<Int32>::tryParseFromEnvironment(
"ARCANE_ITEMFAMILY_SHRINK_AFTER_ALLOCATE",
true))
385 m_do_shrink_after_allocate = (v.value() != 0);
395 return m_infos->findOne(uid);
400 return m_infos->itemsMap();
402const DynamicMeshKindInfos& ItemFamily::
408const DynamicMeshKindInfos& ItemFamily::
419 m_infos->removeOne(ItemCompatibility::_itemInternal(item));
424 m_infos->detachOne(ItemCompatibility::_itemInternal(item));
429 return m_infos->itemsInternal();
431ItemInternal* ItemFamily::
432_itemInternal(
Int32 local_id)
434 return m_infos->itemInternal(local_id);
436ItemInternal* ItemFamily::
437_allocOne(
Int64 unique_id)
439 return m_infos->allocOne(unique_id);
441ItemInternal* ItemFamily::
442_allocOne(
Int64 unique_id,
bool& need_alloc)
444 return m_infos->allocOne(unique_id, need_alloc);
446ItemInternal* ItemFamily::
447_findOrAllocOne(
Int64 uid,
bool& is_alloc)
449 return m_infos->findOrAllocOne(uid, is_alloc);
452_setHasUniqueIdMap(
bool v)
454 m_infos->setHasUniqueIdMap(v);
459 m_infos->removeMany(local_ids);
462_removeDetachedOne(Item item)
464 m_infos->removeDetachedOne(ItemCompatibility::_itemInternal(item));
469 return m_infos->kind();
478 return m_infos->nbItem();
487 return m_infos->maxUsedLocalId();
496 return m_infos->itemsInternal();
514 return m_parent_family;
523 m_parent_family = parent;
525 m_parent_family_depth = 1;
527 m_parent_family_depth = 0;
532 ARCANE_ASSERT((m_parent_family_depth < 2), (
"Not test if more than one depth level"));
541 return m_parent_family_depth;
561 for (Integer i = 0; i < m_child_families.size(); ++i) {
592 _checkValidConnectivity();
606 _computeConnectivityInfo(m_local_connectivity_info);
607 _computeConnectivityInfo(m_global_connectivity_info);
632 if (!m_parent_family) {
633 m_internal_variables->setUsed();
635 if (m_do_shrink_after_allocate)
636 _shrinkConnectivityAndPrintInfos();
643_shrinkConnectivityAndPrintInfos()
646 ItemConnectivityMemoryInfo mem_info;
647 for (ItemConnectivitySelector* cs : m_connectivity_selector_list) {
648 IIncrementalItemConnectivity* c = cs->customConnectivity();
649 c->_internalApi()->addMemoryInfos(mem_info);
651 const Int64 total_capacity = mem_info.m_total_capacity;
652 const Int64 total_size = mem_info.m_total_size;
653 Int64 ratio = 100 * (total_capacity - total_size);
654 ratio /= (total_size + 1);
656 const Int64 mega_byte = 1024 * 1024;
657 Int64 capacity_mega_byte = (mem_info.m_total_capacity * sizeof_int32) / mega_byte;
658 info() <<
"MemoryUsed for family name=" <<
name() <<
" size=" << mem_info.m_total_size
659 <<
" capacity=" << mem_info.m_total_capacity
660 <<
" capacity (MegaByte)=" << capacity_mega_byte
661 <<
" ratio=" << ratio;
664 std::ostream& o = ostr();
665 o <<
"Mem=" << platform::getMemoryUsed();
666 for (ItemConnectivitySelector* cs : m_connectivity_selector_list) {
667 IIncrementalItemConnectivity* c = cs->customConnectivity();
670 c->_internalApi()->shrinkMemory();
674 o <<
"Mem=" << platform::getMemoryUsed();
675 info() << ostr.str();
684 bool need_end_update = m_infos->changed();
685 info(4) <<
"ItemFamily::endUpdate() " <<
fullName() <<
" need_end_update?=" << need_end_update;
686 if (!need_end_update) {
692 if (m_need_prepare_dump) {
693 _computeConnectivityInfo(m_local_connectivity_info);
698 m_item_need_prepare_dump =
true;
699 _computeConnectivityInfo(m_local_connectivity_info);
706 m_infos->finalizeMeshChanged();
715_endUpdate(
bool need_check_remove)
717 if (_partialEndUpdate())
720 _resizeVariables(
false);
722 <<
" hashmapsize=" << itemsMap().
nbBucket()
723 <<
" nb_group=" << m_item_groups.
count();
725 _updateGroups(need_check_remove);
743 _updateGroup(group,
true);
753 if (group == m_infos->allItems())
770_updateGroups(
bool need_check_remove)
773 ItemGroup group = *i;
774 _updateGroup(group, need_check_remove);
784 _updateVariable(variable);
793 var->resizeFromGroup();
804 <<
" nb_item=" <<
nbItem()
805 <<
" currentsize=" << m_current_variable_item_size;
807 info(4) <<
"ItemFamily::resizeVariables: name=" <<
fullName()
809 <<
" nb_item=" <<
nbItem()
810 <<
" currentsize=" << m_current_variable_item_size
812 <<
" nb_var=" << m_used_variables.size();
817 _updateVariable(
var);
826itemsUniqueIdToLocalId(ArrayView<Int64> ids,
bool do_fatal)
const
828 m_infos->itemsUniqueIdToLocalId(ids, do_fatal);
895 _checkNeedEndUpdate();
896 return m_infos->allItems();
905 debug(
Trace::High) <<
"ItemFamily:createGroup(name,Int32ConstArrayView): " << m_name <<
":"
906 <<
" group_name=" <<
name
907 <<
" count=" << elements.
size()
910 _checkNeedEndUpdate();
938 fatal() <<
"Attempting to create an already existing group '" <<
name <<
"'";
941 debug() <<
"ItemFamily:createGroup(name): " << m_name <<
":"
944 _processNewGroup(group);
958 fatal() <<
"Group already existing but with a different parent";
960 fatal() <<
"A group can not be its own parent name=" <<
name;
963 fatal() <<
"Attempting to create an already existing group '" <<
name <<
"'";
966 fatal() <<
"Attempting to create a group '" <<
name <<
"' with no parent.";
967 debug() <<
"ItemFamily:createGroup(name,parent): " << m_name <<
":"
969 <<
" parent=" << parent.
name();
971 _processNewGroup(group);
981 _invalidateComputedGroups();
983 m_item_groups.
clear();
987 m_item_groups.add(group);
1000 debug() <<
"ItemFamily::notifyItemsOwnerChanged()";
1007 for (Integer i = 0; i < m_child_families.size(); ++i) {
1010 for (Integer z = 0,
zs = items.
size(); z <
zs; ++z) {
1030 ARCANE_FATAL(
"Incoherent family name={0} wanted={1} current={2}",
1033 m_item_groups.add(group);
1034 m_need_prepare_dump =
true;
1038 if (!m_is_parallel && m_mesh->
meshPartInfo().nbPart() == 1)
1048 return m_item_groups;
1057 for (
const ItemGroup& group : m_item_groups) {
1091_checkNeedEndUpdate()
const
1093 if (m_infos->changed())
1094 ARCANE_FATAL(
"missing call to endUpdate() after modification");
1103 info(4) <<
"ItemFamily::prepareForDump(): " <<
fullName()
1104 <<
" need=" << m_need_prepare_dump
1105 <<
" item-need=" << m_item_need_prepare_dump
1106 <<
" m_item_shared_infos->hasChanged()=" << m_item_shared_infos->
hasChanged()
1107 <<
" nb_item=" << m_infos->nbItem();
1110 auto*
p = m_properties;
1111 p->setInt32(
"dump-version", 0x0307);
1112 p->setInt32(
"nb-item", m_infos->nbItem());
1117 if (m_item_need_prepare_dump || m_item_shared_infos->
hasChanged()) {
1118 info(4) <<
"Prepare for dump:2: name=" << m_name <<
" nb_alloc=" << m_nb_allocate_info
1119 <<
" uid_size=" << m_items_unique_id->size() <<
" cap=" << m_items_unique_id->capacity()
1120 <<
" byte=" << m_items_unique_id->capacity() *
sizeof(Int64);
1126 m_infos->prepareForDump();
1127 m_item_shared_infos->prepareForDump();
1128 m_need_prepare_dump =
true;
1130 m_item_need_prepare_dump =
false;
1131 if (m_need_prepare_dump) {
1132 Integer
nb_item = m_infos->nbItem();
1134 _resizeItemVariables(
nb_item,
true);
1137 <<
" saveid=" << m_internal_variables->m_current_id();
1141 info(4) <<
"ItemFamily::prepareForDump(): " << m_name
1145 for (Integer i = 0; i <
nb_item; ++i) {
1151 for (Integer i = 0; i <
nb_item; ++i) {
1160 <<
" lid = " << item->
localId()
1161 <<
" dataindex = " << item->dataIndex()
1162 <<
" flags = " << item->
flags();
1170 if (m_parent_family) {
1171 m_internal_variables->m_parent_family_name = m_parent_family->
name();
1172 m_internal_variables->m_parent_mesh_name = m_parent_family->
mesh()->name();
1174 m_internal_variables->m_parent_family_depth = m_parent_family_depth;
1175 const Integer
child_count = m_child_families.size();
1179 m_internal_variables->m_child_meshes_name[i] = m_child_families[i]->mesh()->name();
1180 m_internal_variables->m_child_families_name[i] = m_child_families[i]->name();
1212 _applyCheckNeedUpdateOnGroups();
1214 m_need_prepare_dump =
false;
1235 auto*
p = m_properties;
1236 if (
p->get(
"dump-version", x))
1241 Int32
cid =
p->getInt32(
"current-change-id");
1242 Int32
expected_cid = m_internal_variables->m_current_id();
1244 ARCANE_FATAL(
"Bad value for current id mesh={0} id={1} expected={2}",
1252 ARCANE_FATAL(
"Your checkpoint is from a version of Arcane which is too old (mininum version is 3.7)");
1260 if (m_infos->allItems().isOwn() &&
part_info.nbPart() > 1)
1261 m_infos->allItems().setOwn(
false);
1274 info(4) <<
"ItemFamily::readFromDump(): " <<
fullName()
1277 <<
" saveid=" << m_internal_variables->m_current_id()
1285 MeshUtils::checkResizeArray(*m_items_type_id,
nb_item + 1,
false);
1288 _handleOldCheckpoint();
1292 if (m_internal_variables->m_current_id() ==
m_current_id) {
1293 debug() <<
"Family unchanged. Nothing to do.";
1300 _invalidateComputedGroups();
1307 m_current_variable_item_size = 0;
1312 if (!m_internal_variables->m_parent_mesh_name().null()) {
1314 m_parent_family =
parent_mesh->findItemFamily(m_internal_variables->m_parent_family_name(),
true);
1316 m_parent_family_depth = m_internal_variables->m_parent_family_depth();
1317 ARCANE_ASSERT((m_internal_variables->m_child_meshes_name.
size() == m_internal_variables->m_child_families_name.
size()),
1318 (
"Incompatible child mesh/family sizes"));
1319 Integer
child_count = m_internal_variables->m_child_families_name.
size();
1327 m_item_shared_infos->readFromDump();
1328 m_infos->readFromDump();
1335 for (Integer i = 0; i <
nb_item; ++i) {
1339 Int64 uid = m_items_unique_id_view[i];
1341 item->_setSharedInfo(
isi->sharedInfo(),
type_id);
1347 for (Integer i = 0; i <
nb_item; ++i) {
1350 Int64 uid = m_items_unique_id_view[i];
1352 item->_setSharedInfo(
isi->sharedInfo(),
isi->itemTypeId());
1358 m_infos->allItems().clear();
1361 for (
auto&
c : m_source_incremental_item_connectivities)
1362 c->notifyReadFromDump();
1368 _invalidateComputedGroups();
1379_applyCheckNeedUpdateOnGroups()
1384 if (group == m_infos->allItems())
1394_invalidateComputedGroups()
1400 ItemGroup group = *i;
1401 if (!group.internal()->parentGroup().null()) {
1418 debug() <<
"ItemFamily::readFromDump(): number of group: " <<
groups_var.size();
1419 for (Integer i = 0, is =
groups_var.size(); i < is; ++i) {
1421 debug() <<
"Readign group again: " <<
name;
1460 m_need_prepare_dump =
true;
1468 m_item_need_prepare_dump =
true;
1481 if (!m_use_legacy_compact_item) {
1484 _applyCheckNeedUpdateOnGroups();
1519 m_infos->checkValid();
1524 for (
auto&
c : m_source_incremental_item_connectivities)
1527 for (
auto&
c : m_target_incremental_item_connectivities)
1541 if (m_parent_family_depth > 0)
1552finishCompactItems(ItemFamilyCompactInfos& compact_infos)
1555 m_infos->checkValid();
1557 m_infos->finishCompactItems(compact_infos);
1559 for (ItemConnectivitySelector* ics : m_connectivity_selector_list)
1560 ics->compactConnectivities();
1575 ARCANE_ASSERT(source.size() == destination.
size(),
1576 (
"Can't copy. Source and destination have different size !"));
1578 if (source.size() != 0) {
1584 var->copyItemsValues(source, destination);
1606 (
"Can't copy. : first_source and destination have different size !"));
1608 (
"Can't copy : second_source and destination have different size !"));
1648 for (Integer i = 0; i < m_child_families.size(); ++i)
1653 <<
" nb_item=" <<
nbItem();
1658 m_current_variable_item_size =
nbItem();
1671compactConnectivities()
1693 if (m_parent_family_depth > 1)
1697 debug() <<
"\tfrom parent family " << m_parent_family->
name();
1698 if (
this == m_parent_family)
1701 for (Integer z = 0,
zs = items.
size(); z <
zs; ++z) {
1732 ARCANE_FATAL(
"Family {0} Bad value for partRank ({1}) expected={2}",
1741_reserveInfosMemory(Integer memory)
1743 ARCANE_UNUSED(memory);
1750_resizeInfos(Integer new_size)
1752 ARCANE_UNUSED(new_size);
1759_allocMany(Integer memory)
1761 ARCANE_UNUSED(memory);
1768ItemSharedInfoWithType* ItemFamily::
1769_findSharedInfo(ItemTypeInfo* type)
1771 return m_item_shared_infos->findSharedInfo(type);
1781 m_need_prepare_dump =
true;
1788_allocateInfos(ItemInternal* item,
Int64 uid, ItemTypeInfo* type)
1790 ItemSharedInfoWithType* isi = _findSharedInfo(type);
1791 _allocateInfos(item, uid, isi);
1798_resizeItemVariables(
Int32 new_size,
bool force_resize)
1800 bool is_resize = MeshUtils::checkResizeArray(*m_items_unique_id, new_size + 1, force_resize);
1801 is_resize |= MeshUtils::checkResizeArray(*m_items_owner, new_size + 1, force_resize);
1802 is_resize |= MeshUtils::checkResizeArray(*m_items_flags, new_size + 1, force_resize);
1803 is_resize |= MeshUtils::checkResizeArray(*m_items_type_id, new_size + 1, force_resize);
1804 if (m_parent_family_depth > 0)
1805 is_resize |= MeshUtils::checkResizeArray(*m_items_nb_parent, new_size, force_resize);
1811 (*m_items_unique_id)[0] = NULL_ITEM_UNIQUE_ID;
1812 (*m_items_flags)[0] = 0;
1813 (*m_items_owner)[0] = A_NULL_RANK;
1814 (*m_items_type_id)[0] = IT_NullType;
1821_allocateInfos(ItemInternal* item,
Int64 uid, ItemSharedInfoWithType* isi)
1825 Int32 local_id = item->localId();
1826 _resizeItemVariables(local_id + 1,
false);
1831 ItemTypeId iti = isi->itemTypeId();
1832 item->_setSharedInfo(isi->sharedInfo(), iti);
1834 item->reinitialize(uid, m_default_sub_domain_owner, m_sub_domain_id);
1835 ++m_nb_allocate_info;
1837 for (
auto& c : m_source_incremental_item_connectivities)
1838 c->notifySourceItemAdded(ItemLocalId(local_id));
1845_preAllocate(
Int32 nb_item,
bool pre_alloc_connectivity)
1848 m_infos->itemsMap().resize(nb_item,
true);
1849 _resizeItemVariables(nb_item,
false);
1850 for (
auto& c : m_source_incremental_item_connectivities)
1851 c->reserveMemoryForNbSourceItems(nb_item, pre_alloc_connectivity);
1858_notifyDataIndexChanged()
1870 Integer s =
ranks.size();
1886 m_variable_synchronizer->compute();
1902 op.setItemFamily(
this);
1904 op.applyOperation(operation);
1924 return &m_items_unique_id_view;
1940 if (!
var && throw_exception) {
1968 info() <<
"ItemFamily::checkUniqueIds name=" <<
name() <<
" n=" <<
nb_item
1970 for (Integer i = 0; i <
nb_item; ++i)
1977 for (Integer i = 0; i <
nb_item; ++i) {
2000 auto i = m_adjacency_groups.find(at);
2002 if (i == m_adjacency_groups.end()) {
2003 debug() <<
"** BUILD ADJENCY_ITEMS : " << group.
name() <<
" x "
2007 m_adjacency_groups.insert(std::make_pair(at, v));
2010 debug() <<
"** FOUND KNOWN ADJENCY_ITEMS! : " << group.
name() <<
" x "
2021 return m_local_connectivity_info;
2030 return m_global_connectivity_info;
2077 if (
var->itemFamily()!=
this)
2078 ARCANE_FATAL(
"Can not add a variable to a different family");
2079 m_used_variables.insert(
var);
2089 m_used_variables.erase(
var);
2109 return m_variable_synchronizer.get();
2120 delete m_item_sort_function;
2122 if (!m_item_sort_function)
2123 m_item_sort_function = _defaultItemSortFunction();
2132 return m_item_sort_function;
2141 m_variable_synchronizer->synchronize(variables);
2150 m_variable_synchronizer->synchronize(variables,
local_ids);
2160 ARCANE_UNUSED(items);
2172 ARCANE_FATAL(
"Family name='{0}': IMesh::itemFamilyNetwork() is null",
name());
2197 for (
auto removed_item_lid_int64 : removed_item_lids) {
2200 for (
auto child_connectivity : child_connectivities) {
2201 ConnectivityItemVector child_con_accessor(child_connectivity);
2202 ENUMERATE_ITEM(connected_item, child_con_accessor.connectedItems(ItemLocalId(removed_item_lid))) {
2203 if (!this->
itemsInternal()[removed_item_lid]->isDetached()) {
2204 child_families_to_current_family[index]->removeConnectedItem(ItemLocalId(connected_item),ItemLocalId(removed_item_lid));
2207 if (! child_families_has_extra_parent_properties[index][connected_item] && child_families_to_current_family[index]->nbConnectedItem(ItemLocalId(connected_item)) == 0) {
2208 item_data_list[child_connectivity->targetFamily()->itemKind()].itemInfos().add((
Int64) connected_item.localId());
2216 for (
auto removed_item_lid_int64 : removed_item_lids) {
2218 for (
auto child_relation : m_mesh->itemFamilyNetwork()->getChildRelations(this)) {
2219 ConnectivityItemVector connectivity_accessor(child_relation);
2220 ENUMERATE_ITEM(connected_item, connectivity_accessor.connectedItems(ItemLocalId(removed_item_lid))) {
2221 child_relation->removeConnectedItem(ItemLocalId(removed_item_lid),ItemLocalId(connected_item));
2226 ItemScalarProperty<bool> is_removed_item;
2227 is_removed_item.resize(
this,
false);
2228 for (
auto removed_item_lid_int64 : removed_item_lids) {
2230 is_removed_item[*(this->
itemsInternal()[removed_item_lid])] =
true;
2232 for (
auto parent_relation : m_mesh->itemFamilyNetwork()->getParentRelations(this)) {
2233 for (
auto source_item : parent_relation->sourceFamily()->
itemsInternal()) {
2234 if (source_item->isSuppressed())
continue;
2235 ConnectivityItemVector connectivity_accessor(parent_relation);
2236 ENUMERATE_ITEM(connected_item, connectivity_accessor.connectedItems(ItemLocalId(source_item))) {
2237 if (is_removed_item[connected_item])
2238 parent_relation->removeConnectedItem(ItemLocalId(source_item),connected_item);
2243 for (
auto removed_item_lid_int64 : removed_item_lids) {
2245 ItemInternal* removed_item = m_infos->itemInternal(removed_item_lid);
2246 if (removed_item->isDetached()) {
2247 m_infos->removeDetachedOne(removed_item);
2250 m_infos->removeOne(removed_item);
2260_getConnectedItems(IIncrementalItemConnectivity* parent_connectivity,ItemVector& target_family_connected_items)
2262 ConnectivityItemVector connectivity_accessor(parent_connectivity);
2263 for(
auto source_item : parent_connectivity->sourceFamily()->
itemsInternal()) {
2264 if (source_item->isSuppressed())
continue;
2265 target_family_connected_items.add(connectivity_accessor.connectedItems(ItemLocalId(source_item)).localIds());
2273_fillHasExtraParentProperty(ItemScalarProperty<bool>& child_families_has_extra_parent,ItemVectorView connected_items)
2276 child_families_has_extra_parent[connected_item] =
true;
2287 ARCANE_ASSERT((m_mesh->
itemFamilyNetwork()->getParentDependencies(
this).empty()),(
"Only cells are detached, no parent dependencies are to be found."))
2290 for (auto removed_item_lid : local_ids) {
2291 for (
auto child_relation : m_mesh->itemFamilyNetwork()->getChildRelations(this)) {
2292 ConnectivityItemVector connectivity_accessor(child_relation);
2293 ENUMERATE_ITEM(connected_item, connectivity_accessor.connectedItems(ItemLocalId(removed_item_lid))) {
2294 child_relation->removeConnectedItem(ItemLocalId(removed_item_lid),ItemLocalId(connected_item));
2299 ItemScalarProperty<bool> is_detached_item;
2300 is_detached_item.resize(
this,
false);
2301 for (
auto detached_item_lid : local_ids) {
2302 is_detached_item[*(this->
itemsInternal()[detached_item_lid])] =
true;
2304 for (
auto parent_relation : m_mesh->itemFamilyNetwork()->getParentRelations(this)) {
2305 for(
auto source_item : parent_relation->sourceFamily()->
itemsInternal()) {
2306 if (source_item->isSuppressed())
continue;
2307 ConnectivityItemVector connectivity_accessor(parent_relation);
2308 ENUMERATE_ITEM(connected_item, connectivity_accessor.connectedItems(ItemLocalId(source_item))) {
2309 if (is_detached_item[connected_item]) {
2310 parent_relation->removeConnectedItem(ItemLocalId(source_item),connected_item);
2316 for (
auto detached_item_lid : local_ids) {
2317 m_infos->detachOne(m_infos->itemInternal(detached_item_lid));
2332 ARCANE_FATAL(
"Family name='{0}': IMesh::itemFamilyNetwork() is null",
name());
2333 if (!IItemFamilyNetwork::plug_serializer)
2334 ARCANE_FATAL(
"family name='{0}': removeNeedMarkedItems() cannot be called if ItemFamilyNetwork is unplugged.",
name());
2342 Integer f = item.
flags();
2387 bool s1 =
item1->isSuppressed();
2388 bool s2 =
item2->isSuppressed();
2393 return item1->uniqueId() <
item2->uniqueId();
2401_defaultItemSortFunction()
2423addSourceConnectivity(IItemConnectivity* connectivity)
2425 m_source_item_connectivities.insert(connectivity);
2432addTargetConnectivity(IItemConnectivity* connectivity)
2441removeSourceConnectivity(IItemConnectivity* connectivity)
2443 m_source_item_connectivities.erase(m_source_item_connectivities.find(connectivity));
2450removeTargetConnectivity(IItemConnectivity* connectivity)
2459setConnectivityMng(IItemConnectivityMng* connectivity_mng)
2462 (
"Connectivity Manager must be unique") )
2470_addSourceConnectivity(IIncrementalItemSourceConnectivity* c)
2472 m_source_incremental_item_connectivities.add(c->toSourceReference());
2479_addTargetConnectivity(IIncrementalItemTargetConnectivity* c)
2481 m_target_incremental_item_connectivities.add(c->toTargetReference());
2488_checkValidConnectivity()
2505 ARCANE_FATAL(
"family={0}: incoherent item internal lid={1} i1={2} i2={3}",
2506 fullName(),item.localId(),ItemPrinter(i1),ItemPrinter(i2));
2509 constexpr Int32 MAX_KIND = ItemInternalConnectivityList::MAX_ITEM_KIND;
2510 std::array<Int32,MAX_KIND> computed_max;
2511 computed_max.fill(0);
2513 for( Integer i=0; i<MAX_KIND; ++i ){
2517 const Int32 con_nb_item_size = con_view.nbSourceItem();
2519 info(4) <<
"Family name=" <<
fullName() <<
" I=" << i <<
" nb_item_size=" << con_nb_item_size;
2522 if (con_nb_item_size!=0){
2527 Int32 x = con_view.nbItem(i);
2531 if (stored_max_nb<max_nb)
2532 ARCANE_FATAL(
"Bad value for max connected item family={0} kind={1} stored={2} computed={3}",
2533 name(),i,stored_max_nb,max_nb);
2534 computed_max[i] = max_nb;
2540 std::array<Int32,MAX_KIND> stored_max;
2542 auto* ci = m_local_connectivity_info;
2543 stored_max[ItemInternalConnectivityList::NODE_IDX] = ci->
maxNodePerItem();
2544 stored_max[ItemInternalConnectivityList::EDGE_IDX] = ci->maxEdgePerItem();
2545 stored_max[ItemInternalConnectivityList::FACE_IDX] = ci->maxFacePerItem();
2546 stored_max[ItemInternalConnectivityList::CELL_IDX] = ci->maxCellPerItem();
2549 stored_max[ItemInternalConnectivityList::HPARENT_IDX] = computed_max[ItemInternalConnectivityList::HPARENT_IDX];
2550 stored_max[ItemInternalConnectivityList::HCHILD_IDX] = computed_max[ItemInternalConnectivityList::HCHILD_IDX];
2551 for( Integer i=0; i<MAX_KIND; ++i )
2552 if (stored_max[i]<computed_max[i])
2553 ARCANE_FATAL(
"Bad value for local_connectivity_info family={0} kind={1} stored={2} computed={3}",
2554 name(),i,stored_max[i],computed_max[i]);
2556 for(
auto ics : m_connectivity_selector_list )
2557 ics->checkValidConnectivityList();
2564_addConnectivitySelector(ItemConnectivitySelector* selector)
2566 m_connectivity_selector_list.add(selector);
2573_buildConnectivitySelectors()
2575 m_connectivity_selector_list_by_item_kind.clear();
2576 m_connectivity_selector_list_by_item_kind.resize(ItemInternalConnectivityList::MAX_ITEM_KIND);
2577 m_connectivity_selector_list_by_item_kind.fill(
nullptr);
2579 for( ItemConnectivitySelector* ics : m_connectivity_selector_list ){
2581 Int32 i = ics->itemConnectivityIndex();
2583 if (m_connectivity_selector_list_by_item_kind[i])
2584 ARCANE_FATAL(
"Can not have two connectivity selector for same item kind");
2585 m_connectivity_selector_list_by_item_kind[i] = ics;
2594_setTopologyModifier(IItemFamilyTopologyModifier* tm)
2596 delete m_topology_modifier;
2597 m_topology_modifier = tm;
2613 for( Integer i=0, n=items.
size(); i<n; ++i )
2619 for( Integer i=0; i<nb_rank; ++i ){
2633 info(5) <<
"COMPUTE CONNECTIVITY INFO family=" <<
name() <<
" v=" <<
ici
2634 <<
" node=" <<
ici->maxNodePerItem() <<
" face=" <<
ici->maxFacePerItem()
2635 <<
" edge=" <<
ici->maxEdgePerItem() <<
" cell=" <<
ici->maxCellPerItem();
2642_handleOldCheckpoint()
2649 (*m_items_unique_id)[0] = NULL_ITEM_UNIQUE_ID;
2650 (*m_items_flags)[0] = 0;
2651 (*m_items_owner)[0] = A_NULL_RANK;
2661template<
typename DataType>
2662ArrayView<DataType> _getView(Array<DataType>* v)
2664 Int32 n = v->size();
2665 return v->subView(1,n-1);
2672 m_common_item_shared_info->m_unique_ids = _getView(m_items_unique_id);
2673 m_common_item_shared_info->m_flags = _getView(m_items_flags);
2674 m_common_item_shared_info->m_type_ids = _getView(m_items_type_id);
2675 m_common_item_shared_info->m_owners = _getView(m_items_owner);
2676 m_common_item_shared_info->m_parent_item_ids = m_items_nb_parent->view();
2678 m_items_unique_id_view = _getView(m_items_unique_id);
2687 return m_internal_api;
#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_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Tableau d'items de types quelconques.
void clear()
Supprime tous les éléments de la collection.
Integer count() const
Nombre d'éléments de la collection.
Gère la récupération des informations de connectivité.
Interface d'une opération sur une donnée.
Interface de la source d'une connectivité incrémentale.
Interface de la cible d'une connectivité incrémentale.
Interface des informations sur la connectivité par type d'entité.
virtual void notifyLocalIdChanged(IItemFamily *item_family, Int32ConstArrayView old_to_new_ids, Integer nb_item)=0
Mise à jour des items modifiés éventuellement compactés.
virtual void setModifiedItems(IItemFamily *family, Int32ConstArrayView added_items, Int32ConstArrayView removed_items)=0
Enregistrement de modifications d'une famille d'items.
Interface pour gérer une connectivité.
Partie interne de IItemFamily.
Interface des politiques d'une famille d'entités.
Interface de modification de la topologie des entités d'une famille.
Interface d'une famille d'entités.
virtual Integer parentFamilyDepth() const =0
Donne la profondeur d'imbrication du maillage courant.
virtual ItemInternalArrayView itemsInternal()=0
Tableau interne des entités.
virtual String name() const =0
Nom de la famille.
virtual IMesh * mesh() const =0
Maillage associé
virtual void notifyItemsOwnerChanged()=0
Notifie que les entités propres au sous-domaine de la famille ont été modifiées.
virtual void addChildFamily(IItemFamily *family)=0
Ajoute d'une famile en dépendance.
Interface d'une fonction de tri des entités.
virtual String name() const =0
Nom du maillage.
Interface du gestionnaire des compactages de familles d'un maillage.
Gestion d'un compactage de familles du maillage.
virtual void setSorted(bool v)=0
Indique s'il faut trier les entités lors du compactage.
virtual void doAllActions()=0
Exécute successivement toutes les actions de compactage.
Interface du gestionnaire des maillages.
virtual IParallelMng * parallelMng()=0
Gestionnaire de parallèlisme.
virtual IMeshUtilities * utilities()=0
Interface des fonctions utilitaires associée.
virtual ItemTypeMng * itemTypeMng() const =0
Gestionnaire de types d'entités associé
virtual IMeshMng * meshMng() const =0
Gestionnaire de maillage associé
virtual IItemFamilyNetwork * itemFamilyNetwork()=0
Interface du réseau de familles (familles connectées)
virtual IMeshCompactMng * _compactMng()=0
virtual const MeshPartInfo & meshPartInfo() const =0
Informations sur les parties du maillage.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual void allGatherVariable(ConstArrayView< char > send_buf, Array< char > &recv_buf)=0
Effectue un regroupement sur tous les processeurs.
virtual bool isParallel() const =0
Retourne true si l'exécution est parallèle.
virtual char reduce(eReduceType rt, char v)=0
Effectue la réduction de type rt sur le réel v et retourne la valeur.
Interface du gestionnaire d'un sous-domaine.
virtual IVariableMng * variableMng()=0
Retourne le gestionnaire de variables.
Interface du gestionnaire de variables.
Interface d'un service de synchronisation de variable.
virtual void changeLocalIds(Int32ConstArrayView old_to_new_ids)=0
Appelé lorsque les numéros locaux des entités sont modifiés.
Interface d'une variable.
virtual IDataFactoryMng * dataFactoryMng() const =0
Fabrique de données associées à la variable.
virtual ItemGroup itemGroup() const =0
Groupe du maillage associé.
virtual void compact(Int32ConstArrayView new_to_old_ids)=0
Compacte les valeurs de la variable.
virtual IItemFamily * itemFamily() const =0
Famille d'entité associée.
@ PSubDomainDepend
Indique que la valeur de la variable est dépendante du sous-domaine.
@ PTemporary
Indique que la variable est temporaire.
@ PExecutionDepend
Indique que la valeur de la variable est dépendante de l'exécution.
@ PPrivate
Indique que la variable est privée.
@ PNoRestore
Indique que la variable ne doit pas être restaurée.
@ PNoDump
Indique que la variable ne doit pas être sauvegardée.
Classe de base pour les entités du maillage.
bool isSuppressed() const
Vrai si l'entité est supprimée.
ItemUniqueId uniqueId() const
Numéro unique de l'entité
MutableItemBase toMutable()
Interface modifiable de cette entité
Int32 flags() const
Flags de l'entité
ItemTypeInfo * typeInfo() const
Type de l'entité.
Int32 localId() const
Numéro local (au sous-domaine) de l'entité
Informations pour gérer le compactage des entités d'une famille.
Flags pour les caractéristiques des entités.
@ II_NeedRemove
L'entité doit être supprimé
@ II_Shared
L'entité est partagée par un autre sous-domaine.
@ II_Suppressed
L'entité vient d'être supprimée.
Implémentation d'un groupe d'entités de maillage.
bool checkNeedUpdate()
Réactualise le groupe si nécessaire.
void destroy()
Détruit le groupe. Après cet appel, le groupe devient un groupe nul.
void removeSuppressedItems()
Supprime du groupe les entités dont le flag isSuppressed() est vrai.
bool hasComputeFunctor() const
Indique si le groupe est calculé
ItemGroup parentGroup()
Groupe parent.
void changeIds(Int32ConstArrayView old_to_new_ids)
Change les indices des entités du groupe.
Groupe d'entités de maillage.
void clear()
Supprime les entités du groupe.
ItemGroupImpl * internal() const
Retourne l'implémentation du groupe.
IVariableSynchronizer * synchronizer() const
Synchronizer du groupe.
const String & name() const
Nom du groupe.
bool isLocalToSubDomain() const
Vrai si le groupe est local au sous-domaine.
void invalidate(bool force_recompute=false)
Invalide le groupe.
ItemVectorView view() const
Vue sur les entités du groupe.
Integer size() const
Nombre d'éléments du groupe.
void setItems(Int32ConstArrayView items_local_id)
Positionne les entités du groupe.
eItemKind itemKind() const
Genre du groupe. Il s'agit du genre de ses éléments.
bool hasSynchronizer() const
Indique si le groupe possède un synchroniser actif.
bool isAllItems() const
Indique si le groupe est celui de toutes les entités.
void checkValid()
Vérification interne de la validité du groupe.
bool null() const
true is le groupe est le groupe nul
void setOwn(bool v)
Positionne la propriété de groupe local ou non.
Vue sur une liste pour obtenir des informations sur les entités.
Informations de connectivité, pour une famille d'entité, permettant la transition entre les anciennes...
Int32 maxNbConnectedItem(Int32 item_kind) const
Nombre maximum d'entités connectées.
Structure interne d'une entité de maillage.
Index d'un Item dans une variable.
Implémentation d'un tableau de listes d'entités.
Tableau de listes d'entités.
Structure interne partagée d'une entité de maillage.
ConstArrayView< ItemInternal * > m_items_internal
ItemInternal des entités.
Type d'une entité (Item).
Gestionnaire des types d'entités de maillage.
Vue sur un vecteur d'entités.
Classe de base d'un élément de maillage.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
void clone(const Collection< T > &base)
Clone la collection base.
ListEnumeratorT< ItemGroup > Enumerator
Type d'un itérateur constant sur tout le tableau.
Informations un maillage partitionné.
Méthodes permettant de modifier ItemBase.
void setOwner(Integer suid, Int32 current_sub_domain)
Positionne le numéro du sous-domaine propriétaire de l'entité.
void setParent(Int32 aindex, Int32 parent_local_id)
Positionne le i-ème parent (actuellement aindex doit valoir 0)
Opérations parallèle sur les entités fantômes.
Paramètres nécessaires à la construction d'une variable.
IArrayDataInternalT< T > * _internalTrueData()
virtual void resize(Integer new_size)
Redimensionne le tableau pour contenir new_size éléments.
IVariable * variable() const
Variable associée.
Infos de maillage pour un genre donné d'entité.
Informations sur la connectivité par type d'entité.
Integer maxNodePerItem() const override
Nombre maximal de noeuds par entité
Sélection entre les connectivités historiques et à la demande.
void resizeVariables(bool force_resize) override
Redimensionne les variables de cette famille.
void removeVariable(IVariable *var) override
Supprime une variable à cette famille.
void notifyEndUpdateFromMesh() override
Indique une fin de modification par le maillage.
ItemInternalConnectivityList * unstructuredItemInternalConnectivityList() override
Informations sur les connectivités non structurés.
void addVariable(IVariable *var) override
Ajoute une variable à cette famille.
void endAllocate() override
Indique une fin d'allocation.
ItemSharedInfo * commonItemSharedInfo() override
Instance de ItemSharedInfo pour les entités de la famille.
IItemFamilyTopologyModifier * topologyModifier() override
Interface du modificateur de topologie.
VariableArrayInt64 m_items_unique_id
Contient les uniqueIds() des entités de cette famille.
VariableArrayInteger m_items_shared_data_index
Indice dans le tableau des ItemSharedInfo pour chaque entité.
VariableArrayInt32 m_items_flags
Contient les flags() des entités de cette famille.
VariableArrayInt16 m_items_type_id
Contient les typeId() des entités de cette famille.
VariableArrayInt32 m_items_owner
Contient les owner() des entités de cette famille.
VariableItemInt32 m_items_new_owner
Contient le sous-domaine propriétaire de l'entité.
VariableArrayInt32 m_items_nb_parent
Contient le parent() des entités de cette famille.
bool hasUniqueIdMap() const override
Indique si la famille possède une table de conversion uniqueId vers localId.
IMesh * mesh() const override
Maillage associé
void partialEndUpdateVariable(IVariable *variable) override
Met à jour une variable.
void _compactItems(bool do_sort)
Compacte les entités.
void partialEndUpdate() override
Mise à jour partielle.
String fullName() const override
Nom complet de la famille (avec celui du maillage)
void _compactFromParentFamily(const ItemFamilyCompactInfos &compact_infos)
Compacte les connectivités.
void _checkComputeSynchronizeInfos(Int32 changed)
Test collectif permettant de savoir s'il faut mettre à jour les infos de synchro.
void _compactOnlyItems(bool do_sort)
Compacte les entités sans mise à jour des références.
void clearItems() override
Supprime toutes les entités de la famille.
ItemPairGroup findAdjencyItems(const ItemGroup &group, const ItemGroup &sub_group, eItemKind link_kind, Integer layer) override
Cherche une liste d'adjacence.
void destroyGroups() override
Supprime tous les groupes de cette famille.
void prepareForDump() override
Prépare les données pour une protection.
ItemInternalConnectivityList m_item_connectivity_list
Accesseur pour les connectivités via Item et ItemInternal.
void addChildFamily(IItemFamily *family) override
Ajoute d'une famile en dépendance.
void checkValid() override
Vérification de la validité des structures internes (interne)
ItemInternal * findOneItem(Int64 uid) override
Entité de numéro unique unique_id.
IParallelMng * parallelMng() const override
Gestionnaire de parallélisme associé
void endUpdate() override
Notifie la fin de modification de la liste des entités.
void compactVariablesAndGroups(const ItemFamilyCompactInfos &compact_infos)
Compacte les variables et les groupes.
void usedVariables(VariableCollection collection) override
Ajoute à la collection collection la liste des variables utilisés de cette famille.
ITraceMng * traceMng() const override
Gestionnaire de trace associé
ItemGroup createGroup(const String &name, Int32ConstArrayView elements, bool do_override=false) override
Créé un groupe d'entités de nom name contenant les entités local_ids.
eItemKind itemKind() const override
Genre des entités.
Integer m_current_id
Identifiant de la famille.
VariableItemInt32 & itemsNewOwner() override
Variable contenant le numéro du nouveau sous-domaine propriétaire de l'entité.
ItemInternalConnectivityList * itemInternalConnectivityList()
Accesseur pour les connectivités via Item et ItemInternal.
IItemFamilyTopologyModifier * _topologyModifier() override
Interface du modificateur de topologie.
void copyItemsValues(Int32ConstArrayView source, Int32ConstArrayView destination) override
void copyItemsMeanValues(Int32ConstArrayView first_source, Int32ConstArrayView second_source, Int32ConstArrayView destination) override
ItemGroup allItems() const override
Groupe de toutes les entités.
void internalRemoveItems(Int32ConstArrayView local_ids, bool keep_ghost=false) override
Supprime les entités donnés par local_ids.
void addGhostItems(Int64ConstArrayView unique_ids, Int32ArrayView items, Int32ConstArrayView owners) override
Alloue des entités fantômes.
IItemFamilyInternal * _internalApi() override
API interne à Arcane.
void getCommunicatingSubDomains(Int32Array &sub_domains) const override
Liste des sous-domaines communiquants pour les entités.
void reduceFromGhostItems(IVariable *v, IDataOperation *operation) override
Applique une opération de réduction depuis les entités fantômes.
ItemConnectivitySet m_target_item_connectivities
connectivite ou ItemFamily == SourceFamily
IItemFamily * parentFamily() const override
IItemFamily parent.
void setHasUniqueIdMap(bool v) override
Indique si la famille possède une table de conversion uniqueId vers localId.
ItemInfoListView itemInfoListView() override
Vue sur la liste d'informations sur les entités.
void setParentFamily(IItemFamily *parent) override
Positionne l'IItemFamily parent.
void compactItems(bool do_sort) override
Compacte les entités.
Integer nbItem() const override
Nombre d'entités.
void notifyItemsUniqueIdChanged() override
Notifie que les numéros uniques des entités ont été modifiées.
ItemVectorView view() override
Vue sur toutes les entités de la famille.
void synchronize(VariableCollection variables) override
Synchronise les variables variables.
ItemPairGroup findAdjacencyItems(const ItemGroup &group, const ItemGroup &sub_group, eItemKind link_kind, Integer layer) override
Cherche une liste d'adjacence.
ItemInternalList itemsInternal() override
Tableau interne des entités.
void computeSynchronizeInfos() override
Construit les structures nécessaires à la synchronisation.
void checkValidConnectivity() override
Vérification de la validité des structures internes concernant la connectivité.
void _updateItemsSharedFlag()
Positionne les infos Item::isShared() pour les entités de la famille.
IVariable * findVariable(const String &name, bool throw_exception) override
Recherche la variable de nom name associée à cette famille.
void _readGroups()
Relit les groupes depuis une protection et les recréer si besoin.
Int32 maxLocalId() const override
void setItemSortFunction(IItemInternalSortFunction *sort_function) override
Positionne la fonction de tri des entités.
IItemInternalSortFunction * itemSortFunction() const override
Fonction de tri des entités.
ISubDomain * subDomain() const override
Sous-domaine associé
virtual void _notifyEndUpdateFromMesh()
IVariableSynchronizer * allItemsSynchronizer() override
Synchroniseur sur toutes les entités de la famille.
void notifyItemsOwnerChanged() override
Notifie que les entités propres au sous-domaine de la famille ont été modifiées.
Integer parentFamilyDepth() const override
Donne la profondeur d'imbrication du maillage courant.
ItemGroupCollection groups() const override
Liste des groupes de cette famille.
IItemConnectivityMng * m_connectivity_mng
connectivite ou ItemFamily == TargetFamily
IItemConnectivityInfo * localConnectivityInfos() const override
Informations sur la connectivité locale au sous-domaine pour à cette famille.
IItemFamilyCollection childFamilies() override
Familles enfantes de cette famille.
void partialEndUpdateGroup(const ItemGroup &group) override
Met à jour un groupe.
void removeNeedRemoveMarkedItems() override
Supprime des entités et met a jour les connectivites.
IItemConnectivityInfo * globalConnectivityInfos() const override
Informations sur la connectivité globales à tous les sous-domaines.
void checkUniqueIds(Int64ConstArrayView unique_ids) override
Vérifie que les identifiants unique_ids sont bien uniques pour tous les sous-domaines.
ItemGroup findGroup(const String &name) const override
Recherche un groupe.
void readFromDump() override
Relit les données à partir d'une protection.
String name() const override
Nom de la famille.
Tableau associatif de ItemInternal.
void notifyUniqueIdsChanged()
Notifie que les numéros uniques des entités ont changés.
Int32 nbBucket() const
Nombre de buckets.
Infos de maillage pour un genre donné d'entité.
bool hasChanged()
Indique si la liste a changée depuis le dernier appel à prepareForDump()
void checkValid()
Vérifie si les structures internes de l'instance sont valides.
Classe temporaire pour conserver un ItemSharedInfo et un type d'entité.
Exception lorsqu'un argument est invalide.
Vue modifiable d'un tableau d'un type T.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
Vue constante d'un tableau de type T.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Interface du gestionnaire de traces.
Exception lorsqu'une fonction n'est pas implémentée.
Exception lorsqu'une opération n'est pas supportée.
Constructeur de chaîne de caractère unicode.
Chaîne de caractères unicode.
Classe d'accès aux traces.
ITraceMng * traceMng() const
Gestionnaire de trace.
TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium) const
Flot pour un message de debug.
TraceMessage info() const
Flot pour un message d'information.
TraceMessage fatal() const
Flot pour un message d'erreur fatale.
Vecteur 1D de données avec sémantique par valeur (style STL).
Int32 toInt32(Int64 v)
Converti un Int64 en un Int32.
Ref< IVariableSynchronizer > createSynchronizerRef(IParallelMng *pm, IItemFamily *family)
Retourne une interface pour synchroniser des variables sur le groupe de la famille family.
bool arcaneIsCheck()
Vrai si on est en mode vérification.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
ConstArrayView< ItemInternal * > ItemInternalList
Type de la liste interne des entités.
ArrayView< Int64 > Int64ArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
eItemKind
Genre d'entité de maillage.
eReduceType
Types des réductions supportées.
Int32 Integer
Type représentant un entier.