roadrunner  2.6.0
Fast simulator for SBML models
ForwardSensitivitySolver.h
1 //
2 // Created by Ciaran Welsh on 09/06/2021.
3 //
4 
5 #ifndef ROADRUNNER_SENSITIVITIES_H
6 #define ROADRUNNER_SENSITIVITIES_H
7 
8 #include <iostream>
9 #include "CVODEIntegrator.h"
10 #include "SensitivitySolver.h"
11 #include <unordered_map>
12 #include <vector>
13 #include "LLVMExecutableModel.h"
14 #include "Matrix.h"
15 #include "Matrix3D.h"
16 #include "nvector/nvector_serial.h"
17 
18 namespace rr {
19 
20  using ParameterMap = std::unordered_map<std::string, double>;
21 
22  class CVODEIntegrator;
23 
24 
32  public:
33 
34  ForwardSensitivitySolver() = default;
35 
36  ~ForwardSensitivitySolver() override;
37 
38  explicit ForwardSensitivitySolver(ExecutableModel *executableModel);
39 
40  ForwardSensitivitySolver(ExecutableModel *executableModel, std::vector<std::string> whichParameters);
41 
42  double integrate(double tStart, double hstep) override;
43 
44 
48  void create();
49 
53  void freeSundialsMemory();
54 
58  std::string getName() const override;
59 
63  std::string getDescription() const override;
64 
68  std::string getHint() const override;
69 
70  Solver *construct(ExecutableModel *executableModel) const override;
71 
75  void resetSettings() override;
76 
77  void syncWithModel(ExecutableModel *executableModel) override;
78 
79  std::string toRepr() const override;
80 
81  void loadConfigSettings();
82 
83  std::string toString() const override;
84 
89  std::vector<std::string> getGlobalParameterNames();
90 
97  std::vector<std::string> getVariableNames();
98 
103  ParameterMap getModelParametersAsMap();
104 
109  std::vector<double> getModelParametersAsVector();
110 
115  void deducePlist();
116 
121  N_Vector getStateVector();
122 
127  N_Vector *getSensitivityNVectorPtr();
128 
134  rr::Matrix<double> getSensitivityMatrix(int k = 0) override;
135 
153  Matrix3D<double, double> solveSensitivities(double start, double stop, int num,
154  std::vector<std::string> params = std::vector<std::string>(),
155  std::vector<std::string> species = std::vector<std::string>(),
156  int k = 0) override;
157 
158  void setValue(const std::string &key, Setting val) override;
159 
168  std::vector<double> p;
169 
175  std::vector<double> pbar;
176 
181  std::vector<int> plist;
182 
186  std::vector<std::string> whichParameters;
187 
191  ParameterMap globalParameterMap;
192 
196  int Np = 0;
197 
201  int Ns = 0;
202 
208 
209  private:
210 
219  std::unique_ptr<CVODEIntegrator> cvodeIntegrator = nullptr;
220 
221  void constructorOperations();
222 
233  void setDefaultWhichParameters();
234 
248  bool usingDefaultWhichParameters = true;
249 
260  bool usingUseWhichParametersFromConstructor = false;
261 
265  SUNNonlinearSolver NLSsens = nullptr;
266 
270  N_Vector *mSensitivityMatrix = nullptr;
271 // using NVectorArrayPtr = std::unique_ptr<N_Vector*, std::function<void( N_Vector*, int)>>;
272 // using NVectorArrayPtr = std::unique_ptr<N_Vector*, decltype(&N_VDestroyVectorArray_Serial)>;
273 // NVectorArrayPtr mSensitivityMatrixUnique = std::make_unique<N_Vector*, decltype(&N_VDestroyVectorArray_Serial)>(nullptr);
274 
275  int mSensitivityMatrixSize = 0;
276 
281  bool stateVectorVariables = false;
282 
286  std::vector<std::string> getParameterNamesFromPlist();
287 
291  std::vector<double> getParameterValuesFromPlist();
292 
293  friend int FFSDyDtFcn(realtype time, N_Vector cv_y, N_Vector cv_ydot, void *userData);
294 
295  friend int FFSRootFcn(realtype time, N_Vector y_vector, realtype *gout, void *user_data);
296 
297  };
298 
299 
300 
301 }
302 
303 #endif //ROADRUNNER_SENSITIVITIES_H
Contains the RoadRunner CVODE integrator interface.
LLVM executable model interface.
Base class for all code generation systems; allows compiling and evaluating the model.
Definition: rrExecutableModel.h:118
Time based sensivitity solver.
Definition: ForwardSensitivitySolver.h:31
ParameterMap globalParameterMap
a map containing model parameter names to values
Definition: ForwardSensitivitySolver.h:191
std::string getName() const override
Get the name of this solver.
Definition: ForwardSensitivitySolver.cpp:436
std::string toString() const override
Return a std::string representation of the solver.
Definition: ForwardSensitivitySolver.cpp:452
Matrix3D< double, double > solveSensitivities(double start, double stop, int num, std::vector< std::string > params=std::vector< std::string >(), std::vector< std::string > species=std::vector< std::string >(), int k=0) override
simulate a timeseries with sensitivities from start to step with num data points.
Definition: ForwardSensitivitySolver.cpp:638
double integrate(double tStart, double hstep) override
integrate the model from t0 to t0 + hstep.
Definition: ForwardSensitivitySolver.cpp:165
std::vector< std::string > whichParameters
which parameters to get sensitivities for, as strings
Definition: ForwardSensitivitySolver.h:186
void resetSettings() override
resets all settings back to default values
Definition: ForwardSensitivitySolver.cpp:467
void create()
instantiate the code necessary to use cvodes
Definition: ForwardSensitivitySolver.cpp:188
N_Vector * getSensitivityNVectorPtr()
retuns pointer to the state vector used by sundials for storing sensitivity matrix.
Definition: ForwardSensitivitySolver.cpp:568
std::vector< double > getModelParametersAsVector()
return a std::vector<double> of model parameters in the order they appear in the model.
Definition: ForwardSensitivitySolver.cpp:521
std::string getHint() const override
Get a (user-readable) hint for this solver.
Definition: ForwardSensitivitySolver.cpp:444
rr::Matrix< double > getSensitivityMatrix(int k=0) override
get current values of sensitivities of model variables to parameters.
Definition: ForwardSensitivitySolver.cpp:572
int Np
number of global parameters in the model
Definition: ForwardSensitivitySolver.h:196
void freeSundialsMemory()
free sundials memory associated with sensitivities
Definition: ForwardSensitivitySolver.cpp:174
void syncWithModel(ExecutableModel *executableModel) override
Called whenever a new model is loaded to allow integrator to reset internal state.
Definition: ForwardSensitivitySolver.cpp:414
int numModelVariables
the number of state variables in the model
Definition: ForwardSensitivitySolver.h:207
std::vector< int > plist
which parameters to get sensitivity for as int?
Definition: ForwardSensitivitySolver.h:181
std::string toRepr() const override
Return std::string representation a la Python repr method.
Definition: ForwardSensitivitySolver.cpp:461
int Ns
number of parameters we want to find sensitivities for
Definition: ForwardSensitivitySolver.h:201
std::string getDescription() const override
Get the description of this solver.
Definition: ForwardSensitivitySolver.cpp:440
std::vector< std::string > getGlobalParameterNames()
returns a vector of global parameter names extracted from the model
Definition: ForwardSensitivitySolver.cpp:487
std::vector< double > p
parameters in the model as a member variable which enables passing the underlying data pointer to sun...
Definition: ForwardSensitivitySolver.h:168
std::vector< std::string > getVariableNames()
get a vector of variable names in the order that they appear in the model.
Definition: ForwardSensitivitySolver.cpp:496
N_Vector getStateVector()
retuns pointer to the state vector used by sundials for solving ODE.
Definition: ForwardSensitivitySolver.cpp:564
Solver * construct(ExecutableModel *executableModel) const override
Constructs a new Solver of a given type.
Definition: ForwardSensitivitySolver.cpp:448
void deducePlist()
returns the indexes of parameters that user wants sensitivities for, based off of whichParameters.
Definition: ForwardSensitivitySolver.cpp:537
ParameterMap getModelParametersAsMap()
get global parameters as an unordered map, strings as keys and parameter values as values
Definition: ForwardSensitivitySolver.cpp:505
std::vector< double > pbar
scaling factors.
Definition: ForwardSensitivitySolver.h:175
A basic local 3D version of the Matrix class, based on initializer_list.
Definition: Matrix3D.h:17
A basic local matrix class, based on the libstruct version.
Definition: Matrix.h:18
Store a roadrunner option (or setting) as a Variant type.
Definition: Setting.h:78
Base class for all integrators and steady state solvers.
Definition: Solver.h:39
generic interface for sensitivity solvers that integrate the model and compute sensitivities at each ...
Definition: SensitivitySolver.h:42