Public Member Functions | Protected Member Functions | Private Attributes
TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar > Class Template Reference

This class produces LTI problems where any transpose solves are done using explicit transforms. More...

Inheritance diagram for TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >:
TSFExtended::DefaultLTIProblemFactory< Scalar > TSFExtended::LTIProblemFactoryBase< Scalar >

List of all members.

Public Member Functions

 ExplicitlyTransposedLTIProblemFactory (int nSteps)
 Constructor.
void init (const LinearOperator< Scalar > &A, const LinearOperator< Scalar > &At, const LinearOperator< Scalar > &C)
 After construction, the user should set the operators by calling init().

Protected Member Functions

LinearOperator< Scalar > formExplicitTranspose (const LinearOperator< Scalar > &X) const
 This is a helper function that forms an explicit transpose of an operator.
virtual LinearOperator< Scalar > createAt () const
 Return the transpose of A.

Private Attributes

LinearOperator< Scalar > inputAt_
RCP
< EpetraExt::RowMatrix_Transpose > 
transposer_
 Hack hack hack....

Detailed Description

template<class Scalar>
class TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >

This class produces LTI problems where any transpose solves are done using explicit transforms.

For example, with backwards Euler time stepping, the advance matrix $ A$ will be $ A = M B^{-1}, $ where $ M $ is the mass matrix and $ B = M - \Delta t K $. However, with the AztecOO solver we can't do a transpose solve on B, so we will want to form $ B^T$ explicitly, after which we can form $ A^T $ implicitly as $ A^T = (B^T)^{-1} M^T.$ In this formulation we are only doing a solve on the { explicit} transpose of $ B. $

Definition at line 56 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.


Constructor & Destructor Documentation

template<class Scalar >
TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >::ExplicitlyTransposedLTIProblemFactory ( int  nSteps) [inline]

Constructor.

Definition at line 61 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.


Member Function Documentation

template<class Scalar >
virtual LinearOperator<Scalar> TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >::createAt ( ) const [inline, protected, virtual]

Return the transpose of A.

Reimplemented from TSFExtended::LTIProblemFactoryBase< Scalar >.

Definition at line 161 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.

template<class Scalar >
LinearOperator<Scalar> TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >::formExplicitTranspose ( const LinearOperator< Scalar > &  X) const [inline, protected]

This is a helper function that forms an explicit transpose of an operator.

For now, this only works if the operator is an Epetra_CrsMatrix. We'll want to generalize this later to other operator types.

One clumsy feature of this function is that because of the way the EpetraExt explicit transposer has been written, the storage for the transposed operator is managed by the transposer object. Therefore, we need to keep a copy of the transposer object around for as long as the transposed matrix exists. We keep a copy of it here, as the transposer_ data member of the factory object. This means that the factory object had better not go out of scope while the matrices it produces still exist. This is dangerous. We should talk with Rob H and Mike H about redesigning the EpetraExt transformation objects so that the objects they produce have integrity independent of the transformation objects.

all done!

Definition at line 111 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.

References TSFExtended::LinearOperator< Scalar >::domain(), TSFExtended::EpetraMatrix::getConcrete(), and TSFExtended::LinearOperator< Scalar >::range().

template<class Scalar >
void TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >::init ( const LinearOperator< Scalar > &  A,
const LinearOperator< Scalar > &  At,
const LinearOperator< Scalar > &  C 
) [inline]

After construction, the user should set the operators by calling init().

Parameters:
AThe "small" A operator. Small A does the advance through a single timestep.
CThe "small" C operator. Small C does state observations at a single timestep.
AtThe explicit transpose of small A.

Definition at line 78 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.

References Sundance::init().


Member Data Documentation

template<class Scalar >
LinearOperator<Scalar> TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >::inputAt_ [private]
template<class Scalar >
RCP<EpetraExt::RowMatrix_Transpose> TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >::transposer_ [mutable, private]

Hack hack hack....

we need to keep the Epetra_Transposer object around because it manages the memory of the transposed matrix.

Definition at line 171 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.

Site Contact