14#include "arcane/utils/FatalErrorException.h"
15#include "arcane/utils/ITraceMng.h"
17#include "arcane/ISubDomain.h"
18#include "arcane/IMesh.h"
19#include "arcane/IMeshSubMeshTransition.h"
20#include "arcane/VariableTypes.h"
22#include "arcane/mesh/ItemSharedInfoList.h"
23#include "arcane/mesh/ItemFamily.h"
36ItemSharedInfoWithType::
37ItemSharedInfoWithType(ItemSharedInfo* shared_info,ItemTypeInfo* item_type)
38: m_shared_info(shared_info)
39, m_type_id(item_type->typeId())
43ItemSharedInfoWithType::
44ItemSharedInfoWithType(ItemSharedInfo* shared_info,ItemTypeInfo* item_type,Int32ConstArrayView buffer)
45: m_shared_info(shared_info)
46, m_type_id(item_type->typeId())
65 Int32 buf_size = buffer.size();
67 ARCANE_FATAL(
"Invalid buf size '{0}'. This is probably because your checkpoint is from a version of Arcane which is too old (before 3.6)",
70 m_nb_reference = buffer[3];
76void ItemSharedInfoWithType::
77serializeWrite(Int32ArrayView buffer)
79 buffer[0] = m_type_id;
84 buffer[3] = m_nb_reference;
109 bool operator<(
const ItemNumElements& b)
const
113 cout <<
"Compare:\nTHIS=";
117 cout <<
"\nVAL=" << compare(b);
124 inline bool compare(
const ItemNumElements& b)
const
126 return m_type<b.m_type;
129 void print(std::ostream& o)
const
131 o <<
" Type=" << m_type;
138bool ItemSharedInfoList::ItemNumElements::m_debug =
false;
171, m_common_item_shared_info(common_shared_info)
172, m_item_kind(family->itemKind())
174, m_infos_map(new ItemSharedInfoMap())
178 var_name = var_name +
"_SharedInfoList";
191 delete m_item_shared_infos_buffer;
197void ItemSharedInfoList::
200 Integer n = m_item_shared_infos.size();
201 info(4) <<
"ItemSharedInfoList: write: " << m_family->
name()
202 <<
" count=" << n <<
" changed=" << m_list_changed;
203 log() <<
"ItemSharedInfoList: write: " << m_family->
name()
204 <<
" count=" << n <<
" changed=" << m_list_changed;
208 m_list_changed =
false;
210 Integer element_size = ItemSharedInfoWithType::serializeSize();
211 m_variables->m_infos_values.
resize(n,element_size);
213 m_item_shared_infos[i]->serializeWrite(m_variables->m_infos_values[i]);
225void ItemSharedInfoList::
228 Integer element_size = ItemSharedInfoWithType::serializeSize();
230 info() <<
"ItemSharedInfoList: read: " << m_family->
name() <<
" count=" << n;
235 Integer stored_size = m_variables->m_infos_values[0].size();
236 if (stored_size==ItemSharedInfoWithType::serializeSize()){
238 else if (stored_size!=element_size){
242 if (stored_size!=13 && stored_size!=9)
243 ARCANE_FATAL(
"Incoherence of saved data (most probably due to a"
244 " difference of versions between the protection and the executable."
245 " stored_size={0} element_size={1} count={2}",
246 stored_size,element_size,n);
251 m_item_shared_infos.clear();
252 m_infos_map->clear();
260 ItemTypeMng* itm = m_family->mesh()->itemTypeMng();
264 ItemTypeInfo* it = itm->typeFromId(buffer[0]);
265 ItemSharedInfoWithType* isi = m_item_shared_infos[i];
266 *isi = ItemSharedInfoWithType(m_common_item_shared_info,it,buffer);
269 std::pair<ItemSharedInfoMap::iterator,bool> old = m_infos_map->insert(std::make_pair(ine,isi));
274 ItemNumElements::m_debug =
true;
275 bool compare = m_infos_map->find(ine)!=m_infos_map->end();
276 fatal() <<
"INTERNAL: ItemSharedInfoList::readfromDump(): SharedInfo already present family=" << m_family->name()
278 <<
" type=" << it->typeId()
279 <<
" compare=" << compare
280 <<
"\nNEW_INE=(" << ine <<
")"
281 <<
"\nOLD_INE=(" << old.first->first <<
")"
282 <<
"\nNEW_ISI=(" << *isi <<
")"
283 <<
"\nOLD_ISI=(" << *old.first->second <<
")";
294 bool has_error =
false;
296 info() <<
"ItemSharedInfoList: check valid family=" << m_family->name()
298 <<
" list=" << m_item_shared_infos.size()
299 <<
" free=" << m_free_item_shared_infos.size()
300 <<
" changed=" << m_list_changed;
304 for(
Integer i=0, n=m_item_shared_infos.size(); i<n; ++i ){
306 if (item->index()!=i){
307 error() <<
"The index (" << item->index() <<
") from the list 'ItemSharedInfo' "
308 <<
"of the family " << m_family->name() <<
" is not "
309 <<
"coherent with its internal value (" << i <<
")";
323 ItemNumElements ine(
type->typeId());
324 ItemSharedInfoMap::const_iterator i = m_infos_map->find(ine);
325 if (i!=m_infos_map->end())
329 Integer old_index = isi->index();
331 isi->setIndex(old_index);
332 std::pair<ItemSharedInfoMap::iterator,bool> old = m_infos_map->insert(std::make_pair(ine,isi));
339 ItemNumElements::m_debug =
true;
340 bool compare = m_infos_map->find(ine)!=m_infos_map->end();
341 fatal() <<
"INTERNE: ItemSharedInfoList::findSharedInfo() SharedInfo déjà présent\n"
343 <<
" type=" <<
type->typeId()
344 <<
" compare=" << compare
345 <<
"\nNEW_INE=(" << ine <<
")"
346 <<
"\nOLD_INE=(" << old.first->first <<
")"
347 <<
"\nNEW_ISI=(" << *isi <<
")"
348 <<
"\nOLD_ISI=(" << *old.first->second <<
")";
357void ItemSharedInfoList::
360 info() <<
"--- ItemSharedInfos: family=" << m_family->
name();
361 for( ConstIterT<ItemSharedInfoMap> i(*m_infos_map); i(); ++i ){
362 info() <<
"INE: " << i->first;
363 info() <<
"ISI: " << *i->second;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
constexpr Integer dim1Size() const
Nombre d'éléments de la première dimension.
Structure interne partagée d'une entité de maillage.
Infos sur un type d'entité du maillage.
Tampon pour allocation multiple.
Chaîne de caractères unicode.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
TraceMessage fatal() const
Flot pour un message d'erreur fatale.
TraceMessage log() const
Flot pour un message de log.
TraceMessage info() const
Flot pour un message d'information.
TraceMessage error() const
Flot pour un message d'erreur.
ITraceMng * traceMng() const
Gestionnaire de trace.
Paramètres nécessaires à la construction d'une variable.
virtual void resize(Integer new_size)
Réalloue le nombre d'éléments de la première dimension du tableau.
IMesh * mesh() const override
Maillage associé
String name() const override
Nom de la famille.
Integer m_nb_item_shared_info
Nombre d'objets alloués.
~ItemSharedInfoList()
Libère les ressources.
void checkValid()
Vérifie si les structures internes de l'instance sont valides.
Classe temporaire pour conserver un ItemSharedInfo et un type d'entité.
VariableRefArray2T< Int32 > VariableArray2Int32
Variable tableau à deux dimensions de type entier 32 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.