NEURON
rxd.h
Go to the documentation of this file.
1 #include <pthread.h>
2 #include <matrix2.h>
3 /*borrowed from Meschach Version 1.2b*/
4 #define v_get_val(x, i) ((x)->ve[(i)])
5 #define m_get_val(A, i, j) ((A)->me[(i)][(j)])
6 #define SPECIES_ABSENT -1
7 #define PREFETCH 4
8 
9 typedef void (*fptr)(void);
10 
11 typedef struct OcPtrVector_ {
12  PyObject_HEAD struct OcPtrVector_ (*newOcPtrVector)();
14  int (*size)(int);
15  void (*resize)();
16  void (*pset)(int, double*);
17  double (*getval)(int);
18  void (*setval)(int, double);
19  void (*scatter)(double*, int);
20  void (*gather)(double*, int);
21  void (*ptr_update_cmd)(void*);
23  void* update_cmd_;
24  int size_;
25  double** pd_;
27 /*
28  OcPtrVector* newOcPtrVector();
29  } ;
30 */
31 
32 typedef struct {
34  int idx;
35 } ReactSet;
36 
37 typedef struct {
41 
42 
43 typedef struct {
45  int onset, offset;
46  double* val;
47 } CurrentData;
48 
49 
50 typedef struct SpeciesIndexList {
51  int id;
52  double atolscale;
53  int* indices;
54  int length;
57 
58 typedef struct ICSReactions {
64  int*** state_idx; /*[segment][species][region]*/
65  int icsN; /*total number species*regions per segment*/
66  /*NOTE: icsN != num_species*num_regions as every species may not be defined
67  *on every region - the missing elements of state_idx are SPECIES_ABSENT*/
68 
69  /*ECS for MultiCompartment reactions*/
72  double*** ecs_state; /*[segment][ecs_species]*/
75  int** ecs_index;
76  int ecsN; /*total number of ecs species*regions per segment*/
77 
78  int num_mult;
79  double** mc_multiplier;
81  double** vptrs;
82  struct ICSReactions* next;
84 
85 typedef struct {
86  /*variables for reactions*/
91  double* result_array;
92  double* result_array_dx;
93  double* result_ecs;
94  double* result_ecs_dx;
96  VEC* x;
97  VEC* b;
99 
101 
102 typedef struct TaskList {
103  void* (*task)(void*);
104  void* args;
105  void* result;
106  struct TaskList* next;
108 
109 typedef struct TaskQueue {
110  pthread_mutex_t* task_mutex;
111  pthread_cond_t* task_cond;
112  pthread_mutex_t* waiting_mutex;
113  pthread_cond_t* waiting_cond;
114  int length;
115  struct TaskList* first;
116  struct TaskList* last;
118 
119 extern "C" void set_num_threads(const int);
120 void _fadvance(void);
121 void _fadvance_fixed_step_3D(void);
122 
123 extern "C" int get_num_threads(void);
127 
128 void dg_transfer_data(AdiLineData* const, double* const, int const, int const, int const);
129 void ecs_run_threaded_dg_adi(const int, const int, ECS_Grid_node*, ECSAdiDirection*, const int);
131 void* do_reactions(void*);
132 
133 void current_reaction(double* states);
134 
138  int,
139  int,
140  int,
141  double,
142  double*,
143  double*,
144  double*,
145  double*,
146  double*,
147  double*);
149  int,
150  int,
151  int,
152  double,
153  double*,
154  double*,
155  double*,
156  double*,
157  double*,
158  double*);
160  int,
161  int,
162  int,
163  double,
164  double*,
165  double*,
166  double*,
167  double*,
168  double*,
169  double*);
171  int,
172  int,
173  int,
174  double,
175  double*,
176  double*,
177  double*,
178  double*,
179  double*,
180  double*);
182  int,
183  int,
184  int,
185  double,
186  double*,
187  double*,
188  double*,
189  double*,
190  double*,
191  double*);
193  int,
194  int,
195  int,
196  double,
197  double*,
198  double*,
199  double*,
200  double*,
201  double*,
202  double*);
203 
204 /*Variable step function declarations*/
205 void _rhs_variable_step(const double*, double*);
206 
207 void _ode_reinit(double*);
208 
209 int ode_count(const int);
210 
211 extern "C" void scatter_concentrations(void);
212 
213 
214 int find(const int, const int, const int, const int, const int);
215 
218  const double*,
219  double* const,
220  const double*,
221  double* const);
222 
223 void _ics_rhs_variable_step_helper(ICS_Grid_node*, double const* const, double*);
224 void _rhs_variable_step_helper(Grid_node*, double const* const, double*);
225 
226 void ics_ode_solve(double, double*, const double*);
227 void ics_ode_solve_helper(ICS_Grid_node*, double, double*);
228 
229 void _rhs_variable_step_helper_tort(Grid_node*, double const* const, double*);
230 
231 void _rhs_variable_step_helper_vol(Grid_node*, double const* const, double*);
232 
233 void set_num_threads_3D(int n);
234 
235 void _rhs_variable_step_ecs(const double*, double*);
236 
237 void clear_rates_ecs();
238 void do_ics_reactions(double*, double*, double*, double*);
239 void get_all_reaction_rates(double*, double*, double*);
240 void _ecs_ode_reinit(double*);
241 void do_currents(Grid_node*, double*, double, int);
242 void TaskQueue_add_task(TaskQueue*, void* (*task)(void* args), void*, void*);
243 void* TaskQueue_exe_tasks(void*);
244 void start_threads(const int);
246 void ecs_atolscale(double*);
247 void apply_node_flux3D(Grid_node*, double, double*);
void(* ReactionRate)(double **, double **, double **, double *, double *, double *, double *, double **, double)
Definition: grids.h:87
void
int const size_t const size_t n
Definition: nrngsl.h:11
#define g
Definition: passive0.cpp:21
double * states
Definition: rxd.cpp:62
void _ics_variable_hybrid_helper(ICS_Grid_node *, const double *, double *const, const double *, double *const)
void _ics_rhs_variable_step_helper(ICS_Grid_node *, double const *const, double *)
void _rhs_variable_step_ecs(const double *, double *)
void ecs_atolscale(double *)
void _rhs_variable_step(const double *, double *)
Definition: rxd.cpp:1268
void dg_transfer_data(AdiLineData *const, double *const, int const, int const, int const)
void _ecs_ode_reinit(double *)
void set_num_threads(const int)
Definition: rxd.cpp:1160
struct TaskQueue TaskQueue
void set_num_threads_3D(int n)
void clear_rates_ecs()
void ecs_run_threaded_dg_adi(const int, const int, ECS_Grid_node *, ECSAdiDirection *, const int)
ReactGridData * create_threaded_reactions(const int)
void ecs_set_adi_tort(ECS_Grid_node *)
Definition: rxd_vol.cpp:773
void ics_dg_adi_z(ICS_Grid_node *g, int, int, int, double, double *, double *, double *, double *, double *, double *)
void ecs_set_adi_vol(ECS_Grid_node *)
Definition: rxd_vol.cpp:411
void run_threaded_deltas(ICS_Grid_node *g, ICSAdiDirection *ics_adi_dir)
void ics_ode_solve(double, double *, const double *)
void ics_ode_solve_helper(ICS_Grid_node *, double, double *)
void scatter_concentrations(void)
void * TaskQueue_exe_tasks(void *)
Definition: rxd.cpp:1116
void do_currents(Grid_node *, double *, double, int)
void _rhs_variable_step_helper(Grid_node *, double const *const, double *)
void * do_reactions(void *)
void ics_dg_adi_x_inhom(ICS_Grid_node *g, int, int, int, double, double *, double *, double *, double *, double *, double *)
void TaskQueue_sync(TaskQueue *)
Definition: rxd.cpp:1187
struct SpeciesIndexList SpeciesIndexList
struct TaskList TaskList
int find(const int, const int, const int, const int, const int)
void ics_dg_adi_z_inhom(ICS_Grid_node *g, int, int, int, double, double *, double *, double *, double *, double *, double *)
void TaskQueue_add_task(TaskQueue *, void *(*task)(void *args), void *, void *)
void run_threaded_ics_dg_adi(ICS_Grid_node *g, ICSAdiDirection *ics_adi_dir)
void ecs_set_adi_homogeneous(ECS_Grid_node *)
void _rhs_variable_step_helper_tort(Grid_node *, double const *const, double *)
Definition: rxd_vol.cpp:786
void _ode_reinit(double *)
Definition: rxd.cpp:1249
void do_ics_reactions(double *, double *, double *, double *)
Definition: rxd.cpp:1797
struct ICSReactions ICSReactions
int get_num_threads(void)
Definition: rxd.cpp:1195
void(* fptr)(void)
Definition: rxd.h:9
int ode_count(const int)
void _fadvance_fixed_step_3D(void)
void ics_dg_adi_y(ICS_Grid_node *g, int, int, int, double, double *, double *, double *, double *, double *, double *)
void _ics_hybrid_helper(ICS_Grid_node *)
void get_all_reaction_rates(double *, double *, double *)
Definition: rxd.cpp:1805
void apply_node_flux3D(Grid_node *, double, double *)
void _rhs_variable_step_helper_vol(Grid_node *, double const *const, double *)
Definition: rxd_vol.cpp:895
void start_threads(const int)
Definition: rxd.cpp:1068
struct OcPtrVector_ OcPtrVector
void ics_dg_adi_x(ICS_Grid_node *g, int, int, int, double, double *, double *, double *, double *, double *, double *)
void _fadvance(void)
Definition: rxd.cpp:1200
void current_reaction(double *states)
void ics_dg_adi_y_inhom(ICS_Grid_node *g, int, int, int, double, double *, double *, double *, double *, double *, double *)
double * val
Definition: rxd.h:46
Grid_node * g
Definition: rxd.h:44
int offset
Definition: rxd.h:45
int num_segments
Definition: rxd.h:63
struct ICSReactions * next
Definition: rxd.h:82
int num_species
Definition: rxd.h:60
int ** ecs_index
Definition: rxd.h:75
int * ecs_offset_index
Definition: rxd.h:73
ECS_Grid_node ** ecs_grid
Definition: rxd.h:74
int icsN
Definition: rxd.h:65
int num_params
Definition: rxd.h:62
int num_ecs_params
Definition: rxd.h:71
int num_ecs_species
Definition: rxd.h:70
int * mc_flux_idx
Definition: rxd.h:80
double ** vptrs
Definition: rxd.h:81
double *** ecs_state
Definition: rxd.h:72
ReactionRate reaction
Definition: rxd.h:59
int ecsN
Definition: rxd.h:76
int num_mult
Definition: rxd.h:78
double ** mc_multiplier
Definition: rxd.h:79
int num_regions
Definition: rxd.h:61
int *** state_idx
Definition: rxd.h:64
Definition: matrix.h:73
void(* gather)(double *, int)
Definition: rxd.h:20
PyObject_HEAD struct OcPtrVector_(* newOcPtrVector)()
Definition: rxd.h:12
void(* resize)()
Definition: rxd.h:15
void(* ptr_update)()
Definition: rxd.h:22
void(* deleteOcPtrVector)()
Definition: rxd.h:13
void(* ptr_update_cmd)(void *)
Definition: rxd.h:21
int size_
Definition: rxd.h:24
void * update_cmd_
Definition: rxd.h:23
double ** pd_
Definition: rxd.h:25
void(* setval)(int, double)
Definition: rxd.h:18
int(* size)(int)
Definition: rxd.h:14
void(* pset)(int, double *)
Definition: rxd.h:16
void(* scatter)(double *, int)
Definition: rxd.h:19
double(* getval)(int)
Definition: rxd.h:17
Definition: matrix.h:87
ReactSet * onset
Definition: rxd.h:38
ReactSet * offset
Definition: rxd.h:39
Definition: rxd.h:32
int idx
Definition: rxd.h:34
Reaction * reaction
Definition: rxd.h:33
VEC * b
Definition: rxd.h:97
double * states_for_reaction_dx
Definition: rxd.h:88
double * ecs_states_for_reaction
Definition: rxd.h:89
double * result_array
Definition: rxd.h:91
VEC * x
Definition: rxd.h:96
double * result_ecs_dx
Definition: rxd.h:94
double * result_array_dx
Definition: rxd.h:92
MAT * jacobian
Definition: rxd.h:95
double * result_ecs
Definition: rxd.h:93
double * ecs_states_for_reaction_dx
Definition: rxd.h:90
double * states_for_reaction
Definition: rxd.h:87
PERM * pivot
Definition: rxd.h:98
int length
Definition: rxd.h:54
int * indices
Definition: rxd.h:53
struct SpeciesIndexList * next
Definition: rxd.h:55
double atolscale
Definition: rxd.h:52
Definition: rxd.h:102
struct TaskList * next
Definition: rxd.h:106
void *(* task)(void *)
Definition: rxd.h:103
void * result
Definition: rxd.h:105
void * args
Definition: rxd.h:104
Definition: rxd.h:109
int length
Definition: rxd.h:114
struct TaskList * first
Definition: rxd.h:115
pthread_mutex_t * waiting_mutex
Definition: rxd.h:112
struct TaskList * last
Definition: rxd.h:116
pthread_cond_t * task_cond
Definition: rxd.h:111
pthread_cond_t * waiting_cond
Definition: rxd.h:113
pthread_mutex_t * task_mutex
Definition: rxd.h:110
Definition: matrix.h:67