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 
83  typedef typename
84  Kokkos::View<LocalOrdinal *, typename Node::device_type>::const_type
85  local_inds_device_view_type;
86  typedef typename local_inds_device_view_type::HostMirror::const_type
87  local_inds_host_view_type;
88  typedef typename local_inds_device_view_type::HostMirror
89  nonconst_local_inds_host_view_type;
90 
91 
92  typedef typename
93  Kokkos::View<GlobalOrdinal *, typename Node::device_type>::const_type
94  global_inds_device_view_type;
95  typedef typename global_inds_device_view_type::HostMirror::const_type
96  global_inds_host_view_type;
97  typedef typename global_inds_device_view_type::HostMirror
98  nonconst_global_inds_host_view_type;
99 
100  typedef typename
101  Kokkos::View<const size_t*, typename Node::device_type>::const_type
102  row_ptrs_device_view_type;
103  typedef typename row_ptrs_device_view_type::HostMirror::const_type
104  row_ptrs_host_view_type;
105 
107  virtual ~RowGraph() {};
108 
110 
111 
113  virtual Teuchos::RCP<const Teuchos::Comm<int> >
114  getComm () const = 0;
115 
116 
118  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
119  getRowMap () const = 0;
120 
122  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
123  getColMap () const = 0;
124 
126  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
127  getDomainMap () const = 0;
128 
130  virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
131  getRangeMap () const = 0;
132 
134  virtual Teuchos::RCP<const Import<LocalOrdinal,GlobalOrdinal,Node> >
135  getImporter () const = 0;
136 
138  virtual Teuchos::RCP<const Export<LocalOrdinal,GlobalOrdinal,Node> >
139  getExporter () const = 0;
140 
142  virtual global_size_t getGlobalNumRows() const = 0;
143 
145  virtual global_size_t getGlobalNumCols() const = 0;
146 
148  virtual size_t getNodeNumRows() const = 0;
149 
151  virtual size_t getNodeNumCols() const = 0;
152 
154  virtual GlobalOrdinal getIndexBase() const = 0;
155 
157  virtual global_size_t getGlobalNumEntries() const = 0;
158 
160  virtual size_t getNodeNumEntries() const = 0;
161 
163 
164  virtual size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const = 0;
165 
167 
168  virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const = 0;
169 
171  virtual size_t getGlobalMaxNumRowEntries() const = 0;
172 
174  virtual size_t getNodeMaxNumRowEntries() const = 0;
175 
177  virtual bool hasColMap() const = 0;
178 
180  virtual bool isLocallyIndexed() const = 0;
181 
183  virtual bool isGloballyIndexed() const = 0;
184 
186  virtual bool isFillComplete() const = 0;
187 
188 
190 
192 
208 
209  virtual void
210  getGlobalRowCopy (const GlobalOrdinal gblRow,
211  nonconst_global_inds_host_view_type& gblColInds,
212  size_t& numColInds) const = 0;
213 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
214  virtual void
215  getGlobalRowCopy (GlobalOrdinal gblRow,
216  const Teuchos::ArrayView<GlobalOrdinal>& gblColInds,
217  size_t& numColInds) const = 0;
218 #endif
219  virtual void
236  getLocalRowCopy (const LocalOrdinal lclRow,
237  nonconst_local_inds_host_view_type & lclColInds,
238  size_t& numColInds) const = 0;
239 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
240  virtual void
241  getLocalRowCopy (LocalOrdinal lclRow,
242  const Teuchos::ArrayView<LocalOrdinal>& lclColInds,
243  size_t& numColInds) const = 0;
244 #endif
245 
252  virtual bool supportsRowViews () const {
253  return false;
254  }
255 
283  virtual void
284  getLocalRowView (const LocalOrdinal lclRow,
285  local_inds_host_view_type & lclColInds) const = 0;
286 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
287  virtual void
288  getLocalRowView (const LocalOrdinal lclRow,
289  Teuchos::ArrayView<const LocalOrdinal>& lclColInds) const;
290 #endif // TPETRA_ENABLE_DEPRECATED_CODE
291 
307  virtual void
308  getGlobalRowView (const GlobalOrdinal gblRow,
309  global_inds_host_view_type& gblColInds) const = 0;
310 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
311  virtual void
312  getGlobalRowView (const GlobalOrdinal gblRow,
313  Teuchos::ArrayView<const GlobalOrdinal>& gblColInds) const;
314 #endif
315 
317 
319 
321  virtual void
322  pack (const Teuchos::ArrayView<const LocalOrdinal>& exportLIDs,
323  Teuchos::Array<GlobalOrdinal>& exports,
324  const Teuchos::ArrayView<size_t>& numPacketsPerLID,
325  size_t& constantNumPackets) const;
327  }; // class RowGraph
328 } // namespace Tpetra
329 
330 #endif // TPETRA_ROWGRAPH_DECL_HPP
virtual bool hasColMap() const =0
Whether the graph has a well-defined column Map.
virtual ~RowGraph()
Destructor (virtual for memory safety of derived classes).
Namespace Tpetra contains the class and methods constituting the Tpetra library.
virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const =0
Returns the current number of entries on this node in the specified local row.
An abstract interface for graphs accessed by rows.
virtual GlobalOrdinal getIndexBase() const =0
Returns the index base for global indices for this graph.
virtual size_t getNodeNumCols() const =0
Returns the number of columns connected to the locally owned rows of this graph.
GlobalOrdinal global_ordinal_type
The type of global indices in the graph.
virtual size_t getNodeNumEntries() const =0
Returns the local number of entries in the graph.
virtual bool supportsRowViews() const
Whether this class implements getLocalRowView() and getGlobalRowView().
virtual Teuchos::RCP< const Import< LocalOrdinal, GlobalOrdinal, Node > > getImporter() const =0
This graph&#39;s Import object.
virtual size_t getNodeNumRows() const =0
Returns the number of rows owned on the calling node.
virtual size_t getNodeMaxNumRowEntries() const =0
Returns the maximum number of entries across all rows/columns on this node.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getColMap() const =0
The Map that describes this graph&#39;s distribution of columns over processes.
virtual Teuchos::RCP< const Export< LocalOrdinal, GlobalOrdinal, Node > > getExporter() const =0
This graph&#39;s Export object.
Forward declaration of Tpetra::RowGraph.
virtual bool isFillComplete() const =0
Whether fillComplete() has been called (without an intervening resumeFill()).
size_t global_size_t
Global size_t object.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const =0
The Map associated with the range of this graph.
virtual global_size_t getGlobalNumRows() const =0
Returns the number of global rows in the graph.
virtual size_t getGlobalMaxNumRowEntries() const =0
Returns the maximum number of entries across all rows/columns on all nodes.
virtual global_size_t getGlobalNumCols() const =0
Returns the number of global columns in the graph.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRowMap() const =0
The Map that describes this graph&#39;s distribution of rows over processes.
virtual void getGlobalRowCopy(const GlobalOrdinal gblRow, nonconst_global_inds_host_view_type &gblColInds, size_t &numColInds) const =0
Get a copy of the global column indices in a given row of the graph.
virtual size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const =0
Returns the current number of entries on this node in the specified global row.
virtual void getLocalRowCopy(const LocalOrdinal lclRow, nonconst_local_inds_host_view_type &lclColInds, size_t &numColInds) const =0
Get a copy of the local column indices in a given row of the graph.
virtual bool isGloballyIndexed() const =0
If graph indices are in the global range, this function returns true. Otherwise, this function return...
LocalOrdinal local_ordinal_type
The type of local indices in the graph.
virtual void getGlobalRowView(const GlobalOrdinal gblRow, global_inds_host_view_type &gblColInds) const =0
Get a const, non-persisting view of the given global row&#39;s global column indices, as a Teuchos::Array...
virtual void getLocalRowView(const LocalOrdinal lclRow, local_inds_host_view_type &lclColInds) const =0
Get a constant, nonpersisting, locally indexed view of the given row of the graph.
virtual Teuchos::RCP< const Teuchos::Comm< int > > getComm() const =0
The communicator over which this graph is distributed.
virtual void pack(const Teuchos::ArrayView< const LocalOrdinal > &exportLIDs, Teuchos::Array< GlobalOrdinal > &exports, const Teuchos::ArrayView< size_t > &numPacketsPerLID, size_t &constantNumPackets) const
Pack this object&#39;s data for Import or Export.
Node node_type
The Kokkos Node type.
virtual bool isLocallyIndexed() const =0
If graph indices are in the local range, this function returns true. Otherwise, this function returns...
Declaration of Tpetra::Packable.
Abstract base class for objects that can be the source of an Import or Export operation, and that also know how to pack their data to send to the target object.
virtual global_size_t getGlobalNumEntries() const =0
Returns the global number of entries in the graph.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const =0
The Map associated with the domain of this graph.