1 #ifndef rrCompiledExecutableModel_H_
2 #define rrCompiledExecutableModel_H_
5 #include "rrModelSharedLibrary.h"
6 #include "rrCModelGenerator.h"
7 #include "rrModelData.h"
8 #include "rrNOMSupport.h"
9 #include "rrPendingAssignment.h"
11 #include "rr-libstruct/lsLibStructural.h"
17 using Poco::SharedLibrary;
19 class CompiledModelState;
23 typedef void (RR_CDECL *c_void_MDS)(
ModelData*);
24 typedef int (RR_CDECL *c_int_MDS)(
ModelData*);
25 typedef int (RR_CDECL *c_int_MDS_int)(
ModelData*, int);
26 typedef char* (RR_CDECL *c_charStar_MDS)(
ModelData*);
27 typedef void (RR_CDECL *c_void_MDS_doubleStar)(
ModelData*,
const double*);
28 typedef double (RR_CDECL *c_double_MDS_int)(
ModelData*, int);
29 typedef double* (RR_CDECL *c_doubleStar_MDS)(
ModelData*);
30 typedef void (RR_CDECL *c_void_MDS_double_doubleStar)(
ModelData*, double,
const double*);
31 typedef void (RR_CDECL *c_void_MDS_int_double)(
ModelData*, int, double);
33 typedef ComputeEventAssignmentHandler* (RR_CDECL *c_ComputeEventAssignmentHandlerStar)();
34 typedef EventDelayHandler* (RR_CDECL *c_GetEventDelayHandlerStar)();
54 return "Compiled (legacy C) Executable Model";
64 virtual bool getConservedSumChanged();
65 virtual void setConservedSumChanged(
bool);
69 virtual void setTime(
double _time);
70 virtual double getTime();
72 virtual void evalInitialConditions();
83 virtual void reset(
int options);
92 PopDiscard = 0x00000001
104 virtual int pushState(
unsigned options = 0);
112 virtual int popState(
unsigned options = 0);
115 virtual int getNumIndFloatingSpecies();
116 virtual int getNumDepFloatingSpecies();
118 virtual int getNumFloatingSpecies();
119 virtual int getFloatingSpeciesIndex(
const std::string& name);
120 virtual std::string getFloatingSpeciesId(
int index);
122 virtual int getNumBoundarySpecies();
123 virtual int getBoundarySpeciesIndex(
const std::string &name);
124 virtual std::string getBoundarySpeciesId(
int index);
125 virtual int getBoundarySpeciesCompartmentIndex(
int index);
138 virtual int setFloatingSpeciesAmounts(
int len,
int const *indx,
139 const double *values);
161 double const *values);
163 virtual int getFloatingSpeciesAmountRates(
int len,
int const *indx,
166 virtual int getFloatingSpeciesConcentrationRates(
int len,
int const *indx,
201 double const *values);
203 virtual int getNumGlobalParameters();
204 virtual int getGlobalParameterIndex(
const std::string& name);
205 virtual std::string getGlobalParameterId(
int index);
218 virtual int setGlobalParameterValues(
int len,
int const *indx,
219 const double *values);
221 virtual int getNumCompartments();
222 virtual int getCompartmentIndex(
const std::string& name);
223 virtual std::string getCompartmentId(
int index);
233 virtual int getCompartmentVolumes(
int len,
int const *indx,
236 virtual int getNumRateRules();
241 virtual int getNumReactions();
249 virtual int getReactionIndex(
const std::string& reactionName);
254 virtual std::string getReactionId(
int index);
256 virtual int getNumEvents();
257 virtual void computeEventPriorites();
258 void setConcentration(
int index,
double value);
259 virtual void evalReactionRates();
260 virtual void setCompartmentVolumes();
261 virtual int getNumLocalParameters(
int reactionId);
263 virtual void computeRules();
265 virtual void initializeInitialConditions();
266 virtual void setParameterValues();
267 virtual void setBoundaryConditions();
268 virtual void setInitialConditions();
269 virtual void evalInitialAssignments();
271 virtual void convertToAmounts();
272 virtual void computeConservedTotals();
276 virtual void getRateRuleValues(
double *rateRuleValues);
278 double getAmount(
const int i);
279 virtual void initializeRates();
281 virtual std::string getStateVectorId(
int index);
283 virtual void setRateRuleValues(
const double *rateRuleValues);
295 virtual int getStateVector(
double *stateVector);
306 virtual int setStateVector(
const double *stateVector);
308 virtual void convertToConcentrations();
309 virtual void updateDependentSpeciesValues();
310 virtual void computeAllRatesOfChange();
325 virtual void getStateVectorRate(
double time,
const double *y,
double *dydt = 0);
327 virtual void evalEvents(
const double time,
const double *y);
328 virtual void resetEvents();
329 virtual void testConstraints();
330 virtual void initializeRateRuleSymbols();
333 virtual void print(std::ostream &stream);
335 virtual void getIds(
int types, std::list<std::string> &ids);
337 virtual int getSupportedIdTypes();
339 virtual double getValue(
const std::string&
id);
341 virtual void setValue(
const std::string&
id,
double value);
343 virtual int getEventDelays(
int len,
int const *indx,
double *values);
345 virtual int getEventPriorities(
int len,
int const *indx,
double *values);
347 virtual void eventAssignment(
int eventId);
349 virtual double* evalEventAssignment(
int eventId);
351 virtual void applyEventAssignment(
int eventId,
double *values);
353 virtual int getEventTriggers(
int len,
const int *indx,
unsigned char *values);
355 virtual int getNumConservedMoieties();
356 virtual int getConservedMoietyIndex(
const std::string& name);
357 virtual std::string getConservedMoietyId(
int index);
358 virtual int getConservedMoietyValues(
int len,
int const *indx,
double *values);
359 virtual int setConservedMoietyValues(
int len,
int const *indx,
360 const double *values);
362 virtual int setCompartmentVolumes(
int len,
int const *indx,
363 const double *values);
364 virtual int setFloatingSpeciesInitConcentrations(
int len,
int const *indx,
365 double const *values);
366 virtual int getFloatingSpeciesInitConcentrations(
int len,
int const *indx,
369 virtual double getStoichiometry(
int speciesIndex,
int reactionIndex);
384 double getFloatingSpeciesConcentration(
int index);
386 bool mConservedSumChanged;
391 bool setupModelData();
397 virtual bool setupDLLFunctions();
403 double* mDummyDoubleArray;
418 std::stack<CompiledModelState*> modelStates;
421 c_int_MDS cInitModel;
422 c_int_MDS cInitModelData;
423 c_charStar_MDS cgetModelName;
424 c_void_MDS cinitializeInitialConditions;
425 c_void_MDS csetParameterValues;
426 c_void_MDS csetCompartmentVolumes;
427 c_int_MDS_int cgetNumLocalParameters;
428 c_void_MDS csetBoundaryConditions;
429 c_void_MDS csetInitialConditions;
430 c_void_MDS cevalInitialAssignments;
431 c_void_MDS cupdateDependentSpeciesValues;
432 c_void_MDS ccomputeRules;
433 c_void_MDS cconvertToAmounts;
434 c_void_MDS ccomputeConservedTotals;
435 c_double_MDS_int cgetConcentration;
436 c_doubleStar_MDS cGetCurrentValues;
437 c_void_MDS_double_doubleStar cevalModel;
438 c_void_MDS cconvertToConcentrations;
439 c_void_MDS_double_doubleStar cevalEvents;
440 c_void_MDS ccomputeAllRatesOfChange;
441 c_void_MDS cAssignRates_a;
442 c_void_MDS_doubleStar cAssignRates_b;
443 c_void_MDS ctestConstraints;
444 c_void_MDS cresetEvents;
445 c_void_MDS cInitializeRates;
446 c_void_MDS cInitializeRateRuleSymbols;
447 c_void_MDS_int_double csetConcentration;
448 c_void_MDS cComputeReactionRates;
449 c_void_MDS ccomputeEventPriorities;
451 std::vector<PendingAssignment> mAssignments;
453 std::vector<double> mAssignmentTimes;
455 DoubleMatrix stoichiometryMatrix;
457 std::vector<int> retestEvents(
const double& timeEnd,
458 const std::vector<int>& handledEvents, std::vector<int>& removeEvents);
460 std::vector<int> retestEvents(
const double& timeEnd, std::vector<int>& handledEvents,
461 const bool& assignOldState);
463 std::vector<int> retestEvents(
const double& timeEnd,
464 const std::vector<int>& handledEvents,
465 const bool& assignOldState, std::vector<int>& removeEvents);
467 virtual int applyPendingEvents(
double timeEnd);
469 virtual int applyEvents(
double timeEnd,
const unsigned char* previousEventStatus,
470 const double *initialState,
double* finalState);
472 virtual void getEventRoots(
double time,
const double* y,
double* gdot);
474 virtual double getNextPendingEventTime(
bool pop);
476 virtual int getPendingEventSize();
478 void removePendingAssignmentForIndex(
int eventIndex);
480 void sortEventsByPriority(std::vector<Event>& firedEvents);
482 void sortEventsByPriority(std::vector<int>& firedEvents);
485 virtual int setFloatingSpeciesInitAmounts(
int len,
int const *indx,
486 double const *values);
488 virtual int getFloatingSpeciesInitAmounts(
int len,
int const *indx,
491 virtual int setCompartmentInitVolumes(
int len,
int const *indx,
492 double const *values);
494 virtual int getCompartmentInitVolumes(
int len,
int const *indx,
497 virtual int getEventIndex(
const std::string&);
498 virtual std::string getEventId(
int);
506 virtual double getFloatingSpeciesAmountRate(
int index,
507 const double *reactionRates);
509 virtual void setRandomSeed(int64_t);
511 virtual int64_t getRandomSeed();
513 virtual double getRandom();
Both the CModelGenerator and the CSharpModelGenerator use the same paradigm of producing source code,...
Definition: rrCompiledExecutableModel.h:43
ModelData mData
the data that is exchanged with the loaded shared lib, and all sorts of other routines such as CVODE.
Definition: rrCompiledExecutableModel.h:409
virtual uint32_t getFlags() const
Get the current set of flags.
Definition: rrCompiledExecutableModel.h:515
virtual void setFlags(uint32_t)
Set certain options that determine the state of the ExecutableModel, these are listed in.
Definition: rrCompiledExecutableModel.h:520
bool mIsInitialized
If all functions are found properly in the dll, this one is true.
Definition: rrCompiledExecutableModel.h:415
virtual std::string getExecutableModelDesc() const
Returns a human-readable description of the code generation backend, e.g. LLVM, legacy C,...
Definition: rrCompiledExecutableModel.h:53
StateStackOptions
Definition: rrCompiledExecutableModel.h:87
Saves the 'state' of a Model.
Definition: rrCompiledModelState.h:26
Base class for all code generation systems; allows compiling and evaluating the model.
Definition: rrExecutableModel.h:118
Access an actual compiled shared library (.so, .dll or .dylib) that was compiled by a ModelGenerator ...
Definition: rrModelSharedLibrary.h:22
Definition: rrModelSymbols.h:20
C_DECL_SPEC char *rrcCallConv getModelName(RRHandle handle)
Returns the name of currently loaded SBML model.
C_DECL_SPEC RRDoubleMatrixPtr rrcCallConv getStoichiometryMatrix(RRHandle handle)
Retrieve the stoichiometry matrix for the current model.
C_DECL_SPEC RRVectorPtr rrcCallConv getBoundarySpeciesAmounts(RRHandle handle)
Retrieve the amounts for all the boundary species in a vector.
C_DECL_SPEC RRVectorPtr rrcCallConv getBoundarySpeciesConcentrations(RRHandle handle)
Retrieve the concentrations for all the boundary species in a vector.
C_DECL_SPEC bool rrcCallConv setBoundarySpeciesConcentrations(RRHandle handle, const RRVectorPtr vec)
Set the boundary species concentration to the vector vec.
C_DECL_SPEC RRVectorPtr rrcCallConv getFloatingSpeciesConcentrations(RRHandle handle)
Retrieve in a vector the concentrations for all the floating species.
C_DECL_SPEC RRVectorPtr rrcCallConv getFloatingSpeciesAmounts(RRHandle handle)
Retrieve in a vector the amounts for all the floating species.
C_DECL_SPEC bool rrcCallConv setFloatingSpeciesConcentrations(RRHandle handle, const RRVectorPtr vec)
Set the floating species concentration to the vector vec.
C_DECL_SPEC RRVectorPtr rrcCallConv getGlobalParameterValues(RRHandle handle)
Retrieve the values for all the global parameter values in a vector.
C_DECL_SPEC RRVectorPtr rrcCallConv getReactionRates(RRHandle handle)
Retrieve a vector of reaction rates as determined by the current state of the model.
C_DECL_SPEC bool rrcCallConv reset(RRHandle handle)
Resets all variables of the model to their current initial values. Does not change the parameters.
C_DECL_SPEC bool rrcCallConv getValue(RRHandle handle, const char *symbolId, double *value)
Get the value for a given symbol, use getAvailableTimeCourseSymbols(void) for a list of symbols.
C_DECL_SPEC bool rrcCallConv setValue(RRHandle handle, const char *symbolId, const double value)
Set the value for a given symbol, use getAvailableTimeCourseSymbols(void) for a list of symbols.
C_DECL_SPEC char *rrcCallConv getInfo(RRHandle handle)
Retrieve info about current state of roadrunner, e.g. loaded model, conservationAnalysis etc.
Base class for all code generators in RoadRunner.
cxx11_ns::shared_ptr< EventListener > EventListenerPtr
listeners are shared objects, so use std smart pointers to manage them.
Definition: rrExecutableModel.h:71
A data structure that is that allows data to be exchanged with running SBML models.
Definition: rrModelData.h:49