22 #ifndef TPETRA_DETAILS_DISTRIBUTOR_PLAN_HPP
23 #define TPETRA_DETAILS_DISTRIBUTOR_PLAN_HPP
25 #include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
26 #include "Teuchos_Array.hpp"
27 #include "Teuchos_Comm.hpp"
28 #include "Teuchos_RCP.hpp"
29 #include "TpetraCore_config.h"
31 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
32 #include <mpi_advance.h>
46 #if defined(HAVE_TPETRA_MPI)
48 DISTRIBUTOR_IALLTOFEWV
50 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
52 DISTRIBUTOR_MPIADVANCE_ALLTOALL,
53 DISTRIBUTOR_MPIADVANCE_NBRALLTOALLV
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;
115 using IndexView = std::vector<size_t>;
116 using SubViewLimits = std::pair<IndexView, IndexView>;
121 size_t createFromSends(
const Teuchos::ArrayView<const int>& exportProcIDs);
122 void createFromRecvs(
const Teuchos::ArrayView<const int>& remoteProcIDs);
123 void createFromSendsAndRecvs(
const Teuchos::ArrayView<const int>& exportProcIDs,
124 const Teuchos::ArrayView<const int>& remoteProcIDs);
126 void setParameterList(
const Teuchos::RCP<Teuchos::ParameterList>& plist);
128 Teuchos::RCP<DistributorPlan> getReversePlan()
const;
130 Teuchos::RCP<const Teuchos::Comm<int>> getComm()
const {
return comm_; }
131 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
132 Teuchos::RCP<MPIX_Comm*> getMPIXComm()
const {
return mpixComm_; }
135 size_t getNumReceives()
const {
return numReceives_; }
136 size_t getNumSends()
const {
return numSendsToOtherProcs_; }
137 bool hasSelfMessage()
const {
return sendMessageToSelf_; }
138 size_t getMaxSendLength()
const {
return maxSendLength_; }
139 size_t getTotalReceiveLength()
const {
return totalReceiveLength_; }
140 Teuchos::ArrayView<const int> getProcsFrom()
const {
return procsFrom_; }
141 Teuchos::ArrayView<const int> getProcsTo()
const {
return procIdsToSendTo_; }
142 Teuchos::ArrayView<const size_t> getLengthsFrom()
const {
return lengthsFrom_; }
143 Teuchos::ArrayView<const size_t> getLengthsTo()
const {
return lengthsTo_; }
144 Teuchos::ArrayView<const size_t> getStartsTo()
const {
return startsTo_; }
145 Teuchos::ArrayView<const size_t> getIndicesTo()
const {
return indicesTo_; }
148 SubViewLimits getImportViewLimits(
size_t numPackets)
const;
149 SubViewLimits getImportViewLimits(
const Teuchos::ArrayView<const size_t> &numImportPacketsPerLID)
const;
150 SubViewLimits getExportViewLimits(
size_t numPackets)
const;
151 SubViewLimits getExportViewLimits(
const Teuchos::ArrayView<const size_t> &numExportPacketsPerLID)
const;
153 #if defined(HAVE_TPETRA_MPI)
154 const std::vector<int> getRoots()
const {
161 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
162 void initializeMpiAdvance();
165 #if defined(HAVE_TPETRA_MPI)
166 void maybeInitializeRoots();
169 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters()
const;
171 void createReversePlan()
const;
183 void computeReceives();
185 Teuchos::RCP<const Teuchos::Comm<int>> comm_;
186 #if defined(HAVE_TPETRACORE_MPI_ADVANCE)
187 Teuchos::RCP<MPIX_Comm*> mpixComm_;
191 mutable Teuchos::RCP<DistributorPlan> reversePlan_;
198 bool sendMessageToSelf_;
199 size_t numSendsToOtherProcs_;
200 Teuchos::Array<int> procIdsToSendTo_;
210 Teuchos::Array<size_t> startsTo_;
217 Teuchos::Array<size_t> lengthsTo_;
222 size_t maxSendLength_;
239 Teuchos::Array<size_t> indicesTo_;
258 size_t totalReceiveLength_;
265 Teuchos::Array<size_t> lengthsFrom_;
272 Teuchos::Array<int> procsFrom_;
279 Teuchos::Array<size_t> startsFrom_;
286 Teuchos::Array<size_t> indicesFrom_;
288 #if defined(HAVE_TPETRA_MPI)
289 std::vector<int> roots_;
EDistributorHowInitialized
Enum indicating how and whether a Distributor was initialized.
const std::string & validSendTypeOrThrow(const std::string &s)
Valid enum values of distributor send types.
std::string DistributorSendTypeEnumToString(EDistributorSendType sendType)
Convert an EDistributorSendType enum value to a string.
EDistributorSendType DistributorSendTypeStringToEnum(const std::string_view s)
Convert a string to an EDistributorSendType. Throw on error.
Teuchos::Array< EDistributorSendType > distributorSendTypeEnums()
Valid enum values of distributor send types.
std::string DistributorHowInitializedEnumToString(EDistributorHowInitialized how)
Convert an EDistributorHowInitialized enum value to a string.
Teuchos::Array< std::string > distributorSendTypes()
Valid string values for Distributor's "Send type" parameter.
EDistributorSendType
The type of MPI send that Distributor should use.