14#include "arcane/mesh/ItemConnectivitySynchronizer.h"
15#include "arcane/mesh/IItemConnectivityGhostPolicy.h"
31: m_connectivity(connectivity)
32, m_ghost_policy(ghost_policy)
33, m_parallel_mng(m_connectivity->targetFamily()->
mesh()->parallelMng())
34, m_added_ghost(m_parallel_mng->commSize())
45 mesh::ExtraGhostItemsManager extra_ghost_mng(
this);
46 extra_ghost_mng.addExtraGhostItemsBuilder(
this);
47 extra_ghost_mng.computeExtraGhostItems();
54 m_data_to_send.clear();
56 m_data_to_send.resize(m_parallel_mng->commSize());
57 const Int32 my_rank = m_parallel_mng->commRank();
60 Int32Array& data_to_send = m_data_to_send[rank];
61 Int32SharedArray shared_items = m_ghost_policy->sharedItems(rank,m_connectivity->targetFamily()->name());
62 Int32SharedArray shared_items_connected_items = m_ghost_policy->sharedItemsConnectedItems(rank,m_connectivity->sourceFamily()->name());
63 _getItemToSend(shared_items,shared_items_connected_items, rank);
64 data_to_send.
add(shared_items.
size());
66 data_to_send.
addRange(shared_items_connected_items);
78 Integer nb_shared_item = ghost_item_info[0];
86 ENUMERATE_ITEM(item,m_connectivity->targetFamily()->view(shared_item_lids)){
87 shared_item_uids[i++] = item->uniqueId().asInt64();
89 ENUMERATE_ITEM(item,m_connectivity->sourceFamily()->view(shared_item_connected_item_lids)){
90 shared_item_connected_item_uids[j++] = item->uniqueId().asInt64();
94 buffer->
setMode(ISerializer::ModeReserve);
97 buffer->
reserveSpan(shared_item_connected_item_uids);
104 buffer->
putSpan(shared_item_uids);
105 buffer->
putSpan(shared_item_connected_item_uids);
106 buffer->
putSpan(shared_item_owners);
112void ItemConnectivitySynchronizer::
124 buffer->
getSpan(shared_item_uids);
125 buffer->
getSpan(shared_item_connected_items_uids);
126 buffer->
getSpan(shared_items_owners);
131 _removeDuplicatedValues(shared_item_uids_to_add,shared_item_owners_to_add);
140 bool do_fatal =
true;
144 m_ghost_policy->
updateConnectivity(shared_item_lids,shared_item_connected_items_uids);
151void ItemConnectivitySynchronizer::
155 Int32UniqueArray non_null_shared_items, non_null_shared_items_connected_items;
156 non_null_shared_items.
reserve(shared_items.size());
157 non_null_shared_items_connected_items.reserve(shared_items_connected_items.size());
159 for (
auto item : shared_items) {
160 if (item != NULL_ITEM_LOCAL_ID) {
161 non_null_shared_items.add(shared_items[i]);
162 non_null_shared_items_connected_items.add(shared_items_connected_items[i]);
166 shared_items.copy(non_null_shared_items);
167 shared_items_connected_items.copy(non_null_shared_items_connected_items);
170 ItemVectorView shared_items_view = m_connectivity->targetFamily()->view(shared_items);
171 for (
Integer i = 0; i < shared_items_view.size(); ++i)
172 shared_items_uids[i] = shared_items_view[i].uniqueId().asInt64();
173 std::set<Int64>& added_ghost = m_added_ghost[rank];
177 for (
Integer i = shared_items_uids.size()-1; i >=0 ; --i ){
178 if (!added_ghost.insert(shared_items_uids[i]).second){
180 shared_items.remove(i);
181 shared_items_connected_items.remove(i);
189void ItemConnectivitySynchronizer::
193 std::set<Int64> shared_uids_set;
194 for (
Integer i = shared_item_uids.size()-1; i >= 0 ; --i){
195 if (! shared_uids_set.insert(shared_item_uids[i]).second){
197 shared_item_uids.remove(i);
198 shared_item_owners.remove(i);
209 return m_connectivity->targetFamily()->mesh()->subDomain();
Integer size() const
Nombre d'éléments du vecteur.
void reserve(Int64 new_capacity)
Réserve le mémoire pour new_capacity éléments.
void addRange(ConstReferenceType val, Int64 n)
Ajoute n élément de valeur val à la fin du tableau.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
constexpr ConstArrayView< T > subConstView(Integer abegin, Integer asize) const noexcept
Sous-vue (constante) à partir de l'élément abegin et contenant asize éléments.
virtual void updateConnectivity(Int32ConstArrayView ghost_items, Int64ConstArrayView ghost_items_connected_items)=0
mets à jour la connectivité en connectant les items fantômes ajoutés..
Interface pour gérer une connectivité.
virtual IItemFamily * targetFamily() const =0
Famille cible.
virtual void itemsUniqueIdToLocalId(Int32ArrayView local_ids, Int64ConstArrayView unique_ids, bool do_fatal=true) const =0
Converti un tableau de numéros uniques en numéros locaux.
virtual void addGhostItems(Int64ConstArrayView unique_ids, Int32ArrayView items, Int32ConstArrayView owners)=0
Alloue des entités fantômes.
virtual void endUpdate()=0
Notifie la fin de modification de la liste des 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 allocateBuffer()=0
Alloue la mémoire du sérialiseur.
virtual void putSpan(Span< const Real > values)
Ajoute le tableau values.
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 setMode(eMode new_mode)=0
Positionne le fonctionnement actuel.
virtual void putInt64(Int64 value)=0
Ajoute l'entier value.
Interface du gestionnaire d'un sous-domaine.
void computeExtraItemsToSend()
Interface IExtraGhostItemsBuilder.
ItemConnectivitySynchronizer(IItemConnectivity *connectivity, IItemConnectivityGhostPolicy *ghost_policy)
void serializeGhostItems(ISerializer *buffer, Int32ConstArrayView ghost_item_lids)
Interface IExtraGhostItemsAdder : add extra ghost in TargetFamily.
void synchronize()
Interface IConnectivitySynchronizer.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
SharedArray< Int64 > Int64SharedArray
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.
SharedArray< Int32 > Int32SharedArray
Tableau dynamique à une dimension d'entiers 32 bits.
UniqueArray< Int32 > Int32UniqueArray
Tableau dynamique à une dimension d'entiers 32 bits.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
SharedArray< Integer > IntegerSharedArray
Tableau dynamique à une dimension d'entiers.
std::int32_t Int32
Type entier signé sur 32 bits.