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
00034 #ifndef _ABSTRACTONESTEPIVPODESOLVER_HPP_
00035 #define _ABSTRACTONESTEPIVPODESOLVER_HPP_
00036
00037 #include "AbstractIvpOdeSolver.hpp"
00038
00039 class AbstractOneStepIvpOdeSolver : public AbstractIvpOdeSolver
00040 {
00041 private:
00045 std::vector<double> mWorkingMemory;
00046
00047 protected:
00059 virtual void InternalSolve(AbstractOdeSystem* pAbstractOdeSystem,
00060 std::vector<double>& rCurrentYValues,
00061 std::vector<double>& rWorkingMemory,
00062 double startTime,
00063 double endTime,
00064 double timeStep);
00065
00069 virtual void CalculateNextYValue(AbstractOdeSystem* pAbstractOdeSystem,
00070 double timeStep,
00071 double time,
00072 std::vector<double>& currentYValues,
00073 std::vector<double>& nextYValues)=0;
00074
00075 public:
00108 virtual OdeSolution Solve(AbstractOdeSystem* pAbstractOdeSystem,
00109 std::vector<double>& rYValues,
00110 double startTime,
00111 double endTime,
00112 double timeStep,
00113 double timeSampling);
00114
00115
00144 virtual void Solve(AbstractOdeSystem* pAbstractOdeSystem,
00145 std::vector<double>& rYValues,
00146 double startTime,
00147 double endTime,
00148 double timeStep);
00149
00150 virtual ~AbstractOneStepIvpOdeSolver()
00151 {}
00152 };
00153
00154 #endif //_ABSTRACTONESTEPIVPODESOLVER_HPP_