Xpetra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Xpetra_TpetraRowMatrix.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Xpetra: A linear algebra interface package
4 //
5 // Copyright 2012 NTESS and the Xpetra contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef XPETRA_TPETRAROWMATRIX_HPP
11 #define XPETRA_TPETRAROWMATRIX_HPP
12 
13 /* this file is automatically generated - do not edit (see script/tpetra.py) */
14 
15 // WARNING: This code is experimental. Backwards compatibility should not be expected.
16 
17 #include <Teuchos_Describable.hpp>
18 #include "Xpetra_ConfigDefs.hpp"
19 #include "Xpetra_Map.hpp"
20 #include "Xpetra_Vector.hpp"
21 
22 #include "Xpetra_TpetraMap.hpp"
23 
24 #include "Tpetra_RowMatrix.hpp"
25 
26 #include "Xpetra_RowMatrix.hpp"
27 #include "Xpetra_Exceptions.hpp"
28 
29 namespace Xpetra {
30 
31 template <class Scalar,
32  class LocalOrdinal,
33  class GlobalOrdinal,
34  class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
36  : virtual public RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> {
37  public:
39 
40 
42  virtual ~TpetraRowMatrix() = default;
43 
45 
47 
48 
50  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > getRowMap() const {
51  XPETRA_MONITOR("TpetraRowMatrix::getRowMap");
52  return toXpetra(mtx_->getRowMap());
53  }
54 
56  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > getColMap() const {
57  XPETRA_MONITOR("TpetraRowMatrix::getColMap");
58  return toXpetra(mtx_->getColMap());
59  }
60 
63  XPETRA_MONITOR("TpetraRowMatrix::getGlobalNumRows");
64  return mtx_->getGlobalNumRows();
65  }
66 
69  XPETRA_MONITOR("TpetraRowMatrix::getGlobalNumCols");
70  return mtx_->getGlobalNumCols();
71  }
72 
74  size_t getLocalNumRows() const {
75  XPETRA_MONITOR("TpetraRowMatrix::getLocalNumRows");
76  return mtx_->getLocalNumRows();
77  }
78 
80  size_t getLocalNumCols() const {
81  XPETRA_MONITOR("TpetraRowMatrix::getLocalNumCols");
82  return mtx_->getLocalNumCols();
83  }
84 
87  XPETRA_MONITOR("TpetraRowMatrix::getGlobalNumEntries");
88  return mtx_->getGlobalNumEntries();
89  }
90 
92  size_t getNodeNumEntries() const {
93  XPETRA_MONITOR("TpetraRowMatrix::getNodeNumEntries");
94  return mtx_->getNodeNumEntries();
95  }
96 
98  size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const {
99  XPETRA_MONITOR("TpetraRowMatrix::getNumEntriesInLocalRow");
100  return mtx_->getNumEntriesInLocalRow(localRow);
101  }
102 
104  size_t getGlobalMaxNumRowEntries() const {
105  XPETRA_MONITOR("TpetraRowMatrix::getGlobalMaxNumRowEntries");
106  return mtx_->getGlobalMaxNumRowEntries();
107  }
108 
110  size_t getLocalMaxNumRowEntries() const {
111  XPETRA_MONITOR("TpetraRowMatrix::getLocalMaxNumRowEntries");
112  return mtx_->getLocalMaxNumRowEntries();
113  }
114 
116  bool isLocallyIndexed() const {
117  XPETRA_MONITOR("TpetraRowMatrix::isLocallyIndexed");
118  return mtx_->isLocallyIndexed();
119  }
120 
122  bool isGloballyIndexed() const {
123  XPETRA_MONITOR("TpetraRowMatrix::isGloballyIndexed");
124  return mtx_->isGloballyIndexed();
125  }
126 
128  bool isFillComplete() const {
129  XPETRA_MONITOR("TpetraRowMatrix::isFillComplete");
130  return mtx_->isFillComplete();
131  }
132 
134  bool supportsRowViews() const {
135  XPETRA_MONITOR("TpetraRowMatrix::supportsRowViews");
136  return mtx_->supportsRowViews();
137  }
138 
140 
142 
143 
145  void getLocalRowCopy(LocalOrdinal LocalRow, const Teuchos::ArrayView<LocalOrdinal> &Indices, const Teuchos::ArrayView<Scalar> &Values, size_t &NumEntries) const {
146  XPETRA_MONITOR("TpetraRowMatrix::getLocalRowCopy");
147  typename Tpetra::RowGraph<LocalOrdinal, GlobalOrdinal, Node>::nonconst_local_inds_host_view_type indices("indices", Indices.size());
148  typename Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::nonconst_values_host_view_type values("values", Values.size());
149 
150  mtx_->getLocalRowCopy(LocalRow, indices, values, NumEntries);
151  for (size_t i = 0; i < NumEntries; ++i) {
152  Indices[i] = indices(i);
153  Values[i] = values(i);
154  }
155  }
156 
158  void getGlobalRowView(GlobalOrdinal GlobalRow, ArrayView<const GlobalOrdinal> &indices, ArrayView<const Scalar> &values) const {
159  XPETRA_MONITOR("TpetraRowMatrix::getGlobalRowView");
160  typename Tpetra::RowGraph<LocalOrdinal, GlobalOrdinal, Node>::global_inds_host_view_type k_indices;
161  typename Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::values_host_view_type k_values;
162 
163  mtx_->getGlobalRowView(GlobalRow, k_indices, k_values);
164  indices = ArrayView<const GlobalOrdinal>(k_indices.data(), k_indices.extent(0));
165  values = ArrayView<const Scalar>(reinterpret_cast<const Scalar *>(k_values.data()), k_values.extent(0));
166  }
167 
169  void getLocalRowView(LocalOrdinal LocalRow, ArrayView<const LocalOrdinal> &indices, ArrayView<const Scalar> &values) const {
170  XPETRA_MONITOR("TpetraRowMatrix::getLocalRowView");
171  typename Tpetra::RowGraph<LocalOrdinal, GlobalOrdinal, Node>::local_inds_host_view_type k_indices;
172  typename Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::values_host_view_type k_values;
173 
174  mtx_->getLocalRowView(LocalRow, k_indices, k_values);
175  indices = ArrayView<const LocalOrdinal>(k_indices.data(), k_indices.extent(0));
176  values = ArrayView<const Scalar>(reinterpret_cast<const Scalar *>(k_values.data()), k_values.extent(0));
177  }
178 
181  //{ XPETRA_MONITOR("TpetraRowMatrix::getLocalDiagCopy"); mtx_->getLocalDiagCopy(diag); }
182 
184 
186 
187 
189  typename ScalarTraits<Scalar>::magnitudeType getFrobeniusNorm() const {
190  XPETRA_MONITOR("TpetraRowMatrix::getFrobeniusNorm");
191  return mtx_->getFrobeniusNorm();
192  }
193 
195 
197 
198 
200  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > getDomainMap() const {
201  XPETRA_MONITOR("TpetraRowMatrix::getDomainMap");
202  return toXpetra(mtx_->getDomainMap());
203  }
204 
206  const Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > getRangeMap() const {
207  XPETRA_MONITOR("TpetraRowMatrix::getRangeMap");
208  return toXpetra(mtx_->getRangeMap());
209  }
210 
212  void apply(const MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> &X, MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> &Y, Teuchos::ETransp mode = Teuchos::NO_TRANS, Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(), Scalar beta = Teuchos::ScalarTraits<Scalar>::zero()) const { TEUCHOS_TEST_FOR_EXCEPTION(1, Xpetra::Exceptions::NotImplemented, "TODO"); }
213  //{ XPETRA_MONITOR("TpetraRowMatrix::apply"); mtx_->apply(X, Y, mode, alpha, beta); }
214 
216 
218 
219 
220  TpetraRowMatrix() = default;
221 
223  TpetraRowMatrix(const Teuchos::RCP<Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > &mtx)
224  : mtx_(mtx) {}
225 
227  void setTpetra_RowMatrix(const Teuchos::RCP<Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > &mtx) { mtx_ = mtx; }
228 
230  RCP<const Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > getTpetra_RowMatrix() const { return mtx_; }
231 
233  RCP<Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > getTpetra_RowMatrixNonConst() const { return mtx_; } // TODO: remove
234 
236 
237  private:
238  RCP<Tpetra::RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > mtx_;
239 
240 }; // TpetraRowMatrix class
241 
242 } // namespace Xpetra
243 
244 #define XPETRA_TPETRAROWMATRIX_SHORT
245 #endif // XPETRA_TPETRAROWMATRIX_HPP
Tpetra::global_size_t getGlobalNumCols() const
Returns the number of global columns in this matrix.
RCP< Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > mtx_
const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
Returns the Map associated with the range of this operator, which must be compatible with Y...
void setTpetra_RowMatrix(const Teuchos::RCP< Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &mtx)
Set the underlying Tpetra matrix.
Tpetra::global_size_t getGlobalNumEntries() const
Returns the global number of entries in this matrix.
size_t getLocalNumRows() const
Returns the number of rows owned on the calling node.
virtual ~TpetraRowMatrix()=default
Destructor.
bool isFillComplete() const
Returns true if fillComplete() has been called.
const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getColMap() const
Returns the Map that describes the column distribution in this matrix.
const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRowMap() const
Returns the Map that describes the row distribution in this matrix.
ScalarTraits< Scalar >::magnitudeType getFrobeniusNorm() const
Returns the Frobenius norm of the matrix.
void apply(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
Computes the operator-multivector application.
Exception throws when you call an unimplemented method of Xpetra.
void getLocalDiagCopy(Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &diag) const
Get a copy of the diagonal entries owned by this node, with local row indices.
size_t global_size_t
Global size_t object.
size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const
Returns the current number of entries on this node in the specified local row.
bool isLocallyIndexed() const
If matrix indices are in the local range, this function returns true. Otherwise, this function return...
const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
Returns the Map associated with the domain of this operator, which must be compatible with X...
void getLocalRowView(LocalOrdinal LocalRow, ArrayView< const LocalOrdinal > &indices, ArrayView< const Scalar > &values) const
Extract a const, non-persisting view of local indices in a specified row of the matrix.
Tpetra::global_size_t getGlobalNumRows() const
Returns the number of global rows in this matrix.
TpetraRowMatrix(const Teuchos::RCP< Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &mtx)
TpetraCrsMatrix constructor to wrap a Tpetra::CrsMatrix object.
size_t getLocalNumCols() const
Returns the number of columns needed to apply the forward operator on this node, i.e., the number of elements listed in the column map.
void getGlobalRowView(GlobalOrdinal GlobalRow, ArrayView< const GlobalOrdinal > &indices, ArrayView< const Scalar > &values) const
Extract a const, non-persisting view of global indices in a specified row of the matrix.
RCP< const Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getTpetra_RowMatrix() const
Get the underlying Tpetra matrix.
#define XPETRA_MONITOR(funcName)
RCP< Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getTpetra_RowMatrixNonConst() const
Get the underlying Tpetra matrix.
bool supportsRowViews() const
Returns true if getLocalRowView() and getGlobalRowView() are valid for this class.
size_t getLocalMaxNumRowEntries() const
Returns the maximum number of entries across all rows/columns on this node.
size_t getGlobalMaxNumRowEntries() const
Returns the maximum number of entries across all rows/columns on all nodes.
size_t getNodeNumEntries() const
Returns the local number of entries in this matrix.
void getLocalRowCopy(LocalOrdinal LocalRow, const Teuchos::ArrayView< LocalOrdinal > &Indices, const Teuchos::ArrayView< Scalar > &Values, size_t &NumEntries) const
Extract a list of entries in a specified local row of the graph. Put into storage allocated by callin...
bool isGloballyIndexed() const
If matrix indices are in the global range, this function returns true. Otherwise, this function retur...
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)