25enum class TimeIntegrationType {
33extern const std::map<std::string, TimeIntegrationType> cep_time_int_to_type;
36static std::ostream &operator<<(std::ostream &strm, TimeIntegrationType type) {
37 const std::map<TimeIntegrationType, std::string> names = {
38 {TimeIntegrationType::NA,
"NA"},
39 {TimeIntegrationType::FE,
"FE"},
40 {TimeIntegrationType::RK4,
"RK4"},
41 {TimeIntegrationType::CN2,
"CN2"},
44 return strm << names.at(type);
53 TimeIntegrationType
tIntType = TimeIntegrationType::NA;
143 const double Vrest_,
const double Vscale_,
const double Tscale_,
144 const double Voffset_)
198 void integ(
const odeType &ode_solver_params,
const int zone_id,
199 const double t,
const double dt,
const double Istim,
234 virtual std::vector<std::pair<std::string, int>>
271 const double Istim,
const double Ksac)
const;
311 const double Istim,
const double Ksac)
const;
350 const double Istim,
const double Ksac,
351 const unsigned int max_iter,
const double rtol,
352 const double atol)
const;
367 virtual void update_g(
const unsigned int zone_id,
const double dt,
388 const double I_sac)
const = 0;
404 virtual Array<double>
getj(
const unsigned int zone_id,
406 const double Ksac)
const {
407 svmp::raise<svmp::FE::NotImplementedException>(
408 SVMP_HERE,
"getj method not implemented for this ionic model.");
411 Array<double> dummy(X.size(), X.size());
476 if (factory_instance.children.find(name) !=
477 factory_instance.children.end()) {
478 svmp::raise<svmp::FE::InvalidArgumentException>(
480 "A model with name '" + name +
481 "' was already registered in the ionic model factory.");
484 factory_instance.children[name] = []() {
485 return std::make_unique<Model>();
494 static std::unique_ptr<IonicModel>
create_model(
const std::string &name);
504 visit(
const std::function<
void(
const std::string &,
const IonicModel &)> &f);
528 std::map<std::string, std::function<std::unique_ptr<IonicModel>()>>
children;
534#define REGISTER_IONIC_MODEL(name, type) \
535 namespace IonicModelFactoryInternals { \
536 static inline volatile const bool ionic_model_factory_registered_##type = \
537 IonicModelFactory::register_model<type>(name); \
Exception hierarchy for error handling in the FE library.
The CmMod class duplicates the data structures in the Fortran CMMOD module defined in COMU....
Definition CmMod.h:35
Self-registering factory for ionic models.
Definition ionic_model.h:468
IonicModelFactory()=default
Default constructor.
static std::unique_ptr< IonicModel > create_model(const std::string &name)
Instantiate a model from its name.
Definition ionic_model.cpp:261
static IonicModelFactory & get_instance()
Access the singleton instance.
Definition ionic_model.h:515
static void visit(const std::function< void(const std::string &, const IonicModel &)> &f)
Iterate through registered ionic models.
Definition ionic_model.cpp:274
static bool register_model(const std::string &name)
Register a child model.
Definition ionic_model.h:473
std::map< std::string, std::function< std::unique_ptr< IonicModel >()> > children
Registered ionic models.
Definition ionic_model.h:528
Abstract ionic model class.
Definition ionic_model.h:127
void integ_rk(const unsigned int zone_id, Vector< double > &X, Vector< double > &Xg, const double Ts, const double Ti, const double Istim, const double Ksac) const
Integrate the model with the fourth-order explicit Runge-Kutta method.
Definition ionic_model.cpp:187
IonicModel(const InitialStates &initial_X_, const InitialStates &initial_Xg_, const double Vrest_)
Constructor.
Definition ionic_model.h:136
InitialStates initial_Xg
Initial gating variables.
Definition ionic_model.h:419
const double Vscale
Voltage scaling [mV].
Definition ionic_model.h:436
void integ_fe(const unsigned int zone_id, Vector< double > &X, Vector< double > &Xg, const double Ts, const double Ti, const double Istim, const double Ksac) const
Integrate the model with the forward Euler method.
Definition ionic_model.cpp:158
virtual unsigned int get_calcium_index() const =0
Get the index of the intracellular calcium concentration in the state vector.
void init(Vector< double > &X, Vector< double > &Xg) const
Setup model initial conditions.
Definition ionic_model.cpp:41
unsigned int nX() const
Get the number of state variables.
Definition ionic_model.h:205
std::vector< std::pair< std::string, double > > InitialStates
Definition ionic_model.h:133
virtual void read_parameters(const IonicModelParameters ¶ms)
Read model parameters from a parameter object.
Definition ionic_model.cpp:23
virtual Array< double > getj(const unsigned int zone_id, const Vector< double > &X, const Vector< double > &Xg, const double Ksac) const
Model jacobian.
Definition ionic_model.h:404
const double Vrest
Definition ionic_model.h:423
virtual void update_g(const unsigned int zone_id, const double dt, const Vector< double > &X, Vector< double > &Xg) const =0
Update variables with analytical solution.
const double Voffset
Voltage offset parameter [mV].
Definition ionic_model.h:442
virtual ~IonicModel()=default
Virtual destructor.
IonicModel(const InitialStates &initial_X_, const InitialStates &initial_Xg_, const double Vrest_, const double Vscale_, const double Tscale_, const double Voffset_)
Constructor with scaling factors.
Definition ionic_model.h:142
virtual Vector< double > getf(const unsigned int zone_id, const Vector< double > &X, const Vector< double > &Xg, const double I_stim, const double I_sac) const =0
Model right hand side.
void integ(const odeType &ode_solver_params, const int zone_id, const double t, const double dt, const double Istim, const double Ksac, Vector< double > &X, Vector< double > &Xg) const
Integrate over one time step.
Definition ionic_model.cpp:60
unsigned int nG() const
Get the number of gating variables.
Definition ionic_model.h:210
virtual void distribute_parameters(const CmMod &cm_mod, const cmType &cm)
Distribute model parameters to all parallel processes.
Definition ionic_model.cpp:33
virtual std::vector< std::pair< std::string, int > > get_output_variables() const
Get a list of state variables to export to VTU.
Definition ionic_model.h:235
const double Tscale
Time scaling [ms].
Definition ionic_model.h:439
std::vector< outputType > get_registered_outputs() const
Get output variable information for output registration.
Definition ionic_model.cpp:242
virtual std::unique_ptr< IonicModelParameters > get_parameters() const
Construct an instance of model parameters for this model.
Definition ionic_model.h:154
InitialStates initial_X
Initial states.
Definition ionic_model.h:416
void integ_cn2(const unsigned int zone_id, Vector< double > &X, Vector< double > &Xg, const double Ts, const double Ti, const double Istim, const double Ksac, const unsigned int max_iter, const double rtol, const double atol) const
Integrate the model with the Crank-Nicolson method.
Definition ionic_model.cpp:86
Initial conditions parameters for a generic ionic model.
Definition Parameters.h:1242
The Vector template class is used for storing int and double data.
Definition Vector.h:24
The cmType class stores data and defines methods used for mpi communication.
Definition CmMod.h:55
Time integration scheme and related parameters.
Definition ionic_model.h:48
double absTol
Absolute tolerance.
Definition ionic_model.h:59
double relTol
Relative tolerance.
Definition ionic_model.h:62
TimeIntegrationType tIntType
Time integration method type.
Definition ionic_model.h:53
int maxItr
Max. iterations for Newton-Raphson method.
Definition ionic_model.h:56
Declared type for outputed variables.
Definition ComMod.h:643