Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ set(AMICI_SRC_LIST
${CMAKE_SOURCE_DIR}/src/rdata.cpp
${CMAKE_SOURCE_DIR}/src/edata.cpp
${CMAKE_SOURCE_DIR}/src/exception.cpp

${CMAKE_SOURCE_DIR}/src/simulation_parameters.cpp
${CMAKE_SOURCE_DIR}/src/spline.cpp
${CMAKE_SOURCE_DIR}/src/solver.cpp
${CMAKE_SOURCE_DIR}/src/solver_cvodes.cpp
Expand Down
58 changes: 2 additions & 56 deletions include/amici/edata.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "amici/defines.h"
#include "amici/vector.h"
#include "amici/misc.h"
#include "amici/simulation_parameters.h"

#include <vector>

Expand All @@ -16,7 +17,7 @@ class ReturnData;
* @brief ExpData carries all information about experimental or
* condition-specific data
*/
class ExpData {
class ExpData : public SimulationParameters {

public:
/**
Expand Down Expand Up @@ -381,58 +382,6 @@ class ExpData {
*/
const realtype *getObservedEventsStdDevPtr(int ie) const;

/**
* @brief condition-specific fixed parameters of size Model::nk() or empty
*/
std::vector<realtype> fixedParameters;
/**
* @brief condition-specific fixed parameters for pre-equilibration of size
* Model::nk() or empty. Overrides Solver::newton_preeq
*/
std::vector<realtype> fixedParametersPreequilibration;
/**
* @brief condition-specific fixed parameters for pre-simulation of
* size Model::nk() or empty.
*/
std::vector<realtype> fixedParametersPresimulation;

/**
* @brief condition-specific parameters of size Model::np() or empty
*/
std::vector<realtype> parameters;
/**
* @brief condition-specific initial conditions of size Model::nx() or
* empty
*/
std::vector<realtype> x0;
/**
* @brief condition-specific initial condition sensitivities of size
* Model::nx() * Model::nplist(), Model::nx() * ExpData::plist.size(), if
* ExpData::plist is not empty, or empty
*/
std::vector<realtype> sx0;
/**
* @brief condition-specific parameter scales of size Model::np()
*/
std::vector<ParameterScaling> pscale;
/**
* @brief condition-specific parameter list
*/
std::vector<int> plist;

/**
* @brief duration of pre-simulation
* if this is > 0, presimulation will be performed from
* (model->t0 - t_presim) to model->t0 using the fixedParameters in
* fixedParametersPresimulation
*/
realtype t_presim = 0;

/** flag indicating whether reinitialization of states depending on
* fixed parameters is activated
*/
bool reinitializeFixedParameterInitialStates = false;

protected:
/**
* @brief resizes observedData, observedDataStdDev, observedEvents and
Expand Down Expand Up @@ -478,9 +427,6 @@ class ExpData {
/** @brief maximal number of event occurrences */
int nmaxevent_{0};

/** @brief observation timepoints (dimension: nt) */
std::vector<realtype> ts_;

/** @brief observed data (dimension: nt x nytrue, row-major) */
std::vector<realtype> observed_data_;
/**
Expand Down
30 changes: 7 additions & 23 deletions include/amici/model.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "amici/defines.h"
#include "amici/sundials_matrix_wrapper.h"
#include "amici/vector.h"
#include "amici/simulation_parameters.h"

#include <map>
#include <memory>
Expand Down Expand Up @@ -476,10 +477,8 @@ class Model : public AbstractModel, public ModelDimensions {
/**
* @brief Constructor with model dimensions.
* @param model_dimensions Model dimensions
* @param simulation_parameters Simulation parameters
* @param o2mode Second order sensitivity mode
* @param p Parameters
* @param k Constants
* @param plist Indexes wrt to which sensitivities are to be computed
* @param idlist Indexes indicating algebraic components (DAE only)
* @param z2event Mapping of event outputs to events
* @param pythonGenerated Flag indicating matlab or python wrapping
Expand All @@ -488,9 +487,9 @@ class Model : public AbstractModel, public ModelDimensions {
* @param w_recursion_depth Recursion depth of fw
*/
Model(ModelDimensions const& model_dimensions,
SimulationParameters simulation_parameters,
amici::SecondOrderMode o2mode,
const std::vector<amici::realtype> &p, std::vector<amici::realtype> k,
const std::vector<int> &plist, std::vector<amici::realtype> idlist,
std::vector<amici::realtype> idlist,
std::vector<int> z2event, bool pythonGenerated = false,
int ndxdotdp_explicit = 0, int ndxdotdx_explicit = 0,
int w_recursion_depth = 0);
Expand Down Expand Up @@ -2092,10 +2091,6 @@ class Model : public AbstractModel, public ModelDimensions {
*/
ModelStateDerived derived_state_;

/** original user-provided, possibly scaled parameter array (dimension: np)
*/
std::vector<realtype> original_parameters_;

/** index indicating to which event an event output belongs */
std::vector<int> z2event_;

Expand All @@ -2105,9 +2100,6 @@ class Model : public AbstractModel, public ModelDimensions {
/** sensitivity initialization (size nx_rdata x nplist, row-major) */
std::vector<realtype> sx0data_;

/** timepoints (size nt) */
std::vector<realtype> ts_;

/** vector of bools indicating whether state variables are to be assumed to
* be positive */
std::vector<bool> state_is_non_negative_;
Expand All @@ -2118,22 +2110,11 @@ class Model : public AbstractModel, public ModelDimensions {
/** maximal number of events to track */
int nmaxevent_ {10};

/** parameter transformation of `originalParameters` (dimension np) */
std::vector<ParameterScaling> pscale_;

/** starting time */
realtype tstart_ {0.0};

/** flag indicating whether steadystate sensitivities are to be computed
* via FSA when steadyStateSimulation is used
*/
SteadyStateSensitivityMode steadystate_sensitivity_mode_ {SteadyStateSensitivityMode::newtonOnly};

/** flag indicating whether reinitialization of states depending on
* fixed parameters is activated
*/
bool reinitialize_fixed_parameter_initial_states_ {false};

/** Indicates whether the result of every call to `Model::f*` should be
* checked for finiteness */
bool always_check_finite_ {false};
Expand All @@ -2150,6 +2131,9 @@ class Model : public AbstractModel, public ModelDimensions {

/** Recursion */
int w_recursion_depth_ {0};

/** Simulation parameters, initial state, etc. */
SimulationParameters simulation_parameters_;
};

bool operator==(const Model &a, const Model &b);
Expand Down
14 changes: 6 additions & 8 deletions include/amici/model_dae.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,23 +32,21 @@ class Model_DAE : public Model {
/**
* @brief Constructor with model dimensions
* @param model_dimensions Model dimensions
* @param simulation_parameters Simulation parameters
* @param o2mode second order sensitivity mode
* @param p parameters
* @param k constants
* @param plist indexes wrt to which sensitivities are to be computed
* @param idlist indexes indicating algebraic components (DAE only)
* @param z2event mapping of event outputs to events
* @param pythonGenerated flag indicating matlab or python wrapping
* @param ndxdotdp_explicit number of nonzero elements dxdotdp_explicit
*/
Model_DAE(const ModelDimensions &model_dimensions, const SecondOrderMode o2mode,
std::vector<realtype> const &p, std::vector<realtype> const &k,
std::vector<int> const &plist,
Model_DAE(const ModelDimensions &model_dimensions,
SimulationParameters simulation_parameters,
const SecondOrderMode o2mode,
std::vector<realtype> const &idlist,
std::vector<int> const &z2event, const bool pythonGenerated=false,
const int ndxdotdp_explicit=0)
: Model(model_dimensions,
o2mode, p, k, plist, idlist, z2event, pythonGenerated,
: Model(model_dimensions, simulation_parameters,
o2mode, idlist, z2event, pythonGenerated,
ndxdotdp_explicit) {
derived_state_.M_ = SUNMatrixWrapper(nx_solver, nx_solver);
}
Expand Down
11 changes: 4 additions & 7 deletions include/amici/model_ode.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,8 @@ class Model_ODE : public Model {
/**
* @brief Constructor with model dimensions
* @param model_dimensions Model dimensions
* @param simulation_parameters Simulation parameters
* @param o2mode second order sensitivity mode
* @param p parameters
* @param k constants
* @param plist indexes wrt to which sensitivities are to be computed
* @param idlist indexes indicating algebraic components (DAE only)
* @param z2event mapping of event outputs to events
* @param pythonGenerated flag indicating matlab or python wrapping
Expand All @@ -44,15 +42,14 @@ class Model_ODE : public Model {
* @param w_recursion_depth Recursion depth of fw
*/
Model_ODE(ModelDimensions const& model_dimensions,
SimulationParameters simulation_parameters,
const SecondOrderMode o2mode,
std::vector<realtype> const &p, std::vector<realtype> const &k,
std::vector<int> const &plist,
std::vector<realtype> const &idlist,
std::vector<int> const &z2event, const bool pythonGenerated=false,
const int ndxdotdp_explicit=0, const int ndxdotdx_explicit=0,
const int w_recursion_depth=0)
: Model(model_dimensions,
o2mode, p, k, plist, idlist, z2event, pythonGenerated,
: Model(model_dimensions, simulation_parameters,
o2mode, idlist, z2event, pythonGenerated,
ndxdotdp_explicit, ndxdotdx_explicit, w_recursion_depth) {}

void fJ(realtype t, realtype cj, const AmiVector &x, const AmiVector &dx,
Expand Down
28 changes: 23 additions & 5 deletions include/amici/serialization.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,25 +103,43 @@ void serialize(Archive &ar, amici::CVodeSolver &s, const unsigned int /*version*
template <class Archive>
void serialize(Archive &ar, amici::Model &m, const unsigned int /*version*/) {
ar &dynamic_cast<amici::ModelDimensions&>(m);
ar &m.simulation_parameters_;
ar &m.o2mode;
ar &m.z2event_;
ar &m.idlist;
ar &m.state_.h;
ar &m.state_.unscaledParameters;
ar &m.original_parameters_;
ar &m.state_.fixedParameters;
ar &m.reinitialize_fixed_parameter_initial_states_;
ar &m.state_.plist;
ar &m.x0data_;
ar &m.sx0data_;
ar &m.ts_;
ar &m.nmaxevent_;
ar &m.pscale_;
ar &m.tstart_;
ar &m.state_is_non_negative_;
ar &m.pythonGenerated;
}


/**
* @brief Serialize amici::SimulationParameters to boost archive
* @param ar Archive
* @param s amici::SimulationParameters instance to serialize
*/
template <class Archive>
void serialize(Archive &ar, amici::SimulationParameters &s, const unsigned int /*version*/) {
ar &s.fixedParameters;
ar &s.fixedParametersPreequilibration;
ar &s.fixedParametersPresimulation;
ar &s.parameters;
ar &s.x0;
ar &s.sx0;
ar &s.pscale;
ar &s.plist;
ar &s.ts_;
ar &s.tstart_;
ar &s.t_presim;
ar &s.reinitializeFixedParameterInitialStates;
}

/**
* @brief Serialize amici::ReturnData to boost archive
* @param ar Archive
Expand Down
Loading