1 #include <../../nrnconf.h> 176 #include <nrnmpiuse.h> 180 #include <sys/stat.h> 181 #include <unordered_map> 182 #include <unordered_set> 219 extern void nrn_fake_fire(
int gid,
double firetime,
int fake_out);
238 for (
int i = 0;
i < scnt[0]; ++
i) {
248 for (
int i = 0;
i < scnt[0]; ++
i) {
256 for (
int i = 0;
i <
n; ++
i) {
261 for (
int i = 0;
i < n[0]; ++
i) {
266 for (
int i = 0;
i < n[0]; ++
i) {
273 extern bool use_bgpdma_;
283 extern bool nrn_use_compress_;
284 extern bool nrn_use_localgid_;
307 extern "C" void*
bbss_buffer_counts(
int* len,
int** gids,
int** sizes,
int* global_size);
338 extern "C" void bbss_save(
void*
bbss,
int gid,
char* buffer,
int sz);
346 extern "C" void bbss_restore(
void*
bbss,
int gid,
int npiece,
char* buffer,
int sz);
367 #define PDEBUG printf("%s\n", dbuf) 369 #define PDEBUG f->s(dbuf, 1) 382 virtual void i(
int&
j,
int chk = 0);
383 virtual void d(
int n,
double&
p);
384 virtual void d(
int n,
double* p);
385 virtual void s(
char* cp,
int chk = 0);
395 ni =
nd = ns = nl = 0;
411 ns += strlen(cp) + 1;
417 return usebin_ ? bytecntbin() : bytecntasc();
420 return ni *
sizeof(
int) +
nd *
sizeof(
double) + ns;
423 return ni * 12 +
nd * 23 + ns + nl;
430 virtual void i(
int&
j,
int chk = 0);
431 virtual void d(
int n,
double&
p);
432 virtual void d(
int n,
double* p);
433 virtual void s(
char* cp,
int chk = 0);
438 f =
fopen(fname,
"w");
451 for (
int i = 0;
i <
n; ++
i) {
467 virtual void i(
int&
j,
int chk = 0);
468 virtual void d(
int n,
double&
p) {
471 virtual void d(
int n,
double*
p);
472 virtual void s(
char* cp,
int chk = 0);
476 virtual void skip(
int);
480 f =
fopen(fname,
"r");
490 int rval = fscanf(f,
"%d\n", &k);
498 for (
int i = 0;
i <
n; ++
i) {
507 assert(strcmp(buf, cp) == 0);
512 for (
int i = 0;
i <
n; ++
i) {
521 virtual void i(
int&
j,
int chk = 0);
522 virtual void d(
int n,
double&
p);
523 virtual void d(
int n,
double* p);
524 virtual void s(
char* cp,
int chk = 0);
527 virtual void cpy(
int size,
char* cp);
539 cpy(
sizeof(
int), (
char*) (&j));
542 cpy(
sizeof(
double), (
char*) (&d));
545 cpy(n *
sizeof(
double), (
char*) d);
548 cpy(strlen(cp) + 1, cp);
558 for (
int ii = 0; ii < ns; ++ii) {
567 virtual void i(
int&
j,
int chk = 0);
568 virtual void s(
char* cp,
int chk = 0);
573 virtual void cpy(
int size,
char* cp);
580 cpy(
sizeof(
int), (
char*) (&k));
590 cpy(strlen(
p) + 1, cp);
597 for (
int ii = 0; ii < ns; ++ii) {
630 nrn_use_compress_ =
false;
631 nrn_use_localgid_ =
false;
662 int len = ss->
counts(&gids, &sizes);
664 sizevec->resize(len);
665 for (
int i = 0;
i < len; ++
i) {
666 gidvec->elem(
i) = double(gids[
i]);
667 sizevec->elem(i) = double(sizes[i]);
677 printf(
"save_gid not implemented\n");
682 printf(
"restore_gid not implemented\n");
696 mkdir(
"bbss_out", 0770);
704 int len = ss->
counts(&gids, &sizes);
705 for (
int i = 0;
i < len; ++
i) {
721 int len, *gids, *sizes, global_size;
728 buf =
new char[global_size];
730 sprintf(fname,
"binbufout/global.%d", global_size);
732 fwrite(buf,
sizeof(
char), global_size, f);
736 sprintf(fname,
"binbufout/global.size");
738 fprintf(f,
"%d\n", global_size);
741 for (
int i = 0;
i < len; ++
i) {
742 buf =
new char[sizes[
i]];
744 sprintf(fname,
"binbufout/%d.%d", gids[i], sizes[i]);
746 fwrite(buf,
sizeof(
char), sizes[i], f);
750 sprintf(fname,
"binbufout/%d.size", gids[i]);
769 if (!pp_ignore_map) {
771 pp_ignore_map->reserve(100);
773 (*pp_ignore_map)[pp] = 0;
774 }
else if (pp_ignore_map) {
775 pp_ignore_map.reset();
783 if (pp_ignore_map->count(pp) > 0) {
800 *len = ss->
counts(gids, sizes);
819 extern "C" void bbss_save(
void* bbss,
int gid,
char* buffer,
int sz) {
827 extern "C" void bbss_restore(
void* bbss,
int gid,
int ngroup,
char* buffer,
int sz) {
832 for (
int i = 0;
i < ngroup; ++
i) {
929 int len = ss->
counts(&gids, &sizes);
930 for (
int i = 0;
i < len; ++
i) {
937 for (
int j = 0;
j < ngroup; ++
j) {
952 int len, *gids, *sizes, global_size, npiece,
sz;
958 sprintf(fname,
"binbufin/global.size");
965 sprintf(fname,
"binbufin/global.%d", global_size);
966 f =
fopen(fname,
"r");
971 nrn_assert(fread(buf,
sizeof(
char), global_size, f) == global_size);
978 for (
int i = 0;
i < len; ++
i) {
981 sprintf(fname,
"binbufin/%d.size", gids[
i]);
990 sprintf(fname,
"binbufin/%d.%d", gids[i], sz);
991 f =
fopen(fname,
"r");
996 nrn_assert(fread(buf,
sizeof(
char), sz, f) == sz);
1078 if (ssi[im].offset < 0) {
1117 typedef std::unordered_map<Point_process*, DEList*>
PP2DE;
1141 if (se->weight_ == ((
NetCon*) dl->
de)->weight_) {
1207 double t1 =
int(tt / dt + 0.5 + 1
e-10) *
dt;
1234 const auto& dl1iter = pp2de->find(pp);
1235 if (dl1iter != pp2de->end()) {
1236 dl1 = dl1iter->second;
1237 sew =
new SEWrap(tq, dl1);
1278 cntinc = ps->
dil_.size();
1283 if (ps->
gid_ >= 0) {
1286 const auto& dliter =
src2send->find(srcid);
1288 dl = dliter->second;
1306 for (i = 0; i < dl->size(); i += 2) {
1307 double x =
fabs((*dl)[i] - ts);
1315 dl->push_back(cntinc);
1316 }
else if (m > 1
e-12) {
1319 (*dl)[im + 1] += cntinc;
1324 dl->push_back(cntinc);
1325 (*src2send)[srcid] = dl;
1342 const auto& dbiter = nc2dblist->find(nc);
1343 if (dbiter == nc2dblist->end()) {
1345 (*nc2dblist)[nc] = db;
1347 db = dbiter->second;
1349 db->push_back(tq->
t_);
1355 const auto& dbiter = nc2dblist->find(nc);
1356 if (dbiter == nc2dblist->end()) {
1358 (*nc2dblist)[nc] = db;
1360 db = dbiter->second;
1362 db->push_back(tq->
t_);
1388 de->
pr(
"Don't know if this event has already been delivered",
t, net_cvode_instance);
1410 pp2de.reset(
new PP2DE);
1411 pp2de->reserve(n + 1);
1431 const auto& delistiter = pp2de->find(pp);
1433 if (delistiter != pp2de->end()) {
1434 dl1 = delistiter->second;
1452 for (
const auto& dl: *presyn_queue) {
1455 presyn_queue.reset();
1458 for (
const auto& dl: *nc2dblist) {
1470 for (
const auto& dlpair: *pp2de) {
1471 auto dl = dlpair.second;
1472 for (; dl; dl = dl1) {
1543 int base = spgid % 10000000;
1544 if (spgid == base || !
base2spgid->count(base)) {
1545 (*base2spgid)[base] = spgid;
1579 *gids = (
int*) malloc(gidcnt *
sizeof(
int));
1580 *cnts = (
int*) malloc(gidcnt *
sizeof(
int));
1582 if (*gids ==
NULL || *cnts ==
NULL) {
1583 printf(
"Error : Memory allocation failure in BBSaveState\n");
1593 auto base = pair.first;
1594 auto spgid = pair.second;
1595 (*gids)[gidcnt] = base;
1602 (*cnts)[gidcnt] = c->
bytecnt();
1680 const auto& spgiditer =
base2spgid->find(basegid);
1682 spgid = spgiditer->second;
1700 int size = cellsize(obj);
1703 possible_presyn(gid);
1747 pycell_name2sec_maps.clear();
1766 size_t last_dot = name.rfind(
".");
1767 assert(last_dot != std::string::npos);
1768 assert(name.size() > (last_dot + 1));
1769 std::string basename = name.substr(last_dot + 1);
1770 if (sn2s.find(basename) != sn2s.end()) {
1771 hoc_execerr_ext(
"Python Section name, %s, is not unique in the Python cell",
1774 sn2s[basename] =
sec;
1784 if (pycell_name2sec_maps.empty()) {
1788 auto search = pycell_name2sec_maps.find(pycell);
1789 assert(search != pycell_name2sec_maps.end());
1790 return search->second;
1820 for (first = qsec; first->
itemtype &&
hocSEC(first)->prop->dparam[6].obj ==
c;
1821 first = first->
prev) {
1827 first = first->
next;
1830 for (qsec = first; qsec != last; qsec = qsec->
next) {
1834 sprintf(buf,
"begin section");
1836 section_exist_info(sec);
1846 int i = (
int) (n2s.size());
1848 for (
auto& iter: n2s) {
1849 const std::string&
name = iter.first;
1853 sprintf(buf,
"begin section");
1855 strcpy(buf, name.c_str());
1859 int size = sectionsize(sec);
1876 std::unordered_set<std::string> snames;
1879 for (i = 0; i <
cnt; ++
i) {
1880 sprintf(buf,
"begin section");
1889 if (snames.find(buf) != snames.end()) {
1894 snames.emplace(buf);
1895 auto search = (*n2s).find(buf);
1896 if (search != (*n2s).end()) {
1897 sec = search->second;
1930 int size = sectionsize(sec);
1977 nseg = sec->
nnode - 1;
1979 for (i = 0; i < nseg; ++
i) {
1983 node01(sec, sec->
pnode[nseg]);
2003 for (i = 0, p = nd->
prop; p; p = p->
next) {
2015 for (p = nd->
prop; p; p = p->
next) {
2039 for (i = 0, p = nd->
prop; p; p = p->
next) {
2042 if (pp->
sec == sec) {
2050 for (p = nd->
prop; p; p = p->
next) {
2053 if (pp->
sec == sec) {
2094 double* xval =
NULL;
2106 xval =
new double[
sz];
2149 const auto& dliter = pp2de->find(pp);
2150 if (dliter == pp2de->end()) {
2153 dl = dliter->second;
2171 const auto& dbiter = nc2dblist->find(nc);
2172 if (dbiter != nc2dblist->end()) {
2173 db = dbiter->second;
2176 for (
int i = 0;
i <
j; ++
i) {
2177 double x = (*db)[
i];
2199 for (
int i = 0;
i <
j; ++
i) {
2240 for (
int i = 0;
i <
cnt; ++
i) {
2242 double flag, tt, *w;
2248 void** movable =
NULL;
2262 se->movable_ = movable;
2264 if (ncindex == -1) {
2268 for (j = 0, dl1 = dliter->second; j < ncindex; ++j, dl1 = dl1->
next) {
2292 int*
c =
new int[np];
2294 for (i = 0; i < np; ++
i) {
2296 rdispl[i + 1] = rdispl[
i] + c[
i];
2301 for (i = 0; i < np; ++
i) {
2302 rdispl[i + 1] = rdispl[
i] + rcnt[
i];
2309 int* rcnt =
new int[np];
2310 int* rdispl =
new int[np + 1];
2334 int* rcnt =
new int[np];
2335 int* rdispl =
new int[np + 1];
2341 tsdest =
new double[size];
2378 for (
const auto& pair: *
src2send) {
2379 ndsrctotal += pair.second->size();
2381 tssrc =
new double[ndsrctotal];
2392 for (
const auto& pair: *
src2send) {
2393 int gid = pair.first;
2396 dcnts[host] += pair.second->size();
2402 off[i + 1] = off[
i] + cnts[
i];
2403 doff[i + 1] = doff[
i] + dcnts[
i];
2410 for (
const auto& pair: *src2send) {
2411 const auto dl = pair.second;
2412 int gid = pair.first;
2414 gidsrc[off[host] + cnts[host]] = gid;
2415 ndsrc[off[host] + cnts[host]++] =
int(dl->size());
2416 for (
size_t i = 0; i < dl->size(); ++
i) {
2417 tssrc[doff[host] + dcnts[host]++] = (*dl)[
i];
2420 for (
const auto& pair: *src2send) {
2425 if (nrnmpi_numprocs > 1) {
2449 rdspl[
i + 1] = rdspl[
i] + rcnt[
i];
2461 int i, rsize, *rg =
NULL, *rtscnts =
NULL;
2470 rg =
new int[rsize];
2471 rtscnts =
new int[rsize];
2489 for (i = 0; i < rsize; ++
i) {
2492 dl->reserve(rtscnts[i]);
2494 for (
int j = 0;
j < rtscnts[
i]; ++
j) {
2495 dl->push_back(rts[tsoff +
j]);
2498 tsoff += rtscnts[
i];
2522 nc2dblist->reserve(20);
2525 std::unique_ptr<Int2DblList> m{
new Int2DblList()};
2526 m->reserve(cnt + 1);
2530 for (i = 0; i <
cnt; ++
i) {
2533 const auto& dliter = m->find(gid);
2534 if (dliter != m->end()) {
2535 dl = dliter->second;
2544 for (
int k = 0;
k < tscnt;
k += 2) {
2545 double t1 =
tsdest[its++];
2546 int inccnt =
tsdest[its++];
2551 for (
int j = 0;
j < dl->size();
j += 2) {
2552 double dt =
fabs((*dl)[
j] - t1);
2554 (*dl)[
j + 1] += inccnt;
2557 }
else if (dt < .1) {
2563 dl->push_back(inccnt);
2590 gidsrc =
new int[mcnt];
2591 tssrc_cnt =
new int[mcnt];
2592 tssrc =
new double[mdcnt];
2596 for (
const auto& pair: *m) {
2597 auto dl = pair.second;
2598 gidsrc[mcnt] = pair.first;
2599 tssrc_cnt[mcnt] = dl->size();
2600 for (
int i = 0; i < dl->size(); ++
i) {
2601 tssrc[mdcnt++] = (*dl)[
i];
2607 presyn_queue->reserve(127);
2657 i = (ps->
ssrc_ != 0 ? 1 : -1);
2661 if (output_index >= 0 && i == 1) {
2664 int j = (ps->
flag_ ? 1 : 0);
2684 const auto& dliter = presyn_queue->find(gid);
2685 if (dliter != presyn_queue->end()) {
2686 dl = dliter->second;
2690 for (i = 0; i < dl->size(); i += 2) {
2693 int unc = (*dl)[i + 1];
2713 #if 1 // if set to 0 comment out asserts below 2730 if (!queuecheck_gid2unc) {
2732 queuecheck_gid2unc->reserve(1000);
2735 (*queuecheck_gid2unc)[
i] = dl;
2737 for (
int j = 0;
j <
cnt;
j += 2) {
2762 for (
int j = 0;
j <
cnt;
j += 2) {
2778 if (queuecheck_gid2unc)
2779 for (
const auto& pair: *queuecheck_gid2unc) {
2780 auto gid = pair.first;
2781 auto dl = pair.second;
2783 const auto& dl2iter = presyn_queue->find(gid);
2784 if (dl2iter != presyn_queue->end()) {
2785 dl2 = dl2iter->second;
2786 if (dl->size() == dl2->size()) {
2787 for (
int i = 0;
i < dl->size();
i += 2) {
2788 if ((
fabs((*dl)[
i] - (*dl2)[
i]) > 1
e-12) || (*dl)[i + 1] != (*dl2)[i + 1]) {
2790 "error: gid=%d expect t=%g %d but queue contains t=%g %d " 2797 (*dl)[i] - (*dl2)[i]);
2801 printf(
"error: gid=%d distinct delivery times, expect %ld, actual %ld\n",
2807 printf(
"error: gid=%d expect spikes but none on queue\n", gid);
2808 for (
int i = 0;
i < dl->size() - 1;
i += 2) {
2809 printf(
" %g %d", (*dl)[
i],
int((*dl)[i + 1]));
2814 for (
const auto& pair: *presyn_queue) {
2815 auto gid = pair.first;
2816 auto dl2 = pair.second;
2818 const auto& dliter = presyn_queue->find(gid);
2819 if (dliter == presyn_queue->end()) {
2820 dl = dliter->second;
2821 printf(
"error: gid=%d expect no spikes but some on queue\n", gid);
2822 for (
int i = 0;
i <
int(dl2->size()) - 1;
i += 2) {
2823 printf(
" %g %d", (*dl)[i],
int((*dl)[i + 1]));
2830 if (queuecheck_gid2unc) {
2831 for (
const auto& pair: *queuecheck_gid2unc) {
2834 queuecheck_gid2unc.reset();
static int nrnmpi_int_allmax(int x)
virtual void d(int n, double &p)
int var_type(Symbol *) const
Object * nrn_gid2obj(int gid)
Section * nrn_section_exists(char *name, int index, Object *cell)
void gid2buffer(int gid, char *buffer, int size)
NetCvode * net_cvode_instance
size_t hoc_total_array_data(Symbol *s, Objectdata *obd)
static double save_test_bin(void *v)
static void all2allv_dbl1(int *scnt, int *sdispl, double *tssrc)
BBSS_TxtFileIn(const char *)
virtual void cpy(int size, char *cp)
static void nrnmpi_int_allgatherv(int *s, int *r, int *n, int *dspl)
Object * nrn_sec2cell(Section *)
int counts(int **gids, int **counts)
virtual void i(int &j, int chk=0)
void(* ReceiveFunc)(Point_process *, double *, double)
static void bbss_remove_delivered()
static void destruct(void *v)
virtual void d(int n, double &p)=0
static std::unique_ptr< Int2DblList > src2send
void nrnmpi_abort(int errcode)
virtual void s(char *cp, int chk=0)
std::vector< double > DblList
static void nrn_spike_exchange(NrnThread *)
void * nrn_opaque_obj2pyobj(Object *ho)
virtual void i(int &j, int chk=0)
static std::unique_ptr< Int2Int > base2spgid
hoc_Item * net_cvode_instance_psl()
#define ITERATE(itm, lst)
static void all2allv_helper(int *scnt, int *sdispl, int *rcnt, int *rdispl)
BBSS_BufferIn(char *buffer, int size)
PlayRecList * net_cvode_instance_prl()
static double binq_time(double tt)
static std::unique_ptr< Int2DblList > queuecheck_gid2unc
virtual ~BBSS_TxtFileOut()
static double restore_test(void *v)
Symbol * hoc_lookup(const char *)
int prop_index(const Symbol *) const
static void base2spgid_item(int spgid, Object *obj)
char * hoc_object_name(Object *ob)
Represent main neuron object computed by single thread.
static void pycell_name2sec_maps_clear()
static TQItemList * tq_removal_list
static std::unique_ptr< Int2DblList > presyn_queue
std::unordered_map< int, DblList * > Int2DblList
static void del_presyn_info()
static StateStructInfo * ssi
static double restore_gid(void *v)
static bool use_gidcompress_
static SEWrapList * sewrap_list
BBSS_TxtFileOut(const char *)
Symlist * hoc_built_in_symlist
std::unordered_map< NetCon *, DblList * > NetCon2DblList
void nrn_netcon_event(NetCon *, double)
static philox4x32_key_t k
sprintf(buf," if (secondorder) {\ " int _i;\" " for(_i=0;_i< %d;++_i) {\" " _p[_slist%d[_i]]+=dt *_p[_dlist%d[_i]];\" " }}\", numeqn, listnum, listnum)
static void bbss_early(double td, TQItem *tq)
int sectionsize(Section *)
virtual ~BBSS_BufferOut()
static void allgatherv_helper(int cnt, int *rcnt, int *rdspl)
virtual void s(char *cp, int chk=0)=0
void forall_callback(void(*)(const TQItem *, int))
virtual void savestate_restore(double deliverytime, NetCvode *)
virtual void i(int &j, int chk=0)
static void bbss_restore_begin()
TQueue * net_cvode_instance_event_queue(NrnThread *)
void hoc_execerr_ext(const char *fmt,...)
printf style specification of hoc_execerror message.
static double cell(void *v)
virtual void i(int &j, int chk=0)
static double ref(void *v)
int const size_t const size_t n
virtual void i(int &j, int chk=0)=0
static void construct_presyn_queue()
Point_process * ob2pntproc(Object *)
static void * cons(Object *)
static double save_request(void *v)
void class2oc(const char *, void *(*cons)(Object *), void(*destruct)(void *), Member_func *, int(*checkpoint)(void **), Member_ret_obj_func *, Member_ret_str_func *)
void hoc_obj_unref(Object *obj)
virtual void apply(BBSS_IO *io)
void bbss_save(void *bbss, int gid, char *buffer, int sz)
static void nrnmpi_barrier()
static double ppignore(void *v)
static void all2allv_int2(int *scnt, int *sdispl, int *gidsrc, int *ndsrc)
void * bbss_buffer_counts(int *len, int **gids, int **sizes, int *global_size)
const char * secname(Section *sec)
virtual void s(char *cp, int chk=0)
void bbss_restore_global(void *bbss, char *buffer, int sz)
static const char * fname(const char *name)
static Member_func members[]
#define ForAllSections(sec)
HocStruct hoc_Item * secelm_
int is_point_process(Object *)
PreSyn * nrn_gid2presyn(int gid)
static void spikes_on_correct_host(int cnt, int *g, int *dcnts, int tscnt, double *ts, Int2DblList *m)
static SecName2Sec & pycell_name2sec_map(Object *c)
static void nrnmpi_int_alltoallv(int *s, int *scnt, int *sdispl, int *r, int *rcnt, int *rdispl)
void(* PFIO)(int, Object *)
fprintf(stderr, "Don't know the location of params at %p\, pp)
virtual void cpy(int size, char *cp)
static double restore(void *v)
double nrn_call_mech_func(Symbol *s, int narg, Prop *p, int type)
virtual void d(int n, double &p)
void netrecv_pp(Point_process *)
static std::unique_ptr< PP2DE > pp2de
void buffer2gid(int gid, char *buffer, int size)
static int ignored(Prop *p)
virtual void s(char *cp, int chk=0)
int nrn_gid_exists(int gid)
void(* nrn_binq_enqueue_error_handler)(double, TQItem *)
void seccontents(Section *)
void nrn_gidout_iter(PFIO)
std::unordered_map< Point_process *, int > PointProcessMap
static void pycell_name2sec_maps_fill()
void nrn_fake_fire(int gid, double firetime, int fake_out)
short * nrn_is_artificial_
cTemplate ** nrn_pnt_template_
std::vector< TQItem * > TQItemList
static void nrnmpi_int_allgather(int *s, int *r, int n)
static std::unordered_map< void *, SecName2Sec > pycell_name2sec_maps
void section_exist_info(Section *)
void bbss_save_global(void *bbss, char *buffer, int sz)
virtual void d(int n, double &p)
void fanout(double, NetCvode *, NrnThread *)
virtual ~BBSS_TxtFileIn()
void bbss_restore(void *bbss, int gid, int npiece, char *buffer, int sz)
static void bbss_queuecheck()
HocStruct cTemplate * ctemplate
static void nrnmpi_dbl_alltoallv(double *s, int *scnt, int *sdispl, double *r, int *rcnt, int *rdispl)
Symbol * hoc_table_lookup(const char *, Symlist *)
static double save_gid(void *v)
ReceiveFunc * pnt_receive
static BBSaveState * bbss
std::unordered_map< Point_process *, DEList * > PP2DE
void net_send(void **, double *, Point_process *, double, double)
static TQItemList * tq_presyn_fanout
virtual void s(char *cp, int chk=0)
void hoc_pushpx(double *d)
static double save_test(void *v)
static bool use_spikecompress_
void hoc_call_ob_proc(Object *ob, Symbol *sym, int narg)
static double vector_play_init(void *v)
static void nrnmpi_dbl_allgatherv(double *s, double *r, int *n, int *dspl)
BBSS_BufferOut(char *buffer, int size)
static double save(void *v)
std::vector< SEWrap * > SEWrapList
static Node * node(Object *)
std::unordered_map< int, int > Int2Int
static std::unique_ptr< PointProcessMap > pp_ignore_map
static void scatteritems()
static void cb_gidobj(int gid, Object *obj)
Object ** hoc_objgetarg(int)
virtual void i(int &j, int chk=0)
void possible_presyn(int gid)
void bbss_restore_done(void *bbss)
SEWrap(const TQItem *, DEList *)
void node01(Section *, Node *)
static double restore_test_bin(void *v)
std::unordered_map< std::string, Section * > SecName2Sec
static std::unique_ptr< NetCon2DblList > nc2dblist
virtual void d(int n, double &p)
static void tqcallback(const TQItem *tq, int i)
virtual void s(char *cp, int chk=0)
virtual void pr(const char *, double t, NetCvode *)
void bbss_save_done(void *bbss)