TITLE Calcium pump
NEURON {
	SUFFIX capump
	USEION ca READ cao, cai WRITE ica
    USEION ATP READ ATPi WRITE iATP CHARGE 1
    NONSPECIFIC_CURRENT i
	RANGE ipump, ica, totpump, pump, pumpca, iATP, accca
}
DEFINE NANN  4

UNITS {
    (mol)   = (1)
	(molar) = (1/liter)
	(mM)	= (millimolar)
	(um)	= (micron)
	(mA)	= (milliamp)
	FARADAY = (faraday)	 (10000 coulomb)
	PI	= (pi) (1)
}

PARAMETER {
    k1 = 1.e10            (um3/s)
    k2 = 50.e7            (/s)	: k1*50.e-3
    k3 = 1.e10            (/s)	: k1
    k4 = 5.e6	            (um3/s)	: k1*5.e-4
    totpump = 1.9         (mol/cm2)
    kATP = 1.61 (mM)        : based on SERCA model
    ATPss = 2.59 (mM)
} 
ASSIGNED {
	cai		(mM)
    cao     (mM)
    ATPi    (mM)
	ipump           (mA/cm2)
    ica		(mA/cm2)
    accca   (mA/cm2)
    iATP	(mA/cm2)
    i (mA/cm2)
    diam	(um)
    area		(um2)
}

STATE {
    pump            (mol/cm2) 
    pumpca          (mol/cm2) 

}


INITIAL {
    :pump=totpump/(1.0 + 1e-18*k4*cao/k3)
    :pumpca = 2.e-22
    :pumpca =  totpump*1e-11*(k1*cai + k4*cao) / ( 1e7*(k2 + k3) + 1e-11*(k1*cai + k4*cao)) :2.e-22
    :pump = totpump*(1.0 - (1e-11*(k1*cai + k4*cao) / ( 1e7*(k2 + k3) + 1e-11*(k1*cai + k4*cao))))
    ipump = 0
    SOLVE state STEADYSTATE sparse
    accca = 0
}

BREAKPOINT {
	SOLVE state METHOD sparse
	ica = (ATPi/(ATPi + kATP)) * ((ATPss+kATP)/ATPss) * ipump
    accca = accca + ica
    iATP = fabs(ica)
    i = -iATP
}


KINETIC state {
   ~cai + pump <-> pumpca ((1.e-11)*k1*area, (1.e7)*k2*area)
   ~pumpca     <-> pump + cao ((1.e7)*k3*area, (1.e-11)*k4*area)
   ipump = 2*FARADAY*(f_flux-b_flux)/area
   CONSERVE pump + pumpca = totpump
}