14#include "arcane/mesh/ExtraGhostItemsManager.h"
17#include "arcane/utils/String.h"
18#include "arcane/utils/ScopedPtr.h"
19#include "arcane/core/IParallelMng.h"
20#include "arcane/core/IParallelExchanger.h"
21#include "arcane/core/ISerializeMessage.h"
22#include "arcane/core/ParallelMngUtils.h"
29void Arcane::mesh::ExtraGhostItemsManager::
30computeExtraGhostItems()
32 const Integer nb_builder = m_builders.size();
37 m_trace_mng->info() <<
"Compute extra ghost cells";
39 for (
Integer i = 0; i < nb_builder; ++i) {
41 m_builders[i]->computeExtraItemsToSend();
44 IParallelMng* pm = m_extra_ghost_items_adder->subDomain()->parallelMng();
48 const Integer nsd = m_extra_ghost_items_adder->subDomain()->nbSubDomain();
51 UniqueArray<Arcane::SharedArray<Int32>> item_to_send(nsd);
54 for (
Integer isd = 0; isd < nsd; ++isd) {
55 for (
Integer i = 0; i < nb_builder; ++i) {
56 item_to_send[isd].addRange(m_builders[i]->extraItemsToSend(isd));
58 if (!item_to_send[isd].empty())
59 exchanger->addSender(isd);
62 exchanger->initializeCommunicationsMessages();
65 for (
Integer i = 0, ns = exchanger->nbSender(); i < ns; ++i) {
66 ISerializeMessage* sm = exchanger->messageToSend(i);
67 const Int32 rank = sm->destination().value();
68 ISerializer* s = sm->serializer();
70 m_extra_ghost_items_adder->serializeGhostItems(s, items_to_send_to_rank);
72 exchanger->processExchange();
75 for (
Integer i = 0, ns = exchanger->nbReceiver(); i < ns; ++i) {
76 ISerializeMessage* sm = exchanger->messageToReceive(i);
77 ISerializer* s = sm->serializer();
78 m_extra_ghost_items_adder->addExtraGhostItems(s);
80 m_extra_ghost_items_adder->updateSynchronizationInfo();
Declarations of types used in Arcane.
Ref< IParallelExchanger > createExchangerRef(IParallelMng *pm)
Returns an interface to transfer messages between ranks.
Int32 Integer
Type representing an integer.
Array< Int32 > Int32Array
Dynamic one-dimensional array of 32-bit integers.
std::int32_t Int32
Signed integer type of 32 bits.