14 #define IDX(x, y, z) ((z) + (y) *g->size_z + (x) *g->size_z * g->size_y)
15 #define INDEX(x, y, z) ((z) + (y) *grid->size_z + (x) *grid->size_z * grid->size_y)
16 #define ALPHA(x, y, z) (g->get_alpha(g->alpha, IDX(x, y, z)))
17 #define VOLFRAC(idx) (g->get_alpha(g->alpha, idx))
18 #define TORT(idx) (g->get_permeability(g->permeability, idx))
19 #define PERM(x, y, z) (g->get_permeability(g->permeability, IDX(x, y, z)))
20 #define SQ(x) ((x) * (x))
21 #define CU(x) ((x) * (x) * (x))
25 #define VOLUME_FRACTION 3
31 #define MAX(a, b) ((a) > (b) ? (a) : (b))
32 #define MIN(a, b) ((a) < (b) ? (a) : (b))
57 void(
double**,
double**,
double**,
double*,
double*,
double*,
double*,
double**,
double);
137 int insert(
int grid_list_index);
156 double*
const ydot_3d,
157 const double* cvode_states_1d,
158 double*
const ydot_1d) = 0;
213 double*
const ydot_3d,
214 const double* cvode_states_1d,
215 double*
const ydot_1d);
313 double*
const ydot_3d,
314 const double* cvode_states_1d,
315 double*
const ydot_1d);
369 extern double*
t_ptr;
390 extern "C" int ECS_insert(
int grid_list_index,
423 extern "C" int ICS_insert(
int grid_list_index,
double * induced_currents
unsigned char multicompartment_inititalized
double * induced_currents_scale
void apply_node_flux3D(double dt, double *states)
void set_tortuosity(PyHocObject *)
int induced_current_count
int * all_reaction_indices
int * proc_induced_current_count
void do_grid_currents(double *, double, int)
void variable_step_diffusion(const double *states, double *ydot)
struct ECSAdiDirection * ecs_adi_dir_z
double * set_rxd_currents(int, int *, PyHocObject **)
void initialize_multicompartment_reaction()
void set_volume_fraction(PyHocObject *)
struct ECSAdiDirection * ecs_adi_dir_y
int add_multicompartment_reaction(int, int *, int)
struct ECSAdiGridData * ecs_tasks
void clear_multicompartment_reaction()
void variable_step_ode_solve(double *RHS, double dt)
int total_reaction_states
void variable_step_hybrid_connections(const double *cvode_states_3d, double *const ydot_3d, const double *cvode_states_1d, double *const ydot_1d)
int * proc_num_reaction_states
int * proc_induced_current_offset
struct ECSAdiDirection * ecs_adi_dir_x
void set_num_threads(const int n)
void hybrid_connections()
void scatter_grid_concentrations()
double * all_reaction_states
double * local_induced_currents
void set_diffusion(double *, int)
void do_multicompartment_reactions(double *)
int * induced_currents_index
double(* get_alpha)(double *, int)
virtual void apply_node_flux3D(double dt, double *states)=0
virtual void variable_step_hybrid_connections(const double *cvode_states_3d, double *const ydot_3d, const double *cvode_states_1d, double *const ydot_1d)=0
virtual void hybrid_connections()=0
int64_t * ics_surface_nodes_per_seg
virtual void variable_step_diffusion(const double *states, double *ydot)=0
Concentration_Pair * concentration_list
virtual void volume_setup()=0
virtual void set_num_threads(const int n)=0
double(* get_permeability)(double *, int)
virtual void do_grid_currents(double *, double, int)=0
virtual void variable_step_ode_solve(double *RHS, double dt)=0
Hybrid_data * hybrid_data
int64_t * ics_surface_nodes_per_seg_start_indices
PyObject ** node_flux_src
unsigned char VARIABLE_ECS_VOLUME
int insert(int grid_list_index)
double ** ics_current_seg_ptrs
double * ics_scale_factors
Current_Triple * current_list
std::vector< neuron::container::data_handle< double > > ics_concentration_seg_handles
virtual void set_diffusion(double *, int)=0
ssize_t num_concentrations
virtual void scatter_grid_concentrations()=0
struct ICSAdiDirection * ics_adi_dir_x
void run_threaded_ics_dg_adi(struct ICSAdiDirection *)
void scatter_grid_concentrations()
void hybrid_connections()
void apply_node_flux3D(double dt, double *states)
struct ICSAdiDirection * ics_adi_dir_y
void do_multicompartment_reactions(double *)
void divide_y_work(const int nthreads)
struct ICSAdiGridData * ics_tasks
struct ICSAdiDirection * ics_adi_dir_z
int add_multicompartment_reaction(int, int *, int)
void variable_step_ode_solve(double *RHS, double dt)
void variable_step_diffusion(const double *states, double *ydot)
void divide_x_work(const int nthreads)
void initialize_multicompartment_reaction()
void set_diffusion(double *, int)
void do_grid_currents(double *, double, int)
void set_num_threads(const int n)
void divide_z_work(const int nthreads)
void clear_multicompartment_reaction()
void variable_step_hybrid_connections(const double *cvode_states_3d, double *const ydot_3d, const double *cvode_states_1d, double *const ydot_1d)
double * set_rxd_currents(int, int *, PyHocObject **)
int set_diffusion(int, int, double *, int)
void make_dt_ptr(PyHocObject *my_dt_ptr)
int ICS_insert_inhom(int grid_list_index, PyHocObject *my_states, long num_nodes, long *neighbors, long *x_line_defs, long x_lines_length, long *y_line_defs, long y_lines_length, long *z_line_defs, long z_lines_length, double *dcs, double dx, bool is_diffusable, double atolscale, double *ics_alphas)
int ICS_insert(int grid_list_index, PyHocObject *my_states, long num_nodes, long *neighbors, long *x_line_defs, long x_lines_length, long *y_line_defs, long y_lines_length, long *z_line_defs, long z_lines_length, double *dcs, double dx, bool is_diffusable, double atolscale, double *ics_alphas)
void(double **, double **, double **, double *, double *, double *, double *, double **, double) ReactionRate
void empty_list(int list_index)
Grid_node * ICS_make_Grid(PyHocObject *my_states, long num_nodes, long *neighbors, long *x_line_defs, long x_lines_length, long *y_line_defs, long y_lines_length, long *z_line_defs, long z_lines_length, double *dcs, double dx, bool is_diffusable, double atolscale, double *ics_alphas)
void(double *, double *, double *, double *) ECSReactionRate
void apply_node_flux(int, long *, double *, PyObject **, double, double *)
int ECS_insert(int grid_list_index, PyHocObject *my_states, int my_num_states_x, int my_num_states_y, int my_num_states_z, double my_dc_x, double my_dc_y, double my_dc_z, double my_dx, double my_dy, double my_dz, PyHocObject *my_alpha, PyHocObject *my_permeability, int, double, double)
Grid_node * Parallel_grids[100]
int remove(Grid_node **head, Grid_node *find)
int const size_t const size_t n
int find(const int, const int, const int, const int, const int)
neuron::container::data_handle< double > destination
neuron::container::data_handle< double > source
void(* ecs_dg_adi_dir)(ECS_Grid_node *, const double, const int, const int, double const *const, double *const, double *const)
ECSAdiDirection * ecs_adi_dir
long * num_3d_indices_per_1d_seg
long * ordered_start_stop_indices
void(* ics_dg_adi_dir)(ICS_Grid_node *g, int, int, int, double, double *, double *, double *, double *, double *, double *)
long * line_start_stop_indices
ICSAdiDirection * ics_adi_dir
uint64_t * mc3d_indices_offsets
unsigned char * subregion
unsigned int num_params_involved
unsigned int num_species_involved
ECSReactionRate * reaction