46 #ifndef BELOS_XPETRA_ADAPTER_OPERATOR_HPP 47 #define BELOS_XPETRA_ADAPTER_OPERATOR_HPP 51 #include "Xpetra_ConfigDefs.hpp" 53 #ifdef HAVE_XPETRA_EPETRA 54 #include <BelosOperator.hpp> 61 using Teuchos::rcpFromRef;
76 template <
class Scalar,
77 class LocalOrdinal = int,
78 class GlobalOrdinal = LocalOrdinal,
79 class Node = KokkosClassic::DefaultNode::DefaultNodeType>
81 public OperatorT<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
82 #ifdef HAVE_XPETRA_TPETRA 83 ,
public OperatorT<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
93 XpetraOp (
const RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > & Op) : Op_(Op) {}
107 void Apply (
const Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& x, Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& y, ETrans trans=NOTRANS )
const {
109 "Belos::XpetraOp::Apply, transpose mode != NOTRANS not supported.");
117 #ifdef HAVE_XPETRA_TPETRA 124 void Apply (
const Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& x, Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& y, ETrans trans=NOTRANS )
const {
126 "Belos::MueLuTpetraOp::Apply, transpose mode != NOTRANS not supported.");
129 Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & temp_x =
const_cast<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> &
>(x);
131 const Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tX(rcpFromRef(temp_x));
132 Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tY(rcpFromRef(y));
143 RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
Op_;
149 public OperatorT<Xpetra::MultiVector<double, int, int> >
150 #ifdef HAVE_XPETRA_TPETRA 151 ,
public OperatorT<Tpetra::MultiVector<double, int, int> >
153 #ifdef HAVE_XPETRA_EPETRA 160 typedef Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal>::node_type
Node;
164 XpetraOp(
const RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> > & Op) : Op_(Op) {}
168 void Apply (
const Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& x, Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& y, ETrans trans=NOTRANS )
const {
170 "Belos::XpetraOp::Apply, transpose mode != NOTRANS not supported.");
178 #ifdef HAVE_XPETRA_TPETRA 179 void Apply (
const Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& x, Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& y, ETrans trans=NOTRANS )
const {
181 "Belos::MueLuTpetraOp::Apply, transpose mode != NOTRANS not supported.");
183 Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> & temp_x =
const_cast<Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> &
>(x);
185 const Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tX(rcpFromRef(temp_x));
186 Xpetra::TpetraMultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tY(rcpFromRef(y));
195 #ifdef HAVE_XPETRA_EPETRA 202 void Apply (
const Epetra_MultiVector& x, Epetra_MultiVector& y, ETrans trans=NOTRANS )
const {
204 "Belos::MueLuTpetraOp::Apply, transpose mode != NOTRANS not supported.");
206 Epetra_MultiVector & temp_x =
const_cast<Epetra_MultiVector &
>(x);
208 const Xpetra::EpetraMultiVectorT<GlobalOrdinal,Node> tX(rcpFromRef(temp_x));
209 Xpetra::EpetraMultiVectorT<GlobalOrdinal,Node> tY(rcpFromRef(y));
220 RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
Op_;
225 #endif // BELOS_XPETRA_ADAPTER_OPERATOR_HPP
void Apply(const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x, Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &y, ETrans trans=NOTRANS) const
virtual ~XpetraOp()
Destructor.
XpetraOp(const RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &Op)
Default constructor.
XpetraOp(const RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &Op)
Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal >::node_type Node
XpetraOpFailure(const std::string &what_arg)
XpetraOpFailure is thrown when a return value from an MueLu call on an Xpetra::Operator or MueLu::Hie...
RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op_
RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op_
void Apply(const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x, Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &y, ETrans trans=NOTRANS) const
This routine takes the Xpetra::MultiVector x and applies the operator to it resulting in the Xpetra::...