Arcane  v4.1.3.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemGroupImpl.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* ItemGroupImpl.h (C) 2000-2025 */
9/* */
10/* Implémentation d'un groupe d'entités du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMGROUPIMPL_H
13#define ARCANE_ITEMGROUPIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/core/SharedReference.h"
19#include "arcane/utils/SharedPtr.h"
20
21#include "arcane/core/GroupIndexTable.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31// Macro pour détecter les modifications de conception de ItemGroupImpl
32#define ITEMGROUP_USE_OBSERVERS
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
38class IObservable;
40class IMesh;
43class GroupIndexTable;
46
47/*---------------------------------------------------------------------------*/
48/*---------------------------------------------------------------------------*/
71class ARCANE_CORE_EXPORT ItemGroupImpl
72: public SharedReference
73{
74 private:
75
76 friend class ItemGroupSubPartsByType;
77 friend ItemGroup;
78 class ItemSorter;
79
80 public:
81
84
88 ItemGroupImpl(IItemFamily* family,const String& name);
89
95
96 virtual ~ItemGroupImpl();
97
98 private:
99
100 static ItemGroupImpl* shared_null;
101
102 public:
103
104 static ItemGroupImpl* checkSharedNull();
105
106 public:
107
108 virtual ISharedReference& sharedReference() { return *this; }
109
110 public:
111
113 const String& name() const;
114
116 const String& fullName() const;
117
119 virtual Integer nbRef() const { return refCount(); }
120
122 ItemGroupImpl* parent() const;
123
125 bool null() const;
126
128 bool isOwn() const;
129
131 void setOwn(bool v);
132
134 ItemGroupImpl* ownGroup();
135
137 ItemGroupImpl* ghostGroup();
138
139 // Items in the group lying on the boundary between two subdomains
140 // Implemented for faces only
141 ItemGroupImpl* interfaceGroup();
142
144 ItemGroupImpl* nodeGroup();
145
147 ItemGroupImpl* edgeGroup();
148
150 ItemGroupImpl* faceGroup();
151
153 ItemGroupImpl* cellGroup();
154
156
157 ItemGroupImpl* createSubGroup(const String& suffix, IItemFamily* family, ItemGroupComputeFunctor* functor);
158
160
161 ItemGroupImpl* findSubGroup(const String& suffix);
162
169 ItemGroupImpl* innerFaceGroup();
170
177 ItemGroupImpl* outerFaceGroup();
178
180
185 ItemGroupImpl* activeCellGroup();
186
190 ItemGroupImpl* ownActiveCellGroup();
191
197 ItemGroupImpl* levelCellGroup(const Integer& level);
198
202 ItemGroupImpl* ownLevelCellGroup(const Integer& level);
203
210 ItemGroupImpl* activeFaceGroup();
211
218 ItemGroupImpl* ownActiveFaceGroup();
219
226 ItemGroupImpl* innerActiveFaceGroup();
227
234 ItemGroupImpl* outerActiveFaceGroup();
235
237
239 bool isLocalToSubDomain() const;
240
242 void setLocalToSubDomain(bool v);
243
245 IMesh* mesh() const;
246
248 eItemKind itemKind() const;
249
251 IItemFamily* itemFamily() const;
252
254 Integer size() const;
255
257 bool empty() const;
258
260 void clear();
261
263 ItemGroup parentGroup();
264
271 void invalidate(bool force_recompute);
272
277 void addItems(Int32ConstArrayView items_local_id,bool check_if_present);
278
280 void setItems(Int32ConstArrayView items_local_id);
281
283 void setItems(Int32ConstArrayView items_local_id,bool do_sort);
284
286 void removeItems(Int32ConstArrayView items_local_id,bool check_if_present);
287
289 void removeAddItems(Int32ConstArrayView removed_local_id,
290 Int32ConstArrayView added_local_id,
291 bool check_if_present);
292
296 void removeSuppressedItems();
297
299 void checkValid();
300
308 bool checkNeedUpdate();
309
311 Int32ConstArrayView itemsLocalId() const;
312
320 void beginTransaction();
321
323 void endTransaction();
324
325 ARCANE_DEPRECATED_REASON("Y2022: Use itemInfoListView() instead")
327 ItemInternalList itemsInternal() const;
328
330 ItemInfoListView itemInfoListView() const;
331
337 void setIsAllItems();
338
340 bool isAllItems() const;
341
343 void changeIds(Int32ConstArrayView old_to_new_ids);
344
346 void applyOperation(IItemOperationByBasicType* operation);
347
349 bool needSynchronization() const;
350
352 Int64 timestamp() const;
353
360 void attachObserver(const void * ref, IItemGroupObserver * obs);
361
367 void detachObserver(const void * ref);
368
377 bool hasInfoObserver() const;
378
380 void setComputeFunctor(IFunctor* functor);
381
383 bool hasComputeFunctor() const;
384
392 void destroy();
393
395 SharedPtrT<GroupIndexTable> localIdToIndex();
396
398 IVariableSynchronizer* synchronizer();
399
401 bool hasSynchronizer();
402
406 bool checkIsSorted() const;
407
409 bool isContigousLocalIds() const { return isContiguousLocalIds(); }
410
412 bool isContiguousLocalIds() const;
413
416
422 void checkLocalIdsAreContiguous() const;
423
435 void shrinkMemory();
436
438 Int64 capacity() const;
439
441 ItemGroupImplInternal* _internalApi() const;
442
443 public:
444
451 ARCANE_DEPRECATED_REASON("Y2024: This method is internal to Arcane")
452 Int32Array& unguardedItemsLocalId(const bool self_invalidate = true);
453
454
455 public:
456
458 static void _buildSharedNull();
460 static void _destroySharedNull();
461
462 private:
463
465 void _computeChildrenByType();
467 void _executeExtend(const Int32ConstArrayView * info);
469 void _executeReduce(const Int32ConstArrayView * info);
471 void _executeCompact(const Int32ConstArrayView * info);
475 void _executeInvalidate();
477 void _updateNeedInfoFlag(const bool flag);
479
480 void _forceInvalidate(const bool self_invalidate);
481
482 void _checkUpdateSimdPadding();
484 virtual void deleteMe();
485
486 private:
487
489
490 private:
491
493 void _removeItems(SmallSpan<const Int32> items_local_id);
494 bool _checkNeedUpdateNoPadding();
495 bool _checkNeedUpdateWithPadding();
496 bool _checkNeedUpdate(bool do_padding);
497};
498
499/*---------------------------------------------------------------------------*/
500/*---------------------------------------------------------------------------*/
501
502} // End namespace Arcane
503
504/*---------------------------------------------------------------------------*/
505/*---------------------------------------------------------------------------*/
506
507#endif
Déclarations de types sur les entités.
Classe de base d'une table de hachage entre les items d'un groupe et leurs positions dans la table.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Interface d'un opérateur sur des entités rangées par type.
Interface d'un compteur de référence.
Interface d'un service de synchronisation de variable.
Fonctor pour le calcul des éléments d'un groupe.
API interne à Arcane de ItemGroupImpl.
Implémentation d'un groupe d'entités de maillage.
virtual Integer nbRef() const
Nombre de références sur le groupe.
void _executeReorder(const Int32ConstArrayView *info)
Invalidation des sous-groupes.
ItemGroupImpl * parent() const
Groupe parent (0 si aucun)
void checkLocalIdsAreContiguous() const
Vérifie si les entités du groupe ont des localIds() contigüs.
const String & fullName() const
Nom complet du groupe (avec maillage + famille)
void _updateNeedInfoFlag(const bool flag)
Mise à jour forcée du flag d'information de restructuration.
void _executeInvalidate()
Invalidation des sous-groupes.
virtual void deleteMe()
Notification de SharedReference indiquant qu'il faut détruire l'instance.
void checkLocalIdsAreContigous() const
bool isContiguousLocalIds() const
Indique si les entités du groupe ont des localIds() contigüs.
bool isContigousLocalIds() const
void _removeItems(SmallSpan< const Int32 > items_local_id)
Supprime les entités items_local_id du groupe.
ItemGroupImpl()
Construit un groupe nul.
void _forceInvalidate(const bool self_invalidate)
Invalidate forcée récursive.
ItemGroupInternal * m_p
Implémentation du groupe.
const String & name() const
Nom du groupe.
Implémentation de la classe ItemGroupImpl.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Vue sur une liste pour obtenir des informations sur les entités.
Implémentation d'un tableau de listes d'entités.
Int32 refCount() const override
Retourne la valeur du compteur de référence.
Vue d'un tableau d'éléments de type T.
Definition Span.h:801
Chaîne de caractères unicode.
-*- 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:482
ConstArrayView< ItemInternal * > ItemInternalList
Type de la liste interne des entités.
Definition ItemTypes.h:466
eItemKind
Genre d'entité de maillage.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:127
std::int32_t Int32
Type entier signé sur 32 bits.