Nektar++
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | List of all members
Nektar::LuoRudy91 Class Reference

#include <LuoRudy91.h>

Inheritance diagram for Nektar::LuoRudy91:
[legend]

Public Member Functions

 LuoRudy91 (const LibUtilities::SessionReaderSharedPtr &pSession, const MultiRegions::ExpListSharedPtr &pField)
 Constructor. More...
 
virtual ~LuoRudy91 ()
 Destructor. More...
 
- Public Member Functions inherited from Nektar::CellModel
 CellModel (const LibUtilities::SessionReaderSharedPtr &pSession, const MultiRegions::ExpListSharedPtr &pField)
 
virtual ~CellModel ()
 
void Initialise ()
 Initialise the cell model storage and set initial conditions. More...
 
void TimeIntegrate (const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
 Time integrate the cell model by one PDE timestep. More...
 
void Update (const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
 Compute the derivatives of cell model variables. More...
 
void GenerateSummary (SummaryList &s)
 Print a summary of the cell model. More...
 
size_t GetNumCellVariables ()
 
std::string GetCellVarName (size_t idx)
 
Array< OneD, NekDoubleGetCellSolutionCoeffs (size_t idx)
 
Array< OneD, NekDoubleGetCellSolution (size_t idx)
 

Static Public Member Functions

static CellModelSharedPtr create (const LibUtilities::SessionReaderSharedPtr &pSession, const MultiRegions::ExpListSharedPtr &pField)
 Creates an instance of this class. More...
 

Static Public Attributes

static std::string className
 Name of class. More...
 

Protected Member Functions

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)$. More...
 
virtual void v_GenerateSummary (SummaryList &s) override
 Prints a summary of the model parameters. More...
 
virtual void v_SetInitialConditions () override
 Set initial conditions for the cell model. More...
 
- Protected Member Functions inherited from Nektar::CellModel
virtual std::string v_GetCellVarName (size_t idx)
 
void LoadCellModel ()
 

Additional Inherited Members

- Protected Attributes inherited from Nektar::CellModel
LibUtilities::SessionReaderSharedPtr m_session
 Session. More...
 
MultiRegions::ExpListSharedPtr m_field
 Transmembrane potential field from PDE system. More...
 
size_t m_nq
 Number of physical points. More...
 
size_t m_nvar
 Number of variables in cell model (inc. transmembrane voltage) More...
 
NekDouble m_lastTime
 Timestep for pde model. More...
 
size_t m_substeps
 Number of substeps to take. More...
 
Array< OneD, Array< OneD, NekDouble > > m_cellSol
 Cell model solution variables. More...
 
Array< OneD, Array< OneD, NekDouble > > m_wsp
 Cell model integration workspace. More...
 
bool m_useNodal
 Flag indicating whether nodal projection in use. More...
 
StdRegions::StdNodalTriExpSharedPtr m_nodalTri
 StdNodalTri for cell model calculations. More...
 
StdRegions::StdNodalTetExpSharedPtr m_nodalTet
 
Array< OneD, Array< OneD, NekDouble > > m_nodalTmp
 Temporary array for nodal projection. More...
 
std::vector< int > m_concentrations
 Indices of cell model variables which are concentrations. More...
 
std::vector< int > m_gates
 Indices of cell model variables which are gates. More...
 
Array< OneD, Array< OneD, NekDouble > > m_gates_tau
 Storage for gate tau values. More...
 

Detailed Description

Definition at line 41 of file LuoRudy91.h.

Constructor & Destructor Documentation

◆ LuoRudy91()

Nektar::LuoRudy91::LuoRudy91 ( const LibUtilities::SessionReaderSharedPtr pSession,
const MultiRegions::ExpListSharedPtr pField 
)

Constructor.

Definition at line 61 of file LuoRudy91.cpp.

63  : CellModel(pSession, pField)
64 {
65  m_nq = pField->GetNpoints();
66 
67  m_nvar = 8;
68  m_gates.push_back(1);
69  m_gates.push_back(2);
70  m_gates.push_back(3);
71  m_gates.push_back(4);
72  m_gates.push_back(5);
73  m_gates.push_back(6);
74  m_concentrations.push_back(7);
75 }
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
CellModel(const LibUtilities::SessionReaderSharedPtr &pSession, const MultiRegions::ExpListSharedPtr &pField)
Definition: CellModel.cpp:66

References Nektar::CellModel::m_concentrations, Nektar::CellModel::m_gates, Nektar::CellModel::m_nq, and Nektar::CellModel::m_nvar.

◆ ~LuoRudy91()

virtual Nektar::LuoRudy91::~LuoRudy91 ( )
inlinevirtual

Destructor.

Definition at line 61 of file LuoRudy91.h.

62  {
63  }

Member Function Documentation

◆ create()

static CellModelSharedPtr Nektar::LuoRudy91::create ( const LibUtilities::SessionReaderSharedPtr pSession,
const MultiRegions::ExpListSharedPtr pField 
)
inlinestatic

Creates an instance of this class.

Definition at line 46 of file LuoRudy91.h.

49  {
50  return MemoryManager<LuoRudy91>::AllocateSharedPtr(pSession, pField);
51  }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr().

◆ v_GenerateSummary()

void Nektar::LuoRudy91::v_GenerateSummary ( SummaryList s)
overrideprotectedvirtual

Prints a summary of the model parameters.

Implements Nektar::CellModel.

Definition at line 543 of file LuoRudy91.cpp.

544 {
545  SolverUtils::AddSummaryItem(s, "Cell model", "Luo-Rudy 1991");
546 }
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

References Nektar::SolverUtils::AddSummaryItem().

◆ v_SetInitialConditions()

void Nektar::LuoRudy91::v_SetInitialConditions ( )
overrideprotectedvirtual

Set initial conditions for the cell model.

Implements Nektar::CellModel.

Definition at line 551 of file LuoRudy91.cpp.

552 {
553  Vmath::Fill(m_nq, -84.3801107371, m_cellSol[0], 1);
554  Vmath::Fill(m_nq, 0.00171338077730188, m_cellSol[1], 1);
555  Vmath::Fill(m_nq, 0.982660523699656, m_cellSol[2], 1);
556  Vmath::Fill(m_nq, 0.989108212766685, m_cellSol[3], 1);
557  Vmath::Fill(m_nq, 0.00017948816388306, m_cellSol[4], 1);
558  Vmath::Fill(m_nq, 0.00302126301779861, m_cellSol[5], 1);
559  Vmath::Fill(m_nq, 0.999967936476325, m_cellSol[6], 1);
560  Vmath::Fill(m_nq, 0.0417603108167287, m_cellSol[7], 1);
561 }
Array< OneD, Array< OneD, NekDouble > > m_cellSol
Cell model solution variables.
Definition: CellModel.h:126
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
Definition: Vmath.cpp:45

References Vmath::Fill(), Nektar::CellModel::m_cellSol, and Nektar::CellModel::m_nq.

◆ v_Update()

void Nektar::LuoRudy91::v_Update ( const Array< OneD, const Array< OneD, NekDouble >> &  inarray,
Array< OneD, Array< OneD, NekDouble >> &  outarray,
const NekDouble  time 
)
overrideprotectedvirtual

Computes the reaction terms $f(u,v)$ and $g(u,v)$.

Implements Nektar::CellModel.

Definition at line 77 of file LuoRudy91.cpp.

80 {
81  boost::ignore_unused(time);
82 
83  for (size_t i = 0; i < m_nq; ++i)
84  {
85  // Inputs:
86  // Time units: millisecond
87  NekDouble var_chaste_interface__membrane__V = inarray[0][i];
88  // Units: millivolt; Initial value: -84.3801107371
89  NekDouble var_chaste_interface__fast_sodium_current_m_gate__m =
90  inarray[1][i];
91  // Units: dimensionless; Initial value: 0.00171338077730188
92  NekDouble var_chaste_interface__fast_sodium_current_h_gate__h =
93  inarray[2][i];
94  // Units: dimensionless; Initial value: 0.982660523699656
95  NekDouble var_chaste_interface__fast_sodium_current_j_gate__j =
96  inarray[3][i];
97  // Units: dimensionless; Initial value: 0.989108212766685
98  NekDouble var_chaste_interface__slow_inward_current_d_gate__d =
99  inarray[4][i];
100  // Units: dimensionless; Initial value: 0.00302126301779861
101  NekDouble var_chaste_interface__slow_inward_current_f_gate__f =
102  inarray[5][i];
103  // Units: dimensionless; Initial value: 0.999967936476325
104  NekDouble
105  var_chaste_interface__time_dependent_potassium_current_X_gate__X =
106  inarray[6][i];
107  // Units: dimensionless; Initial value: 0.0417603108167287
108  NekDouble
109  var_chaste_interface__intracellular_calcium_concentration__Cai =
110  inarray[7][i];
111  // Units: millimolar; Initial value: 0.00017948816388306
112 
113  // Mathematics
114  NekDouble d_dt_chaste_interface__membrane__V;
115  const NekDouble var_fast_sodium_current__j =
116  var_chaste_interface__fast_sodium_current_j_gate__j; // dimensionless
117  const NekDouble var_fast_sodium_current__h =
118  var_chaste_interface__fast_sodium_current_h_gate__h; // dimensionless
119  const NekDouble var_fast_sodium_current__m =
120  var_chaste_interface__fast_sodium_current_m_gate__m; // dimensionless
121  const NekDouble var_fast_sodium_current__V =
122  var_chaste_interface__membrane__V; // millivolt
123  const NekDouble var_slow_inward_current__d =
124  var_chaste_interface__slow_inward_current_d_gate__d; // dimensionless
125  const NekDouble var_slow_inward_current__f =
126  var_chaste_interface__slow_inward_current_f_gate__f; // dimensionless
127  const NekDouble var_slow_inward_current__V =
128  var_chaste_interface__membrane__V; // millivolt
129  const NekDouble var_slow_inward_current__Cai =
130  var_chaste_interface__intracellular_calcium_concentration__Cai; // millimolar
131  const NekDouble var_slow_inward_current__E_si =
132  7.7 -
133  (13.0287 * log(var_slow_inward_current__Cai / 1.0)); // millivolt
134  const NekDouble var_slow_inward_current__i_si =
135  0.09 * var_slow_inward_current__d * var_slow_inward_current__f *
136  (var_slow_inward_current__V -
137  var_slow_inward_current__E_si); // microA_per_cm2
138  const NekDouble var_time_dependent_potassium_current__V =
139  var_chaste_interface__membrane__V; // millivolt
140  const NekDouble var_time_dependent_potassium_current__X =
141  var_chaste_interface__time_dependent_potassium_current_X_gate__X; // dimensionless
142 #if 0
143  const NekDouble var_fast_sodium_current_m_gate__m = var_fast_sodium_current__m; // dimensionless
144 #endif
145  const NekDouble var_fast_sodium_current_m_gate__V =
146  var_fast_sodium_current__V; // millivolt
147  const NekDouble var_fast_sodium_current_m_gate__alpha_m =
148  (0.32 * (var_fast_sodium_current_m_gate__V + 47.13)) /
149  (1.0 - exp((-0.1) * (var_fast_sodium_current_m_gate__V +
150  47.13))); // per_millisecond
151  const NekDouble var_fast_sodium_current_m_gate__beta_m =
152  0.08 *
153  exp((-var_fast_sodium_current_m_gate__V) / 11.0); // per_millisecond
154 #if 0
155  const NekDouble var_fast_sodium_current_m_gate__d_m_d_environment__time = (var_fast_sodium_current_m_gate__alpha_m * (1.0 - var_fast_sodium_current_m_gate__m)) - (var_fast_sodium_current_m_gate__beta_m * var_fast_sodium_current_m_gate__m); // per_millisecond
156  const NekDouble var_fast_sodium_current__fast_sodium_current_m_gate__d_m_d_environment__time = var_fast_sodium_current_m_gate__d_m_d_environment__time; // per_millisecond
157 #endif
158  const NekDouble var_fast_sodium_current_h_gate__V =
159  var_fast_sodium_current__V; // millivolt
160  const NekDouble var_fast_sodium_current_h_gate__beta_h =
161  (var_fast_sodium_current_h_gate__V < (-40.0))
162  ? ((3.56 * exp(0.079 * var_fast_sodium_current_h_gate__V)) +
163  (310000.0 * exp(0.35 * var_fast_sodium_current_h_gate__V)))
164  : (1.0 / (0.13 * (1.0 + exp((var_fast_sodium_current_h_gate__V +
165  10.66) /
166  (-11.1))))); // per_millisecond
167  const NekDouble var_fast_sodium_current_h_gate__alpha_h =
168  (var_fast_sodium_current_h_gate__V < (-40.0))
169  ? (0.135 *
170  exp((80.0 + var_fast_sodium_current_h_gate__V) / (-6.8)))
171  : 0.0; // per_millisecond
172 #if 0
173  const NekDouble var_fast_sodium_current_h_gate__h = var_fast_sodium_current__h; // dimensionless
174  const NekDouble var_fast_sodium_current_h_gate__d_h_d_environment__time = (var_fast_sodium_current_h_gate__alpha_h * (1.0 - var_fast_sodium_current_h_gate__h)) - (var_fast_sodium_current_h_gate__beta_h * var_fast_sodium_current_h_gate__h); // per_millisecond
175  const NekDouble var_fast_sodium_current__fast_sodium_current_h_gate__d_h_d_environment__time = var_fast_sodium_current_h_gate__d_h_d_environment__time; // per_millisecond
176 #endif
177  const NekDouble var_fast_sodium_current_j_gate__V =
178  var_fast_sodium_current__V; // millivolt
179  const NekDouble var_fast_sodium_current_j_gate__alpha_j =
180  (var_fast_sodium_current_j_gate__V < (-40.0))
181  ? (((((-127140.0) *
182  exp(0.2444 * var_fast_sodium_current_j_gate__V)) -
183  (3.474e-05 *
184  exp((-0.04391) * var_fast_sodium_current_j_gate__V))) *
185  (var_fast_sodium_current_j_gate__V + 37.78)) /
186  (1.0 +
187  exp(0.311 * (var_fast_sodium_current_j_gate__V + 79.23))))
188  : 0.0; // per_millisecond
189  const NekDouble var_fast_sodium_current_j_gate__beta_j =
190  (var_fast_sodium_current_j_gate__V < (-40.0))
191  ? ((0.1212 *
192  exp((-0.01052) * var_fast_sodium_current_j_gate__V)) /
193  (1.0 + exp((-0.1378) *
194  (var_fast_sodium_current_j_gate__V + 40.14))))
195  : ((0.3 *
196  exp((-2.535e-07) * var_fast_sodium_current_j_gate__V)) /
197  (1.0 + exp((-0.1) * (var_fast_sodium_current_j_gate__V +
198  32.0)))); // per_millisecond
199 #if 0
200  const NekDouble var_fast_sodium_current_j_gate__j = var_fast_sodium_current__j; // dimensionless
201  const NekDouble var_fast_sodium_current_j_gate__d_j_d_environment__time = (var_fast_sodium_current_j_gate__alpha_j * (1.0 - var_fast_sodium_current_j_gate__j)) - (var_fast_sodium_current_j_gate__beta_j * var_fast_sodium_current_j_gate__j); // per_millisecond
202  const NekDouble var_fast_sodium_current__fast_sodium_current_j_gate__d_j_d_environment__time = var_fast_sodium_current_j_gate__d_j_d_environment__time; // per_millisecond
203 #endif
204  const NekDouble var_slow_inward_current_d_gate__V =
205  var_slow_inward_current__V; // millivolt
206  const NekDouble var_slow_inward_current_d_gate__alpha_d =
207  (0.095 * exp((-0.01) * (var_slow_inward_current_d_gate__V - 5.0))) /
208  (1.0 + exp((-0.072) * (var_slow_inward_current_d_gate__V -
209  5.0))); // per_millisecond
210 #if 0
211  const NekDouble var_slow_inward_current_d_gate__d = var_slow_inward_current__d; // dimensionless
212 #endif
213  const NekDouble var_slow_inward_current_d_gate__beta_d =
214  (0.07 *
215  exp((-0.017) * (var_slow_inward_current_d_gate__V + 44.0))) /
216  (1.0 + exp(0.05 * (var_slow_inward_current_d_gate__V +
217  44.0))); // per_millisecond
218 #if 0
219  const NekDouble var_slow_inward_current_d_gate__d_d_d_environment__time = (var_slow_inward_current_d_gate__alpha_d * (1.0 - var_slow_inward_current_d_gate__d)) - (var_slow_inward_current_d_gate__beta_d * var_slow_inward_current_d_gate__d); // per_millisecond
220  const NekDouble var_slow_inward_current__slow_inward_current_d_gate__d_d_d_environment__time = var_slow_inward_current_d_gate__d_d_d_environment__time; // per_millisecond
221  const NekDouble var_slow_inward_current_f_gate__f = var_slow_inward_current__f; // dimensionless
222 #endif
223  const NekDouble var_slow_inward_current_f_gate__V =
224  var_slow_inward_current__V; // millivolt
225  const NekDouble var_slow_inward_current_f_gate__alpha_f =
226  (0.012 *
227  exp((-0.008) * (var_slow_inward_current_f_gate__V + 28.0))) /
228  (1.0 + exp(0.15 * (var_slow_inward_current_f_gate__V +
229  28.0))); // per_millisecond
230  const NekDouble var_slow_inward_current_f_gate__beta_f =
231  (0.0065 *
232  exp((-0.02) * (var_slow_inward_current_f_gate__V + 30.0))) /
233  (1.0 + exp((-0.2) * (var_slow_inward_current_f_gate__V +
234  30.0))); // per_millisecond
235 #if 0
236  const NekDouble var_slow_inward_current_f_gate__d_f_d_environment__time = (var_slow_inward_current_f_gate__alpha_f * (1.0 - var_slow_inward_current_f_gate__f)) - (var_slow_inward_current_f_gate__beta_f * var_slow_inward_current_f_gate__f); // per_millisecond
237  const NekDouble var_slow_inward_current__slow_inward_current_f_gate__d_f_d_environment__time = var_slow_inward_current_f_gate__d_f_d_environment__time; // per_millisecond
238  const NekDouble var_time_dependent_potassium_current_X_gate__X = var_time_dependent_potassium_current__X; // dimensionless
239 #endif
240  const NekDouble var_time_dependent_potassium_current_X_gate__V =
241  var_time_dependent_potassium_current__V; // millivolt
242  const NekDouble var_time_dependent_potassium_current_X_gate__beta_X =
243  (0.0013 *
244  exp((-0.06) *
245  (var_time_dependent_potassium_current_X_gate__V + 20.0))) /
246  (1.0 +
247  exp((-0.04) * (var_time_dependent_potassium_current_X_gate__V +
248  20.0))); // per_millisecond
249  const NekDouble var_time_dependent_potassium_current_X_gate__alpha_X =
250  (0.0005 *
251  exp(0.083 *
252  (var_time_dependent_potassium_current_X_gate__V + 50.0))) /
253  (1.0 + exp(0.057 * (var_time_dependent_potassium_current_X_gate__V +
254  50.0))); // per_millisecond
255 #if 0
256  const NekDouble var_time_dependent_potassium_current_X_gate__d_X_d_environment__time = (var_time_dependent_potassium_current_X_gate__alpha_X * (1.0 - var_time_dependent_potassium_current_X_gate__X)) - (var_time_dependent_potassium_current_X_gate__beta_X * var_time_dependent_potassium_current_X_gate__X); // per_millisecond
257  const NekDouble var_time_dependent_potassium_current__time_dependent_potassium_current_X_gate__d_X_d_environment__time = var_time_dependent_potassium_current_X_gate__d_X_d_environment__time; // per_millisecond
258 #endif
259  const NekDouble var_intracellular_calcium_concentration__Cai =
260  var_chaste_interface__intracellular_calcium_concentration__Cai; // millimolar
261  const NekDouble var_intracellular_calcium_concentration__i_si =
262  var_slow_inward_current__i_si; // microA_per_cm2
263  const NekDouble
264  var_intracellular_calcium_concentration__d_Cai_d_environment__time =
265  (((-0.0001) / 1.0) *
266  var_intracellular_calcium_concentration__i_si) +
267  (0.07 *
268  (0.0001 -
269  var_intracellular_calcium_concentration__Cai)); // 'millimole
270  // per litre
271  // per
272  // millisecond'
273 #if 0
274  const NekDouble var_chaste_interface__fast_sodium_current_m_gate__d_m_d_environment__time = var_fast_sodium_current__fast_sodium_current_m_gate__d_m_d_environment__time; // per_millisecond
275  const NekDouble var_chaste_interface__fast_sodium_current_h_gate__d_h_d_environment__time = var_fast_sodium_current__fast_sodium_current_h_gate__d_h_d_environment__time; // per_millisecond
276  const NekDouble var_chaste_interface__fast_sodium_current_j_gate__d_j_d_environment__time = var_fast_sodium_current__fast_sodium_current_j_gate__d_j_d_environment__time; // per_millisecond
277  const NekDouble var_chaste_interface__slow_inward_current_d_gate__d_d_d_environment__time = var_slow_inward_current__slow_inward_current_d_gate__d_d_d_environment__time; // per_millisecond
278  const NekDouble var_chaste_interface__slow_inward_current_f_gate__d_f_d_environment__time = var_slow_inward_current__slow_inward_current_f_gate__d_f_d_environment__time; // per_millisecond
279  const NekDouble var_chaste_interface__time_dependent_potassium_current_X_gate__d_X_d_environment__time = var_time_dependent_potassium_current__time_dependent_potassium_current_X_gate__d_X_d_environment__time; // per_millisecond
280 #endif
281  const NekDouble
282  var_chaste_interface__intracellular_calcium_concentration__d_Cai_d_environment__time =
283  var_intracellular_calcium_concentration__d_Cai_d_environment__time; // ___units_16
284 #if 0
285  const NekDouble d_dt_chaste_interface__fast_sodium_current_m_gate__m = var_chaste_interface__fast_sodium_current_m_gate__d_m_d_environment__time; // per_millisecond
286  const NekDouble d_dt_chaste_interface__fast_sodium_current_h_gate__h = var_chaste_interface__fast_sodium_current_h_gate__d_h_d_environment__time; // per_millisecond
287  const NekDouble d_dt_chaste_interface__fast_sodium_current_j_gate__j = var_chaste_interface__fast_sodium_current_j_gate__d_j_d_environment__time; // per_millisecond
288  const NekDouble d_dt_chaste_interface__slow_inward_current_d_gate__d = var_chaste_interface__slow_inward_current_d_gate__d_d_d_environment__time; // per_millisecond
289  const NekDouble d_dt_chaste_interface__slow_inward_current_f_gate__f = var_chaste_interface__slow_inward_current_f_gate__d_f_d_environment__time; // per_millisecond
290  const NekDouble d_dt_chaste_interface__time_dependent_potassium_current_X_gate__X = var_chaste_interface__time_dependent_potassium_current_X_gate__d_X_d_environment__time; // per_millisecond
291 #endif
292  const NekDouble
293  d_dt_chaste_interface__intracellular_calcium_concentration__Cai =
294  var_chaste_interface__intracellular_calcium_concentration__d_Cai_d_environment__time; // 'millimole per litre per millisecond'
295 
296  const NekDouble var_membrane__R = 8314.0; // joule_per_kilomole_kelvin
297  const NekDouble var_membrane__T = 310.0; // kelvin
298  const NekDouble var_membrane__F = 96484.6; // coulomb_per_mole
299  const NekDouble var_membrane__C = 1.0; // microF_per_cm2
300  const NekDouble var_chaste_interface__membrane__I_stim = 0.0;
301  const NekDouble var_membrane__I_stim =
302  var_chaste_interface__membrane__I_stim; // microA_per_cm2
303  const NekDouble var_fast_sodium_current__g_Na = 23.0; // milliS_per_cm2
304  const NekDouble var_fast_sodium_current__R =
305  var_membrane__R; // joule_per_kilomole_kelvin
306  const NekDouble var_fast_sodium_current__F =
307  var_membrane__F; // coulomb_per_mole
308  const NekDouble var_ionic_concentrations__Nao = 140.0; // millimolar
309  const NekDouble var_fast_sodium_current__Nao =
310  var_ionic_concentrations__Nao; // millimolar
311  const NekDouble var_ionic_concentrations__Nai = 18.0; // millimolar
312  const NekDouble var_fast_sodium_current__Nai =
313  var_ionic_concentrations__Nai; // millimolar
314  const NekDouble var_fast_sodium_current__T = var_membrane__T; // kelvin
315  const NekDouble var_fast_sodium_current__E_Na =
316  ((var_fast_sodium_current__R * var_fast_sodium_current__T) /
317  var_fast_sodium_current__F) *
318  log(var_fast_sodium_current__Nao /
319  var_fast_sodium_current__Nai); // millivolt
320  const NekDouble var_fast_sodium_current__i_Na =
321  var_fast_sodium_current__g_Na *
322  pow(var_fast_sodium_current__m, 3.0) * var_fast_sodium_current__h *
323  var_fast_sodium_current__j *
324  (var_fast_sodium_current__V -
325  var_fast_sodium_current__E_Na); // microA_per_cm2
326  const NekDouble var_membrane__i_Na =
327  var_fast_sodium_current__i_Na; // microA_per_cm2
328  const NekDouble var_membrane__i_si =
329  var_slow_inward_current__i_si; // microA_per_cm2
330  const NekDouble var_time_dependent_potassium_current_Xi_gate__V =
331  var_time_dependent_potassium_current__V; // millivolt
332  const NekDouble var_time_dependent_potassium_current_Xi_gate__Xi =
333  (var_time_dependent_potassium_current_Xi_gate__V > (-100.0))
334  ? ((2.837 *
335  (exp(0.04 *
336  (var_time_dependent_potassium_current_Xi_gate__V +
337  77.0)) -
338  1.0)) /
339  ((var_time_dependent_potassium_current_Xi_gate__V + 77.0) *
340  exp(0.04 *
341  (var_time_dependent_potassium_current_Xi_gate__V +
342  35.0))))
343  : 1.0; // dimensionless
344  const NekDouble var_time_dependent_potassium_current__Xi =
345  var_time_dependent_potassium_current_Xi_gate__Xi; // dimensionless
346  const NekDouble var_ionic_concentrations__Ko = 5.4; // millimolar
347  const NekDouble var_time_dependent_potassium_current__Ko =
348  var_ionic_concentrations__Ko; // millimolar
349  const NekDouble var_time_dependent_potassium_current__g_K =
350  0.282 * sqrt(var_time_dependent_potassium_current__Ko /
351  5.4); // milliS_per_cm2
352  const NekDouble var_time_dependent_potassium_current__PR_NaK =
353  0.01833; // dimensionless
354  const NekDouble var_time_dependent_potassium_current__F =
355  var_membrane__F; // coulomb_per_mole
356  const NekDouble var_time_dependent_potassium_current__Nao =
357  var_ionic_concentrations__Nao; // millimolar
358  const NekDouble var_ionic_concentrations__Ki = 145.0; // millimolar
359  const NekDouble var_time_dependent_potassium_current__Ki =
360  var_ionic_concentrations__Ki; // millimolar
361  const NekDouble var_time_dependent_potassium_current__Nai =
362  var_ionic_concentrations__Nai; // millimolar
363  const NekDouble var_time_dependent_potassium_current__T =
364  var_membrane__T; // kelvin
365  const NekDouble var_time_dependent_potassium_current__R =
366  var_membrane__R; // joule_per_kilomole_kelvin
367  const NekDouble var_time_dependent_potassium_current__E_K =
368  ((var_time_dependent_potassium_current__R *
369  var_time_dependent_potassium_current__T) /
370  var_time_dependent_potassium_current__F) *
371  log((var_time_dependent_potassium_current__Ko +
372  (var_time_dependent_potassium_current__PR_NaK *
373  var_time_dependent_potassium_current__Nao)) /
374  (var_time_dependent_potassium_current__Ki +
375  (var_time_dependent_potassium_current__PR_NaK *
376  var_time_dependent_potassium_current__Nai))); // millivolt
377  const NekDouble var_time_dependent_potassium_current__i_K =
378  var_time_dependent_potassium_current__g_K *
379  var_time_dependent_potassium_current__X *
380  var_time_dependent_potassium_current__Xi *
381  (var_time_dependent_potassium_current__V -
382  var_time_dependent_potassium_current__E_K); // microA_per_cm2
383  const NekDouble var_membrane__i_K =
384  var_time_dependent_potassium_current__i_K; // microA_per_cm2
385  const NekDouble var_time_independent_potassium_current__V =
386  var_chaste_interface__membrane__V; // millivolt
387  const NekDouble var_time_independent_potassium_current_K1_gate__V =
388  var_time_independent_potassium_current__V; // millivolt
389  const NekDouble var_time_independent_potassium_current__Ki =
390  var_ionic_concentrations__Ki; // millimolar
391  const NekDouble var_time_independent_potassium_current__R =
392  var_membrane__R; // joule_per_kilomole_kelvin
393  const NekDouble var_time_independent_potassium_current__F =
394  var_membrane__F; // coulomb_per_mole
395  const NekDouble var_time_independent_potassium_current__Ko =
396  var_ionic_concentrations__Ko; // millimolar
397  const NekDouble var_time_independent_potassium_current__T =
398  var_membrane__T; // kelvin
399  const NekDouble var_time_independent_potassium_current__E_K1 =
400  ((var_time_independent_potassium_current__R *
401  var_time_independent_potassium_current__T) /
402  var_time_independent_potassium_current__F) *
403  log(var_time_independent_potassium_current__Ko /
404  var_time_independent_potassium_current__Ki); // millivolt
405  const NekDouble var_time_independent_potassium_current_K1_gate__E_K1 =
406  var_time_independent_potassium_current__E_K1; // millivolt
407  const NekDouble
408  var_time_independent_potassium_current_K1_gate__beta_K1 =
409  ((0.49124 *
410  exp(0.08032 *
411  ((var_time_independent_potassium_current_K1_gate__V +
412  5.476) -
413  var_time_independent_potassium_current_K1_gate__E_K1))) +
414  (1.0 *
415  exp(0.06175 *
416  (var_time_independent_potassium_current_K1_gate__V -
417  (var_time_independent_potassium_current_K1_gate__E_K1 +
418  594.31))))) /
419  (1.0 +
420  exp((-0.5143) *
421  ((var_time_independent_potassium_current_K1_gate__V -
422  var_time_independent_potassium_current_K1_gate__E_K1) +
423  4.753))); // per_millisecond
424  const NekDouble
425  var_time_independent_potassium_current_K1_gate__alpha_K1 =
426  1.02 /
427  (1.0 +
428  exp(0.2385 *
429  ((var_time_independent_potassium_current_K1_gate__V -
430  var_time_independent_potassium_current_K1_gate__E_K1) -
431  59.215))); // per_millisecond
432  const NekDouble
433  var_time_independent_potassium_current_K1_gate__K1_infinity =
434  var_time_independent_potassium_current_K1_gate__alpha_K1 /
435  (var_time_independent_potassium_current_K1_gate__alpha_K1 +
436  var_time_independent_potassium_current_K1_gate__beta_K1); // dimensionless
437  const NekDouble var_time_independent_potassium_current__K1_infinity =
438  var_time_independent_potassium_current_K1_gate__K1_infinity; // dimensionless
439  const NekDouble var_time_independent_potassium_current__g_K1 =
440  0.6047 * sqrt(var_time_independent_potassium_current__Ko /
441  5.4); // milliS_per_cm2
442  const NekDouble var_time_independent_potassium_current__i_K1 =
443  var_time_independent_potassium_current__g_K1 *
444  var_time_independent_potassium_current__K1_infinity *
445  (var_time_independent_potassium_current__V -
446  var_time_independent_potassium_current__E_K1); // microA_per_cm2
447  const NekDouble var_membrane__i_K1 =
448  var_time_independent_potassium_current__i_K1; // microA_per_cm2
449  const NekDouble var_plateau_potassium_current__g_Kp =
450  0.0183; // milliS_per_cm2
451  const NekDouble var_plateau_potassium_current__V =
452  var_chaste_interface__membrane__V; // millivolt
453  const NekDouble var_plateau_potassium_current__Kp =
454  1.0 / (1.0 + exp((7.488 - var_plateau_potassium_current__V) /
455  5.98)); // dimensionless
456  const NekDouble var_plateau_potassium_current__E_K1 =
457  var_time_independent_potassium_current__E_K1; // millivolt
458  const NekDouble var_plateau_potassium_current__E_Kp =
459  var_plateau_potassium_current__E_K1; // millivolt
460  const NekDouble var_plateau_potassium_current__i_Kp =
461  var_plateau_potassium_current__g_Kp *
462  var_plateau_potassium_current__Kp *
463  (var_plateau_potassium_current__V -
464  var_plateau_potassium_current__E_Kp); // microA_per_cm2
465  const NekDouble var_membrane__i_Kp =
466  var_plateau_potassium_current__i_Kp; // microA_per_cm2
467  const NekDouble var_background_current__E_b = -59.87; // millivolt
468  const NekDouble var_background_current__g_b = 0.03921; // milliS_per_cm2
469  const NekDouble var_background_current__V =
470  var_chaste_interface__membrane__V; // millivolt
471  const NekDouble var_background_current__i_b =
472  var_background_current__g_b *
473  (var_background_current__V -
474  var_background_current__E_b); // microA_per_cm2
475  const NekDouble var_membrane__i_b =
476  var_background_current__i_b; // microA_per_cm2
477  const NekDouble var_membrane__d_V_d_environment__time =
478  ((-1.0) / var_membrane__C) *
479  (var_membrane__I_stim + var_membrane__i_Na + var_membrane__i_si +
480  var_membrane__i_K + var_membrane__i_K1 + var_membrane__i_Kp +
481  var_membrane__i_b); // 'millivolt per millisecond'
482  const NekDouble
483  var_chaste_interface__membrane__d_V_d_environment__time =
484  var_membrane__d_V_d_environment__time; // ___units_1
485  d_dt_chaste_interface__membrane__V =
486  var_chaste_interface__membrane__d_V_d_environment__time; // 'millivolt
487  // per
488  // millisecond'
489  const NekDouble m_inf = var_fast_sodium_current_m_gate__alpha_m /
490  (var_fast_sodium_current_m_gate__alpha_m +
491  var_fast_sodium_current_m_gate__beta_m);
492  const NekDouble m_tau = 1.0 / (var_fast_sodium_current_m_gate__alpha_m +
493  var_fast_sodium_current_m_gate__beta_m);
494  const NekDouble h_inf = var_fast_sodium_current_h_gate__alpha_h /
495  (var_fast_sodium_current_h_gate__alpha_h +
496  var_fast_sodium_current_h_gate__beta_h);
497  const NekDouble h_tau = 1.0 / (var_fast_sodium_current_h_gate__alpha_h +
498  var_fast_sodium_current_h_gate__beta_h);
499  const NekDouble j_inf = var_fast_sodium_current_j_gate__alpha_j /
500  (var_fast_sodium_current_j_gate__alpha_j +
501  var_fast_sodium_current_j_gate__beta_j);
502  const NekDouble j_tau = 1.0 / (var_fast_sodium_current_j_gate__alpha_j +
503  var_fast_sodium_current_j_gate__beta_j);
504  const NekDouble d_inf = var_slow_inward_current_d_gate__alpha_d /
505  (var_slow_inward_current_d_gate__alpha_d +
506  var_slow_inward_current_d_gate__beta_d);
507  const NekDouble d_tau = 1.0 / (var_slow_inward_current_d_gate__alpha_d +
508  var_slow_inward_current_d_gate__beta_d);
509  const NekDouble f_inf = var_slow_inward_current_f_gate__alpha_f /
510  (var_slow_inward_current_f_gate__alpha_f +
511  var_slow_inward_current_f_gate__beta_f);
512  const NekDouble f_tau = 1.0 / (var_slow_inward_current_f_gate__alpha_f +
513  var_slow_inward_current_f_gate__beta_f);
514  const NekDouble X_inf =
515  var_time_dependent_potassium_current_X_gate__alpha_X /
516  (var_time_dependent_potassium_current_X_gate__alpha_X +
517  var_time_dependent_potassium_current_X_gate__beta_X);
518  const NekDouble X_tau =
519  1.0 / (var_time_dependent_potassium_current_X_gate__alpha_X +
520  var_time_dependent_potassium_current_X_gate__beta_X);
521 
522  outarray[0][i] = d_dt_chaste_interface__membrane__V;
523  outarray[1][i] = m_inf;
524  m_gates_tau[0][i] = m_tau;
525  outarray[2][i] = h_inf;
526  m_gates_tau[1][i] = h_tau;
527  outarray[3][i] = j_inf;
528  m_gates_tau[2][i] = j_tau;
529  outarray[4][i] = d_inf;
530  m_gates_tau[3][i] = d_tau;
531  outarray[5][i] = f_inf;
532  m_gates_tau[4][i] = f_tau;
533  outarray[6][i] = X_inf;
534  m_gates_tau[5][i] = X_tau;
535  outarray[7][i] =
536  d_dt_chaste_interface__intracellular_calcium_concentration__Cai;
537  }
538 }
Array< OneD, Array< OneD, NekDouble > > m_gates_tau
Storage for gate tau values.
Definition: CellModel.h:143
double NekDouble
scalarT< T > log(scalarT< T > in)
Definition: scalar.hpp:303
scalarT< T > sqrt(scalarT< T > in)
Definition: scalar.hpp:294

References tinysimd::log(), Nektar::CellModel::m_gates_tau, Nektar::CellModel::m_nq, and tinysimd::sqrt().

Member Data Documentation

◆ className

std::string Nektar::LuoRudy91::className
static
Initial value:
=
"LuoRudy91", LuoRudy91::create, "Luo Rudy 1991 model.")
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
Definition: NekFactory.hpp:198
static CellModelSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const MultiRegions::ExpListSharedPtr &pField)
Creates an instance of this class.
Definition: LuoRudy91.h:46
CellModelFactory & GetCellModelFactory()
Definition: CellModel.cpp:46

Name of class.

Definition at line 54 of file LuoRudy91.h.