Source code for cbcbeat.cellmodels.beeler_reuter_1977


"""This module contains a Beeler_reuter_1977 cardiac cell model

The module was autogenerated from a gotran ode file
"""
from __future__ import division
from collections import OrderedDict
import ufl

from cbcbeat.dolfinimport import *
from cbcbeat.cellmodels import CardiacCellModel

[docs]class Beeler_reuter_1977(CardiacCellModel): def __init__(self, params=None, init_conditions=None): """ Create cardiac cell model *Arguments* params (dict, :py:class:`dolfin.Mesh`, optional) optional model parameters init_conditions (dict, :py:class:`dolfin.Mesh`, optional) optional initial conditions """ CardiacCellModel.__init__(self, params, init_conditions) @staticmethod
[docs] def default_parameters(): "Set-up and return default parameters." params = OrderedDict([("E_Na", 50), ("g_Na", 0.04), ("g_Nac", 3e-05), ("g_s", 0.0009), ("IstimAmplitude", 0.0), ("IstimEnd", 50000), ("IstimPeriod", 1000), ("IstimPulseDuration", 1), ("IstimStart", 1), ("C", 0.01)]) return params
@staticmethod
[docs] def default_initial_conditions(): "Set-up and return default initial conditions." ic = OrderedDict([("V", -84.624), ("m", 0.011), ("h", 0.988), ("j", 0.975), ("Cai", 0.0001), ("d", 0.003), ("f", 0.994), ("x1", 0.0001)]) return ic
def _I(self, v, s, time): """ Original gotran transmembrane current dV/dt """ time = time if time else Constant(0.0) # Assign states V = v assert(len(s) == 7) m, h, j, Cai, d, f, x1 = s # Assign parameters E_Na = self._parameters["E_Na"] g_Na = self._parameters["g_Na"] g_Nac = self._parameters["g_Nac"] g_s = self._parameters["g_s"] IstimAmplitude = self._parameters["IstimAmplitude"] IstimPulseDuration = self._parameters["IstimPulseDuration"] IstimStart = self._parameters["IstimStart"] C = self._parameters["C"] # Init return args current = [ufl.zero()]*1 # Expressions for the Sodium current component i_Na = (g_Nac + g_Na*(m*m*m)*h*j)*(-E_Na + V) # Expressions for the Slow inward current component E_s = -82.3 - 13.0287*ufl.ln(0.001*Cai) i_s = g_s*(-E_s + V)*d*f # Expressions for the Time dependent outward current component i_x1 = 0.00197277571153*(-1 +\ 21.7584023962*ufl.exp(0.04*V))*ufl.exp(-0.04*V)*x1 # Expressions for the Time independent outward current component i_K1 = 0.0035*(-4 +\ 119.85640019*ufl.exp(0.04*V))/(8.33113748769*ufl.exp(0.04*V) +\ 69.4078518388*ufl.exp(0.08*V)) + 0.0035*(4.6 + 0.2*V)/(1 -\ 0.398519041085*ufl.exp(-0.04*V)) # Expressions for the Stimulus protocol component Istim = ufl.conditional(ufl.And(ufl.ge(time, IstimStart),\ ufl.le(time, IstimPulseDuration + IstimStart)), IstimAmplitude,\ 0) # Expressions for the Membrane component current[0] = (-i_K1 + Istim - i_Na - i_x1 - i_s)/C # Return results return current[0]
[docs] def I(self, v, s, time=None): """ Transmembrane current I = -dV/dt """ return -self._I(v, s, time)
[docs] def F(self, v, s, time=None): """ Right hand side for ODE system """ time = time if time else Constant(0.0) # Assign states V = v assert(len(s) == 7) m, h, j, Cai, d, f, x1 = s # Assign parameters g_s = self._parameters["g_s"] # Init return args F_expressions = [ufl.zero()]*7 # Expressions for the Sodium current m gate component alpha_m = (-47 - V)/(-1 + 0.0090952771017*ufl.exp(-0.1*V)) beta_m = 0.709552672749*ufl.exp(-0.056*V) F_expressions[0] = -beta_m*m + (1 - m)*alpha_m # Expressions for the Sodium current h gate component alpha_h = 5.49796243871e-10*ufl.exp(-0.25*V) beta_h = 1.7/(1 + 0.15802532089*ufl.exp(-0.082*V)) F_expressions[1] = (1 - h)*alpha_h - beta_h*h # Expressions for the Sodium current j gate component alpha_j = 1.86904730072e-10*ufl.exp(-0.25*V)/(1 +\ 1.67882753e-07*ufl.exp(-0.2*V)) beta_j = 0.3/(1 + 0.0407622039784*ufl.exp(-0.1*V)) F_expressions[2] = (1 - j)*alpha_j - beta_j*j # Expressions for the Slow inward current component E_s = -82.3 - 13.0287*ufl.ln(0.001*Cai) i_s = g_s*(-E_s + V)*d*f F_expressions[3] = 7e-06 - 0.07*Cai - 0.01*i_s # Expressions for the Slow inward current d gate component alpha_d = 0.095*ufl.exp(1/20 - V/100)/(1 +\ 1.43328813857*ufl.exp(-0.0719942404608*V)) beta_d = 0.07*ufl.exp(-44/59 - V/59)/(1 + ufl.exp(11/5 + V/20)) F_expressions[4] = -beta_d*d + (1 - d)*alpha_d # Expressions for the Slow inward current f gate component alpha_f = 0.012*ufl.exp(-28/125 - V/125)/(1 +\ 66.5465065251*ufl.exp(0.149925037481*V)) beta_f = 0.0065*ufl.exp(-3/5 - V/50)/(1 + ufl.exp(-6 - V/5)) F_expressions[5] = (1 - f)*alpha_f - beta_f*f # Expressions for the Time dependent outward current x1 gate component alpha_x1 = 0.0311584109863*ufl.exp(0.0826446280992*V)/(1 +\ 17.4117080633*ufl.exp(0.0571428571429*V)) beta_x1 = 0.000391646440562*ufl.exp(-0.0599880023995*V)/(1 +\ ufl.exp(-4/5 - V/25)) F_expressions[6] = (1 - x1)*alpha_x1 - beta_x1*x1 # Return results return dolfin.as_vector(F_expressions)
[docs] def num_states(self): return 7
def __str__(self): return 'Beeler_reuter_1977 cardiac cell model'