46 #ifndef XPETRA_EPETRAOPERATOR_HPP
47 #define XPETRA_EPETRAOPERATOR_HPP
51 #include <Epetra_Operator.h>
52 #include <Epetra_Map.h>
54 #include "Xpetra_Map.hpp"
56 #include "Xpetra_MultiVector.hpp"
64 template <
class EpetraGlobalOrdinal,
class Node>
74 virtual const Teuchos::RCP<const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node> >
getDomainMap()
const {
76 return toXpetra<GlobalOrdinal, Node>(
op_->OperatorDomainMap());
80 virtual const Teuchos::RCP<const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node> >
getRangeMap()
const {
82 return toXpetra<GlobalOrdinal, Node>(
op_->OperatorRangeMap());
94 Teuchos::ETransp mode = Teuchos::NO_TRANS,
95 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
96 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero())
const {
103 "Xpetra::EpetraOperator->apply(): can only accept mode == NO_TRANS or mode == TRANS");
105 "Xpetra::EpetraOperator->apply(): cannot apply transpose as underlying Epetra operator does not support it");
108 RCP<Epetra_MultiVector> epY = eY.getEpetra_MultiVector();
109 RCP<Epetra_MultiVector> tmp = Teuchos::rcp(
new Epetra_MultiVector(*epY));
112 op_->SetUseTranspose(mode == Teuchos::TRANS);
122 int err =
op_->SetUseTranspose(
true);
123 op_->SetUseTranspose(
false);
135 return "Epetra_Operator";
139 void describe(Teuchos::FancyOStream &out,
const Teuchos::EVerbosityLevel verbLevel = Teuchos::Describable::verbLevel_default)
const {
141 out <<
"Epetra_Operator" << std::endl;
157 using STS = Teuchos::ScalarTraits<Scalar>;
158 R.
update(STS::one(), B, STS::zero());
159 this->
apply(X, R, Teuchos::NO_TRANS, -STS::one(), STS::one());
170 template <
class EpetraGlobalOrdinal,
class Node>
180 virtual Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >
getDomainMap()
const {
182 return toXpetra<GlobalOrdinal, Node>(
op_->OperatorDomainMap());
186 virtual Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >
getRangeMap()
const {
188 return toXpetra<GlobalOrdinal, Node>(
op_->OperatorRangeMap());
200 Teuchos::ETransp mode = Teuchos::NO_TRANS,
201 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
202 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero())
const {
209 "Xpetra::EpetraOperator->apply(): can only accept mode == NO_TRANS or mode == TRANS");
211 "Xpetra::EpetraOperator->apply(): cannot apply transpose as underlying Epetra operator does not support it");
214 RCP<Epetra_MultiVector> epY = eY.getEpetra_MultiVector();
215 RCP<Epetra_MultiVector> tmp = Teuchos::rcp(
new Epetra_MultiVector(*epY));
218 op_->SetUseTranspose(mode == Teuchos::TRANS);
228 int err =
op_->SetUseTranspose(
true);
229 op_->SetUseTranspose(
false);
241 return "Epetra_Operator";
245 void describe(Teuchos::FancyOStream &out,
const Teuchos::EVerbosityLevel verbLevel = Teuchos::Describable::verbLevel_default)
const {
247 out <<
"Epetra_Operator" << std::endl;
263 using STS = Teuchos::ScalarTraits<Scalar>;
264 R.
update(STS::one(), B, STS::zero());
265 this->
apply(X, R, Teuchos::NO_TRANS, -STS::one(), STS::one());
277 #endif // XPETRA_EPETRAOPERATOR_HPP
std::string description() const
A simple one-line description of this object.
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.
RCP< Epetra_Operator > op_
The Tpetra::Operator which this class wraps.
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...
Exception throws to report errors in the internal logical of the program.
EpetraInverseOperator(const Teuchos::RCP< Epetra_Operator > &op)
EpetraOperator constructor to wrap a Epetra_Operator object.
virtual void update(const Scalar &alpha, const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Scalar &beta)=0
Update multi-vector values with scaled values of A, this = beta*this + alpha*A.
RCP< Epetra_Operator > op_
The Tpetra::Operator which this class wraps.
#define XPETRA_ERR_CHECK(arg)
EpetraGlobalOrdinal GlobalOrdinal
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.
void residual(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &R) const
Compute a residual R = B - (*this) * X.
EpetraOperator(const Teuchos::RCP< Epetra_Operator > &op)
EpetraOperator constructor to wrap a Epetra_Operator object.
virtual bool hasTransposeApply() const
Whether this operator supports applying the transpose or conjugate transpose.
Exception throws when you call an unimplemented method of Xpetra.
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...
#define XPETRA_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
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.
virtual bool hasTransposeApply() const
Whether this operator supports applying the transpose or conjugate transpose.
EpetraGlobalOrdinal GlobalOrdinal
virtual const Teuchos::RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getDomainMap() const
The Map associated with the domain of this operator, which must be compatible with X...
virtual const Teuchos::RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getRangeMap() const
The Map associated with the range of this operator, which must be compatible with Y...
#define XPETRA_MONITOR(funcName)
std::string description() const
A simple one-line description of this object.
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 residual(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &R) const
Compute a residual R = B - (*this) * X.