00001 00005 #ifndef afteriterations_hh 00006 #define afteriterations_hh 00007 00008 #include "compositions.hh" 00009 #include "toolbox/sequence.hh" 00010 00011 namespace concepts { 00012 00013 // ********************************************************* AfterIteration ** 00014 00024 template<class F> 00025 class AfterIteration : public Operator<F> { 00026 public: 00028 typedef F type; 00029 00036 AfterIteration(Operator<F>& A, Operator<F>& solver, 00037 const uint afterIter = 0); 00038 virtual ~AfterIteration() {} 00039 00040 virtual void operator()(const Function<F>& fncY, Function<F>& fncX); 00041 00042 const Vector<F>& solution(); 00043 const Vector<F>& solution(uint i); 00044 const Vector<F>& residual(); 00045 const Vector<F>& residual(uint i); 00046 protected: 00047 virtual std::ostream& info(std::ostream& os) const; 00048 private: 00050 Operator<F> &A_, &solver_; 00052 uint afterIter_; 00054 uint cnt_; 00056 Sequence<Vector<F> > solution_; 00058 Sequence<Vector<F> > residual_; 00059 }; 00060 00061 } // namespace concepts 00062 00063 #endif // afteriterations_hh