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 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
95  virtual TPETRA_DEPRECATED Teuchos::RCP<Node> getNode () const = 0;
96 #endif // TPETRA_ENABLE_DEPRECATED_CODE
97 
99  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
100  getRowMap () const = 0;
101 
103  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
104  getColMap () const = 0;
105 
107  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
108  getDomainMap () const = 0;
109 
111  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
112  getRangeMap () const = 0;
113 
115  virtual Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> >
116  getImporter () const = 0;
117 
119  virtual Teuchos::RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> >
120  getExporter () const = 0;
121 
123  virtual global_size_t getGlobalNumRows() const = 0;
124 
126  virtual global_size_t getGlobalNumCols() const = 0;
127 
129  virtual size_t getNodeNumRows() const = 0;
130 
132  virtual size_t getNodeNumCols() const = 0;
133 
135  virtual GlobalOrdinal getIndexBase() const = 0;
136 
138  virtual global_size_t getGlobalNumEntries() const = 0;
139 
141  virtual size_t getNodeNumEntries() const = 0;
142 
144 
145  virtual size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const = 0;
146 
148 
149  virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const = 0;
150 
152  virtual size_t getGlobalMaxNumRowEntries() const = 0;
153 
155  virtual size_t getNodeMaxNumRowEntries() const = 0;
156 
158  virtual bool hasColMap() const = 0;
159 
161  virtual bool isLocallyIndexed() const = 0;
162 
164  virtual bool isGloballyIndexed() const = 0;
165 
167  virtual bool isFillComplete() const = 0;
168 
169 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
175  virtual global_size_t TPETRA_DEPRECATED getGlobalNumDiags () const = 0;
176 
181  virtual size_t TPETRA_DEPRECATED getNodeNumDiags () const = 0;
182 
193  virtual bool TPETRA_DEPRECATED isLowerTriangular () const = 0;
194 
205  virtual bool TPETRA_DEPRECATED isUpperTriangular () const = 0;
206 #endif // TPETRA_ENABLE_DEPRECATED_CODE
207 
209 
211 
227  virtual void
228  getGlobalRowCopy (GlobalOrdinal gblRow,
229  const Teuchos::ArrayView<GlobalOrdinal>& gblColInds,
230  size_t& numColInds) const = 0;
231 
248  virtual void
249  getLocalRowCopy (LocalOrdinal lclRow,
250  const Teuchos::ArrayView<LocalOrdinal>& lclColInds,
251  size_t& numColInds) const = 0;
252 
259  virtual bool supportsRowViews () const {
260  return false;
261  }
262 
290  virtual void
291  getLocalRowView (const LocalOrdinal lclRow,
292  Teuchos::ArrayView<const LocalOrdinal>& lclColInds) const;
293 
309  virtual void
310  getGlobalRowView (const GlobalOrdinal gblRow,
311  Teuchos::ArrayView<const GlobalOrdinal>& gblColInds) const;
312 
314 
316 
318  virtual void
319  pack (const Teuchos::ArrayView<const LocalOrdinal>& exportLIDs,
320  Teuchos::Array<GlobalOrdinal>& exports,
321  const Teuchos::ArrayView<size_t>& numPacketsPerLID,
322  size_t& constantNumPackets,
323  Distributor& distor) const;
325  }; // class RowGraph
326 } // namespace Tpetra
327 
328 #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.
CrsGraphType::global_ordinal_type getGlobalNumDiags(const CrsGraphType &G)
Number of populated diagonal entries in the given sparse graph, over all processes in the graph's (MP...
Namespace Tpetra contains the class and methods constituting the Tpetra library.
size_t global_size_t
Global size_t object.