10#ifndef XPETRA_HELPERS_DEF_HPP
11#define XPETRA_HELPERS_DEF_HPP
17template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
27 return tmp_ECrsMtx->getTpetra_CrsMatrix();
30template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
39 return tmp_ECrsMtx->getTpetra_CrsMatrixNonConst();
42template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
51 return *tmp_TCrsMtx->getTpetra_CrsMatrix();
58template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
67 return *Teuchos::rcp_const_cast<Tpetra::CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>(tmp_TCrsMtx->getTpetra_CrsMatrix());
74template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
75bool Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::isTpetraCrs(
RCP<Matrix> Op) {
77 if (crsOp == Teuchos::null)
return false;
80 if (tmp_ECrsMtx == Teuchos::null)
86template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
87bool Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::isTpetraCrs(
const Matrix& Op) {
92 if (tmp_ECrsMtx == Teuchos::null)
101template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
109 return tmp_BlockCrs->getTpetra_BlockCrsMatrix();
112template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
120 return tmp_BlockCrs->getTpetra_BlockCrsMatrixNonConst();
123template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
130 return *tmp_BlockCrs->getTpetra_BlockCrsMatrix();
136template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
143 return *tmp_BlockCrs->getTpetra_BlockCrsMatrixNonConst();
149template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
150bool Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::isTpetraBlockCrs(
RCP<Matrix> Op) {
152 if (crsOp == Teuchos::null)
return false;
155 if (tmp_BlockCrs == Teuchos::null)
161template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
162bool Helpers<Scalar, LocalOrdinal, GlobalOrdinal, Node>::isTpetraBlockCrs(
const Matrix& Op) {
167 if (tmp_BlockCrs == Teuchos::null)
176template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
184 using Teuchos::rcp_implicit_cast;
185 using Teuchos::rcpFromRef;
193 Aprime = transposer_type(Aprime).createTranspose();
198 addParams->set(
"Call fillComplete",
false);
200 Tpetra::MatrixMatrix::add<SC, LO, GO, NO>(beta, transposeB, B, alpha,
false, *Aprime, *C, Teuchos::null, Teuchos::null, addParams);
201 return rcp_implicit_cast<Matrix>(
rcp(
new CrsWrap(rcp_implicit_cast<CrsType>(
rcp(
new XTCrsType(C))))));
209 Bprime = transposer_type(Bprime).createTranspose();
211 if (!(Aprime->getRowMap()->isSameAs(*(Bprime->getRowMap())))) {
212 auto import = rcp(new import_type(Bprime->getRowMap(), Aprime->getRowMap()));
216 LO numLocalRows = Aprime->getLocalNumRows();
219 for (LO i = 0; i < numLocalRows; i++) {
220 allocPerRow[i] = Aprime->getNumEntriesInLocalRow(i) + Bprime->getNumEntriesInLocalRow(i);
226 *Aprime,
false, alpha,
227 *Bprime,
false, beta,
229 return rcp(
new CrsWrap(rcp_implicit_cast<CrsType>(
rcp(
new XTCrsType(C)))));
bool isFillComplete() const override
Concrete implementation of Xpetra::Matrix.
RCP< CrsMatrix > getCrsMatrix() const
Exception indicating invalid cast attempted.
Tpetra::CrsMatrix< SC, LO, GO, NO > tcrs_matrix_type
Xpetra-specific matrix class.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > add(const Scalar &alpha, const bool transposeA, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Scalar &beta, const bool transposeB, const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, 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 > ¶ms=Teuchos::null)
void Add(const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, bool transposeA, Scalar scalarA, CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, Scalar scalarB)
Teuchos::RCP< CrsMatrixType > importAndFillCompleteCrsMatrix(const Teuchos::RCP< const CrsMatrixType > &sourceMatrix, const Import< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > &importer, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)