LAMA
/home/brandes/workspace/LAMA/src/lama/solver/DefaultJacobi.hpp
Go to the documentation of this file.
00001 
00034 #ifndef LAMA_DEFAULTJACOBI_HPP_
00035 #define LAMA_DEFAULTJACOBI_HPP_
00036 
00037 // for dll_import
00038 #include <lama/config.hpp>
00039 
00040 // base classes
00041 #include <lama/solver/OmegaSolver.hpp>
00042 
00043 // logging
00044 #include <logging/Logger.hpp>
00045 
00046 namespace lama
00047 {
00048 
00049 class LAMA_DLL_IMPORTEXPORT DefaultJacobi : public OmegaSolver
00050 {
00051 public:
00052     DefaultJacobi( const std::string& id );
00053 
00054     DefaultJacobi( const std::string& id, LoggerPtr logger );
00055 
00056     DefaultJacobi( const std::string& id, const Scalar omega ); //2nd param Matrix.Scalar
00057 
00058     DefaultJacobi( const std::string& id, const Scalar omega, LoggerPtr logger );
00059 
00063     DefaultJacobi( const DefaultJacobi& other );
00064 
00065     virtual ~DefaultJacobi();
00066 
00076     virtual void initialize( const Matrix& coefficients );
00077 
00078     virtual void solve( Vector& solution, const Vector& rhs );
00079 
00080     virtual void solveInit( Vector& solution, const Vector& rhs );
00081 
00082     virtual void solveFinalize();
00083 
00090     virtual SolverPtr copy();
00091 
00092 
00093     struct DefaultJacobiRuntime : OmegaSolverRuntime
00094     {
00095         DefaultJacobiRuntime();
00096         virtual ~DefaultJacobiRuntime();
00097         
00098         std::auto_ptr<Matrix> mDiagonalTimesLU;
00099         std::auto_ptr<Matrix> mDiagonalInverted;
00100         std::auto_ptr<Vector> mDiagonalTimesRhs;
00101         std::auto_ptr<Vector> mOldSolution;
00102         SolutionProxy mProxyOldSolution;
00103     };
00104 
00108     virtual DefaultJacobiRuntime& getRuntime();
00109 
00113     virtual const DefaultJacobiRuntime& getConstRuntime() const;
00114 
00115 protected:
00116     DefaultJacobiRuntime mDefaultJacobiRuntime;
00117 
00124     virtual void iterate();
00125 
00126     LAMA_LOG_DECL_STATIC_LOGGER(logger);
00127 
00128 private:
00129 
00130     template<typename T>
00131     void initialize(const Matrix& coefficients);
00132 
00133     template<typename T>
00134     void iterate();
00135 };
00136 
00137 }// namespace lama
00138 
00139 #endif // LAMA_DEFAULTJACOBI_HPP_