1 #include <../../nrnconf.h> 10 #define nrnoc_fadvance_c 45 #if !defined(NRNMPI) || NRNMPI == 0 50 extern double chkarg(
int,
double low,
double high);
88 #define NONVINT_ODE_COUNT 5 91 #define CTBEGIN double wt = nrnmpi_wtime(); 92 #define CTADD nth->_ctime += nrnmpi_wtime() - wt; 98 #define ELIMINATE_T_ROUNDOFF 0 99 #if ELIMINATE_T_ROUNDOFF 108 double nrn_ndt_, nrn_tbase_, nrn_dt_;
110 if (
dt != nrn_dt_ ||
t != nrn_tbase_ + nrn_ndt_ * nrn_dt_) {
111 if (
nrnmpi_myid == 0)
Printf(
"nrn_chk_ndt t=%g dt=%g old nrn_tbase_=%g nrn_ndt_=%g nrn_dt_=%g\n",
112 t,
dt, nrn_tbase_, nrn_ndt_, nrn_dt_);
218 fprintf(
batch_file,
"%s\nbatch_run from t = %g to %g in steps of %g with dt = %g\n", comment,
t, tstop, tstep,
dt);
245 double tstop, tstep, tnext;
250 tstop =
chkarg(1,0.,1e20);
251 tstep =
chkarg(2, 0., 1e20);
341 #if ELIMINATE_T_ROUNDOFF 362 (*nrnmpi_v_transfer_)();
376 (*nrnmpi_v_transfer_)();
394 #if ELIMINATE_T_ROUNDOFF 403 for (i=1; i <
n; ++
i) {
409 (*nrn_allthread_handle)();
466 #if ELIMINATE_T_ROUNDOFF 468 nth->
_t = nrn_tbase_ + nth->nrn_ndt_ * nrn_dt_;
470 nth->
_t += .5 * nth->
_dt;
502 #if ELIMINATE_T_ROUNDOFF 504 nth->
_t = nrn_tbase_ + nth->nrn_ndt_ * nrn_dt_;
506 nth->
_t += .5 * nth->
_dt;
528 #if ELIMINATE_T_ROUNDOFF 530 nth->
_t = nrn_tbase_ + nth->nrn_ndt_ * nrn_dt_;
532 nth->
_t += .5 * nth->
_dt;
579 for (i=i1; i < i2; ++
i) {
583 for (i=i1; i < i2; ++
i) {
594 for (i=i1; i < i2; ++
i) {
601 for (i=i1; i < i2; ++
i) {
630 for (i = i1; i < i3 ; ++
i) {
634 for (i = i1; i < i3 ; ++
i) {
656 for (i = i1; i < i3 ; ++
i) {
660 for (i = i1; i < i3 ; ++
i) {
700 for (i=1; i <=
n; ++
i) {
705 for (inode = 0; inode < _nt->
end; ++
inode) {
711 sec = secorder[isec];
712 for (inode = 0; inode < sec->
nnode; ++
inode) {
755 (*nrnthread_v_transfer_)(_nt);
769 (*s)(_nt, tml->
ml, tml->
index);
773 hoc_warning(
"errno set during calculation of states", (
char*)0);
802 "%d errno set at t=%g during call to mechanism %s at node %d in section %s\n",
844 #if ELIMINATE_T_ROUNDOFF 845 nrn_ndt_ = 0.; nrn_dt_ =
dt; nrn_tbase_ = 0.;
867 for (i = 0; i < _nt->
end; ++
i) {
874 (*nrnthread_vi_compute_)(_nt);
883 (*nrnthread_v_transfer_)(_nt);
904 for (tml = nt->
tml; tml; tml = tml->
next) {
915 if (nrn_is_artificial_[i])
919 if (nrn_is_artificial_[i]) {
944 hoc_warning(
"errno set during call to INITIAL block", (
char *) 0);
1029 for (i = 1;
ifarg(i); ++
i) {
1044 for (tbl = nt->
tbl[bat]; tbl; tbl = tbl->
next) {
1064 for (
auto&
func: nonvint_block_list) {
1065 rval = (*func)(method, size, pd1, pd2, tid);
1082 nonvint_block_list.push_back(func);
1093 auto n = nonvint_block_list.size();
1094 for (
size_t i = 0; i <
n; ++
i) {
1095 if (func == nonvint_block_list[i]) {
1096 nonvint_block_list.erase(nonvint_block_list.begin() +
i);
1100 if (nonvint_block_list.empty()) {
1108 int rval = (*nrn_nonvint_block)(method, size, pd1, pd2, tid);
1123 #define der_(arg) p[der[arg]] 1124 #define var_(arg) p[var[arg]] 1131 double dt = nt->
_dt;
1135 (*func)(
p, ppvar, thread, nt);
1139 for (i = 0; i <
neqn; i++)
void nrn_solve(NrnThread *)
void(* nrn_allthread_handle)()
static std::vector< NonVintBlockItem > nonvint_block_list
static int step_group_end
void * ecalloc(size_t n, size_t size)
void long_difus_solve(int, NrnThread *)
int euler_thread(int neqn, int *var, int *der, double *p, int(*func)(double *, Datum *, Datum *, NrnThread *), Datum *ppvar, Datum *thread, NrnThread *nt)
void nrn_capacity_current(NrnThread *_nt, Memb_list *ml)
void nrn_multithread_job(void *(*job)(NrnThread *))
void nrn_fixed_step_group(int)
void * erealloc(void *ptr, size_t n)
void(* nrn_multisplit_setup_)()
struct NrnThreadMembList * next
short * nrn_is_artificial_
void nrn_extra_scatter_gather(int direction, int tid)
void nrn_daspk_init_step(double tt, double dteps, int upd)
void nrn_thread_table_check()
#define ITERATE(itm, lst)
int set_nonvint_block(NonVintBlockItem func)
int nrn_nonvint_block_exe(int method, int size, double *pd1, double *pd2, int tid)
Represent main neuron object computed by single thread.
NrnThreadBAList * tbl[BEFORE_AFTER_SIZE]
double chkarg(int, double low, double high)
static void update(NrnThread *)
static void dt2thread(double adt)
void nrn_print_matrix(NrnThread *_nt)
void verify_structure(void)
void nrn_ba(NrnThread *, int)
void(* nrnthread_vi_compute_)(NrnThread *nt)
void nrn_spike_exchange_init()
static void * nrn_ms_bksub_through_triang(NrnThread *)
void * nrn_multisplit_reduce_solve(NrnThread *)
_nrn_Fast_Imem * _nrn_fast_imem
int nrn_errno_check(int i)
double * hoc_pgetarg(int narg)
static int step_group_begin
#define NONVINT_ODE_COUNT
void(* nrnthread_v_transfer_)(NrnThread *nt)
int const size_t const size_t n
void(* nrnmpi_v_transfer_)()
void nonvint(NrnThread *nt)
static void * nrn_ms_bksub(NrnThread *)
void(* nrn_bamech_t)(Node *, double *, Datum *, Datum *, struct NrnThread *)
void(* Pvmi)(struct NrnThread *, Memb_list *, int)
void * nrn_multisplit_triang(NrnThread *)
void nrn_solver_prepare()
const char * secname(Section *sec)
void hoc_warning(const char *, const char *)
int hoc_errno_check(void)
#define nrn_nonvint_block_init(tid)
void hoc_execerror(const char *, const char *)
void fixed_record_continuous(NrnThread *nt)
static void * nrn_ms_reduce_solve(NrnThread *)
void nrn_calc_fast_imem(NrnThread *_nt)
void nrn_finitialize(int setv, double v)
fprintf(stderr, "Don't know the location of params at %p\, pp)
int unset_nonvint_block(NonVintBlockItem func)
void fixed_play_continuous(NrnThread *nt)
static void * nrn_fixed_step_group_thread(NrnThread *nth)
void nrn_fihexec(int type)
void nrn_seg_or_x_arg(int iarg, Section **psec, double *px)
void nrncvode_set_t(double t)
static double ** batch_var
static void phase_end(const char *name)
void nrn_deliver_events(NrnThread *)
static void phase_begin(const char *name)
void nrn_spike_exchange(NrnThread *nt)
nonvintblock_extern int(* nrn_nonvint_block)(int method, int length, double *pd1, double *pd2, int tid)
static void * nrn_fixed_step_lastpart(NrnThread *)
void * setup_tree_matrix(NrnThread *)
static void * nrn_fixed_step_thread(NrnThread *)
double * hoc_val_pointer(const char *s)
static void * daspk_init_step_thread(NrnThread *nt)
static void batch_close()
void deliver_net_events(NrnThread *)
int state_discon_allowed_
#define nrn_nonvint_block_fixed_step_solve(tid)
void nrn_update_2d(NrnThread *nt)
int nrn_nonvint_block_helper(int method, int size, double *pd1, double *pd2, int tid)
double var(InputIterator begin, InputIterator end)
Node * node_exact(Section *sec, double x)
int(* NonVintBlockItem)(int method, int size, double *pd1, double *pd2, int tid)
void second_order_cur(NrnThread *nt)
static void * nrn_ms_treeset_through_triang(NrnThread *)
void * nrn_multisplit_bksub(NrnThread *)
cTemplate ** nrn_pnt_template_
void nrn_calc_fast_imem_fixedstep_init(NrnThread *_nt)
struct NrnThreadBAList * next