Nektar++
Fox02.cpp
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // File: Fox02.cpp
4 //
5 // For more information, please see: http://www.nektar.info
6 //
7 // The MIT License
8 //
9 // Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10 // Department of Aeronautics, Imperial College London (UK), and Scientific
11 // Computing and Imaging Institute, University of Utah (USA).
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining a
14 // copy of this software and associated documentation files (the "Software"),
15 // to deal in the Software without restriction, including without limitation
16 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 // and/or sell copies of the Software, and to permit persons to whom the
18 // Software is furnished to do so, subject to the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be included
21 // in all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 // DEALINGS IN THE SOFTWARE.
30 //
31 // Description: Fox 2002 cell model.
32 //
33 ///////////////////////////////////////////////////////////////////////////////
34 
35 #include <iostream>
36 #include <string>
37 //#include <LibUtilities/BasicUtils/Vmath.hpp>
39 
40 namespace Nektar
41 {
43  "Fox02", Fox02::create, "Fox 2002 cell model.");
44 
45 /**
46  *
47  */
49  const MultiRegions::ExpListSharedPtr &pField)
50  : CellModel(pSession, pField)
51 {
52  pSession->LoadParameter("chi", m_chi);
53  pSession->LoadParameter("sigmai", m_sigmai);
54 
55  m_nvar = 13;
56 
57  m_gates.push_back(1);
58  m_gates.push_back(2);
59  m_gates.push_back(3);
60  m_gates.push_back(4);
61  m_gates.push_back(5);
62  m_gates.push_back(6);
63  m_gates.push_back(7);
64  m_gates.push_back(8);
65  m_gates.push_back(9);
66  m_gates.push_back(10);
67  m_concentrations.push_back(11);
68  m_concentrations.push_back(12);
69 }
70 
71 void Fox02::v_Update(const Array<OneD, const Array<OneD, NekDouble>> &inarray,
72  Array<OneD, Array<OneD, NekDouble>> &outarray,
73  const NekDouble time)
74 {
75  boost::ignore_unused(time);
76 
77  for (size_t i = 0; i < m_nq; ++i)
78  {
79 
80  // Inputs:
81  // Time units: millisecond
82  NekDouble var_chaste_interface__membrane__V = inarray[0][i];
83  // Units: millivolt; Initial value: -94.7
84  NekDouble var_chaste_interface__fast_sodium_current_m_gate__m =
85  inarray[1][i];
86  // Units: dimensionless; Initial value: 0.00024676
87  NekDouble var_chaste_interface__fast_sodium_current_h_gate__h =
88  inarray[2][i];
89  // Units: dimensionless; Initial value: 0.99869
90  NekDouble var_chaste_interface__fast_sodium_current_j_gate__j =
91  inarray[3][i];
92  // Units: dimensionless; Initial value: 0.99887
93  NekDouble
94  var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr =
95  inarray[4][i];
96  // Units: dimensionless; Initial value: 0.229
97  NekDouble
98  var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks =
99  inarray[5][i];
100  // Units: dimensionless; Initial value: 0.0001
101  NekDouble
102  var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to =
103  inarray[6][i];
104  // Units: dimensionless; Initial value: 0.00003742
105  NekDouble
106  var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to =
107  inarray[7][i];
108  // Units: dimensionless; Initial value: 1
109  NekDouble var_chaste_interface__L_type_Ca_current_f_gate__f =
110  inarray[8][i];
111  // Units: dimensionless; Initial value: 0.983
112  NekDouble var_chaste_interface__L_type_Ca_current_d_gate__d =
113  inarray[9][i];
114  // Units: dimensionless; Initial value: 0.0001
115  NekDouble var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca =
116  inarray[10][i];
117  // Units: dimensionless; Initial value: 0.942
118  NekDouble var_chaste_interface__calcium_dynamics__Ca_i = inarray[11][i];
119  // Units: micromolar; Initial value: 0.0472
120  NekDouble var_chaste_interface__calcium_dynamics__Ca_SR =
121  inarray[12][i];
122  // Units: micromolar; Initial value: 320
123 
124  // Mathematics
125  NekDouble d_dt_chaste_interface__membrane__V;
126  const NekDouble var_membrane__R = 8.314; // joule_per_mole_kelvin
127  const NekDouble var_membrane__T = 310.0; // kelvin
128  const NekDouble var_membrane__F = 96.5; // coulomb_per_millimole
129  const NekDouble var_fast_sodium_current__j =
130  var_chaste_interface__fast_sodium_current_j_gate__j; // dimensionless
131  const NekDouble var_fast_sodium_current__h =
132  var_chaste_interface__fast_sodium_current_h_gate__h; // dimensionless
133  const NekDouble var_fast_sodium_current__m =
134  var_chaste_interface__fast_sodium_current_m_gate__m; // dimensionless
135  const NekDouble var_fast_sodium_current__V =
136  var_chaste_interface__membrane__V; // millivolt
137  const NekDouble var_standard_ionic_concentrations__Na_o =
138  138.0; // millimolar
139  const NekDouble var_standard_ionic_concentrations__Na_i =
140  10.0; // millimolar
141  const NekDouble var_L_type_Ca_current__f =
142  var_chaste_interface__L_type_Ca_current_f_gate__f; // dimensionless
143  const NekDouble var_L_type_Ca_current__f_Ca =
144  var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca; // dimensionless
145  const NekDouble var_L_type_Ca_current__F =
146  var_membrane__F; // coulomb_per_millimole
147  const NekDouble var_L_type_Ca_current__P_Ca =
148  1.26e-05; // cm_per_millisecond
149  const NekDouble var_L_type_Ca_current__V =
150  var_chaste_interface__membrane__V; // millivolt
151  const NekDouble var_L_type_Ca_current__C_sc = 1.0; // microF_per_cm2
152  const NekDouble var_L_type_Ca_current__T = var_membrane__T; // kelvin
153  const NekDouble var_standard_ionic_concentrations__Ca_o =
154  2000.0; // micromolar
155  const NekDouble var_L_type_Ca_current__Ca_o =
156  var_standard_ionic_concentrations__Ca_o; // micromolar
157  const NekDouble var_L_type_Ca_current__R =
158  var_membrane__R; // joule_per_mole_kelvin
159  const NekDouble var_L_type_Ca_current__Ca_i =
160  var_chaste_interface__calcium_dynamics__Ca_i; // micromolar
161  const NekDouble var_L_type_Ca_current__i_Ca_max =
162  ((((var_L_type_Ca_current__P_Ca / var_L_type_Ca_current__C_sc) *
163  4.0 * var_L_type_Ca_current__V *
164  pow(var_L_type_Ca_current__F, 2.0)) /
165  (var_L_type_Ca_current__R * var_L_type_Ca_current__T)) *
166  ((var_L_type_Ca_current__Ca_i *
167  exp((2.0 * var_L_type_Ca_current__V * var_L_type_Ca_current__F) /
168  (var_L_type_Ca_current__R * var_L_type_Ca_current__T))) -
169  (0.341 * var_L_type_Ca_current__Ca_o))) /
170  (exp((2.0 * var_L_type_Ca_current__V * var_L_type_Ca_current__F) /
171  (var_L_type_Ca_current__R * var_L_type_Ca_current__T)) -
172  1.0); // microA_per_microF
173  const NekDouble var_L_type_Ca_current__d =
174  var_chaste_interface__L_type_Ca_current_d_gate__d; // dimensionless
175  const NekDouble var_L_type_Ca_current__i_Ca =
176  var_L_type_Ca_current__i_Ca_max * var_L_type_Ca_current__f *
177  var_L_type_Ca_current__d *
178  var_L_type_Ca_current__f_Ca; // microA_per_microF
179  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__V =
180  var_chaste_interface__membrane__V; // millivolt
181  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__X_kr =
182  var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr; // dimensionless
183  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__V =
184  var_chaste_interface__membrane__V; // millivolt
185  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__X_ks =
186  var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks; // dimensionless
187  const NekDouble var_transient_outward_potassium_current__Y_to =
188  var_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to; // dimensionless
189  const NekDouble var_transient_outward_potassium_current__X_to =
190  var_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to; // dimensionless
191  const NekDouble var_transient_outward_potassium_current__V =
192  var_chaste_interface__membrane__V; // millivolt
193  const NekDouble var_Na_Ca_exchanger__Na_o =
194  var_standard_ionic_concentrations__Na_o; // millimolar
195  const NekDouble var_Na_Ca_exchanger__K_sat = 0.2; // dimensionless
196  const NekDouble var_Na_Ca_exchanger__Ca_i =
197  var_chaste_interface__calcium_dynamics__Ca_i; // micromolar
198  const NekDouble var_Na_Ca_exchanger__K_mNa = 87.5; // millimolar
199  const NekDouble var_Na_Ca_exchanger__Ca_o =
200  var_standard_ionic_concentrations__Ca_o; // micromolar
201  const NekDouble var_Na_Ca_exchanger__K_NaCa =
202  1500.0; // microA_per_microF
203  const NekDouble var_Na_Ca_exchanger__T = var_membrane__T; // kelvin
204  const NekDouble var_Na_Ca_exchanger__V =
205  var_chaste_interface__membrane__V; // millivolt
206  const NekDouble var_Na_Ca_exchanger__Na_i =
207  var_standard_ionic_concentrations__Na_i; // millimolar
208  const NekDouble var_Na_Ca_exchanger__eta = 0.35; // dimensionless
209  const NekDouble var_Na_Ca_exchanger__K_mCa = 1380.0; // micromolar
210  const NekDouble var_Na_Ca_exchanger__F =
211  var_membrane__F; // coulomb_per_millimole
212  const NekDouble var_Na_Ca_exchanger__R =
213  var_membrane__R; // joule_per_mole_kelvin
214  const NekDouble var_Na_Ca_exchanger__i_NaCa =
215  (var_Na_Ca_exchanger__K_NaCa /
216  ((pow(var_Na_Ca_exchanger__K_mNa, 3.0) +
217  pow(var_Na_Ca_exchanger__Na_o, 3.0)) *
218  (var_Na_Ca_exchanger__K_mCa + var_Na_Ca_exchanger__Ca_o) *
219  (1.0 +
220  (var_Na_Ca_exchanger__K_sat *
221  exp(((var_Na_Ca_exchanger__eta - 1.0) * var_Na_Ca_exchanger__V *
222  var_Na_Ca_exchanger__F) /
223  (var_Na_Ca_exchanger__R * var_Na_Ca_exchanger__T)))))) *
224  ((exp((var_Na_Ca_exchanger__eta * var_Na_Ca_exchanger__V *
225  var_Na_Ca_exchanger__F) /
226  (var_Na_Ca_exchanger__R * var_Na_Ca_exchanger__T)) *
227  pow(var_Na_Ca_exchanger__Na_i, 3.0) * var_Na_Ca_exchanger__Ca_o) -
228  (exp(((var_Na_Ca_exchanger__eta - 1.0) * var_Na_Ca_exchanger__V *
229  var_Na_Ca_exchanger__F) /
230  (var_Na_Ca_exchanger__R * var_Na_Ca_exchanger__T)) *
231  pow(var_Na_Ca_exchanger__Na_o, 3.0) *
232  var_Na_Ca_exchanger__Ca_i)); // microA_per_microF
233  const NekDouble var_sarcolemmal_calcium_pump__Ca_i =
234  var_chaste_interface__calcium_dynamics__Ca_i; // micromolar
235  const NekDouble var_sarcolemmal_calcium_pump__i_pCa_max =
236  0.05; // microA_per_microF
237  const NekDouble var_sarcolemmal_calcium_pump__K_mpCa =
238  0.05; // micromolar
239  const NekDouble var_sarcolemmal_calcium_pump__i_p_Ca =
240  (var_sarcolemmal_calcium_pump__i_pCa_max *
241  var_sarcolemmal_calcium_pump__Ca_i) /
242  (var_sarcolemmal_calcium_pump__K_mpCa +
243  var_sarcolemmal_calcium_pump__Ca_i); // microA_per_microF
244  const NekDouble var_calcium_background_current__R =
245  var_membrane__R; // joule_per_mole_kelvin
246  const NekDouble var_calcium_background_current__Ca_i =
247  var_chaste_interface__calcium_dynamics__Ca_i; // micromolar
248  const NekDouble var_calcium_background_current__F =
249  var_membrane__F; // coulomb_per_millimole
250  const NekDouble var_calcium_background_current__T =
251  var_membrane__T; // kelvin
252  const NekDouble var_calcium_background_current__Ca_o =
253  var_standard_ionic_concentrations__Ca_o; // micromolar
254  const NekDouble var_calcium_background_current__E_Ca =
255  ((var_calcium_background_current__R *
256  var_calcium_background_current__T) /
257  (2.0 * var_calcium_background_current__F)) *
258  log(var_calcium_background_current__Ca_o /
259  var_calcium_background_current__Ca_i); // millivolt
260  const NekDouble var_calcium_background_current__g_Cab =
261  0.0003842; // milliS_per_microF
262  const NekDouble var_calcium_background_current__V =
263  var_chaste_interface__membrane__V; // millivolt
264  const NekDouble var_calcium_background_current__i_Ca_b =
265  var_calcium_background_current__g_Cab *
266  (var_calcium_background_current__V -
267  var_calcium_background_current__E_Ca); // microA_per_microF
268  const NekDouble var_fast_sodium_current_m_gate__m =
269  var_fast_sodium_current__m; // dimensionless
270  const NekDouble var_fast_sodium_current_m_gate__V =
271  var_fast_sodium_current__V; // millivolt
272  const NekDouble var_fast_sodium_current_m_gate__E0_m =
273  var_fast_sodium_current_m_gate__V + 47.13; // millivolt
274  const NekDouble var_fast_sodium_current_m_gate__alpha_m =
275  (0.32 * var_fast_sodium_current_m_gate__E0_m) /
276  (1.0 -
277  exp((-0.1) *
278  var_fast_sodium_current_m_gate__E0_m)); // per_millisecond
279  const NekDouble var_fast_sodium_current_m_gate__beta_m =
280  0.08 *
281  exp((-var_fast_sodium_current_m_gate__V) / 11.0); // per_millisecond
282  const NekDouble
283  var_fast_sodium_current_m_gate__d_m_d_environment__time =
284  (var_fast_sodium_current_m_gate__alpha_m *
285  (1.0 - var_fast_sodium_current_m_gate__m)) -
286  (var_fast_sodium_current_m_gate__beta_m *
287  var_fast_sodium_current_m_gate__m); // per_millisecond
288  const NekDouble
289  var_fast_sodium_current__fast_sodium_current_m_gate__d_m_d_environment__time =
290  var_fast_sodium_current_m_gate__d_m_d_environment__time; // per_millisecond
291  const NekDouble var_fast_sodium_current_h_gate__V =
292  var_fast_sodium_current__V; // millivolt
293  const NekDouble var_fast_sodium_current_h_gate__beta_h =
294  7.5 / (1.0 + exp((-0.1) * (var_fast_sodium_current_h_gate__V +
295  11.0))); // per_millisecond
296  const NekDouble var_fast_sodium_current_h_gate__alpha_h =
297  0.135 * exp((var_fast_sodium_current_h_gate__V + 80.0) /
298  (-6.8)); // per_millisecond
299  const NekDouble var_fast_sodium_current_h_gate__h =
300  var_fast_sodium_current__h; // dimensionless
301  const NekDouble
302  var_fast_sodium_current_h_gate__d_h_d_environment__time =
303  (var_fast_sodium_current_h_gate__alpha_h *
304  (1.0 - var_fast_sodium_current_h_gate__h)) -
305  (var_fast_sodium_current_h_gate__beta_h *
306  var_fast_sodium_current_h_gate__h); // per_millisecond
307  const NekDouble
308  var_fast_sodium_current__fast_sodium_current_h_gate__d_h_d_environment__time =
309  var_fast_sodium_current_h_gate__d_h_d_environment__time; // per_millisecond
310  const NekDouble var_fast_sodium_current_j_gate__V =
311  var_fast_sodium_current__V; // millivolt
312  const NekDouble var_fast_sodium_current_j_gate__alpha_j =
313  (0.175 *
314  exp((var_fast_sodium_current_j_gate__V + 100.0) / (-23.0))) /
315  (1.0 + exp(0.15 * (var_fast_sodium_current_j_gate__V +
316  79.0))); // per_millisecond
317  const NekDouble var_fast_sodium_current_j_gate__beta_j =
318  0.3 / (1.0 + exp((-0.1) * (var_fast_sodium_current_j_gate__V +
319  32.0))); // per_millisecond
320  const NekDouble var_fast_sodium_current_j_gate__j =
321  var_fast_sodium_current__j; // dimensionless
322  const NekDouble
323  var_fast_sodium_current_j_gate__d_j_d_environment__time =
324  (var_fast_sodium_current_j_gate__alpha_j *
325  (1.0 - var_fast_sodium_current_j_gate__j)) -
326  (var_fast_sodium_current_j_gate__beta_j *
327  var_fast_sodium_current_j_gate__j); // per_millisecond
328  const NekDouble
329  var_fast_sodium_current__fast_sodium_current_j_gate__d_j_d_environment__time =
330  var_fast_sodium_current_j_gate__d_j_d_environment__time; // per_millisecond
331  const NekDouble
332  var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__V =
333  var_rapid_activating_delayed_rectifiyer_K_current__V; // millivolt
334  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr =
335  43.0 +
336  (1.0 /
337  (exp((-5.495) +
338  (0.1691 *
339  var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__V)) +
340  exp((-7.677) -
341  (0.0128 *
342  var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__V)))); // millisecond
343  const NekDouble
344  var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr =
345  var_rapid_activating_delayed_rectifiyer_K_current__X_kr; // dimensionless
346  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf =
347  1.0 /
348  (1.0 +
349  exp((-2.182) -
350  (0.1819 *
351  var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__V))); // dimensionless
352  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__d_X_kr_d_environment__time =
353  (var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr_inf -
354  var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr) /
355  var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__tau_X_kr; // per_millisecond
356  const NekDouble
357  var_rapid_activating_delayed_rectifiyer_K_current__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__d_X_kr_d_environment__time =
358  var_rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__d_X_kr_d_environment__time; // per_millisecond
359  const NekDouble
360  var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__V =
361  var_slow_activating_delayed_rectifiyer_K_current__V; // millivolt
362  const NekDouble var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks =
363  1.0 /
364  (((7.19e-05 *
365  (var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__V -
366  10.0)) /
367  (1.0 -
368  exp((-0.148) *
369  (var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__V -
370  10.0)))) +
371  ((0.000131 *
372  (var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__V -
373  10.0)) /
374  (exp(0.0687 *
375  (var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__V -
376  10.0)) -
377  1.0))); // millisecond
378  const NekDouble
379  var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity =
380  1.0 /
381  (1.0 +
382  exp((var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__V -
383  16.0) /
384  (-13.6))); // dimensionless
385  const NekDouble
386  var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks =
387  var_slow_activating_delayed_rectifiyer_K_current__X_ks; // dimensionless
388  const NekDouble var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__d_X_ks_d_environment__time =
389  (var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks_infinity -
390  var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks) /
391  var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__tau_X_ks; // per_millisecond
392  const NekDouble
393  var_slow_activating_delayed_rectifiyer_K_current__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__d_X_ks_d_environment__time =
394  var_slow_activating_delayed_rectifiyer_K_current_X_ks_gate__d_X_ks_d_environment__time; // per_millisecond
395  const NekDouble var_transient_outward_potassium_current_X_to_gate__V =
396  var_transient_outward_potassium_current__V; // millivolt
397  const NekDouble
398  var_transient_outward_potassium_current_X_to_gate__alpha_X_to =
399  0.04516 *
400  exp(0.03577 *
401  var_transient_outward_potassium_current_X_to_gate__V); // per_millisecond
402  const NekDouble
403  var_transient_outward_potassium_current_X_to_gate__X_to =
404  var_transient_outward_potassium_current__X_to; // dimensionless
405  const NekDouble
406  var_transient_outward_potassium_current_X_to_gate__beta_X_to =
407  0.0989 *
408  exp((-0.06237) *
409  var_transient_outward_potassium_current_X_to_gate__V); // per_millisecond
410  const NekDouble
411  var_transient_outward_potassium_current_X_to_gate__d_X_to_d_environment__time =
412  (var_transient_outward_potassium_current_X_to_gate__alpha_X_to *
413  (1.0 -
414  var_transient_outward_potassium_current_X_to_gate__X_to)) -
415  (var_transient_outward_potassium_current_X_to_gate__beta_X_to *
416  var_transient_outward_potassium_current_X_to_gate__X_to); // per_millisecond
417  const NekDouble
418  var_transient_outward_potassium_current__transient_outward_potassium_current_X_to_gate__d_X_to_d_environment__time =
419  var_transient_outward_potassium_current_X_to_gate__d_X_to_d_environment__time; // per_millisecond
420  const NekDouble var_transient_outward_potassium_current_Y_to_gate__V =
421  var_transient_outward_potassium_current__V; // millivolt
422  const NekDouble
423  var_transient_outward_potassium_current_Y_to_gate__beta_Y_to =
424  (0.005415 *
425  exp((var_transient_outward_potassium_current_Y_to_gate__V +
426  33.5) /
427  5.0)) /
428  (1.0 +
429  (0.051335 *
430  exp((var_transient_outward_potassium_current_Y_to_gate__V +
431  33.5) /
432  5.0))); // per_millisecond
433  const NekDouble
434  var_transient_outward_potassium_current_Y_to_gate__alpha_Y_to =
435  (0.005415 *
436  exp((var_transient_outward_potassium_current_Y_to_gate__V +
437  33.5) /
438  (-5.0))) /
439  (1.0 +
440  (0.051335 *
441  exp((var_transient_outward_potassium_current_Y_to_gate__V +
442  33.5) /
443  (-5.0)))); // per_millisecond
444  const NekDouble
445  var_transient_outward_potassium_current_Y_to_gate__Y_to =
446  var_transient_outward_potassium_current__Y_to; // dimensionless
447  const NekDouble
448  var_transient_outward_potassium_current_Y_to_gate__d_Y_to_d_environment__time =
449  (var_transient_outward_potassium_current_Y_to_gate__alpha_Y_to *
450  (1.0 -
451  var_transient_outward_potassium_current_Y_to_gate__Y_to)) -
452  (var_transient_outward_potassium_current_Y_to_gate__beta_Y_to *
453  var_transient_outward_potassium_current_Y_to_gate__Y_to); // per_millisecond
454  const NekDouble
455  var_transient_outward_potassium_current__transient_outward_potassium_current_Y_to_gate__d_Y_to_d_environment__time =
456  var_transient_outward_potassium_current_Y_to_gate__d_Y_to_d_environment__time; // per_millisecond
457  const NekDouble var_L_type_Ca_current_f_gate__V =
458  var_L_type_Ca_current__V; // millivolt
459  const NekDouble var_L_type_Ca_current_f_gate__tau_f =
460  30.0 +
461  (200.0 / (1.0 + exp((var_L_type_Ca_current_f_gate__V + 20.0) /
462  9.5))); // millisecond
463  const NekDouble var_L_type_Ca_current_f_gate__f =
464  var_L_type_Ca_current__f; // dimensionless
465  const NekDouble var_L_type_Ca_current_f_gate__f_infinity =
466  1.0 / (1.0 + exp((var_L_type_Ca_current_f_gate__V + 12.5) /
467  5.0)); // dimensionless
468  const NekDouble var_L_type_Ca_current_f_gate__d_f_d_environment__time =
469  (var_L_type_Ca_current_f_gate__f_infinity -
470  var_L_type_Ca_current_f_gate__f) /
471  var_L_type_Ca_current_f_gate__tau_f; // per_millisecond
472  const NekDouble
473  var_L_type_Ca_current__L_type_Ca_current_f_gate__d_f_d_environment__time =
474  var_L_type_Ca_current_f_gate__d_f_d_environment__time; // per_millisecond
475  const NekDouble var_L_type_Ca_current_d_gate__V =
476  var_L_type_Ca_current__V; // millivolt
477  const NekDouble var_L_type_Ca_current_d_gate__E0_m =
478  var_L_type_Ca_current_d_gate__V + 40.0; // millivolt
479  const NekDouble var_L_type_Ca_current_d_gate__tau_d =
480  1.0 /
481  (((0.25 * exp((-0.01) * var_L_type_Ca_current_d_gate__V)) /
482  (1.0 + exp((-0.07) * var_L_type_Ca_current_d_gate__V))) +
483  ((0.07 * exp((-0.05) * var_L_type_Ca_current_d_gate__E0_m)) /
484  (1.0 +
485  exp(0.05 * var_L_type_Ca_current_d_gate__E0_m)))); // millisecond
486  const NekDouble var_L_type_Ca_current_d_gate__d =
487  var_L_type_Ca_current__d; // dimensionless
488  const NekDouble var_L_type_Ca_current_d_gate__d_infinity =
489  1.0 / (1.0 + exp((var_L_type_Ca_current_d_gate__V + 10.0) /
490  (-6.24))); // dimensionless
491  const NekDouble var_L_type_Ca_current_d_gate__d_d_d_environment__time =
492  (var_L_type_Ca_current_d_gate__d_infinity -
493  var_L_type_Ca_current_d_gate__d) /
494  var_L_type_Ca_current_d_gate__tau_d; // per_millisecond
495  const NekDouble
496  var_L_type_Ca_current__L_type_Ca_current_d_gate__d_d_d_environment__time =
497  var_L_type_Ca_current_d_gate__d_d_d_environment__time; // per_millisecond
498  const NekDouble var_L_type_Ca_current_f_Ca_gate__f_Ca =
499  var_L_type_Ca_current__f_Ca; // dimensionless
500  const NekDouble var_L_type_Ca_current_f_Ca_gate__K_mfCa =
501  0.18; // micromolar
502  const NekDouble var_L_type_Ca_current_f_Ca_gate__Ca_i =
503  var_L_type_Ca_current__Ca_i; // micromolar
504  const NekDouble var_L_type_Ca_current_f_Ca_gate__f_Ca_infinity =
505  1.0 / (1.0 + pow(var_L_type_Ca_current_f_Ca_gate__Ca_i /
506  var_L_type_Ca_current_f_Ca_gate__K_mfCa,
507  3.0)); // dimensionless
508  const NekDouble var_L_type_Ca_current_f_Ca_gate__tau_f_Ca =
509  30.0; // millisecond
510  const NekDouble
511  var_L_type_Ca_current_f_Ca_gate__d_f_Ca_d_environment__time =
512  (var_L_type_Ca_current_f_Ca_gate__f_Ca_infinity -
513  var_L_type_Ca_current_f_Ca_gate__f_Ca) /
514  var_L_type_Ca_current_f_Ca_gate__tau_f_Ca; // per_millisecond
515  const NekDouble
516  var_L_type_Ca_current__L_type_Ca_current_f_Ca_gate__d_f_Ca_d_environment__time =
517  var_L_type_Ca_current_f_Ca_gate__d_f_Ca_d_environment__time; // per_millisecond
518  const NekDouble var_calcium_dynamics__Ca_i =
519  var_chaste_interface__calcium_dynamics__Ca_i; // micromolar
520  const NekDouble var_calcium_dynamics__CMDN_tot = 10.0; // micromolar
521  const NekDouble var_calcium_dynamics__K_mCMDN = 2.0; // micromolar
522  const NekDouble var_calcium_dynamics__beta_i =
523  1.0 /
524  (1.0 +
525  ((var_calcium_dynamics__CMDN_tot * var_calcium_dynamics__K_mCMDN) /
526  pow(var_calcium_dynamics__K_mCMDN + var_calcium_dynamics__Ca_i,
527  2.0))); // dimensionless
528  const NekDouble var_calcium_dynamics__V_myo = 2.584e-05; // microlitre
529  const NekDouble var_calcium_dynamics__F =
530  var_membrane__F; // coulomb_per_millimole
531  const NekDouble var_calcium_dynamics__C_sc =
532  var_L_type_Ca_current__C_sc; // microF_per_cm2
533  const NekDouble var_calcium_dynamics__A_Cap = 0.0001534; // cm2
534  const NekDouble var_calcium_dynamics__Ca_SR =
535  var_chaste_interface__calcium_dynamics__Ca_SR; // micromolar
536  const NekDouble var_calcium_dynamics__P_rel = 6.0; // per_millisecond
537  const NekDouble var_calcium_dynamics__V =
538  var_chaste_interface__membrane__V; // millivolt
539  const NekDouble var_calcium_dynamics__f_Ca =
540  var_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca; // dimensionless
541  const NekDouble var_calcium_dynamics__gamma =
542  1.0 / (1.0 + pow(2000.0 / var_calcium_dynamics__Ca_SR,
543  3.0)); // dimensionless
544  const NekDouble var_calcium_dynamics__d =
545  var_chaste_interface__L_type_Ca_current_d_gate__d; // dimensionless
546  const NekDouble var_calcium_dynamics__f =
547  var_chaste_interface__L_type_Ca_current_f_gate__f; // dimensionless
548  const NekDouble var_calcium_dynamics__J_rel =
549  (var_calcium_dynamics__P_rel * var_calcium_dynamics__f *
550  var_calcium_dynamics__d * var_calcium_dynamics__f_Ca *
551  ((var_calcium_dynamics__gamma * var_calcium_dynamics__Ca_SR) -
552  var_calcium_dynamics__Ca_i)) /
553  (1.0 + (1.65 * exp(var_calcium_dynamics__V /
554  20.0))); // micromolar_per_millisecond
555  const NekDouble var_calcium_dynamics__P_leak = 1e-06; // per_millisecond
556  const NekDouble var_calcium_dynamics__J_leak =
557  var_calcium_dynamics__P_leak *
558  (var_calcium_dynamics__Ca_SR -
559  var_calcium_dynamics__Ca_i); // micromolar_per_millisecond
560  const NekDouble var_calcium_dynamics__K_mup = 0.32; // micromolar
561  const NekDouble var_calcium_dynamics__V_up =
562  0.1; // micromolar_per_millisecond
563  const NekDouble var_calcium_dynamics__J_up =
564  var_calcium_dynamics__V_up /
565  (1.0 + pow(var_calcium_dynamics__K_mup / var_calcium_dynamics__Ca_i,
566  2.0)); // micromolar_per_millisecond
567  const NekDouble var_calcium_dynamics__i_Ca =
568  var_L_type_Ca_current__i_Ca; // microA_per_microF
569  const NekDouble var_calcium_dynamics__i_Ca_b =
570  var_calcium_background_current__i_Ca_b; // microA_per_microF
571  const NekDouble var_calcium_dynamics__i_p_Ca =
572  var_sarcolemmal_calcium_pump__i_p_Ca; // microA_per_microF
573  const NekDouble var_calcium_dynamics__i_NaCa =
574  var_Na_Ca_exchanger__i_NaCa; // microA_per_microF
575  const NekDouble var_calcium_dynamics__K_mCSQN = 600.0; // micromolar
576  const NekDouble var_calcium_dynamics__CSQN_tot = 10000.0; // micromolar
577  const NekDouble var_calcium_dynamics__V_SR = 2e-06; // microlitre
578  const NekDouble var_calcium_dynamics__beta_SR =
579  1.0 /
580  (1.0 +
581  ((var_calcium_dynamics__CSQN_tot * var_calcium_dynamics__K_mCSQN) /
582  pow(var_calcium_dynamics__K_mCSQN + var_calcium_dynamics__Ca_SR,
583  2.0))); // dimensionless
584  const NekDouble var_calcium_dynamics__d_Ca_i_d_environment__time =
585  var_calcium_dynamics__beta_i *
586  (((var_calcium_dynamics__J_rel + var_calcium_dynamics__J_leak) -
587  var_calcium_dynamics__J_up) -
588  (((var_calcium_dynamics__A_Cap * var_calcium_dynamics__C_sc) /
589  (2.0 * var_calcium_dynamics__F * var_calcium_dynamics__V_myo)) *
590  ((var_calcium_dynamics__i_Ca + var_calcium_dynamics__i_Ca_b +
591  var_calcium_dynamics__i_p_Ca) -
592  (2.0 * var_calcium_dynamics__i_NaCa)))); // 'micromole per litre
593  // per millisecond'
594  const NekDouble var_calcium_dynamics__d_Ca_SR_d_environment__time =
595  (var_calcium_dynamics__beta_SR *
596  ((var_calcium_dynamics__J_up - var_calcium_dynamics__J_leak) -
597  var_calcium_dynamics__J_rel) *
598  var_calcium_dynamics__V_myo) /
599  var_calcium_dynamics__V_SR; // 'micromole per litre per millisecond'
600  const NekDouble
601  var_chaste_interface__fast_sodium_current_m_gate__d_m_d_environment__time =
602  var_fast_sodium_current__fast_sodium_current_m_gate__d_m_d_environment__time; // per_millisecond
603  const NekDouble
604  var_chaste_interface__fast_sodium_current_h_gate__d_h_d_environment__time =
605  var_fast_sodium_current__fast_sodium_current_h_gate__d_h_d_environment__time; // per_millisecond
606  const NekDouble
607  var_chaste_interface__fast_sodium_current_j_gate__d_j_d_environment__time =
608  var_fast_sodium_current__fast_sodium_current_j_gate__d_j_d_environment__time; // per_millisecond
609  const NekDouble
610  var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__d_X_kr_d_environment__time =
611  var_rapid_activating_delayed_rectifiyer_K_current__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__d_X_kr_d_environment__time; // per_millisecond
612  const NekDouble
613  var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__d_X_ks_d_environment__time =
614  var_slow_activating_delayed_rectifiyer_K_current__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__d_X_ks_d_environment__time; // per_millisecond
615  const NekDouble
616  var_chaste_interface__transient_outward_potassium_current_X_to_gate__d_X_to_d_environment__time =
617  var_transient_outward_potassium_current__transient_outward_potassium_current_X_to_gate__d_X_to_d_environment__time; // per_millisecond
618  const NekDouble
619  var_chaste_interface__transient_outward_potassium_current_Y_to_gate__d_Y_to_d_environment__time =
620  var_transient_outward_potassium_current__transient_outward_potassium_current_Y_to_gate__d_Y_to_d_environment__time; // per_millisecond
621  const NekDouble
622  var_chaste_interface__L_type_Ca_current_f_gate__d_f_d_environment__time =
623  var_L_type_Ca_current__L_type_Ca_current_f_gate__d_f_d_environment__time; // per_millisecond
624  const NekDouble
625  var_chaste_interface__L_type_Ca_current_d_gate__d_d_d_environment__time =
626  var_L_type_Ca_current__L_type_Ca_current_d_gate__d_d_d_environment__time; // per_millisecond
627  const NekDouble
628  var_chaste_interface__L_type_Ca_current_f_Ca_gate__d_f_Ca_d_environment__time =
629  var_L_type_Ca_current__L_type_Ca_current_f_Ca_gate__d_f_Ca_d_environment__time; // per_millisecond
630  const NekDouble
631  var_chaste_interface__calcium_dynamics__d_Ca_i_d_environment__time =
632  var_calcium_dynamics__d_Ca_i_d_environment__time; // micromolar_per_millisecond
633  const NekDouble
634  var_chaste_interface__calcium_dynamics__d_Ca_SR_d_environment__time =
635  var_calcium_dynamics__d_Ca_SR_d_environment__time; // micromolar_per_millisecond
636  const NekDouble d_dt_chaste_interface__fast_sodium_current_m_gate__m =
637  var_chaste_interface__fast_sodium_current_m_gate__d_m_d_environment__time; // per_millisecond
638  const NekDouble d_dt_chaste_interface__fast_sodium_current_h_gate__h =
639  var_chaste_interface__fast_sodium_current_h_gate__d_h_d_environment__time; // per_millisecond
640  const NekDouble d_dt_chaste_interface__fast_sodium_current_j_gate__j =
641  var_chaste_interface__fast_sodium_current_j_gate__d_j_d_environment__time; // per_millisecond
642  const NekDouble
643  d_dt_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr =
644  var_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__d_X_kr_d_environment__time; // per_millisecond
645  const NekDouble
646  d_dt_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks =
647  var_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__d_X_ks_d_environment__time; // per_millisecond
648  const NekDouble
649  d_dt_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to =
650  var_chaste_interface__transient_outward_potassium_current_X_to_gate__d_X_to_d_environment__time; // per_millisecond
651  const NekDouble
652  d_dt_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to =
653  var_chaste_interface__transient_outward_potassium_current_Y_to_gate__d_Y_to_d_environment__time; // per_millisecond
654  const NekDouble d_dt_chaste_interface__L_type_Ca_current_f_gate__f =
655  var_chaste_interface__L_type_Ca_current_f_gate__d_f_d_environment__time; // per_millisecond
656  const NekDouble d_dt_chaste_interface__L_type_Ca_current_d_gate__d =
657  var_chaste_interface__L_type_Ca_current_d_gate__d_d_d_environment__time; // per_millisecond
658  const NekDouble d_dt_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca =
659  var_chaste_interface__L_type_Ca_current_f_Ca_gate__d_f_Ca_d_environment__time; // per_millisecond
660  const NekDouble d_dt_chaste_interface__calcium_dynamics__Ca_i =
661  var_chaste_interface__calcium_dynamics__d_Ca_i_d_environment__time; // 'micromole per litre per millisecond'
662  const NekDouble d_dt_chaste_interface__calcium_dynamics__Ca_SR =
663  var_chaste_interface__calcium_dynamics__d_Ca_SR_d_environment__time; // 'micromole per litre per millisecond'
664 
665  const NekDouble var_fast_sodium_current__g_Na =
666  12.8; // milliS_per_microF
667  const NekDouble var_fast_sodium_current__R =
668  var_membrane__R; // joule_per_mole_kelvin
669  const NekDouble var_fast_sodium_current__Na_o =
670  var_standard_ionic_concentrations__Na_o; // millimolar
671  const NekDouble var_fast_sodium_current__F =
672  var_membrane__F; // coulomb_per_millimole
673  const NekDouble var_fast_sodium_current__T = var_membrane__T; // kelvin
674  const NekDouble var_fast_sodium_current__Na_i =
675  var_standard_ionic_concentrations__Na_i; // millimolar
676  const NekDouble var_fast_sodium_current__E_Na =
677  ((var_fast_sodium_current__R * var_fast_sodium_current__T) /
678  var_fast_sodium_current__F) *
679  log(var_fast_sodium_current__Na_o /
680  var_fast_sodium_current__Na_i); // millivolt
681  const NekDouble var_fast_sodium_current__i_Na =
682  var_fast_sodium_current__g_Na *
683  pow(var_fast_sodium_current__m, 3.0) * var_fast_sodium_current__h *
684  var_fast_sodium_current__j *
685  (var_fast_sodium_current__V -
686  var_fast_sodium_current__E_Na); // microA_per_microF
687  const NekDouble var_membrane__i_Na =
688  var_fast_sodium_current__i_Na; // microA_per_microF
689  const NekDouble var_membrane__i_Ca =
690  var_L_type_Ca_current__i_Ca; // microA_per_microF
691  const NekDouble var_L_type_Ca_current__P_CaK =
692  5.79e-07; // cm_per_millisecond
693  const NekDouble var_standard_ionic_concentrations__K_o =
694  4.0; // millimolar
695  const NekDouble var_L_type_Ca_current__K_o =
696  var_standard_ionic_concentrations__K_o; // millimolar
697  const NekDouble var_L_type_Ca_current__i_Ca_half =
698  -0.265; // microA_per_microF
699  const NekDouble var_standard_ionic_concentrations__K_i =
700  149.4; // millimolar
701  const NekDouble var_L_type_Ca_current__K_i =
702  var_standard_ionic_concentrations__K_i; // millimolar
703  const NekDouble var_L_type_Ca_current__i_CaK =
704  ((((((var_L_type_Ca_current__P_CaK / var_L_type_Ca_current__C_sc) *
705  var_L_type_Ca_current__f * var_L_type_Ca_current__d *
706  var_L_type_Ca_current__f_Ca) /
707  (1.0 + (var_L_type_Ca_current__i_Ca_max /
708  var_L_type_Ca_current__i_Ca_half))) *
709  1000.0 * var_L_type_Ca_current__V *
710  pow(var_L_type_Ca_current__F, 2.0)) /
711  (var_L_type_Ca_current__R * var_L_type_Ca_current__T)) *
712  ((var_L_type_Ca_current__K_i *
713  exp((var_L_type_Ca_current__V * var_L_type_Ca_current__F) /
714  (var_L_type_Ca_current__R * var_L_type_Ca_current__T))) -
715  var_L_type_Ca_current__K_o)) /
716  (exp((var_L_type_Ca_current__V * var_L_type_Ca_current__F) /
717  (var_L_type_Ca_current__R * var_L_type_Ca_current__T)) -
718  1.0); // microA_per_microF
719  const NekDouble var_membrane__i_CaK =
720  var_L_type_Ca_current__i_CaK; // microA_per_microF
721  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__K_o =
722  var_standard_ionic_concentrations__K_o; // millimolar
723  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__R =
724  var_membrane__R; // joule_per_mole_kelvin
725  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__F =
726  var_membrane__F; // coulomb_per_millimole
727  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__K_i =
728  var_standard_ionic_concentrations__K_i; // millimolar
729  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__T =
730  var_membrane__T; // kelvin
731  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__E_K =
732  ((var_rapid_activating_delayed_rectifiyer_K_current__R *
733  var_rapid_activating_delayed_rectifiyer_K_current__T) /
734  var_rapid_activating_delayed_rectifiyer_K_current__F) *
735  log(var_rapid_activating_delayed_rectifiyer_K_current__K_o /
736  var_rapid_activating_delayed_rectifiyer_K_current__K_i); // millivolt
737  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__R_V =
738  1.0 /
739  (1.0 +
740  (2.5 *
741  exp(0.1 * (var_rapid_activating_delayed_rectifiyer_K_current__V +
742  28.0)))); // dimensionless
743  const NekDouble
744  var_rapid_activating_delayed_rectifiyer_K_current__g_Kr =
745  0.0136; // milliS_per_microF
746  const NekDouble var_rapid_activating_delayed_rectifiyer_K_current__i_Kr =
747  var_rapid_activating_delayed_rectifiyer_K_current__g_Kr *
748  var_rapid_activating_delayed_rectifiyer_K_current__R_V *
749  var_rapid_activating_delayed_rectifiyer_K_current__X_kr *
750  sqrt(var_rapid_activating_delayed_rectifiyer_K_current__K_o / 4.0) *
751  (var_rapid_activating_delayed_rectifiyer_K_current__V -
752  var_rapid_activating_delayed_rectifiyer_K_current__E_K); // microA_per_microF
753  const NekDouble var_membrane__i_Kr =
754  var_rapid_activating_delayed_rectifiyer_K_current__i_Kr; // microA_per_microF
755  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__g_Ks =
756  0.0245; // milliS_per_microF
757  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__T =
758  var_membrane__T; // kelvin
759  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__K_o =
760  var_standard_ionic_concentrations__K_o; // millimolar
761  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__R =
762  var_membrane__R; // joule_per_mole_kelvin
763  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__Na_o =
764  var_standard_ionic_concentrations__Na_o; // millimolar
765  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__Na_i =
766  var_standard_ionic_concentrations__Na_i; // millimolar
767  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__K_i =
768  var_standard_ionic_concentrations__K_i; // millimolar
769  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__F =
770  var_membrane__F; // coulomb_per_millimole
771  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__E_Ks =
772  ((var_slow_activating_delayed_rectifiyer_K_current__R *
773  var_slow_activating_delayed_rectifiyer_K_current__T) /
774  var_slow_activating_delayed_rectifiyer_K_current__F) *
775  log((var_slow_activating_delayed_rectifiyer_K_current__K_o +
776  (0.01833 *
777  var_slow_activating_delayed_rectifiyer_K_current__Na_o)) /
778  (var_slow_activating_delayed_rectifiyer_K_current__K_i +
779  (0.01833 *
780  var_slow_activating_delayed_rectifiyer_K_current__Na_i))); // millivolt
781  const NekDouble var_slow_activating_delayed_rectifiyer_K_current__i_Ks =
782  var_slow_activating_delayed_rectifiyer_K_current__g_Ks *
783  pow(var_slow_activating_delayed_rectifiyer_K_current__X_ks, 2.0) *
784  (var_slow_activating_delayed_rectifiyer_K_current__V -
785  var_slow_activating_delayed_rectifiyer_K_current__E_Ks); // microA_per_microF
786  const NekDouble var_membrane__i_Ks =
787  var_slow_activating_delayed_rectifiyer_K_current__i_Ks; // microA_per_microF
788  const NekDouble var_transient_outward_potassium_current__g_to =
789  0.23815; // milliS_per_microF
790  const NekDouble var_transient_outward_potassium_current__E_K =
791  var_rapid_activating_delayed_rectifiyer_K_current__E_K; // millivolt
792  const NekDouble var_transient_outward_potassium_current__i_to =
793  var_transient_outward_potassium_current__g_to *
794  var_transient_outward_potassium_current__X_to *
795  var_transient_outward_potassium_current__Y_to *
796  (var_transient_outward_potassium_current__V -
797  var_transient_outward_potassium_current__E_K); // microA_per_microF
798  const NekDouble var_membrane__i_to =
799  var_transient_outward_potassium_current__i_to; // microA_per_microF
800  const NekDouble var_time_independent_potassium_current__E_K =
801  var_rapid_activating_delayed_rectifiyer_K_current__E_K; // millivolt
802  const NekDouble var_time_independent_potassium_current__K_o =
803  var_standard_ionic_concentrations__K_o; // millimolar
804  const NekDouble var_time_independent_potassium_current__g_K1 =
805  2.8; // milliS_per_microF
806  const NekDouble var_time_independent_potassium_current__F =
807  var_membrane__F; // coulomb_per_millimole
808  const NekDouble var_time_independent_potassium_current_K1_gate__F =
809  var_time_independent_potassium_current__F; // coulomb_per_millimole
810  const NekDouble var_time_independent_potassium_current__V =
811  var_chaste_interface__membrane__V; // millivolt
812  const NekDouble var_time_independent_potassium_current_K1_gate__V =
813  var_time_independent_potassium_current__V; // millivolt
814  const NekDouble var_time_independent_potassium_current__T =
815  var_membrane__T; // kelvin
816  const NekDouble var_time_independent_potassium_current_K1_gate__T =
817  var_time_independent_potassium_current__T; // kelvin
818  const NekDouble var_time_independent_potassium_current_K1_gate__E_K =
819  var_time_independent_potassium_current__E_K; // millivolt
820  const NekDouble var_time_independent_potassium_current__R =
821  var_membrane__R; // joule_per_mole_kelvin
822  const NekDouble var_time_independent_potassium_current_K1_gate__R =
823  var_time_independent_potassium_current__R; // joule_per_mole_kelvin
824  const NekDouble
825  var_time_independent_potassium_current_K1_gate__K1_infinity =
826  1.0 /
827  (2.0 +
828  exp(((1.62 *
829  var_time_independent_potassium_current_K1_gate__F) /
830  (var_time_independent_potassium_current_K1_gate__R *
831  var_time_independent_potassium_current_K1_gate__T)) *
832  (var_time_independent_potassium_current_K1_gate__V -
833  var_time_independent_potassium_current_K1_gate__E_K))); // dimensionless
834  const NekDouble var_time_independent_potassium_current__K1_infinity =
835  var_time_independent_potassium_current_K1_gate__K1_infinity; // dimensionless
836  const NekDouble var_time_independent_potassium_current__K_mK1 =
837  13.0; // millimolar
838  const NekDouble var_time_independent_potassium_current__i_K1 =
839  ((var_time_independent_potassium_current__g_K1 *
840  var_time_independent_potassium_current__K1_infinity *
841  var_time_independent_potassium_current__K_o) /
842  (var_time_independent_potassium_current__K_o +
843  var_time_independent_potassium_current__K_mK1)) *
844  (var_time_independent_potassium_current__V -
845  var_time_independent_potassium_current__E_K); // microA_per_microF
846  const NekDouble var_membrane__i_K1 =
847  var_time_independent_potassium_current__i_K1; // microA_per_microF
848  const NekDouble var_plateau_potassium_current__g_Kp =
849  0.002216; // milliS_per_microF
850  const NekDouble var_plateau_potassium_current__V =
851  var_chaste_interface__membrane__V; // millivolt
852  const NekDouble var_plateau_potassium_current_Kp_gate__V =
853  var_plateau_potassium_current__V; // millivolt
854  const NekDouble var_plateau_potassium_current_Kp_gate__Kp_V =
855  1.0 /
856  (1.0 + exp((7.488 - var_plateau_potassium_current_Kp_gate__V) /
857  5.98)); // dimensionless
858  const NekDouble var_plateau_potassium_current__Kp_V =
859  var_plateau_potassium_current_Kp_gate__Kp_V; // dimensionless
860  const NekDouble var_plateau_potassium_current__E_K =
861  var_rapid_activating_delayed_rectifiyer_K_current__E_K; // millivolt
862  const NekDouble var_plateau_potassium_current__i_Kp =
863  var_plateau_potassium_current__g_Kp *
864  var_plateau_potassium_current__Kp_V *
865  (var_plateau_potassium_current__V -
866  var_plateau_potassium_current__E_K); // microA_per_microF
867  const NekDouble var_membrane__i_Kp =
868  var_plateau_potassium_current__i_Kp; // microA_per_microF
869  const NekDouble var_membrane__i_NaCa =
870  var_Na_Ca_exchanger__i_NaCa; // microA_per_microF
871  const NekDouble var_sodium_potassium_pump__K_mNai = 10.0; // millimolar
872  const NekDouble var_sodium_potassium_pump__V =
873  var_chaste_interface__membrane__V; // millivolt
874  const NekDouble var_sodium_potassium_pump__F =
875  var_membrane__F; // coulomb_per_millimole
876  const NekDouble var_sodium_potassium_pump__T =
877  var_membrane__T; // kelvin
878  const NekDouble var_sodium_potassium_pump__Na_o =
879  var_standard_ionic_concentrations__Na_o; // millimolar
880  const NekDouble var_sodium_potassium_pump__sigma =
881  (1.0 / 7.0) * (exp(var_sodium_potassium_pump__Na_o / 67.3) -
882  1.0); // dimensionless
883  const NekDouble var_sodium_potassium_pump__R =
884  var_membrane__R; // joule_per_mole_kelvin
885  const NekDouble var_sodium_potassium_pump__f_NaK =
886  1.0 / (1.0 +
887  (0.1245 * exp(((-0.1) * var_sodium_potassium_pump__V *
888  var_sodium_potassium_pump__F) /
889  (var_sodium_potassium_pump__R *
890  var_sodium_potassium_pump__T))) +
891  (0.0365 * var_sodium_potassium_pump__sigma *
892  exp(((-var_sodium_potassium_pump__V) *
893  var_sodium_potassium_pump__F) /
894  (var_sodium_potassium_pump__R *
895  var_sodium_potassium_pump__T)))); // dimensionless
896  const NekDouble var_sodium_potassium_pump__i_NaK_max =
897  0.693; // microA_per_microF
898  const NekDouble var_sodium_potassium_pump__K_o =
899  var_standard_ionic_concentrations__K_o; // millimolar
900  const NekDouble var_sodium_potassium_pump__Na_i =
901  var_standard_ionic_concentrations__Na_i; // millimolar
902  const NekDouble var_sodium_potassium_pump__K_mKo = 1.5; // millimolar
903  const NekDouble var_sodium_potassium_pump__i_NaK =
904  (((var_sodium_potassium_pump__i_NaK_max *
905  var_sodium_potassium_pump__f_NaK) /
906  (1.0 + pow(var_sodium_potassium_pump__K_mNai /
907  var_sodium_potassium_pump__Na_i,
908  1.5))) *
909  var_sodium_potassium_pump__K_o) /
910  (var_sodium_potassium_pump__K_o +
911  var_sodium_potassium_pump__K_mKo); // microA_per_microF
912  const NekDouble var_membrane__i_NaK =
913  var_sodium_potassium_pump__i_NaK; // microA_per_microF
914  const NekDouble var_membrane__i_p_Ca =
915  var_sarcolemmal_calcium_pump__i_p_Ca; // microA_per_microF
916  const NekDouble var_membrane__i_Ca_b =
917  var_calcium_background_current__i_Ca_b; // microA_per_microF
918  const NekDouble var_sodium_background_current__g_Nab =
919  0.0031; // milliS_per_microF
920  const NekDouble var_sodium_background_current__V =
921  var_chaste_interface__membrane__V; // millivolt
922  const NekDouble var_sodium_background_current__E_Na =
923  var_fast_sodium_current__E_Na; // millivolt
924  const NekDouble var_sodium_background_current__i_Na_b =
925  var_sodium_background_current__g_Nab *
926  (var_sodium_background_current__V -
927  var_sodium_background_current__E_Na); // microA_per_microF
928  const NekDouble var_membrane__i_Na_b =
929  var_sodium_background_current__i_Na_b; // microA_per_microF
930  const NekDouble var_chaste_interface__membrane__i_Stim = 0.0;
931  const NekDouble var_membrane__i_Stim_converter =
932  var_chaste_interface__membrane__i_Stim; // uA_per_cm2
933  const NekDouble
934  var_membrane__chaste_interface__chaste_membrane_capacitance =
935  1.0; // uF_per_cm2
936  const NekDouble var_membrane__i_Stim =
937  var_membrane__i_Stim_converter /
938  var_membrane__chaste_interface__chaste_membrane_capacitance; // microA_per_microF
939  const NekDouble var_membrane__d_V_d_environment__time =
940  -(var_membrane__i_Na + var_membrane__i_Ca + var_membrane__i_CaK +
941  var_membrane__i_Kr + var_membrane__i_Ks + var_membrane__i_to +
942  var_membrane__i_K1 + var_membrane__i_Kp + var_membrane__i_NaCa +
943  var_membrane__i_NaK + var_membrane__i_p_Ca +
944  var_membrane__i_Na_b + var_membrane__i_Ca_b +
945  var_membrane__i_Stim); // 'millivolt per millisecond'
946  const NekDouble
947  var_chaste_interface__membrane__d_V_d_environment__time =
948  var_membrane__d_V_d_environment__time; // ___units_1
949  d_dt_chaste_interface__membrane__V =
950  var_chaste_interface__membrane__d_V_d_environment__time; // 'millivolt
951  // per
952  // millisecond'
953  outarray[0][i] = d_dt_chaste_interface__membrane__V;
954  outarray[1][i] = d_dt_chaste_interface__fast_sodium_current_m_gate__m;
955  outarray[2][i] = d_dt_chaste_interface__fast_sodium_current_h_gate__h;
956  outarray[3][i] = d_dt_chaste_interface__fast_sodium_current_j_gate__j;
957  outarray[4][i] =
958  d_dt_chaste_interface__rapid_activating_delayed_rectifiyer_K_current_X_kr_gate__X_kr;
959  outarray[5][i] =
960  d_dt_chaste_interface__slow_activating_delayed_rectifiyer_K_current_X_ks_gate__X_ks;
961  outarray[6][i] =
962  d_dt_chaste_interface__transient_outward_potassium_current_X_to_gate__X_to;
963  outarray[7][i] =
964  d_dt_chaste_interface__transient_outward_potassium_current_Y_to_gate__Y_to;
965  outarray[8][i] = d_dt_chaste_interface__L_type_Ca_current_f_gate__f;
966  outarray[9][i] = d_dt_chaste_interface__L_type_Ca_current_d_gate__d;
967  outarray[10][i] =
968  d_dt_chaste_interface__L_type_Ca_current_f_Ca_gate__f_Ca;
969  outarray[11][i] = d_dt_chaste_interface__calcium_dynamics__Ca_i;
970  outarray[12][i] = d_dt_chaste_interface__calcium_dynamics__Ca_SR;
971  }
972 }
973 
974 /**
975  *
976  */
978 {
979  SolverUtils::AddSummaryItem(s, "Cell model", "Fox02");
980 }
981 
982 /**
983  *
984  */
986 {
987  Vmath::Fill(m_nq, -94.7, m_cellSol[0], 1);
988  Vmath::Fill(m_nq, 0.00024676, m_cellSol[1], 1);
989  Vmath::Fill(m_nq, 0.99869, m_cellSol[2], 1);
990  Vmath::Fill(m_nq, 0.99887, m_cellSol[3], 1);
991  Vmath::Fill(m_nq, 0.229, m_cellSol[4], 1);
992  Vmath::Fill(m_nq, 0.0001, m_cellSol[5], 1);
993  Vmath::Fill(m_nq, 0.00003742, m_cellSol[6], 1);
994  Vmath::Fill(m_nq, 1.0, m_cellSol[7], 1);
995  Vmath::Fill(m_nq, 0.0472, m_cellSol[8], 1);
996  Vmath::Fill(m_nq, 0.983, m_cellSol[9], 1);
997  Vmath::Fill(m_nq, 0.0001, m_cellSol[10], 1);
998  Vmath::Fill(m_nq, 0.942, m_cellSol[11], 1);
999  Vmath::Fill(m_nq, 320.0, m_cellSol[12], 1);
1000 }
1001 } // namespace Nektar
Cell model base class.
Definition: CellModel.h:66
Array< OneD, Array< OneD, NekDouble > > m_cellSol
Cell model solution variables.
Definition: CellModel.h:126
std::vector< int > m_concentrations
Indices of cell model variables which are concentrations.
Definition: CellModel.h:139
std::vector< int > m_gates
Indices of cell model variables which are gates.
Definition: CellModel.h:141
size_t m_nq
Number of physical points.
Definition: CellModel.h:117
size_t m_nvar
Number of variables in cell model (inc. transmembrane voltage)
Definition: CellModel.h:119
virtual void v_GenerateSummary(SummaryList &s) override
Prints a summary of the model parameters.
Definition: Fox02.cpp:977
static CellModelSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const MultiRegions::ExpListSharedPtr &pField)
Creates an instance of this class.
Definition: Fox02.h:46
NekDouble m_chi
Definition: Fox02.h:80
virtual void v_SetInitialConditions() override
Definition: Fox02.cpp:985
static std::string className
Name of class.
Definition: Fox02.h:54
virtual void v_Update(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time) override
Computes the reaction terms $f(u,v)$ and $g(u,v)$.
Definition: Fox02.cpp:71
NekDouble m_sigmai
Definition: Fox02.h:81
Fox02(const LibUtilities::SessionReaderSharedPtr &pSession, const MultiRegions::ExpListSharedPtr &pField)
Constructor.
Definition: Fox02.cpp:48
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Definition: NekFactory.hpp:198
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
std::vector< std::pair< std::string, std::string > > SummaryList
Definition: Misc.h:48
void AddSummaryItem(SummaryList &l, const std::string &name, const std::string &value)
Adds a summary item to the summary info list.
Definition: Misc.cpp:49
The above copyright notice and this permission notice shall be included.
Definition: CoupledSolver.h:2
CellModelFactory & GetCellModelFactory()
Definition: CellModel.cpp:46
double NekDouble
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
Definition: Vmath.cpp:45
scalarT< T > log(scalarT< T > in)
Definition: scalar.hpp:303
scalarT< T > sqrt(scalarT< T > in)
Definition: scalar.hpp:294