12#ifndef ARCANE_MESH_ITEMFAMILY_H
13#define ARCANE_MESH_ITEMFAMILY_H
17#include "arcane/utils/List.h"
18#include "arcane/utils/String.h"
19#include "arcane/utils/TraceAccessor.h"
21#include "arcane/core/IItemFamily.h"
22#include "arcane/core/ItemPairGroup.h"
23#include "arcane/core/ObserverPool.h"
24#include "arcane/core/IItemConnectivity.h"
25#include "arcane/core/IIncrementalItemConnectivity.h"
26#include "arcane/core/ItemSharedInfo.h"
27#include "arcane/core/ItemGroup.h"
73class ARCANE_MESH_EXPORT ItemFamily
87 : m_item_group(item_group), m_sub_item_group(sub_item_group),
88 m_link_kind(link_kind), m_nb_layer(nb_layer)
98 bool operator<(
const AdjacencyInfo& rhs)
const
100 if (m_item_group != rhs.m_item_group)
101 return m_item_group < rhs.m_item_group;
102 if (m_sub_item_group != rhs.m_sub_item_group)
103 return m_sub_item_group < rhs.m_sub_item_group;
104 if (m_link_kind != rhs.m_link_kind)
105 return m_link_kind < rhs.m_link_kind;
106 return m_nb_layer < rhs.m_nb_layer;
110 using AdjacencyGroupMap = std::map<AdjacencyInfo, ItemPairGroup>;
113 using AdjencyGroupMap = AdjacencyGroupMap;
128 ~ItemFamily()
override;
132 void build()
override;
139 Integer nbItem()
const override;
140 Int32 maxLocalId()
const override;
145 void setParentFamily(
IItemFamily * parent)
override;
146 Integer parentFamilyDepth()
const override;
147 void addChildFamily(
IItemFamily * family)
override;
150 void checkValid()
override;
151 void checkValidConnectivity()
override;
160 void endUpdate()
override;
161 void partialEndUpdate()
override;
162 void partialEndUpdateGroup(
const ItemGroup& group)
override;
163 void partialEndUpdateVariable(
IVariable* variable)
override;
170 bool do_fatal)
const override;
173 bool do_fatal)
const override;
190 void removeItems2(
ItemDataList& item_data_list)
override;
191 void removeNeedRemoveMarkedItems()
override;
204 void notifyItemsOwnerChanged()
override;
206 ItemGroup findGroup(
const String& name,
bool create_if_needed)
override;
211 void notifyItemsUniqueIdChanged()
override;
212 void destroyGroups()
override;
216 IVariable* findVariable(
const String& name,
bool throw_exception)
override;
221 void prepareForDump()
override;
222 void readFromDump()
override;
227 void compactItems(
bool do_sort)
override;
228 void clearItems()
override;
232 ItemSharedInfo* commonItemSharedInfo() {
return m_common_item_shared_info; }
236 ARCANE_DEPRECATED_REASON(
"Y2024: This method is internal to Arcane. Use _infos() instead.")
237 const DynamicMeshKindInfos& infos() const;
241 void setHasUniqueIdMap(
bool v) override;
242 bool hasUniqueIdMap() const override;
246 void computeSynchronizeInfos() override;
247 void getCommunicatingSubDomains(
Int32Array& sub_domains) const override;
257 ARCANE_DEPRECATED_REASON(
"Y2024: use findAdjacencyItems() instead")
296 void removeItem(
Item item)
308 void _removeOne(
Item item);
309 void _detachOne(
Item item);
315 void _setHasUniqueIdMap(
bool v);
317 void _removeDetachedOne(
Item item);
322 virtual void _endAllocate();
323 virtual void _notifyEndUpdateFromMesh();
329 IMesh* m_mesh =
nullptr;
330 InternalApi* m_internal_api =
nullptr;
333 Integer m_parent_family_depth = 0;
337 std::unique_ptr<DynamicMeshKindInfos> m_infos;
342 bool m_need_prepare_dump =
true;
354 Integer m_current_variable_item_size = 0;
356 std::set<
IVariable*,
decltype(&_cmpIVariablePtr)> m_used_variables;
357 std::set<
IVariable*,
decltype(&_cmpIVariablePtr)> m_used_shmem_variables;
362 typedef std::set<IItemConnectivity*> ItemConnectivitySet;
363 ItemConnectivitySet m_source_item_connectivities;
378 void _checkNeedEndUpdate()
const;
379 void _updateSharedInfo();
383 void _endUpdate(
bool need_check_remove);
384 bool _partialEndUpdate();
385 void _updateGroup(
ItemGroup group,
bool need_check_remove);
389 void _buildConnectivitySelectors();
390 void _preAllocate(
Int32 nb_item,
bool pre_alloc_connectivity);
401 _resizeShMemVariables();
402 _resizeVariables(force_resize);
414 Variables* m_internal_variables =
nullptr;
415 Int32 m_default_sub_domain_owner = A_NULL_RANK;
419 Int32 m_sub_domain_id = A_NULL_RANK;
423 bool m_is_parallel =
false;
437 bool m_item_need_prepare_dump =
false;
441 Int64 m_nb_allocate_info = 0;
445 AdjacencyGroupMap m_adjacency_groups;
452 bool m_use_legacy_compact_item =
false;
457 bool m_do_shrink_after_allocate =
false;
461 ItemTypeMng* _itemTypeMng()
const {
return m_item_type_mng; }
464 ARCANE_DEPRECATED_REASON(
"Y2022: This method is a now a no-operation")
465 void _reserveInfosMemory(
Integer memory);
466 ARCANE_DEPRECATED_REASON(
"Y2022: This method is a now a no-operation")
467 void _resizeInfos(
Integer memory);
471 ARCANE_DEPRECATED_REASON(
"Y2022: This method always return 0")
473 void _setSharedInfosPtr(
Integer* ptr);
475 void _checkValidConnectivity();
476 void _notifyDataIndexChanged();
479 template<class
Type>
void
481 void _updateGroups(
bool check_need_remove);
483 void _checkComputeSynchronizeInfos(
Int32 changed);
485 void _invalidateComputedGroups();
486 void _compactItems(
bool do_sort);
487 void _compactOnlyItems(
bool do_sort);
488 void _applyCheckNeedUpdateOnGroups();
493 void _updateItemsSharedFlag();
500 arcaneThrowIfNull(item,
"item",
"Invalid null item");
508 arcaneThrowIfNull(source,
"source",
"Invalid null source item");
509 arcaneThrowIfNull(target,
"target",
"Invalid null target item");
511 ARCANE_UNUSED(source);
512 ARCANE_UNUSED(target);
515 void _checkValidItem(Item item) { _checkValidItem(ItemCompatibility::_itemInternal(item)); }
516 void _checkValidSourceTargetItems(Item source,Item target)
518 _checkValidItem(ItemCompatibility::_itemInternal(source));
519 _checkValidItem(ItemCompatibility::_itemInternal(target));
524 void _getConnectedItems(IIncrementalItemConnectivity* parent_connectivity,ItemVector& target_family_connected_items);
525 void _fillHasExtraParentProperty(ItemScalarProperty<bool>& child_families_has_extra_parent,ItemVectorView connected_items);
526 void _computeConnectivityInfo(ItemConnectivityInfo* ici);
527 void _updateItemViews();
528 void _resizeItemVariables(Int32 new_size,
bool force_resize);
529 void _handleOldCheckpoint();
531 void _addSourceConnectivity(IIncrementalItemSourceConnectivity* c);
532 void _addTargetConnectivity(IIncrementalItemTargetConnectivity* c);
533 void _addVariable(IVariable* var);
534 void _removeVariable(IVariable* var);
535 void _resizeVariables(
bool force_resize);
536 void _resizeShMemVariables();
537 void _shrinkConnectivityAndPrintInfos();
538 void _addOnSizeChangedObservable(VariableRef& var_ref);
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Classe gérant les observateurs associés à un évènement.
Interface d'une opération sur une donnée.
Interface pour gérer une connectivité incrémentale.
Interface des informations sur la connectivité par type d'entité.
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.
Interface d'une fonction de tri des entités.
Gestion d'un compactage de familles du maillage.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface d'une famille de particules.
Interface du gestionnaire d'un sous-domaine.
Interface du gestionnaire de traces.
Interface d'un service de synchronisation de variable.
Interface d'une variable.
Informations pour gérer le compactage des entités d'une famille.
Groupe d'entités de maillage.
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...
Structure interne d'une entité de maillage.
Index d'un Item dans une variable.
Tableau de listes d'entités.
Structure interne partagée d'une entité de maillage.
Infos sur un type d'entité du maillage.
Gestionnaire des types d'entités d'un maillage.
Identifiant unique d'une entité.
Vue sur un vecteur d'entités.
Classe de base d'un élément de maillage.
Tableaux d'indirection sur les entités d'un maillage.
Référence à une instance.
Chaîne de caractères unicode.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Vecteur 1D de données avec sémantique par valeur (style STL).
Infos de maillage pour un genre donné d'entité.
Informations sur la connectivité par type d'entité.
Sélection entre les connectivités historiques et à la demande.
IMesh * mesh() const override
Maillage associé
String fullName() const override
Nom complet de la famille (avec celui du maillage)
ItemInternalConnectivityList m_item_connectivity_list
Accesseur pour les connectivités via Item et ItemInternal.
IParticleFamily * toParticleFamily() override
Retourne l'interface de la famille de particule de cette famille.
Integer m_current_id
Identifiant de la famille.
ItemInternalConnectivityList * itemInternalConnectivityList()
Accesseur pour les connectivités via Item et ItemInternal.
IItemFamilyTopologyModifier * _topologyModifier() override
Interface du modificateur de topologie.
ItemConnectivitySet m_target_item_connectivities
connectivite ou ItemFamily == SourceFamily
static bool _cmpIVariablePtr(const IVariable *a, const IVariable *b)
Fonction permettant de comparer deux noms de variable (strcmp).
IItemConnectivityMng * m_connectivity_mng
connectivite ou ItemFamily == TargetFamily
Properties * properties() override
Propriétés associées à cette famille.
void resizeVariables(bool force_resize) override
Redimensionne les variables de cette famille.
String name() const override
Nom de la famille.
IItemFamilyPolicyMng * policyMng() override
Interface des comportements/politiques associées à cette famille.
Tableau associatif de ItemInternal.
Infos de maillage pour un genre donné d'entité.
Classe temporaire pour conserver un ItemSharedInfo et un type d'entité.
ItemVariableScalarRefT< Int32 > VariableItemInt32
Grandeur de type entier 32 bits.
eReduceType
Types des réductions supportées.
Implémentation de la concurrence.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Array< Int64 > Int64Array
Tableau dynamique à une dimension d'entiers 64 bits.
ArrayView< Int64 > Int64ArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Collection< ItemGroup > ItemGroupCollection
Collection de groupes d'éléments du maillage.
std::int64_t Int64
Type entier signé sur 64 bits.
Array< Int16 > Int16Array
Tableau dynamique à une dimension d'entiers 16 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
List< ItemGroup > ItemGroupList
Tableau de groupes d'éléments du maillage.
ConstArrayView< ItemInternal * > ItemInternalList
Type de la liste interne des entités.
Collection< IItemFamily * > IItemFamilyCollection
Collection de familles d'entités.
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
eItemKind
Genre d'entité de maillage.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
std::int32_t Int32
Type entier signé sur 32 bits.