42 #ifndef THYRA_TPETRA_LINEAR_OP_DECL_HPP
43 #define THYRA_TPETRA_LINEAR_OP_DECL_HPP
45 #include "Thyra_LinearOpDefaultBase.hpp"
47 #include "Thyra_ScaledLinearOpBase.hpp"
48 #include "Thyra_RowStatLinearOpBase.hpp"
49 #include "Tpetra_Operator.hpp"
52 #if defined(HAVE_THYRA_EPETRA) && defined(HAVE_TPETRA_EPETRA)
53 # define HAVE_THYRA_TPETRA_EPETRA
56 #ifdef HAVE_THYRA_TPETRA_EPETRA
58 # include "Tpetra_EpetraRowMatrix.hpp"
71 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal=LocalOrdinal,
72 class Node=KokkosClassic::DefaultNode::DefaultNodeType>
74 :
virtual public Thyra::LinearOpDefaultBase<Scalar>,
75 virtual public ScaledLinearOpBase<Scalar>,
76 virtual public Thyra::RowStatLinearOpBase<Scalar>
77 #ifdef HAVE_THYRA_TPETRA_EPETRA
91 const RCP<
const VectorSpaceBase<Scalar> > &rangeSpace,
92 const RCP<
const VectorSpaceBase<Scalar> > &domainSpace,
93 const RCP<Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraOperator
98 const RCP<
const VectorSpaceBase<Scalar> > &rangeSpace,
99 const RCP<
const VectorSpaceBase<Scalar> > &domainSpace,
100 const RCP<
const Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraOperator
124 #ifdef HAVE_THYRA_TPETRA_EPETRA
130 void getNonconstEpetraOpView(
132 const Ptr<EOpTransp> &epetraOpTransp,
133 const Ptr<EApplyEpetraOpAs> &epetraOpApplyAs,
134 const Ptr<EAdjointEpetraOp> &epetraOpAdjointSupport
137 void getEpetraOpView(
139 const Ptr<EOpTransp> &epetraOpTransp,
140 const Ptr<EApplyEpetraOpAs> &epetraOpApplyAs,
141 const Ptr<EAdjointEpetraOp> &epetraOpAdjointSupport
146 #endif // HAVE_THYRA_TPETRA_EPETRA
158 const Thyra::EOpTransp M_trans,
159 const Thyra::MultiVectorBase<Scalar> &X_in,
160 const Teuchos::Ptr<Thyra::MultiVectorBase<Scalar> > &Y_inout,
177 virtual void scaleLeftImpl(
const VectorBase<Scalar> &row_scaling);
180 virtual void scaleRightImpl(
const VectorBase<Scalar> &col_scaling);
189 const RowStatLinearOpBaseUtils::ERowStat rowStat)
const;
193 const RowStatLinearOpBaseUtils::ERowStat rowStat,
194 const Ptr<VectorBase<Scalar> > &rowStatVec)
const;
209 #ifdef HAVE_THYRA_TPETRA_EPETRA
213 template<
class TpetraOperator_t>
215 const RCP<
const VectorSpaceBase<Scalar> > &rangeSpace,
216 const RCP<
const VectorSpaceBase<Scalar> > &domainSpace,
227 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
230 const RCP<
const VectorSpaceBase<Scalar> > &rangeSpace,
231 const RCP<
const VectorSpaceBase<Scalar> > &domainSpace,
232 const RCP<Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraOperator
237 op->initialize(rangeSpace, domainSpace, tpetraOperator);
246 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
249 const RCP<
const VectorSpaceBase<Scalar> > &rangeSpace,
250 const RCP<
const VectorSpaceBase<Scalar> > &domainSpace,
251 const RCP<
const Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> > &tpetraOperator
256 op->constInitialize(rangeSpace, domainSpace, tpetraOperator);
264 #endif // THYRA_TPETRA_LINEAR_OP_DECL_HPP