TITLE K/Cl cotransporter KCCmerge

NEURON {
    SUFFIX kccmerge
    USEION k READ ek WRITE ik
    USEION na READ nai, ena WRITE ina
    USEION cl READ ecl WRITE icl VALENCE -1
    RANGE ik, icl, ina, gkcc2, gplus
}

UNITS {
    (mV)    = (millivolt)
    (molar) = (1/liter)
    (mM)    = (millimolar)
    (um)    = (micron)
    (mA)    = (milliamp)
    FARADAY = (faraday) (coulomb)
    R = (k-mole) (joule/degC)
}

PARAMETER {
    : g = 0.00181 (mA/cm2) : based on 7e-5 (A/(V*cm2)) at 300K
    gkcc2 = 0.0003 (mM/ms)
    gplus = 0.1e-3 (mM/ms)
    surf = 615.7650056818251 (um2) : surface area of original model
    voli = 1436.8 (um3)            : volume of original model
                   : gnkcc1 = a*gkcc2 + b*gplus/scale
    : sets the initial concentrations to the values used by rxd 
    cli0 = 6.6 (mM)
    clo0 = 119 (mM)
    ki0 =  125 (mM)
    ko0 = 2.9 (mM)
    nai0 = 10 (mM)
    nao0 = 147 (m)
}

ASSIGNED {
    ik        (mA/cm2)
    icl        (mA/cm2)
    ina        (mA/cm2)
    ena        (mV)
    cli         (mM)
    nai         (mM)
    a
    b    (1/mV)
    ek      (mV)
    ecl     (mV)
    celsius (degC)
    diam    (um)
}

INITIAL {
   LOCAL scale, ena, ek, ecl, E1, E2
   scale = 1e3*(R*(celsius+273.15))/FARADAY
   ek = scale*log(ki0/ko0)
   ena = scale*log(nai0/nao0)
   ecl = scale*log(clo0/cli0)
   E1 = ek + ena - 2.0*ecl
   E2 = ek - ecl
   a = -E2/(2.0 * E1)
   b = -1.0/(2.0 * E1)
}

BREAKPOINT {
    LOCAL scale, curkcc2, curnkcc1
    scale = 1e-7*(FARADAY * voli/surf) * (FARADAY/(R * (celsius+273.15)))
    curkcc2 = gkcc2 * scale * (ek - ecl)
    curnkcc1 = (a * gkcc2 + gplus *  b/scale) * scale * (ek + ena - 2.0* ecl)
    ik = -(curkcc2 + curnkcc1)  
    icl = (curkcc2 + 2.0 * curnkcc1)
    ina = -(curnkcc1)
}