Simpact Cyan
Population based event driven simulation using mNRM
algorithm.h
Go to the documentation of this file.
1 #ifndef ALGORITHM_H
2 
3 #define ALGORITHM_H
4 
9 #include "booltype.h"
10 #include <stdint.h>
11 #include <vector>
12 
13 //#define ALGORITHM_SHOW_EVENTS
14 
15 //#define ALGORITHM_DEBUG_TIMER
16 
18 class EventBase;
19 class Algorithm;
20 
22 class State
23 {
24 public:
25  State() { m_time = 0; }
26  virtual ~State() { }
27 
34  double getTime() const { return m_time; }
35 
41  void setTime(double t) { m_time = t; }
42 private:
43  double m_time;
44 };
45 
68 class Algorithm
69 {
70 public:
74  virtual ~Algorithm();
75 
139  bool_t evolve(double &tMax, int64_t &maxEvents, double startTime = 0, bool initEvents = true);
140 
142  double getTime() const { return m_time; }
143 
145  GslRandomNumberGenerator *getRandomNumberGenerator() const { return m_pRndGen; }
146 protected:
148  State *getState() const { return m_pState; }
149 
152  virtual bool_t initEventTimes() const;
153 
156  virtual bool_t getNextScheduledEvent(double &dt, EventBase **ppEvt);
157 
160  virtual void advanceEventTimes(EventBase *pScheduledEvent, double dt);
161 
163  virtual void onAboutToFire(EventBase *pEvt) { }
164 
166  virtual void onFiredEvent(EventBase *pEvt) { }
167 
170  virtual void onAlgorithmLoop(bool finished) { }
171 private:
172  mutable GslRandomNumberGenerator *m_pRndGen;
173  State *m_pState;
174  double m_time;
175 };
176 
177 #endif // ALGORITHM_H
178 
Type to return true/false with error description.
Definition: booltype.h:25
This is a base class describing the simulation state of an mNRM algorithm.
Definition: algorithm.h:22
bool_t evolve(double &tMax, int64_t &maxEvents, double startTime=0, bool initEvents=true)
This advances the simulation state specified in the constructor using the core mNRM.
Definition: algorithm.cpp:27
virtual void onAboutToFire(EventBase *pEvt)
Called right before pEvt is fired.
Definition: algorithm.h:163
virtual void onFiredEvent(EventBase *pEvt)
Called after pEvt is fired.
Definition: algorithm.h:166
void setTime(double t)
Set the simulation time, which is normally only done by the Algorithm in use (but may be necessary wh...
Definition: algorithm.h:41
virtual void advanceEventTimes(EventBase *pScheduledEvent, double dt)
Advance the times of the necessary events to the time when dt has passed, ignoring pScheduledEvent si...
Definition: algorithm.cpp:129
virtual void onAlgorithmLoop(bool finished)
Called at the end of each algorithm loop, with finished set to true if the loop will be exited...
Definition: algorithm.h:170
Algorithm(State &state, GslRandomNumberGenerator &rng)
Constructor of the class, to which the simulation state must be specified as well as the random numbe...
Definition: algorithm.cpp:12
double getTime() const
Retrieve the current simulation time, which is stored by the Algorithm instance in use (note that unt...
Definition: algorithm.h:34
virtual bool_t getNextScheduledEvent(double &dt, EventBase **ppEvt)
Store the next event to be fired in ppEvt and store the real world time that will have passed until i...
Definition: algorithm.cpp:124
This class allows you to generate random numbers, and uses the GNU Scientific Library for this...
Definition: gslrandomnumbergenerator.h:16
double getTime() const
This function returns the current time of the simulation.
Definition: algorithm.h:142
GslRandomNumberGenerator * getRandomNumberGenerator() const
Returns the random number generator that was specified in the constructor.
Definition: algorithm.h:145
This class contains the core algorithm (as shown on the main page of the documentation) to execute th...
Definition: algorithm.h:68
State * getState() const
Returns the simulation state instance that was specified in the constructor.
Definition: algorithm.h:148
This is the base class for events in the mNRM algorithm.
Definition: eventbase.h:55
virtual bool_t initEventTimes() const
Generate the internal times for the events present in the algorithm (called by State::evolve dependin...
Definition: algorithm.cpp:119