14#include "arcane/mesh/CellFamilySerializer.h"
16#include "arcane/core/ISerializer.h"
17#include "arcane/core/ItemPrinter.h"
18#include "arcane/core/IMesh.h"
19#include "arcane/core/MeshPartInfo.h"
21#include "arcane/mesh/FullItemInfo.h"
22#include "arcane/mesh/DynamicMeshIncrementalBuilder.h"
23#include "arcane/mesh/OneMeshItemAdder.h"
35CellFamilySerializer(
CellFamily* family,
bool use_flags,
37: TraceAccessor(family->traceMng())
38, m_mesh_builder(mesh_builder)
40, m_use_flags(use_flags)
47void CellFamilySerializer::
55 Int32 my_rank =
mesh->meshPartInfo().partRank();
56 const Integer parent_info = FullCellInfo::parentInfo(
mesh);
57 const bool has_amr =
mesh->isAmrActivated();
58 const bool has_edge = m_mesh_builder->hasEdge();
59 const bool use_flags = m_use_flags;
61 info(4) <<
"_serializeItems : "
62 <<
mesh->name() <<
" "
63 << m_family->name() <<
" "
64 << m_family->parentFamilyDepth();
67 case ISerializer::ModeReserve:
72 for(
Integer i_cell=0; i_cell<nb_cell; ++i_cell ){
73 Int32 lid = cells_local_id[i_cell];
76 FullCellInfo::dump(cell,tmp_buf,parent_info,has_edge,has_amr,use_flags);
86 info(4) <<
"Serialize: Put: nb_cell=" << nb_cell;
89 for(
Integer i_cell=0; i_cell<nb_cell; ++i_cell ){
90 Int32 lid = cells_local_id[i_cell];
93 FullCellInfo::dump(cell,tmp_buf,parent_info,has_edge,has_amr,use_flags);
110void CellFamilySerializer::
115 Int32 my_rank =
mesh->meshPartInfo().partRank();
118 const Integer parent_info = FullCellInfo::parentInfo(
mesh);
123 bool use_array =
false;
125 cells_local_id->
resize(nb_cell);
126 locals_id_view = (*cells_local_id);
130 const bool has_edge = m_mesh_builder->hasEdge();
131 const bool has_amr =
mesh->isAmrActivated();
132 const bool use_flags = m_use_flags;
133 info(4) <<
"DeserializeCells: nb_cell=" << nb_cell <<
" orig=" << orig_rank <<
" has_edge=" << has_edge
134 <<
" has_amr=" << has_amr <<
" use_flags=" << use_flags;
135 for(
Integer i_cell=0; i_cell<nb_cell; ++i_cell ){
137 mem_buf.
resize(memory_needed);
139 FullCellInfo current_cell(mem_buf,0,itm,parent_info,has_edge,has_amr,use_flags);
140 ItemInternal* icell = m_mesh_builder->oneMeshItemAdder()->addOneCell(current_cell);
143 locals_id_view[i_cell] = icell->
localId();
147 icell->
setFlags(current_cell.flags()) ;
151 icell->
setOwner(current_cell.owner(),my_rank);
155 bool has_error =
false;
158 has_error |= (node.uniqueId()!=current_cell.nodeUniqueId(node_index));
163 has_error |= (edge.uniqueId()!=current_cell.edgeUniqueId(edge_index));
168 has_error |= (face.uniqueId()!=current_cell.faceUniqueId(face_index));
175 <<
" remote_uid=" << current_cell.nodeUniqueId(node_index);
181 <<
" remote_uid=" << current_cell.edgeUniqueId(edge_index);
187 <<
" remote_uid=" << current_cell.faceUniqueId(face_index);
190 ARCANE_FATAL(
"Incoherent local and remote node, edge or face unique id");
198 node.mutableItemBase().setOwner(current_cell.nodeOwner(node_index),my_rank);
203 edge.mutableItemBase().setOwner(current_cell.edgeOwner(edge_index),my_rank);
208 face.mutableItemBase().setOwner(current_cell.faceOwner(face_index),my_rank);
213 info(4) <<
"EndDeserializeCells: nb_cell=" << nb_cell <<
" orig=" << orig_rank;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Int64 largeSize() const
Nombre d'éléments du vecteur (en 64 bits)
void clear()
Supprime les éléments du tableau.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
void reserve(Int64 new_capacity)
Réserve le mémoire pour new_capacity éléments.
FaceConnectedListViewType faces() const
Liste des faces de la maille.
EdgeConnectedListViewType edges() const
Liste des arêtes de la maille.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Interface d'une famille d'entités.
Interface d'un sérialiseur.
void reserveInt64(Int64 n)
Réserve pour n Int64.
@ ModePut
Le sérialiseur attend des reserve()
@ ModeGet
Le sérialiseur attend des get()
virtual Int64 getInt64()=0
Récupère une taille.
virtual void putSpan(Span< const Real > values)
Ajoute le tableau values.
virtual eMode mode() const =0
Mode de fonctionnement actuel.
virtual void getSpan(Span< Real > values)
Récupère le tableau values.
virtual void reserveSpan(eBasicDataType dt, Int64 n)=0
Réserve de la mémoire pour n valeurs de dt.
virtual void putInt64(Int64 value)=0
Ajoute l'entier value.
Int32 localId() const
Numéro local (au sous-domaine) de l'entité
Structure interne d'une entité de maillage.
Classe utilitaire pour imprimer les infos sur une entité.
Gestionnaire des types d'entités de maillage.
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
void setOwner(Integer suid, Int32 current_sub_domain)
Positionne le numéro du sous-domaine propriétaire de l'entité.
void setFlags(Int32 f)
Positionne les flags de l'entité
TraceMessage info() const
Flot pour un message d'information.
Vecteur 1D de données avec sémantique par valeur (style STL).
void deserializeItems(ISerializer *buf, Int32Array *cells_local_id) override
Désérialise depuis buf les entités de la famille family().
Construction d'un maillage de manière incrémentale.
Infos pour créer/sérialiser une maille connaissant les uniqueId() et owner() de toutes ces sous-entit...
Int32 toInt32(Int64 v)
Converti un Int64 en un Int32.
bool arcaneIsCheck()
Vrai si on est en mode vérification.
UniqueArray< Int64 > Int64UniqueArray
Tableau dynamique à une dimension d'entiers 64 bits.
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
ConstArrayView< ItemInternal * > ItemInternalList
Type de la liste interne des entités.
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
std::int32_t Int32
Type entier signé sur 32 bits.