20 #ifndef LLVMExecutableModelH
21 #define LLVMExecutableModelH
24 #include "LLVMModelDataSymbols.h"
25 #include "LLVMIncludes.h"
27 #include "EvalInitialConditionsCodeGen.h"
28 #include "EvalReactionRatesCodeGen.h"
29 #include "EvalRateRuleRatesCodeGen.h"
30 #include "GetValuesCodeGen.h"
31 #include "GetInitialValuesCodeGen.h"
32 #include "GetEventValuesCodeGen.h"
33 #include "EventAssignCodeGen.h"
34 #include "EventTriggerCodeGen.h"
35 #include "GetPiecewiseTriggerCodeGen.h"
36 #include "EvalVolatileStoichCodeGen.h"
37 #include "EvalConversionFactorCodeGen.h"
38 #include "SetValuesCodeGen.h"
39 #include "SetInitialValuesCodeGen.h"
40 #include "EventQueue.h"
41 #include "rrSelectionRecord.h"
43 #include "tr1proxy/rr_memory.h"
44 #include "tr1proxy/rr_unordered_map.h"
69 return "LLVM Executable Model";
94 virtual void setTime(
double _time);
95 virtual double getTime();
103 void evalInitialConditions(uint32_t flags = 0);
108 virtual void reset();
114 virtual void reset(
int options);
118 virtual int getNumIndFloatingSpecies();
119 virtual int getNumDepFloatingSpecies();
121 virtual int getNumFloatingSpecies();
122 virtual int getNumBoundarySpecies();
123 virtual int getNumGlobalParameters();
125 virtual int getNumCompartments();
126 virtual int getCompartmentIndexForFloatingSpecies(
size_t index);
127 virtual int getCompartmentIndexForBoundarySpecies(
size_t index);
140 virtual int setGlobalParameterValues(
size_t len,
int const *indx,
141 const double *values);
143 virtual int setGlobalParameterValues(
size_t len,
int const* indx,
144 const double* values,
bool strict);
146 virtual int getNumReactions();
159 virtual int getCompartmentVolumes(
size_t len,
int const *indx,
162 virtual int getNumRateRules();
170 virtual std::vector<std::string> getRateRuleSymbols()
const;
176 virtual void getRateRuleValues(
double *rateRuleValues);
179 virtual std::string getStateVectorId(
size_t index);
191 virtual int getStateVector(
double *stateVector);
202 virtual int setStateVector(
const double *stateVector);
219 virtual void getStateVectorRate(
double time,
const double *y,
double* dydt=0);
222 virtual void testConstraints();
226 virtual int getFloatingSpeciesIndex(
const std::string&);
227 virtual std::string getFloatingSpeciesId(
size_t index);
228 virtual int getBoundarySpeciesIndex(
const std::string&);
229 virtual std::string getBoundarySpeciesId(
size_t index);
242 virtual int getFloatingSpeciesAmountRates(
size_t len,
int const *indx,
245 virtual int getFloatingSpeciesConcentrationRates(
size_t len,
int const *indx,
269 double const *values);
271 virtual int setFloatingSpeciesAmounts(
size_t len,
int const *indx,
272 const double *values);
274 virtual int setFloatingSpeciesAmounts(
size_t len,
int const* indx,
275 const double* values,
bool strict);
308 double const *values);
319 virtual int setBoundarySpeciesAmounts(
size_t len,
int const *indx,
320 double const *values);
322 virtual int setBoundarySpeciesAmounts(
size_t len,
int const* indx,
323 double const* values,
bool strict);
326 virtual int getGlobalParameterIndex(
const std::string&);
327 virtual std::string getGlobalParameterId(
size_t);
328 virtual int getCompartmentIndex(
const std::string&);
329 virtual std::string getCompartmentId(
size_t);
330 virtual int getReactionIndex(
const std::string&);
331 virtual std::string getReactionId(
size_t);
332 virtual int getStoichiometryIndex(
const std::string&);
333 virtual int getStoichiometryIndex(
const std::string& speciesId,
const std::string& reactionId);
334 virtual std::string getStoichiometryId(
size_t);
336 virtual void print(std::ostream &stream);
338 virtual int getNumConservedMoieties();
339 virtual int getConservedMoietyIndex(
const std::string& name);
340 virtual std::string getConservedMoietyId(
size_t index);
341 virtual int getConservedMoietyValues(
size_t len,
int const *indx,
double *values);
342 virtual int setConservedMoietyValues(
size_t len,
int const *indx,
343 const double *values);
345 virtual int setCompartmentVolumes(
size_t len,
int const* indx,
346 const double* values);
348 virtual int setCompartmentVolumes(
size_t len,
int const* indx,
349 const double* values,
bool strict);
351 virtual int setStoichiometries(
size_t len,
int const* indx,
352 const double* values);
354 virtual int setStoichiometries(
size_t len,
int const* indx,
355 const double* values,
bool strict);
357 virtual int setStoichiometry(
int index,
double value);
359 virtual int setStoichiometry(
int speciesIndex,
int reactionIndex,
double value);
361 virtual double getStoichiometry(
int index);
363 virtual double getStoichiometry(
int speciesIndex,
int reactionIndex);
369 virtual int setFloatingSpeciesInitConcentrations(
size_t len,
const int *indx,
370 double const *values);
372 virtual int setBoundarySpeciesInitConcentrations(
size_t len,
const int* indx,
373 double const* values);
375 virtual int getFloatingSpeciesInitConcentrations(
size_t len,
const int *indx,
378 virtual int getBoundarySpeciesInitConcentrations(
size_t len,
const int* indx,
381 virtual int setFloatingSpeciesInitAmounts(
size_t len,
const int *indx,
382 double const *values);
384 virtual int setBoundarySpeciesInitAmounts(
size_t len,
const int* indx,
385 double const* values);
387 virtual int getFloatingSpeciesInitAmounts(
size_t size_t,
const int *indx,
390 virtual int getBoundarySpeciesInitAmounts(
size_t size_t,
const int* indx,
393 virtual int setCompartmentInitVolumes(
size_t len,
const int *indx,
394 double const *values);
396 virtual int getCompartmentInitVolumes(
size_t len,
const int *indx,
399 virtual int setGlobalParameterInitValues(
size_t len,
const int *indx,
400 double const *values);
402 virtual int getGlobalParameterInitValues(
size_t len,
const int *indx,
417 virtual void getIds(
int types, std::list<std::string> &ids);
422 virtual int getSupportedIdTypes();
428 virtual double getValue(
const std::string&
id);
433 virtual void setValue(
const std::string&
id,
double value);
447 virtual void setRandomSeed(int64_t);
452 virtual int64_t getRandomSeed();
460 virtual double getRandom();
471 virtual int getNumEvents();
482 virtual int getEventTriggers(
size_t len,
const int *indx,
unsigned char *eventState);
488 virtual int applyEvents(
double timeEnd,
const unsigned char* previousEventState,
489 const double *initialState,
double* finalState);
491 virtual void getEventRoots(
double time,
const double* y,
double* gdot);
493 virtual void getPiecewiseTriggerRoots(
double time,
const double* y,
double* gdot);
495 virtual double getNextPendingEventTime(
bool pop);
497 virtual int getPendingEventSize();
499 virtual void resetEvents();
501 inline double getEventDelay(
size_t event)
503 return getEventDelayPtr(modelData, event);
506 inline double getEventPriority(
size_t event)
508 return getEventPriorityPtr(modelData, event);
511 bool getEventTrigger(
size_t event);
513 inline bool getEventUseValuesFromTriggerTime(
size_t event)
515 assert(event < symbols->getEventAttributes().size()
516 &&
"event out of bounds");
517 return symbols->getEventAttributes()[event]
518 & EventUseValuesFromTriggerTime;
521 inline bool getEventInitialValue(
size_t event)
523 assert(event < symbols->getEventAttributes().size()
524 &&
"event out of bounds");
525 return symbols->getEventAttributes()[event] & EventInitialValue;
528 inline bool getEventPersistent(
size_t event)
530 assert(event < symbols->getEventAttributes().size()
531 &&
"event out of bounds");
532 return symbols->getEventAttributes()[event] & EventPersistent;
535 inline size_t getEventBufferSize(
size_t event)
537 return symbols->getEventBufferSize(event);
540 inline void getEventData(
size_t eventId,
double* data)
542 eventTriggerPtr(modelData, eventId, data);
551 eventAssignPtr(modelData, eventId, data);
556 uint result = handler->onAssignment(
this, eventId, symbols->getEventId(eventId));
558 if(result & rr::EventListener::HALT_SIMULATION) {
564 bool getEventTieBreak(
size_t eventA,
size_t eventB);
566 virtual int getEventIndex(
const std::string& eid);
567 virtual std::string getEventId(
size_t index);
568 virtual void getEventIds(std::list<std::string>& out);
570 virtual int getNumPiecewiseTriggers();
572 virtual void getAssignmentRuleIds(std::list<std::string>& out);
573 virtual void getRateRuleIds(std::list<std::string>& out);
574 virtual void getInitialAssignmentIds(std::list<std::string>& out);
579 virtual double getFloatingSpeciesAmountRate(
size_t index,
580 const double *reactionRates);
586 virtual int getRateRuleRates(
size_t len,
int const *indx,
double *values);
592 virtual uint32_t
getFlags()
const {
return flags; }
598 virtual void setFlags(uint32_t val) { flags = val; }
619 bool applyEvents(
unsigned char* prevEventState,
620 unsigned char* currEventState);
628 std::vector<double> eventAssignTimes;
630 typedef unsigned long long TieBreakKey;
631 typedef std::map<TieBreakKey, bool> TieBreakMap;
632 TieBreakMap tieBreakMap;
635 void resetOneType(
int& opt,
int thistype,
int independents,
int total,
int(
LLVMExecutableModel::*getInit)(
size_t,
const int*,
double*),
int(
LLVMExecutableModel::*setCurrent)(
size_t,
const int*,
const double*),
string(
LLVMModelDataSymbols::* getTypeId)(
size_t)
const,
double* buffer, std::map<std::string, int>& inits, std::map<std::string, double>& initvals);
647 cxx11_ns::shared_ptr<ModelResources> resources;
651 EvalReactionRatesCodeGen::FunctionPtr evalReactionRatesPtr;
652 EvalInitialConditionsCodeGen::FunctionPtr evalInitialConditionsPtr;
653 GetBoundarySpeciesAmountCodeGen::FunctionPtr getBoundarySpeciesAmountPtr;
654 GetFloatingSpeciesAmountCodeGen::FunctionPtr getFloatingSpeciesAmountPtr;
655 GetBoundarySpeciesConcentrationCodeGen::FunctionPtr getBoundarySpeciesConcentrationPtr;
656 GetFloatingSpeciesConcentrationCodeGen::FunctionPtr getFloatingSpeciesConcentrationPtr;
657 GetCompartmentVolumeCodeGen::FunctionPtr getCompartmentVolumePtr;
658 GetGlobalParameterCodeGen::FunctionPtr getGlobalParameterPtr;
659 EvalRateRuleRatesCodeGen::FunctionPtr evalRateRuleRatesPtr;
660 GetEventTriggerCodeGen::FunctionPtr getEventTriggerPtr;
661 GetEventPriorityCodeGen::FunctionPtr getEventPriorityPtr;
662 GetEventDelayCodeGen::FunctionPtr getEventDelayPtr;
663 EventTriggerCodeGen::FunctionPtr eventTriggerPtr;
664 EventAssignCodeGen::FunctionPtr eventAssignPtr;
665 GetPiecewiseTriggerCodeGen::FunctionPtr getPiecewiseTriggerPtr;
666 EvalVolatileStoichCodeGen::FunctionPtr evalVolatileStoichPtr;
667 EvalConversionFactorCodeGen::FunctionPtr evalConversionFactorPtr;
670 SetBoundarySpeciesAmountCodeGen::FunctionPtr setBoundarySpeciesAmountPtr;
671 SetFloatingSpeciesAmountCodeGen::FunctionPtr setFloatingSpeciesAmountPtr;
672 SetBoundarySpeciesConcentrationCodeGen::FunctionPtr setBoundarySpeciesConcentrationPtr;
673 SetFloatingSpeciesConcentrationCodeGen::FunctionPtr setFloatingSpeciesConcentrationPtr;
674 SetCompartmentVolumeCodeGen::FunctionPtr setCompartmentVolumePtr;
675 SetGlobalParameterCodeGen::FunctionPtr setGlobalParameterPtr;
679 SetFloatingSpeciesInitConcentrationCodeGen::FunctionPtr setFloatingSpeciesInitConcentrationsPtr;
680 SetBoundarySpeciesInitConcentrationCodeGen::FunctionPtr setBoundarySpeciesInitConcentrationsPtr;
681 GetFloatingSpeciesInitConcentrationCodeGen::FunctionPtr getFloatingSpeciesInitConcentrationsPtr;
682 GetBoundarySpeciesInitConcentrationCodeGen::FunctionPtr getBoundarySpeciesInitConcentrationsPtr;
683 SetFloatingSpeciesInitAmountCodeGen::FunctionPtr setFloatingSpeciesInitAmountsPtr;
684 GetFloatingSpeciesInitAmountCodeGen::FunctionPtr getFloatingSpeciesInitAmountsPtr;
685 SetBoundarySpeciesInitAmountCodeGen::FunctionPtr setBoundarySpeciesInitAmountsPtr;
686 GetBoundarySpeciesInitAmountCodeGen::FunctionPtr getBoundarySpeciesInitAmountsPtr;
687 SetCompartmentInitVolumeCodeGen::FunctionPtr setCompartmentInitVolumesPtr;
688 GetCompartmentInitVolumeCodeGen::FunctionPtr getCompartmentInitVolumesPtr;
689 GetGlobalParameterInitValueCodeGen::FunctionPtr getGlobalParameterInitValuePtr;
690 SetGlobalParameterInitValueCodeGen::FunctionPtr setGlobalParameterInitValuePtr;
698 typedef cxx11_ns::unordered_map<std::string, rr::SelectionRecord> SelectionMap;
699 SelectionMap selectionRecordCache;
706 std::vector<rr::EventListenerPtr> eventListeners;
711 int getValues(
double (*funcPtr)(
LLVMModelData*,
size_t),
size_t len,
712 const int *indx,
double *values);
717 int setValues(
bool (*funcPtr)(
LLVMModelData*,
int,
double), GetNameFuncPtr,
size_t len,
718 const int *indx,
const double *values,
bool strict=
true);
724 template <
typename a_type,
typename b_type>
725 friend void copyCachedModel(a_type* src, b_type* dst);
734 double conversionFactor;
745 DIRTY_INIT_SPECIES = (0x1 << 0),
748 DIRTY_CONSERVED_MOIETIES = (0x1 << 1),
751 DIRTY_REACTION_RATES = (0x1 << 2)
Definition: rrExecutableModel.h:73
Base class for all code generation systems; allows compiling and evaluating the model.
Definition: rrExecutableModel.h:118
a way to find sbml model elements using the RoadRunner syntax.
Definition: rrSelectionRecord.h:18
The EventQueue class is when events are queued to execute, but have not yet executed.
Definition: EventQueue.h:86
LLVM executable model.
Definition: LLVMExecutableModel.h:59
virtual std::string getExecutableModelDesc() const
Returns a human-readable description of the code generation backend, e.g. LLVM, legacy C,...
Definition: LLVMExecutableModel.h:68
virtual void setFlags(uint32_t val)
Set certain options that determine the state of the ExecutableModel, these are listed in.
Definition: LLVMExecutableModel.h:598
virtual uint32_t getFlags() const
Get the current set of flags.
Definition: LLVMExecutableModel.h:592
void assignEvent(size_t eventId, double *data)
assign or apply the event using the given data.
Definition: LLVMExecutableModel.h:548
stores the names of all the symbols in the sbml model and thier indexes in the ModelData arrays.
Definition: LLVMModelDataSymbols.h:128
General concepts:
Definition: LLVMModelGenerator.h:41
C_DECL_SPEC char *rrcCallConv getModelName(RRHandle handle)
Returns the name of currently loaded SBML 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 bool rrcCallConv saveState(RRHandle handle, const char *filename)
Save a road runner instance's state to a platform-specific binary file.
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: LLVMModelData.h:47