/*-------------------------------------------------------------------------- Author: Thomas Nowotny Institute: Institute for Nonlinear Dynamics University of California San Diego La Jolla, CA 92093-0402 email to: tnowotny@ucsd.edu initial version: 2002-01-25 --------------------------------------------------------------------------*/ using namespace std; #include <sstream> #include <fstream> #include "CN_LPneuronNT.h" #include "CN_DCInput.h" #include "CN_NeuronModel.h" #include "CN_rk65n.h" #include "CN_LPneuronNT.cc" #include "CN_DCInput.cc" #include "CN_NeuronModel.cc" #include "CN_rk65n.cc" double rk65_MINDT= 0.05; double rk65_eps= 1e-12; double rk65_relEps= 1e-9; double rk65_absEps= 1e-16; double mindt= 1e-6; int main(int argc, char *argv[]) { if (argc != 5) { cerr << "usage: testNT <input_current> <delta I> <step no> <basename>" << endl; exit(1); } cerr << "call was: "; for (int i= 0; i < argc; i++) { cerr << argv[i] << " "; } cerr << endl; double inI= atof(argv[1]); double dI= atof(argv[2]); int steps= atoi(argv[3]); list<neuron *> neurs; list<synapse *> syns; vector<int> dummy(3); LPRneuron n(1, dummy); neurs.push_back(&n); n.set_p(stdLPR_p); DCInput s(&n, inI); double told, t, dt, dtx; double theI; stringstream name; char thename[80]; ofstream os; os.precision(10); for (int i= 0; i < LPR_PNO; i++) { cerr << "# " << LPR_p_text[i] << " "; cerr << n.p[i] << endl; } double *x, *xn, *tmp; int N; NeuronModel model(&neurs, &syns, N, cerr); x= new double[N]; xn= new double[N]; rk65n machine(N, rk65_MINDT, rk65_eps, rk65_absEps, rk65_relEps); cout.precision(10); for (int k= 0; k < steps; k++) { theI= inI+k*dI; name.clear(); name << argv[4] << "." << theI << ".dat" << ends; name >> thename; os.open(thename); s.set_I(theI-2.0); told= -0.1; t= 0.0; dt= 0.0001; dtx= 0.005; n.init(x, LPR_INIVARS); x[0]= 0; while (x[0] < 20000) { if ((x[0] > 5000) && (x[0] - told) >= 0.1) { os << x[0] << " " << n.E(x) << endl; told= x[0]; } if (isnan(n.E(x))) { cerr << "nan encountered!" << endl; exit(1); } dtx= machine.integrate(x, xn, &model, dt); dtx= min(dtx, 2.0*dt); tmp= x; x= xn; xn= tmp; dt= dtx; } os.close(); } delete[] x; delete[] xn; return 0; }