Tpetra parallel linear algebra Version of the Day
Loading...
Searching...
No Matches
Tpetra_RowMatrix_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_ROWMATRIX_DECL_HPP
43#define TPETRA_ROWMATRIX_DECL_HPP
44
45#include "Tpetra_ConfigDefs.hpp"
47#include "Tpetra_Vector_fwd.hpp"
48#include "Tpetra_Operator.hpp"
50#include "Tpetra_Packable.hpp"
52#include "Teuchos_Describable.hpp"
53#include "Kokkos_ArithTraits.hpp"
54
55namespace Tpetra {
81 template <class Scalar,
82 class LocalOrdinal,
83 class GlobalOrdinal,
84 class Node>
85 class RowMatrix :
86 virtual public Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node>,
87 virtual public SrcDistObject,
88 public Packable<char, LocalOrdinal> {
89 public:
91
92
100 typedef Node node_type;
101
111 using impl_scalar_type = typename Kokkos::ArithTraits<Scalar>::val_type;
117 using mag_type = typename Kokkos::ArithTraits<Scalar>::mag_type;
118
119 typedef typename
120 Kokkos::View<impl_scalar_type*, typename Node::device_type>::const_type
121 values_device_view_type;
122 typedef typename values_device_view_type::HostMirror::const_type
123 values_host_view_type;
124 typedef typename values_device_view_type::HostMirror
125 nonconst_values_host_view_type;
126
127 typedef typename
128 Kokkos::View<LocalOrdinal *, typename Node::device_type>::const_type
129 local_inds_device_view_type;
130 typedef typename local_inds_device_view_type::HostMirror::const_type
131 local_inds_host_view_type;
132 typedef typename local_inds_device_view_type::HostMirror
133 nonconst_local_inds_host_view_type;
134
135 typedef typename
136 Kokkos::View<GlobalOrdinal *, typename Node::device_type>::const_type
137 global_inds_device_view_type;
138 typedef typename global_inds_device_view_type::HostMirror::const_type
139 global_inds_host_view_type;
140 typedef typename global_inds_device_view_type::HostMirror
141 nonconst_global_inds_host_view_type;
142
143
144 typedef typename
145 Kokkos::View<const size_t*, typename Node::device_type>::const_type
146 row_ptrs_device_view_type;
147 typedef typename row_ptrs_device_view_type::HostMirror::const_type
148 row_ptrs_host_view_type;
149
150
151
153
155
157 virtual ~RowMatrix();
158
160
162
164 virtual Teuchos::RCP<const Teuchos::Comm<int> > getComm() const = 0;
165
166
168 virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > getRowMap() const = 0;
169
171 virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > getColMap() const = 0;
172
174 virtual Teuchos::RCP<const RowGraph<LocalOrdinal,GlobalOrdinal,Node> > getGraph() const = 0;
175
177 virtual global_size_t getGlobalNumRows() const = 0;
178
180 virtual global_size_t getGlobalNumCols() const = 0;
181
183 virtual size_t getLocalNumRows() const = 0;
184
190 virtual size_t getLocalNumCols() const = 0;
191
193 virtual GlobalOrdinal getIndexBase() const = 0;
194
197
199 virtual size_t getLocalNumEntries() const = 0;
200
211
221 virtual size_t getNumEntriesInLocalRow (LocalOrdinal localRow) const = 0;
222
231 virtual size_t getGlobalMaxNumRowEntries () const = 0;
232
241 virtual size_t getLocalMaxNumRowEntries () const = 0;
242
244 virtual bool hasColMap () const = 0;
245
255 virtual bool isLocallyIndexed() const = 0;
256
266 virtual bool isGloballyIndexed() const = 0;
267
269 virtual bool isFillComplete() const = 0;
270
272 virtual bool supportsRowViews() const = 0;
273
274
276
278
299 virtual void
301 nonconst_global_inds_host_view_type &Indices,
302 nonconst_values_host_view_type &Values,
303 size_t& NumEntries) const = 0;
304
325 virtual void
327 nonconst_local_inds_host_view_type &Indices,
328 nonconst_values_host_view_type &Values,
329 size_t& NumEntries) const = 0;
330
355 virtual void
357 global_inds_host_view_type &indices,
358 values_host_view_type &values) const = 0;
359
384 virtual void
386 local_inds_host_view_type & indices,
387 values_host_view_type & values) const = 0;
388
401
403
405
411
417
426 virtual mag_type getFrobeniusNorm() const = 0;
427
479 virtual Teuchos::RCP<RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
480 add (const Scalar& alpha,
482 const Scalar& beta,
483 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& domainMap = Teuchos::null,
484 const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >& rangeMap = Teuchos::null,
485 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) const;
487
489 private:
490 bool
491 packRow (char* const numEntOut,
492 char* const valOut,
493 char* const indOut,
494 const size_t numEnt,
495 const LocalOrdinal lclRow) const;
496
497 // TODO (mfh 25 Jan 2015) Could just make this "protected" and let
498 // CrsMatrix use it, since it's exactly the same there.
499 void
500 allocatePackSpace (Teuchos::Array<char>& exports,
501 size_t& totalNumEntries,
502 const Teuchos::ArrayView<const LocalOrdinal>& exportLIDs) const;
503
508 void
509 packImpl (const Teuchos::ArrayView<const LocalOrdinal>& exportLIDs,
510 Teuchos::Array<char>& exports,
511 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
512 size_t& constantNumPackets) const;
513
514
515 public:
524 virtual void
525 pack (const Teuchos::ArrayView<const LocalOrdinal>& exportLIDs,
526 Teuchos::Array<char>& exports,
527 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
528 size_t& constantNumPackets) const;
530 }; // class RowMatrix
531} // namespace Tpetra
532
533#endif // TPETRA_ROWMATRIX_DECL_HPP
534
Declaration of Tpetra::Packable.
Forward declaration of Tpetra::RowGraph.
Forward declaration of Tpetra::RowMatrix.
Abstract base class for sources of an Import or Export.
Forward declaration of Tpetra::Vector.
Struct that holds views of the contents of a CrsMatrix.
Abstract interface for operators (e.g., matrices and preconditioners).
Abstract base class for objects that can be the source of an Import or Export operation,...
A read-only, row-oriented interface to a sparse matrix.
virtual void getLocalRowCopy(LocalOrdinal LocalRow, nonconst_local_inds_host_view_type &Indices, nonconst_values_host_view_type &Values, size_t &NumEntries) const =0
Get a copy of the given local row's entries.
virtual void getLocalDiagCopy(Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &diag) const =0
Get a copy of the diagonal entries, distributed by the row Map.
virtual bool isLocallyIndexed() const =0
Whether matrix indices are locally indexed.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getColMap() const =0
The Map that describes the distribution of columns over processes.
virtual mag_type getFrobeniusNorm() const =0
The Frobenius norm of the matrix.
virtual global_size_t getGlobalNumRows() const =0
The global number of rows of this matrix.
virtual size_t getLocalMaxNumRowEntries() const =0
Maximum number of entries in any row of the matrix, on this process.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRowMap() const =0
The Map that describes the distribution of rows over processes.
Node node_type
The Kokkos Node type.
virtual Teuchos::RCP< const RowGraph< LocalOrdinal, GlobalOrdinal, Node > > getGraph() const =0
The RowGraph associated with this matrix.
typename Kokkos::ArithTraits< Scalar >::val_type impl_scalar_type
The type used internally in place of Scalar.
virtual void getLocalRowView(LocalOrdinal LocalRow, local_inds_host_view_type &indices, values_host_view_type &values) const =0
Get a constant, nonpersisting, locally indexed view of the given row of the matrix.
virtual size_t getLocalNumCols() const =0
The number of columns needed to apply the forward operator on this node.
virtual GlobalOrdinal getIndexBase() const =0
The index base for global indices in this matrix.
virtual bool supportsRowViews() const =0
Whether this object implements getLocalRowView() and getGlobalRowView().
virtual global_size_t getGlobalNumCols() const =0
The global number of columns of this matrix.
virtual void getGlobalRowCopy(GlobalOrdinal GlobalRow, nonconst_global_inds_host_view_type &Indices, nonconst_values_host_view_type &Values, size_t &NumEntries) const =0
Get a copy of the given global row's entries.
Scalar scalar_type
The type of the entries in the sparse matrix.
virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const =0
The current number of entries on the calling process in the specified local row.
virtual void pack(const Teuchos::ArrayView< const LocalOrdinal > &exportLIDs, Teuchos::Array< char > &exports, const Teuchos::ArrayView< size_t > &numPacketsPerLID, size_t &constantNumPackets) const
Pack this object's data for an Import or Export.
virtual ~RowMatrix()
Destructor (virtual for memory safety of derived classes).
virtual global_size_t getGlobalNumEntries() const =0
The global number of stored (structurally nonzero) entries.
virtual void getGlobalRowView(GlobalOrdinal GlobalRow, global_inds_host_view_type &indices, values_host_view_type &values) const =0
Get a constant, nonpersisting, globally indexed view of the given row of the matrix.
virtual bool hasColMap() const =0
Whether this matrix has a well-defined column Map.
virtual bool isGloballyIndexed() const =0
Whether matrix indices are globally indexed.
virtual Teuchos::RCP< RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > add(const Scalar &alpha, const RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Scalar &beta, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null) const
Return a new RowMatrix which is the result of beta*this + alpha*A.
virtual size_t getLocalNumEntries() const =0
The local number of stored (structurally nonzero) entries.
virtual Teuchos::RCP< const Teuchos::Comm< int > > getComm() const =0
The communicator over which this matrix is distributed.
virtual size_t getGlobalMaxNumRowEntries() const =0
Maximum number of entries in any row of the matrix, over all processes.
virtual bool isFillComplete() const =0
Whether fillComplete() has been called.
virtual void leftScale(const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x)=0
Scale the matrix on the left with the given Vector.
virtual size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const =0
The current number of entries on the calling process in the specified global row.
GlobalOrdinal global_ordinal_type
The type of global indices.
virtual void rightScale(const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x)=0
Scale the matrix on the right with the given Vector.
LocalOrdinal local_ordinal_type
The type of local indices.
typename Kokkos::ArithTraits< Scalar >::mag_type mag_type
Type of a norm result.
virtual size_t getLocalNumRows() const =0
The number of rows owned by the calling process.
Abstract base class for objects that can be the source of an Import or Export operation.
Namespace Tpetra contains the class and methods constituting the Tpetra library.