LAMA
/home/brandes/workspace/LAMA/src/lama/solver/Solver.hpp
Go to the documentation of this file.
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_