LAMA
|
00001 00034 #ifndef LAMA_SOLVER_HPP_ 00035 #define LAMA_SOLVER_HPP_ 00036 00037 // for dll_import 00038 #include <lama/config.hpp> 00039 00040 // base classes 00041 #include <lama/NonCopyable.hpp> 00042 00043 // others 00044 #include <lama/Vector.hpp> 00045 #include <lama/Printable.hpp> 00046 00047 #include <lama/matrix/Matrix.hpp> 00048 00049 #include <lama/solver/SolutionProxy.hpp> 00050 #include <lama/solver/logger/Logger.hpp> 00051 00052 // logging 00053 #include <logging/logging.hpp> 00054 00055 #include <string> 00056 #include <memory> 00057 00058 namespace lama 00059 { 00060 00061 class Solver; 00062 typedef boost::shared_ptr<Solver> SolverPtr; 00063 00071 class LAMA_DLL_IMPORTEXPORT Solver : public Printable 00072 { 00073 public: 00079 Solver(const std::string& id); 00080 00087 Solver(const std::string& id, LoggerPtr logger); 00088 00092 Solver( const Solver& other ); 00093 00097 virtual ~Solver(); 00098 00113 virtual void initialize( const Matrix& coefficients ); 00114 00128 virtual void solve( Vector& solution, const Vector& rhs ); 00129 00136 virtual void solveInit( Vector& solution, const Vector& rhs ); 00137 00151 virtual void solveImpl() = 0; 00152 00156 virtual void solveFinalize(); 00157 00163 const std::string& getId() const; 00164 00174 const Vector& getResidual() const; 00175 00181 const Matrix& getCoefficients() const; 00182 00187 void setLogger( LoggerPtr logger ); 00188 00194 void setLogLevel(LogLevel::LogLevel level); 00195 00205 virtual void setContext( ContextPtr context ); 00206 00213 virtual SolverPtr copy() =0; 00214 00218 struct SolverRuntime : public NonCopyable 00219 { 00220 SolverRuntime(); 00221 virtual ~SolverRuntime(); 00222 00226 const Matrix* mCoefficients; 00227 00231 const Vector* mRhs; 00232 00236 mutable SolutionProxy mSolution; 00237 00241 mutable std::auto_ptr<Vector> mResidual; 00242 00246 bool mInitialized; 00247 00251 bool mSolveInit; 00252 }; 00253 00257 virtual SolverRuntime& getRuntime() =0; 00258 00259 00263 virtual const SolverRuntime& getConstRuntime() const =0; 00264 00265 protected: 00266 00270 std::string mId; 00271 00277 LoggerPtr mLogger; 00278 00284 ContextPtr mContext; 00285 00289 virtual void writeAt( std::ostream& stream ) const; 00290 00291 LAMA_LOG_DECL_STATIC_LOGGER(logger); 00292 }; 00293 00294 } // namespace lama 00295 00296 #endif // LAMA_SOLVER_HPP_