42 virtual T
function(
const T & val,
const double time)
const = 0;
68 virtual T
function(
const T& val,
const int index)
const = 0;
82 template<
class VECTOR,
class MATRIX,
class T>
86 virtual MATRIX
function(
const VECTOR& val,
const T t) = 0;
99 template <
class VECTOR,
class MATRIX>
103 virtual MATRIX
function(
const VECTOR & val,
double t) = 0;
117 template <
class VECTOR,
class MATRIX>
121 virtual MATRIX
function(
const VECTOR & val,
int t) = 0;
130 template <
class M,
class T1>
134 virtual M
const function(T1 t) = 0;
138 template<
class VECTOR,
class MATRIX,
class T>
142 virtual MATRIX
function(
const VECTOR& val,
const T t) = 0;
143 virtual MATRIX sqrt(
const VECTOR & val,
int t) = 0;
147 template <
class VECTOR,
class MATRIX>
151 virtual MATRIX
function(
const VECTOR & val,
int t) = 0;
152 virtual MATRIX sqrt(
const VECTOR & val,
int t) = 0;
184 :M(M),currentIndex(startIndex),currentState(startState){}
195 if(stepsForward < 0){
196 throw std::out_of_range(
"");
198 for(
int i = 0; i < stepsForward; i++){
199 currentState = M->
function(currentState,currentIndex);
207 void setInitialConditions(
const T & newState,
int newIndex){
208 currentState = newState;
209 currentIndex = newIndex;
226 T evaluateModel(
const T & t,
const double time){
254 :M(M),currentTime(startTime),currentState(startState){};
262 virtual void solve(
double timeForward) = 0;
267 void setInitialConditions(
const T & newState,
double newTime){
268 currentState = newState;
269 currentTime = newTime;
286 T evaluateModel(
const T & t,
const double time)
const{
317 void solve(
double timeForward){
320 throw std::out_of_range(
"");
326 double startTime = localTime;
327 double localTimeStep = timeStep;
328 double finalTime = startTime + timeForward;
330 while(localTime < finalTime){
332 if(localTime + localTimeStep > finalTime){
333 localTimeStep = finalTime - localTime;
337 T k2 = localTimeStep*continuousSolver<T>::evaluateModel(tmp + 0.5*k1, localTime + 0.5*localTimeStep);
338 T k3 = localTimeStep*continuousSolver<T>::evaluateModel(tmp + 0.5*k2, localTime + 0.5*localTimeStep);
339 T k4 = localTimeStep*continuousSolver<T>::evaluateModel(tmp + k3, localTime + localTimeStep);
341 tmp = tmp + (1.0/6.0)*(k1 + 2.0*k2 + 2.0*k3 + k4);
342 localTime+=localTimeStep;
double getCurrentIndex()
Getter for current time.
Definition: model.h:218
double getCurrentTime()
Getter for current time.
Definition: model.h:278
virtual T function(const T &val, const int index) const =0
void solve(int stepsForward)
solve timeForward time units forward from currentTime
Definition: model.h:194
T getCurrentState()
Getter for current state.
Definition: model.h:213
T getCurrentState()
Getter for state.
Definition: model.h:273
virtual T function(const T &val, const double time) const =0