http://senselab.med.yale.edu/senselab/m ... model=6763
(it is to be used with another of Canavier's mechanisms, for intracellular sodium accumulation).
The modification made is that a phenomenological lag term, tau_pump, has been added. Unfortunately this modification makes the mechanism unstable, I think because it promotes/allows negative values of nai. As I understand it, the mechanism would be more robust and secure when using a Kinetic scheme. So, I am now trying to express the below in a kinetic scheme based mechanism.
Code: Select all
TITLE PUMP
UNITS {
(molar) = (1/liter)
(pA) = (picoamp)
(mV) = (millivolt)
(uS) = (micromho)
(mA) = (milliamp)
(mM) = (millimolar)
}
: INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}
NEURON {
SUFFIX pump
USEION na READ nai WRITE ina
USEION k WRITE ik
RANGE inapump,ipumpmax,n,km,ipump_bar
}
PARAMETER {
dt (ms)
nai (mM)
ipumpmax = 0.04 (mA/cm2)
km = 10.0 (mM)
n=1.5
nainit = 4 (mM)
celsius = 35 (degC)
tau_pump = 10000 (ms)
}
ASSIGNED {
ina (mA/cm2)
ik (mA/cm2)
ipump_bar (mA/cm2)
}
BREAKPOINT {
ipump_bar = ipumpmax*(1/(1 + pow(km/nai,n)))
SOLVE state METHOD cnexp
ina = 3.0*inapump
ik = -2.0*inapump
}
STATE {inapump} : activation variable to be solved in the DEs
DERIVATIVE state {
inapump' = (ipump_bar - inapump) / tau_pump
}
INITIAL {
inapump = ipump_bar
}
So, I have cut and paste my best effort below at reproducing the above in a kinetic scheme based mechanism. It actually compiles OK. But when put into a cell model, causes errors (errnos).
As an aside, I am really not sure what to set the rates to. I am not sure how to use the Hill equation parameter values in the Canavier mechanism to set the rates in this kinetic scheme.
I write here because maybe someone has trodden this road before. I would be very grateful for any advice. Wishing you a happy new year.
Code: Select all
NEURON {
SUFFIX pump
USEION na READ nai, nao, ina WRITE ina
USEION k READ ko, ki, ik WRITE ik
RANGE ina_pmp, TotalPump
}
UNITS {
(mol) = (1)
(molar) = (1/liter)
(mM) = (millimolar)
(um) = (micron)
(mA) = (milliamp)
FARADAY = (faraday) (10000 coulomb)
PI = (pi) (1)
}
PARAMETER {
k1 = 1 (/mM-ms)
k2 = 0.005 (/ms)
k3 = 1 (/ms)
k4 = 0.005 (/mM-ms)
TotalPump = 1e-11 (mol/cm2)
}
ASSIGNED {
nai (mM)
nao (mM)
ki (mM)
ko (mM)
ina_pmp (mA/cm2)
ina_pmp_last (mA/cm2)
parea (um)
diam (um)
ina (mA/cm2)
ik (mA/cm2)
}
: volume extracellular space.value irrellevant as nao is treated constant.
CONSTANT { volo = 1e10 (um2)
}
STATE {
pump (mol/cm2)
nkpump (mol/cm2)
}
BREAKPOINT {
SOLVE state METHOD sparse
ina_pmp_last = ina_pmp
ina = ina_pmp
}
INITIAL{
parea = PI*diam
pump = TotalPump/(1 + (nai*k1/k2))
nkpump = TotalPump - pump
}
KINETIC state { LOCAL voli
voli = PI*diam*diam/4 : not sure about this decleration of voli here
COMPARTMENT (1e10)*parea {pump nkpump}
COMPARTMENT voli { nai ki }
: COMPARTMENT voli PI*diam*diam/4 {nai ki}
COMPARTMENT volo { nao ko }
: ~ nai << (-(ina - last_ina_pmp)*vol2surfaceratio/FARADAY
: ~ nai << (-ina/(FARADAY)*PI*diam*(1e4))
: these lines are for declaring nai accumulation. I think they are taken
: care of in a seperate nai accumulation mechanism so not needed
~ 3 nai + 4 ko + pump <-> nkpump (k1*parea*(1e10), k2*parea*(1e10))
~ nkpump <-> 3 nao + 4 ki (k3*parea*(1e10), k4*parea*(1e10))
CONSERVE pump + nkpump = TotalPump * parea * (1e10)
ina_pmp = 2*FARADAY*(f_flux - b_flux)/parea
}