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