Tpetra parallel linear algebra  Version of the Day
Tpetra_Details_Transfer.hpp
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Tpetra: Templated Linear Algebra Services Package
5 // Copyright (2008) Sandia Corporation
6 //
7 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8 // the U.S. Government retains certain rights in this software.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ************************************************************************
40 // @HEADER
41 
42 #ifndef TPETRA_DETAILS_TRANSFER_HPP
43 #define TPETRA_DETAILS_TRANSFER_HPP
44 
45 #include <Tpetra_ConfigDefs.hpp>
46 #include <Kokkos_DefaultNode.hpp>
47 #include <Teuchos_Describable.hpp>
48 #include <Tpetra_Map_decl.hpp>
49 
50 namespace Tpetra {
51  //
52  // Forward declaration. The "doxygen" bit simply tells Doxygen (our
53  // automatic documentation generation system) to skip forward
54  // declarations.
55  //
56 #ifndef DOXYGEN_SHOULD_SKIP_THIS
57 class Distributor;
58 #endif // DOXYGEN_SHOULD_SKIP_THIS
59 
60 namespace Details {
61 
66 template<class LO = DefaultTypes::local_ordinal_type,
67  class GO = DefaultTypes::global_ordinal_type,
68  class NT = DefaultTypes::node_type>
69 class Transfer : public Teuchos::Describable {
70 public:
72  virtual ~Transfer () {}
73 
78  typedef ::Tpetra::Map<LO, GO, NT> map_type;
79 
84  virtual size_t getNumSameIDs() const = 0;
85 
92  virtual size_t getNumPermuteIDs () const = 0;
93 
95  virtual Teuchos::ArrayView<const LO> getPermuteFromLIDs () const = 0;
96 
98  virtual Teuchos::ArrayView<const LO> getPermuteToLIDs () const = 0;
99 
101  virtual size_t getNumRemoteIDs () const = 0;
102 
104  virtual Teuchos::ArrayView<const LO> getRemoteLIDs () const = 0;
105 
107  virtual size_t getNumExportIDs () const = 0;
108 
110  virtual Teuchos::ArrayView<const LO> getExportLIDs () const = 0;
111 
116  virtual Teuchos::ArrayView<const int> getExportPIDs () const = 0;
117 
119  virtual Teuchos::RCP<const map_type> getSourceMap () const = 0;
120 
122  virtual Teuchos::RCP<const map_type> getTargetMap () const = 0;
123 
125  virtual ::Tpetra::Distributor& getDistributor () const = 0;
126 };
127 
128 } // namespace Details
129 } // namespace Tpetra
130 
131 #endif // TPETRA_DETAILS_TRANSFER_HPP
virtual Teuchos::ArrayView< const LO > getPermuteToLIDs() const =0
List of local IDs in the target Map that are permuted.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
Common base class of Import and Export.
virtual Teuchos::ArrayView< const int > getExportPIDs() const =0
List of processes to which entries will be sent.
KokkosClassic::DefaultNode::DefaultNodeType node_type
Default value of Node template parameter.
virtual size_t getNumSameIDs() const =0
Number of initial identical IDs.
virtual Teuchos::ArrayView< const LO > getPermuteFromLIDs() const =0
List of local IDs in the source Map that are permuted.
::Tpetra::Map< LO, GO, NT > map_type
The specialization of Map used by this class and subclasses.
int local_ordinal_type
Default value of LocalOrdinal template parameter.
Implementation details of Tpetra.
Declarations for the Tpetra::Map class and related nonmember constructors.
virtual ::Tpetra::Distributor & getDistributor() const =0
The Distributor that this Export object uses to move data.
virtual size_t getNumPermuteIDs() const =0
Number of IDs to permute but not to communicate.
virtual Teuchos::ArrayView< const LO > getRemoteLIDs() const =0
List of entries in the target Map to receive from other processes.
virtual Teuchos::RCP< const map_type > getTargetMap() const =0
The target Map used to construct this Export.
virtual Teuchos::ArrayView< const LO > getExportLIDs() const =0
List of entries in the source Map that will be sent to other processes.
virtual ~Transfer()
Destructor (declared virtual for memory safety of derived classes).
virtual size_t getNumRemoteIDs() const =0
Number of entries not on the calling process.
virtual size_t getNumExportIDs() const =0
Number of entries that must be sent by the calling process to other processes.
virtual Teuchos::RCP< const map_type > getSourceMap() const =0
The source Map used to construct this Export.