Thyra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Related Functions | List of all members
Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar > Class Template Reference

Concrete composite LinearOpWithSolveBase subclass that creates single upper or lower block triangular LOWSB object out of a set of LOWSB objects along the diagonal with LOB objects off diagonal. More...

#include <Thyra_DefaultBlockedTriangularLinearOpWithSolve_decl.hpp>

Inheritance diagram for Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >:
Inheritance graph
[legend]

Related Functions

(Note that these are not member functions.)

template<class Scalar >
RCP
< DefaultBlockedTriangularLinearOpWithSolve
< Scalar > > 
defaultBlockedTriangularLinearOpWithSolve ()
 Nonmember constructor. More...
 

Constructors/Initializers/Accessors

 DefaultBlockedTriangularLinearOpWithSolve ()
 
void setNonconstBlocks (const RCP< PhysicallyBlockedLinearOpBase< Scalar > > &blocks)
 
void setBlocks (const RCP< const PhysicallyBlockedLinearOpBase< Scalar > > &blocks)
 
RCP
< PhysicallyBlockedLinearOpBase
< Scalar > > 
getNonconstBlocks ()
 
RCP< const
PhysicallyBlockedLinearOpBase
< Scalar > > 
getBlocks ()
 

Overridden from PhysicallyBlockedLinearOpWithSolveBase

bool acceptsLOWSBlock (const int i, const int j) const
 
void setNonconstLOWSBlock (const int i, const int j, const RCP< LinearOpWithSolveBase< Scalar > > &block)
 
void setLOWSBlock (const int i, const int j, const RCP< const LinearOpWithSolveBase< Scalar > > &block)
 

Overridden from PhysicallyBlockedLinearOpBase

void beginBlockFill ()
 
void beginBlockFill (const int numRowBlocks, const int numColBlocks)
 
void beginBlockFill (const RCP< const ProductVectorSpaceBase< Scalar > > &productRange, const RCP< const ProductVectorSpaceBase< Scalar > > &productDomain)
 
bool blockFillIsActive () const
 
bool acceptsBlock (const int i, const int j) const
 
void setNonconstBlock (const int i, const int j, const RCP< LinearOpBase< Scalar > > &block)
 
void setBlock (const int i, const int j, const RCP< const LinearOpBase< Scalar > > &block)
 
void endBlockFill ()
 
void uninitialize ()
 

Overridden from BlockedLinearOpWithSolveBase

RCP< LinearOpWithSolveBase
< Scalar > > 
getNonconstLOWSBlock (const int i, const int j)
 
RCP< const
LinearOpWithSolveBase< Scalar > > 
getLOWSBlock (const int i, const int j) const
 

Overridden from BlockedLinearOpBase

RCP< const
ProductVectorSpaceBase< Scalar > > 
productRange () const
 
RCP< const
ProductVectorSpaceBase< Scalar > > 
productDomain () const
 
bool blockExists (const int i, const int j) const
 
bool blockIsConst (const int i, const int j) const
 
RCP< LinearOpBase< Scalar > > getNonconstBlock (const int i, const int j)
 
RCP< const LinearOpBase< Scalar > > getBlock (const int i, const int j) const
 

Overridden from LinearOpBase

RCP< const VectorSpaceBase
< Scalar > > 
range () const
 
RCP< const VectorSpaceBase
< Scalar > > 
domain () const
 
RCP< const LinearOpBase< Scalar > > clone () const
 
bool opSupportedImpl (EOpTransp M_trans) const
 
void applyImpl (const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
 

Overridden from Teuchos::Describable

std::string description () const
 Prints just the name DefaultBlockedTriangularLinearOpWithSolve along with the overall dimensions and the number of constituent operators. More...
 
void describe (Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
 Prints the details about the constituent linear operators. More...
 

Overridden from LinearOpWithSolveBase

bool solveSupportsImpl (EOpTransp M_trans) const
 
bool solveSupportsSolveMeasureTypeImpl (EOpTransp M_trans, const SolveMeasureType &solveMeasureType) const
 
SolveStatus< Scalar > solveImpl (const EOpTransp transp, const MultiVectorBase< Scalar > &B, const Ptr< MultiVectorBase< Scalar > > &X, const Ptr< const SolveCriteria< Scalar > > solveCriteria) const
 

Additional Inherited Members

- Public Member Functions inherited from Thyra::LinearOpWithSolveBase< Scalar >
bool solveSupports (EOpTransp transp) const
 Return if solve() supports the argument transp. More...
 
bool solveSupports (EOpTransp transp, const Ptr< const SolveCriteria< Scalar > > solveCriteria) const
 Return if solve() supports a given transpose and solve criteria specification. More...
 
bool solveSupportsSolveMeasureType (EOpTransp transp, const SolveMeasureType &solveMeasureType) const
 Return if solve() supports the given the solve measure type. More...
 
SolveStatus< Scalar > solve (const EOpTransp A_trans, const MultiVectorBase< Scalar > &B, const Ptr< MultiVectorBase< Scalar > > &X, const Ptr< const SolveCriteria< Scalar > > solveCriteria=Teuchos::null) const
 Request the solution of a block linear system. More...
 
- Public Member Functions inherited from Thyra::LinearOpBase< Scalar >
bool opSupported (EOpTransp M_trans) const
 Return if the M_trans operation of apply() is supported or not. More...
 
void apply (const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
 Apply the linear operator to a multi-vector : Y = alpha*op(M)*X + beta*Y. More...
 
- Protected Member Functions inherited from Thyra::LinearOpWithSolveBase< Scalar >
virtual bool solveSupportsNewImpl (EOpTransp, const Ptr< const SolveCriteria< Scalar > >) const
 Virtual implementation of solveSupports(). More...
 
- Protected Member Functions inherited from Thyra::LinearOpBase< Scalar >

Detailed Description

template<class Scalar>
class Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >

Concrete composite LinearOpWithSolveBase subclass that creates single upper or lower block triangular LOWSB object out of a set of LOWSB objects along the diagonal with LOB objects off diagonal.

This subclass implements a strictly block upper or lower triangular LOWSB object. With LOWSB objects on the diagonal, the block system can be solved by solving for each of the diagonal blocks and moving lower (or upper) blocks to the RHS on each successive solve.

For example, consider the lower block triangular linear operator:

      [ M(0,0)                   ]
  M = [ M(1,0)   M(1,1)          ]
      [ M(2,0)   M(2,1)   M(2,2) ]  

A linear system of the form:

  M * x = b

  =>

  [ M(0,0)                   ]   [ x(0) ]   [ b(0) ]
  [ M(1,0)   M(1,1)          ] * [ x(1) ] = [ b(1) ]
  [ M(2,0)   M(2,1)   M(2,2) ]   [ x(2) ]   [ b(2) ]

is solved as:

 x(0) = inv(M(0,0)) * b(0)
 x(1) = inv(M(1,1)) * ( b(1) - M(1,0)*x(0) )
 x(2) = inv(M(2,2)) * ( b(2) - M(2,0)*x(0) - M(2,1)*x(1) )

The same approach can be used for block upper triangular linear operators as well of course.

See the class DefaultBlockedTriangularLinearOpWithSolveFactory for an example of how one of these objects can be created from any PhysicallyBlockedLinearOpBase object and compatible LinearWithSolveBase objects.

ToDo: Finish Documentation!

Definition at line 112 of file Thyra_DefaultBlockedTriangularLinearOpWithSolve_decl.hpp.

Constructor & Destructor Documentation

Member Function Documentation

template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::setNonconstBlocks ( const RCP< PhysicallyBlockedLinearOpBase< Scalar > > &  blocks)
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::setBlocks ( const RCP< const PhysicallyBlockedLinearOpBase< Scalar > > &  blocks)
template<class Scalar >
RCP< PhysicallyBlockedLinearOpBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::getNonconstBlocks ( )
template<class Scalar >
RCP< const PhysicallyBlockedLinearOpBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::getBlocks ( )
template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::acceptsLOWSBlock ( const int  i,
const int  j 
) const
virtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::setNonconstLOWSBlock ( const int  i,
const int  j,
const RCP< LinearOpWithSolveBase< Scalar > > &  block 
)
virtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::setLOWSBlock ( const int  i,
const int  j,
const RCP< const LinearOpWithSolveBase< Scalar > > &  block 
)
virtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::beginBlockFill ( )
virtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::beginBlockFill ( const int  numRowBlocks,
const int  numColBlocks 
)
virtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::beginBlockFill ( const RCP< const ProductVectorSpaceBase< Scalar > > &  productRange,
const RCP< const ProductVectorSpaceBase< Scalar > > &  productDomain 
)
virtual
template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::blockFillIsActive ( ) const
virtual
template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::acceptsBlock ( const int  i,
const int  j 
) const
virtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::setNonconstBlock ( const int  i,
const int  j,
const RCP< LinearOpBase< Scalar > > &  block 
)
virtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::setBlock ( const int  i,
const int  j,
const RCP< const LinearOpBase< Scalar > > &  block 
)
virtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::endBlockFill ( )
virtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::uninitialize ( )
virtual
template<class Scalar >
Teuchos::RCP< LinearOpWithSolveBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::getNonconstLOWSBlock ( const int  i,
const int  j 
)
virtual
template<class Scalar >
Teuchos::RCP< const LinearOpWithSolveBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::getLOWSBlock ( const int  i,
const int  j 
) const
virtual
template<class Scalar >
Teuchos::RCP< const ProductVectorSpaceBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::productRange ( ) const
virtual
template<class Scalar >
Teuchos::RCP< const ProductVectorSpaceBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::productDomain ( ) const
virtual
template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::blockExists ( const int  i,
const int  j 
) const
virtual
template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::blockIsConst ( const int  i,
const int  j 
) const
virtual
template<class Scalar >
Teuchos::RCP< LinearOpBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::getNonconstBlock ( const int  i,
const int  j 
)
virtual
template<class Scalar >
Teuchos::RCP< const LinearOpBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::getBlock ( const int  i,
const int  j 
) const
virtual
template<class Scalar >
Teuchos::RCP< const VectorSpaceBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::range ( ) const
virtual
template<class Scalar >
Teuchos::RCP< const VectorSpaceBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::domain ( ) const
virtual
template<class Scalar >
Teuchos::RCP< const LinearOpBase< Scalar > > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::clone ( ) const
virtual
template<class Scalar >
std::string Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::description ( ) const
virtual

Prints just the name DefaultBlockedTriangularLinearOpWithSolve along with the overall dimensions and the number of constituent operators.

Reimplemented from Teuchos::Describable.

Definition at line 397 of file Thyra_DefaultBlockedTriangularLinearOpWithSolve_def.hpp.

template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::describe ( Teuchos::FancyOStream out,
const Teuchos::EVerbosityLevel  verbLevel 
) const
virtual

Prints the details about the constituent linear operators.

This function outputs different levels of detail based on the value passed in for verbLevel:

ToDo: Finish documentation!

Reimplemented from Teuchos::Describable.

Definition at line 410 of file Thyra_DefaultBlockedTriangularLinearOpWithSolve_def.hpp.

template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::opSupportedImpl ( EOpTransp  M_trans) const
protectedvirtual
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::applyImpl ( const EOpTransp  M_trans,
const MultiVectorBase< Scalar > &  X,
const Ptr< MultiVectorBase< Scalar > > &  Y,
const Scalar  alpha,
const Scalar  beta 
) const
protectedvirtual
template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::solveSupportsImpl ( EOpTransp  M_trans) const
protectedvirtual
template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::solveSupportsSolveMeasureTypeImpl ( EOpTransp  M_trans,
const SolveMeasureType solveMeasureType 
) const
protectedvirtual
template<class Scalar >
SolveStatus< Scalar > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::solveImpl ( const EOpTransp  transp,
const MultiVectorBase< Scalar > &  B,
const Ptr< MultiVectorBase< Scalar > > &  X,
const Ptr< const SolveCriteria< Scalar > >  solveCriteria 
) const
protectedvirtual

Friends And Related Function Documentation

template<class Scalar >
RCP< DefaultBlockedTriangularLinearOpWithSolve< Scalar > > defaultBlockedTriangularLinearOpWithSolve ( )
related

Nonmember constructor.

Definition at line 346 of file Thyra_DefaultBlockedTriangularLinearOpWithSolve_decl.hpp.


The documentation for this class was generated from the following files: