Go to the documentation of this file.00001
00002
00003 #ifndef CGUzawafabric_hh
00004 #define CGUzawafabric_hh
00005
00006 #if __GNUC__ == 2
00007 # include <float.h>
00008 # define EPS DBL_EPSILON
00009 #else
00010 # include <limits>
00011 # define EPS std::numeric_limits<double>::epsilon()
00012 #endif
00013 #include "cgUzawa.hh"
00014 #include "operator/solverFabric.hh"
00015
00016 using concepts::Real;
00017
00018 namespace vectorial {
00019
00020
00021
00029 class CGUzawaFabric : public concepts::SolverFabric<Real> {
00030 public:
00037 CGUzawaFabric(concepts::Operator<Real>& A, concepts::Operator<Real>& B,
00038 concepts::Operator<Real>& Bt, concepts::Operator<Real>& C,
00039 concepts::Operator<Real>& Ai,
00040 Real maxeps = EPS,
00041 int maxit = 0, uint relres = 0)
00042 : A_(A), B_(B), Bt_(Bt), C_(C), Ai_(Ai),
00043 maxeps_(maxeps), maxit_(maxit), relres_(relres) { }
00044 virtual concepts::Operator<Real>* operator()
00045 (concepts::Operator<Real>& matrix) {
00046 return new CGUzawa(A_, B_, Bt_, C_, Ai_, maxeps_, maxit_, relres_);
00047 }
00048 protected:
00049 virtual std::ostream& info(std::ostream& os) const {
00050 return os << "CGUzawaFabric(maxeps = " << maxeps_ << ", maxit = "
00051 << maxit_ << ", relres = " << relres_ << ")";
00052 }
00053 private:
00055 concepts::Operator<Real>& A_;
00057 concepts::Operator<Real>& B_;
00059 concepts::Operator<Real>& Bt_;
00061 concepts::Operator<Real>& C_;
00063 concepts::Operator<Real>& Ai_;
00065 Real maxeps_;
00067 int maxit_;
00069 uint relres_;
00070 };
00071
00072 }
00073
00074 #endif // CGUzawafabric_hh