10 #ifndef THYRA_EPETRA_LINEAR_OP_HPP
11 #define THYRA_EPETRA_LINEAR_OP_HPP
13 #include "Thyra_LinearOpBase.hpp"
15 #include "Thyra_ScaledLinearOpBase.hpp"
16 #include "Thyra_RowStatLinearOpBase.hpp"
17 #include "Thyra_SpmdVectorSpaceBase.hpp"
19 #include "Epetra_RowMatrix.h"
47 :
virtual public LinearOpBase<double>,
48 virtual public ScaledLinearOpBase<double>,
49 virtual public RowStatLinearOpBase<double>,
173 const RCP<
const VectorSpaceBase<double> > &
range,
174 const RCP<
const VectorSpaceBase<double> > &
domain,
200 EOpTransp *opTrans = NULL,
203 RCP<
const VectorSpaceBase<double> > *
range = NULL,
204 RCP<
const VectorSpaceBase<double> > *
domain = NULL
241 const Ptr<EOpTransp> &epetraOpTransp,
242 const Ptr<EApplyEpetraOpAs> &epetraOpApplyAs,
243 const Ptr<EAdjointEpetraOp> &epetraOpAdjointSupport
248 const Ptr<EOpTransp> &epetraOpTransp,
249 const Ptr<EApplyEpetraOpAs> &epetraOpApplyAs,
250 const Ptr<EAdjointEpetraOp> &epetraOpAdjointSupport
292 const EOpTransp M_trans,
293 const MultiVectorBase<double> &X,
294 const Ptr<MultiVectorBase<double> > &Y,
311 virtual void scaleLeftImpl(
const VectorBase<double> &row_scaling);
314 virtual void scaleRightImpl(
const VectorBase<double> &col_scaling);
323 const RowStatLinearOpBaseUtils::ERowStat rowStat)
const;
327 const RowStatLinearOpBaseUtils::ERowStat rowStat,
328 const Ptr<VectorBase<double> > &rowStatVec)
const;
413 partialNonconstEpetraLinearOp(
414 const RCP<
const VectorSpaceBase<double> > &range,
415 const RCP<
const VectorSpaceBase<double> > &domain,
417 EOpTransp opTrans = NOTRANS,
429 nonconstEpetraLinearOp(
431 EOpTransp opTrans = NOTRANS,
447 EOpTransp opTrans = NOTRANS,
461 nonconstEpetraLinearOp(
463 const std::string &label,
464 EOpTransp opTrans = NOTRANS,
480 const std::string &label,
481 EOpTransp opTrans = NOTRANS,
492 #endif // THYRA_EPETRA_LINEAR_OP_HPP
494 #if defined(Thyra_SHOW_DEPRECATED_WARNINGS)
496 #warning "The ThyraEpetraAdapters package is deprecated"
RCP< const SpmdVectorSpaceBase< double > > spmdDomain() const
Return a smart pointer to the SpmdVectorSpaceBase object for the domain.
virtual RCP< const SpmdVectorSpaceBase< double > > allocateDomain(const RCP< Epetra_Operator > &op, EOpTransp op_trans) const
Allocate the domain space of the operator.
Concrete LinearOpBase adapter subclass for Epetra_Operator object.
virtual bool supportsScaleRightImpl() const
void partiallyInitialize(const RCP< const VectorSpaceBase< double > > &range, const RCP< const VectorSpaceBase< double > > &domain, const RCP< Epetra_Operator > &op, EOpTransp opTrans=NOTRANS, EApplyEpetraOpAs applyAs=EPETRA_OP_APPLY_APPLY, EAdjointEpetraOp adjointSupport=EPETRA_OP_ADJOINT_SUPPORTED)
Partially initialize.
RCP< const SpmdVectorSpaceBase< double > > spmdRange() const
Return a smart pointer to the SpmdVectorSpaceBase object for the range.
virtual bool rowStatIsSupportedImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat) const
virtual bool supportsScaleLeftImpl() const
Abstract base class for all LinearOpBase objects that can return an Epetra_Operator view of themselve...
RCP< const SpmdVectorSpaceBase< double > > domain_
std::string description() const
void getEpetraOpView(const Ptr< RCP< const Epetra_Operator > > &epetraOp, const Ptr< EOpTransp > &epetraOpTransp, const Ptr< EApplyEpetraOpAs > &epetraOpApplyAs, const Ptr< EAdjointEpetraOp > &epetraOpAdjointSupport) const
RCP< const SpmdVectorSpaceBase< double > > range_
void initialize(const RCP< Epetra_Operator > &op, EOpTransp opTrans=NOTRANS, EApplyEpetraOpAs applyAs=EPETRA_OP_APPLY_APPLY, EAdjointEpetraOp adjointSupport=EPETRA_OP_ADJOINT_SUPPORTED, const RCP< const VectorSpaceBase< double > > &range=Teuchos::null, const RCP< const VectorSpaceBase< double > > &domain=Teuchos::null)
Fully initialize.
virtual void scaleLeftImpl(const VectorBase< double > &row_scaling)
EAdjointEpetraOp adjointSupport_
EAdjointEpetraOp
Determine if adjoints are supported on Epetra_Opeator or not.
EpetraLinearOp()
Construct to uninitialized.
void setFullyInitialized(bool isFullyInitialized=true)
Set to fully initialized.
void getNonconstEpetraOpView(const Ptr< RCP< Epetra_Operator > > &epetraOp, const Ptr< EOpTransp > &epetraOpTransp, const Ptr< EApplyEpetraOpAs > &epetraOpApplyAs, const Ptr< EAdjointEpetraOp > &epetraOpAdjointSupport)
void computeAbsRowSum(Epetra_Vector &rowStatVec_in) const
Compute the absolute row sum for this matrix.
const Epetra_Map & getRangeMap() const
RCP< const VectorSpaceBase< double > > range() const
RCP< const VectorSpaceBase< double > > domain() const
void applyImpl(const EOpTransp M_trans, const MultiVectorBase< double > &X, const Ptr< MultiVectorBase< double > > &Y, const double alpha, const double beta) const
void describe(FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
basic_FancyOStream< char > FancyOStream
EApplyEpetraOpAs
Determine how the apply an Epetra_Operator as a linear operator.
void uninitialize(RCP< Epetra_Operator > *op=NULL, EOpTransp *opTrans=NULL, EApplyEpetraOpAs *applyAs=NULL, EAdjointEpetraOp *adjointSupport=NULL, RCP< const VectorSpaceBase< double > > *range=NULL, RCP< const VectorSpaceBase< double > > *domain=NULL)
Set to uninitialized and optionally return the current state.
const Epetra_Map & getDomainMap() const
virtual void getRowStatImpl(const RowStatLinearOpBaseUtils::ERowStat rowStat, const Ptr< VectorBase< double > > &rowStatVec) const
virtual RCP< const SpmdVectorSpaceBase< double > > allocateRange(const RCP< Epetra_Operator > &op, EOpTransp op_trans) const
Allocate the range space of the operator.
bool opSupportedImpl(EOpTransp M_trans) const
Apply using Epetra_Operator::Apply(...)
virtual void scaleRightImpl(const VectorBase< double > &col_scaling)
EApplyEpetraOpAs applyAs_
RCP< Epetra_Operator > op_
RCP< const LinearOpBase< double > > clone() const
RCP< Epetra_RowMatrix > rowMatrix_
RCP< Epetra_Operator > epetra_op()