Arcane  v3.14.10.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-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/* ItemGroupImpl.h (C) 2000-2024 */
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
37class IItemGroupObserver;
38class IObservable;
39class ItemGroupComputeFunctor;
40class IMesh;
41class ItemGroupInternal;
42class ItemPairGroupImpl;
43class GroupIndexTable;
44class IVariableSynchronizer;
45class ItemGroupImplInternal;
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
93 ItemGroupImpl(IItemFamily* family,ItemGroupImpl* parent,const String& name);
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
277
279 void setItems(Int32ConstArrayView items_local_id);
280
282 void setItems(Int32ConstArrayView items_local_id,bool do_sort);
283
286
288 void removeAddItems(Int32ConstArrayView removed_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;
409
415 void checkLocalIdsAreContigous() const;
416
428 void shrinkMemory();
429
431 Int64 capacity() const;
432
434 ItemGroupImplInternal* _internalApi() const;
435
436 public:
437
444 ARCANE_DEPRECATED_REASON("Y2024: This method is internal to Arcane")
445 Int32Array& unguardedItemsLocalId(const bool self_invalidate = true);
446
447
448 public:
449
451 static void _buildSharedNull();
453 static void _destroySharedNull();
454
455 private:
456
458 void _initChildrenByType();
460 void _computeChildrenByType();
462 void _initChildrenByTypeV2();
464 void _computeChildrenByTypeV2();
466 void _executeExtend(const Int32ConstArrayView * info);
468 void _executeReduce(const Int32ConstArrayView * info);
470 void _executeCompact(const Int32ConstArrayView * info);
472 void _executeReorder(const Int32ConstArrayView * info);
474 void _executeInvalidate();
476 void _updateNeedInfoFlag(const bool flag);
478
479 void _forceInvalidate(const bool self_invalidate);
480
481 void _checkUpdateSimdPadding();
483 virtual void deleteMe();
484
485 private:
486
487 ItemGroupInternal* m_p = nullptr;
488
489 private:
490
492 void _removeItems(SmallSpan<const Int32> items_local_id);
493 bool _checkNeedUpdateNoPadding();
494 bool _checkNeedUpdateWithPadding();
495 bool _checkNeedUpdate(bool do_padding);
496};
497
498/*---------------------------------------------------------------------------*/
499/*---------------------------------------------------------------------------*/
500
501} // End namespace Arcane
502
503/*---------------------------------------------------------------------------*/
504/*---------------------------------------------------------------------------*/
505
506#endif
Tableau d'items de types quelconques.
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.
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.
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.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Implémentation d'un compteur de référence utilisant std::atomic.
Vue constante d'un tableau de type T.
Vue d'un tableau d'éléments de type T.
Definition Span.h:670
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.