12#ifndef XPETRA_MATRIXFACTORY2_DECL_HPP
13#define XPETRA_MATRIXFACTORY2_DECL_HPP
17#include "Xpetra_Matrix.hpp"
18#include "Xpetra_CrsMatrixWrap.hpp"
20#include "Xpetra_Map.hpp"
21#include "Xpetra_BlockedMap.hpp"
23#include "Xpetra_BlockedVector.hpp"
28template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
30#undef XPETRA_MATRIXFACTORY2_SHORT
36#define XPETRA_MATRIXFACTORY2_SHORT
46#undef XPETRA_MATRIXFACTORY2_SHORT
51 if (oldOp == Teuchos::null)
58 if (oldTCrsOp != Teuchos::null) {
61 if (setFixedBlockSize)
62 newOp->SetFixedBlockSize(A->GetFixedBlockSize());
70#define XPETRA_MATRIXFACTORY2_SHORT
72#ifdef HAVE_XPETRA_INT_LONG_LONG
74class MatrixFactory2<double, int, long long, Node> {
75 typedef double Scalar;
76 typedef int LocalOrdinal;
77 typedef long long GlobalOrdinal;
79#undef XPETRA_MATRIXFACTORY2_SHORT
83 RCP<const CrsMatrixWrap> oldOp = Teuchos::rcp_dynamic_cast<const CrsMatrixWrap>(A);
84 if (oldOp == Teuchos::null)
85 throw Exceptions::BadCast(
"Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
87 RCP<const CrsMatrix> oldCrsOp = oldOp->getCrsMatrix();
90 RCP<const TpetraCrsMatrix> oldTCrsOp = Teuchos::rcp_dynamic_cast<const TpetraCrsMatrix>(oldCrsOp);
91 if (oldTCrsOp != Teuchos::null) {
92 RCP<CrsMatrix> newTCrsOp(
new TpetraCrsMatrix(*oldTCrsOp));
93 RCP<CrsMatrixWrap> newOp(
new CrsMatrixWrap(newTCrsOp));
94 if (setFixedBlockSize)
95 newOp->SetFixedBlockSize(A->GetFixedBlockSize());
104#define XPETRA_MATRIXFACTORY2_SHORT
108#define XPETRA_MATRIXFACTORY2_SHORT
Concrete implementation of Xpetra::Matrix.
Exception indicating invalid cast attempted.
static RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > BuildCopy(const RCP< const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > A, bool setFixedBlockSize=true)
static RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > BuildCopy(const RCP< const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > A, bool setFixedBlockSize=true)
Xpetra-specific matrix class.