Thyra Package Browser (Single Doxygen Collection) Version of the Day
Private Member Functions | Private Attributes | Related Functions
Thyra::EpetraLinearOp Class Reference

Concrete LinearOpBase adapter subclass for Epetra_Operator object. More...

#include <Thyra_EpetraLinearOp.hpp>

Inheritance diagram for Thyra::EpetraLinearOp:
Inheritance graph
[legend]

List of all members.

Private Member Functions

const Epetra_Map & getRangeMap () const
const Epetra_Map & getDomainMap () const

Private Attributes

bool isFullyInitialized_
RCP< Epetra_Operator > op_
EOpTransp opTrans_
EApplyEpetraOpAs applyAs_
EAdjointEpetraOp adjointSupport_
RCP< const SpmdVectorSpaceBase
< double > > 
range_
RCP< const SpmdVectorSpaceBase
< double > > 
domain_

Related Functions

(Note that these are not member functions.)

RCP< EpetraLinearOpnonconstEpetraLinearOp ()
 Default nonmember constructor.
RCP< EpetraLinearOppartialNonconstEpetraLinearOp (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 initialized EpetraLinearOp.
RCP< EpetraLinearOpnonconstEpetraLinearOp (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)
 Dynamically allocate an const EpetraLinearOp to wrap a const Epetra_Operator object.
RCP< const EpetraLinearOpepetraLinearOp (const RCP< const 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)
 Dynamically allocate a nonconst EpetraLinearOp to wrap a const Epetra_Operator object.
RCP< EpetraLinearOpnonconstEpetraLinearOp (const RCP< Epetra_Operator > &op, const std::string &label, 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)
 Dynamically allocate an const EpetraLinearOp to wrap a const Epetra_Operator object and give it a string label.
RCP< const EpetraLinearOpepetraLinearOp (const RCP< const Epetra_Operator > &op, const std::string &label, EOpTransp opTrans=NOTRANS, EApplyEpetraOpAs applyAs=EPETRA_OP_APPLY_APPLY, EAdjointEpetraOp adjointSupport=EPETRA_OP_ADJOINT_SUPPORTED, const RCP< const SpmdVectorSpaceBase< double > > &range=Teuchos::null, const RCP< const SpmdVectorSpaceBase< double > > &domain=Teuchos::null)
 Dynamically allocate a nonconst EpetraLinearOp to wrap a const Epetra_Operator object.

Constructors / initializers / accessors

 EpetraLinearOp ()
 Construct to uninitialized.
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.
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.
void setFullyInitialized (bool isFullyInitialized=true)
 Set to fully initialized.
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.
RCP< const SpmdVectorSpaceBase
< double > > 
spmdRange () const
 Return a smart pointer to the SpmdVectorSpaceBase object for the range.
RCP< const SpmdVectorSpaceBase
< double > > 
spmdDomain () const
 Return a smart pointer to the SpmdVectorSpaceBase object for the domain.
RCP< Epetra_Operator > epetra_op ()
 
RCP< const Epetra_Operator > epetra_op () const
 

Overridden from EpetraLinearOpBase

void getNonconstEpetraOpView (const Ptr< RCP< Epetra_Operator > > &epetraOp, const Ptr< EOpTransp > &epetraOpTransp, const Ptr< EApplyEpetraOpAs > &epetraOpApplyAs, const Ptr< EAdjointEpetraOp > &epetraOpAdjointSupport)
 
void getEpetraOpView (const Ptr< RCP< const Epetra_Operator > > &epetraOp, const Ptr< EOpTransp > &epetraOpTransp, const Ptr< EApplyEpetraOpAs > &epetraOpApplyAs, const Ptr< EAdjointEpetraOp > &epetraOpAdjointSupport) const
 

Overridden from LinearOpBase

RCP< const VectorSpaceBase
< double > > 
range () const
 
RCP< const VectorSpaceBase
< double > > 
domain () const
 
RCP< const LinearOpBase< double > > clone () const
 

Overridden from Teuchos::Describable

std::string description () const
 
void describe (FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
 

Protected member functions overridden from LinearOpBase.

bool opSupportedImpl (EOpTransp M_trans) const
 
void applyImpl (const EOpTransp M_trans, const MultiVectorBase< double > &X, const Ptr< MultiVectorBase< double > > &Y, const double alpha, const double beta) const
 

Allocators for domain and range spaces

virtual RCP< const
SpmdVectorSpaceBase< double > > 
allocateDomain (const RCP< Epetra_Operator > &op, EOpTransp op_trans) const
 Allocate the domain space of the operator.
virtual RCP< const
SpmdVectorSpaceBase< double > > 
allocateRange (const RCP< Epetra_Operator > &op, EOpTransp op_trans) const
 Allocate the range space of the operator.

Detailed Description

Concrete LinearOpBase adapter subclass for Epetra_Operator object.

This subclass can be used to represent the non-transposed operator or transposed operator defined by an Epetra_Operator object. This class can implement apply() using either Epetra_Operator::Apply() or Epetra_Operator::ApplyInverse(). In addition, the user can specify whether adjoints are supported or not.

Partial Automatic Change Propagation: This class shall maintain no state with respect to the values of the internally stored Epetra_Operator object. Therefore, as long as the domain and range maps do not change, the the Epetra_Operator can be changed and this will automatically update *this object. This simplifies some types of update operations. Since this is a simple concrete class, this is harmless. However, if the range and domain maps change, then one must call the this->initialize() function.

Definition at line 61 of file Thyra_EpetraLinearOp.hpp.


Constructor & Destructor Documentation

Thyra::EpetraLinearOp::EpetraLinearOp ( )

Construct to uninitialized.

See the postconditions for uninitialize()

Definition at line 61 of file Thyra_EpetraLinearOp.cpp.


Member Function Documentation

void Thyra::EpetraLinearOp::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.

Parameters:
op[in] The Epetra_Operator this *this will wrap.
opTrans[in] If opTrans==NOTRANS then op will be viewed as op and if opTrans==TRANS then op will be viewed as its transpose op' for the behavior of apply().
applyAs[in] If applyAs==APPLY_APPLY then op->Apply() will be used and if applyAs==APPLY_APPLY_INVERSE then op->ApplyInverse() is used instead.
adjointSupport[in] Determines if it is to be assumed that adjoints are supported on the underlying Epetra_Operator object op. If adjointSupport==EPETRA_OP_ADJOINT_SUPPORTED then this->opSupported(TRANS) will return true. If adjointSupport==EPETRA_OP_ADJOINT_UNSUPPORTED then this->opSupported(TRANS) will return false.
range[in] Smart pointer to the range space for the Epetra_Operator. The default value is Teuchos::null in which case *this will allocate a new SpmdVectorSpace given range map from op. A client may only bother to specify this space if one wants to override the defintion of the scalar product.
domain[in] Smart pointer to the domain space for the Epetra_Operator. The default value is Teuchos::null in which case *this will allocate a new DefaultSpmdVectorSpace given map from op. A client may only bother to specify this space if one wants to override the defintion of the scalar product.

Preconditions:

  • !is_null(op)

Postconditions:

  • this->epetra_op().get() == op.get()
  • [range.get() != NULL] this->range().get() == range.get()
  • [domain.get() != NULL] this->domain().get() == domain.get()
  • [range.get() == NULL] this->range().get() != NULL
  • [domain.get() == NULL] this->domain().get() != NULL
  • this->opSupported(NOTRANS) == true
  • this->opSupported(TRNAS) == adjointSupport==EPETRA_OP_ADJOINT_SUPPORTED

After this function is called, this will be fully initialized and ready to go.

Definition at line 69 of file Thyra_EpetraLinearOp.cpp.

References adjointSupport_, allocateDomain(), allocateRange(), applyAs_, domain_, Thyra::EPETRA_OP_APPLY_APPLY, is_null(), isFullyInitialized_, op_, opTrans_, range_, and TEST_FOR_EXCEPTION.

Referenced by Thyra::EpetraExtDiagScalingTransformer::transform(), Thyra::EpetraExtDiagScaledMatProdTransformer::transform(), and Thyra::EpetraExtAddTransformer::transform().

void Thyra::EpetraLinearOp::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.

Parameters:
range[in] Smart pointer to the range space for the Epetra_Operator.
domain[in] Smart pointer to the domain space for the Epetra_Operator.
op[in] The Epetra_Operator this *this will wrap. This object is assumed to not be fully unitialized.
opTrans[in] If opTrans==NOTRANS then op will be viewed as op and if opTrans==TRANS then op will be viewed as its transpose op' for the behavior of apply().
applyAs[in] If applyAs==APPLY_APPLY then op->Apply() will be used and if applyAs==APPLY_APPLY_INVERSE then op->ApplyInverse() is used instead.
adjointSupport[in] Determines if it is to be assumed that adjoints are supported on the underlying Epetra_Operator object op. If adjointSupport==EPETRA_OP_ADJOINT_SUPPORTED then this->opSupported(TRANS) will return true. If adjointSupport==EPETRA_OP_ADJOINT_UNSUPPORTED then this->opSupported(TRANS) will return false.

Preconditions:

  • !is_null(range)
  • !is_null(domain)
  • !is_null(op)

Postconditions:

  • this->epetra_op().get() == op.get()
  • [range.get() != NULL] this->range().get() == range.get()
  • [domain.get() != NULL] this->domain().get() == domain.get()
  • [range.get() == NULL] this->range().get() != NULL
  • [domain.get() == NULL] this->domain().get() != NULL
  • this->opSupported(NOTRANS) == true
  • this->opSupported(TRNAS) == adjointSupport==EPETRA_OP_ADJOINT_SUPPORTED

After this function is called, only the range and domain spaces will be supported and this must be followed up by a call to setFullyInitialized().

Definition at line 116 of file Thyra_EpetraLinearOp.cpp.

References adjointSupport_, applyAs_, domain_, is_null(), isFullyInitialized_, op_, opTrans_, range_, and TEST_FOR_EXCEPTION.

void Thyra::EpetraLinearOp::setFullyInitialized ( bool  isFullyInitialized = true)

Set to fully initialized.

In debug mode, asserts will be performed to ensure that everything matches up as it should.

The functions initailize() ore partiallyInitialize() must have been called prior to calling this function.

Definition at line 157 of file Thyra_EpetraLinearOp.cpp.

References isFullyInitialized_.

void Thyra::EpetraLinearOp::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.

Postconditions:

Definition at line 164 of file Thyra_EpetraLinearOp.cpp.

References adjointSupport_, applyAs_, domain_, Thyra::EPETRA_OP_ADJOINT_SUPPORTED, Thyra::EPETRA_OP_APPLY_APPLY, isFullyInitialized_, Thyra::NOTRANS, Teuchos::null, op_, opTrans_, and range_.

RCP< const SpmdVectorSpaceBase< double > > Thyra::EpetraLinearOp::spmdRange ( ) const

Return a smart pointer to the SpmdVectorSpaceBase object for the range.

Postconditions:

  • [this->range().get() != NULL] return.get() != NULL
  • [this->range().get() == NULL] return.get() == NULL

Definition at line 193 of file Thyra_EpetraLinearOp.cpp.

References range_.

RCP< const SpmdVectorSpaceBase< double > > Thyra::EpetraLinearOp::spmdDomain ( ) const

Return a smart pointer to the SpmdVectorSpaceBase object for the domain.

Postconditions:

  • [this->domain().get() != NULL] return.get() != NULL
  • [this->domain().get() == NULL] return.get() == NULL

Definition at line 200 of file Thyra_EpetraLinearOp.cpp.

References domain_.

RCP< Epetra_Operator > Thyra::EpetraLinearOp::epetra_op ( )
RCP< const Epetra_Operator > Thyra::EpetraLinearOp::epetra_op ( ) const

Definition at line 214 of file Thyra_EpetraLinearOp.cpp.

References op_.

void Thyra::EpetraLinearOp::getNonconstEpetraOpView ( const Ptr< RCP< Epetra_Operator > > &  epetraOp,
const Ptr< EOpTransp > &  epetraOpTransp,
const Ptr< EApplyEpetraOpAs > &  epetraOpApplyAs,
const Ptr< EAdjointEpetraOp > &  epetraOpAdjointSupport 
) [virtual]

Implements Thyra::EpetraLinearOpBase.

Definition at line 223 of file Thyra_EpetraLinearOp.cpp.

References adjointSupport_, applyAs_, op_, and opTrans_.

void Thyra::EpetraLinearOp::getEpetraOpView ( const Ptr< RCP< const Epetra_Operator > > &  epetraOp,
const Ptr< EOpTransp > &  epetraOpTransp,
const Ptr< EApplyEpetraOpAs > &  epetraOpApplyAs,
const Ptr< EAdjointEpetraOp > &  epetraOpAdjointSupport 
) const [virtual]

Implements Thyra::EpetraLinearOpBase.

Definition at line 237 of file Thyra_EpetraLinearOp.cpp.

References adjointSupport_, applyAs_, op_, and opTrans_.

RCP< const VectorSpaceBase< double > > Thyra::EpetraLinearOp::range ( ) const [virtual]

Implements Thyra::LinearOpBase< double >.

Definition at line 255 of file Thyra_EpetraLinearOp.cpp.

References range_.

Referenced by describe(), and description().

RCP< const VectorSpaceBase< double > > Thyra::EpetraLinearOp::domain ( ) const [virtual]

Implements Thyra::LinearOpBase< double >.

Definition at line 262 of file Thyra_EpetraLinearOp.cpp.

References domain_.

Referenced by describe(), and description().

RCP< const LinearOpBase< double > > Thyra::EpetraLinearOp::clone ( ) const [virtual]

Reimplemented from Thyra::LinearOpBase< double >.

Definition at line 269 of file Thyra_EpetraLinearOp.cpp.

References Teuchos::null.

std::string Thyra::EpetraLinearOp::description ( ) const [virtual]

Reimplemented from Teuchos::Describable.

Definition at line 279 of file Thyra_EpetraLinearOp.cpp.

References domain(), op_, range(), and typeName().

Referenced by describe().

void Thyra::EpetraLinearOp::describe ( FancyOStream out,
const Teuchos::EVerbosityLevel  verbLevel 
) const
bool Thyra::EpetraLinearOp::opSupportedImpl ( EOpTransp  M_trans) const [protected, virtual]
void Thyra::EpetraLinearOp::applyImpl ( const EOpTransp  M_trans,
const MultiVectorBase< double > &  X,
const Ptr< MultiVectorBase< double > > &  Y,
const double  alpha,
const double  beta 
) const [protected, virtual]
RCP< const SpmdVectorSpaceBase< double > > Thyra::EpetraLinearOp::allocateDomain ( const RCP< Epetra_Operator > &  op,
EOpTransp  op_trans 
) const [protected, virtual]

Allocate the domain space of the operator.

Purpose: In TSFExtended, both EpetraLinearOp and EpetraVectorSpace are extended from the Thyra versions by inheritance, and the TSFExtended operator subclasses expect to work with an extended vector space subclass. Thus, it is necessary for the base operator class to never directly allocate vector space objects, and allocation is delegated to a virtual allocator function.

Definition at line 543 of file Thyra_EpetraLinearOp.cpp.

References Thyra::create_VectorSpace(), and Teuchos::rcp().

Referenced by initialize().

RCP< const SpmdVectorSpaceBase< double > > Thyra::EpetraLinearOp::allocateRange ( const RCP< Epetra_Operator > &  op,
EOpTransp  op_trans 
) const [protected, virtual]

Allocate the range space of the operator.

Purpose: In TSFExtended, both EpetraLinearOp and EpetraVectorSpace are extended from the Thyra versions by inheritance, and the TSFExtended operator subclasses expect to work with an extended vector space subclass. Thus, it is necessary for the base operator class to never directly allocate vector space objects, and allocation is delegated to a virtual allocator function.

Definition at line 556 of file Thyra_EpetraLinearOp.cpp.

References Thyra::create_VectorSpace(), and Teuchos::rcp().

Referenced by initialize().

const Epetra_Map & Thyra::EpetraLinearOp::getRangeMap ( ) const [private]

Definition at line 571 of file Thyra_EpetraLinearOp.cpp.

References applyAs_, Thyra::EPETRA_OP_APPLY_APPLY, and op_.

Referenced by applyImpl().

const Epetra_Map & Thyra::EpetraLinearOp::getDomainMap ( ) const [private]

Definition at line 579 of file Thyra_EpetraLinearOp.cpp.

References applyAs_, Thyra::EPETRA_OP_APPLY_APPLY, and op_.

Referenced by applyImpl().


Friends And Related Function Documentation

RCP< EpetraLinearOp > nonconstEpetraLinearOp ( ) [related]

Default nonmember constructor.

RCP< EpetraLinearOp > partialNonconstEpetraLinearOp ( 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 
) [related]

Partially initialized EpetraLinearOp.

RCP< EpetraLinearOp > nonconstEpetraLinearOp ( 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 
) [related]

Dynamically allocate an const EpetraLinearOp to wrap a const Epetra_Operator object.

RCP< const EpetraLinearOp > epetraLinearOp ( const RCP< const 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 
) [related]

Dynamically allocate a nonconst EpetraLinearOp to wrap a const Epetra_Operator object.

RCP< EpetraLinearOp > nonconstEpetraLinearOp ( const RCP< Epetra_Operator > &  op,
const std::string &  label,
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 
) [related]

Dynamically allocate an const EpetraLinearOp to wrap a const Epetra_Operator object and give it a string label.

RCP< const EpetraLinearOp > epetraLinearOp ( const RCP< const Epetra_Operator > &  op,
const std::string &  label,
EOpTransp  opTrans = NOTRANS,
EApplyEpetraOpAs  applyAs = EPETRA_OP_APPLY_APPLY,
EAdjointEpetraOp  adjointSupport = EPETRA_OP_ADJOINT_SUPPORTED,
const RCP< const SpmdVectorSpaceBase< double > > &  range = Teuchos::null,
const RCP< const SpmdVectorSpaceBase< double > > &  domain = Teuchos::null 
) [related]

Dynamically allocate a nonconst EpetraLinearOp to wrap a const Epetra_Operator object.


Member Data Documentation

RCP<Epetra_Operator> Thyra::EpetraLinearOp::op_ [private]

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines