NEURON
passive0.cpp
Go to the documentation of this file.
1 #include <../../nrnconf.h>
2 /* /local/src/master/nrn/src/nrnoc/passive0.cpp,v 1.2 1997/03/13 14:18:02 hines Exp */
3 
4 #include "section.h"
5 #include "membdef.h"
6 #include "nrniv_mf.h"
7 
8 #define nparm 2
9 static const char* mechanism[] = {"0", "fastpas", "g_fastpas", "e_fastpas", 0, 0, 0};
10 static void pas_alloc(Prop* p);
11 static void pas_cur(neuron::model_sorted_token const&, NrnThread* nt, Memb_list* ml, int type);
12 static void pas_jacob(neuron::model_sorted_token const&, NrnThread* nt, Memb_list* ml, int type);
13 
14 static std::vector<double> parm_default{DEF_g, DEF_e};
15 
16 extern "C" void passive0_reg_(void) {
17  int mechtype;
18  register_mech(mechanism, pas_alloc, pas_cur, pas_jacob, nullptr, nullptr, -1, 1);
19  mechtype = nrn_get_mechtype(mechanism[1]);
23  field<double>{"g_fastpas"},
24  field<double>{"e_fastpas"});
25  hoc_register_prop_size(mechtype, nparm, 0);
26 }
27 
28 static constexpr auto g_index = 0;
29 static constexpr auto e_index = 1;
30 
31 static void pas_cur(neuron::model_sorted_token const&, NrnThread* nt, Memb_list* ml, int type) {
32  int count = ml->nodecount;
33  Node** vnode = ml->nodelist;
34  for (int i = 0; i < count; ++i) {
35  NODERHS(vnode[i]) -= ml->data(i, g_index) * (NODEV(vnode[i]) - ml->data(i, e_index));
36  }
37 }
38 
39 static void pas_jacob(neuron::model_sorted_token const&, NrnThread* nt, Memb_list* ml, int type) {
40  auto const count = ml->nodecount;
41  auto* const ni = ml->nodeindices;
42  auto* const vec_d = nt->node_d_storage();
43  for (int i = 0; i < count; ++i) {
44  vec_d[ni[i]] += ml->data(i, g_index);
45  }
46 }
47 
48 /* the rest can be constructed automatically from the above info*/
49 
50 static void pas_alloc(Prop* p) {
51  assert(p->param_size() == nparm);
52  p->param(0) = parm_default[0]; // DEF_g
53  p->param(1) = parm_default[1]; // DEF_e
54 }
#define i
Definition: md1redef.h:19
#define assert(ex)
Definition: hocassrt.h:24
#define DEF_e
#define DEF_g
int nrn_get_mechtype(const char *name)
Get mechanism type by the mechanism name.
Definition: mk_mech.cpp:145
void hoc_register_prop_size(int, int, int)
int register_mech(const char **m, mod_alloc_t alloc, mod_f_t cur, mod_f_t jacob, mod_f_t stat, mod_f_t initialize, mod_f_t private_constructor, mod_f_t private_destructor, int nrnpointerindex, int vectorized)
static void register_data_fields(int mech_type, Fields const &... fields)
Type- and array-aware version of hoc_register_prop_size.
Definition: membfunc.h:235
auto *const vec_d
Definition: cellorder.cpp:615
size_t p
short type
Definition: cabvars.h:10
void hoc_register_parm_default(int mechtype, const std::vector< double > *pd)
Definition: init.cpp:741
static constexpr auto e_index
Definition: passive0.cpp:29
void passive0_reg_(void)
Definition: passive0.cpp:16
static void pas_alloc(Prop *p)
Definition: passive0.cpp:50
static void pas_jacob(neuron::model_sorted_token const &, NrnThread *nt, Memb_list *ml, int type)
Definition: passive0.cpp:39
#define nparm
Definition: passive0.cpp:8
static std::vector< double > parm_default
Definition: passive0.cpp:14
static const char * mechanism[]
Definition: passive0.cpp:9
static void pas_cur(neuron::model_sorted_token const &, NrnThread *nt, Memb_list *ml, int type)
Definition: passive0.cpp:31
static constexpr auto g_index
Definition: passive0.cpp:28
#define NODEV(n)
Definition: section_fwd.hpp:60
#define NODERHS(n)
Definition: section_fwd.hpp:55
A view into a set of mechanism instances.
Definition: nrnoc_ml.h:34
int nodecount
Definition: nrnoc_ml.h:78
int * nodeindices
Definition: nrnoc_ml.h:74
Node ** nodelist
Definition: nrnoc_ml.h:68
std::vector< double * > data()
Get a vector of double* representing the model data.
Definition: memblist.cpp:64
Definition: section.h:105
Represent main neuron object computed by single thread.
Definition: multicore.h:58
double * node_d_storage()
Definition: multicore.cpp:1069
Definition: section.h:231