00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef MEROS_PRECONDITIONING_STRATEGY_H
00030 #define MEROS_PRECONDITIONING_STRATEGY_H
00031
00032 #include "Thyra_LinearOpBase.hpp"
00033 #include "Thyra_VectorImpl.hpp"
00034 #include "Thyra_VectorSpaceImpl.hpp"
00035 #include "Thyra_LinearOperatorImpl.hpp"
00036 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
00037 #include "Thyra_LinearOpWithSolveBase.hpp"
00038 #include "Thyra_PreconditionerFactoryBase.hpp"
00039 #include "Thyra_PreconditionerBase.hpp"
00040
00041 namespace Meros
00042 {
00043 using namespace Teuchos;
00044 using namespace Thyra;
00045
00049 template <class Scalar>
00050 class PreconditioningStrategy
00051 {
00052 public:
00054 PreconditioningStrategy() : pf_() {;}
00055
00057 PreconditioningStrategy(const RCP<PreconditionerFactoryBase<Scalar> >& pf)
00058 : pf_(pf) {;}
00059
00061 PreconditioningStrategy(Handleable<PreconditionerFactoryBase<Scalar> >* pf)
00062 : pf_(pf->getRcp()) {;}
00063
00065 RCP<PreconditionerBase<Scalar> > getPrec(const LinearOperator<Scalar>& op) const
00066 {
00067 RCP<PreconditionerBase<Scalar> > rtn = pf_->createPrec();
00068 pf_->initializeOp<Scalar>(op.ptr(), &*rtn);
00069 return rtn;
00070 }
00071
00073 const RCP<PreconditionerFactoryBase<Scalar> >& ptr() const {return pf_;}
00075 RCP<PreconditionerFactoryBase<Scalar> > ptr() {return pf_;}
00076
00077 protected:
00078 RCP<PreconditionerFactoryBase<Scalar> > pf() {return pf_;}
00079
00080 private:
00081
00082 RCP<PreconditionerFactoryBase<Scalar> > pf_;
00083 };
00084
00085
00086 }
00087
00088 #endif // MEROS_PCD_OPERATOR_SOURCE_H