: Sodium ion accumulation with radial and longitudinal diffusion, buffering and pumping
NEURON {
THREADSAFE
SUFFIX nadp
USEION na READ nao, nai, ina WRITE nai, ina, ena
NONSPECIFIC_CURRENT ik_pump
RANGE ina_pmp, TotalPump, ik_ratio, na, pump, pumpna, k4_coeff, DNa_coeff, initial_na
GLOBAL vrat, DNa, k1, k2, k3, k4, change_ena, fix_na
}
:DEFINE Nannuli 4
UNITS {
(molar) = (1/liter)
(mM) = (millimolar)
(um) = (micron)
(mA) = (milliamp)
(mV) = (millivolt)
FARADAY = (faraday) (10000 coulomb)
R = (kmole) (joule/degC)
PI = (pi) (1)
(mol) = (1)
}
PARAMETER {
DNa = 0.6 (um2/ms)
k1 = 1.0 (/mM3ms)
k2 = 0.001 (/ms)
k3 = 0.3 (/ms)
: to eliminate pump, set TotalPump to 0 in hoc
TotalPump = 1e14 (mol/cm2)
ik_ratio = 0.66666666 (1)
change_ena = 1 (1)
k4_coeff = 1.0 (1)
DNa_coeff = 1.0 (1)
fix_na = 0 (1)
}
ASSIGNED {
diam (um)
L (um)
ina (mA/cm2)
nai (mM)
: vrat[Nannuli] : numeric value of vrat[i] equals the volume
: of annulus i of a 1um diameter cylinder
: multiply by diam^2 to get volume per um length
k4 (/mM3ms)
nao (mM)
ena (mV)
ina_pmp (mA/cm2)
parea (um)
ik_pump (mA/cm2)
celsius
initial_na (mM)
:k4_coeff (1)
}
CONSTANT { volo = 1e10 (um2) }
STATE {
: na[0] is equivalent to nai
na (mM) <1e3>
pump (mol/cm2)
pumpna (mol/cm2)
}
BREAKPOINT {
SOLVE state METHOD sparse
ina = ina_pmp
ik_pump = ik_ratio*ina_pmp
}
LOCAL factors_done
INITIAL {
MUTEXLOCK
k4=(((nai/nao)^3)*k1*k3)/k2 :Set the equilibrium at nai0_na_ion
parea = PI*diam
vrat = PI*0.25
pump = TotalPump/(1 + (nai*k1/k2))
pumpna = TotalPump  pump
: if (factors_done == 0) { : flag becomes 1 in the first segment
: factors_done = 1 : all subsequent segments will have
: factors() : vrat = 0 unless vrat is GLOBAL
: }
na = nai
initial_na = nai
: FROM i=0 TO Nannuli1 {
: na[i] = nai
: }
MUTEXUNLOCK
}
:LOCAL frat[Nannuli] : scales the rate constants for model geometry
:PROCEDURE factors() {
: LOCAL r, dr2
: r = 1/2 : starts at edge (half diam)
: dr2 = r/(Nannuli1)/2 : full thickness of outermost annulus,
: half thickness of all other annuli
: vrat[0] = 0
: frat[0] = 2*r
: FROM i=0 TO Nannuli2 {
: vrat[i] = vrat[i] + PI*(rdr2/2)*2*dr2 : interior half
: r = r  dr2
: frat[i+1] = 2*PI*r/(2*dr2) : outer radius of annulus
: div by distance between centers
: r = r  dr2
: vrat[i+1] = PI*(r+dr2/2)*2*dr2 : outer half of annulus
: }
:}
KINETIC state {
COMPARTMENT diam*diam*vrat {na}
COMPARTMENT (1e10)*parea {pump pumpna}
COMPARTMENT volo {nao}
LONGITUDINAL_DIFFUSION DNa*DNa_coeff*diam*diam*vrat {na}
:pump
~ 3 na + pump <> pumpna (k1*parea*(1e10), k2*parea*(1e10))
~ pumpna <> pump + 3 nao (k3*parea*(1e10), k4*k4_coeff*parea*(1e10))
CONSERVE pump + pumpna = TotalPump * parea * (1e10)
ina_pmp = FARADAY*(f_flux  b_flux)/parea
: all currents except pump
~ na << ((inaina_pmp)*PI*diam/(FARADAY)) : ina is Na efflux
:FROM i=0 TO Nannuli2 {
: ~ na[i] <> na[i+1] (DNa*frat[i+1], DNa*frat[i+1])
:}
if (fix_na) {
na = initial_na
}
nai = na
if (change_ena == 1) {
ena = ((R*(273.15+celsius))/(FARADAY*10))*log(nao/nai)
}
else {
ena = 60.
}
}
