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"
62 #if defined(XPETRA_ENABLE_DEPRECATED_CODE)
64 #warning "The header file Trilinos/packages/xpetra/src/Operator/Xpetra_EpetraOperator.hpp is deprecated."
67 #error "The header file Trilinos/packages/xpetra/src/Operator/Xpetra_EpetraOperator.hpp is deprecated."
72 template <
class EpetraGlobalOrdinal,
class Node>
82 virtual const Teuchos::RCP<const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node> >
getDomainMap()
const {
84 return toXpetra<GlobalOrdinal, Node>(op_->OperatorDomainMap());
88 virtual const Teuchos::RCP<const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node> >
getRangeMap()
const {
90 return toXpetra<GlobalOrdinal, Node>(op_->OperatorRangeMap());
102 Teuchos::ETransp mode = Teuchos::NO_TRANS,
103 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
104 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero())
const {
111 "Xpetra::EpetraOperator->apply(): can only accept mode == NO_TRANS or mode == TRANS");
113 "Xpetra::EpetraOperator->apply(): cannot apply transpose as underlying Epetra operator does not support it");
116 RCP<Epetra_MultiVector> epY = eY.getEpetra_MultiVector();
117 RCP<Epetra_MultiVector> tmp = Teuchos::rcp(
new Epetra_MultiVector(*epY));
120 op_->SetUseTranspose(mode == Teuchos::TRANS);
130 int err = op_->SetUseTranspose(
true);
131 op_->SetUseTranspose(
false);
143 return "Epetra_Operator";
147 void describe(Teuchos::FancyOStream &out,
const Teuchos::EVerbosityLevel verbLevel = Teuchos::Describable::verbLevel_default)
const {
149 out <<
"Epetra_Operator" << std::endl;
165 using STS = Teuchos::ScalarTraits<Scalar>;
166 R.
update(STS::one(), B, STS::zero());
167 this->apply(X, R, Teuchos::NO_TRANS, -STS::one(), STS::one());
178 template <
class EpetraGlobalOrdinal,
class Node>
188 virtual Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >
getDomainMap()
const {
190 return toXpetra<GlobalOrdinal, Node>(
op_->OperatorDomainMap());
194 virtual Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >
getRangeMap()
const {
196 return toXpetra<GlobalOrdinal, Node>(
op_->OperatorRangeMap());
208 Teuchos::ETransp mode = Teuchos::NO_TRANS,
209 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
210 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero())
const {
217 "Xpetra::EpetraOperator->apply(): can only accept mode == NO_TRANS or mode == TRANS");
219 "Xpetra::EpetraOperator->apply(): cannot apply transpose as underlying Epetra operator does not support it");
222 RCP<Epetra_MultiVector> epY = eY.getEpetra_MultiVector();
223 RCP<Epetra_MultiVector> tmp = Teuchos::rcp(
new Epetra_MultiVector(*epY));
226 op_->SetUseTranspose(mode == Teuchos::TRANS);
236 int err =
op_->SetUseTranspose(
true);
237 op_->SetUseTranspose(
false);
249 return "Epetra_Operator";
253 void describe(Teuchos::FancyOStream &out,
const Teuchos::EVerbosityLevel verbLevel = Teuchos::Describable::verbLevel_default)
const {
255 out <<
"Epetra_Operator" << std::endl;
271 using STS = Teuchos::ScalarTraits<Scalar>;
272 R.
update(STS::one(), B, STS::zero());
273 this->
apply(X, R, Teuchos::NO_TRANS, -STS::one(), STS::one());
285 #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.