Tpetra parallel linear algebra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Tpetra_Import_decl.hpp
1 // @HEADER
2 // *****************************************************************************
3 // Tpetra: Templated Linear Algebra Services Package
4 //
5 // Copyright 2008 NTESS and the Tpetra contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef TPETRA_IMPORT_DECL_HPP
11 #define TPETRA_IMPORT_DECL_HPP
12 
13 #include "Tpetra_Details_Transfer.hpp"
14 #include "Tpetra_Import_fwd.hpp"
15 #include "Tpetra_Export_fwd.hpp"
16 
17 namespace Tpetra {
18 
74 template <class LocalOrdinal,
75  class GlobalOrdinal,
76  class Node>
77 class Import : public ::Tpetra::Details::Transfer<LocalOrdinal, GlobalOrdinal, Node> {
78  private:
79  friend class Export<LocalOrdinal, GlobalOrdinal, Node>;
80  using base_type =
82 
83  public:
86 
88 
89 
97  Import(const Teuchos::RCP<const map_type>& source,
98  const Teuchos::RCP<const map_type>& target);
99 
110  Import(const Teuchos::RCP<const map_type>& source,
111  const Teuchos::RCP<const map_type>& target,
112  const Teuchos::RCP<Teuchos::FancyOStream>& out);
113 
126  Import(const Teuchos::RCP<const map_type>& source,
127  const Teuchos::RCP<const map_type>& target,
128  const Teuchos::RCP<Teuchos::ParameterList>& plist);
129 
145  Import(const Teuchos::RCP<const map_type>& source,
146  const Teuchos::RCP<const map_type>& target,
147  const Teuchos::RCP<Teuchos::FancyOStream>& out,
148  const Teuchos::RCP<Teuchos::ParameterList>& plist);
149 
161  Import(const Teuchos::RCP<const map_type>& source,
162  const Teuchos::RCP<const map_type>& target,
163  Teuchos::Array<int>& remotePIDs,
164  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::rcp(new Teuchos::ParameterList));
165 
171 
179 
210  Import(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& sourceMap,
211  const GlobalOrdinal targetMapRemoteOrPermuteGlobalIndices[],
212  const int targetMapRemoteOrPermuteProcessRanks[],
213  const LocalOrdinal numTargetMapRemoteOrPermuteGlobalIndices,
214  const bool mayReorderTargetMapIndicesLocally,
215  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null,
216  const Teuchos::RCP<Teuchos::FancyOStream>& out = Teuchos::null);
217 
219  Import(const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& source,
220  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& target,
221  const Teuchos::ArrayView<int>& remotePIDs,
222  const Teuchos::ArrayView<const LocalOrdinal>& userExportLIDs,
223  const Teuchos::ArrayView<const int>& userExportPIDs,
224  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null,
225  const Teuchos::RCP<Teuchos::FancyOStream>& out = Teuchos::null);
226 
229  operator=(const Import<LocalOrdinal, GlobalOrdinal, Node>& Source) = default;
230 
232  virtual ~Import() = default;
233 
235 
237 
246  void
247  findUnionTargetGIDs(Teuchos::Array<GlobalOrdinal>& unionTgtGIDs,
248  Teuchos::Array<std::pair<int, GlobalOrdinal>>& remotePGIDs,
249  typename Teuchos::Array<GlobalOrdinal>::size_type& numSameGIDs,
250  typename Teuchos::Array<GlobalOrdinal>::size_type& numPermuteGIDs,
251  typename Teuchos::Array<GlobalOrdinal>::size_type& numRemoteGIDs,
252  const Teuchos::ArrayView<const GlobalOrdinal>& sameGIDs1,
253  const Teuchos::ArrayView<const GlobalOrdinal>& sameGIDs2,
254  Teuchos::Array<GlobalOrdinal>& permuteGIDs1,
255  Teuchos::Array<GlobalOrdinal>& permuteGIDs2,
256  Teuchos::Array<GlobalOrdinal>& remoteGIDs1,
257  Teuchos::Array<GlobalOrdinal>& remoteGIDs2,
258  Teuchos::Array<int>& remotePIDs1,
259  Teuchos::Array<int>& remotePIDs2) const;
260 
294  Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>>
296 
313  Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>>
314  setUnion() const;
315 
320  Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>>
321  createRemoteOnlyImport(const Teuchos::RCP<const map_type>& remoteTarget) const;
322 
324 
326 
349  virtual void
350  describe(Teuchos::FancyOStream& out,
351  const Teuchos::EVerbosityLevel verbLevel =
352  Teuchos::Describable::verbLevel_default) const;
353 
369  virtual void print(std::ostream& os) const;
370 
372  private:
374 
375 
392  void
393  init(const Teuchos::RCP<const map_type>& source,
394  const Teuchos::RCP<const map_type>& target,
395  bool useRemotePIDs,
396  Teuchos::Array<int>& remotePIDs,
397  const Teuchos::RCP<Teuchos::ParameterList>& plist);
398 
430  void setupSamePermuteRemote(Teuchos::Array<GlobalOrdinal>& remoteGIDs);
431 
460  void
461  setupExport(Teuchos::Array<GlobalOrdinal>& remoteGIDs,
462  bool useRemotePIDs, Teuchos::Array<int>& remotePIDs,
463  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null);
465 
473  Import(const Teuchos::RCP<const map_type>& source,
474  const Teuchos::RCP<const map_type>& target,
475  const size_t numSameID,
476  Teuchos::Array<LocalOrdinal>& permuteToLIDs,
477  Teuchos::Array<LocalOrdinal>& permuteFromLIDs,
478  Teuchos::Array<LocalOrdinal>& remoteLIDs,
479  Teuchos::Array<LocalOrdinal>& exportLIDs,
480  Teuchos::Array<int>& exportPIDs,
481  Distributor& distributor,
482  const Teuchos::RCP<Teuchos::FancyOStream>& out = Teuchos::null,
483  const Teuchos::RCP<Teuchos::ParameterList>& plist = Teuchos::null);
484 
485 }; // class Import
486 
496 template <class LocalOrdinal, class GlobalOrdinal, class Node>
497 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>>
499  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& tgt) {
500  if (src == tgt) {
501  return Teuchos::null;
502  }
503 #ifdef HAVE_TPETRA_DEBUG
504  TEUCHOS_TEST_FOR_EXCEPTION(
505  src == Teuchos::null || tgt == Teuchos::null, std::runtime_error,
506  "Tpetra::createImport: Neither source nor target Map may be null.");
507 #endif // HAVE_TPETRA_DEBUG
508  using import_type = Import<LocalOrdinal, GlobalOrdinal, Node>;
509  return Teuchos::rcp(new import_type(src, tgt));
510 }
511 
522 template <class LocalOrdinal, class GlobalOrdinal, class Node>
523 Teuchos::RCP<const Import<LocalOrdinal, GlobalOrdinal, Node>>
525  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>& tgt,
526  const Teuchos::RCP<Teuchos::ParameterList>& plist) {
527  if (src == tgt) {
528  return Teuchos::null;
529  }
530 #ifdef HAVE_TPETRA_DEBUG
531  TEUCHOS_TEST_FOR_EXCEPTION(
532  src == Teuchos::null || tgt == Teuchos::null, std::runtime_error,
533  "Tpetra::createImport(): neither source nor target map may be null:"
534  << std::endl
535  << "source: " << src << std::endl
536  << "target: " << tgt
537  << std::endl);
538 #endif // HAVE_TPETRA_DEBUG
539  typedef Import<LocalOrdinal, GlobalOrdinal, Node> import_type;
540  return Teuchos::rcp(new import_type(src, tgt, plist));
541 }
542 
543 } // namespace Tpetra
544 
545 #endif // TPETRA_IMPORT_DECL_HPP
Communication plan for data redistribution from a uniquely-owned to a (possibly) multiply-owned distr...
Common base class of Import and Export.
Teuchos::RCP< const Import< LocalOrdinal, GlobalOrdinal, Node > > createRemoteOnlyImport(const Teuchos::RCP< const map_type > &remoteTarget) const
Returns an importer that contains only the remote entries of this.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Describe this object in a human-readable way to the given output stream.
Teuchos::RCP< const Import< LocalOrdinal, GlobalOrdinal, Node > > setUnion() const
Return the union of this Import this-&gt;getSourceMap()
Forward declaration of Tpetra::Export.
Import(const Teuchos::RCP< const map_type > &source, const Teuchos::RCP< const map_type > &target)
Construct an Import from the source and target Maps.
Import< LocalOrdinal, GlobalOrdinal, Node > & operator=(const Import< LocalOrdinal, GlobalOrdinal, Node > &Source)=default
Assignment operator.
Forward declaration of Tpetra::Import.
Communication plan for data redistribution from a (possibly) multiply-owned to a uniquely-owned distr...
Sets up and executes a communication plan for a Tpetra DistObject.
virtual ~Import()=default
Destructor.
void findUnionTargetGIDs(Teuchos::Array< GlobalOrdinal > &unionTgtGIDs, Teuchos::Array< std::pair< int, GlobalOrdinal >> &remotePGIDs, typename Teuchos::Array< GlobalOrdinal >::size_type &numSameGIDs, typename Teuchos::Array< GlobalOrdinal >::size_type &numPermuteGIDs, typename Teuchos::Array< GlobalOrdinal >::size_type &numRemoteGIDs, const Teuchos::ArrayView< const GlobalOrdinal > &sameGIDs1, const Teuchos::ArrayView< const GlobalOrdinal > &sameGIDs2, Teuchos::Array< GlobalOrdinal > &permuteGIDs1, Teuchos::Array< GlobalOrdinal > &permuteGIDs2, Teuchos::Array< GlobalOrdinal > &remoteGIDs1, Teuchos::Array< GlobalOrdinal > &remoteGIDs2, Teuchos::Array< int > &remotePIDs1, Teuchos::Array< int > &remotePIDs2) const
Find the union of the target IDs from two Import objects.
A parallel distribution of indices over processes.
virtual void print(std::ostream &os) const
Print the Import&#39;s data to the given output stream.
Teuchos::RCP< const Import< LocalOrdinal, GlobalOrdinal, Node > > createImport(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &src, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &tgt)
Nonmember constructor for Import.