NEURON
grids.h
Go to the documentation of this file.
1 /******************************************************************
2 Author: Austin Lachance
3 Date: 10/28/16
4 Description: Header File for grids.cpp. Allows access to Grid_node
5 and Flux_pair structs and their respective functions
6 ******************************************************************/
7 #include <stdio.h>
8 #include <assert.h>
9 #include <nrnmpi.h>
10 
11 #include <nrnwrap_Python.h>
12 
13 #define SAFE_FREE(ptr) \
14  { \
15  if ((ptr) != NULL) \
16  free(ptr); \
17  }
18 #define IDX(x, y, z) ((z) + (y) *g->size_z + (x) *g->size_z * g->size_y)
19 #define INDEX(x, y, z) ((z) + (y) *grid->size_z + (x) *grid->size_z * grid->size_y)
20 #define ALPHA(x, y, z) (g->get_alpha(g->alpha, IDX(x, y, z)))
21 #define VOLFRAC(idx) (g->get_alpha(g->alpha, idx))
22 #define TORT(idx) (g->get_permeability(g->permeability, idx))
23 #define PERM(x, y, z) (g->get_permeability(g->permeability, IDX(x, y, z)))
24 #define SQ(x) ((x) * (x))
25 #define CU(x) ((x) * (x) * (x))
26 #define TRUE 1
27 #define FALSE 0
28 #define TORTUOSITY 2
29 #define VOLUME_FRACTION 3
30 #define ICS_ALPHA 4
31 
32 #define NEUMANN 0
33 #define DIRICHLET 1
34 
35 #define MAX(a, b) ((a) > (b) ? (a) : (b))
36 #define MIN(a, b) ((a) < (b) ? (a) : (b))
37 
38 typedef struct {
39  PyObject_HEAD void* ho_;
40  union {
41  double x_;
42  char* s_;
43  void* ho_;
44  double* px_;
45  } u;
46  void* sym_; // for functions and arrays
47  void* iteritem_; // enough info to carry out Iterator protocol
48  int nindex_; // number indices seen so far (or narg)
49  int* indices_; // one fewer than nindex_
50  int type_; // 0 HocTopLevelInterpreter, 1 HocObject
51  // 2 function (or TEMPLATE)
52  // 3 array
53  // 4 reference to number
54  // 5 reference to string
55  // 6 reference to hoc object
56  // 7 forall section iterator
57  // 8 pointer to a hoc scalar
58  // 9 incomplete pointer to a hoc array (similar to 3)
59 } PyHocObject;
60 
61 typedef struct Hybrid_data {
63  long* indices1d;
65  long* indices3d;
66  double* rates;
67  double* volumes1d;
68  double* volumes3d;
70 
71 typedef struct Flux_pair {
72  double* flux; // Value of flux
73  int grid_index; // Location in grid
74 } Flux;
75 
76 typedef struct {
77  double* destination; /* memory loc to transfer concentration to */
78  long source; /* index in grid for source */
80 
81 typedef struct {
82  long destination; /* index in grid */
83  double* source; /* memory loc of e.g. ica */
84  double scale_factor;
86 
87 typedef void (*ReactionRate)(double**,
88  double**,
89  double**,
90  double*,
91  double*,
92  double*,
93  double*,
94  double**,
95  double);
96 typedef void (*ECSReactionRate)(double*, double*, double*, double*);
97 typedef struct Reaction {
98  struct Reaction* next;
100  unsigned int num_species_involved;
101  unsigned int num_params_involved;
102  double** species_states;
103  unsigned char* subregion;
104  unsigned int region_size;
106  double** mc3d_mults;
108 
109 typedef struct {
110  double* copyFrom;
111  long copyTo;
112 } AdiLineData;
113 
114 typedef struct {
115  /*TODO: Support for mixed boundaries and by edge (maybe even by voxel)*/
116  unsigned char type;
117  double value;
119 
120 class Grid_node {
121  public:
123 
124  double* states; // Array of doubles representing Grid space
125  double* states_x;
126  double* states_y;
127  double* states_z; // TODO: This is only used by ICS, is it necessary?
128  double* states_cur;
129  int size_x; // Size of X dimension
130  int size_y; // Size of Y dimension
131  int size_z; // Size of Z dimension
132  double dc_x; // X diffusion constant
133  double dc_y; // Y diffusion constant
134  double dc_z; // Z diffusion constant
135  double dx; // ∆X
136  double dy; // ∆Y
137  double dz; // ∆Z
139  bool hybrid;
145 
146  /*used for MPI implementation*/
153  double* all_currents;
154 
155  /*Extension to handle a variable diffusion characteristics of a grid*/
156  unsigned char VARIABLE_ECS_VOLUME; /*FLAG which variable volume fraction
157  methods should be used*/
158  /*diffusion characteristics are arrays of a single value or
159  * the number of voxels (size_x*size_y*size_z)*/
160  double* permeability; /* 1/tortuosities^2 squared
161  D_eff = D_free*permeability */
162  double* alpha; /* volume fractions */
163  /*Function that will be assigned when the grid is created to either return
164  * the single value or the value at a given index*/
165  double (*get_alpha)(double*, int);
166  double (*get_permeability)(double*, int);
167  double atolscale;
168 
175 
176  int insert(int grid_list_index);
180  PyObject** node_flux_src;
181 
182 
183  virtual ~Grid_node(){};
184  virtual void set_diffusion(double*, int) = 0;
185  virtual void set_num_threads(const int n) = 0;
186  virtual void do_grid_currents(double*, double, int) = 0;
187  virtual void apply_node_flux3D(double dt, double* states) = 0;
188  virtual void volume_setup() = 0;
189  virtual int dg_adi() = 0;
190  virtual void variable_step_diffusion(const double* states, double* ydot) = 0;
191  virtual void variable_step_ode_solve(double* RHS, double dt) = 0;
192  virtual void scatter_grid_concentrations() = 0;
193  virtual void hybrid_connections() = 0;
194  virtual void variable_step_hybrid_connections(const double* cvode_states_3d,
195  double* const ydot_3d,
196  const double* cvode_states_1d,
197  double* const ydot_1d) = 0;
198 };
199 
200 class ECS_Grid_node: public Grid_node {
201  public:
202  // Data for DG-ADI
203  ECS_Grid_node();
205  int,
206  int,
207  int,
208  double,
209  double,
210  double,
211  double,
212  double,
213  double,
214  PyHocObject*,
215  PyHocObject*,
216  int,
217  double,
218  double);
219  ~ECS_Grid_node();
224 
225  // Data for multicompartment reactions
243 
244  void set_num_threads(const int n);
245  void do_grid_currents(double*, double, int);
246  void apply_node_flux3D(double dt, double* states);
247  void volume_setup();
248  int dg_adi();
249  void variable_step_diffusion(const double* states, double* ydot);
250  void variable_step_ode_solve(double* RHS, double dt);
251  void variable_step_hybrid_connections(const double* cvode_states_3d,
252  double* const ydot_3d,
253  const double* cvode_states_1d,
254  double* const ydot_1d);
256  void hybrid_connections();
257  void set_diffusion(double*, int);
260  void do_multicompartment_reactions(double*);
263  int add_multicompartment_reaction(int, int*, int);
264  double* set_rxd_currents(int, int*, PyHocObject**);
265 };
266 
267 typedef struct ECSAdiDirection {
269  const double,
270  const int,
271  const int,
272  double const* const,
273  double* const,
274  double* const);
275  double* states_in;
276  double* states_out;
279 
280 typedef struct ECSAdiGridData {
281  int start, stop;
282  double* state;
284  int sizej;
286  double* scratchpad;
288 
289 class ICS_Grid_node: public Grid_node {
290  public:
291  ICS_Grid_node();
292  ~ICS_Grid_node();
293  // fractional volumes
294  double* _ics_alphas;
295  // stores the positive x,y, and z neighbors for each node. [node0_x, node0_y, node0_z, node1_x
296  // ...]
297  long* _neighbors;
298 
299  /*Line definitions from Python. In pattern of [line_start_node, line_length, ...]
300  Array is sorted from longest to shortest line */
304 
305  // Lengths of _sorted_lines arrays. Used to find thread start and stop indices
309 
310  // maximum line length for scratchpad memory allocation
312 
313  // total number of nodes for this grid
315 
316  // indices for thread start and stop positions
318 
319  // Data for DG-ADI
324 
326  long,
327  long*,
328  long*,
329  long,
330  long*,
331  long,
332  long*,
333  long,
334  double*,
335  double*,
336  double,
337  bool,
338  double,
339  double*);
340  void divide_x_work(const int nthreads);
341  void divide_y_work(const int nthreads);
342  void divide_z_work(const int nthreads);
343  void set_num_threads(const int n);
344  void do_grid_currents(double*, double, int);
345  void apply_node_flux3D(double dt, double* states);
346  void volume_setup();
347  int dg_adi();
348  void variable_step_diffusion(const double* states, double* ydot);
349  void variable_step_ode_solve(double* RHS, double dt);
350  void hybrid_connections();
351  void variable_step_hybrid_connections(const double* cvode_states_3d,
352  double* const ydot_3d,
353  const double* cvode_states_1d,
354  double* const ydot_1d);
357  void set_diffusion(double*, int);
361  int add_multicompartment_reaction(int, int*, int);
362  double* set_rxd_currents(int, int*, PyHocObject**);
363 };
364 
365 typedef struct ICSAdiDirection {
367  int,
368  int,
369  int,
370  double,
371  double*,
372  double*,
373  double*,
374  double*,
375  double*,
376  double*);
377  double* states_in;
378  double* states_out;
379  double* deltas;
384  double dc;
385  double* dcgrid;
386  double d;
388 
389 
390 typedef struct ICSAdiGridData {
391  // Start and stop node indices for lines
393  // Where to start in the ordered_nodes array
395  double* state;
398  double* scratchpad;
399  double* RHS;
400  double* l_diag;
401  double* diag;
402  double* u_diag;
403  // double* deltas;
405 
406 /***** GLOBALS *******************************************************************/
407 extern double* dt_ptr; // Universal ∆t
408 extern double* t_ptr; // Universal t
409 
410 // static int N = 100; // Number of grid_lists (size of Parallel_grids)
411 extern Grid_node* Parallel_grids[100]; // Array of Grid_node * lists
412 /*********************************************************************************/
413 
414 
415 // Set the global ∆t
416 void make_dt_ptr(PyHocObject* my_dt_ptr);
417 
418 
419 // Create a single Grid_node
420 /* Parameters: Python object that includes array of double pointers,
421  size of x, y, and z dimensions
422  x, y, and z diffusion constants
423  delta x, delta y, and delta z*/
424 
425 // Free a single Grid_node "grid"
426 // void free_Grid(Grid_node *grid);
427 
428 // Insert a Grid_node "new_Grid" into the list located at grid_list_index in Parallel_grids
429 extern "C" int ECS_insert(int grid_list_index,
430  PyHocObject* my_states,
431  int my_num_states_x,
432  int my_num_states_y,
433  int my_num_states_z,
434  double my_dc_x,
435  double my_dc_y,
436  double my_dc_z,
437  double my_dx,
438  double my_dy,
439  double my_dz,
440  PyHocObject* my_alpha,
441  PyHocObject* my_permeability,
442  int,
443  double,
444  double);
445 
447  long num_nodes,
448  long* neighbors,
449  long* x_line_defs,
450  long x_lines_length,
451  long* y_line_defs,
452  long y_lines_length,
453  long* z_line_defs,
454  long z_lines_length,
455  double* dcs,
456  double dx,
457  bool is_diffusable,
458  double atolscale,
459  double* ics_alphas);
460 
461 // Insert an ICS_Grid_node "new_Grid" into the list located at grid_list_index in Parallel_grids
462 extern "C" int ICS_insert(int grid_list_index,
463  PyHocObject* my_states,
464  long num_nodes,
465  long* neighbors,
466  long* x_line_defs,
467  long x_lines_length,
468  long* y_line_defs,
469  long y_lines_length,
470  long* z_line_defs,
471  long z_lines_length,
472  double* dcs,
473  double dx,
474  bool is_diffusable,
475  double atolscale,
476  double* ics_alphas);
477 
478 extern "C" int ICS_insert_inhom(int grid_list_index,
479  PyHocObject* my_states,
480  long num_nodes,
481  long* neighbors,
482  long* x_line_defs,
483  long x_lines_length,
484  long* y_line_defs,
485  long y_lines_length,
486  long* z_line_defs,
487  long z_lines_length,
488  double* dcs,
489  double dx,
490  bool is_diffusable,
491  double atolscale,
492  double* ics_alphas);
493 
494 
495 // Set the diffusion coefficients for a given grid_id
496 extern "C" int set_diffusion(int, int, double*, int);
497 
498 // Delete a specific Grid_node "find" from the list "head"
499 int remove(Grid_node** head, Grid_node* find);
500 
501 // Destroy the list located at list_index and free all memory
502 void empty_list(int list_index);
503 
504 void apply_node_flux(int, long*, double*, PyObject**, double, double*);
double * induced_currents
Definition: grids.h:240
unsigned char multicompartment_inititalized
Definition: grids.h:234
double * induced_currents_scale
Definition: grids.h:242
ECS_Grid_node()
Definition: grids.cpp:49
void apply_node_flux3D(double dt, double *states)
Definition: grids.cpp:960
void set_tortuosity(PyHocObject *)
Definition: grids.cpp:481
int induced_current_count
Definition: grids.h:236
int react_offset_count
Definition: grids.h:228
int dg_adi()
Definition: grids.cpp:1008
int * all_reaction_indices
Definition: grids.h:230
void volume_setup()
Definition: grids.cpp:995
int induced_idx
Definition: grids.h:226
int * proc_induced_current_count
Definition: grids.h:237
void do_grid_currents(double *, double, int)
Definition: grids.cpp:875
void variable_step_diffusion(const double *states, double *ydot)
Definition: grids.cpp:1035
struct ECSAdiDirection * ecs_adi_dir_z
Definition: grids.h:223
double * set_rxd_currents(int, int *, PyHocObject **)
Definition: grids.cpp:933
void initialize_multicompartment_reaction()
Definition: grids.cpp:1109
void set_volume_fraction(PyHocObject *)
Definition: grids.cpp:531
struct ECSAdiDirection * ecs_adi_dir_y
Definition: grids.h:222
int add_multicompartment_reaction(int, int *, int)
Definition: grids.cpp:1066
struct ECSAdiGridData * ecs_tasks
Definition: grids.h:220
void clear_multicompartment_reaction()
Definition: grids.cpp:1092
void variable_step_ode_solve(double *RHS, double dt)
Definition: grids.cpp:1244
int total_reaction_states
Definition: grids.h:233
int * react_offsets
Definition: grids.h:227
void variable_step_hybrid_connections(const double *cvode_states_3d, double *const ydot_3d, const double *cvode_states_1d, double *const ydot_1d)
Definition: grids.cpp:1061
int * proc_num_reaction_states
Definition: grids.h:232
int * proc_induced_current_offset
Definition: grids.h:238
int * proc_num_reactions
Definition: grids.h:231
struct ECSAdiDirection * ecs_adi_dir_x
Definition: grids.h:221
void set_num_threads(const int n)
Definition: grids.cpp:832
void hybrid_connections()
Definition: grids.cpp:1059
void scatter_grid_concentrations()
Definition: grids.cpp:1048
double * all_reaction_states
Definition: grids.h:239
double * local_induced_currents
Definition: grids.h:241
void set_diffusion(double *, int)
Definition: grids.cpp:575
int * reaction_indices
Definition: grids.h:229
void do_multicompartment_reactions(double *)
Definition: grids.cpp:1221
int * induced_currents_index
Definition: grids.h:235
double(* get_alpha)(double *, int)
Definition: grids.h:165
int node_flux_count
Definition: grids.h:177
virtual void apply_node_flux3D(double dt, double *states)=0
double * permeability
Definition: grids.h:160
bool hybrid
Definition: grids.h:139
int * proc_num_fluxes
Definition: grids.h:151
int size_y
Definition: grids.h:130
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
int * proc_offsets
Definition: grids.h:148
double * states_x
Definition: grids.h:125
virtual void hybrid_connections()=0
int64_t * ics_surface_nodes_per_seg
Definition: grids.h:169
virtual void variable_step_diffusion(const double *states, double *ydot)=0
Concentration_Pair * concentration_list
Definition: grids.h:142
long * node_flux_idx
Definition: grids.h:178
int size_x
Definition: grids.h:129
double * states_cur
Definition: grids.h:128
bool diffusable
Definition: grids.h:138
double * states
Definition: grids.h:124
double atolscale
Definition: grids.h:167
int * proc_flux_offsets
Definition: grids.h:150
BoundaryConditions * bc
Definition: grids.h:140
double * node_flux_scale
Definition: grids.h:179
double dy
Definition: grids.h:136
double * states_z
Definition: grids.h:127
virtual void volume_setup()=0
double * states_y
Definition: grids.h:126
virtual void set_num_threads(const int n)=0
Grid_node * next
Definition: grids.h:122
double(* get_permeability)(double *, int)
Definition: grids.h:166
virtual void do_grid_currents(double *, double, int)=0
virtual void variable_step_ode_solve(double *RHS, double dt)=0
Hybrid_data * hybrid_data
Definition: grids.h:141
virtual ~Grid_node()
Definition: grids.h:183
int64_t * ics_surface_nodes_per_seg_start_indices
Definition: grids.h:170
PyObject ** node_flux_src
Definition: grids.h:180
int num_all_currents
Definition: grids.h:147
unsigned char VARIABLE_ECS_VOLUME
Definition: grids.h:156
int insert(int grid_list_index)
Definition: grids.cpp:808
double ** ics_current_seg_ptrs
Definition: grids.h:172
double dc_z
Definition: grids.h:134
double * all_currents
Definition: grids.h:153
double * ics_scale_factors
Definition: grids.h:173
double dc_y
Definition: grids.h:133
Current_Triple * current_list
Definition: grids.h:143
int size_z
Definition: grids.h:131
int * proc_num_currents
Definition: grids.h:149
long * current_dest
Definition: grids.h:152
double dc_x
Definition: grids.h:132
virtual int dg_adi()=0
double ** ics_concentration_seg_ptrs
Definition: grids.h:171
double dz
Definition: grids.h:137
virtual void set_diffusion(double *, int)=0
int ics_num_segs
Definition: grids.h:174
double * alpha
Definition: grids.h:162
ssize_t num_currents
Definition: grids.h:144
double dx
Definition: grids.h:135
ssize_t num_concentrations
Definition: grids.h:144
virtual void scatter_grid_concentrations()=0
struct ICSAdiDirection * ics_adi_dir_x
Definition: grids.h:321
long _x_lines_length
Definition: grids.h:306
void run_threaded_ics_dg_adi(struct ICSAdiDirection *)
void scatter_grid_concentrations()
Definition: grids.cpp:1726
long * _sorted_y_lines
Definition: grids.h:302
void hybrid_connections()
Definition: grids.cpp:1715
void apply_node_flux3D(double dt, double *states)
Definition: grids.cpp:1636
struct ICSAdiDirection * ics_adi_dir_y
Definition: grids.h:322
void do_multicompartment_reactions(double *)
void divide_y_work(const int nthreads)
Definition: grids.cpp:1397
long _y_lines_length
Definition: grids.h:307
struct ICSAdiGridData * ics_tasks
Definition: grids.h:320
struct ICSAdiDirection * ics_adi_dir_z
Definition: grids.h:323
int add_multicompartment_reaction(int, int *, int)
void variable_step_ode_solve(double *RHS, double dt)
Definition: grids.cpp:1709
void variable_step_diffusion(const double *states, double *ydot)
Definition: grids.cpp:1690
int dg_adi()
Definition: grids.cpp:1677
long _z_lines_length
Definition: grids.h:308
void divide_x_work(const int nthreads)
Definition: grids.cpp:1302
long * _sorted_x_lines
Definition: grids.h:301
void initialize_multicompartment_reaction()
long _num_nodes
Definition: grids.h:314
void set_diffusion(double *, int)
Definition: grids.cpp:553
void do_grid_currents(double *, double, int)
Definition: grids.cpp:1645
double * _ics_alphas
Definition: grids.h:294
long * _nodes_per_thread
Definition: grids.h:317
void set_num_threads(const int n)
Definition: grids.cpp:1593
long * _sorted_z_lines
Definition: grids.h:303
long * _neighbors
Definition: grids.h:297
long _line_length_max
Definition: grids.h:311
void divide_z_work(const int nthreads)
Definition: grids.cpp:1494
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)
Definition: grids.cpp:1719
void volume_setup()
Definition: grids.cpp:1665
double * set_rxd_currents(int, int *, PyHocObject **)
double dt
Definition: netcvode.cpp:76
int set_diffusion(int, int, double *, int)
Definition: grids.cpp:454
void make_dt_ptr(PyHocObject *my_dt_ptr)
double * dt_ptr
Definition: grids.cpp:14
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)
Definition: grids.cpp:420
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)
Definition: grids.cpp:386
struct Reaction Reaction
struct ECSAdiGridData ECSAdiGridData
struct Hybrid_data Hybrid_data
struct ECSAdiDirection ECSAdiDirection
struct ICSAdiDirection ICSAdiDirection
double * t_ptr
Definition: grids.cpp:15
struct Flux_pair Flux
struct ICSAdiGridData ICSAdiGridData
void empty_list(int list_index)
Definition: grids.cpp:799
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 apply_node_flux(int, long *, double *, PyObject **, double, double *)
Definition: rxd.cpp:304
void(* ECSReactionRate)(double *, double *, double *, double *)
Definition: grids.h:96
void(* ReactionRate)(double **, double **, double **, double *, double *, double *, double *, double **, double)
Definition: grids.h:87
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)
Definition: grids.cpp:197
Grid_node * Parallel_grids[100]
Definition: grids.cpp:16
int remove(Grid_node **head, Grid_node *find)
Definition: grids.cpp:767
void
#define RHS(i)
Definition: multisplit.cpp:66
int const size_t const size_t n
Definition: nrngsl.h:11
#define g
Definition: passive0.cpp:21
int find(const int, const int, const int, const int, const int)
long copyTo
Definition: grids.h:111
double * copyFrom
Definition: grids.h:110
double value
Definition: grids.h:117
unsigned char type
Definition: grids.h:116
double * destination
Definition: grids.h:77
double * source
Definition: grids.h:83
long destination
Definition: grids.h:82
double scale_factor
Definition: grids.h:84
double * states_in
Definition: grids.h:275
int line_size
Definition: grids.h:277
double * states_out
Definition: grids.h:276
void(* ecs_dg_adi_dir)(ECS_Grid_node *, const double, const int, const int, double const *const, double *const, double *const)
Definition: grids.h:268
ECS_Grid_node * g
Definition: grids.h:283
ECSAdiDirection * ecs_adi_dir
Definition: grids.h:285
double * state
Definition: grids.h:282
double * scratchpad
Definition: grids.h:286
double * flux
Definition: grids.h:72
int grid_index
Definition: grids.h:73
long * num_3d_indices_per_1d_seg
Definition: grids.h:64
long * indices3d
Definition: grids.h:65
double * volumes1d
Definition: grids.h:67
double * volumes3d
Definition: grids.h:68
double * rates
Definition: grids.h:66
long num_1d_indices
Definition: grids.h:62
long * indices1d
Definition: grids.h:63
double * states_in
Definition: grids.h:377
double * dcgrid
Definition: grids.h:385
long * ordered_start_stop_indices
Definition: grids.h:382
double dc
Definition: grids.h:384
double d
Definition: grids.h:386
long * ordered_nodes
Definition: grids.h:381
void(* ics_dg_adi_dir)(ICS_Grid_node *g, int, int, int, double, double *, double *, double *, double *, double *, double *)
Definition: grids.h:366
long * line_start_stop_indices
Definition: grids.h:383
double * states_out
Definition: grids.h:378
long * ordered_line_defs
Definition: grids.h:380
double * deltas
Definition: grids.h:379
double * state
Definition: grids.h:395
double * RHS
Definition: grids.h:399
double * l_diag
Definition: grids.h:400
ICS_Grid_node * g
Definition: grids.h:396
int line_stop
Definition: grids.h:392
double * diag
Definition: grids.h:401
ICSAdiDirection * ics_adi_dir
Definition: grids.h:397
double * u_diag
Definition: grids.h:402
double * scratchpad
Definition: grids.h:398
int ordered_start
Definition: grids.h:394
int line_start
Definition: grids.h:392
int nindex_
Definition: grids.h:48
void * iteritem_
Definition: grids.h:47
PyObject_HEAD void * ho_
Definition: grids.h:39
char * s_
Definition: grids.h:42
void * ho_
Definition: grids.h:43
double x_
Definition: grids.h:41
void * sym_
Definition: grids.h:46
int type_
Definition: grids.h:50
int * indices_
Definition: grids.h:49
double * px_
Definition: grids.h:44
double ** species_states
Definition: grids.h:102
unsigned int region_size
Definition: grids.h:104
uint64_t * mc3d_indices_offsets
Definition: grids.h:105
unsigned char * subregion
Definition: grids.h:103
ECSReactionRate reaction
Definition: grids.h:99
double ** mc3d_mults
Definition: grids.h:106
struct Reaction * next
Definition: grids.h:98
unsigned int num_params_involved
Definition: grids.h:101
unsigned int num_species_involved
Definition: grids.h:100