00001 #include "cgsolver.h"
00002 #include <lac/precondition.h>
00003 #include "numericmethods.h"
00004
00005
00006 CGSolver::CGSolver(unsigned numIt,double tol,unsigned debugLevel)
00007 :m_solverControl(numIt,tol,debugLevel,debugLevel),
00008 m_solver(m_solverControl),
00009 m_numIt(numIt),
00010 m_tol(tol)
00011 {
00012
00013 }
00014
00015
00016
00017
00018 void CGSolver::solve(const SparseMatrix<double> &M,VecDouble &sol,const VecDouble &rhs)
00019 {
00020 PreconditionSSOR<SparseMatrix<double> > precondition;
00021 precondition.initialize(M);
00022 m_solver.solve(M,sol,rhs,precondition);
00023 {
00024 double min,media,max;
00025 NumericMethods::checkLinearSolution(M,sol,rhs,min,media,max);
00026 printf("Solver %g %g %g %g\n",min,media,max,m_tol);
00027 }
00028 }
00029 void CGSolver::solveAgain(const SparseMatrix<double> &M,VecDouble &sol,const VecDouble &rhs)
00030 {
00031 this->solve(M,sol,rhs);
00032 }