svFSIplus
CepModTtp.h
1 /**
2  * Copyright (c) Stanford University, The Regents of the University of California, and others.
3  *
4  * All Rights Reserved.
5  *
6  * See Copyright-SimVascular.txt for additional details.
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining
9  * a copy of this software and associated documentation files (the
10  * "Software"), to deal in the Software without restriction, including
11  * without limitation the rights to use, copy, modify, merge, publish,
12  * distribute, sublicense, and/or sell copies of the Software, and to
13  * permit persons to whom the Software is furnished to do so, subject
14  * to the following conditions:
15  *
16  * The above copyright notice and this permission notice shall be included
17  * in all copies or substantial portions of the Software.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
23  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef CEP_MOD_TTP_H
33 #define CEP_MOD_TTP_H
34 
35 #include "Array.h"
36 #include "Vector.h"
37 #include <array>
38 
39 #include <optional>
40 #include <functional>
41 
42 template <class T>
43 T& make_ref(T&& x) { return x; }
44 
45 /// @brief This module defines data structures for ten Tusscher-Panfilov
46 /// epicardial cellular activation model for cardiac electrophysiology
47 ///
48 /// The classes defined here duplicate the data structures in the Fortran TPPMOD module defined
49 /// in CEPMOD_TTP.f and PARAMS_TPP.f files.
50 class CepModTtp
51 {
52  public:
53  CepModTtp();
54  ~CepModTtp();
55 
56 
57 //--------------------------------------------------------------------
58 //
59 // Constants for TenTusscher-Panfilov Ventricular Myocyte Model.
60 //
61 //--------------------------------------------------------------------
62 
63 // Default model parameters
64  /// Gas constant [J/mol/K]
65  double Rc = 8314.472;
66 
67  /// Temperature [K]
68  double Tc = 310.0;
69 
70  /// Faraday constant [C/mmol]
71  double Fc = 96485.3415;
72 
73  /// Cell capacitance per unit surface area [uF/cm^{2}]
74  double Cm = 0.185;
75 
76  /// Surface to volume ratio [um^{-1}]
77  double sV = 0.2;
78 
79  /// Cellular resistivity [\f$\Omega\f$-cm]
80  double rho = 162.0;
81 
82  /// Cytoplasmic volume [um^{3}]
83  double V_c = 16.404E-3;
84 
85  /// Sacroplasmic reticulum volume [um^{3}]
86  double V_sr = 1.094E-3;
87 
88  /// Subspace volume [um^{3}]
89  double V_ss = 5.468E-5;
90 
91  /// Extracellular K concentration [mM]
92  double K_o = 5.4;
93 
94  /// Extracellular Na concentration [mM]
95  double Na_o = 140.0;
96 
97  /// Extracellular Ca concentration [mM]
98  double Ca_o = 2.0;
99 
100  /// Maximal I_Na conductance [nS/pF]
101  double G_Na = 14.838;
102 
103  /// Maximal I_K1 conductance [nS/pF]
104  double G_K1 = 5.405;
105 
106  /// Maximal epicardial I_to conductance [nS/pF]
107  Vector<double> G_to = {0.294, 0.073, 0.294};
108 
109  /// Maximal I_Kr conductance [nS/pF]
110  double G_Kr = 0.153;
111 
112 // G_Kr for spiral wave breakup
113 // double G_Kr = 0.172; // units: nS/pF
114 
115  /// Maximal epicardial I_Ks conductance [nS/pF]
116  Vector<double> G_Ks = {0.392, 0.392, 0.098};
117 
118 // G_Ks for spiral wave breakup (epi)
119 // double G_Ks(3) = (/0.441, 0.392_RKIND, 0.098_RKIND/)
120 
121  /// Relative I_Ks permeability to Na [-]
122  double p_KNa = 3.E-2;
123 
124  /// Maximal I_CaL conductance [cm^{3}/uF/ms]
125  double G_CaL = 3.98E-5;
126 
127  /// Maximal I_NaCa [pA/pF]
128  double K_NaCa = 1000.;
129 
130  /// Voltage dependent parameter of I_NaCa [-]
131  double gamma = 0.35;
132 
133  /// Ca_i half-saturation constant for I_NaCa [mM]
134  double K_mCa = 1.38;
135 
136  /// Na_i half-saturation constant for I_NaCa [mM]
137  double K_mNai = 87.5;
138 
139  /// Saturation factor for I_NaCa [-]
140  double K_sat = 0.1;
141 
142  /// Factor enhancing outward nature of I_NaCa [-]
143  double alpha = 2.5;
144 
145  /// Maximal I_NaK [pA/pF]
146  double p_NaK = 2.724;
147 
148  /// K_o half-saturation constant of I_NaK [mM]
149  double K_mK = 1.;
150 
151  /// Na_i half-saturation constant of I_NaK [mM]
152  double K_mNa = 40.;
153 
154  /// Maximal I_pK conductance [nS/pF]
155  double G_pK = 1.46E-2;
156 
157 // G_pK for spiral wave breakup
158 // double G_pK = 2.19E-3; // units: nS/pF
159 
160  /// Maximal I_pCa conductance [pA/pF]
161  double G_pCa = 0.1238;
162 
163 // G_pCa for spiral wave breakup
164 // double G_pCa = 0.8666; // units: pA/pF
165 
166  /// Half-saturation constant of I_pCa [mM]
167  double K_pCa = 5.E-4;
168 
169  /// Maximal I_bNa conductance [nS/pF]
170  double G_bNa = 2.9E-4;
171 
172  /// Maximal I_bCa conductance [nS/pF]
173  double G_bCa = 5.92E-4;
174 
175  /// Maximal I_up conductance [mM/ms]
176  double Vmax_up = 6.375E-3;
177 
178  /// Half-saturation constant of I_up [mM]
179  double K_up = 2.5E-4;
180 
181  /// Maximal I_rel conductance [mM/ms]
182  double V_rel = 0.102;
183 
184  /// R to O and RI to I, I_rel transition rate [mM^{-2}/ms]
185  double k1p = 0.15;
186 
187  /// O to I and R to RI, I_rel transition rate [mM^{-1}/ms]
188  double k2p = 4.5E-2;
189 
190  /// O to R and I to RI, I_rel transition rate [ms^{-1}]
191  double k3 = 6.E-2;
192 
193  /// I to O and Ri to I, I_rel transition rate [ms^{-1}]
194  double k4 = 5.E-3;
195 
196  /// Ca_sr half-saturation constant of k_casr [mM]
197  double EC = 1.5;
198 
199  /// Maximum value of k_casr [-]
200  double max_sr = 2.5;
201 
202  /// Minimum value of k_casr [-]
203  double min_sr = 1.;
204 
205  /// Maximal I_leak conductance [mM/ms]
206  double V_leak = 3.6E-4;
207 
208  /// Maximal I_xfer conductance [mM/ms]
209  double V_xfer = 3.8E-3;
210 
211  /// Total cytoplasmic buffer concentration [mM]
212  double Buf_c = 0.2;
213 
214  /// Ca_i half-saturation constant for cytplasmic buffer [mM]
215  double K_bufc = 1.E-3;
216 
217  /// Total sacroplasmic buffer concentration [mM]
218  double Buf_sr = 10.;
219 
220  /// Ca_sr half-saturation constant for subspace buffer [mM]
221  double K_bufsr = 0.3;
222 
223  /// Total subspace buffer concentration [mM]
224  double Buf_ss = 0.4;
225 
226  /// Ca_ss half-saturation constant for subspace buffer [mM]
227  double K_bufss = 2.5E-4;
228 
229  /// Resting potential [mV]
230  double Vrest = -85.23;
231 
232 // Electromechanics coupling parameters: active stress model
233  /// Resting Ca concentration [mM]
234  double Ca_rest = 5.E-5;
235 
236  /// Critical Ca concentration [mM]
237  double Ca_crit = 8.E-4;
238 
239  /// Saturation of concentration [MPa/mM]
240  double eta_T = 12.5;
241 
242  /// Minimum activation [ms^{-1}]
243  double eps_0 = 0.1;
244 
245  /// Maximum activation [ms^{-1}]
246  double eps_i = 1. ;
247 
248  /// Transition rate [mM^{-1}]
249  double xi_T = 4.E3;
250 
251 // Electromechanics coupling parameters: active strain model
252 //
253 
254  /// Active force of sacromere [-mM^{-2}]
255  double alFa = -4.E6;
256 
257  /// Resting Ca concentration [mM]
258  double c_Ca0 = 2.155E-4;
259 
260  /// Viscous-type constant [ms-mM^{-2}]
261  double mu_Ca = 5.E6;
262 
263 // Force-length relationship parameters
264  /// Initial length of sacromeres [um]
265  double SL0 = 1.95;
266 
267  /// Min. length of sacromeres [um]
268  double SLmin = 1.7;
269 
270  /// Max. length of sacromeres [um]
271  double SLmax = 2.6;
272 
273  /// Fourier coefficients
274  double f0 = -4333.618335582119;
275  double fc1 = 2570.395355352195;
276  double fs1 = -2051.827278991976;
277  double fc2 = 1329.53611689133;
278  double fs2 = 302.216784558222;
279  double fc3 = 104.943770305116;
280  double fs3 = 218.375174229422;
281 
282 //-----------------------------------------------------------------------
283 // Scaling factors
284  /// Voltage scaling
285  double Vscale = 1.;
286 
287  /// Time scaling
288  double Tscale = 1.;
289 
290  /// Voltage offset parameter
291  double Voffset = 0.;
292 
293 //-----------------------------------------------------------------------
294 // Variables
295  /// Reverse potentials for Na, K, Ca
296  double E_Na;
297  double E_K;
298  double E_Ca;
299  double E_Ks;
300 // Cellular transmembrane currents
301  /// Fast sodium current
302  double I_Na;
303 
304  /// inward rectifier outward current
305  double I_K1;
306 
307  /// transient outward current
308  double I_to;
309 
310  /// rapid delayed rectifier current
311  double I_Kr;
312 
313  /// slow delayed rectifier current
314  double I_Ks;
315 
316  /// L-type Ca current
317  double I_CaL;
318 
319  /// Na-Ca exchanger current
320  double I_NaCa;
321 
322  /// Na-K pump current
323  double I_NaK;
324 
325  /// plateau Ca current
326  double I_pCa;
327 
328  /// plateau K current
329  double I_pK;
330 
331  /// background Ca current
332  double I_bCa;
333 
334  /// background Na current
335  double I_bNa;
336 
337  /// sacroplasmic reticulum Ca leak current
338  double I_leak;
339 
340  /// sacroplasmic reticulum Ca pump current
341  double I_up;
342 
343  /// Ca induced Ca release current
344  double I_rel;
345 
346  /// diffusive Ca current
347  double I_xfer;
348 //-----------------------------------------------------------------------
349 // State variables
350  double V;
351  double K_i;
352  double Na_i;
353  double Ca_i;
354  double Ca_ss;
355  double Ca_sr;
356  double R_bar;
357 
358 // Gating variables (runtime, steady state)
359  double xr1, xr1i;
360  double xr2, xr2i;
361  double xs, xsi;
362  double m, mi;
363  double h, hi;
364  double j, ji;
365  double d, di;
366  double f, fi;
367  double f2, f2i;
368  double fcass, fcassi;
369  double s, si;
370  double r, ri;
371 
372 // Other variables
373  double k1;
374  double k2;
375  double k_casr;
376  double O;
377 
378 // Jacobian variables
379  double E_Na_Nai, E_K_Ki, E_Ca_Cai, E_Ks_Ki, E_Ks_Nai;
380  double I_Na_V, I_Na_Nai;
381  double I_to_V, I_to_Ki;
382  double I_K1_V, I_K1_Ki;
383  double I_Kr_V, I_Kr_Ki;
384  double I_Ks_V, I_Ks_Ki, I_Ks_Nai;
385  double I_CaL_V, I_CaL_Cass;
386  double I_NaCa_V, I_NaCa_Nai, I_NaCa_Cai;
387  double I_NaK_V, I_NaK_Nai;
388  double I_pCa_Cai;
389  double I_pK_V, I_pK_Ki;
390  double I_bCa_V, I_bCa_Cai;
391  double I_bNa_V, I_bNa_Nai;
392  double I_leak_Cai, I_leak_Casr;
393  double I_up_Cai;
394  double I_rel_Cass, I_rel_Casr, I_rel_Rbar;
395  double I_xfer_Cai, I_xfer_Cass;
396  double k_casr_sr, k1_casr, O_Casr, O_Cass, O_Rbar;
397 
398  void actv_strn(const double c_Ca, const double I4f, const double dt, double& gf);
399  void actv_strs(const double c_Ca, const double dt, double& Tact, double& epsX);
400 
401  void getf(const int i, const int nX, const int nG, const Vector<double>& X, const Vector<double>& Xg,
402  Vector<double>& dX, const double I_stim, const double K_sac, Vector<double>& RPAR);
403 
404  void getj(const int i, const int nX, const int nG, const Vector<double>& X, const Vector<double>& Xg,
405  Array<double>& JAC, const double Ksac);
406 
407  void init(const int imyo, const int nX, const int nG, Vector<double>& X, Vector<double>& Xg);
408 
409  void init(const int imyo, const int nX, const int nG, Vector<double>& X, Vector<double>& Xg,
410  Vector<double>& X0, Vector<double>& Xg0);
411 
412  void integ_cn2(const int imyo, const int nX, const int nG, Vector<double>& X, Vector<double>& Xg,
413  const double Ts, const double dt, const double Istim, const double Ksac,
414  Vector<int>& IPAR, Vector<double>& RPAR);
415 
416  void integ_fe(const int imyo, const int nX, const int nG, Vector<double>& X, Vector<double>& Xg,
417  const double Ts, const double dt, const double Istim, const double Ksac, Vector<double>& RPAR);
418 
419  void integ_rk(const int imyo, const int nX, const int nG, Vector<double>& X, Vector<double>& Xg,
420  const double Ts, const double dt, const double Istim, const double Ksac, Vector<double>& RPAR);
421 
422  void update_g(const int i, const double dt, const int n, const int nG, const Vector<double>& X,
423  Vector<double>& Xg);
424 
425 };
426 
427 #endif
428 
This module defines data structures for ten Tusscher-Panfilov epicardial cellular activation model fo...
Definition: CepModTtp.h:51
double I_NaK
Na-K pump current.
Definition: CepModTtp.h:323
double K_o
Extracellular K concentration [mM].
Definition: CepModTtp.h:92
double mu_Ca
Viscous-type constant [ms-mM^{-2}].
Definition: CepModTtp.h:261
double SL0
Initial length of sacromeres [um].
Definition: CepModTtp.h:265
double Cm
Cell capacitance per unit surface area [uF/cm^{2}].
Definition: CepModTtp.h:74
double K_bufsr
Ca_sr half-saturation constant for subspace buffer [mM].
Definition: CepModTtp.h:221
double alpha
Factor enhancing outward nature of I_NaCa [-].
Definition: CepModTtp.h:143
double eps_i
Maximum activation [ms^{-1}].
Definition: CepModTtp.h:246
double V_rel
Maximal I_rel conductance [mM/ms].
Definition: CepModTtp.h:182
void getf(const int i, const int nX, const int nG, const Vector< double > &X, const Vector< double > &Xg, Vector< double > &dX, const double I_stim, const double K_sac, Vector< double > &RPAR)
Compute currents and time derivatives of state variables.
Definition: CepModTtp.cpp:77
double SLmax
Max. length of sacromeres [um].
Definition: CepModTtp.h:271
double k1p
R to O and RI to I, I_rel transition rate [mM^{-2}/ms].
Definition: CepModTtp.h:185
double I_up
sacroplasmic reticulum Ca pump current
Definition: CepModTtp.h:341
double K_mCa
Ca_i half-saturation constant for I_NaCa [mM].
Definition: CepModTtp.h:134
double I_bNa
background Na current
Definition: CepModTtp.h:335
double K_NaCa
Maximal I_NaCa [pA/pF].
Definition: CepModTtp.h:128
double K_bufc
Ca_i half-saturation constant for cytplasmic buffer [mM].
Definition: CepModTtp.h:215
double c_Ca0
Resting Ca concentration [mM].
Definition: CepModTtp.h:258
double I_bCa
background Ca current
Definition: CepModTtp.h:332
double max_sr
Maximum value of k_casr [-].
Definition: CepModTtp.h:200
double Tscale
Time scaling.
Definition: CepModTtp.h:288
double I_to
transient outward current
Definition: CepModTtp.h:308
double eta_T
Saturation of concentration [MPa/mM].
Definition: CepModTtp.h:240
double alFa
Active force of sacromere [-mM^{-2}].
Definition: CepModTtp.h:255
double sV
Surface to volume ratio [um^{-1}].
Definition: CepModTtp.h:77
double V_leak
Maximal I_leak conductance [mM/ms].
Definition: CepModTtp.h:206
double V_xfer
Maximal I_xfer conductance [mM/ms].
Definition: CepModTtp.h:209
double Voffset
Voltage offset parameter.
Definition: CepModTtp.h:291
double K_mK
K_o half-saturation constant of I_NaK [mM].
Definition: CepModTtp.h:149
void integ_cn2(const int imyo, const int nX, const int nG, Vector< double > &X, Vector< double > &Xg, const double Ts, const double dt, const double Istim, const double Ksac, Vector< int > &IPAR, Vector< double > &RPAR)
Time integration performed using Crank-Nicholson method.
Definition: CepModTtp.cpp:575
double rho
Cellular resistivity [ -cm].
Definition: CepModTtp.h:80
double I_rel
Ca induced Ca release current.
Definition: CepModTtp.h:344
double G_pCa
Maximal I_pCa conductance [pA/pF].
Definition: CepModTtp.h:161
double V_sr
Sacroplasmic reticulum volume [um^{3}].
Definition: CepModTtp.h:86
double G_pK
Maximal I_pK conductance [nS/pF].
Definition: CepModTtp.h:155
double G_Na
Maximal I_Na conductance [nS/pF].
Definition: CepModTtp.h:101
double G_bCa
Maximal I_bCa conductance [nS/pF].
Definition: CepModTtp.h:173
CepModTtp()
Definition: CepModTtp.cpp:37
Vector< double > G_to
Maximal epicardial I_to conductance [nS/pF].
Definition: CepModTtp.h:107
double xi_T
Transition rate [mM^{-1}].
Definition: CepModTtp.h:249
double K_mNai
Na_i half-saturation constant for I_NaCa [mM].
Definition: CepModTtp.h:137
double Buf_sr
Total sacroplasmic buffer concentration [mM].
Definition: CepModTtp.h:218
double Vscale
Voltage scaling.
Definition: CepModTtp.h:285
double k3
O to R and I to RI, I_rel transition rate [ms^{-1}].
Definition: CepModTtp.h:191
double I_Kr
rapid delayed rectifier current
Definition: CepModTtp.h:311
double I_NaCa
Na-Ca exchanger current.
Definition: CepModTtp.h:320
double p_NaK
Maximal I_NaK [pA/pF].
Definition: CepModTtp.h:146
double I_Na
Fast sodium current.
Definition: CepModTtp.h:302
double K_mNa
Na_i half-saturation constant of I_NaK [mM].
Definition: CepModTtp.h:152
double SLmin
Min. length of sacromeres [um].
Definition: CepModTtp.h:268
double V_ss
Subspace volume [um^{3}].
Definition: CepModTtp.h:89
double I_K1
inward rectifier outward current
Definition: CepModTtp.h:305
double p_KNa
Relative I_Ks permeability to Na [-].
Definition: CepModTtp.h:122
double Rc
Gas constant [J/mol/K].
Definition: CepModTtp.h:65
double min_sr
Minimum value of k_casr [-].
Definition: CepModTtp.h:203
double I_xfer
diffusive Ca current
Definition: CepModTtp.h:347
double G_bNa
Maximal I_bNa conductance [nS/pF].
Definition: CepModTtp.h:170
double Buf_ss
Total subspace buffer concentration [mM].
Definition: CepModTtp.h:224
double K_up
Half-saturation constant of I_up [mM].
Definition: CepModTtp.h:179
double Tc
Temperature [K].
Definition: CepModTtp.h:68
double Buf_c
Total cytoplasmic buffer concentration [mM].
Definition: CepModTtp.h:212
double Na_o
Extracellular Na concentration [mM].
Definition: CepModTtp.h:95
double I_pK
plateau K current
Definition: CepModTtp.h:329
double f0
Fourier coefficients.
Definition: CepModTtp.h:274
double Vrest
Resting potential [mV].
Definition: CepModTtp.h:230
double Ca_crit
Critical Ca concentration [mM].
Definition: CepModTtp.h:237
double E_Na
Reverse potentials for Na, K, Ca.
Definition: CepModTtp.h:296
void update_g(const int i, const double dt, const int n, const int nG, const Vector< double > &X, Vector< double > &Xg)
Update all the gating variables.
Definition: CepModTtp.cpp:691
double G_Kr
Maximal I_Kr conductance [nS/pF].
Definition: CepModTtp.h:110
double Ca_rest
Resting Ca concentration [mM].
Definition: CepModTtp.h:234
double Fc
Faraday constant [C/mmol].
Definition: CepModTtp.h:71
double k4
I to O and Ri to I, I_rel transition rate [ms^{-1}].
Definition: CepModTtp.h:194
double eps_0
Minimum activation [ms^{-1}].
Definition: CepModTtp.h:243
double V_c
Cytoplasmic volume [um^{3}].
Definition: CepModTtp.h:83
double k2p
O to I and R to RI, I_rel transition rate [mM^{-1}/ms].
Definition: CepModTtp.h:188
double I_Ks
slow delayed rectifier current
Definition: CepModTtp.h:314
double I_CaL
L-type Ca current.
Definition: CepModTtp.h:317
double G_CaL
Maximal I_CaL conductance [cm^{3}/uF/ms].
Definition: CepModTtp.h:125
double K_sat
Saturation factor for I_NaCa [-].
Definition: CepModTtp.h:140
double K_pCa
Half-saturation constant of I_pCa [mM].
Definition: CepModTtp.h:167
double gamma
Voltage dependent parameter of I_NaCa [-].
Definition: CepModTtp.h:131
Vector< double > G_Ks
Maximal epicardial I_Ks conductance [nS/pF].
Definition: CepModTtp.h:116
double EC
Ca_sr half-saturation constant of k_casr [mM].
Definition: CepModTtp.h:197
double Ca_o
Extracellular Ca concentration [mM].
Definition: CepModTtp.h:98
void actv_strn(const double c_Ca, const double I4f, const double dt, double &gf)
Compute macroscopic fiber strain based on sacromere force-length relationship and calcium concentrati...
Definition: CepModTtp.cpp:46
double I_pCa
plateau Ca current
Definition: CepModTtp.h:326
double K_bufss
Ca_ss half-saturation constant for subspace buffer [mM].
Definition: CepModTtp.h:227
double G_K1
Maximal I_K1 conductance [nS/pF].
Definition: CepModTtp.h:104
double Vmax_up
Maximal I_up conductance [mM/ms].
Definition: CepModTtp.h:176
double I_leak
sacroplasmic reticulum Ca leak current
Definition: CepModTtp.h:338