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