47 #ifndef THYRA_XPETRA_LINEAR_OP_HPP
48 #define THYRA_XPETRA_LINEAR_OP_HPP
63 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
68 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
70 const RCP<
const VectorSpaceBase<Scalar> > &rangeSpace,
71 const RCP<
const VectorSpaceBase<Scalar> > &domainSpace,
75 initializeImpl(rangeSpace, domainSpace, xpetraOperator);
79 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
81 const RCP<
const VectorSpaceBase<Scalar> > &rangeSpace,
82 const RCP<
const VectorSpaceBase<Scalar> > &domainSpace,
86 initializeImpl(rangeSpace, domainSpace, xpetraOperator);
90 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
94 return xpetraOperator_.getNonconstObj();
98 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
102 return xpetraOperator_;
109 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
117 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
126 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
128 Thyra::EOpTransp M_trans)
const
133 if (M_trans == NOTRANS)
136 if (M_trans == CONJ) {
142 return xpetraOperator_->hasTransposeApply();
146 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
148 const Thyra::EOpTransp M_trans,
149 const Thyra::MultiVectorBase<Scalar> &X_in,
150 const Teuchos::Ptr<Thyra::MultiVectorBase<Scalar> > &Y_inout,
155 using Teuchos::rcpFromRef;
156 using Teuchos::rcpFromPtr;
162 Xpetra::ThyraUtils<Scalar,LocalOrdinal,GlobalOrdinal,Node>::toXpetra(rcpFromRef(X_in), comm);
164 Xpetra::ThyraUtils<Scalar,LocalOrdinal,GlobalOrdinal,Node>::toXpetra(rcpFromPtr(Y_inout), comm);
173 xpetraOperator_->apply(*tX_in, *tY_inout, transp, alpha, beta);
178 Teuchos::ptr_dynamic_cast<Thyra::ProductMultiVectorBase<Scalar> >(Y_inout);
179 if(prodY_inout != Teuchos::null) {
190 mueXop->GetHierarchy()->GetLevel(0)->template Get<RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal,Node> > >(
"A");
197 rgMapExtractor = bA->getRangeMapExtractor();
202 Xpetra::ThyraUtils<Scalar,LocalOrdinal,GlobalOrdinal,Node>::updateThyra(
205 Teuchos::rcpFromPtr(Y_inout));
212 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
213 template<
class XpetraOperator_t>
215 const RCP<
const VectorSpaceBase<Scalar> > &rangeSpace,
216 const RCP<
const VectorSpaceBase<Scalar> > &domainSpace,
225 rangeSpace_ = rangeSpace;
226 domainSpace_ = domainSpace;
227 xpetraOperator_ = xpetraOperator;
234 #endif // THYRA_XPETRA_LINEAR_OP_HPP