46 #ifndef XPETRA_EPETRAOPERATOR_HPP 47 #define XPETRA_EPETRAOPERATOR_HPP 51 #include <Epetra_Operator.hpp> 63 template<
class EpetraGlobalOrdinal>
75 virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
getDomainMap()
const {
81 virtual Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
getRangeMap()
const {
95 Teuchos::ETransp mode = Teuchos::NO_TRANS,
96 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
97 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero())
const {
104 "Xpetra::EpetraOperator->apply(): can only accept mode == NO_TRANS or mode == TRANS");
106 "Xpetra::EpetraOperator->apply(): cannot apply transpose as underlying Epetra operator does not support it");
109 RCP<Epetra_MultiVector> epY = eY.getEpetra_MultiVector();
110 RCP<Epetra_MultiVector> tmp = Teuchos::rcp(
new Epetra_MultiVector(*epY));
113 bool curTranspose =
op_->UseTranspose();
114 op_->SetUseTranspose(mode == Teuchos::TRANS);
116 op_->setUseTranspose(curTranspose);
124 if (
op_->UseTransepose()) {
129 int err =
op_->SetUseTranspose(
true);
130 SetUseTranspose(
false);
143 void describe(Teuchos::FancyOStream &out,
const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default)
const {
145 out <<
"Epetra_Operator" << std::endl;
154 EpetraOperator(
const Teuchos::RCP<Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node> > &op) :
op_(op) { }
160 RCP< Epetra_Operator>
op_;
167 #endif // XPETRA_EPETRAOPERATOR_HPP virtual bool hasTransposeApply() const
Whether this operator supports applying the transpose or conjugate transpose.
Exception throws to report errors in the internal logical of the program.
Node node_type
The Kokkos Node type.
RCP< Epetra_Operator > op_
The Tpetra::Operator which this class wraps.
#define XPETRA_ERR_CHECK(arg)
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
The Map associated with the range of this operator, which must be compatible with Y...
std::string description() const
A simple one-line description of this object.
Operator< double, int, GlobalOrdinal >::node_type Node
Exception throws when you call an unimplemented method of Xpetra.
EpetraGlobalOrdinal GlobalOrdinal
#define XPETRA_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
The Map associated with the domain of this operator, which must be compatible with X...
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)
EpetraOperator(const Teuchos::RCP< Tpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &op)
TpetraOperator constructor to wrap a Tpetra::Operator object.
#define XPETRA_MONITOR(funcName)
virtual void apply(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const
Computes the operator-multivector application.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print the object with the given verbosity level to a FancyOStream.