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_) {
112 Printf(
"nrn_chk_ndt t=%g dt=%g old nrn_tbase_=%g nrn_ndt_=%g nrn_dt_=%g\n",
224 "%s\nbatch_run from t = %g to %g in steps of %g with dt = %g\n",
256 double tstop, tstep, tnext;
261 tstop =
chkarg(1, 0., 1e20);
262 tstep =
chkarg(2, 0., 1e20);
355 #if ELIMINATE_T_ROUNDOFF
376 (*nrnmpi_v_transfer_)();
390 (*nrnmpi_v_transfer_)();
397 (*nrn_allthread_handle)();
410 #if ELIMINATE_T_ROUNDOFF
419 for (
i = 1;
i <
n; ++
i) {
425 (*nrn_allthread_handle)();
444 (*nrn_allthread_handle)();
454 (*nrn_allthread_handle)();
494 #if ELIMINATE_T_ROUNDOFF
496 nth->
_t = nrn_tbase_ + nth->nrn_ndt_ * nrn_dt_;
498 nth->
_t += .5 * nth->
_dt;
530 #if ELIMINATE_T_ROUNDOFF
532 nth->
_t = nrn_tbase_ + nth->nrn_ndt_ * nrn_dt_;
534 nth->
_t += .5 * nth->
_dt;
555 #if ELIMINATE_T_ROUNDOFF
557 nth->
_t = nrn_tbase_ + nth->nrn_ndt_ * nrn_dt_;
559 nth->
_t += .5 * nth->
_dt;
605 for (
i = i1;
i < i2; ++
i) {
609 for (
i = i1;
i < i2; ++
i) {
620 for (
i = i1;
i < i2; ++
i) {
627 for (
i = i1;
i < i2; ++
i) {
640 (*nrnthread_vi_compute_)(_nt);
660 for (
i = i1;
i < i3; ++
i) {
664 for (
i = i1;
i < i3; ++
i) {
686 for (
i = i1;
i < i3; ++
i) {
690 for (
i = i1;
i < i3; ++
i) {
729 for (
i = 1;
i <=
n; ++
i) {
734 for (inode = 0; inode < _nt->
end; ++inode) {
736 Printf(
"%d %g %g %g %g\n",
746 for (inode = 0; inode <
sec->nnode; ++inode) {
747 nd =
sec->pnode[inode];
748 Printf(
"%d %d %g %g %g %g\n",
768 id = (int)
chkarg(2, 1., 4.);
802 (*nrnthread_v_transfer_)(_nt);
810 for (tml = _nt->
tml; tml; tml = tml->
next)
820 (*s)(_nt, tml->
ml, tml->
index);
826 hoc_warning(
"errno set during calculation of states", (
char*) 0);
842 "%d errno=%d at t=%g during call to mechanism %s\n",
857 "%d errno set at t=%g during call to mechanism %s at node %d in section %s\n",
903 #if ELIMINATE_T_ROUNDOFF
928 for (
i = 0;
i < _nt->
end; ++
i) {
935 (*nrnthread_vi_compute_)(_nt);
944 (*nrnthread_v_transfer_)(_nt);
965 for (tml = nt->
tml; tml; tml = tml->
next) {
995 (*s)((
Node*)0,
p->param,
p->dparam);
1005 hoc_warning(
"errno set during call to INITIAL block", (
char*) 0);
1048 (*nrn_allthread_handle)();
1107 for (tbl = nt->
tbl[bat]; tbl; tbl = tbl->
next) {
1128 rval = (*func)(method, size, pd1, pd2, tid);
1156 for (
size_t i = 0;
i <
n; ++
i) {
1170 int rval = (*nrn_nonvint_block)(method, size, pd1, pd2, tid);
1185 #define der_(arg) p[der[arg]]
1186 #define var_(arg) p[var[arg]]
1198 double dt = nt->
_dt;
1202 (*func)(
p, ppvar, thread, nt);
const char * secname(Section *sec)
Node * node_exact(Section *sec, double x)
void nrn_capacity_current(NrnThread *_nt, Memb_list *ml)
short * nrn_is_artificial_
void fixed_record_continuous(NrnThread *nt)
void deliver_net_events(NrnThread *)
void fixed_play_continuous(NrnThread *nt)
void nrn_solver_prepare()
void nrn_deliver_events(NrnThread *)
void second_order_cur(NrnThread *nt)
void nrn_update_2d(NrnThread *nt)
static void * nrn_fixed_step_group_thread(NrnThread *nth)
static void * nrn_ms_bksub_through_triang(NrnThread *)
void(* nrnthread_vi_compute_)(NrnThread *nt)
void(* nrn_multisplit_setup_)()
static std::vector< NonVintBlockItem > nonvint_block_list
static double ** batch_var
double chkarg(int, double low, double high)
static void * nrn_fixed_step_lastpart(NrnThread *)
static void update(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_calc_fast_imem(NrnThread *_nt)
static int step_group_end
int unset_nonvint_block(NonVintBlockItem func)
static void * daspk_init_step_thread(NrnThread *nt)
void * nrn_multisplit_reduce_solve(NrnThread *)
void nrncvode_set_t(double t)
int set_nonvint_block(NonVintBlockItem func)
static void * nrn_ms_bksub(NrnThread *)
void nrn_print_matrix(NrnThread *_nt)
void * setup_tree_matrix(NrnThread *)
int nrn_nonvint_block_exe(int method, int size, double *pd1, double *pd2, int tid)
void nrn_daspk_init_step(double tt, double dteps, int upd)
int nrn_nonvint_block_helper(int method, int size, double *pd1, double *pd2, int tid)
void(* nrn_allthread_handle)()
static void * nrn_fixed_step_thread(NrnThread *)
void nrn_solve(NrnThread *)
int state_discon_allowed_
int(* NonVintBlockItem)(int method, int size, double *pd1, double *pd2, int tid)
void nrn_fixed_step_group(int)
void * nrn_multisplit_triang(NrnThread *)
static void * nrn_ms_reduce_solve(NrnThread *)
void nrn_calc_fast_imem_fixedstep_init(NrnThread *_nt)
static int step_group_begin
void * nrn_multisplit_bksub(NrnThread *)
void nonvint(NrnThread *nt)
void verify_structure(void)
void nrn_finitialize(int setv, double v)
void nrn_extra_scatter_gather(int direction, int tid)
static void dt2thread(double adt)
static void * nrn_ms_treeset_through_triang(NrnThread *)
#define NONVINT_ODE_COUNT
static void batch_close()
void(* nrnthread_v_transfer_)(NrnThread *nt)
int nrn_errno_check(int i)
void nrn_ba(NrnThread *, int)
void(* nrnmpi_v_transfer_)()
void nrn_fihexec(int type)
void hoc_execerror(const char *, const char *)
int hoc_errno_check(void)
double * hoc_val_pointer(const char *s)
void hoc_warning(const char *, const char *)
void hoc_retpushx(double x)
double * hoc_pgetarg(int narg)
void * erealloc(void *ptr, size_t n)
void * ecalloc(size_t n, size_t size)
double var(InputIterator begin, InputIterator end)
void(* nrn_bamech_t)(Node *, double *, Datum *, Datum *, struct NrnThread *)
void(* Pvmi)(struct NrnThread *, Memb_list *, int)
#define ITERATE(itm, lst)
void nrn_multithread_job(void *(*job)(NrnThread *))
void nrn_thread_table_check()
#define ClassicalNODEB(n)
#define ClassicalNODEA(n)
static void phase_begin(const char *name)
static void phase_end(const char *name)
cTemplate ** nrn_pnt_template_
void nrn_spike_exchange_init()
nonvintblock_extern int(* nrn_nonvint_block)(int method, int length, double *pd1, double *pd2, int tid)
#define nrn_nonvint_block_init(tid)
#define nrn_nonvint_block_fixed_step_solve(tid)
void nrn_seg_or_x_arg(int iarg, Section **psec, double *px)
void nrn_spike_exchange(struct NrnThread *nt)
int const size_t const size_t n
void long_difus_solve(int, NrnThread *)
struct NrnThreadBAList * next
Represent main neuron object computed by single thread.
_nrn_Fast_Imem * _nrn_fast_imem
NrnThreadBAList * tbl[BEFORE_AFTER_SIZE]
struct NrnThreadMembList * next