85 DISTRIBUTOR_NOT_INITIALIZED,
86 DISTRIBUTOR_INITIALIZED_BY_CREATE_FROM_SENDS,
87 DISTRIBUTOR_INITIALIZED_BY_CREATE_FROM_RECVS,
88 DISTRIBUTOR_INITIALIZED_BY_CREATE_FROM_SENDS_N_RECVS,
89 DISTRIBUTOR_INITIALIZED_BY_REVERSE,
90 DISTRIBUTOR_INITIALIZED_BY_COPY,
111 static constexpr int DEFAULT_MPI_TAG = 0;
114 using IndexView = std::vector<size_t>;
115 using SubViewLimits = std::pair<IndexView, IndexView>;
120 size_t createFromSends(
const Teuchos::ArrayView<const int>&
exportProcIDs);
121 void createFromRecvs(
const Teuchos::ArrayView<const int>&
remoteProcIDs);
122 void createFromSendsAndRecvs(
const Teuchos::ArrayView<const int>&
exportProcIDs,
125 void setParameterList(
const Teuchos::RCP<Teuchos::ParameterList>&
plist);
127 Teuchos::RCP<DistributorPlan> getReversePlan()
const;
129 Teuchos::RCP<const Teuchos::Comm<int>> getComm()
const {
return comm_; }
130#if defined(HAVE_TPETRACORE_MPI_ADVANCE)
134 size_t getNumReceives()
const {
return numReceives_; }
135 size_t getNumSends()
const {
return numSendsToOtherProcs_; }
136 bool hasSelfMessage()
const {
return sendMessageToSelf_; }
137 size_t getMaxSendLength()
const {
return maxSendLength_; }
138 size_t getTotalReceiveLength()
const {
return totalReceiveLength_; }
139 Teuchos::ArrayView<const int> getProcsFrom()
const {
return procsFrom_; }
140 Teuchos::ArrayView<const int> getProcsTo()
const {
return procIdsToSendTo_; }
141 Teuchos::ArrayView<const size_t> getLengthsFrom()
const {
return lengthsFrom_; }
142 Teuchos::ArrayView<const size_t> getLengthsTo()
const {
return lengthsTo_; }
143 Teuchos::ArrayView<const size_t> getStartsTo()
const {
return startsTo_; }
144 Teuchos::ArrayView<const size_t> getIndicesTo()
const {
return indicesTo_; }
147 SubViewLimits getImportViewLimits(
size_t numPackets)
const;
149 SubViewLimits getExportViewLimits(
size_t numPackets)
const;
152#if defined(HAVE_TPETRA_MPI)
153 const std::vector<int>
getRoots()
const {
159#if defined(HAVE_TPETRACORE_MPI_ADVANCE)
163#if defined(HAVE_TPETRA_MPI)
167 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters()
const;
169 void createReversePlan()
const;
181 void computeReceives();
183 Teuchos::RCP<const Teuchos::Comm<int>> comm_;
184#if defined(HAVE_TPETRACORE_MPI_ADVANCE)
189 mutable Teuchos::RCP<DistributorPlan> reversePlan_;
196 bool sendMessageToSelf_;
197 size_t numSendsToOtherProcs_;
198 Teuchos::Array<int> procIdsToSendTo_;
208 Teuchos::Array<size_t> startsTo_;
215 Teuchos::Array<size_t> lengthsTo_;
220 size_t maxSendLength_;
237 Teuchos::Array<size_t> indicesTo_;
256 size_t totalReceiveLength_;
263 Teuchos::Array<size_t> lengthsFrom_;
270 Teuchos::Array<int> procsFrom_;
277 Teuchos::Array<size_t> startsFrom_;
284 Teuchos::Array<size_t> indicesFrom_;
286#if defined(HAVE_TPETRA_MPI)