52 #ifndef TPETRA_DETAILS_DISTRIBUTOR_PLAN_HPP
53 #define TPETRA_DETAILS_DISTRIBUTOR_PLAN_HPP
55 #include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
56 #include "Teuchos_Array.hpp"
57 #include "Teuchos_Comm.hpp"
58 #include "Teuchos_RCP.hpp"
59 #include "TpetraCore_config.h"
61 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
62 #include <mpi_advance.h>
76 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
78 DISTRIBUTOR_MPIADVANCE_ALLTOALL,
79 DISTRIBUTOR_MPIADVANCE_NBRALLTOALLV
95 DISTRIBUTOR_NOT_INITIALIZED,
96 DISTRIBUTOR_INITIALIZED_BY_CREATE_FROM_SENDS,
97 DISTRIBUTOR_INITIALIZED_BY_CREATE_FROM_RECVS,
98 DISTRIBUTOR_INITIALIZED_BY_CREATE_FROM_SENDS_N_RECVS,
99 DISTRIBUTOR_INITIALIZED_BY_REVERSE,
100 DISTRIBUTOR_INITIALIZED_BY_COPY,
121 static constexpr
int DEFAULT_MPI_TAG = 0;
127 size_t createFromSends(
const Teuchos::ArrayView<const int>& exportProcIDs);
128 void createFromRecvs(
const Teuchos::ArrayView<const int>& remoteProcIDs);
129 void createFromSendsAndRecvs(
const Teuchos::ArrayView<const int>& exportProcIDs,
130 const Teuchos::ArrayView<const int>& remoteProcIDs);
132 void setParameterList(
const Teuchos::RCP<Teuchos::ParameterList>& plist);
134 Teuchos::RCP<DistributorPlan> getReversePlan()
const;
136 Teuchos::RCP<const Teuchos::Comm<int>> getComm()
const {
return comm_; }
137 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
138 Teuchos::RCP<MPIX_Comm*> getMPIXComm()
const {
return mpixComm_; }
141 size_t getNumReceives()
const {
return numReceives_; }
142 size_t getNumSends()
const {
return numSendsToOtherProcs_; }
143 bool hasSelfMessage()
const {
return sendMessageToSelf_; }
144 size_t getMaxSendLength()
const {
return maxSendLength_; }
145 size_t getTotalReceiveLength()
const {
return totalReceiveLength_; }
146 Teuchos::ArrayView<const int> getProcsFrom()
const {
return procsFrom_; }
147 Teuchos::ArrayView<const int> getProcsTo()
const {
return procIdsToSendTo_; }
148 Teuchos::ArrayView<const size_t> getLengthsFrom()
const {
return lengthsFrom_; }
149 Teuchos::ArrayView<const size_t> getLengthsTo()
const {
return lengthsTo_; }
150 Teuchos::ArrayView<const size_t> getStartsTo()
const {
return startsTo_; }
151 Teuchos::ArrayView<const size_t> getIndicesTo()
const {
return indicesTo_; }
157 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
158 void initializeMpiAdvance();
161 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters()
const;
163 void createReversePlan()
const;
175 void computeReceives();
177 Teuchos::RCP<const Teuchos::Comm<int>> comm_;
178 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
179 Teuchos::RCP<MPIX_Comm*> mpixComm_;
183 mutable Teuchos::RCP<DistributorPlan> reversePlan_;
190 bool sendMessageToSelf_;
191 size_t numSendsToOtherProcs_;
192 Teuchos::Array<int> procIdsToSendTo_;
202 Teuchos::Array<size_t> startsTo_;
209 Teuchos::Array<size_t> lengthsTo_;
214 size_t maxSendLength_;
231 Teuchos::Array<size_t> indicesTo_;
250 size_t totalReceiveLength_;
257 Teuchos::Array<size_t> lengthsFrom_;
264 Teuchos::Array<int> procsFrom_;
271 Teuchos::Array<size_t> startsFrom_;
278 Teuchos::Array<size_t> indicesFrom_;
EDistributorHowInitialized
Enum indicating how and whether a Distributor was initialized.
std::string DistributorSendTypeEnumToString(EDistributorSendType sendType)
Convert an EDistributorSendType enum value to a string.
std::string DistributorHowInitializedEnumToString(EDistributorHowInitialized how)
Convert an EDistributorHowInitialized enum value to a string.
EDistributorSendType
The type of MPI send that Distributor should use.