Tpetra parallel linear algebra  Version of the Day
Tpetra_RowGraph_decl.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_ROWGRAPH_DECL_HPP
43 #define TPETRA_ROWGRAPH_DECL_HPP
44 
45 #include "Tpetra_RowGraph_fwd.hpp"
46 #include "Tpetra_Map.hpp"
47 #include "Tpetra_Import.hpp"
48 #include "Tpetra_Export.hpp"
49 #include "Tpetra_Packable.hpp"
50 #include "Teuchos_Describable.hpp"
51 
52 namespace Tpetra {
53 
66  template <class LocalOrdinal,
67  class GlobalOrdinal,
68  class Node>
69  class RowGraph :
70  virtual public Teuchos::Describable,
71  public Packable<GlobalOrdinal, LocalOrdinal> {
72  public:
74 
75  typedef LocalOrdinal local_ordinal_type;
78  typedef GlobalOrdinal global_ordinal_type;
80  typedef Node node_type;
82 
84  virtual ~RowGraph() {};
85 
87 
88 
90  virtual Teuchos::RCP<const Teuchos::Comm<int> >
91  getComm () const = 0;
92 
93 
95  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
96  getRowMap () const = 0;
97 
99  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
100  getColMap () const = 0;
101 
103  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
104  getDomainMap () const = 0;
105 
107  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
108  getRangeMap () const = 0;
109 
111  virtual Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> >
112  getImporter () const = 0;
113 
115  virtual Teuchos::RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> >
116  getExporter () const = 0;
117 
119  virtual global_size_t getGlobalNumRows() const = 0;
120 
122  virtual global_size_t getGlobalNumCols() const = 0;
123 
125  virtual size_t getNodeNumRows() const = 0;
126 
128  virtual size_t getNodeNumCols() const = 0;
129 
131  virtual GlobalOrdinal getIndexBase() const = 0;
132 
134  virtual global_size_t getGlobalNumEntries() const = 0;
135 
137  virtual size_t getNodeNumEntries() const = 0;
138 
140 
141  virtual size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const = 0;
142 
144 
145  virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const = 0;
146 
148  virtual size_t getGlobalMaxNumRowEntries() const = 0;
149 
151  virtual size_t getNodeMaxNumRowEntries() const = 0;
152 
154  virtual bool hasColMap() const = 0;
155 
157  virtual bool isLocallyIndexed() const = 0;
158 
160  virtual bool isGloballyIndexed() const = 0;
161 
163  virtual bool isFillComplete() const = 0;
164 
165 
167 
169 
185  virtual void
186  getGlobalRowCopy (GlobalOrdinal gblRow,
187  const Teuchos::ArrayView<GlobalOrdinal>& gblColInds,
188  size_t& numColInds) const = 0;
189 
206  virtual void
207  getLocalRowCopy (LocalOrdinal lclRow,
208  const Teuchos::ArrayView<LocalOrdinal>& lclColInds,
209  size_t& numColInds) const = 0;
210 
217  virtual bool supportsRowViews () const {
218  return false;
219  }
220 
248  virtual void
249  getLocalRowView (const LocalOrdinal lclRow,
250  Teuchos::ArrayView<const LocalOrdinal>& lclColInds) const;
251 
267  virtual void
268  getGlobalRowView (const GlobalOrdinal gblRow,
269  Teuchos::ArrayView<const GlobalOrdinal>& gblColInds) const;
270 
272 
274 
276  virtual void
277  pack (const Teuchos::ArrayView<const LocalOrdinal>& exportLIDs,
278  Teuchos::Array<GlobalOrdinal>& exports,
279  const Teuchos::ArrayView<size_t>& numPacketsPerLID,
280  size_t& constantNumPackets,
281  Distributor& distor) const;
283  }; // class RowGraph
284 } // namespace Tpetra
285 
286 #endif // TPETRA_ROWGRAPH_DECL_HPP
Declaration of Tpetra::Packable.
Forward declaration of Tpetra::RowGraph.
Sets up and executes a communication plan for a Tpetra DistObject.
Abstract base class for objects that can be the source of an Import or Export operation,...
An abstract interface for graphs accessed by rows.
virtual bool isFillComplete() const =0
Whether fillComplete() has been called (without an intervening resumeFill()).
virtual void getGlobalRowCopy(GlobalOrdinal gblRow, const Teuchos::ArrayView< GlobalOrdinal > &gblColInds, size_t &numColInds) const =0
Get a copy of the global column indices in a given row of the graph.
virtual size_t getGlobalMaxNumRowEntries() const =0
Returns the maximum number of entries across all rows/columns on all nodes.
virtual size_t getNodeMaxNumRowEntries() const =0
Returns the maximum number of entries across all rows/columns on this node.
virtual void getLocalRowCopy(LocalOrdinal lclRow, const Teuchos::ArrayView< LocalOrdinal > &lclColInds, size_t &numColInds) const =0
Get a copy of the local column indices in a given row of the graph.
virtual bool hasColMap() const =0
Whether the graph has a well-defined column Map.
LocalOrdinal local_ordinal_type
The type of local indices in the graph.
virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const =0
Returns the current number of entries on this node in the specified local row.
virtual bool isGloballyIndexed() const =0
If graph indices are in the global range, this function returns true. Otherwise, this function return...
Node node_type
The Kokkos Node type.
virtual void getGlobalRowView(const GlobalOrdinal gblRow, Teuchos::ArrayView< const GlobalOrdinal > &gblColInds) const
Get a const, non-persisting view of the given global row's global column indices, as a Teuchos::Array...
virtual global_size_t getGlobalNumCols() const =0
Returns the number of global columns in the graph.
virtual Teuchos::RCP< const Import< LocalOrdinal, GlobalOrdinal, Node > > getImporter() const =0
This graph's Import object.
virtual GlobalOrdinal getIndexBase() const =0
Returns the index base for global indices for this graph.
virtual Teuchos::RCP< const Teuchos::Comm< int > > getComm() const =0
The communicator over which this graph is distributed.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getColMap() const =0
The Map that describes this graph's distribution of columns over processes.
virtual global_size_t getGlobalNumRows() const =0
Returns the number of global rows in the graph.
virtual void getLocalRowView(const LocalOrdinal lclRow, Teuchos::ArrayView< const LocalOrdinal > &lclColInds) const
Get a constant, nonpersisting, locally indexed view of the given row of the graph.
virtual size_t getNodeNumEntries() const =0
Returns the local number of entries in the graph.
virtual void pack(const Teuchos::ArrayView< const LocalOrdinal > &exportLIDs, Teuchos::Array< GlobalOrdinal > &exports, const Teuchos::ArrayView< size_t > &numPacketsPerLID, size_t &constantNumPackets, Distributor &distor) const
Pack this object's data for Import or Export.
GlobalOrdinal global_ordinal_type
The type of global indices in the graph.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const =0
The Map associated with the range of this graph.
virtual size_t getNodeNumCols() const =0
Returns the number of columns connected to the locally owned rows of this graph.
virtual ~RowGraph()
Destructor (virtual for memory safety of derived classes).
virtual global_size_t getGlobalNumEntries() const =0
Returns the global number of entries in the graph.
virtual bool isLocallyIndexed() const =0
If graph indices are in the local range, this function returns true. Otherwise, this function returns...
virtual bool supportsRowViews() const
Whether this class implements getLocalRowView() and getGlobalRowView().
virtual Teuchos::RCP< const Export< LocalOrdinal, GlobalOrdinal, Node > > getExporter() const =0
This graph's Export object.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRowMap() const =0
The Map that describes this graph's distribution of rows over processes.
virtual size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const =0
Returns the current number of entries on this node in the specified global row.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const =0
The Map associated with the domain of this graph.
virtual size_t getNodeNumRows() const =0
Returns the number of rows owned on the calling node.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
size_t global_size_t
Global size_t object.