LAMA
/home/brandes/workspace/LAMA/src/lama/solver/SpecializedJacobi.hpp
Go to the documentation of this file.
00001 
00034 #ifndef LAMA_SPECIALIZEDJACOBI_HPP_
00035 #define LAMA_SPECIALIZEDJACOBI_HPP_
00036 
00037 // for dll_import
00038 #include <lama/config.hpp>
00039 
00040 // base classes
00041 #include <lama/solver/OmegaSolver.hpp>
00042 
00043 // others
00044 #include <lama/matrix/SparseMatrix.hpp>
00045 
00046 namespace lama
00047 {
00048 
00049 class LAMA_DLL_IMPORTEXPORT SpecializedJacobi : public OmegaSolver
00050 {
00051 public:
00052     SpecializedJacobi( const std::string& id );
00053     SpecializedJacobi( const std::string& id, Scalar omega );
00054     SpecializedJacobi( const std::string& id, LoggerPtr logger );
00055     SpecializedJacobi( const std::string& id, Scalar omega, LoggerPtr logger );
00056     SpecializedJacobi( const SpecializedJacobi& other );
00057 
00058     virtual ~SpecializedJacobi();
00059 
00060     virtual void initialize( const Matrix& coefficients );
00061 
00062     virtual void solve( Vector& rhs, const Vector& solution );
00063 
00064     virtual void solveInit( Vector& solution, const Vector& rhs );
00065 
00066     virtual void solveFinalize();
00067 
00068     void iterate();
00069 
00070     struct SpecializedJacobiRuntime : OmegaSolverRuntime
00071     {
00072         SpecializedJacobiRuntime();
00073         virtual ~SpecializedJacobiRuntime();
00074         
00075         //TODO: LAMAArray?
00076         std::auto_ptr<Vector> mOldSolution;
00077         SolutionProxy mProxyOldSolution;
00078     };
00079 
00083     virtual SpecializedJacobiRuntime& getRuntime();
00084 
00088     virtual const SpecializedJacobiRuntime& getConstRuntime() const;
00089 
00096     virtual SolverPtr copy();
00097 
00098 protected:
00099     SpecializedJacobiRuntime mSpecializedJacobiRuntime;
00100 private:
00101     template<typename ValueType>
00102     void iterateTyped( const SparseMatrix<ValueType>& );
00103 };
00104 
00105 }// namespace lama
00106 
00107 #endif // LAMA_SPECIALIZEDJACOBI_HPP_