Thyra_BelosLinearOpWithSolveDecl.hpp

Go to the documentation of this file.
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 "BelosIterativeSolver.hpp"
00007 #include "BelosStatusTestResNorm.hpp"
00008 #include "BelosOutputManager.hpp"
00009 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00010 
00011 namespace Thyra {
00012 
00020 template<class Scalar>
00021 class BelosLinearOpWithSolve
00022   : virtual public LinearOpWithSolveBase<Scalar>                  // Public interface
00023   , virtual protected SingleScalarLinearOpWithSolveBase<Scalar>   // Implementation detail
00024 {
00025 public:
00026 
00029 
00031   typedef MultiVectorBase<Scalar>    MV_t;
00033   typedef LinearOpBase<Scalar>       LO_t;
00034 
00036 
00039 
00041   BelosLinearOpWithSolve();
00042 
00044   BelosLinearOpWithSolve(
00045     const Teuchos::RefCountPtr<Belos::LinearProblem<Scalar,MV_t,LO_t> >         &lp
00046     ,const bool                                                                 adjustableBlockSize
00047     ,const int                                                                  maxNumberOfKrylovVectors
00048     ,const Teuchos::RefCountPtr<Teuchos::ParameterList>                         &gmresPL
00049     ,const Teuchos::RefCountPtr<Belos::StatusTestResNorm<Scalar,MV_t,LO_t> >    &resNormST
00050     ,const Teuchos::RefCountPtr<Belos::IterativeSolver<Scalar,MV_t,LO_t> >      &iterativeSolver
00051     ,const Teuchos::RefCountPtr<Belos::OutputManager<Scalar> >                  &outputManager
00052     ,const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >              &fwdOpSrc
00053     ,const Teuchos::RefCountPtr<const PreconditionerBase<Scalar> >              &prec
00054     ,const bool                                                                 isExternalPrec
00055     ,const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >              &approxFwdOpSrc
00056     ,const ESupportSolveUse                                                     &supportSolveUse
00057     );
00058 
00105   void initialize(
00106     const Teuchos::RefCountPtr<Belos::LinearProblem<Scalar,MV_t,LO_t> >         &lp
00107     ,const bool                                                                 adjustableBlockSize
00108     ,const int                                                                  maxNumberOfKrylovVectors
00109     ,const Teuchos::RefCountPtr<Teuchos::ParameterList>                         &gmresPL
00110     ,const Teuchos::RefCountPtr<Belos::StatusTestResNorm<Scalar,MV_t,LO_t> >    &resNormST
00111     ,const Teuchos::RefCountPtr<Belos::IterativeSolver<Scalar,MV_t,LO_t> >      &iterativeSolver
00112     ,const Teuchos::RefCountPtr<Belos::OutputManager<Scalar> >                  &outputManager
00113     ,const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >              &fwdOpSrc
00114     ,const Teuchos::RefCountPtr<const PreconditionerBase<Scalar> >              &prec
00115     ,const bool                                                                 isExternalPrec
00116     ,const Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >              &approxFwdOpSrc
00117     ,const ESupportSolveUse                                                     &supportSolveUse
00118     );
00119 
00121   Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> > extract_fwdOpSrc();
00122 
00124   Teuchos::RefCountPtr<const PreconditionerBase<Scalar> > extract_prec();
00125 
00127   bool isExternalPrec() const;
00128 
00130   Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> > extract_approxFwdOpSrc();
00131 
00133   ESupportSolveUse supportSolveUse() const;
00134 
00139   void uninitialize(
00140     Teuchos::RefCountPtr<Belos::LinearProblem<Scalar,MV_t,LO_t> >         *lp                        = NULL
00141     ,bool                                                                 *adjustableBlockSize       = NULL
00142     ,int                                                                  *maxNumberOfKrylovVectors  = NULL
00143     ,Teuchos::RefCountPtr<Teuchos::ParameterList>                         *gmresPL                   = NULL
00144     ,Teuchos::RefCountPtr<Belos::StatusTestResNorm<Scalar,MV_t,LO_t> >    *resNormST                 = NULL
00145     ,Teuchos::RefCountPtr<Belos::IterativeSolver<Scalar,MV_t,LO_t> >      *iterativeSolver           = NULL
00146     ,Teuchos::RefCountPtr<Belos::OutputManager<Scalar> >                  *outputManager             = NULL
00147     ,Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >              *fwdOpSrc                  = NULL
00148     ,Teuchos::RefCountPtr<const PreconditionerBase<Scalar> >              *prec                      = NULL
00149     ,bool                                                                 *isExternalPrec            = NULL
00150     ,Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >              *approxFwdOpSrc            = NULL
00151     ,ESupportSolveUse                                                     *supportSolveUse           = NULL
00152     );
00153 
00155 
00159   Teuchos::RefCountPtr< const VectorSpaceBase<Scalar> > range() const;
00161   Teuchos::RefCountPtr< const VectorSpaceBase<Scalar> > domain() const;
00163   Teuchos::RefCountPtr<const LinearOpBase<Scalar> > clone() const;
00165 
00169   std::string description() const;
00171   void describe(
00172     Teuchos::FancyOStream                &out
00173     ,const Teuchos::EVerbosityLevel      verbLevel
00174     ) const;
00176 
00179 
00181   void setParameterList(Teuchos::RefCountPtr<Teuchos::ParameterList> const& paramList);
00183   Teuchos::RefCountPtr<Teuchos::ParameterList> getParameterList();
00185   Teuchos::RefCountPtr<Teuchos::ParameterList> unsetParameterList();
00187   Teuchos::RefCountPtr<const Teuchos::ParameterList> getParameterList() const;
00189   Teuchos::RefCountPtr<const Teuchos::ParameterList> getValidParameters() const;
00190 
00192 
00193 protected:
00194 
00198   bool opSupported(ETransp M_trans) const;
00200   void apply(
00201     const ETransp                     M_trans
00202     ,const MultiVectorBase<Scalar>    &X
00203     ,MultiVectorBase<Scalar>          *Y
00204     ,const Scalar                     alpha
00205     ,const Scalar                     beta
00206     ) const;
00208 
00212   bool solveSupportsTrans(ETransp M_trans) const;
00214   bool solveSupportsSolveMeasureType(ETransp M_trans, const SolveMeasureType& solveMeasureType) const;
00216   void solve(
00217     const ETransp                         M_trans
00218     ,const MultiVectorBase<Scalar>        &B
00219     ,MultiVectorBase<Scalar>              *X
00220     ,const int                            numBlocks
00221     ,const BlockSolveCriteria<Scalar>     blockSolveCriteria[]
00222     ,SolveStatus<Scalar>                  blockSolveStatus[]
00223     ) const;
00225   
00226 private:
00227   
00228   // ///////////////////////////////
00229   // Private data members
00230 
00231   typedef Belos::StatusTestResNorm<Scalar,MV_t,LO_t>                      StatusTestResNorm_t;
00232 
00233   Teuchos::RefCountPtr<Belos::LinearProblem<Scalar,MV_t,LO_t> >           lp_;
00234   bool                                                                    adjustableBlockSize_;
00235   int                                                                     maxNumberOfKrylovVectors_;
00236   Teuchos::RefCountPtr<Teuchos::ParameterList>                            gmresPL_;
00237   Teuchos::RefCountPtr<StatusTestResNorm_t>                               resNormST_;
00238   Teuchos::RefCountPtr<Belos::IterativeSolver<Scalar,MV_t,LO_t> >         iterativeSolver_;
00239   Teuchos::RefCountPtr<Belos::OutputManager<Scalar> >                     outputManager_;
00240 
00241   Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >                 fwdOpSrc_;
00242   Teuchos::RefCountPtr<const PreconditionerBase<Scalar> >                 prec_;
00243   bool                                                                    isExternalPrec_;
00244   Teuchos::RefCountPtr<const LinearOpSourceBase<Scalar> >                 approxFwdOpSrc_;
00245   ESupportSolveUse                                                        supportSolveUse_;
00246 
00247   typename Teuchos::ScalarTraits<Scalar>::magnitudeType                   defaultTol_;
00248                                                      
00249   void assertInitialized() const;
00250   
00251 };
00252 
00253 } // namespace Thyra
00254 
00255 #endif  // THYRA_BELOS_LINEAR_OP_WITH_SOLVE_DECL_HPP

Generated on Thu Sep 18 12:30:22 2008 for Belos Package Browser (Single Doxygen Collection) by doxygen 1.3.9.1