NEURON
rxd.cpp File Reference
#include <../../nrnconf.h>
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include "grids.h"
#include <cfloat>
#include "rxd.h"
#include <../nrnoc/section.h>
#include <../nrnoc/nrn_ansi.h>
#include <../nrnoc/multicore.h>
#include "nrnwrap_Python.h"
#include "nrnpython.h"
#include <thread>
#include <vector>
#include "ocmatrix.h"
#include "ivocvect.h"
#include <nanobind/nanobind.h>

Go to the source code of this file.

Namespaces

 nrn
 
 nrn::rxd
 

Functions

static void ode_solve (double, double *, double *)
 
static void free_zvi_child ()
 
static void transfer_to_legacy ()
 
static void * allocopy (void *src, size_t size)
 
NRN_EXPORT void rxd_set_no_diffusion ()
 
NRN_EXPORT void free_curr_ptrs ()
 
NRN_EXPORT void free_conc_ptrs ()
 
NRN_EXPORT void rxd_setup_curr_ptrs (int num_currents, int *curr_index, double *curr_scale, PyHocObject **curr_ptrs)
 
NRN_EXPORT void rxd_setup_conc_ptrs (int conc_count, int *conc_index, PyHocObject **conc_ptrs)
 
NRN_EXPORT void rxd_include_node_flux3D (int grid_count, int *grid_counts, int *grids, long *index, double *scales, PyObject **sources)
 
NRN_EXPORT void rxd_include_node_flux1D (int n, long *index, double *scales, PyObject **sources)
 
void apply_node_flux (int n, long *index, double *scale, PyObject **source, double dt, double *states)
 
static void apply_node_flux1D (double dt, double *states)
 
NRN_EXPORT void rxd_set_euler_matrix (int nrow, int nnonzero, long *nonzero_i, long *nonzero_j, double *nonzero_values, double *c_diagonal)
 
static void add_currents (double *result)
 
static void mul (int nnonzero, long *nonzero_i, long *nonzero_j, const double *nonzero_values, const double *v, double *result)
 
NRN_EXPORT void set_setup (fptr *setup_fn)
 
NRN_EXPORT void set_initialize (fptr *initialize_fn)
 
NRN_EXPORT void set_setup_matrices (fptr *setup_matrices)
 
NRN_EXPORT void set_setup_units (fptr *setup_units)
 
static void nrn_tree_solve (double *a, double *b, double *c, double *dbase, double *rhs, long *pindex, long n, double dt)
 
static void ode_abs_tol (double *p1)
 
static void free_currents ()
 
NRN_EXPORT void setup_currents (int num_currents, int num_fluxes, int *num_species, int *node_idxs, double *scales, PyHocObject **ptrs, int *mapped, int *mapped_ecs)
 
static void _currents (double *rhs)
 
NRN_EXPORT int rxd_nonvint_block (int method, int size, double *p1, double *p2, int)
 
NRN_EXPORT void register_rate (int nspecies, int nparam, int nregions, int nseg, int *sidx, int necs, int necsparam, int *ecs_ids, int *ecsidx, int nmult, double *mult, PyHocObject **vptrs, ReactionRate *f)
 
NRN_EXPORT void clear_rates ()
 
NRN_EXPORT void species_atolscale (int id, double scale, int len, int *idx)
 
NRN_EXPORT void remove_species_atolscale (int id)
 
NRN_EXPORT void setup_solver (double *my_states, int my_num_states, long *zvi, int num_zvi)
 
void TaskQueue_add_task (TaskQueue *q, void *(*task)(void *), void *args, void *result)
 
void TaskQueue_exe_tasks (std::size_t thread_index, TaskQueue *q)
 
NRN_EXPORT void set_num_threads (const int n)
 
void TaskQueue_sync (TaskQueue *q)
 
NRN_EXPORT int get_num_threads (void)
 
void _fadvance (void)
 
void _ode_reinit (double *y)
 
void _rhs_variable_step (const double *p1, double *p2)
 
void get_reaction_rates (ICSReactions *react, double *states, double *rates, double *ydot)
 
void solve_reaction (ICSReactions *react, double *states, double *bval, double *cvode_states, double *cvode_b)
 
void do_ics_reactions (double *states, double *b, double *cvode_states, double *cvode_b)
 
void get_all_reaction_rates (double *states, double *rates, double *ydot)
 

Variables

PyTypeObject * hocobject_type
 
int structure_change_cnt
 
int states_cvode_offset
 
int prev_structure_change_cnt = 0
 
unsigned char initialized = FALSE
 
NrnThreadnrn_threads
 
int NUM_THREADS = 1
 
std::vector< std::thread > nrn::rxd::Threads
 
TaskQueue nrn::rxd::task_queue
 
TaskQueueAllTasks {&nrn::rxd::task_queue}
 
double * dt_ptr
 
double * t_ptr
 
fptr_setup
 
fptr_initialize
 
fptr_setup_matrices
 
fptr_setup_units
 
unsigned char diffusion = FALSE
 
int _rxd_euler_nrow = 0
 
int _rxd_euler_nnonzero = 0
 
int _rxd_num_zvi = 0
 
long * _rxd_euler_nonzero_i = NULL
 
long * _rxd_euler_nonzero_j = NULL
 
double * _rxd_euler_nonzero_values = NULL
 
long * _rxd_zero_volume_indices = NULL
 
double * _rxd_a = NULL
 
double * _rxd_b = NULL
 
double * _rxd_c = NULL
 
double * _rxd_d = NULL
 
long * _rxd_p = NULL
 
unsigned int * _rxd_zvi_child_count = NULL
 
long ** _rxd_zvi_child = NULL
 
static int _cvode_offset
 
static int _ecs_count
 
ICSReactions_reactions = NULL
 
SpeciesIndexListspecies_indices = NULL
 
double * states
 
unsigned int num_states = 0
 
int _num_reactions = 0
 
int _curr_count
 
int * _curr_indices = NULL
 
double * _curr_scales = NULL
 
std::vector< neuron::container::data_handle< double > > _conc_ptrs
 
std::vector< neuron::container::data_handle< double > > _curr_ptrs
 
int _conc_count
 
int * _conc_indices = NULL
 
int _memb_curr_total = 0
 
int _memb_curr_nodes = 0
 
int _memb_count = 0
 
double * _rxd_flux_scale
 
double * _rxd_induced_currents_scale
 
int * _cur_node_indices
 
int * _memb_species_count
 
std::vector< std::vector< neuron::container::data_handle< double > > > _memb_cur_ptrs
 
int ** _memb_cur_charges
 
int *** _memb_cur_mapped
 
int *** _memb_cur_mapped_ecs
 
double * _rxd_induced_currents = NULL
 
ECS_Grid_node ** _rxd_induced_currents_grid = NULL
 
unsigned char _membrane_flux = FALSE
 
int * _membrane_lookup
 
int _node_flux_count = 0
 
long * _node_flux_idx = NULL
 
double * _node_flux_scale = NULL
 
PyObject ** _node_flux_src = NULL
 

Function Documentation

◆ _currents()

static void _currents ( double *  rhs)
static

Definition at line 743 of file rxd.cpp.

◆ _fadvance()

void _fadvance ( void  )

Definition at line 1268 of file rxd.cpp.

◆ _ode_reinit()

void _ode_reinit ( double *  y)

Definition at line 1317 of file rxd.cpp.

◆ _rhs_variable_step()

void _rhs_variable_step ( const double *  p1,
double *  p2 
)

Definition at line 1336 of file rxd.cpp.

◆ add_currents()

static void add_currents ( double *  result)
static

Definition at line 443 of file rxd.cpp.

◆ allocopy()

static void* allocopy ( void *  src,
size_t  size 
)
inlinestatic

Definition at line 139 of file rxd.cpp.

◆ apply_node_flux()

void apply_node_flux ( int  n,
long *  index,
double *  scale,
PyObject **  source,
double  dt,
double *  states 
)

Definition at line 314 of file rxd.cpp.

◆ apply_node_flux1D()

static void apply_node_flux1D ( double  dt,
double *  states 
)
static

Definition at line 354 of file rxd.cpp.

◆ clear_rates()

NRN_EXPORT void clear_rates ( )

Definition at line 1013 of file rxd.cpp.

◆ do_ics_reactions()

void do_ics_reactions ( double *  states,
double *  b,
double *  cvode_states,
double *  cvode_b 
)

Definition at line 1752 of file rxd.cpp.

◆ free_conc_ptrs()

NRN_EXPORT void free_conc_ptrs ( )

Definition at line 171 of file rxd.cpp.

◆ free_curr_ptrs()

NRN_EXPORT void free_curr_ptrs ( )

Definition at line 160 of file rxd.cpp.

◆ free_currents()

static void free_currents ( )
static

Definition at line 610 of file rxd.cpp.

◆ free_zvi_child()

static void free_zvi_child ( )
static

Definition at line 117 of file rxd.cpp.

◆ get_all_reaction_rates()

void get_all_reaction_rates ( double *  states,
double *  rates,
double *  ydot 
)

Definition at line 1760 of file rxd.cpp.

◆ get_num_threads()

NRN_EXPORT int get_num_threads ( void  )

Definition at line 1263 of file rxd.cpp.

◆ get_reaction_rates()

void get_reaction_rates ( ICSReactions react,
double *  states,
double *  rates,
double *  ydot 
)

Definition at line 1433 of file rxd.cpp.

◆ mul()

static void mul ( int  nnonzero,
long *  nonzero_i,
long *  nonzero_j,
const double *  nonzero_values,
const double *  v,
double *  result 
)
static

Definition at line 464 of file rxd.cpp.

◆ nrn_tree_solve()

static void nrn_tree_solve ( double *  a,
double *  b,
double *  c,
double *  dbase,
double *  rhs,
long *  pindex,
long  n,
double  dt 
)
static

Definition at line 498 of file rxd.cpp.

◆ ode_abs_tol()

static void ode_abs_tol ( double *  p1)
static

Definition at line 595 of file rxd.cpp.

◆ ode_solve()

static void ode_solve ( double  dt,
double *  p1,
double *  p2 
)
static

Definition at line 556 of file rxd.cpp.

◆ register_rate()

NRN_EXPORT void register_rate ( int  nspecies,
int  nparam,
int  nregions,
int  nseg,
int *  sidx,
int  necs,
int  necsparam,
int *  ecs_ids,
int *  ecsidx,
int  nmult,
double *  mult,
PyHocObject **  vptrs,
ReactionRate f 
)

Definition at line 855 of file rxd.cpp.

◆ remove_species_atolscale()

NRN_EXPORT void remove_species_atolscale ( int  id)

Definition at line 1104 of file rxd.cpp.

◆ rxd_include_node_flux1D()

NRN_EXPORT void rxd_include_node_flux1D ( int  n,
long *  index,
double *  scales,
PyObject **  sources 
)

Definition at line 296 of file rxd.cpp.

◆ rxd_include_node_flux3D()

NRN_EXPORT void rxd_include_node_flux3D ( int  grid_count,
int *  grid_counts,
int *  grids,
long *  index,
double *  scales,
PyObject **  sources 
)

Definition at line 212 of file rxd.cpp.

◆ rxd_nonvint_block()

NRN_EXPORT int rxd_nonvint_block ( int  method,
int  size,
double *  p1,
double *  p2,
int   
)

Definition at line 775 of file rxd.cpp.

◆ rxd_set_euler_matrix()

NRN_EXPORT void rxd_set_euler_matrix ( int  nrow,
int  nnonzero,
long *  nonzero_i,
long *  nonzero_j,
double *  nonzero_values,
double *  c_diagonal 
)

Definition at line 358 of file rxd.cpp.

◆ rxd_set_no_diffusion()

NRN_EXPORT void rxd_set_no_diffusion ( )

Definition at line 145 of file rxd.cpp.

◆ rxd_setup_conc_ptrs()

NRN_EXPORT void rxd_setup_conc_ptrs ( int  conc_count,
int *  conc_index,
PyHocObject **  conc_ptrs 
)

Definition at line 198 of file rxd.cpp.

◆ rxd_setup_curr_ptrs()

NRN_EXPORT void rxd_setup_curr_ptrs ( int  num_currents,
int *  curr_index,
double *  curr_scale,
PyHocObject **  curr_ptrs 
)

Definition at line 180 of file rxd.cpp.

◆ set_initialize()

NRN_EXPORT void set_initialize ( fptr initialize_fn)

Definition at line 484 of file rxd.cpp.

◆ set_num_threads()

NRN_EXPORT void set_num_threads ( const int  n)

Definition at line 1209 of file rxd.cpp.

◆ set_setup()

NRN_EXPORT void set_setup ( fptr setup_fn)

Definition at line 480 of file rxd.cpp.

◆ set_setup_matrices()

NRN_EXPORT void set_setup_matrices ( fptr setup_matrices)

Definition at line 489 of file rxd.cpp.

◆ set_setup_units()

NRN_EXPORT void set_setup_units ( fptr setup_units)

Definition at line 493 of file rxd.cpp.

◆ setup_currents()

NRN_EXPORT void setup_currents ( int  num_currents,
int  num_fluxes,
int *  num_species,
int *  node_idxs,
double *  scales,
PyHocObject **  ptrs,
int *  mapped,
int *  mapped_ecs 
)

Definition at line 633 of file rxd.cpp.

◆ setup_solver()

NRN_EXPORT void setup_solver ( double *  my_states,
int  my_num_states,
long *  zvi,
int  num_zvi 
)

Definition at line 1120 of file rxd.cpp.

◆ solve_reaction()

void solve_reaction ( ICSReactions react,
double *  states,
double *  bval,
double *  cvode_states,
double *  cvode_b 
)

Definition at line 1524 of file rxd.cpp.

◆ species_atolscale()

NRN_EXPORT void species_atolscale ( int  id,
double  scale,
int  len,
int *  idx 
)

Definition at line 1079 of file rxd.cpp.

◆ TaskQueue_add_task()

void TaskQueue_add_task ( TaskQueue q,
void *(*)(void *)  task,
void *  args,
void *  result 
)

Definition at line 1142 of file rxd.cpp.

◆ TaskQueue_exe_tasks()

void TaskQueue_exe_tasks ( std::size_t  thread_index,
TaskQueue q 
)

Definition at line 1171 of file rxd.cpp.

◆ TaskQueue_sync()

void TaskQueue_sync ( TaskQueue q)

Definition at line 1257 of file rxd.cpp.

◆ transfer_to_legacy()

static void transfer_to_legacy ( )
static

Definition at line 131 of file rxd.cpp.

Variable Documentation

◆ _conc_count

int _conc_count

Definition at line 82 of file rxd.cpp.

◆ _conc_indices

int* _conc_indices = NULL

Definition at line 83 of file rxd.cpp.

◆ _conc_ptrs

std::vector<neuron::container::data_handle<double> > _conc_ptrs

Definition at line 81 of file rxd.cpp.

◆ _cur_node_indices

int* _cur_node_indices

Definition at line 93 of file rxd.cpp.

◆ _curr_count

int _curr_count

Definition at line 78 of file rxd.cpp.

◆ _curr_indices

int* _curr_indices = NULL

Definition at line 79 of file rxd.cpp.

◆ _curr_ptrs

std::vector<neuron::container::data_handle<double> > _curr_ptrs

Definition at line 81 of file rxd.cpp.

◆ _curr_scales

double* _curr_scales = NULL

Definition at line 80 of file rxd.cpp.

◆ _cvode_offset

int _cvode_offset
static

Definition at line 65 of file rxd.cpp.

◆ _ecs_count

int _ecs_count
static

Definition at line 66 of file rxd.cpp.

◆ _initialize

fptr * _initialize

Definition at line 48 of file rxd.cpp.

◆ _memb_count

int _memb_count = 0

Definition at line 90 of file rxd.cpp.

◆ _memb_cur_charges

int** _memb_cur_charges

Definition at line 102 of file rxd.cpp.

◆ _memb_cur_mapped

int*** _memb_cur_mapped

Definition at line 103 of file rxd.cpp.

◆ _memb_cur_mapped_ecs

int*** _memb_cur_mapped_ecs

Definition at line 104 of file rxd.cpp.

◆ _memb_cur_ptrs

std::vector<std::vector<neuron::container::data_handle<double> > > _memb_cur_ptrs

Definition at line 101 of file rxd.cpp.

◆ _memb_curr_nodes

int _memb_curr_nodes = 0

Definition at line 88 of file rxd.cpp.

◆ _memb_curr_total

int _memb_curr_total = 0

Definition at line 86 of file rxd.cpp.

◆ _memb_species_count

int* _memb_species_count

Definition at line 96 of file rxd.cpp.

◆ _membrane_flux

unsigned char _membrane_flux = FALSE

Definition at line 109 of file rxd.cpp.

◆ _membrane_lookup

int* _membrane_lookup

Definition at line 110 of file rxd.cpp.

◆ _node_flux_count

int _node_flux_count = 0

Definition at line 112 of file rxd.cpp.

◆ _node_flux_idx

long* _node_flux_idx = NULL

Definition at line 113 of file rxd.cpp.

◆ _node_flux_scale

double* _node_flux_scale = NULL

Definition at line 114 of file rxd.cpp.

◆ _node_flux_src

PyObject** _node_flux_src = NULL

Definition at line 115 of file rxd.cpp.

◆ _num_reactions

int _num_reactions = 0

Definition at line 77 of file rxd.cpp.

◆ _reactions

ICSReactions* _reactions = NULL

Definition at line 69 of file rxd.cpp.

◆ _rxd_a

double* _rxd_a = NULL

Definition at line 58 of file rxd.cpp.

◆ _rxd_b

double* _rxd_b = NULL

Definition at line 59 of file rxd.cpp.

◆ _rxd_c

double* _rxd_c = NULL

Definition at line 60 of file rxd.cpp.

◆ _rxd_d

double* _rxd_d = NULL

Definition at line 61 of file rxd.cpp.

◆ _rxd_euler_nnonzero

int _rxd_euler_nnonzero = 0

Definition at line 53 of file rxd.cpp.

◆ _rxd_euler_nonzero_i

long* _rxd_euler_nonzero_i = NULL

Definition at line 54 of file rxd.cpp.

◆ _rxd_euler_nonzero_j

long* _rxd_euler_nonzero_j = NULL

Definition at line 55 of file rxd.cpp.

◆ _rxd_euler_nonzero_values

double* _rxd_euler_nonzero_values = NULL

Definition at line 56 of file rxd.cpp.

◆ _rxd_euler_nrow

int _rxd_euler_nrow = 0

Definition at line 53 of file rxd.cpp.

◆ _rxd_flux_scale

double* _rxd_flux_scale

Definition at line 91 of file rxd.cpp.

◆ _rxd_induced_currents

double* _rxd_induced_currents = NULL

Definition at line 106 of file rxd.cpp.

◆ _rxd_induced_currents_grid

ECS_Grid_node** _rxd_induced_currents_grid = NULL

Definition at line 107 of file rxd.cpp.

◆ _rxd_induced_currents_scale

double* _rxd_induced_currents_scale

Definition at line 92 of file rxd.cpp.

◆ _rxd_num_zvi

int _rxd_num_zvi = 0

Definition at line 53 of file rxd.cpp.

◆ _rxd_p

long* _rxd_p = NULL

Definition at line 62 of file rxd.cpp.

◆ _rxd_zero_volume_indices

long* _rxd_zero_volume_indices = NULL

Definition at line 57 of file rxd.cpp.

◆ _rxd_zvi_child

long** _rxd_zvi_child = NULL

Definition at line 64 of file rxd.cpp.

◆ _rxd_zvi_child_count

unsigned int* _rxd_zvi_child_count = NULL

Definition at line 63 of file rxd.cpp.

◆ _setup

fptr* _setup

Definition at line 48 of file rxd.cpp.

◆ _setup_matrices

fptr * _setup_matrices

Definition at line 48 of file rxd.cpp.

◆ _setup_units

fptr * _setup_units

Definition at line 48 of file rxd.cpp.

◆ AllTasks

Definition at line 41 of file rxd.cpp.

◆ diffusion

unsigned char diffusion = FALSE

Definition at line 52 of file rxd.cpp.

◆ dt_ptr

double* dt_ptr
extern

Definition at line 15 of file grids.cpp.

◆ hocobject_type

PyTypeObject* hocobject_type
extern

Definition at line 130 of file nrnpy_hoc.cpp.

◆ initialized

unsigned char initialized = FALSE

Definition at line 28 of file rxd.cpp.

◆ nrn_threads

NrnThread* nrn_threads
extern

Definition at line 49 of file rxd.cpp.

◆ num_states

unsigned int num_states = 0

Definition at line 76 of file rxd.cpp.

◆ NUM_THREADS

int NUM_THREADS = 1

Definition at line 34 of file rxd.cpp.

◆ prev_structure_change_cnt

int prev_structure_change_cnt = 0

Definition at line 27 of file rxd.cpp.

◆ species_indices

SpeciesIndexList* species_indices = NULL

Definition at line 72 of file rxd.cpp.

◆ states

double* states

Definition at line 75 of file rxd.cpp.

◆ states_cvode_offset

int states_cvode_offset
extern

Definition at line 29 of file rxd_extracellular.cpp.

◆ structure_change_cnt

int structure_change_cnt
extern

Definition at line 66 of file treeset.cpp.

◆ t_ptr

double* t_ptr
extern

Definition at line 16 of file grids.cpp.