10#ifndef XPETRA_BLOCKEDCRSMATRIX_DECL_HPP
11#define XPETRA_BLOCKEDCRSMATRIX_DECL_HPP
13#include <Tpetra_KokkosCompat_DefaultNode.hpp>
21#include "Xpetra_MapFactory.hpp"
22#include "Xpetra_MultiVector.hpp"
23#include "Xpetra_BlockedMultiVector.hpp"
24#include "Xpetra_MultiVectorFactory.hpp"
25#include "Xpetra_BlockedVector.hpp"
30#include "Xpetra_MapExtractor.hpp"
33#include "Xpetra_Matrix.hpp"
34#include "Xpetra_MatrixFactory.hpp"
35#include "Xpetra_CrsMatrixWrap.hpp"
37#ifdef HAVE_XPETRA_THYRA
38#include <Thyra_ProductVectorSpaceBase.hpp>
39#include <Thyra_VectorSpaceBase.hpp>
40#include <Thyra_LinearOpBase.hpp>
41#include <Thyra_BlockedLinearOpBase.hpp>
42#include <Thyra_PhysicallyBlockedLinearOpBase.hpp>
43#include "Xpetra_ThyraUtils.hpp"
46#include "Xpetra_VectorFactory.hpp"
54#ifdef HAVE_XPETRA_THYRA
55template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
61template <
class Scalar,
64 class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
73#undef XPETRA_BLOCKEDCRSMATRIX_SHORT
88 size_t numEntriesPerRow);
100 size_t numEntriesPerRow);
102#ifdef HAVE_XPETRA_THYRA
185 void replaceGlobalValues(GlobalOrdinal globalRow,
194 void replaceLocalValues(LocalOrdinal localRow,
199 virtual void setAllToScalar(
const Scalar& alpha);
202 void scale(
const Scalar& alpha);
254 size_t getLocalNumRows()
const;
260 size_t getLocalNumEntries()
const;
264 size_t getNumEntriesInLocalRow(LocalOrdinal localRow)
const;
268 size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow)
const;
273 size_t getGlobalMaxNumRowEntries()
const;
278 size_t getLocalMaxNumRowEntries()
const;
284 bool isLocallyIndexed()
const;
290 bool isGloballyIndexed()
const;
293 bool isFillComplete()
const;
310 virtual void getLocalRowCopy(LocalOrdinal LocalRow,
313 size_t& NumEntries)
const;
343 void getLocalDiagCopy(Vector& diag)
const;
346 void leftScale(
const Vector& x);
349 void rightScale(
const Vector& x);
355 virtual bool haveGlobalConstants()
const;
388 virtual void apply(
const MultiVector& X, MultiVector& Y,
Teuchos::ETransp mode, Scalar alpha, Scalar beta,
bool sumInterfaceValues,
396 virtual void apply(
const MultiVector& X, MultiVector& Y,
450 virtual void bgs_apply(
451 const MultiVector& X,
468 void doImport(
const Matrix& source,
const Import& importer,
CombineMode CM);
471 void doExport(
const Matrix& dest,
const Import& importer,
CombineMode CM);
474 void doImport(
const Matrix& source,
const Export& exporter,
CombineMode CM);
477 void doExport(
const Matrix& dest,
const Export& exporter,
CombineMode CM);
485 std::string description()
const;
492 void setObjectLabel(
const std::string& objectLabel);
496 bool hasCrsGraph()
const;
506 virtual bool isDiagonal()
const;
509 virtual size_t Rows()
const;
512 virtual size_t Cols()
const;
539#ifdef HAVE_XPETRA_THYRA
565 void Add(
const Matrix& A,
const Scalar scalarA,
Matrix& B,
const Scalar scalarB)
const;
579#ifdef HAVE_XPETRA_THYRA
588#define XPETRA_BLOCKEDCRSMATRIX_SHORT
static const EVerbosityLevel verbLevel_default
Teuchos::RCP< const MapExtractor > domainmaps_
full domain map together with all partial domain maps
virtual ~BlockedCrsMatrix()
Destructor.
Teuchos::RCP< const MapExtractor > rangemaps_
full range map together with all partial domain maps
BlockedCrsMatrix(const Teuchos::RCP< const BlockedMap > &rangeMaps, const Teuchos::RCP< const BlockedMap > &domainMaps, size_t numEntriesPerRow)
Constructor.
bool bDomainThyraMode_
boolean flag, which is true, if BlockedCrsMatrix has been created using Thyra-style numbering for sub...
std::vector< Teuchos::RCP< Matrix > > blocks_
row major matrix block storage
GlobalOrdinal global_ordinal_type
local_matrix_type::HostMirror getLocalMatrixHost() const
Access the underlying local Kokkos::CrsMatrix object.
void residual(const MultiVector &X, const MultiVector &B, MultiVector &R) const
Compute a residual R = B - (*this) * X.
bool is_diagonal_
If we're diagonal, a bunch of the extraction stuff should work.
LocalOrdinal local_ordinal_type
void Add(const Matrix &A, const Scalar scalarA, Matrix &B, const Scalar scalarB) const
Add a Xpetra::CrsMatrix to another: B = B*scalarB + A*scalarA.
bool bRangeThyraMode_
boolean flag, which is true, if BlockedCrsMatrix has been created using Thyra-style numbering for sub...
LocalOrdinal GetStorageBlockSize() const
Returns the block size of the storage mechanism.
CrsMatrix::local_matrix_type local_matrix_type
local_matrix_type getLocalMatrixDevice() const
Access the underlying local Kokkos::CrsMatrix object.
KokkosSparse::CrsMatrix< impl_scalar_type, LocalOrdinal, execution_space, void, typename local_graph_type::size_type > local_matrix_type
basic_FancyOStream< char > FancyOStream
size_t global_size_t
Global size_t object.
CombineMode
Xpetra::Combine Mode enumerable type.