49#ifndef XPETRA_MATRIX_HPP
50#define XPETRA_MATRIX_HPP
52#include <KokkosCompat_DefaultNode.hpp>
57#include "Xpetra_MultiVector.hpp"
63#include "Xpetra_StridedMap.hpp"
64#include "Xpetra_StridedMapFactory.hpp"
93 template <
class Scalar,
110#ifdef HAVE_XPETRA_TPETRA
137 const size_t blkSize = 1;
138 std::vector<size_t> stridingInfo(1, blkSize);
139 LocalOrdinal stridedBlockId = -1;
142 if (A->IsView(viewLabel)) {
143 rangeMap = transposeA ? A->getColMap(viewLabel) : A->getRowMap(viewLabel);
144 domainMap = transposeA ? A->getRowMap(viewLabel) : A->getColMap(viewLabel);
147 rangeMap = transposeA ? A->getDomainMap() : A->getRangeMap();
148 domainMap = transposeA ? A->getRangeMap() : A->getDomainMap();
150 if (viewLabel ==
"stridedMaps") {
156 if (B != Teuchos::null ) {
159 if (B->IsView(viewLabel)) {
160 domainMap = transposeB ? B->getRowMap(viewLabel) : B->getColMap(viewLabel);
163 domainMap = transposeB ? B->getRangeMap() : B->getDomainMap();
165 if (viewLabel ==
"stridedMaps")
185 out <<
"views associated with this operator" << std::endl;
186 for (
int i=0; i<viewLabels.
size(); ++i)
187 out << viewLabels[i] << std::endl;
266 virtual void scale(
const Scalar &alpha)= 0;
508 bool sumInterfaceValues,
524 std::vector<size_t> stridingInfo;
525 stridingInfo.push_back(Teuchos::as<size_t>(blksize));
526 LocalOrdinal stridedBlockId = -1;
542 CreateView(
"stridedMaps", stridedRangeMap, stridedDomainMap);
554 return Teuchos::as<LocalOrdinal>(domainMap->getFixedBlockSize());
563 return IsView(
"stridedMaps");
584#ifdef HAVE_XPETRA_TPETRA
589#warning "Xpetra Kokkos interface for CrsMatrix is enabled (HAVE_XPETRA_KOKKOS_REFACTOR) but Tpetra is disabled. The Kokkos interface needs Tpetra to be enabled, too."
609#define XPETRA_MATRIX_SHORT
static const EVerbosityLevel verbLevel_default
basic_FancyOStream & setOutputToRootOnly(const int rootRank)
int getOutputToRootOnly() const
KokkosSparse::CrsMatrix< impl_scalar_type, LocalOrdinal, execution_space, void, typename local_graph_type::size_type > local_matrix_type
The specialization of Kokkos::CrsMatrix that represents the part of the sparse matrix on each MPI pro...
Exception indicating invalid cast attempted.
Exception throws to report errors in the internal logical of the program.
Xpetra-specific matrix class.
virtual global_size_t getGlobalNumEntries() const =0
Returns the global number of entries in this matrix.
virtual bool haveGlobalConstants() const =0
Returns true if globalConstants have been computed; false otherwise.
Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > CrsMatrix
void CreateView(viewLabel_t viewLabel, const RCP< const Map > &rowMap, const RCP< const Map > &colMap)
virtual size_t getGlobalMaxNumRowEntries() const =0
Returns the maximum number of entries across all rows/columns on all nodes.
virtual global_size_t getGlobalNumRows() const =0
Returns the number of global rows in this matrix.
virtual bool hasCrsGraph() const =0
Supports the getCrsGraph() call.
viewLabel_t currentViewLabel_
Xpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > CrsGraph
Xpetra::CrsMatrixFactory< Scalar, LocalOrdinal, GlobalOrdinal, Node > CrsMatrixFactory
virtual const RCP< const Map > & getColMap(viewLabel_t viewLabel) const
Returns the Map that describes the column distribution in this matrix.
void CreateView(const viewLabel_t viewLabel, const RCP< const Matrix > &A, bool transposeA=false, const RCP< const Matrix > &B=Teuchos::null, bool transposeB=false)
LocalOrdinal local_ordinal_type
const viewLabel_t & GetCurrentViewLabel() const
void SetFixedBlockSize(LocalOrdinal blksize, GlobalOrdinal offset=0)
virtual void replaceLocalValues(LocalOrdinal localRow, const ArrayView< const LocalOrdinal > &cols, const ArrayView< const Scalar > &vals)=0
Replace matrix entries, using local IDs.
virtual void resumeFill(const RCP< ParameterList > ¶ms=null)=0
virtual void getLocalRowCopy(LocalOrdinal LocalRow, const ArrayView< LocalOrdinal > &Indices, const ArrayView< Scalar > &Values, size_t &NumEntries) const =0
Extract a list of entries in a specified local row of the matrix. Put into storage allocated by calli...
virtual bool isLocallyIndexed() const =0
If matrix indices are in the local range, this function returns true. Otherwise, this function return...
virtual bool isGloballyIndexed() const =0
If matrix indices are in the global range, this function returns true. Otherwise, this function retur...
virtual Scalar GetMaxEigenvalueEstimate() const
virtual void doImport(const Matrix &source, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, CombineMode CM)=0
Import (using an Exporter).
virtual void SetMaxEigenvalueEstimate(Scalar const &sigma)
Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > Map
virtual bool isFillComplete() const =0
Returns true if fillComplete() has been called and the matrix is in compute mode.
virtual const RCP< const Map > & getColMap() const
Returns the Map that describes the column distribution in this matrix. This might be null until fillC...
virtual void residual(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &R) const =0
Compute a residual R = B - (*this) * X.
virtual void getLocalDiagCopy(Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &diag) const =0
Get a copy of the diagonal entries owned by this node, with local row indices.
virtual void setAllToScalar(const Scalar &alpha)=0
Set all matrix entries equal to scalar.
virtual void insertLocalValues(LocalOrdinal localRow, const ArrayView< const LocalOrdinal > &cols, const ArrayView< const Scalar > &vals)=0
Insert matrix entries, using local IDs.
virtual std::string description() const =0
Return a simple one-line description of this object.
virtual size_t getLocalNumRows() const =0
Returns the number of matrix rows owned on the calling node.
virtual void fillComplete(const RCP< const Map > &domainMap, const RCP< const Map > &rangeMap, const RCP< ParameterList > ¶ms=null)=0
Signal that data entry is complete, specifying domain and range maps.
virtual void doExport(const Matrix &dest, const Export< LocalOrdinal, GlobalOrdinal, Node > &exporter, CombineMode CM)=0
Export (using an Importer).
viewLabel_t defaultViewLabel_
virtual size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const =0
Returns the current number of entries on this node in the specified local row.
virtual local_matrix_type::HostMirror getLocalMatrixHost() const =0
bool IsView(const viewLabel_t viewLabel) const
virtual void getLocalRowView(LocalOrdinal LocalRow, ArrayView< const LocalOrdinal > &indices, ArrayView< const Scalar > &values) const =0
Extract a const, non-persisting view of local indices in a specified row of the matrix.
GlobalOrdinal global_ordinal_type
virtual void fillComplete(const RCP< ParameterList > ¶ms=null)=0
Signal that data entry is complete.
bool IsFixedBlockSizeSet() const
Returns true, if SetFixedBlockSize has been called before.
virtual void setObjectLabel(const std::string &objectLabel)=0
void RemoveView(const viewLabel_t viewLabel)
virtual ~Matrix()
Destructor.
virtual size_t getLocalNumEntries() const =0
Returns the local number of entries in this matrix.
virtual void getGlobalRowView(GlobalOrdinal GlobalRow, ArrayView< const GlobalOrdinal > &indices, ArrayView< const Scalar > &values) const =0
Extract a const, non-persisting view of global indices in a specified row of the matrix.
virtual void doImport(const Matrix &source, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, CombineMode CM)=0
Import.
virtual void leftScale(const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x)=0
Left scale matrix using the given vector entries.
CrsMatrix::local_matrix_type local_matrix_type
virtual void apply(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode, Scalar alpha, Scalar beta, bool sumInterfaceValues, const RCP< Import< LocalOrdinal, GlobalOrdinal, Node > > ®ionInterfaceImporter, const Teuchos::ArrayRCP< LocalOrdinal > ®ionInterfaceLIDs) const =0
Computes the matrix-multivector multiplication for region layout matrices.
virtual void doExport(const Matrix &dest, const Import< LocalOrdinal, GlobalOrdinal, Node > &importer, CombineMode CM)=0
Export.
Xpetra::MatrixView< Scalar, LocalOrdinal, GlobalOrdinal, Node > MatrixView
virtual const RCP< const Map > & getRowMap() const
Returns the Map that describes the row distribution in this matrix.
virtual local_matrix_type getLocalMatrixDevice() const =0
virtual void replaceGlobalValues(GlobalOrdinal globalRow, const ArrayView< const GlobalOrdinal > &cols, const ArrayView< const Scalar > &vals)=0
Replace matrix entries, using global IDs.
void PrintViews(Teuchos::FancyOStream &out) const
Print all of the views associated with the Matrix.
const viewLabel_t & GetDefaultViewLabel() const
const viewLabel_t SwitchToView(const viewLabel_t viewLabel)
virtual size_t getLocalMaxNumRowEntries() const =0
Returns the maximum number of entries across all rows/columns on this node.
Teuchos::Hashtable< viewLabel_t, RCP< MatrixView > > operatorViewTable_
virtual LocalOrdinal GetStorageBlockSize() const =0
Returns the block size of the storage mechanism, which is usually 1, except for Tpetra::BlockCrsMatri...
virtual RCP< const CrsGraph > getCrsGraph() const =0
Returns the CrsGraph associated with this matrix.
virtual ScalarTraits< Scalar >::magnitudeType getFrobeniusNorm() const =0
Get Frobenius norm of the matrix.
LocalOrdinal GetFixedBlockSize() const
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const =0
Print the object with some verbosity level to an FancyOStream object.
virtual void rightScale(const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x)=0
Right scale matrix using the given vector entries.
virtual const RCP< const Map > & getRowMap(viewLabel_t viewLabel) const
Returns the Map that describes the row distribution in this matrix.
const viewLabel_t SwitchToDefaultView()
virtual global_size_t getGlobalNumCols() const =0
Returns the number of global columns in the matrix.
virtual void scale(const Scalar &alpha)=0
Scale the current values of a matrix, this = alpha*this.
virtual size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const =0
Returns the current number of entries in the specified global row.
virtual const Teuchos::RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getMap() const =0
Implements DistObject interface.
virtual void insertGlobalValues(GlobalOrdinal globalRow, const ArrayView< const GlobalOrdinal > &cols, const ArrayView< const Scalar > &vals)=0
Insert matrix entries, using global IDs.
virtual Teuchos::RCP< const Map > getRangeMap() const =0
The Map associated with the range of this operator, which must be compatible with Y....
virtual Teuchos::RCP< const Map > getDomainMap() const =0
The Map associated with the domain of this operator, which must be compatible with X....
static RCP< Xpetra::StridedMap< LocalOrdinal, GlobalOrdinal, Node > > Build(UnderlyingLib lib, global_size_t numGlobalElements, GlobalOrdinal indexBase, std::vector< size_t > &stridingInfo, const Teuchos::RCP< const Teuchos::Comm< int > > &comm, LocalOrdinal stridedBlockId=-1, GlobalOrdinal offset=0, LocalGlobal lg=Xpetra::GloballyDistributed)
Map constructor with Xpetra-defined contiguous uniform distribution.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
size_t global_size_t
Global size_t object.
CombineMode
Xpetra::Combine Mode enumerable type.