00001 #ifndef PICARDLINEARIZATION_H 00002 #define PICARDLINEARIZATION_H 00003 00004 #include "SundanceDefs.h" 00005 #include "StaticLinearProblem.h" 00006 #include "TSFNonlinearOperatorBase.h" 00007 #include "TSFNonlinearOperator.h" 00008 #include "PicardSolver.h" 00009 00010 namespace Sundance 00011 { 00012 00013 using namespace TSF; 00014 using std::string; 00015 00016 using std::ostream; 00017 00018 /** \ingroup UserLevelFE 00019 */ 00020 00021 class PicardLinearization : public TSFNonlinearOperatorBase 00022 { 00023 public: 00024 /** */ 00025 PicardLinearization(); 00026 /** */ 00027 PicardLinearization(const StaticLinearProblem& linearizedProblem, 00028 const Expr& guess, 00029 const TSFLinearSolver& solver); 00030 /** */ 00031 virtual ~PicardLinearization(); 00032 00033 /** apply the operator to a vector. */ 00034 virtual void apply(const TSFVector& arg, TSFVector& out) const ; 00035 00036 /** */ 00037 Expr solve(const PicardSolver& solver) const ; 00038 00039 private: 00040 mutable StaticLinearProblem linearizedProblem_; 00041 00042 mutable Expr guess_; 00043 00044 TSFLinearSolver solver_; 00045 }; 00046 00047 00048 } 00049 #endif