00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _ABSTRACTONESTEPIVPODESOLVER_HPP_
00030 #define _ABSTRACTONESTEPIVPODESOLVER_HPP_
00031
00032 #include <boost/serialization/access.hpp>
00033 #include <boost/serialization/is_abstract.hpp>
00034 #include <boost/serialization/base_object.hpp>
00035
00036 #include "AbstractIvpOdeSolver.hpp"
00037
00038
00039 #include <boost/serialization/export.hpp>
00040
00045 class AbstractOneStepIvpOdeSolver : public AbstractIvpOdeSolver
00046 {
00047
00048 private:
00049
00051 friend class boost::serialization::access;
00058 template<class Archive>
00059 void serialize(Archive & archive, const unsigned int version)
00060 {
00061
00062 archive & boost::serialization::base_object<AbstractIvpOdeSolver>(*this);
00063 }
00064
00068 std::vector<double> mWorkingMemory;
00069
00070 protected:
00071
00083 virtual void InternalSolve(AbstractOdeSystem* pAbstractOdeSystem,
00084 std::vector<double>& rCurrentYValues,
00085 std::vector<double>& rWorkingMemory,
00086 double startTime,
00087 double endTime,
00088 double timeStep);
00089
00100 virtual void CalculateNextYValue(AbstractOdeSystem* pAbstractOdeSystem,
00101 double timeStep,
00102 double time,
00103 std::vector<double>& rCurrentYValues,
00104 std::vector<double>& rNextYValues)=0;
00105
00106 public:
00107
00134 virtual OdeSolution Solve(AbstractOdeSystem* pAbstractOdeSystem,
00135 std::vector<double>& rYValues,
00136 double startTime,
00137 double endTime,
00138 double timeStep,
00139 double timeSampling);
00140
00163 virtual void Solve(AbstractOdeSystem* pAbstractOdeSystem,
00164 std::vector<double>& rYValues,
00165 double startTime,
00166 double endTime,
00167 double timeStep);
00168
00172 virtual ~AbstractOneStepIvpOdeSolver()
00173 {}
00174 };
00175
00176 BOOST_IS_ABSTRACT(AbstractOneStepIvpOdeSolver)
00177
00178 #endif //_ABSTRACTONESTEPIVPODESOLVER_HPP_