PlayaLinearSolverBaseDecl.hpp
00001
00002
00003
00004
00005 #ifndef PLAYA_LINEARSOLVERBASEDECL_HPP
00006 #define PLAYA_LINEARSOLVERBASEDECL_HPP
00007
00008 #include "PlayaDefs.hpp"
00009 #include "PlayaSolverState.hpp"
00010 #include "PlayaObjectWithVerbosity.hpp"
00011 #include "Teuchos_ParameterList.hpp"
00012
00013 namespace Playa
00014 {
00015 using namespace Teuchos;
00016 template <class Scalar>
00017 class LinearOperator;
00018
00019 template <class Scalar>
00020 class Preconditioner;
00021
00022 template <class Scalar>
00023 class PreconditionerFactory;
00024
00025 template <class Scalar>
00026 class Vector;
00027
00028
00030 template <class Scalar>
00031 class LinearSolverBase : public ObjectWithVerbosity
00032 {
00033 public:
00035 LinearSolverBase(const ParameterList& params);
00036
00038 virtual ~LinearSolverBase(){;}
00039
00041 virtual SolverState<Scalar> solve(const LinearOperator<Scalar>& op,
00042 const Vector<Scalar>& rhs,
00043 Vector<Scalar>& soln) const = 0;
00044
00046 virtual void updateTolerance(const double& tol) {;}
00047
00049 virtual void setUserPrec(const PreconditionerFactory<Scalar>& pf);
00050
00052 virtual void setUserPrec(const LinearOperator<Scalar>& P,
00053 const LinearSolver<Scalar>& pSolver);
00054
00056 const ParameterList& parameters() const ;
00057
00059 ParameterList& parameters();
00060
00062 std::string verbosityParam() const ;
00063
00065 template <typename T>
00066 static void setParameter(const ParameterList& params,
00067 T* valuePtr,
00068 const std::string& paramName);
00069 private:
00070 ParameterList params_;
00071 };
00072 }
00073
00074 #endif