This class produces LTI problems where any transpose solves are done using explicit transforms. More...
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.... | |
This class produces LTI problems where any transpose solves are done using explicit transforms.
For example, with backwards Euler time stepping, the advance matrix
will be
where
is the mass matrix and
. However, with the AztecOO solver we can't do a transpose solve on B, so we will want to form
explicitly, after which we can form
implicitly as
In this formulation we are only doing a solve on the { explicit} transpose of
Definition at line 56 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.
| TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >::ExplicitlyTransposedLTIProblemFactory | ( | int | nSteps | ) | [inline] |
Constructor.
Definition at line 61 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.
| 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.
| 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().
| 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().
| A | The "small" A operator. Small A does the advance through a single timestep. |
| C | The "small" C operator. Small C does state observations at a single timestep. |
| At | The explicit transpose of small A. |
Definition at line 78 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.
References Sundance::init().
LinearOperator<Scalar> TSFExtended::ExplicitlyTransposedLTIProblemFactory< Scalar >::inputAt_ [private] |
Definition at line 168 of file TSFExplicitlyTransposedLTIProblemFactory.hpp.
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.