INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}

NEURON {
 SUFFIX IKv
 USEION k READ ek WRITE ik
 RANGE gkvbar
 RANGE m_inf, h_inf
 RANGE tau_m, tau_h, tau_m1, tau_h1
 RANGE m_exp, h_exp
 RANGE ikv
}


UNITS {
 (molar) = (1/liter)
 (mM) = (millimolar)
 (mA) = (milliamp)
 (mV) = (millivolt)
}

PARAMETER {
 gkvbar	= 0.001	(mho/cm2)
 ek (mV)
 dt (ms)
 v  (mV)
 tau_m1 = 1000
 tau_h1 = 10000
}

STATE {
 m h 
}

INITIAL {
 m = 0.755
 h = 0.001
}

ASSIGNED {
 ik	(mA/cm2)
 ikv	(mA/cm2)
 m_inf 
 h_inf
 tau_m 
 tau_h
 m_exp 
 h_exp
}

BREAKPOINT {
 SOLVE states
 ikv = gkvbar * m*m*m *h* (v - ek)
 ik = ikv
}

PROCEDURE states() {	: exact when v held constant
 evaluate_fct(v)
 m = m + m_exp * (m_inf - m)
 h = h + h_exp * (h_inf - h)

 VERBATIM
 return 0;
 ENDVERBATIM
}

UNITSOFF

PROCEDURE evaluate_fct(v(mV)) { LOCAL am,bm,ah,bh
	
 am = (400) / ((exp(-(v-15)/36)) + 1)
 bm = (exp((-v/13)))
 tau_m = 1 / (am + bm)
 m_inf = am * tau_m
 m_exp = 1 - exp(-dt/tau_m/tau_m1)

 ah = 0.0003 * (exp((-v/7)))
 bh = ((80) / ((exp(-(v+115)/15)) + 1))+0.02
 tau_h = 1 / (ah + bh)
 h_inf = ah * tau_h
 h_exp = 1 - exp(-dt/tau_h/tau_h1)

}

UNITSON