1 #include <../../nrnconf.h>
21 #define nt_dt nrn_threads->_dt
22 #define nt_t nrn_threads->_t
95 if (
ctd_[0].cv_memb_list_ ==
nil) {
115 int i,
j, zneq, zneq_v, zneq_cap_v;
122 for (
int id = 0;
id <
nctd_; ++
id) {
130 if (cml->
index == EXTRACELL) {
170 printf(
"%d Cvode::init_eqn id=%d neq_v_=%d #nonvint=%d #nonvint_extra=%d nvsize=%d\n",
180 global_neq_ = nrnmpi_int_sum_reduce(
neq_);
185 for (
int id = 0;
id <
nctd_; ++
id) {
192 for (
i = 0;
i < zneq; ++
i) {
202 if (x != 0 && x < vtol) {
206 for (
i = 0;
i < zneq_cap_v; ++
i) {
216 for (
i = 0;
i < zneq_cap_v; ++
i) {
252 if (sc && ((
n = (*sc)(cml->
index)) > 0)) {
313 ncm->
ml->nodeindices =
new int[
n];
318 ncm->
ml->
data =
new double*[
n];
328 ncm->
ml->nodeindices[
n] = ml->nodeindices[
i];
354 int i,
j, in, ie,
k, zneq;
397 if (x != 0 && x < vtol) {
405 for (in = 0; in < _nt->
end; ++in) {
414 for (ie = 0; ie <
nlayer; ++ie) {
416 z.
pv_[
k] = nde->
v + ie;
433 if (sc && ((
n = (*sc)(cml->
index)) > 0)) {
456 N_Vector subvec = ((N_Vector*) N_VGetArrayPointer(
v))[tid];
457 return N_VGetArrayPointer(subvec);
459 return N_VGetArrayPointer(
v);
474 if (mf->ode_synonym) {
577 (*nrn_multisplit_solve_)();
648 if (mf->ode_matsol) {
650 Pvmi s = mf->ode_matsol;
651 (*s)(nt, ml, cml->
index);
654 hoc_warning(
"errno set during ode jacobian solve", (
char*) 0);
687 nrnmpi_assert_opstep(opmode_, nt->
_t);
700 (*nrnthread_v_transfer_)(nt);
741 nrnmpi_assert_opstep(opmode_, nt->
_t);
760 (*nrnthread_v_transfer_)(nt);
781 for (ba = baml; ba; ba = ba->
next) {
909 Pvmi s = mf->ode_spec;
911 (*s)(_nt, ml, cml->
index);
914 hoc_warning(
"errno set during ode evaluation", (
char*) 0);
945 (*s)(_nt, ml, cml->
index);
949 hoc_warning(
"errno set during calculation of states", (
char*)0);
953 }
else if (mf->singchan_) {
954 Pvmi s = mf->singchan_;
955 (*s)(_nt, ml, cml->
index);
963 for (
id = 0;
id <
nctd_; ++
id) {
974 for (
id = 0;
id <
nctd_; ++
id) {
985 for (
id = 0;
id <
nctd_; ++
id) {
997 for (
id = 0;
id <
nctd_; ++
id) {
1024 z.
record_ =
new PlayRecList(1);
1040 for (
long i = 0;
i < z.
record_->count(); ++
i) {
1054 for (
long i = 0;
i < z.
record_->count(); ++
i) {
1063 z.
play_ =
new PlayRecList(1);
1075 for (
long i = 0;
i < z.
play_->count(); ++
i) {
1076 z.
play_->item(
i)->continuous(tt);
1085 for (
long i = 0;
i < z.
play_->count(); ++
i) {
1086 z.
play_->item(
i)->continuous(tt);
void rhs_memb(CvMembList *, NrnThread *)
void fun_thread_ms_part2(NrnThread *nt)
void do_nonode(NrnThread *nt=0)
int solvex_thread_part2(NrnThread *nt)
void lhs_memb(CvMembList *, NrnThread *)
void play_continuous_thread(double t, NrnThread *)
void nocap_v(NrnThread *)
void fun_thread_transfer_part1(double t, double *y, NrnThread *nt)
void record_add(PlayRecord *)
void play_add(PlayRecord *)
int setup(N_Vector ypred, N_Vector fpred)
void play_continuous(double t)
void fun_thread_ms_part4(double *ydot, NrnThread *nt)
void nocap_v_part2(NrnThread *)
void fun_thread_transfer_part2(double *ydot, NrnThread *nt)
void new_no_cap_memb(CvodeThreadData &, NrnThread *)
void fun_thread_ms_part34(double *ydot, NrnThread *nt)
void fun_thread_ms_part1(double t, double *y, NrnThread *nt)
void record_continuous_thread(NrnThread *)
int solvex_thread_part3(double *b, NrnThread *nt)
void nocap_v_part3(NrnThread *)
void fun_thread(double t, double *y, double *ydot, NrnThread *nt)
void before_after(BAMechList *, NrnThread *)
void fun_thread_ms_part3(NrnThread *nt)
void scatter_y(double *, int)
double * n_vector_data(N_Vector, int)
void nocap_v_part1(NrnThread *)
void solvemem(NrnThread *)
int solvex_thread_part1(double *b, NrnThread *nt)
void scatter_ydot(double *, int)
void gather_ydot(N_Vector)
int solvex_thread(double *b, double *y, NrnThread *nt)
void error_weights(double *)
int nonvint_extra_offset_
CvMembList * cv_memb_list_
void delete_memb_list(CvMembList *)
CvMembList * no_cap_memb_
BAMechList * before_breakpoint_
BAMechList * after_solve_
BAMechList * before_step_
Symbol * hoc_table_lookup(const char *, Symlist *)
void hoc_warning(const char *, const char *)
void(* nrn_bamech_t)(Node *, double *, Datum *, Datum *, struct NrnThread *)
void(* nrn_ode_map_t)(int, double **, double **, double *, Datum *, double *, int)
int(* nrn_ode_count_t)(int)
void(* nrn_ode_synonym_t)(int, double **, Datum **)
void(* Pvmi)(struct NrnThread *, Memb_list *, int)
void nrn_multithread_job(void *(*job)(NrnThread *))
void(* nrn_multisplit_solve_)()
#define nrn_nonvint_block_ode_fun(size, y, ydot, tid)
#define nrn_nonvint_block_ode_count(offset, tid)
#define nrn_nonvint_block_jacobian(size, ypred, ydot, tid)
#define nrn_nonvint_block_ode_abstol(size, y, tid)
#define nrn_nonvint_block_ode_solve(size, b, y, tid)
int const size_t const size_t n
static philox4x32_key_t k
static void pr(N_Vector x)
void nrn_extra_scatter_gather(int, int)
void(* nrn_multisplit_setup_)()
void(* nrnthread_v_transfer_)(NrnThread *)
void long_difus_solve(int, NrnThread *)
static void * gather_y_thread(NrnThread *nt)
void nrn_mul_capacity(NrnThread *, Memb_list *)
void nrn_multisplit_nocap_v_part1(NrnThread *)
static N_Vector gather_vec
void nrndae_dkmap(double **, double **)
static void * gather_ydot_thread(NrnThread *nt)
void * nrn_multisplit_triang(NrnThread *)
void nrn_multisplit_adjust_rhs(NrnThread *)
void nrn_multisplit_nocap_v()
void * nrn_multisplit_bksub(NrnThread *)
void nrn_multisplit_nocap_v_part2(NrnThread *)
static void * nonode_thread(NrnThread *nt)
void nrn_div_capacity(NrnThread *, Memb_list *)
Symlist * hoc_built_in_symlist
void * nrn_multisplit_reduce_solve(NrnThread *)
void(* nrnmpi_v_transfer_)()
void nrn_multisplit_nocap_v_part3(NrnThread *)
Represent main neuron object computed by single thread.
_nrn_Fast_Imem * _nrn_fast_imem