Arcane  v3.16.0.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
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/*---------------------------------------------------------------------------*/
51class ItemGroupInternal
52{
53 friend class ItemGroupImplInternal;
54
55 public:
56
57 ItemGroupInternal();
58 ItemGroupInternal(IItemFamily* family, const String& name);
59 ItemGroupInternal(IItemFamily* family, ItemGroupImpl* parent, const String& name);
60 ~ItemGroupInternal();
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
132
133 public:
134
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
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.
Fonctions de gestion mémoire et des allocateurs.
Tableau d'items de types quelconques.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Implémentation d'un groupe d'entités de maillage.
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
Référence à une instance.
Vue d'un tableau d'éléments de type T.
Definition Span.h:673
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
VariableRefArrayT< Int32 > VariableArrayInt32
Variable tableau de type entier 32 bits.
MemoryAllocationOptions getAllocatorForMostlyReadOnlyData()
Allocateur par défaut pour les données essentiellement en lecture.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
ConstArrayView< ItemInternal * > ItemInternalList
Type de la liste interne des entités.
Definition ItemTypes.h:466
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:428
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:540
eItemKind
Genre d'entité de maillage.
@ IK_Unknown
Entité de maillage de genre inconnu ou non initialisé
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:214
std::int32_t Int32
Type entier signé sur 32 bits.