Arcane  v3.16.6.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
17#include "arcane/ItemTypes.h"
18#include "arcane/SharedReference.h"
19#include "arcane/utils/SharedPtr.h"
20
21#include "arcane/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 ItemGroup;
77 class ItemSorter;
78
79 public:
80
83
87 ItemGroupImpl(IItemFamily* family,const String& name);
88
94
95 virtual ~ItemGroupImpl();
96
97 private:
98
99 static ItemGroupImpl* shared_null;
100
101 public:
102
103 static ItemGroupImpl* checkSharedNull();
104
105 public:
106
107 virtual ISharedReference& sharedReference() { return *this; }
108
109 public:
110
112 const String& name() const;
113
115 const String& fullName() const;
116
118 virtual Integer nbRef() const { return refCount(); }
119
121 ItemGroupImpl* parent() const;
122
124 bool null() const;
125
127 bool isOwn() const;
128
130 void setOwn(bool v);
131
133 ItemGroupImpl* ownGroup();
134
136 ItemGroupImpl* ghostGroup();
137
138 // Items in the group lying on the boundary between two subdomains
139 // Implemented for faces only
140 ItemGroupImpl* interfaceGroup();
141
143 ItemGroupImpl* nodeGroup();
144
146 ItemGroupImpl* edgeGroup();
147
149 ItemGroupImpl* faceGroup();
150
152 ItemGroupImpl* cellGroup();
153
155
156 ItemGroupImpl* createSubGroup(const String& suffix, IItemFamily* family, ItemGroupComputeFunctor* functor);
157
159
160 ItemGroupImpl* findSubGroup(const String& suffix);
161
168 ItemGroupImpl* innerFaceGroup();
169
176 ItemGroupImpl* outerFaceGroup();
177
179
184 ItemGroupImpl* activeCellGroup();
185
189 ItemGroupImpl* ownActiveCellGroup();
190
196 ItemGroupImpl* levelCellGroup(const Integer& level);
197
201 ItemGroupImpl* ownLevelCellGroup(const Integer& level);
202
209 ItemGroupImpl* activeFaceGroup();
210
217 ItemGroupImpl* ownActiveFaceGroup();
218
225 ItemGroupImpl* innerActiveFaceGroup();
226
233 ItemGroupImpl* outerActiveFaceGroup();
234
236
238 bool isLocalToSubDomain() const;
239
241 void setLocalToSubDomain(bool v);
242
244 IMesh* mesh() const;
245
247 eItemKind itemKind() const;
248
250 IItemFamily* itemFamily() const;
251
253 Integer size() const;
254
256 bool empty() const;
257
259 void clear();
260
262 ItemGroup parentGroup();
263
270 void invalidate(bool force_recompute);
271
276 void addItems(Int32ConstArrayView items_local_id,bool check_if_present);
277
279 void setItems(Int32ConstArrayView items_local_id);
280
282 void setItems(Int32ConstArrayView items_local_id,bool do_sort);
283
285 void removeItems(Int32ConstArrayView items_local_id,bool check_if_present);
286
288 void removeAddItems(Int32ConstArrayView removed_local_id,
289 Int32ConstArrayView added_local_id,
290 bool check_if_present);
291
295 void removeSuppressedItems();
296
298 void checkValid();
299
307 bool checkNeedUpdate();
308
310 Int32ConstArrayView itemsLocalId() const;
311
319 void beginTransaction();
320
322 void endTransaction();
323
324 ARCANE_DEPRECATED_REASON("Y2022: Use itemInfoListView() instead")
326 ItemInternalList itemsInternal() const;
327
329 ItemInfoListView itemInfoListView() const;
330
336 void setIsAllItems();
337
339 bool isAllItems() const;
340
342 void changeIds(Int32ConstArrayView old_to_new_ids);
343
345 void applyOperation(IItemOperationByBasicType* operation);
346
348 bool needSynchronization() const;
349
351 Int64 timestamp() const;
352
359 void attachObserver(const void * ref, IItemGroupObserver * obs);
360
366 void detachObserver(const void * ref);
367
376 bool hasInfoObserver() const;
377
379 void setComputeFunctor(IFunctor* functor);
380
382 bool hasComputeFunctor() const;
383
391 void destroy();
392
394 SharedPtrT<GroupIndexTable> localIdToIndex();
395
397 IVariableSynchronizer* synchronizer();
398
400 bool hasSynchronizer();
401
405 bool checkIsSorted() const;
406
408 bool isContigousLocalIds() const { return isContiguousLocalIds(); }
409
411 bool isContiguousLocalIds() const;
412
415
421 void checkLocalIdsAreContiguous() const;
422
434 void shrinkMemory();
435
437 Int64 capacity() const;
438
440 ItemGroupImplInternal* _internalApi() const;
441
442 public:
443
450 ARCANE_DEPRECATED_REASON("Y2024: This method is internal to Arcane")
451 Int32Array& unguardedItemsLocalId(const bool self_invalidate = true);
452
453
454 public:
455
457 static void _buildSharedNull();
459 static void _destroySharedNull();
460
461 private:
462
464 void _initChildrenByType();
466 void _computeChildrenByType();
468 void _initChildrenByTypeV2();
470 void _computeChildrenByTypeV2();
472 void _executeExtend(const Int32ConstArrayView * info);
474 void _executeReduce(const Int32ConstArrayView * info);
476 void _executeCompact(const Int32ConstArrayView * info);
480 void _executeInvalidate();
482 void _updateNeedInfoFlag(const bool flag);
484
485 void _forceInvalidate(const bool self_invalidate);
486
487 void _checkUpdateSimdPadding();
489 virtual void deleteMe();
490
491 private:
492
494
495 private:
496
498 void _removeItems(SmallSpan<const Int32> items_local_id);
499 bool _checkNeedUpdateNoPadding();
500 bool _checkNeedUpdateWithPadding();
501 bool _checkNeedUpdate(bool do_padding);
502};
503
504/*---------------------------------------------------------------------------*/
505/*---------------------------------------------------------------------------*/
506
507} // End namespace Arcane
508
509/*---------------------------------------------------------------------------*/
510/*---------------------------------------------------------------------------*/
511
512#endif
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 observable.
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:673
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:569
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:214
std::int32_t Int32
Type entier signé sur 32 bits.