static void _n_rates(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, double _lv){ int _i, _j; double _xi, _theta; if (!usetable) { _f_rates(_p, _ppvar, _thread, _nt, _lv); return; } _xi = _mfac_rates * (_lv - _tmin_rates); if (isnan(_xi)) { minf = _xi; mtau = _xi; hinf = _xi; htau = _xi; return; } if (_xi <= 0.) { minf = _t_minf[0]; mtau = _t_mtau[0]; hinf = _t_hinf[0]; htau = _t_htau[0]; return; } if (_xi >= 2000.) { minf = _t_minf[2000]; mtau = _t_mtau[2000]; hinf = _t_hinf[2000]; htau = _t_htau[2000]; return; } _i = (int) _xi; _theta = _xi - (double)_i; minf = _t_minf[_i] + _theta*(_t_minf[_i+1] - _t_minf[_i]); mtau = _t_mtau[_i] + _theta*(_t_mtau[_i+1] - _t_mtau[_i]); hinf = _t_hinf[_i] + _theta*(_t_hinf[_i+1] - _t_hinf[_i]); htau = _t_htau[_i] + _theta*(_t_htau[_i+1] - _t_htau[_i]); }
static void _check_rates(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) { static int _maktable=1; int _i, _j, _ix = 0; double _xi, _tmax; static double _sav_celsius; if (!usetable) {return;} if (_sav_celsius != celsius) { _maktable = 1;} if (_maktable) { double _x, _dx; _maktable=0; _tmin_rates = - 100.0 ; _tmax = 50.0 ; _dx = (_tmax - _tmin_rates)/3000.; _mfac_rates = 1./_dx; for (_i=0, _x=_tmin_rates; _i < 3001; _x += _dx, _i++) { _f_rates(_p, _ppvar, _thread, _nt, _x); _t_Xinf[_i] = Xinf; _t_Xtau[_i] = Xtau; } _sav_celsius = celsius; } }
static void _n_rates(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, double _lv){ int _i, _j; double _xi, _theta; if (!usetable) { _f_rates(_p, _ppvar, _thread, _nt, _lv); return; } _xi = _mfac_rates * (_lv - _tmin_rates); if (isnan(_xi)) { Xinf = _xi; Xtau = _xi; Yinf = _xi; Ytau = _xi; Zinf = _xi; Ztau = _xi; return; } if (_xi <= 0.) { Xinf = _t_Xinf[0]; Xtau = _t_Xtau[0]; Yinf = _t_Yinf[0]; Ytau = _t_Ytau[0]; Zinf = _t_Zinf[0]; Ztau = _t_Ztau[0]; return; } if (_xi >= 3000.) { Xinf = _t_Xinf[3000]; Xtau = _t_Xtau[3000]; Yinf = _t_Yinf[3000]; Ytau = _t_Ytau[3000]; Zinf = _t_Zinf[3000]; Ztau = _t_Ztau[3000]; return; } _i = (int) _xi; _theta = _xi - (double)_i; Xinf = _t_Xinf[_i] + _theta*(_t_Xinf[_i+1] - _t_Xinf[_i]); Xtau = _t_Xtau[_i] + _theta*(_t_Xtau[_i+1] - _t_Xtau[_i]); Yinf = _t_Yinf[_i] + _theta*(_t_Yinf[_i+1] - _t_Yinf[_i]); Ytau = _t_Ytau[_i] + _theta*(_t_Ytau[_i+1] - _t_Ytau[_i]); Zinf = _t_Zinf[_i] + _theta*(_t_Zinf[_i+1] - _t_Zinf[_i]); Ztau = _t_Ztau[_i] + _theta*(_t_Ztau[_i+1] - _t_Ztau[_i]); }