Arcane  v3.16.2.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemGroup.cc
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/* ItemGroup.cc (C) 2000-2025 */
9/* */
10/* Groupes d'entités du maillage. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/core/ItemGroup.h"
15
16#include "arcane/utils/String.h"
17#include "arcane/utils/ArgumentException.h"
18
19#include "arcane/core/IItemFamily.h"
20#include "arcane/core/IMesh.h"
21#include "arcane/core/ICaseMng.h"
22#include "arcane/core/CaseOptionBase.h"
23#include "arcane/core/ICaseOptionList.h"
24#include "arcane/core/MeshHandle.h"
25#include "arcane/core/internal/ItemGroupInternal.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35/*!
36 * \class ItemGroup
37
38 Un groupe d'entité du maillage est une liste d'entités
39 d'une même famille (IItemFamily).
40
41 Une entité ne peut être présente qu'une seule fois dans un groupe.
42
43 Une instance de cette classe possède une référence sur un groupe
44 quelconque d'entités du maillage. Il est possible à partir de cette référence
45 de connaître le genre (itemKind(), le nom (name()) et le nombre d'éléments
46 (size()) du groupe et d'itérer de manière générique sur les éléments qui le compose.
47 Pour itérer sur les éléments dérivés (mailles, noeuds, ...), il faut d'abord le
48 convertir en une référence sur un groupe spécifique (NodeGroup, FaceGroup,
49 EdgeGroup ou CellGroup). Par exemple:
50 \code
51 ItemGroup group = subDomain()->defaultMesh()->findGroup("Surface");
52 FaceGroup surface(surface);
53 if (surface.null())
54 // Pas une surface.
55 if (surface.empty())
56 // Surface existe mais est vide
57 \endcode
58
59 Il est possible de trier un groupe pour que ses éléments soient
60 toujours être classés par ordre
61 croissant des uniqueId() des éléments, afin de garantir que les codes
62 séquentiels et parallèles peuvent donner le même résultat.
63
64 Il existe un groupe spécial, dit groupe nul, permettant de représenter
65 un groupe non référencé, c'est à dire qui n'existe pas. Ce groupe est
66 le seul pour lequel null() retourne \c true. Le groupe nul possède
67 les propriétés suivantes:
68 \arg null() == \c true;
69 \arg size() == \c 0;
70 \arg name().null() == \c true;
71
72 Cette classe utilise un compteur de référence et s'utilise donc par
73 référence. Par exemple:
74 \code
75 ItemGroup a = subDomain()->defaultMesh()->findGroup("Toto");
76 ItemGroup b = a; // b et a font référence au même groupe.
77 if (a.null())
78 // Groupe pas trouvé...
79 ;
80 \endcode
81
82 Pour parcourir les entités d'un groupe, il faut utiliser un énumérateur,
83 par l'intermédiaire des macros ENUMERATE_*, par exemple ENUMERATE_CELL
84 pour un groupe de mailles:
85 \code
86 * CellGroup g;
87 * ENUMERATE_CELL(icell,g){
88 * m_mass[icell] = m_volume[icell] * m_density[icell];
89 * }
90 \endcode
91
92 Il est possible d'ajouter (addItems()) ou supprimer des entités
93 d'un groupe (removeItems()).
94
95 Les groupes qui n'ont pas de parents sont persistants et peuvent
96 être récupérés lors d'une reprise. Les éléments de ces groupes sont
97 automatiquement mis à jour lors de la modification de la famille
98 associée. Par exemple, si un élément d'une famille est supprimé
99 et qu'il appartenait à un groupe, il est automatiquement supprimé
100 de ce groupe. De même les groupes sont mis à jour lors d'un
101 repartitionnement du maillage. Il existe cependant une petite restriction
102 avec l'implémentation actuelle sur cette utilisation. Pour éviter de remettre
103 à jour le groupe à chaque changement de la famille, le groupe est marqué
104 comme devant être remis à jour (via invalidate()) à chaque changement
105 mais n'est réellement recalculé que lorsqu'il sera utilisé. Il est
106 donc théoriquement possible que des ajouts et suppressions multiples
107 entre deux utilisations du groupe rendent ses éléments incohérents
108 (TODO: lien sur explication detaillée). Pour éviter ce problème, il
109 est possible de forcer le recalcul du groupe en appelant invalidate()
110 avec comme argument \a true.
111
112 Les groupes dits dérivés (qui ont un parent) comme les own() ou
113 les cellGroup() sont invalidés et vidés de leurs éléments lors d'une
114 modification de la famille associée.
115
116 Si un groupe est utilisé comme support pour des variables partielles, alors
117 les entités appartenant au groupe doivent être cohérentes entre les
118 sous-domaines. C'est à dire que si une entité \a x est présente dans
119 plusieurs sous-domaines (que soit en tant qu'entité propre ou
120 fantôme), il faut qu'elle soit dans ce groupe pour tous les
121 sous-domaines ou dans aucun des groupes. Par exemple, si la maille de
122 uniqueId() 238 est présente les sous-domaines 1, 4 et 8 et que
123 pour le sous-domaine 4 elle est dans le groupe de mailles 'TOTO',
124 alors il faut aussi qu'elle soit dans ce groupe de mailles 'TOTO'
125 pour les sous-domaines 1 et 8.
126*/
127/*---------------------------------------------------------------------------*/
128/*---------------------------------------------------------------------------*/
129
132: m_impl(grp)
133{
134 // Si \a grp est nul, le remplace par le groupe nul.
135 // Cela est fait (version 2.3) pour des raisons de compatibilité.
136 // A terme, ce constructeur sera explicite et dans ce cas il
137 // faudra faire:
138 // ARCANE_CHECK_POINTER(grp);
139 if (!grp){
140 std::cerr << "Creating group with null pointer is not allowed\n";
141 m_impl = ItemGroupImpl::checkSharedNull();
142 }
143}
144
145/*---------------------------------------------------------------------------*/
146/*---------------------------------------------------------------------------*/
147
149ItemGroup()
150: m_impl(ItemGroupImpl::checkSharedNull())
151{
152}
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
158isOwn() const
159{
160 if (null())
161 return true;
162
163 return m_impl->isOwn();
164}
165
166/*---------------------------------------------------------------------------*/
167/*---------------------------------------------------------------------------*/
168
170setOwn(bool v)
171{
172 if (!null())
173 m_impl->setOwn(v);
174}
175
176/*---------------------------------------------------------------------------*/
177/*---------------------------------------------------------------------------*/
178/*!
179 * \brief Groupe équivalent à celui-ci mais contenant
180 * uniquement les éléments propres au sous-domaine.
181 *
182 * Si ce groupe est déjà un groupe ne contenant que des éléments propres
183 * au sous-domaine, c'est lui même qui est retourné:
184 * \code
185 * group.own()==group; // Pour un groupe local
186 * group.own().own()==group.own(); // Invariant
187 * \endcode
188 */
190own() const
191{
192 if (null() || isOwn())
193 return (*this);
194 m_impl->checkNeedUpdate();
195 return ItemGroup(m_impl->ownGroup());
196}
197
198/*---------------------------------------------------------------------------*/
199/*---------------------------------------------------------------------------*/
200
201// group of items owned by the subdomain
202ItemGroup ItemGroup::
203ghost() const
204{
205 if (null())
206 return ItemGroup();
207 m_impl->checkNeedUpdate();
208 return ItemGroup(m_impl->ghostGroup());
209}
210
211/*---------------------------------------------------------------------------*/
212/*---------------------------------------------------------------------------*/
213
214// Items in the group lying on the boundary between two subdomains
215// Implemented for faces only
216ItemGroup ItemGroup::
217interface() const
218{
219 if (null())
220 return ItemGroup();
221 m_impl->checkNeedUpdate();
222 return ItemGroup(m_impl->interfaceGroup());
223}
224
225// GERER PLANTAGE SORTED
226/*---------------------------------------------------------------------------*/
227/*---------------------------------------------------------------------------*/
228
230nodeGroup() const
231{
232 if (null())
233 return ItemGroup();
234 m_impl->checkNeedUpdate();
235 return NodeGroup(m_impl->nodeGroup());
236}
237
238/*---------------------------------------------------------------------------*/
239/*---------------------------------------------------------------------------*/
240
242edgeGroup() const
243{
244 if (null())
245 return ItemGroup();
246 m_impl->checkNeedUpdate();
247 return EdgeGroup(m_impl->edgeGroup());
248}
249
250/*---------------------------------------------------------------------------*/
251/*---------------------------------------------------------------------------*/
252
254faceGroup() const
255{
256 if (null())
257 return ItemGroup();
258 m_impl->checkNeedUpdate();
259 return FaceGroup(m_impl->faceGroup());
260}
261
262/*---------------------------------------------------------------------------*/
263/*---------------------------------------------------------------------------*/
264
266cellGroup() const
267{
268 if (null())
269 return ItemGroup();
270 m_impl->checkNeedUpdate();
271 return CellGroup(m_impl->cellGroup());
272}
273
274/*---------------------------------------------------------------------------*/
275/*---------------------------------------------------------------------------*/
276
278innerFaceGroup() const
279{
280 if (null())
281 return ItemGroup();
282 m_impl->checkNeedUpdate();
283 return FaceGroup(m_impl->innerFaceGroup());
284}
285
286/*---------------------------------------------------------------------------*/
287/*---------------------------------------------------------------------------*/
288
290outerFaceGroup() const
291{
292 if (null())
293 return ItemGroup();
294 m_impl->checkNeedUpdate();
295 return FaceGroup(m_impl->outerFaceGroup());
296}
297
298/*---------------------------------------------------------------------------*/
299/*---------------------------------------------------------------------------*/
300//! AMR
301/*---------------------------------------------------------------------------*/
302/*---------------------------------------------------------------------------*/
303
305activeCellGroup() const
306{
307 if (null())
308 return ItemGroup();
309 m_impl->checkNeedUpdate();
310 return CellGroup(m_impl->activeCellGroup());
311}
312
313/*---------------------------------------------------------------------------*/
314/*---------------------------------------------------------------------------*/
315
317ownActiveCellGroup() const
318{
319 if (null())
320 return ItemGroup();
321 m_impl->checkNeedUpdate();
322 return CellGroup(m_impl->ownActiveCellGroup());
323}
324
325/*---------------------------------------------------------------------------*/
326/*---------------------------------------------------------------------------*/
327
329levelCellGroup(const Integer& level) const
330{
331 if (null())
332 return ItemGroup();
333 m_impl->checkNeedUpdate();
334 return CellGroup(m_impl->levelCellGroup(level));
335}
336
337/*---------------------------------------------------------------------------*/
338/*---------------------------------------------------------------------------*/
339
341ownLevelCellGroup(const Integer& level) const
342{
343 if (null())
344 return ItemGroup();
345 m_impl->checkNeedUpdate();
346 return CellGroup(m_impl->ownLevelCellGroup(level));
347}
348/*---------------------------------------------------------------------------*/
349/*---------------------------------------------------------------------------*/
350
352activeFaceGroup() const
353{
354 if (null())
355 return ItemGroup();
356 m_impl->checkNeedUpdate();
357 return FaceGroup(m_impl->activeFaceGroup());
358}
359
360/*---------------------------------------------------------------------------*/
361/*---------------------------------------------------------------------------*/
362
364ownActiveFaceGroup() const
365{
366 if (null())
367 return ItemGroup();
368 m_impl->checkNeedUpdate();
369 return FaceGroup(m_impl->ownActiveFaceGroup());
370}
371
372/*---------------------------------------------------------------------------*/
373/*---------------------------------------------------------------------------*/
374
375/*---------------------------------------------------------------------------*/
376/*---------------------------------------------------------------------------*/
377
380{
381 if (null())
382 return ItemGroup();
383 m_impl->checkNeedUpdate();
384 return FaceGroup(m_impl->innerActiveFaceGroup());
385}
386
387/*---------------------------------------------------------------------------*/
388/*---------------------------------------------------------------------------*/
389
392{
393 if (null())
394 return ItemGroup();
395 m_impl->checkNeedUpdate();
396 return FaceGroup(m_impl->outerActiveFaceGroup());
397}
398
399/*---------------------------------------------------------------------------*/
400/*---------------------------------------------------------------------------*/
401
402/*---------------------------------------------------------------------------*/
403/*---------------------------------------------------------------------------*/
404
406createSubGroup(const String & suffix, IItemFamily * family, ItemGroupComputeFunctor * functor) const
407{
408 if (null())
409 return ItemGroup();
410 m_impl->checkNeedUpdate();
411 return ItemGroup(m_impl->createSubGroup(suffix,family,functor));
412}
413
414/*---------------------------------------------------------------------------*/
415/*---------------------------------------------------------------------------*/
416
418findSubGroup(const String & suffix) const
419{
420 if (null())
421 return ItemGroup();
422 return ItemGroup(m_impl->findSubGroup(suffix));
423}
424
425/*---------------------------------------------------------------------------*/
426/*---------------------------------------------------------------------------*/
427
429clear()
430{
431 m_impl->clear();
432}
433
434/*---------------------------------------------------------------------------*/
435/*---------------------------------------------------------------------------*/
436/*!
437 * Ajoute les entités de numéros locaux \a items_local_id.
438 *
439 * La paramètre \a check_if_present indique s'il vaut vérifier si les entités
440 * à ajouter sont déjà présentes dans le groupe, auquel cas elles ne sont
441 * pas ajouter. Si l'appelant est certain que les entités à ajouter
442 * ne sont pas actuellement dans le groupe, il peut positionner le
443 * paramètre \a check_if_present à \a false ce qui accélère l'ajout.
444 */
446addItems(Int32ConstArrayView items_local_id,bool check_if_present)
447{
448 if (null())
449 throw ArgumentException(A_FUNCINFO,"Can not addItems() to null group");
450 if (isAllItems())
451 throw ArgumentException(A_FUNCINFO,"Can not addItems() to all-items group");
452 m_impl->_checkNeedUpdateNoPadding();
453 m_impl->addItems(items_local_id,check_if_present);
454}
455
456/*---------------------------------------------------------------------------*/
457/*---------------------------------------------------------------------------*/
458/*!
459 * Supprime les entités de numéros locaux \a items_local_id.
460 *
461 * La paramètre \a check_if_present indique s'il vaut vérifier si les entités
462 * à supprimer ne sont déjà présentes dans le groupe, auquel cas elles ne sont
463 * pas supprimées. Si l'appelant est certain que les entités à supprimer
464 * sont dans le groupe, il peut positionner le
465 * paramètre \a check_if_present à \a false ce qui accélère la suppression.
466 */
468removeItems(Int32ConstArrayView items_local_id,bool check_if_present)
469{
470 if (null())
471 throw ArgumentException(A_FUNCINFO,"Can not removeItems() to null group");
472 if (isAllItems())
473 throw ArgumentException(A_FUNCINFO,"Can not removeItems() to all-items group");
474 m_impl->_checkNeedUpdateNoPadding();
475 m_impl->removeItems(items_local_id,check_if_present);
476}
477
478/*---------------------------------------------------------------------------*/
479/*---------------------------------------------------------------------------*/
480/*!
481 * \brief Positionne les entités du groupe.
482 *
483 * Positionne les entités dont les numéros locaux sont donnés par
484 * \a items_local_id.
485 * L'appelant garanti que chaque entité n'est présente qu'une fois dans
486 * ce tableau
487 */
489setItems(Int32ConstArrayView items_local_id)
490{
491 if (null())
492 throw ArgumentException(A_FUNCINFO,"Can not setItems() to null group");
493 m_impl->setItems(items_local_id);
494}
495
496/*---------------------------------------------------------------------------*/
497/*---------------------------------------------------------------------------*/
498/*!
499 * \brief Positionne les entités du groupe.
500 *
501 * Positionne les entités dont les numéros locaux sont donnés par
502 * \a items_local_id.
503 * L'appelant garanti que chaque entité n'est présente qu'une fois dans
504 * ce tableau
505 * Si \a do_sort est vrai, les entités sont triées par uniqueId croissant
506 * avant d'être ajoutées au groupe.
507 */
509setItems(Int32ConstArrayView items_local_id,bool do_sort)
510{
511 if (null())
512 throw ArgumentException(A_FUNCINFO,"Can not setItems() to null group");
513 m_impl->setItems(items_local_id,do_sort);
514}
515
516/*---------------------------------------------------------------------------*/
517/*---------------------------------------------------------------------------*/
518/*!
519 * \brief Vérification interne de la validité du groupe.
520 */
523{
524 m_impl->checkValid();
525}
526
527/*---------------------------------------------------------------------------*/
528/*---------------------------------------------------------------------------*/
529
532{
533 if (null())
534 return;
535 m_impl->checkNeedUpdate();
536 m_impl->applyOperation(operation);
537}
538
539/*---------------------------------------------------------------------------*/
540/*---------------------------------------------------------------------------*/
541
543enumerator() const
544{
545 if (null())
546 return ItemEnumerator();
547 m_impl->_checkNeedUpdateNoPadding();
548 return ItemEnumerator(m_impl->itemInfoListView(),m_impl->itemsLocalId(),m_impl.get());
549}
550
551/*---------------------------------------------------------------------------*/
552/*---------------------------------------------------------------------------*/
553
554ItemEnumerator ItemGroup::
555_simdEnumerator() const
556{
557 if (null())
558 return ItemEnumerator();
559 m_impl->_checkNeedUpdateWithPadding();
560 return ItemEnumerator(m_impl->itemInfoListView(),m_impl->itemsLocalId(),m_impl.get());
561}
562
563/*---------------------------------------------------------------------------*/
564/*---------------------------------------------------------------------------*/
565
566ItemVectorView ItemGroup::
567_view(bool do_padding) const
568{
569 if (null())
570 return ItemVectorView();
571 m_impl->_checkNeedUpdate(do_padding);
572 Int32 flags = 0;
573 if (m_impl->isContigousLocalIds())
575 // TODO: gérer l'offset
576 return ItemVectorView(m_impl->itemFamily(),ItemIndexArrayView(m_impl->itemsLocalId(),0,flags));
577}
578
579/*---------------------------------------------------------------------------*/
580/*---------------------------------------------------------------------------*/
581
583view() const
584{
585 return _view(true);
586}
587
588/*---------------------------------------------------------------------------*/
589/*---------------------------------------------------------------------------*/
590
592_paddedView() const
593{
594 return _view(true);
595}
596
597/*---------------------------------------------------------------------------*/
598/*---------------------------------------------------------------------------*/
599
601_unpaddedView() const
602{
603 return _view(false);
604}
605
606/*---------------------------------------------------------------------------*/
607/*---------------------------------------------------------------------------*/
608
610isAllItems() const
611{
612 return m_impl->isAllItems();
613}
614
615/*---------------------------------------------------------------------------*/
616/*---------------------------------------------------------------------------*/
617
619synchronizer() const
620{
621 return m_impl->synchronizer();
622}
623
624/*---------------------------------------------------------------------------*/
625/*---------------------------------------------------------------------------*/
626
628isAutoComputed() const
629{
630 return m_impl->hasComputeFunctor();
631}
632
633/*---------------------------------------------------------------------------*/
634/*---------------------------------------------------------------------------*/
635
637hasSynchronizer() const
638{
639 return m_impl->hasSynchronizer();
640}
641
642/*---------------------------------------------------------------------------*/
643/*---------------------------------------------------------------------------*/
644
645ItemGroupImplInternal* ItemGroup::
646_internalApi() const
647{
648 return m_impl->_internalApi();
649}
650
651/*---------------------------------------------------------------------------*/
652/*---------------------------------------------------------------------------*/
653
655checkIsSorted() const
656{
657 m_impl->_checkNeedUpdate(false);
658 return m_impl->checkIsSorted();
659}
660
661/*---------------------------------------------------------------------------*/
662/*---------------------------------------------------------------------------*/
663
665incrementTimestamp() const
666{
667 m_impl->m_p->updateTimestamp();
668}
669
670/*---------------------------------------------------------------------------*/
671/*---------------------------------------------------------------------------*/
672
673extern ARCANE_CORE_EXPORT bool
674_caseOptionConvert(const CaseOptionBase& co,const String& name,ItemGroup& obj)
675{
676 IMesh* mesh = co.parentOptionList()->meshHandle().mesh();
677 obj = mesh->findGroup(name);
678 return obj.null();
679}
680
681extern ARCANE_CORE_EXPORT bool
682_caseOptionConvert(const CaseOptionBase& co,const String& name,NodeGroup& obj)
683{
684 IMesh* mesh = co.parentOptionList()->meshHandle().mesh();
685 obj = mesh->nodeFamily()->findGroup(name);
686 return obj.null();
687}
688
689extern ARCANE_CORE_EXPORT bool
690_caseOptionConvert(const CaseOptionBase& co,const String& name,EdgeGroup& obj)
691{
692 IMesh* mesh = co.parentOptionList()->meshHandle().mesh();
693 obj = mesh->edgeFamily()->findGroup(name);
694 return obj.null();
695}
696
697extern ARCANE_CORE_EXPORT bool
698_caseOptionConvert(const CaseOptionBase& co,const String& name,FaceGroup& obj)
699{
700 IMesh* mesh = co.parentOptionList()->meshHandle().mesh();
701 obj = mesh->faceFamily()->findGroup(name);
702 return obj.null();
703}
704
705extern ARCANE_CORE_EXPORT bool
706_caseOptionConvert(const CaseOptionBase& co,const String& name,CellGroup& obj)
707{
708 IMesh* mesh = co.parentOptionList()->meshHandle().mesh();
709 obj = mesh->cellFamily()->findGroup(name);
710 return obj.null();
711}
712
713/*---------------------------------------------------------------------------*/
714/*---------------------------------------------------------------------------*/
715
716} // End namespace Arcane
717
718/*---------------------------------------------------------------------------*/
719/*---------------------------------------------------------------------------*/
Exception lorsqu'un argument est invalide.
Classe de base d'une option du jeu de donnée.
ICaseOptionList * parentOptionList() const
OptionList parent.
virtual MeshHandle meshHandle() const =0
Handle du maillage associé
Interface d'une famille d'entités.
Definition IItemFamily.h:84
virtual ItemGroup findGroup(const String &name) const =0
Recherche un groupe.
Interface d'un opérateur sur des entités rangées par type.
virtual IItemFamily * nodeFamily()=0
Retourne la famille des noeuds.
virtual IItemFamily * edgeFamily()=0
Retourne la famille des arêtes.
virtual IItemFamily * faceFamily()=0
Retourne la famille des faces.
virtual IItemFamily * cellFamily()=0
Retourne la famille des mailles.
Interface d'un service de synchronisation de variable.
Enumérateur sur une liste d'entités.
Fonctor pour le calcul des éléments d'un groupe.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
ItemEnumerator enumerator() const
Enumérateur sur les entités du groupe.
Definition ItemGroup.cc:543
bool checkIsSorted() const
Vérifie et retourne si le groupe est trié par uniqueId() croissants.
Definition ItemGroup.cc:655
void clear()
Supprime les entités du groupe.
Definition ItemGroup.cc:429
ItemGroup findSubGroup(const String &suffix) const
Accès à un sous-groupe.
Definition ItemGroup.cc:418
ItemGroup createSubGroup(const String &suffix, IItemFamily *family, ItemGroupComputeFunctor *functor) const
Crée un sous-groupe calculé
Definition ItemGroup.cc:406
IVariableSynchronizer * synchronizer() const
Synchronizer du groupe.
Definition ItemGroup.cc:619
NodeGroup nodeGroup() const
Groupe des noeuds des éléments de ce groupe.
Definition ItemGroup.cc:230
bool isAutoComputed() const
Vrai s'il s'agit d'un groupe calculé automatiquement.
Definition ItemGroup.cc:628
FaceGroup faceGroup() const
Groupe des faces des éléments de ce groupe.
Definition ItemGroup.cc:254
void incrementTimestamp() const
Incrément le temps de dernière modification du groupe.
Definition ItemGroup.cc:665
bool isOwn() const
Retourne si le groupe contient uniquement des éléments propres au sous-domaine.
Definition ItemGroup.cc:158
void removeItems(Int32ConstArrayView items_local_id, bool check_if_present=true)
Supprime des entités.
Definition ItemGroup.cc:468
FaceGroup activeFaceGroup() const
Groupe des faces actives.
Definition ItemGroup.cc:352
FaceGroup innerActiveFaceGroup() const
Groupe des faces internes des éléments de ce groupe.
Definition ItemGroup.cc:379
ItemVectorView view() const
Vue sur les entités du groupe.
Definition ItemGroup.cc:583
void setItems(Int32ConstArrayView items_local_id)
Positionne les entités du groupe.
Definition ItemGroup.cc:489
FaceGroup ownActiveFaceGroup() const
Groupe des faces actives propres au domaine des éléments de ce groupe.
Definition ItemGroup.cc:364
CellGroup cellGroup() const
Groupe des mailles des éléments de ce groupe.
Definition ItemGroup.cc:266
void applyOperation(IItemOperationByBasicType *operation) const
Applique l'opération operation sur les entités du groupe.
Definition ItemGroup.cc:531
AutoRefT< ItemGroupImpl > m_impl
Représentation interne du groupe.
Definition ItemGroup.h:355
CellGroup levelCellGroup(const Integer &level) const
Groupe des mailles de niveau l des éléments de ce groupe.
Definition ItemGroup.cc:329
void addItems(Int32ConstArrayView items_local_id, bool check_if_present=true)
Ajoute des entités.
Definition ItemGroup.cc:446
FaceGroup innerFaceGroup() const
Groupe des faces internes des éléments de ce groupe.
Definition ItemGroup.cc:278
ItemGroupImplInternal * _internalApi() const
API interne à Arcane.
Definition ItemGroup.cc:646
ItemVectorView _paddedView() const
Vue sur les entités du groupe avec padding pour la vectorisation.
Definition ItemGroup.cc:592
bool hasSynchronizer() const
Indique si le groupe possède un synchroniser actif.
Definition ItemGroup.cc:637
bool isAllItems() const
Indique si le groupe est celui de toutes les entités.
Definition ItemGroup.cc:610
ItemVectorView _unpaddedView() const
Vue sur les entités du groupe sans padding pour la vectorisation.
Definition ItemGroup.cc:601
EdgeGroup edgeGroup() const
Groupe des arêtes des éléments de ce groupe.
Definition ItemGroup.cc:242
CellGroup ownActiveCellGroup() const
Groupe des mailles propres actives des éléments de ce groupe.
Definition ItemGroup.cc:317
void checkValid()
Vérification interne de la validité du groupe.
Definition ItemGroup.cc:522
bool null() const
true is le groupe est le groupe nul
Definition ItemGroup.h:70
void setOwn(bool v)
Positionne la propriété de groupe local ou non.
Definition ItemGroup.cc:170
CellGroup ownLevelCellGroup(const Integer &level) const
Groupe des mailles propres de niveau l des éléments de ce groupe.
Definition ItemGroup.cc:341
ItemGroup()
Construit un groupe nul.
Definition ItemGroup.cc:149
FaceGroup outerActiveFaceGroup() const
Groupe des faces externes actives des éléments de ce groupe.
Definition ItemGroup.cc:391
ItemGroup own() const
Groupe équivalent à celui-ci mais contenant uniquement les éléments propres au sous-domaine.
Definition ItemGroup.cc:190
CellGroup activeCellGroup() const
AMR.
Definition ItemGroup.cc:305
FaceGroup outerFaceGroup() const
Groupe des faces externes des éléments de ce groupe.
Definition ItemGroup.cc:290
@ F_Contigous
Les numéros locaux sont contigüs.
Vue sur un vecteur d'entités.
IMesh * mesh() const
Maillage associé.
Chaîne de caractères unicode.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
Definition ItemTypes.h:183
ItemGroupT< Face > FaceGroup
Groupe de faces.
Definition ItemTypes.h:178
ItemGroupT< Edge > EdgeGroup
Groupe d'arêtes.
Definition ItemTypes.h:173
ItemGroupT< Node > NodeGroup
Groupe de noeuds.
Definition ItemTypes.h:167
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
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