00001 // This file is part of ff3d - http://www.freefem.org/ff3d 00002 // Copyright (C) 2001, 2002, 2003 Stéphane Del Pino 00003 00004 // This program is free software; you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation; either version 2, or (at your option) 00007 // any later version. 00008 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 00014 // You should have received a copy of the GNU General Public License 00015 // along with this program; if not, write to the Free Software Foundation, 00016 // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00017 00018 // $Id: KrylovSolver.hpp,v 1.3 2008/02/13 21:25:27 delpinux Exp $ 00019 00020 #ifndef KRYLOV_SOLVER_HPP 00021 #define KRYLOV_SOLVER_HPP 00022 00023 #include <ReferenceCounting.hpp> 00024 00025 #include <KrylovSolverOptions.hpp> 00026 #include <GetParameter.hpp> 00027 00028 #include <Structured3DMeshShape.hpp> 00029 00030 #include <Vector.hpp> 00031 00032 class BaseMatrix; 00033 class BaseVector; 00034 00035 class DegreeOfFreedomSet; 00036 class Problem; 00037 00046 class KrylovSolver 00047 { 00048 private: 00049 const BaseMatrix& __A; 00050 const BaseVector& __b; 00052 const DegreeOfFreedomSet& 00053 __degreeOfFreedomSet; 00055 KrylovSolverOptions::Type 00056 __type; 00058 KrylovSolverOptions::PreconditionerType 00059 __pType; 00061 GetParameter<KrylovSolverOptions> 00062 __options; 00064 public: 00072 KrylovSolver(const BaseMatrix& A, 00073 const BaseVector& b, 00074 const DegreeOfFreedomSet& degreeOfFreedomSet) 00075 : __A(A), 00076 __b(b), 00077 __degreeOfFreedomSet(degreeOfFreedomSet) 00078 { 00079 __type = __options.value().type(); 00080 __pType = __options.value().precond(); 00081 } 00082 00089 void solve(const Problem& problem, ReferenceCounting<Vector<real_t> > u); 00090 }; 00091 00092 #endif // KRYLOVSOLVER_HPP
1.5.6