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 }