Thyra_BelosLinearOpWithSolveDecl.hpp

00001 
00002 #ifndef THYRA_BELOS_LINEAR_OP_WITH_SOLVE_DECL_HPP
00003 #define THYRA_BELOS_LINEAR_OP_WITH_SOLVE_DECL_HPP
00004 
00005 #include "Thyra_SingleRhsLinearOpWithSolveBase.hpp"
00006 #include "BelosSolverManager.hpp"
00007 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00008 
00009 namespace Thyra {
00010 
00018 template<class Scalar>
00019 class BelosLinearOpWithSolve
00020   : virtual public LinearOpWithSolveBase<Scalar>                  // Public interface
00021   , virtual protected SingleScalarLinearOpWithSolveBase<Scalar>   // Implementation detail
00022 {
00023 public:
00024 
00027 
00029   typedef MultiVectorBase<Scalar>    MV_t;
00031   typedef LinearOpBase<Scalar>       LO_t;
00032 
00034 
00037 
00039   BelosLinearOpWithSolve();
00040 
00042   BelosLinearOpWithSolve(
00043     const Teuchos::RCP<Belos::LinearProblem<Scalar,MV_t,LO_t> >         &lp
00044     ,const Teuchos::RCP<Teuchos::ParameterList>                         &solverPL
00045     ,const Teuchos::RCP<Belos::SolverManager<Scalar,MV_t,LO_t> >        &iterativeSolver
00046     ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> >      &fwdOpSrc
00047     ,const Teuchos::RCP<const PreconditionerBase<Scalar> >             &prec
00048     ,const bool                                                                 isExternalPrec
00049     ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> >              &approxFwdOpSrc
00050     ,const ESupportSolveUse                                                     &supportSolveUse
00051     );
00052 
00086   void initialize(
00087     const Teuchos::RCP<Belos::LinearProblem<Scalar,MV_t,LO_t> >         &lp
00088     ,const Teuchos::RCP<Teuchos::ParameterList>                         &solverPL
00089     ,const Teuchos::RCP<Belos::SolverManager<Scalar,MV_t,LO_t> >        &iterativeSolver
00090     ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> >              &fwdOpSrc
00091     ,const Teuchos::RCP<const PreconditionerBase<Scalar> >              &prec
00092     ,const bool                                                         isExternalPrec
00093     ,const Teuchos::RCP<const LinearOpSourceBase<Scalar> >              &approxFwdOpSrc
00094     ,const ESupportSolveUse                                             &supportSolveUse
00095     );
00096 
00098   Teuchos::RCP<const LinearOpSourceBase<Scalar> > extract_fwdOpSrc();
00099 
00101   Teuchos::RCP<const PreconditionerBase<Scalar> > extract_prec();
00102 
00104   bool isExternalPrec() const;
00105 
00107   Teuchos::RCP<const LinearOpSourceBase<Scalar> > extract_approxFwdOpSrc();
00108 
00110   ESupportSolveUse supportSolveUse() const;
00111 
00116   void uninitialize(
00117     Teuchos::RCP<Belos::LinearProblem<Scalar,MV_t,LO_t> >         *lp                        = NULL
00118     ,Teuchos::RCP<Teuchos::ParameterList>                         *solverPL                   = NULL
00119     ,Teuchos::RCP<Belos::SolverManager<Scalar,MV_t,LO_t> >        *iterativeSolver           = NULL
00120     ,Teuchos::RCP<const LinearOpSourceBase<Scalar> >              *fwdOpSrc                  = NULL
00121     ,Teuchos::RCP<const PreconditionerBase<Scalar> >              *prec                      = NULL
00122     ,bool                                                         *isExternalPrec            = NULL
00123     ,Teuchos::RCP<const LinearOpSourceBase<Scalar> >              *approxFwdOpSrc            = NULL
00124     ,ESupportSolveUse                                             *supportSolveUse           = NULL
00125     );
00126 
00128 
00132   Teuchos::RCP< const VectorSpaceBase<Scalar> > range() const;
00134   Teuchos::RCP< const VectorSpaceBase<Scalar> > domain() const;
00136   Teuchos::RCP<const LinearOpBase<Scalar> > clone() const;
00138 
00142   std::string description() const;
00144   void describe(
00145     Teuchos::FancyOStream                &out
00146     ,const Teuchos::EVerbosityLevel      verbLevel
00147     ) const;
00149 
00152 
00154   void setParameterList(Teuchos::RCP<Teuchos::ParameterList> const& paramList);
00156   Teuchos::RCP<Teuchos::ParameterList> getNonconstParameterList();
00158   Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
00160   Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const;
00162   Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
00163 
00165 
00166 protected:
00167 
00171   bool opSupported(EOpTransp M_trans) const;
00173   void apply(
00174     const EOpTransp                     M_trans
00175     ,const MultiVectorBase<Scalar>    &X
00176     ,MultiVectorBase<Scalar>          *Y
00177     ,const Scalar                     alpha
00178     ,const Scalar                     beta
00179     ) const;
00181 
00185   bool solveSupportsTrans(EOpTransp M_trans) const;
00187   bool solveSupportsSolveMeasureType(EOpTransp M_trans, const SolveMeasureType& solveMeasureType) const;
00189   void solve(
00190     const EOpTransp                         M_trans
00191     ,const MultiVectorBase<Scalar>        &B
00192     ,MultiVectorBase<Scalar>              *X
00193     ,const int                            numBlocks
00194     ,const BlockSolveCriteria<Scalar>     blockSolveCriteria[]
00195     ,SolveStatus<Scalar>                  blockSolveStatus[]
00196     ) const;
00198   
00199 private:
00200   
00201   // ///////////////////////////////
00202   // Private data members
00203 
00204 
00205   Teuchos::RCP<Belos::LinearProblem<Scalar,MV_t,LO_t> >           lp_;
00206   Teuchos::RCP<Teuchos::ParameterList>                            solverPL_;
00207   Teuchos::RCP<Belos::SolverManager<Scalar,MV_t,LO_t> >           iterativeSolver_;
00208 
00209   Teuchos::RCP<const LinearOpSourceBase<Scalar> >                 fwdOpSrc_;
00210   Teuchos::RCP<const PreconditionerBase<Scalar> >                 prec_;
00211   bool                                                            isExternalPrec_;
00212   Teuchos::RCP<const LinearOpSourceBase<Scalar> >                 approxFwdOpSrc_;
00213   ESupportSolveUse                                                supportSolveUse_;
00214 
00215   typename Teuchos::ScalarTraits<Scalar>::magnitudeType           defaultTol_;
00216                                                      
00217   void assertInitialized() const;
00218   
00219 };
00220 
00221 } // namespace Thyra
00222 
00223 #endif  // THYRA_BELOS_LINEAR_OP_WITH_SOLVE_DECL_HPP

Generated on Wed Jul 22 12:56:30 2009 for Stratimikos by  doxygen 1.5.8