LAMA
|
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_