14#include "arcane/utils/ITraceMng.h"
15#include "arcane/utils/FatalErrorException.h"
17#include "arcane/Item.h"
18#include "arcane/ItemGroupComputeFunctor.h"
19#include "arcane/ItemGroupImpl.h"
20#include "arcane/ItemGroup.h"
21#include "arcane/IMesh.h"
22#include "arcane/IItemFamily.h"
23#include "arcane/Properties.h"
37 ITraceMng* trace = m_group->mesh()->traceMng();
40 m_group->beginTransaction();
46 items_lid.
add(iitem.itemLocalId());
48 m_group->setItems(items_lid);
49 m_group->endTransaction();
51 trace->
debug() <<
"OwnItemGroupComputeFunctor::execute()"
52 <<
" this=" << m_group
53 <<
" parent_name=" << parent.
name()
54 <<
" name=" << m_group->name()
55 <<
" parent_count=" << parent.
size()
56 <<
" mysize=" << m_group->size();
65 ITraceMng* trace = m_group->mesh()->traceMng();
67 m_group->beginTransaction();
73 items_lid.
add(iitem.itemLocalId());
76 m_group->setItems(items_lid);
77 m_group->endTransaction();
79 trace->
debug() <<
"GhostItemGroupComputeFunctor::execute()"
80 <<
" this=" << m_group
81 <<
" parent_name=" << parent.
name()
82 <<
" name=" << m_group->name()
83 <<
" parent_count=" << parent.
size()
84 <<
" mysize=" << m_group->size();
93 ITraceMng* trace = m_group->mesh()->traceMng();
98 trace->
fatal() <<
"InterfaceGroupComputeFunctor::executeFunctor()"
99 <<
" Incoherent family expected=" <<
IK_Face <<
" current=" << family->
itemKind();
102 m_group->beginTransaction();
110 if ( !bcell.
null() && !fcell.
null() ) {
111 const bool isBackOwn = bcell.
isOwn();
112 const bool isFrontOwn = fcell.
isOwn();
113 if ( isBackOwn != isFrontOwn ) {
119 m_group->setItems(items_lid);
120 m_group->endTransaction();
122 trace->
debug() <<
"InterfaceItemGroupComputeFunctor::execute()"
123 <<
" this=" << m_group
124 <<
" parent_name=" << parent.
name()
125 <<
" name=" << m_group->name()
126 <<
" parent_count=" << parent.
size()
127 <<
" mysize=" << m_group->size();
137template<
typename ItemType>
void
141 IMesh* mesh = m_group->mesh();
142 ITraceMng* trace = m_group->mesh()->traceMng();
148 ARCANE_FATAL(
"Incoherent family wanted={0} current={1} v={2}",
149 ik,family->
itemKind(),m_group->itemKind());
152 m_group->beginTransaction();
156 ItemType* null_type = 0;
158 impl::ItemBase i = (*iitem).itemBase();
160 Int32 lid = iitem2.localId();
161 if (markers[lid]==0){
167 bool do_sort = mesh->properties()->getBoolWithDefault(
"sort-subitemitem-group",
false);
169 m_group->setItems(items_lid,do_sort);
170 m_group->endTransaction();
172 trace->
debug() <<
"ItemItemGroupComputeFunctor::execute()"
173 <<
" this=" << m_group
174 <<
" parent_name=" << parent.
name()
175 <<
" name=" << m_group->name()
176 <<
" parent_count=" << parent.
size()
177 <<
" mysize=" << m_group->size()
178 <<
" mysize2=" << items_lid.
size();
187 ITraceMng* trace = m_group->mesh()->traceMng();
191 m_group->beginTransaction();
196 const Face& face = *iface;
205 markers[icell.localId()] =
true;
217 m_group->setItems(items_lid);
218 m_group->endTransaction();
220 trace->
debug() <<
"InnerFaceItemGroupComputeFunctor::execute()"
221 <<
" this=" << m_group
222 <<
" parent_name=" << parent.
name()
223 <<
" name=" << m_group->name()
224 <<
" parent_count=" << parent.
size()
225 <<
" mysize=" << m_group->size();
234 ITraceMng* trace = m_group->mesh()->traceMng();
238 m_group->beginTransaction();
243 const Face& face = *iface;
252 markers[icell.localId()] =
true;
264 m_group->setItems(items_lid);
265 m_group->endTransaction();
267 trace->
debug() <<
"OuterFaceItemGroupComputeFunctor::execute()"
268 <<
" this=" << m_group
269 <<
" parent_name=" << parent.
name()
270 <<
" name=" << m_group->name()
271 <<
" parent_count=" << parent.
size()
272 <<
" mysize=" << m_group->size();
281 ITraceMng* trace = m_group->mesh()->traceMng();
286 trace->
fatal() <<
"AllActiveCellGroupComputeFunctor::executeFunctor()"
287 <<
" Incoherent family expected=" <<
IK_Cell <<
" current=" << family->
itemKind();
290 m_group->beginTransaction();
297 m_group->setItems(items_lid);
298 m_group->endTransaction();
300 trace->
debug() <<
"AllActiveCellGroupComputeFunctor::execute()"
301 <<
" this=" << m_group
302 <<
" parent_name=" << parent.
name()
303 <<
" name=" << m_group->name()
304 <<
" parent_count=" << parent.
size()
305 <<
" mysize=" << m_group->size();
314 ITraceMng* trace = m_group->mesh()->traceMng();
319 trace->
fatal() <<
"OwnActiveCellGroupComputeFunctor::executeFunctor()"
320 <<
" Incoherent family expected=" <<
IK_Cell <<
" current=" << family->
itemKind();
323 m_group->beginTransaction();
331 m_group->setItems(items_lid);
332 m_group->endTransaction();
334 trace->
debug() <<
"OwnActiveCellGroupComputeFunctor::execute()"
335 <<
" this=" << m_group
336 <<
" parent_name=" << parent.
name()
337 <<
" name=" << m_group->name()
338 <<
" parent_count=" << parent.
size()
339 <<
" mysize=" << m_group->size();
348 ITraceMng* trace = m_group->mesh()->traceMng();
353 trace->
fatal() <<
"LevelCellGroupComputeFunctor::executeFunctor()"
354 <<
" Incoherent family expected=" <<
IK_Cell <<
" current=" << family->
itemKind();
357 m_group->beginTransaction();
362 if(item.
level() == m_level)
365 m_group->setItems(items_lid);
366 m_group->endTransaction();
368 trace->
debug() <<
"LevelCellGroupComputeFunctor::execute()"
369 <<
" this=" << m_group
370 <<
" parent_name=" << parent.
name()
371 <<
" name=" << m_group->name()
372 <<
" parent_count=" << parent.
size()
373 <<
" mysize=" << m_group->size();
382 ITraceMng* trace = m_group->mesh()->traceMng();
386 m_group->beginTransaction();
389 trace->
fatal() <<
"LevelCellGroupComputeFunctor::executeFunctor()"
390 <<
" Incoherent family expected=" <<
IK_Cell <<
" current=" << family->
itemKind();
394 if (item.
isOwn() && (item.
level() == m_level))
397 m_group->setItems(items_lid);
398 m_group->endTransaction();
400 trace->
debug() <<
"OwnLevelItemGroupComputeFunctor::execute()"
401 <<
" this=" << m_group
402 <<
" parent_name=" << parent.
name()
403 <<
" name=" << m_group->name()
404 <<
" parent_count=" << parent.
size()
405 <<
" mysize=" << m_group->size();
414 ITraceMng* trace = m_group->mesh()->traceMng();
418 m_group->beginTransaction();
445 markers[icell.localId()] =
true;
448 const Face & face = *iface;
458 trace->
debug() <<
"NUMBER OF ALL FACES= " << counter
459 <<
"\n NUNMBER OF BOUNDARY FACES= " << counter_0
460 <<
"\n NUMBER OF ACTIVE BOUNDARY FACES= " << counter_1
461 <<
"\n NUMBER OF ACTIVE INTERIOR FACES= " << counter_2 <<
"\n";
462 m_group->setItems(items_lid);
463 m_group->endTransaction();
465 trace->
debug() <<
"ActiveFaceItemGroupComputeFunctor::execute()"
466 <<
" this=" << m_group
467 <<
" parent_name=" << parent.
name()
468 <<
" name=" << m_group->name()
469 <<
" parent_count=" << parent.
size()
470 <<
" mysize=" << m_group->size();
479 ITraceMng* trace = m_group->mesh()->traceMng();
483 m_group->beginTransaction();
488 const Face& face = *iface;
501 markers[icell.localId()] =
true;
504 const Face & face = *iface;
509 else if (face.
isOwn() &&
516 m_group->setItems(items_lid);
517 m_group->endTransaction();
519 trace->
debug() <<
"OwnActiveFaceItemGroupComputeFunctor::execute()"
520 <<
" this=" << m_group
521 <<
" parent_name=" << parent.
name()
522 <<
" name=" << m_group->name()
523 <<
" parent_count=" << parent.
size()
524 <<
" mysize=" << m_group->size();
533 ITraceMng* trace = m_group->mesh()->traceMng();
537 m_group->beginTransaction();
554 markers[icell.localId()] =
true;
569 m_group->setItems(items_lid);
570 m_group->endTransaction();
572 trace->
debug() <<
"InnerActiveFaceItemGroupComputeFunctor::execute()"
573 <<
" this=" << m_group
574 <<
" parent_name=" << parent.
name()
575 <<
" name=" << m_group->name()
576 <<
" parent_count=" << parent.
size()
577 <<
" mysize=" << m_group->size();
586 ITraceMng* trace = m_group->mesh()->traceMng();
590 m_group->beginTransaction();
595 const Face& face = *iface;
604 markers[icell.localId()] =
true;
616 m_group->setItems(items_lid);
617 m_group->endTransaction();
619 trace->
debug() <<
"OuterActiveFaceItemGroupComputeFunctor::execute()"
620 <<
" this=" << m_group
621 <<
" parent_name=" << parent.
name()
622 <<
" name=" << m_group->name()
623 <<
" parent_count=" << parent.
size()
624 <<
" mysize=" << m_group->size();
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Integer size() const
Nombre d'éléments du vecteur.
void executeFunctor() override
Exécute la méthode associé
void executeFunctor() override
Exécute la méthode associé
void fill(ConstReferenceType value)
Remplit le tableau avec la valeur value.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Cell frontCell() const
Maille devant la face (maille nulle si aucune)
bool isSubDomainBoundary() const
Indique si la face est au bord du sous-domaine (i.e nbCell()==1)
Cell boundaryCell() const
Maille associée à cette face frontière (maille nulle si aucune)
Cell backCell() const
Maille derrière la face (maille nulle si aucune)
void executeFunctor() override
Exécute la méthode associé
Interface d'une famille d'entités.
virtual ItemGroup allItems() const =0
Groupe de toutes les entités.
virtual Int32 maxLocalId() const =0
virtual eItemKind itemKind() const =0
Genre des entités.
Interface du gestionnaire de traces.
virtual TraceMessage fatal()=0
Flot pour un message d'erreur fatale.
virtual TraceMessageDbg debug(Trace::eDebugLevel=Trace::Medium)=0
Flot pour un message de debug.
void executeFunctor() override
Exécute la méthode associé
void executeFunctor() override
Exécute la méthode associé
void executeFunctor() override
Exécute la méthode associé
Groupe d'entités de maillage.
const String & name() const
Nom du groupe.
Integer size() const
Nombre d'éléments du groupe.
IItemFamily * itemFamily() const
Famille d'entité à laquelle appartient ce groupe (0 pour le group nul)
bool isAllItems() const
Indique si le groupe est celui de toutes les entités.
void executeFunctor() override
Fonctor pour calculer un groupe contenant les entités connectées aux entités du groupe parent.
static eItemKind kind()
Genre de l'entité
Classe de base d'un élément de maillage.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
bool isOwn() const
true si l'entité est appartient au sous-domaine
constexpr bool null() const
true si l'entité est nul (i.e. non connecté au maillage)
void executeFunctor() override
Exécute la méthode associé
void executeFunctor() override
Exécute la méthode associé
void executeFunctor() override
Exécute la méthode associé
void executeFunctor() override
Exécute la méthode associé
void executeFunctor() override
Exécute la méthode associé
void executeFunctor() override
Calcul des entités propres du groupe.
void executeFunctor() override
Exécute la méthode associé
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
UniqueArray< bool > BoolUniqueArray
Tableau dynamique à une dimension de booléens.
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
eItemKind
Genre d'entité de maillage.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Face
Entité de maillage de genre face.
std::int32_t Int32
Type entier signé sur 32 bits.