Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemGroupInternal.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* ItemGroupInternal.h (C) 2000-2024 */
9/* */
10/* Partie interne à Arcane de ItemGroup. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_INTERNAL_ITEMGROUPINTERNAL_H
13#define ARCANE_CORE_INTERNAL_ITEMGROUPINTERNAL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/MemoryUtils.h"
18
20#include "arcane/core/VariableTypes.h"
21#include "arcane/core/internal/ItemGroupImplInternal.h"
22
23#include <map>
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30class ItemGroupImpl;
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
52{
53 friend class ItemGroupImplInternal;
54
55 public:
56
58 ItemGroupInternal(IItemFamily* family, const String& name);
59 ItemGroupInternal(IItemFamily* family, ItemGroupImpl* parent, const String& name);
61
62 public:
63
64 const String& name() const { return m_name; }
65 const String& fullName() const { return m_full_name; }
66 bool null() const { return m_is_null; }
67 IMesh* mesh() const { return m_mesh; }
68 eItemKind kind() const { return m_kind; }
69 Integer maxLocalId() const;
70 ItemInternalList items() const;
71 ItemInfoListView itemInfoListView() const;
72
73 Int32ArrayView itemsLocalId() { return *m_items_local_id; }
74 Int32ConstArrayView itemsLocalId() const { return *m_items_local_id; }
75 Int32Array& mutableItemsLocalId() { return *m_items_local_id; }
76 VariableArrayInt32* variableItemsLocalid() { return m_variable_items_local_id; }
77
78 Int64 timestamp() const { return m_timestamp; }
79 bool isContigous() const { return m_is_contigous; }
80 void checkIsContigous();
81
82 void updateTimestamp()
83 {
85 m_is_contigous = false;
86 }
87
88 void setNeedRecompute()
89 {
90 // NOTE: normalement il ne faudrait mettre cette valeur à 'true' que pour
91 // les groupes recalculés (qui ont un parent ou pour lequel 'm_compute_functor' n'est
92 // pas nul). Cependant, cette méthode est aussi appelé sur le groupe de toutes les entités
93 // et peut-être d'autres groupes.
94 // Changer ce comportement risque d'impacter pas mal de code donc il faudrait bien vérifier
95 // que tout est OK avant de faire cette modification.
96 m_need_recompute = true;
97 }
98
100 void applySimdPadding();
101
103 bool isAllItems() const { return m_is_all_items; }
104 bool isOwn() const { return m_is_own; }
105 Int32 nbItem() const { return itemsLocalId().size(); }
106 void checkValid();
107
108 public:
109
110 void _removeItems(SmallSpan<const Int32> items_local_id);
111
112 private:
113
114 void _notifyDirectRemoveItems(SmallSpan<const Int32> removed_ids, Int32 nb_remaining);
115
116 public:
117
118 ItemGroupImplInternal m_internal_api;
119 IMesh* m_mesh = nullptr;
121 ItemGroupImpl* m_parent = nullptr;
124 bool m_is_null = true;
127 bool m_is_own = false;
128
129 private:
130
131 Int64 m_timestamp = -1;
132
133 public:
134
135 Int64 m_simd_timestamp = -1;
147 // FIXME on peut éviter de stocker ces groupes en introduisant des predicats
148 // sur les groupes parents
155 std::map<Integer, ItemGroupImpl*> m_level_cell_group;
156 std::map<Integer, ItemGroupImpl*> m_own_level_cell_group;
157
160 std::map<String, AutoRefT<ItemGroupImpl>> m_sub_groups;
161 bool m_need_recompute = false;
163 bool m_transaction_mode = false;
166 bool m_is_all_items = false;
170
171 // Anciennement dans DynamicMeshKindInfo
172 Int32UniqueArray m_items_index_in_all_group;
173
174 std::map<const void*, IItemGroupObserver*> m_observers;
175 bool m_observer_need_info = false;
176 void notifyExtendObservers(const Int32ConstArrayView* info);
177 void notifyReduceObservers(const Int32ConstArrayView* info);
178 void notifyCompactObservers(const Int32ConstArrayView* info);
179 void notifyInvalidateObservers();
180
181 void resetSubGroups();
182
183 public:
184
185 bool isUseV2ForApplyOperation() const { return m_use_v2_for_apply_operation; }
186
187 private:
188
189 UniqueArray<Int32> m_local_buffer{ MemoryUtils::getAllocatorForMostlyReadOnlyData() };
190 Array<Int32>* m_items_local_id = &m_local_buffer;
191 VariableArrayInt32* m_variable_items_local_id = nullptr;
192 bool m_is_contigous = false;
194 bool m_is_print_check_simd_padding = false;
195 bool m_is_print_apply_simd_padding = false;
196 bool m_is_print_stack_apply_simd_padding = false;
197
198 private:
199
200 // TODO: Mettre cela dans une classe spécifique ce qui permettra
201 // de l'utiliser par exemple pour ItemVector
202
204
206
207 public:
208
211
222
225
226 bool m_is_debug_apply_operation = false;
228
229 private:
230
231 void _init();
232};
233
234/*---------------------------------------------------------------------------*/
235/*---------------------------------------------------------------------------*/
236
237} // namespace Arcane
238
239/*---------------------------------------------------------------------------*/
240/*---------------------------------------------------------------------------*/
241
242#endif
Déclarations des types généraux de Arcane.
Tableau d'items de types quelconques.
Interface d'une famille d'entités.
API interne à Arcane de ItemGroupImpl.
Implémentation d'un groupe d'entités de maillage.
Implémentation de la classe ItemGroupImpl.
ItemGroupImpl * m_node_group
Groupe des noeuds.
std::map< Integer, ItemGroupImpl * > m_own_level_cell_group
Groupe des mailles propres de niveau.
String m_full_name
Nom complet du groupe.
String m_variable_name
Groupe parent (groupe null si aucun)
IMesh * m_mesh
Gestionnare de groupe associé
UniqueArray< ItemGroupImpl * > m_children_by_type
Liste des fils de ce groupe par type d'entité
SharedPtrT< GroupIndexTable > m_group_index_table
Table de hachage du local id des items vers leur position en enumeration.
ItemGroupImpl * m_interface_group
Items on the boundary of two subdomains.
UniqueArray< UniqueArray< Int32 > > m_children_by_type_ids
Liste des localId() par type d'entité.
bool m_is_check_simd_padding
Vrai si les localIds sont consécutifs.
bool m_need_invalidate_on_recompute
Vrai si l'on doit activer les invalidate observers en cas de recalcul.
void checkIsContigous()
Vérifie que les localIds() sont contigüs.
bool m_need_recompute
Vrai si le groupe doit être recalculé
eItemKind m_kind
Genre de entités du groupe.
ItemGroupImpl * m_inner_face_group
Groupe des faces internes.
Int64 m_timestamp
Temps de la derniere modification.
bool m_use_v2_for_apply_operation
Gestion pour applyOperation() Version 2.
std::map< String, AutoRefT< ItemGroupImpl > > m_sub_groups
Ensemble de tous les sous-groupes.
bool m_transaction_mode
Vrai si le groupe est en mode de transaction directe.
bool m_is_own
true si groupe local.
Ref< IVariableSynchronizer > m_synchronizer
Synchronizer du groupe.
void checkUpdateSimdPadding()
Remplit les derniers éléments du groupe pour avoir un vecteur SIMD complet.
bool m_observer_need_info
Synthése de besoin de observers en informations de transition.
void applySimdPadding()
Applique le padding pour la vectorisation.
ItemGroupImpl * m_ghost_group
Items not owned by the subdomain.
bool m_is_local_to_sub_domain
Vrai si le groupe est local au sous-domaine.
bool m_is_all_items
Indique s'il s'agit du groupe de toutes les entités.
ItemGroupImpl * m_own_group
Items owned by the subdomain.
ItemTypeId m_unique_children_type
Indique le type des entités du groupe.
IItemFamily * m_item_family
Famille associée.
ItemGroupImpl * m_edge_group
Groupe des arêtes.
ItemGroupImpl * m_face_group
Groupe des faces.
std::map< Integer, ItemGroupImpl * > m_level_cell_group
Groupe des mailles de niveau.
Int64 m_simd_timestamp
Temps de la derniere modification pour le calcul des infos SIMD.
Array< Int32 > * m_items_local_id
Liste des numéros locaux des entités de ce groupe.
std::map< const void *, IItemGroupObserver * > m_observers
localids -> index (UNIQUEMENT ALLITEMS)
Int64 m_children_by_type_ids_computed_timestamp
Timestamp indiquant quand a été calculé la liste des ids des enfants.
IFunctor * m_compute_functor
Fonction de calcul du groupe.
bool m_is_constituent_group
Indique si le groupe est associé à un constituent (IMeshComponent)
ItemGroupImpl * m_inner_active_face_group
Groupe des faces internes actives.
ItemGroupImpl * m_own_active_cell_group
Groupe des mailles propres actives.
bool m_is_null
true si le groupe est nul
ItemGroupImpl * m_cell_group
Groupe des mailles.
ItemGroupImpl * m_active_cell_group
AMR.
ItemGroupImpl * m_own_active_face_group
Groupe des faces actives propres.
ItemGroupImpl * m_active_face_group
Groupe des faces actives.
ItemGroupImpl * m_outer_active_face_group
Groupe des faces externes actives.
String m_name
Nom du groupe.
Vue sur une liste pour obtenir des informations sur les entités.
Type d'une entité (Item).
Definition ItemTypeId.h:32
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
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.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.
@ IK_Unknown
Entité de maillage de genre inconnu ou non initialisé