00001 #ifndef cgUzawa_hh 00002 #define cgUzawa_hh 00003 00004 #include <string> 00005 00006 #include "basics/typedefs.hh" 00007 #include "operator/compositions.hh" 00008 #include "vectorial/vectorial.hh" 00009 00010 namespace vectorial { 00011 00012 using concepts::Real; 00013 00014 // *************************************************************** CGUzawa ** 00015 00049 class CGUzawa : public concepts::Operator<Real> { 00050 public: 00062 CGUzawa(concepts::Operator<Real>& A, concepts::Operator<Real>& B, 00063 concepts::Operator<Real>& Bt, concepts::Operator<Real>& C, 00064 concepts::Operator<Real>& Ai, 00065 Real maxeps, int maxit = 0, uint relres = false); 00066 00067 virtual void operator()(const concepts::Function<Real>& fncY, 00068 concepts::Function<Real>& fncX); 00069 void operator()(const concepts::Vector<Real>& fncY, 00070 concepts::Vector<Real>& fncX); 00071 00075 uint iterations() const { return it_; } 00076 00080 Real epsilon() const { return eps_; } 00081 protected: 00082 std::ostream& info(std::ostream& os) const; 00083 private: 00085 uint bdim_[2]; 00087 concepts::Operator<Real>& A_; 00089 concepts::Operator<Real>& B_; 00091 concepts::Operator<Real>& Bt_; 00093 concepts::Operator<Real>& C_; 00095 concepts::Operator<Real>& Ai_; 00097 Real maxeps_; 00099 uint maxit_; 00101 Real eps_; 00103 uint it_; 00105 bool relres_; 00106 }; 00107 00108 } // namespace vectorial 00109 00110 #endif // cgUzawa_hh