00001 /* @HEADER@ */ 00002 // 00003 /* @HEADER@ */ 00004 00005 #ifndef PLAYA_NONLINEARSOLVERBASE_HPP 00006 #define PLAYA_NONLINEARSOLVERBASE_HPP 00007 00008 #include "PlayaDefs.hpp" 00009 #include "PlayaLinearSolverBaseDecl.hpp" 00010 00011 namespace Playa 00012 { 00013 using namespace Teuchos; 00014 template<class Scalar> 00015 class NonlinearOperator; 00016 00017 /** 00018 * Base interface for nonlinear solvers 00019 */ 00020 template <class Scalar> 00021 class NonlinearSolverBase : public Handleable<NonlinearSolverBase<Scalar> > 00022 { 00023 public: 00024 /** */ 00025 NonlinearSolverBase(const ParameterList& params = ParameterList()); 00026 00027 /** */ 00028 virtual ~NonlinearSolverBase(){;} 00029 00030 /** */ 00031 virtual SolverState<Scalar> solve(const NonlinearOperator<Scalar>& F, 00032 Vector<Scalar>& soln) const = 0 ; 00033 00034 protected: 00035 00036 const ParameterList& params() const {return params_;} 00037 00038 private: 00039 ParameterList params_; 00040 }; 00041 00042 00043 template <class Scalar> inline 00044 NonlinearSolverBase<Scalar> 00045 ::NonlinearSolverBase(const ParameterList& params) 00046 : params_(params) 00047 {;} 00048 00049 } 00050 00051 #endif