: HH potassium current NEURON{ SUFFIX ipotassium : NONSPECIFIC_CURRENT i USEION k READ ek WRITE ik RANGE g,i } UNITS{ (mS) = (millisiemens) (mV) = (millivolt) (uA) = (microamp) } PARAMETER{ g = 9 (mS/cm2) n_init = 0.1 } ASSIGNED{ v (mV) ek (mV) ik (uA/cm2) i (uA/cm2) } STATE {n} BREAKPOINT{ SOLVE states METHOD cnexp :SOLVE states METHOD euler :SOLVE states METHOD runge :SOLVE states METHOD derivimplicit ik = g*(v-ek)*n*n*n*n*0.001 : factor to convert to mA/cm2 :ik = i : printf("time: %g, current: %g, voltage: %g, ek: %g \n", t, i, v, ek) : printf("potassium: %g \t %g \t %g \n", t, ik, v) :ik = g*(v-ek)*n*n*n*n :i = 0 } INITIAL { n = n_init } DERIVATIVE states{ n' = ((1-n)*alpha(v) - n*beta(v))/0.2 } FUNCTION alpha(Vm (mV)) (/ms){ LOCAL x,y UNITSOFF x = (Vm + 34.0)/(-10) if (x > 700){ : alpha = 0 x = 700 : printf("potassium alpha, time: %g, current: %g, voltage: %g \n", t, i, Vm) } if (fabs(x)>1e-6){ alpha = 0.1*x/(exp(x)-1) } else{ alpha = 0.1/(1+x/2.0+x*x/6.0) } UNITSON } FUNCTION beta(Vm (mV)) (/ms){ LOCAL x UNITSOFF x = -(Vm+44.0)/80.0 if (x>700){ x=700 : printf("potassium beta, time: %g, current: %g, voltage: %g \n", t, i, Vm) } beta = 0.125*exp(x) UNITSON }