27enum class TimeIntegrationType {
35extern const std::map<std::string, TimeIntegrationType> cep_time_int_to_type;
38static std::ostream &operator<<(std::ostream &strm, TimeIntegrationType type) {
39 const std::map<TimeIntegrationType, std::string> names = {
40 {TimeIntegrationType::NA,
"NA"},
41 {TimeIntegrationType::FE,
"FE"},
42 {TimeIntegrationType::RK4,
"RK4"},
43 {TimeIntegrationType::CN2,
"CN2"},
46 return strm << names.at(type);
55 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 "getj method not implemented for this ionic model.");
411 Array<double> dummy(X.size(), X.size());
459#define REGISTER_IONIC_MODEL(name, type) \
460 REGISTER_IN_FACTORY(IonicModel, 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:36
Abstract self-registering factory.
Definition factory.h:30
Abstract ionic model class.
Definition IonicModel.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 IonicModel.cpp:185
IonicModel(const InitialStates &initial_X_, const InitialStates &initial_Xg_, const double Vrest_)
Constructor.
Definition IonicModel.h:136
InitialStates initial_Xg
Initial gating variables.
Definition IonicModel.h:419
const double Vscale
Voltage scaling [mV].
Definition IonicModel.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 IonicModel.cpp:156
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 IonicModel.cpp:41
unsigned int nX() const
Get the number of state variables.
Definition IonicModel.h:205
std::vector< std::pair< std::string, double > > InitialStates
Definition IonicModel.h:133
virtual void read_parameters(const IonicModelParameters ¶ms)
Read model parameters from a parameter object.
Definition IonicModel.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 IonicModel.h:404
const double Vrest
Definition IonicModel.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 IonicModel.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 IonicModel.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 IonicModel.cpp:59
unsigned int nG() const
Get the number of gating variables.
Definition IonicModel.h:210
virtual void distribute_parameters(const CmMod &cm_mod, const cmType &cm)
Distribute model parameters to all parallel processes.
Definition IonicModel.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 IonicModel.h:235
const double Tscale
Time scaling [ms].
Definition IonicModel.h:439
std::vector< outputType > get_registered_outputs() const
Get output variable information for output registration.
Definition IonicModel.cpp:240
virtual std::unique_ptr< IonicModelParameters > get_parameters() const
Construct an instance of model parameters for this model.
Definition IonicModel.h:154
InitialStates initial_X
Initial states.
Definition IonicModel.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 IonicModel.cpp:84
Parameters for a generic ionic model.
Definition Parameters.h:1344
The Vector template class is used for storing int and double data.
Definition Vector.h:26
The cmType class stores data and defines methods used for mpi communication.
Definition CmMod.h:56
Time integration scheme and related parameters.
Definition IonicModel.h:50
double absTol
Absolute tolerance.
Definition IonicModel.h:61
double relTol
Relative tolerance.
Definition IonicModel.h:64
TimeIntegrationType tIntType
Time integration method type.
Definition IonicModel.h:55
int maxItr
Max. iterations for Newton-Raphson method.
Definition IonicModel.h:58
Declared type for outputed variables.
Definition ComMod.h:588