1 #include <../../nrnconf.h> 21 #define nt_dt nrn_threads->_dt 22 #define nt_t nrn_threads->_t 96 if (
ctd_[0].cv_memb_list_ ==
nil) {
116 int i,
j, zneq, zneq_v, zneq_cap_v;
123 for (
int id = 0;
id <
nctd_; ++
id) {
131 if (cml->
index == EXTRACELL) {
171 printf(
"%d Cvode::init_eqn id=%d neq_v_=%d #nonvint=%d #nonvint_extra=%d nvsize=%d\n",
179 global_neq_ = nrnmpi_int_sum_reduce(
neq_);
184 for (
int id = 0;
id <
nctd_; ++
id) {
191 for (i=0; i < zneq; ++
i) {
201 if (x != 0 && x < vtol) {
205 for (i=0; i < zneq_cap_v; ++
i) {
215 for (i=0; i < zneq_cap_v; ++
i) {
251 if (sc && ( (n = (*sc)(cml->
index)) > 0)) {
288 if (n == 0)
continue;
303 ncm->
ml->nodeindices =
new int[
n];
308 ncm->
ml->
data =
new double*[
n];
318 ncm->
ml->nodeindices[
n] = ml->nodeindices[
i];
344 int i,
j, in, ie,
k, zneq;
377 for (i=0; i <
neq_; ++
i) {
387 if (x != 0 && x < vtol) {
395 for (in = 0; in < _nt->
end; ++in) {
403 for (ie=0; ie <
nlayer; ++ie) {
405 z.
pv_[
k] = nde->
v + ie;
422 if (sc && ( (n = (*sc)(cml->
index)) > 0)) {
435 if (!v) {
return 0; }
437 N_Vector subvec = ((N_Vector*)N_VGetArrayPointer(v))[tid];
438 return N_VGetArrayPointer(subvec);
440 return N_VGetArrayPointer(v);
455 if (mf->ode_synonym) {
524 if (
nth_) {
return 0; }
543 if (z.
nvsize_ == 0) {
return 0; }
553 (*nrn_multisplit_solve_)();
584 if (z.
nvsize_ == 0) {
return 0; }
621 if (mf->ode_matsol) {
623 Pvmi s = mf->ode_matsol;
624 (*s)(nt, ml, cml->
index);
627 hoc_warning(
"errno set during ode jacobian solve", (
char*)0);
648 if (nt->
_dt == 0.) { nt->
_dt = 1
e-8; }
652 if (z.
nvsize_ == 0) {
return; }
656 nrnmpi_assert_opstep(opmode_, nt->
_t);
664 if (z.
nvsize_ == 0) {
return; }
667 (*nrnthread_v_transfer_)(nt);
698 if (nt->
_dt == 0.) { nt->
_dt = 1
e-8; }
705 nrnmpi_assert_opstep(opmode_, nt->
_t);
724 (*nrnthread_v_transfer_)(nt);
728 if (z.nvsize_ == 0) {
return; }
743 for (ba = baml; ba; ba = ba->
next) {
871 Pvmi s = mf->ode_spec;
873 (*s)(_nt, ml, cml->
index);
876 hoc_warning(
"errno set during ode evaluation", (
char*)0);
907 (*s)(_nt, ml, cml->
index);
911 hoc_warning(
"errno set during calculation of states", (
char*)0);
915 }
else if (mf->singchan_) {
916 Pvmi s = mf->singchan_;
917 (*s)(_nt, ml, cml->
index);
970 for (i=0; i <
nctd_; ++
i) {
986 z.
record_ =
new PlayRecList(1);
1002 for (
long i=0; i < z.
record_->count(); ++
i) {
1016 for (
long i=0;
i < z.
record_->count(); ++
i) {
1025 z.
play_ =
new PlayRecList(1);
1027 z.
play_->append(pr);
1037 for (
long i=0;
i < z.
play_->count(); ++
i) {
1038 z.
play_->item(
i)->continuous(tt);
1047 for (
long i=0;
i < z.
play_->count(); ++
i) {
1048 z.
play_->item(
i)->continuous(tt);
int nonvint_extra_offset_
void lhs_memb(CvMembList *, NrnThread *)
void fun_thread_ms_part4(double *ydot, NrnThread *nt)
void long_difus_solve(int, NrnThread *)
void nrn_multithread_job(void *(*job)(NrnThread *))
void nocap_v_part3(NrnThread *)
int solvex_thread_part3(double *b, NrnThread *nt)
void * nrn_multisplit_triang(NrnThread *)
void nrn_extra_scatter_gather(int, int)
void nrn_mul_capacity(NrnThread *, Memb_list *)
#define nrn_nonvint_block_ode_abstol(size, y, tid)
int solvex_thread_part1(double *b, NrnThread *nt)
#define nrn_nonvint_block_jacobian(size, ypred, ydot, tid)
double * n_vector_data(N_Vector, int)
void rhs_memb(CvMembList *, NrnThread *)
Represent main neuron object computed by single thread.
void fun_thread_ms_part1(double t, double *y, NrnThread *nt)
void fun_thread_ms_part2(NrnThread *nt)
void record_continuous_thread(NrnThread *)
CvMembList * no_cap_memb_
static philox4x32_key_t k
void scatter_y(double *, int)
BAMechList * after_solve_
void fun_thread(double t, double *y, double *ydot, NrnThread *nt)
static void pr(N_Vector x)
_nrn_Fast_Imem * _nrn_fast_imem
void fun_thread_transfer_part1(double t, double *y, NrnThread *nt)
void(* nrn_ode_synonym_t)(int, double **, Datum **)
void nrn_multisplit_nocap_v_part2(NrnThread *)
void fun_thread_ms_part3(NrnThread *nt)
void nocap_v(NrnThread *)
void error_weights(double *)
void nocap_v_part1(NrnThread *)
void record_add(PlayRecord *)
int const size_t const size_t n
void(* nrn_bamech_t)(Node *, double *, Datum *, Datum *, struct NrnThread *)
void(* Pvmi)(struct NrnThread *, Memb_list *, int)
void hoc_warning(const char *, const char *)
int solvex_thread(double *b, double *y, NrnThread *nt)
void before_after(BAMechList *, NrnThread *)
void nrn_div_capacity(NrnThread *, Memb_list *)
void nrndae_dkmap(double **, double **)
void nocap_v_part2(NrnThread *)
void nrn_multisplit_adjust_rhs(NrnThread *)
BAMechList * before_breakpoint_
void new_no_cap_memb(CvodeThreadData &, NrnThread *)
void nrn_multisplit_nocap_v_part3(NrnThread *)
void(* nrnthread_v_transfer_)(NrnThread *)
void nrn_multisplit_nocap_v_part1(NrnThread *)
static void * gather_y_thread(NrnThread *nt)
void do_nonode(NrnThread *nt=0)
void solvemem(NrnThread *)
void scatter_ydot(double *, int)
static N_Vector gather_vec
#define nrn_nonvint_block_ode_fun(size, y, ydot, tid)
void fun_thread_transfer_part2(double *ydot, NrnThread *nt)
void play_continuous(double t)
void(* nrnmpi_v_transfer_)()
Symbol * hoc_table_lookup(const char *, Symlist *)
void fun_thread_ms_part34(double *ydot, NrnThread *nt)
#define nrn_nonvint_block_ode_solve(size, b, y, tid)
static void * gather_ydot_thread(NrnThread *nt)
static void * nonode_thread(NrnThread *nt)
void nrn_multisplit_nocap_v()
#define nrn_nonvint_block_ode_count(offset, tid)
void delete_memb_list(CvMembList *)
CvMembList * cv_memb_list_
Symlist * hoc_built_in_symlist
void(* nrn_ode_map_t)(int, double **, double **, double *, Datum *, double *, int)
void gather_ydot(N_Vector)
void(* nrn_multisplit_setup_)()
int(* nrn_ode_count_t)(int)
int setup(N_Vector ypred, N_Vector fpred)
int solvex_thread_part2(NrnThread *nt)
void play_continuous_thread(double t, NrnThread *)
void play_add(PlayRecord *)
void * nrn_multisplit_bksub(NrnThread *)
BAMechList * before_step_
void(* nrn_multisplit_solve_)()
void * nrn_multisplit_reduce_solve(NrnThread *)