Thyra Package Browser (Single Doxygen Collection) Version of the Day
Private Types | Private Member Functions | Private Attributes | Related Functions
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]

List of all members.

Private Types

typedef
Teuchos::ConstNonconstObjectContainer
< LinearOpWithSolveBase
< Scalar > > 
CNCLOWS
typedef
Teuchos::ConstNonconstObjectContainer
< PhysicallyBlockedLinearOpBase
< Scalar > > 
CNCPBLOB

Private Member Functions

void assertBlockFillIsActive (bool) const
void assertBlockRowCol (const int i, const int j) const
template<class LinearOpWithSolveType >
void setLOWSBlockImpl (const int i, const int j, const RCP< LinearOpWithSolveType > &block)
void assertAndSetBlockStructure (const PhysicallyBlockedLinearOpBase< Scalar > &blocks)
 DefaultBlockedTriangularLinearOpWithSolve (const DefaultBlockedTriangularLinearOpWithSolve &)
DefaultBlockedTriangularLinearOpWithSolveoperator= (const DefaultBlockedTriangularLinearOpWithSolve &)

Private Attributes

bool blockFillIsActive_
RCP< const
ProductVectorSpaceBase< Scalar > > 
productRange_
RCP< const
ProductVectorSpaceBase< Scalar > > 
productDomain_
int numDiagBlocks_
Array< CNCLOWSdiagonalBlocks_
CNCPBLOB blocks_

Related Functions

(Note that these are not member functions.)

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

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.
void describe (Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
 Prints the details about the constituent linear operators.

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
 

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 99 of file Thyra_DefaultBlockedTriangularLinearOpWithSolve_decl.hpp.


Member Typedef Documentation


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 382 of file Thyra_DefaultBlockedTriangularLinearOpWithSolve_def.hpp.

References Teuchos::Describable::description().

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 396 of file Thyra_DefaultBlockedTriangularLinearOpWithSolve_def.hpp.

References Teuchos::Describable::describe().

template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::opSupportedImpl ( EOpTransp  M_trans) const [protected, virtual]
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 [protected, virtual]
template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::solveSupportsImpl ( EOpTransp  M_trans) const [protected, virtual]
template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::solveSupportsSolveMeasureTypeImpl ( EOpTransp  M_trans,
const SolveMeasureType solveMeasureType 
) const [protected, virtual]
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 [protected, virtual]
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::assertBlockFillIsActive ( bool  blockFillIsActive_in) const [private]
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::assertBlockRowCol ( const int  i,
const int  j 
) const [private]
template<class Scalar >
template<class LinearOpWithSolveType >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::setLOWSBlockImpl ( const int  i,
const int  j,
const RCP< LinearOpWithSolveType > &  block 
) [private]
template<class Scalar >
void Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::assertAndSetBlockStructure ( const PhysicallyBlockedLinearOpBase< Scalar > &  blocks) [private]

Friends And Related Function Documentation

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

Nonmember constructor.

Definition at line 333 of file Thyra_DefaultBlockedTriangularLinearOpWithSolve_decl.hpp.

References Teuchos::rcp().


Member Data Documentation

template<class Scalar >
bool Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::blockFillIsActive_ [private]
template<class Scalar >
RCP<const ProductVectorSpaceBase<Scalar> > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::productRange_ [private]
template<class Scalar >
RCP<const ProductVectorSpaceBase<Scalar> > Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::productDomain_ [private]
template<class Scalar >
int Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::numDiagBlocks_ [private]
template<class Scalar >
Array<CNCLOWS> Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::diagonalBlocks_ [private]
template<class Scalar >
CNCPBLOB Thyra::DefaultBlockedTriangularLinearOpWithSolve< Scalar >::blocks_ [private]

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