Tpetra parallel linear algebra  Version of the Day
Tpetra_Experimental_BlockCrsMatrix_decl.hpp
Go to the documentation of this file.
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_EXPERIMENTAL_BLOCKCRSMATRIX_DECL_HPP
43 #define TPETRA_EXPERIMENTAL_BLOCKCRSMATRIX_DECL_HPP
44 
47 
48 #include "Tpetra_CrsGraph.hpp"
49 #include "Tpetra_RowMatrix.hpp"
50 #include "Tpetra_Experimental_BlockMultiVector.hpp"
52 
53 namespace Tpetra {
54 namespace Experimental {
55 
123 template<class Scalar = Details::DefaultTypes::scalar_type,
125  class GO = Details::DefaultTypes::global_ordinal_type,
128  virtual public Tpetra::RowMatrix<Scalar, LO, GO, Node>,
129  virtual public Tpetra::DistObject<char, LO, GO, Node>
130 {
131 private:
134  typedef Teuchos::ScalarTraits<Scalar> STS;
135 
136 protected:
137  typedef char packet_type;
138 
139 public:
141 
142 
144  typedef Scalar scalar_type;
145 
153 
155  typedef LO local_ordinal_type;
159  typedef Node node_type;
160 
162  typedef typename Node::device_type device_type;
164  typedef typename device_type::execution_space execution_space;
166  typedef typename device_type::memory_space memory_space;
167 
168  typedef ::Tpetra::Map<LO, GO, node_type> map_type;
171 
176 
178 
180 
182  BlockCrsMatrix ();
183 
193  BlockCrsMatrix (const crs_graph_type& graph, const LO blockSize);
194 
202  BlockCrsMatrix (const crs_graph_type& graph,
203  const map_type& domainPointMap,
204  const map_type& rangePointMap,
205  const LO blockSize);
206 
208  virtual ~BlockCrsMatrix () {}
209 
211 
213 
215  Teuchos::RCP<const map_type> getDomainMap () const;
216 
218  Teuchos::RCP<const map_type> getRangeMap () const;
219 
221  Teuchos::RCP<const map_type> getRowMap () const;
222 
224  Teuchos::RCP<const map_type> getColMap () const;
225 
228 
230  size_t getNodeNumRows() const;
231 
232  size_t getNodeMaxNumRowEntries() const;
233 
243  void
244  apply (const mv_type& X,
245  mv_type& Y,
246  Teuchos::ETransp mode = Teuchos::NO_TRANS,
247  Scalar alpha = Teuchos::ScalarTraits<Scalar>::one (),
248  Scalar beta = Teuchos::ScalarTraits<Scalar>::zero ()) const;
249 
252  bool hasTransposeApply () const {
253  // FIXME (mfh 04 May 2014) Transpose and conjugate transpose modes
254  // are not implemented yet. Fill in applyBlockTrans() to fix this.
255  return false;
256  }
257 
259  void setAllToScalar (const Scalar& alpha);
260 
262 
264 
266  std::string description () const;
267 
291  void
292  describe (Teuchos::FancyOStream& out,
293  const Teuchos::EVerbosityLevel verbLevel) const;
294 
296 
298 
300  LO getBlockSize () const { return blockSize_; }
301 
303  virtual Teuchos::RCP<const Tpetra::RowGraph<LO,GO,Node> > getGraph () const;
304 
305  const crs_graph_type & getCrsGraph () const { return graph_; }
306 
311  void
314  Teuchos::ETransp mode = Teuchos::NO_TRANS,
315  const Scalar alpha = Teuchos::ScalarTraits<Scalar>::one (),
316  const Scalar beta = Teuchos::ScalarTraits<Scalar>::zero ());
317 
321  void
325  const Scalar& dampingFactor,
326  const ESweepDirection direction,
327  const int numSweeps,
328  const bool zeroInitialGuess) const;
329 
333  void
337  const ArrayView<LO>& rowIndices,
338  const Scalar& dampingFactor,
339  const ESweepDirection direction,
340  const int numSweeps,
341  const bool zeroInitialGuess) const;
342 
364  void
367  const Kokkos::View<impl_scalar_type***, device_type,
368  Kokkos::MemoryUnmanaged>& factoredDiagonal,
369  const Kokkos::View<int**, device_type,
370  Kokkos::MemoryUnmanaged>& factorizationPivots,
371  const Scalar& omega,
372  const ESweepDirection direction) const;
373 
400  LO
401  replaceLocalValues (const LO localRowInd,
402  const LO colInds[],
403  const Scalar vals[],
404  const LO numColInds) const;
405 
432  LO
433  sumIntoLocalValues (const LO localRowInd,
434  const LO colInds[],
435  const Scalar vals[],
436  const LO numColInds) const;
437 
467  LO
468  getLocalRowView (const LO localRowInd,
469  const LO*& colInds,
470  Scalar*& vals,
471  LO& numInds) const;
472 
474  void
475  getLocalRowView (LO LocalRow,
476  Teuchos::ArrayView<const LO> &indices,
477  Teuchos::ArrayView<const Scalar> &values) const;
478 
480  void
481  getLocalRowCopy (LO LocalRow,
482  const Teuchos::ArrayView<LO> &Indices,
483  const Teuchos::ArrayView<Scalar> &Values,
484  size_t &NumEntries) const;
485 
486  little_block_type
487  getLocalBlock (const LO localRowInd, const LO localColInd) const;
488 
512  LO
513  getLocalRowOffsets (const LO localRowInd,
514  ptrdiff_t offsets[],
515  const LO colInds[],
516  const LO numColInds) const;
517 
523  LO
524  replaceLocalValuesByOffsets (const LO localRowInd,
525  const ptrdiff_t offsets[],
526  const Scalar vals[],
527  const LO numOffsets) const;
528 
534  LO
535  sumIntoLocalValuesByOffsets (const LO localRowInd,
536  const ptrdiff_t offsets[],
537  const Scalar vals[],
538  const LO numOffsets) const;
539 
546  size_t getNumEntriesInLocalRow (const LO localRowInd) const;
547 
564  bool localError () const {
565  return *localError_;
566  }
567 
582  std::string errorMessages () const {
583  return (*errs_).is_null () ? std::string ("") : (*errs_)->str ();
584  }
585 
617  void getLocalDiagOffsets (Teuchos::ArrayRCP<size_t>& offsets) const;
618 
628  void
630  const Teuchos::ArrayView<const size_t>& offsets) const;
631 
645  void
646  getLocalDiagCopy (const Kokkos::View<impl_scalar_type***, device_type,
647  Kokkos::MemoryUnmanaged>& diag,
648  const Teuchos::ArrayView<const size_t>& offsets) const;
649 
650 protected:
652  LO
653  absMaxLocalValues (const LO localRowInd,
654  const LO colInds[],
655  const Scalar vals[],
656  const LO numColInds) const;
657 
659  LO
660  absMaxLocalValuesByOffsets (const LO localRowInd,
661  const ptrdiff_t offsets[],
662  const Scalar vals[],
663  const LO numOffsets) const;
664 
671 
672 
673  virtual bool checkSizes (const Tpetra::SrcDistObject& source);
674 
675  virtual void
676  copyAndPermute (const Tpetra::SrcDistObject& source,
677  size_t numSameIDs,
678  const Teuchos::ArrayView<const LO>& permuteToLIDs,
679  const Teuchos::ArrayView<const LO>& permuteFromLIDs);
680 
681  virtual void
682  packAndPrepare (const Tpetra::SrcDistObject& source,
683  const Teuchos::ArrayView<const LO>& exportLIDs,
684  Teuchos::Array<packet_type>& exports,
685  const Teuchos::ArrayView<size_t>& numPacketsPerLID,
686  size_t& constantNumPackets,
687  Tpetra::Distributor& distor);
688 
689  virtual void
690  unpackAndCombine (const Teuchos::ArrayView<const LO> &importLIDs,
691  const Teuchos::ArrayView<const packet_type> &imports,
692  const Teuchos::ArrayView<size_t> &numPacketsPerLID,
693  size_t constantNumPackets,
694  Tpetra::Distributor& distor,
697 
698 private:
700  crs_graph_type graph_;
701  Teuchos::RCP<crs_graph_type> graphRCP_;
710  map_type rowMeshMap_;
717  map_type domainPointMap_;
724  map_type rangePointMap_;
726  LO blockSize_;
727 
732  typename crs_graph_type::local_graph_type::row_map_type::HostMirror ptr_;
733 
735  const LO* ind_;
741  Kokkos::View<impl_scalar_type*, device_type> valView_;
746  impl_scalar_type* val_;
747 
769  Teuchos::RCP<Teuchos::RCP<BMV> > X_colMap_;
773  Teuchos::RCP<Teuchos::RCP<BMV> > Y_rowMap_;
774 
776  LO offsetPerBlock_;
777 
789  Teuchos::RCP<bool> localError_;
790 
798  Teuchos::RCP<Teuchos::RCP<std::ostringstream> > errs_;
799 
801  std::ostream& markLocalErrorAndGetStream ();
802 
803  // //! Clear the local error state and stream.
804  // void clearLocalErrorStateAndStream ();
805 
815  void
816  applyBlockTrans (const BlockMultiVector<Scalar, LO, GO, Node>& X,
818  const Teuchos::ETransp mode,
819  const Scalar alpha,
820  const Scalar beta);
821 
829  void
830  applyBlockNoTrans (const BlockMultiVector<Scalar, LO, GO, Node>& X,
832  const Scalar alpha,
833  const Scalar beta);
834 
842  void
843  localApplyBlockNoTrans (const BlockMultiVector<Scalar, LO, GO, Node>& X,
845  const Scalar alpha,
846  const Scalar beta);
847 
887  LO
888  findRelOffsetOfColumnIndex (const LO localRowIndex,
889  const LO colIndexToFind,
890  const LO hint = 0) const;
891 
894  LO offsetPerBlock () const;
895 
896  const_little_block_type
897  getConstLocalBlockFromInput (const impl_scalar_type* val, const size_t pointOffset) const;
898 
899  little_block_type
900  getNonConstLocalBlockFromInput (impl_scalar_type* val, const size_t pointOffset) const;
901 
902  const_little_block_type
903  getConstLocalBlockFromAbsOffset (const size_t absBlockOffset) const;
904 
905  little_block_type
906  getNonConstLocalBlockFromAbsOffset (const size_t absBlockOffset) const;
907 
911  const_little_block_type
912  getConstLocalBlockFromRelOffset (const LO lclMeshRow,
913  const size_t relMeshOffset) const;
914 
915 public:
917  virtual Teuchos::RCP<const Teuchos::Comm<int> > getComm() const;
918 
920  virtual Teuchos::RCP<Node> getNode() const;
921 
923  virtual global_size_t getGlobalNumCols() const;
924 
925  virtual size_t getNodeNumCols() const;
926 
927  virtual GO getIndexBase() const;
928 
930  virtual global_size_t getGlobalNumEntries() const;
931 
933  virtual size_t getNodeNumEntries() const;
934 
944  virtual size_t getNumEntriesInGlobalRow (GO globalRow) const;
945 
947  virtual global_size_t getGlobalNumDiags() const;
948 
950  virtual size_t getNodeNumDiags() const;
951 
953  virtual size_t getGlobalMaxNumRowEntries() const;
954 
956  virtual bool hasColMap() const;
957 
959  virtual bool isLowerTriangular() const;
960 
962  virtual bool isUpperTriangular() const;
963 
973  virtual bool isLocallyIndexed() const;
974 
984  virtual bool isGloballyIndexed() const;
985 
987  virtual bool isFillComplete() const;
988 
990  virtual bool supportsRowViews() const;
991 
993 
995 
1016  virtual void
1017  getGlobalRowCopy (GO GlobalRow,
1018  const Teuchos::ArrayView<GO> &Indices,
1019  const Teuchos::ArrayView<Scalar> &Values,
1020  size_t& NumEntries) const;
1021 
1046  virtual void
1047  getGlobalRowView (GO GlobalRow,
1048  Teuchos::ArrayView<const GO>& indices,
1049  Teuchos::ArrayView<const Scalar>& values) const;
1050 
1062  virtual void getLocalDiagCopy (Vector<Scalar,LO,GO,Node>& diag) const;
1063 
1065 
1067 
1073  virtual void leftScale (const Vector<Scalar, LO, GO, Node>& x);
1074 
1080  virtual void rightScale (const Vector<Scalar, LO, GO, Node>& x);
1081 
1091  getFrobeniusNorm () const;
1093 };
1094 
1095 } // namespace Experimental
1096 } // namespace Tpetra
1097 
1098 #endif // TPETRA_EXPERIMENTAL_BLOCKCRSMATRIX_DECL_HPP
LO absMaxLocalValuesByOffsets(const LO localRowInd, const ptrdiff_t offsets[], const Scalar vals[], const LO numOffsets) const
Like sumIntoLocalValuesByOffsets, but for the ABSMAX combine mode.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
virtual bool supportsRowViews() const
Whether this object implements getLocalRowView() and getGlobalRowView().
virtual void copyAndPermute(const Tpetra::SrcDistObject &source, size_t numSameIDs, const Teuchos::ArrayView< const LO > &permuteToLIDs, const Teuchos::ArrayView< const LO > &permuteFromLIDs)
Perform copies and permutations that are local to this process.
virtual bool isLowerTriangular() const
Whether this matrix is lower triangular.
Teuchos::RCP< const map_type > getColMap() const
get the (mesh) map for the columns of this block matrix.
LO getBlockSize() const
The number of degrees of freedom per mesh point.
Teuchos::RCP< const map_type > getRowMap() const
get the (mesh) map for the rows of this block matrix.
LO replaceLocalValues(const LO localRowInd, const LO colInds[], const Scalar vals[], const LO numColInds) const
Replace values at the given (mesh, i.e., block) column indices, in the given (mesh, i.e., block) row.
Scalar scalar_type
The type of entries in the matrix.
LO replaceLocalValuesByOffsets(const LO localRowInd, const ptrdiff_t offsets[], const Scalar vals[], const LO numOffsets) const
Like replaceLocalValues, but avoids computing row offsets.
KokkosClassic::DefaultNode::DefaultNodeType node_type
Default value of Node template parameter.
size_t getNodeNumRows() const
get the local number of block rows
void getLocalDiagOffsets(Teuchos::ArrayRCP< size_t > &offsets) const
Get offsets of the diagonal entries in the matrix.
void applyBlock(const BlockMultiVector< Scalar, LO, GO, Node > &X, BlockMultiVector< Scalar, LO, GO, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, const Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), const Scalar beta=Teuchos::ScalarTraits< Scalar >::zero())
Version of apply() that takes BlockMultiVector input and output.
One or more distributed dense vectors.
Node::device_type device_type
The Kokkos::Device specialization that this class uses.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Print a description of this object to the given output stream.
MultiVector for multiple degrees of freedom per mesh point.
Declaration of the Tpetra::CrsMatrix class.
LO getLocalRowOffsets(const LO localRowInd, ptrdiff_t offsets[], const LO colInds[], const LO numColInds) const
Get relative offsets corresponding to the given rows, given by local row index.
global_size_t getGlobalNumRows() const
get the global number of block rows
Nonowning view of a square dense block in a block matrix.
LO absMaxLocalValues(const LO localRowInd, const LO colInds[], const Scalar vals[], const LO numColInds) const
Like sumIntoLocalValues, but for the ABSMAX combine mode.
Teuchos::RCP< const map_type > getRangeMap() const
Get the (point) range Map of this matrix.
virtual bool isUpperTriangular() const
Whether this matrix is upper triangular.
int local_ordinal_type
Default value of LocalOrdinal template parameter.
mv_type::impl_scalar_type impl_scalar_type
The implementation type of entries in the matrix.
virtual bool checkSizes(const Tpetra::SrcDistObject &source)
Compare the source and target (this) objects for compatibility.
virtual bool hasColMap() const
Whether this matrix has a well-defined column map.
Teuchos::RCP< const map_type > getDomainMap() const
Get the (point) domain Map of this matrix.
void setAllToScalar(const Scalar &alpha)
Set all matrix entries equal to alpha.
virtual size_t getNodeNumDiags() const
The number of local diagonal entries, based on global row/column index comparisons.
virtual GO getIndexBase() const
The index base for global indices in this matrix.
virtual bool isGloballyIndexed() const
Whether matrix indices are globally indexed.
size_t global_size_t
Global size_t object.
device_type::execution_space execution_space
The Kokkos execution space that this class uses.
std::string description() const
One-line description of this object.
BlockCrsMatrix()
Default constructor: Makes an empty block matrix.
virtual global_size_t getGlobalNumCols() const
The global number of columns of this matrix.
ESweepDirection
Sweep direction for Gauss-Seidel or Successive Over-Relaxation (SOR).
virtual bool isFillComplete() const
Whether fillComplete() has been called.
Nonowning view of a set of degrees of freedom corresponding to a mesh point in a block vector or mult...
Sets up and executes a communication plan for a Tpetra DistObject.
CombineMode
Rule for combining data in an Import or Export.
void reorderedGaussSeidelCopy(MultiVector< Scalar, LO, GO, Node > &X, const MultiVector< Scalar, LO, GO, Node > &B, const MultiVector< Scalar, LO, GO, Node > &D, const ArrayView< LO > &rowIndices, const Scalar &dampingFactor, const ESweepDirection direction, const int numSweeps, const bool zeroInitialGuess) const
Version of reorderedGaussSeidel(), with fewer requirements on X.
Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node >::mag_type mag_type
Type of a norm result.
virtual size_t getNodeNumCols() const
The number of columns needed to apply the forward operator on this node.
virtual size_t getNodeNumEntries() const
The local number of stored (structurally nonzero) entries.
virtual void leftScale(const Vector< Scalar, LO, GO, Node > &x)
Scale the RowMatrix on the left with the given Vector x.
void getLocalDiagCopy(BlockCrsMatrix< Scalar, LO, GO, Node > &diag, const Teuchos::ArrayView< const size_t > &offsets) const
Variant of getLocalDiagCopy() that uses precomputed offsets.
virtual global_size_t getGlobalNumEntries() const
The global number of stored (structurally nonzero) entries.
virtual void getGlobalRowCopy(GO GlobalRow, const Teuchos::ArrayView< GO > &Indices, const Teuchos::ArrayView< Scalar > &Values, size_t &NumEntries) const
Get a copy of the given global row&#39;s entries.
void getLocalRowCopy(LO LocalRow, const Teuchos::ArrayView< LO > &Indices, const Teuchos::ArrayView< Scalar > &Values, size_t &NumEntries) const
Not implemented.
Abstract base class for objects that can be the source of an Import or Export operation.
double scalar_type
Default value of Scalar template parameter.
LO getLocalRowView(const LO localRowInd, const LO *&colInds, Scalar *&vals, LO &numInds) const
Get a view of the (mesh, i.e., block) row, using local (mesh, i.e., block) indices.
void gaussSeidelCopy(MultiVector< Scalar, LO, GO, Node > &X, const MultiVector< Scalar, LO, GO, Node > &B, const MultiVector< Scalar, LO, GO, Node > &D, const Scalar &dampingFactor, const ESweepDirection direction, const int numSweeps, const bool zeroInitialGuess) const
Version of gaussSeidel(), with fewer requirements on X.
std::string errorMessages() const
The current stream of error messages.
LO sumIntoLocalValues(const LO localRowInd, const LO colInds[], const Scalar vals[], const LO numColInds) const
Sum into values at the given (mesh, i.e., block) column indices, in the given (mesh, i.e., block) row.
virtual size_t getGlobalMaxNumRowEntries() const
The maximum number of entries across all rows/columns on all nodes.
virtual void rightScale(const Vector< Scalar, LO, GO, Node > &x)
Scale the RowMatrix on the right with the given Vector x.
virtual Tpetra::RowMatrix< Scalar, LO, GO, Node >::mag_type getFrobeniusNorm() const
The Frobenius norm of the matrix.
A read-only, row-oriented interface to a sparse matrix.
LO sumIntoLocalValuesByOffsets(const LO localRowInd, const ptrdiff_t offsets[], const Scalar vals[], const LO numOffsets) const
Like sumIntoLocalValues, but avoids computing row offsets.
A distributed dense vector.
device_type::memory_space memory_space
The Kokkos memory space that this class uses.
void apply(const mv_type &X, mv_type &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
For this matrix A, compute Y := beta * Y + alpha * Op(A) * X.
virtual Teuchos::RCP< const Teuchos::Comm< int > > getComm() const
The communicator over which this matrix is distributed.
virtual global_size_t getGlobalNumDiags() const
The number of global diagonal entries, based on global row/column index comparisons.
bool localError() const
Whether this object had an error on the calling process.
BlockMultiVector< Scalar, LO, GO, Node >::impl_scalar_type impl_scalar_type
The implementation type of entries in the matrix.
virtual Teuchos::RCP< Node > getNode() const
The Kokkos Node instance.
virtual ~BlockCrsMatrix()
Destructor (declared virtual for memory safety).
Base class for distributed Tpetra objects that support data redistribution.
size_t getNodeMaxNumRowEntries() const
The maximum number of entries across all rows/columns on this node.
bool hasTransposeApply() const
Whether it is valid to apply the transpose or conjugate transpose of this matrix. ...
virtual size_t getNumEntriesInGlobalRow(GO globalRow) const
The current number of entries on the calling process in the specified global row. ...
virtual Teuchos::RCP< const Tpetra::RowGraph< LO, GO, Node > > getGraph() const
Get the (mesh) graph.
size_t getNumEntriesInLocalRow(const LO localRowInd) const
Return the number of entries in the given row on the calling process.
void localGaussSeidel(const BlockMultiVector< Scalar, LO, GO, Node > &Residual, BlockMultiVector< Scalar, LO, GO, Node > &Solution, const Kokkos::View< impl_scalar_type ***, device_type, Kokkos::MemoryUnmanaged > &factoredDiagonal, const Kokkos::View< int **, device_type, Kokkos::MemoryUnmanaged > &factorizationPivots, const Scalar &omega, const ESweepDirection direction) const
Local Gauss-Seidel solve, given a factorized diagonal.
virtual void getGlobalRowView(GO GlobalRow, Teuchos::ArrayView< const GO > &indices, Teuchos::ArrayView< const Scalar > &values) const
Get a constant, nonpersisting, globally indexed view of the given row of the matrix.
virtual bool isLocallyIndexed() const
Whether matrix indices are locally indexed.