Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar > Class Template Reference

#include <Thyra_LinearOpWithSolveBaseDecl.hpp>

Inheritance diagram for Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar >:

[legend]
List of all members.

Pure virtual functions that must be overridden in subclasses

virtual void solve (const EConj conj, const MultiVectorBase< RangeScalar > &B, MultiVectorBase< DomainScalar > *X, const int numBlocks=0, const BlockSolveCriteria< PromotedScalar > blockSolveCriteria[]=NULL, SolveStatus< PromotedScalar > blockSolveStatus[]=NULL) const =0
 Request the forward solution of a block system with different targeted solution criteria.

Virtual functions with default implementations

virtual bool solveSupportsConj (EConj conj) const
 Return if solve() supports the argument conj.
virtual bool solveTransposeSupportsConj (EConj conj) const
 Return if solveTranspose() supports the argument conj.
virtual bool solveSupportsSolveMeasureType (EConj conj, const SolveMeasureType &solveMeasureType) const
 Return if solve() supports the given the solve measure type.
virtual bool solveTransposeSupportsSolveMeasureType (EConj conj, const SolveMeasureType &solveMeasureType) const
 Return if solveTranspose() supports the given the solve measure type.
virtual void solveTranspose (const EConj conj, const MultiVectorBase< DomainScalar > &B, MultiVectorBase< RangeScalar > *X, const int numBlocks=0, const BlockSolveCriteria< PromotedScalar > blockSolveCriteria[]=NULL, SolveStatus< PromotedScalar > blockSolveStatus[]=NULL) const
 Request the transpose (or adjoint) solution of a block system with different targeted solution criteria.

Public Types

typedef Teuchos::PromotionTraits<
RangeScalar, DomainScalar
>::promote 
PromotedScalar
 Local typedef for promoted scalar type.

template<class RangeScalar, class DomainScalar = RangeScalar>
class Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar >


Member Typedef Documentation

template<class RangeScalar, class DomainScalar = RangeScalar>
typedef Teuchos::PromotionTraits<RangeScalar,DomainScalar>::promote Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar >::PromotedScalar
 

Local typedef for promoted scalar type.

Definition at line 345 of file Thyra_LinearOpWithSolveBaseDecl.hpp.


Member Function Documentation

template<class RangeScalar, class DomainScalar = RangeScalar>
virtual void Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar >::solve const EConj  conj,
const MultiVectorBase< RangeScalar > &  B,
MultiVectorBase< DomainScalar > *  X,
const int  numBlocks = 0,
const BlockSolveCriteria< PromotedScalar blockSolveCriteria[] = NULL,
SolveStatus< PromotedScalar blockSolveStatus[] = NULL
const [pure virtual]
 

Request the forward solution of a block system with different targeted solution criteria.

Parameters:
conj [in] Determines if the elements are non-conjugate (NONCONJ_ELE) or conjugate (CONJ_ELE). For real valued operator, this argument is meaningless. Most ANAs will request NONCONJ_ELE.
B [in] The RHS multi-vector with m = B.domain()->dim() columns.
X [in/out] The LHS multi-vector with with m = X->domain()->dim() columns. On input, contains the initial guess for the solution (only significant for iterative solvers) and on output contains an estimate of the solution.
numBlocks [in] The number of blocks for which solve tolerances will be specified for. If numBlocks==0 then this is a flag that a default set of tolerances should be used for all the linear systems. Default numBlocks=0.
blockSolveCriteria [in] Array (length numBlocks) which gives the desired solution criteria for each of the numBlocks blocks of RHS. If numBlocks>0 then this argument must be non-NULL and point to a valid array of numBlocks entries.
blockSolveStatus [out] Array (length numBlocks) which gives the status of each set of block systems. A value of blockSolveStatus==NULL is allowed and means that the client is not interested in solution status of the linear systems.
Preconditions:
  • this->solveSupportsConj(conj)==true
  • X!=NULL
  • this->range()->isCompatible(*B.range())==true
  • this->domain()->isCompatible(*X->range())==true
  • B->domain()->isCompatible(*X->domain())==true
  • numBlocks >= 0
  • [numBlocks == 0] blockSolveCriteria==NULL && blockSolveStatus==NULL.
  • [numBlocks > 0] blockSolveCriteria!=NULL and points to an array of length at least numBlocks.
  • [numBlocks > 0] this->solveSupportsSolveMeasureType(conj,blockSolveCriteria[k].solveMeasureType)==true, for k = 0...numBlocks-1.
  • [blockSolveStatus!=NULL] blockSolveStatus and points to an array of length at least numBlocks.

Postconditions:

  • If any progress on solving the linear systems could be achieved, then the function will return normally. However, if no progress could be made in solving the linear systems, then an exception of type CatastrophicSolveFailure will be thrown. If the function returns normally, then the following postconditions apply.
  • If blockSolveStatus!=NULL then blockSolveStatus[k] gives the solution status of the block of linear systems specified by blockSolveCriteria[k] where, for k=0...numBlocks-1.

See the above introduction for a more complete description of how this function behaves and the meaning of the arguments blockSolveCriteria[] and blockSolveStatus[].

template<class RangeScalar, class DomainScalar>
bool Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar >::solveSupportsConj EConj  conj  )  const [virtual]
 

Return if solve() supports the argument conj.

The default implementation returns true for real valued scalar types or when conj==NONCONJ_ELE for complex valued types.

Reimplemented in Thyra::SingleScalarLinearOpWithSolveBase< Scalar >, and Thyra::SingleScalarLinearOpWithSolveBase< std::complex< RealScalar > >.

Definition at line 38 of file Thyra_LinearOpWithSolveBase.hpp.

template<class RangeScalar, class DomainScalar>
bool Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar >::solveTransposeSupportsConj EConj  conj  )  const [virtual]
 

Return if solveTranspose() supports the argument conj.

The default implementation returns false.

Reimplemented in Thyra::SingleScalarLinearOpWithSolveBase< Scalar >, and Thyra::SingleScalarLinearOpWithSolveBase< std::complex< RealScalar > >.

Definition at line 44 of file Thyra_LinearOpWithSolveBase.hpp.

template<class RangeScalar, class DomainScalar>
bool Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar >::solveSupportsSolveMeasureType EConj  conj,
const SolveMeasureType solveMeasureType
const [virtual]
 

Return if solve() supports the given the solve measure type.

The default implementation returns true for solveMeasureType.inNone().

Reimplemented in Thyra::SingleScalarLinearOpWithSolveBase< Scalar >, and Thyra::SingleScalarLinearOpWithSolveBase< std::complex< RealScalar > >.

Definition at line 50 of file Thyra_LinearOpWithSolveBase.hpp.

template<class RangeScalar, class DomainScalar>
bool Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar >::solveTransposeSupportsSolveMeasureType EConj  conj,
const SolveMeasureType solveMeasureType
const [virtual]
 

Return if solveTranspose() supports the given the solve measure type.

The default implementation returns true for solveMeasureType.inNone().

Reimplemented in Thyra::SingleScalarLinearOpWithSolveBase< Scalar >, and Thyra::SingleScalarLinearOpWithSolveBase< std::complex< RealScalar > >.

Definition at line 56 of file Thyra_LinearOpWithSolveBase.hpp.

template<class RangeScalar, class DomainScalar>
void Thyra::LinearOpWithSolveBase< RangeScalar, DomainScalar >::solveTranspose const EConj  conj,
const MultiVectorBase< DomainScalar > &  B,
MultiVectorBase< RangeScalar > *  X,
const int  numBlocks = 0,
const BlockSolveCriteria< PromotedScalar blockSolveCriteria[] = NULL,
SolveStatus< PromotedScalar blockSolveStatus[] = NULL
const [virtual]
 

Request the transpose (or adjoint) solution of a block system with different targeted solution criteria.

Parameters:
conj [in] Determines if the elements are non-conjugate (NONCONJ_ELE) or conjugate (CONJ_ELE). For real valued operator, this argument is meaningless. The transpose solve is requested with conj==NONCONJ_ELE and the adjoint solve is requested with conj==CONJ_ELE.
B [in] The RHS multi-vector with m = B.domain()->dim() columns.
X [in/out] The LHS multi-vector with with m = X->domain()->dim() columns. On input, contains the initial guess for the solution (only significant for iterative solvers) and on output contains an estimate of the solution.
numBlocks [in] The number of blocks for which solve tolerances will be specified for. If numBlocks==0 then this is a flag that a default set of tolerances should be used for all the linear systems. Default numBlocks=0.
blockSolveCriteria [in] Array (length numBlocks) which gives the desired solution criteria for each of the numBlocks blocks of RHS. If numBlocks>0 then this argument must be non-NULL and point to a valid array of numBlocks entries.
blockSolveStatus [out] Array (length numBlocks) which gives the status of each set of block systems. A value of blockSolveStatus==NULL is allowed and means that the client is not interested in solution status of the linear systems.
Preconditions:
  • this->solveTransposeSupportsConj(conj)==true
  • X!=NULL
  • this->domain()->isCompatible(*B.range())==true
  • this->range()->isCompatible(*X->range())==true
  • B->domain()->isCompatible(*X->domain())==true
  • numBlocks >= 0
  • [numBlocks == 0] blockSolveCriteria==NULL && blockSolveStatus==NULL.
  • [numBlocks > 0] blockSolveCriteria!=NULL and points to an array of length at least numBlocks.
  • [numBlocks > 0] this->solveTransposeSupportsSolveMeasureType(conj,blockSolveCriteria[k].solveMeasureType)==true, for k = 0...numBlocks-1.
  • [blockSolveStatus!=NULL] blockSolveStatus and points to an array of length at least numBlocks.

Postconditions:

  • If any progress on solving the linear systems could be achieved, then the function will return normally. However, if no progress could be made in solving the linear systems, then an exception of type CatastrophicSolveFailure will be thrown. If the function returns normally, then the following postconditions apply.
  • If blockSolveStatus!=NULL then blockSolveStatus[k] gives the solution status of the block of linear systems specified by blockSolveCriteria[k] where, for k=0...numBlocks-1.

See the above introduction for a more complete description of how this function behaves and the meaning of the arguments blockSolveCriteria[] and blockSolveStatus[].

Definition at line 62 of file Thyra_LinearOpWithSolveBase.hpp.


The documentation for this class was generated from the following files:
Generated on Thu Sep 18 12:33:11 2008 for Thyra Package Browser (Single Doxygen Collection) by doxygen 1.3.9.1