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)