svMultiPhysics
Loading...
Searching...
No Matches
IonicModelTTP.h
1// SPDX-FileCopyrightText: Copyright (c) Stanford University, The Regents of the
2// University of California, and others. SPDX-License-Identifier: BSD-3-Clause
3
4#ifndef IONIC_TTP_H
5#define IONIC_TTP_H
6
7#include "IonicModel.h"
8
9#include "Parameters.h"
10
11#include "Vector.h"
12#include "utils.h"
13
14/**
15 * @brief Ten Tusscher-Panfilov ionic model.
16 *
17 * This class implements the 2006 version of the model, described in the second
18 * reference below.
19 *
20 * **References**:
21 * 1. [Ten Tusscher, Noble, Noble, Panfilov (2004)](https://doi.org/10.1152/ajpheart.00794.2003)
22 * 2. [Ten Tusscher, Panfilov (2006)](https://doi.org/10.1152/ajpheart.00109.2006)
23 *
24 * Model parameters are from reference 2 above. Default parameters are for
25 * epicardium state (source: https://models.cellml.org/e/80d)
26 *
27 * @note The zone identifier selects the transient-outward-current @c s-gate
28 * kinetics: zones 1 and 3 use the EPI/M equations, while zone 2 uses the ENDO
29 * equations. Phenotype-specific conductances and initial conditions are
30 * configured separately.
31 */
32class TTP : public IonicModel {
33public:
34 /// Model label.
35 static inline const std::string label = "TTP";
36
37 /// State variables.
38 static inline const InitialStates initial_X = {
39 {"V", -85.23}, {"K_i", 136.89}, {"Na_i", 8.6040}, {"Ca_i", 1.26e-4},
40 {"Ca_ss", 3.6e-4}, {"Ca_sr", 3.64}, {"R_bar", 0.9073}};
41
42 /// Gating variables.
43 static inline const InitialStates initial_Xg = {
44 {"x_r1_rectifier", 6.21e-3}, {"x_r2_rectifier", 0.4712},
45 {"x_s_rectifier", 9.5e-3}, {"m_fast_Na", 1.72e-3}, {"h_fast_Na", 0.7444},
46 {"j_fast_Na", 0.7045}, {"d_slow_in", 3.373e-5}, {"f_slow_in", 0.7888},
47 {"f2_slow_in", 0.9755}, {"fcass_slow_in", 0.9953}, {"s_out", 0.999998},
48 {"r_out", 2.42e-8}};
49
50 /// Index of the intracellular calcium concentration (Ca_i) in the state
51 /// vector.
52 static constexpr unsigned int calcium_index = 3;
53
54 /// Model parameters class.
56 public:
58 constexpr bool required = true;
59
60 add_parameter("Rc", 8314.472, required);
61 add_parameter("Tc", 310.0, required);
62 add_parameter("Fc", 96485.3415, required);
63 add_parameter("Cm", 0.185, required);
64 add_parameter("sV", 0.2, required);
65 add_parameter("rho", 162.0, required);
66 add_parameter("V_c", 16.404E-3, required);
67 add_parameter("V_sr", 1.094E-3, required);
68 add_parameter("V_ss", 5.468E-5, required);
69 add_parameter("K_o", 5.4, required);
70 add_parameter("Na_o", 140.0, required);
71 add_parameter("Ca_o", 2.0, required);
72 add_parameter("G_Na", 14.838, required);
73 add_parameter("G_K1", 5.405, required);
74 add_parameter("G_to", 0.294, required);
75 add_parameter("G_Kr", 0.153, required);
76 add_parameter("G_Ks", 0.392, required);
77 add_parameter("p_KNa", 3.E-2, required);
78 add_parameter("G_CaL", 3.98E-5, required);
79 add_parameter("K_NaCa", 1000., required);
80 add_parameter("gamma", 0.35, required);
81 add_parameter("K_mCa", 1.38, required);
82 add_parameter("K_mNai", 87.5, required);
83 add_parameter("K_sat", 0.1, required);
84 add_parameter("alpha", 2.5, required);
85 add_parameter("p_NaK", 2.724, required);
86 add_parameter("K_mK", 1., required);
87 add_parameter("K_mNa", 40., required);
88 add_parameter("G_pK", 1.46E-2, required);
89 add_parameter("G_pCa", 0.1238, required);
90 add_parameter("K_pCa", 5.E-4, required);
91 add_parameter("G_bNa", 2.9E-4, required);
92 add_parameter("G_bCa", 5.92E-4, required);
93 add_parameter("Vmax_up", 6.375E-3, required);
94 add_parameter("K_up", 2.5E-4, required);
95 add_parameter("V_rel", 0.102, required);
96 add_parameter("k1p", 0.15, required);
97 add_parameter("k2p", 4.5E-2, required);
98 add_parameter("k3", 6.E-2, required);
99 add_parameter("k4", 5.E-3, required);
100 add_parameter("EC", 1.5, required);
101 add_parameter("max_sr", 2.5, required);
102 add_parameter("min_sr", 1., required);
103 add_parameter("V_leak", 3.6E-4, required);
104 add_parameter("V_xfer", 3.8E-3, required);
105 add_parameter("Buf_c", 0.2, required);
106 add_parameter("K_bufc", 1.E-3, required);
107 add_parameter("Buf_sr", 10., required);
108 add_parameter("K_bufsr", 0.3, required);
109 add_parameter("Buf_ss", 0.4, required);
110 add_parameter("K_bufss", 2.5E-4, required);
111 }
112 };
113
114 /// Constructor.
117 /* Vrest_ = */ -85.23, /* Vscale_ = */ 1.0,
118 /* Tscale_ = */ 1.0, /* Voffset_ = */ 0.0) {}
119
120 /// Construct an instance of model parameters.
121 virtual std::unique_ptr<IonicModelParameters>
122 get_parameters() const override {
123 return std::make_unique<Parameters>();
124 }
125
126 /// Read model parameters from a parameter object.
127 virtual void read_parameters(const IonicModelParameters &params) override;
128
129 /// Distribute model parameters to all parallel processes.
130 virtual void distribute_parameters(const CmMod &cm_mod,
131 const cmType &cm) override;
132
133 /// Get the index of Ca_i in the state vector.
134 virtual unsigned int get_calcium_index() const override {
135 return calcium_index;
136 }
137
138protected:
139 /// @name Model parameters
140 /// @{
141
142 /// Gas constant [J/mol/K]
143 double Rc = 8314.472;
144
145 /// Temperature [K]
146 double Tc = 310.0;
147
148 /// Faraday constant [C/mmol]
149 double Fc = 96485.3415;
150
151 /// Cell capacitance per unit surface area [uF/cm^{2}]
152 double Cm = 0.185;
153
154 /// Surface to volume ratio [um^{-1}]
155 double sV = 0.2;
156
157 /// Cellular resistivity [\f$\Omega\f$-cm]
158 double rho = 162.0;
159
160 /// Cytoplasmic volume [um^{3}]
161 double V_c = 16.404E-3;
162
163 /// Sacroplasmic reticulum volume [um^{3}]
164 double V_sr = 1.094E-3;
165
166 /// Subspace volume [um^{3}]
167 double V_ss = 5.468E-5;
168
169 /// Extracellular K concentration [mM]
170 double K_o = 5.4;
171
172 /// Extracellular Na concentration [mM]
173 double Na_o = 140.0;
174
175 /// Extracellular Ca concentration [mM]
176 double Ca_o = 2.0;
177
178 /// Maximal I_Na conductance [nS/pF]
179 double G_Na = 14.838;
180
181 /// Maximal I_K1 conductance [nS/pF]
182 double G_K1 = 5.405;
183
184 /// Maximal I_to conductance [nS/pF]
185 double G_to = 0.294;
186
187 /// Maximal I_Kr conductance [nS/pF]
188 double G_Kr = 0.153;
189
190 /// Maximal I_Ks conductance [nS/pF]
191 double G_Ks = 0.392;
192
193 /// Relative I_Ks permeability to Na [-]
194 double p_KNa = 3.E-2;
195
196 /// Maximal I_CaL conductance [cm^{3}/uF/ms]
197 double G_CaL = 3.98E-5;
198
199 /// Maximal I_NaCa [pA/pF]
200 double K_NaCa = 1000.;
201
202 /// Voltage dependent parameter of I_NaCa [-]
203 double gamma = 0.35;
204
205 /// Ca_i half-saturation constant for I_NaCa [mM]
206 double K_mCa = 1.38;
207
208 /// Na_i half-saturation constant for I_NaCa [mM]
209 double K_mNai = 87.5;
210
211 /// Saturation factor for I_NaCa [-]
212 double K_sat = 0.1;
213
214 /// Factor enhancing outward nature of I_NaCa [-]
215 double alpha = 2.5;
216
217 /// Maximal I_NaK [pA/pF]
218 double p_NaK = 2.724;
219
220 /// K_o half-saturation constant of I_NaK [mM]
221 double K_mK = 1.;
222
223 /// Na_i half-saturation constant of I_NaK [mM]
224 double K_mNa = 40.;
225
226 /// Maximal I_pK conductance [nS/pF]
227 double G_pK = 1.46E-2;
228
229 /// Maximal I_pCa conductance [pA/pF]
230 double G_pCa = 0.1238;
231
232 /// Half-saturation constant of I_pCa [mM]
233 double K_pCa = 5.E-4;
234
235 /// Maximal I_bNa conductance [nS/pF]
236 double G_bNa = 2.9E-4;
237
238 /// Maximal I_bCa conductance [nS/pF]
239 double G_bCa = 5.92E-4;
240
241 /// Maximal I_up conductance [mM/ms]
242 double Vmax_up = 6.375E-3;
243
244 /// Half-saturation constant of I_up [mM]
245 double K_up = 2.5E-4;
246
247 /// Maximal I_rel conductance [mM/ms]
248 double V_rel = 0.102;
249
250 /// R to O and RI to I, I_rel transition rate [mM^{-2}/ms]
251 double k1p = 0.15;
252
253 /// O to I and R to RI, I_rel transition rate [mM^{-1}/ms]
254 double k2p = 4.5E-2;
255
256 /// O to R and I to RI, I_rel transition rate [ms^{-1}]
257 double k3 = 6.E-2;
258
259 /// I to O and Ri to I, I_rel transition rate [ms^{-1}]
260 double k4 = 5.E-3;
261
262 /// Ca_sr half-saturation constant of k_casr [mM]
263 double EC = 1.5;
264
265 /// Maximum value of k_casr [-]
266 double max_sr = 2.5;
267
268 /// Minimum value of k_casr [-]
269 double min_sr = 1.;
270
271 /// Maximal I_leak conductance [mM/ms]
272 double V_leak = 3.6E-4;
273
274 /// Maximal I_xfer conductance [mM/ms]
275 double V_xfer = 3.8E-3;
276
277 /// Total cytoplasmic buffer concentration [mM]
278 double Buf_c = 0.2;
279
280 /// Ca_i half-saturation constant for cytplasmic buffer [mM]
281 double K_bufc = 1.E-3;
282
283 /// Total sacroplasmic buffer concentration [mM]
284 double Buf_sr = 10.;
285
286 /// Ca_sr half-saturation constant for subspace buffer [mM]
287 double K_bufsr = 0.3;
288
289 /// Total subspace buffer concentration [mM]
290 double Buf_ss = 0.4;
291
292 /// Ca_ss half-saturation constant for subspace buffer [mM]
293 double K_bufss = 2.5E-4;
294
295 /// @}
296
297 /**
298 * @brief Update gating variables.
299 *
300 * The evolution rate of all the gating variables for this model has an
301 * expression in the form:
302 * @f[
303 * \frac{\text{d}y}{\text{d}t} = \frac{y_\infty(v) - y}{\tau(v)}\;,
304 * @f]
305 * with @f$v@f$ denotes the transmembrane potential. Assuming @f$v@f$ to be
306 * constant over the integration step, the above equation admits the following
307 * exact solution:
308 * @f[
309 * y^{n+1} = y_\infty(v) - (y_\infty(v) - y^n) e^{-\Delta t / \tau(v)}\;.
310 * @f]
311 * Accordingly, this function goes through all gating variables, computes
312 * the values of @f$y_\infty(v)\f$ and @f$\tau(v)\f$, and updates the
313 * gating variables using the above formula.
314 *
315 * @param[in] zone_id Identifier for the transmural zone (epicardium,
316 * endocardium, myocardium).
317 * @param[in] dt Time step.
318 * @param[in] X Vector of state variables.
319 * @param[out] Xg Vector of gating variables.
320 */
321 virtual void update_g(const unsigned int zone_id, const double dt,
322 const Vector<double> &X,
323 Vector<double> &Xg) const override;
324
325 /// Model right-hand side.
326 virtual Vector<double> getf(const unsigned int zone_id,
327 const Vector<double> &X, const Vector<double> &Xg,
328 const double I_stim,
329 const double I_sac) const override;
330};
331
332#endif
The CmMod class duplicates the data structures in the Fortran CMMOD module defined in COMU....
Definition CmMod.h:36
Abstract ionic model class.
Definition IonicModel.h:127
std::vector< std::pair< std::string, double > > InitialStates
Definition IonicModel.h:133
Parameters for a generic ionic model.
Definition Parameters.h:1344
void add_parameter(const std::string &label, double default_value, bool required)
Add a new parameter to this object.
Definition Parameters.h:1404
Model parameters class.
Definition IonicModelTTP.h:55
Ten Tusscher-Panfilov ionic model.
Definition IonicModelTTP.h:32
double K_mK
K_o half-saturation constant of I_NaK [mM].
Definition IonicModelTTP.h:221
double K_mNai
Na_i half-saturation constant for I_NaCa [mM].
Definition IonicModelTTP.h:209
double Buf_sr
Total sacroplasmic buffer concentration [mM].
Definition IonicModelTTP.h:284
static const InitialStates initial_X
State variables.
Definition IonicModelTTP.h:38
double p_NaK
Maximal I_NaK [pA/pF].
Definition IonicModelTTP.h:218
TTP()
Constructor.
Definition IonicModelTTP.h:115
double G_bCa
Maximal I_bCa conductance [nS/pF].
Definition IonicModelTTP.h:239
double G_pCa
Maximal I_pCa conductance [pA/pF].
Definition IonicModelTTP.h:230
virtual std::unique_ptr< IonicModelParameters > get_parameters() const override
Construct an instance of model parameters.
Definition IonicModelTTP.h:122
double Na_o
Extracellular Na concentration [mM].
Definition IonicModelTTP.h:173
double k2p
O to I and R to RI, I_rel transition rate [mM^{-1}/ms].
Definition IonicModelTTP.h:254
double K_sat
Saturation factor for I_NaCa [-].
Definition IonicModelTTP.h:212
double V_xfer
Maximal I_xfer conductance [mM/ms].
Definition IonicModelTTP.h:275
double G_to
Maximal I_to conductance [nS/pF].
Definition IonicModelTTP.h:185
double k3
O to R and I to RI, I_rel transition rate [ms^{-1}].
Definition IonicModelTTP.h:257
static const InitialStates initial_Xg
Gating variables.
Definition IonicModelTTP.h:43
double G_K1
Maximal I_K1 conductance [nS/pF].
Definition IonicModelTTP.h:182
double K_bufss
Ca_ss half-saturation constant for subspace buffer [mM].
Definition IonicModelTTP.h:293
double G_Na
Maximal I_Na conductance [nS/pF].
Definition IonicModelTTP.h:179
double G_pK
Maximal I_pK conductance [nS/pF].
Definition IonicModelTTP.h:227
double Rc
Gas constant [J/mol/K].
Definition IonicModelTTP.h:143
double V_c
Cytoplasmic volume [um^{3}].
Definition IonicModelTTP.h:161
double Ca_o
Extracellular Ca concentration [mM].
Definition IonicModelTTP.h:176
double V_leak
Maximal I_leak conductance [mM/ms].
Definition IonicModelTTP.h:272
static const std::string label
Model label.
Definition IonicModelTTP.h:35
virtual void read_parameters(const IonicModelParameters &params) override
Read model parameters from a parameter object.
Definition IonicModelTTP.cpp:6
virtual unsigned int get_calcium_index() const override
Get the index of Ca_i in the state vector.
Definition IonicModelTTP.h:134
double G_Ks
Maximal I_Ks conductance [nS/pF].
Definition IonicModelTTP.h:191
double K_bufc
Ca_i half-saturation constant for cytplasmic buffer [mM].
Definition IonicModelTTP.h:281
double max_sr
Maximum value of k_casr [-].
Definition IonicModelTTP.h:266
double rho
Cellular resistivity [ -cm].
Definition IonicModelTTP.h:158
virtual void distribute_parameters(const CmMod &cm_mod, const cmType &cm) override
Distribute model parameters to all parallel processes.
Definition IonicModelTTP.cpp:62
double K_up
Half-saturation constant of I_up [mM].
Definition IonicModelTTP.h:245
double K_mCa
Ca_i half-saturation constant for I_NaCa [mM].
Definition IonicModelTTP.h:206
double sV
Surface to volume ratio [um^{-1}].
Definition IonicModelTTP.h:155
double K_NaCa
Maximal I_NaCa [pA/pF].
Definition IonicModelTTP.h:200
double Cm
Cell capacitance per unit surface area [uF/cm^{2}].
Definition IonicModelTTP.h:152
double min_sr
Minimum value of k_casr [-].
Definition IonicModelTTP.h:269
double G_CaL
Maximal I_CaL conductance [cm^{3}/uF/ms].
Definition IonicModelTTP.h:197
double Buf_ss
Total subspace buffer concentration [mM].
Definition IonicModelTTP.h:290
double alpha
Factor enhancing outward nature of I_NaCa [-].
Definition IonicModelTTP.h:215
double k4
I to O and Ri to I, I_rel transition rate [ms^{-1}].
Definition IonicModelTTP.h:260
double V_ss
Subspace volume [um^{3}].
Definition IonicModelTTP.h:167
double Vmax_up
Maximal I_up conductance [mM/ms].
Definition IonicModelTTP.h:242
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 override
Model right-hand side.
Definition IonicModelTTP.cpp:290
double EC
Ca_sr half-saturation constant of k_casr [mM].
Definition IonicModelTTP.h:263
double p_KNa
Relative I_Ks permeability to Na [-].
Definition IonicModelTTP.h:194
double k1p
R to O and RI to I, I_rel transition rate [mM^{-2}/ms].
Definition IonicModelTTP.h:251
double K_mNa
Na_i half-saturation constant of I_NaK [mM].
Definition IonicModelTTP.h:224
double K_o
Extracellular K concentration [mM].
Definition IonicModelTTP.h:170
double G_Kr
Maximal I_Kr conductance [nS/pF].
Definition IonicModelTTP.h:188
virtual void update_g(const unsigned int zone_id, const double dt, const Vector< double > &X, Vector< double > &Xg) const override
Update gating variables.
Definition IonicModelTTP.cpp:118
double Buf_c
Total cytoplasmic buffer concentration [mM].
Definition IonicModelTTP.h:278
double G_bNa
Maximal I_bNa conductance [nS/pF].
Definition IonicModelTTP.h:236
double gamma
Voltage dependent parameter of I_NaCa [-].
Definition IonicModelTTP.h:203
double Tc
Temperature [K].
Definition IonicModelTTP.h:146
double K_bufsr
Ca_sr half-saturation constant for subspace buffer [mM].
Definition IonicModelTTP.h:287
double K_pCa
Half-saturation constant of I_pCa [mM].
Definition IonicModelTTP.h:233
double V_rel
Maximal I_rel conductance [mM/ms].
Definition IonicModelTTP.h:248
double Fc
Faraday constant [C/mmol].
Definition IonicModelTTP.h:149
static constexpr unsigned int calcium_index
Definition IonicModelTTP.h:52
double V_sr
Sacroplasmic reticulum volume [um^{3}].
Definition IonicModelTTP.h:164
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