From c3ec12daa78b17bb007a5acb68db5079b12e58ae Mon Sep 17 00:00:00 2001 From: Ioannis Magkanaris Date: Fri, 25 Feb 2022 12:35:06 +0100 Subject: [PATCH] Fixed initialization of global variables --- coreneuron/apps/main1.cpp | 24 ++++-------------------- coreneuron/io/global_vars.cpp | 6 +++++- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/coreneuron/apps/main1.cpp b/coreneuron/apps/main1.cpp index ef02f96f9..9e3f0e348 100644 --- a/coreneuron/apps/main1.cpp +++ b/coreneuron/apps/main1.cpp @@ -508,36 +508,21 @@ extern "C" void mk_mech_init(int argc, char** argv) { out.close(); } - // Not working // initialise default coreneuron parameters initnrn(); - printf("CoreNEURON Global Vars after initnrn(): second order=%d t=%g dt=%g rev_dt=%d celsius=%lf\n", secondorder, t, dt, rev_dt, celsius); // set global variables // precedence is: set by user, globals.dat, 34.0 celsius = corenrn_param.celsius; - printf("CoreNEURON Global Vars after corenrn_param: second order=%d t=%g dt=%g rev_dt=%d celsius=%lf\n", secondorder, t, dt, rev_dt, celsius); // read the global variable names and set their values from globals.dat + // some global variables need to be read before the ion_reg to initialize + // properly the in-built ion mechanisms set_globals(corenrn_param.datpath.c_str(), (corenrn_param.seed >= 0), corenrn_param.seed); - printf("CoreNEURON Global Vars after set_globals(): second order=%d t=%g dt=%g rev_dt=%d celsius=%lf\n", secondorder, t, dt, rev_dt, celsius); // reads mechanism information from bbcore_mech.dat mk_mech((corenrn_param.datpath).c_str()); - // // Not working - // // initialise default coreneuron parameters - // initnrn(); - // printf("CoreNEURON Global Vars after initnrn(): second order=%d t=%g dt=%g rev_dt=%d celsius=%lf\n", secondorder, t, dt, rev_dt, celsius); - - // // set global variables - // // precedence is: set by user, globals.dat, 34.0 - // celsius = corenrn_param.celsius; - // printf("CoreNEURON Global Vars after corenrn_param: second order=%d t=%g dt=%g rev_dt=%d celsius=%lf\n", secondorder, t, dt, rev_dt, celsius); - - // // read the global variable names and set their values from globals.dat - // set_globals(corenrn_param.datpath.c_str(), (corenrn_param.seed >= 0), corenrn_param.seed); - // printf("CoreNEURON Global Vars after set_globals(): second order=%d t=%g dt=%g rev_dt=%d celsius=%lf\n", secondorder, t, dt, rev_dt, celsius); } extern "C" int run_solve_core(int argc, char** argv) { @@ -549,10 +534,9 @@ extern "C" int run_solve_core(int argc, char** argv) { bool reports_needs_finalize = false; - // read the global variable names and set their values from globals.dat + // read agin the global variables to set the global variables defined by + // the mod files' mechanisms set_globals(corenrn_param.datpath.c_str(), (corenrn_param.seed >= 0), corenrn_param.seed); - printf("CoreNEURON Global Vars after set_globals(): second order=%d t=%g dt=%g rev_dt=%d celsius=%lf\n", secondorder, t, dt, rev_dt, celsius); - if (!corenrn_param.is_quiet()) { report_mem_usage("After mk_mech"); diff --git a/coreneuron/io/global_vars.cpp b/coreneuron/io/global_vars.cpp index 7b40b8766..3976d6831 100644 --- a/coreneuron/io/global_vars.cpp +++ b/coreneuron/io/global_vars.cpp @@ -77,6 +77,9 @@ void set_globals(const char* path, bool cli_global_seed, int cli_global_seed_val } } } + if (static_cast(name).find("ion") != std::string::npos) { + nrn_ion_init[name] = *val; + } delete[] val; val = nullptr; } @@ -116,7 +119,8 @@ void set_globals(const char* path, bool cli_global_seed, int cli_global_seed_val if (it != n2v->end()) { nrn_assert(it->second.first == 0); *(it->second.second) = val; - } else if (static_cast(name).find("ion") != std::string::npos) { + } + if (static_cast(name).find("ion") != std::string::npos) { nrn_ion_init[name] = val; } } else if (sscanf(line, "%[^[][%d]\n", name, &n) == 2) {