25#include "RedistributorVector.h"
28#include <alien/kernels/simple_csr/SimpleCSRBackEnd.h>
29#include <alien/kernels/simple_csr/SimpleCSRVector.h>
30#include <alien/utils/time_stamp/TimestampObserver.h>
32#include "RedistributorBackEnd.h"
33#include "RedistributorCommPlan.h"
37using namespace Arccore;
39RedistributorVector::RedistributorVector(
const MultiVectorImpl* src_impl)
44 m_super_pm = distribution().parallelMng();
48 const bool need_allocate ALIEN_UNUSED_PARAM)
59void RedistributorVector::updateSuperPM(
MultiVectorImpl* tgt_impl ALIEN_UNUSED_PARAM,
69std::shared_ptr<MultiVectorImpl>
70RedistributorVector::updateTargetPM(
const RedistributorCommPlan* commPlan)
72 if (m_tgt_impl && m_tgt_impl->distribution().parallelMng() == commPlan->tgtParallelMng().get())
75 m_tgt_dist.reset(
new VectorDistribution(commPlan->distribution()));
76 m_tgt_impl.reset(
new MultiVectorImpl(space().clone(), m_tgt_dist));
78 m_tgt_impl->addObserver(std::make_shared<TimestampObserver>(*
this));
80 const VectorDistribution& src_dist = distribution();
81 m_distributor.reset(
new SimpleCSRVectorRedistributor(commPlan, src_dist));
82 return redistribute();
85std::shared_ptr<MultiVectorImpl>
86RedistributorVector::redistribute()
88 auto& vec_src = m_multi_impl->get<BackEnd::tag::simplecsr>();
89 auto& vec_tgt = m_tgt_impl->get<BackEnd::tag::simplecsr>(
true);
90 m_distributor->distribute(vec_src, vec_tgt);
94void RedistributorVector::redistributeBack(SimpleCSRVector<Real>& vec_tgt)
const
96 auto& vec_src = m_tgt_impl->get<BackEnd::tag::simplecsr>();
97 m_distributor->distributeBack(vec_src, vec_tgt);
Interface to handle abstract vectors implementation.
void clear() override
Clear data.
void init(const VectorDistribution &dist, const bool need_allocate) override
Initialize vector datas.
Computes a vector distribution.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --