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