// This function is used to balance the membrane potential to v_init (= -70 mV)
// written by Yiota Poirazi, July 2001, poirazi@LNC.usc.edu
proc current_balance() {
finitialize($1)
fcurrent()
printf("Balancing each compartment to %d mV\n", $1)
forall {
for (x) {
if (ismembrane("na_ion")) {e_pas(x)=v(x)+ina(x)/g_pas(x)}
if (ismembrane("k_ion")) {e_pas(x)=e_pas(x)+ik(x)/g_pas(x)}
//if (ismembrane("hha2") || ismembrane("hha_old") || ismembrane("h") ) {e_pas(x)=v(x)+ina(x)/g_pas(x)}
//if (ismembrane("kdr") || ismembrane("kdr2")) {e_pas(x)=e_pas(x)+ik(x)/g_pas(x)}
if (ismembrane("ca_ion")) {e_pas(x)=e_pas(x)+ica(x)/g_pas(x)}
if (ismembrane("Ca_ion")) {e_pas(x)=e_pas(x)+iCa(x)/g_pas(x)}
if (ismembrane("n_ion")) {e_pas(x)=e_pas(x)+in(x)/g_pas(x)} //ican
// if (ismembrane("cal_ion")) {e_pas(x)=e_pas(x)+ical(x)/g_pas(x)}
// if (ismembrane("can_ion")) {e_pas(x)=e_pas(x)+ican(x)/g_pas(x)}
if (ismembrane("h")) {e_pas(x)=e_pas(x)+ihi(x)/g_pas(x)}
d = distance(1,x)
xdist = find_vector_distance_precise(secname(),x) // calc. perpedicular distance
// printf("x = %e, xdist = %e, d = %e, e_pas = %e mV, rm = %e mA/(mVcm2)\n", x, xdist, d, e_pas(x), 1./g_pas(x))
// fcurrent()
}
}
finitialize(v_init)
fcurrent()
if (cvode.active()) {
cvode.re_init()
} else {
fcurrent()
}
frecord_init()
}