00001 /* @HEADER@ */ 00002 // 00003 /* @HEADER@ */ 00004 00005 #ifndef PLAYA_NEWTON_ARMIJO_SOLVER_DECL_HPP 00006 #define PLAYA_NEWTON_ARMIJO_SOLVER_DECL_HPP 00007 00008 #include "PlayaDefs.hpp" 00009 #include "PlayaNonlinearSolverBase.hpp" 00010 #include "PlayaLinearSolverDecl.hpp" 00011 #include "Teuchos_ScalarTraits.hpp" 00012 00013 namespace Playa 00014 { 00015 using namespace Teuchos; 00016 00031 template <class Scalar> 00032 class NewtonArmijoSolver : public NonlinearSolverBase<Scalar> 00033 { 00034 public: 00036 typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType ScalarMag; 00037 00039 NewtonArmijoSolver(const ParameterList& params, 00040 const LinearSolver<Scalar>& linSolver); 00041 00043 virtual ~NewtonArmijoSolver(){;} 00044 00046 SolverState<Scalar> solve(const NonlinearOperator<Scalar>& F, 00047 Vector<Scalar>& soln) const ; 00048 00049 /* */ 00050 GET_RCP(NonlinearSolverBase<Scalar>); 00051 00052 private: 00053 LinearSolver<Scalar> linSolver_; 00054 ScalarMag tauR_; 00055 ScalarMag tauA_; 00056 ScalarMag alpha_; 00057 ScalarMag stepReduction_; 00058 int maxIters_; 00059 int maxLineSearch_; 00060 int verb_; 00061 00062 }; 00063 00064 00065 } 00066 00067 #endif