14#include "arcane/mesh/CommonItemGroupFilterer.h"
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/FatalErrorException.h"
19#include "arcane/SerializeBuffer.h"
20#include "arcane/IParallelMng.h"
21#include "arcane/IItemFamily.h"
34CommonItemGroupFilterer::
35CommonItemGroupFilterer(IItemFamily* family)
43void CommonItemGroupFilterer::
44addGroupToFilter(
const ItemGroup& group)
46 m_input_groups.add(group);
52void CommonItemGroupFilterer::
57 groups_to_check.
add(*i);
62 tm->
info(4) <<
"CHECK: nb_group_to_compare=" << nb_group;
66 send_buf.
setMode(ISerializer::ModeReserve);
67 send_buf.reserveInteger(1);
68 for(
Integer i=0; i< nb_group; ++i ){
69 send_buf.
reserve(groups_to_check[i].fullName());
75 for(
Integer i=0; i< nb_group; ++i ){
76 send_buf.
put(groups_to_check[i].fullName());
83 std::map<String,Int32> group_occurences;
87 for(
Integer i=0; i<nb_rank; ++i ){
89 for(
Integer z=0; z< nb_group_rank; ++z ){
92 auto vo = group_occurences.find(x);
93 if (vo== group_occurences.end())
94 group_occurences.insert(std::make_pair(x,1));
96 vo->second = vo->second + 1;
103 std::map<String,ItemGroup> common_groups;
106 auto end_var = group_occurences.end();
107 for(
Integer i=0; i< nb_group; ++i ){
110 auto i_group = group_occurences.find(group_name);
111 if (i_group ==end_var)
114 if (i_group->second!=nb_rank){
115 bad_groups.
add(group_name);
118 common_groups.insert(std::make_pair(group_name, group));
122 if (!bad_groups.
empty())
123 ARCANE_FATAL(
"The following ItemGroup are not on all mesh parts: {0}",bad_groups);
125 m_sorted_common_groups.clear();
126 for(
const auto& x : common_groups )
127 m_sorted_common_groups.add(x.second);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Integer size() const
Nombre d'éléments du vecteur.
bool empty() const
Capacité (nombre d'éléments alloués) du vecteur.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
void put(Span< const Real > values) override
Ajoute le tableau values.
void reserve(eBasicDataType dt, Int64 n) override
Réserve de la mémoire pour n objets de type dt.
void allocateBuffer() override
Alloue la mémoire du sérialiseur.
Integer getInteger() override
Récupère une taille.
void get(ArrayView< Real > values) override
Récupère le tableau values.
void setMode(eMode new_mode) override
Positionne le fonctionnement actuel.
void putInteger(Integer value) override
Ajoute l'entier value.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
virtual void allGather(ConstArrayView< char > send_buf, ArrayView< char > recv_buf)=0
Effectue un regroupement sur tous les processeurs. Il s'agit d'une opération collective....
@ ModePut
Le sérialiseur attend des reserve()
@ ModeGet
Le sérialiseur attend des get()
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Groupe d'entités de maillage.
const String & fullName() const
Nom du groupe.
ListEnumeratorT< T > Enumerator
Type d'un itérateur constant sur tout le tableau.
Implémentation d'un tampon pour la sérialisation.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
Int32 Integer
Type représentant un entier.
std::int32_t Int32
Type entier signé sur 32 bits.