From edc98e38e4f7952382bb1e1506c5f923760f0bdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Con=C3=A1l=20Paxton?= Date: Mon, 9 Feb 2026 15:27:57 -0500 Subject: [PATCH] added built mechanisms --- flake.lock | 26 ++ x86_64/.libs/libnrnmech.so | Bin 0 -> 183600 bytes x86_64/Ca.c | 587 +++++++++++++++++++++++++++++ x86_64/Ca.o | Bin 0 -> 13552 bytes x86_64/CaDynamics_E2.c | 485 ++++++++++++++++++++++++ x86_64/CaDynamics_E2.o | Bin 0 -> 11320 bytes x86_64/CaDynamics_E2_soma.c | 485 ++++++++++++++++++++++++ x86_64/CaDynamics_E2_soma.o | Bin 0 -> 11408 bytes x86_64/Ca_HVA.c | 585 ++++++++++++++++++++++++++++ x86_64/Ca_HVA.o | Bin 0 -> 13560 bytes x86_64/Ca_HVA_soma.c | 585 ++++++++++++++++++++++++++++ x86_64/Ca_HVA_soma.o | Bin 0 -> 13656 bytes x86_64/Ca_LVAst.c | 578 ++++++++++++++++++++++++++++ x86_64/Ca_LVAst.o | Bin 0 -> 14016 bytes x86_64/Ca_LVAst_soma.c | 578 ++++++++++++++++++++++++++++ x86_64/Ca_LVAst_soma.o | Bin 0 -> 14120 bytes x86_64/Ih.c | 523 +++++++++++++++++++++++++ x86_64/Ih.o | Bin 0 -> 10976 bytes x86_64/Im.c | 557 +++++++++++++++++++++++++++ x86_64/Im.o | Bin 0 -> 12376 bytes x86_64/K_Pst.c | 588 +++++++++++++++++++++++++++++ x86_64/K_Pst.o | Bin 0 -> 14528 bytes x86_64/K_Tst.c | 578 ++++++++++++++++++++++++++++ x86_64/K_Tst.o | Bin 0 -> 14352 bytes x86_64/NaTa_t.c | 605 +++++++++++++++++++++++++++++ x86_64/NaTa_t.o | Bin 0 -> 14696 bytes x86_64/NaTa_t_myel.c | 605 +++++++++++++++++++++++++++++ x86_64/NaTa_t_myel.o | Bin 0 -> 14808 bytes x86_64/NaTa_t_nor.c | 605 +++++++++++++++++++++++++++++ x86_64/NaTa_t_nor.o | Bin 0 -> 14792 bytes x86_64/NaTs2_t.c | 605 +++++++++++++++++++++++++++++ x86_64/NaTs2_t.o | Bin 0 -> 14800 bytes x86_64/NaTs2_t_apic.c | 605 +++++++++++++++++++++++++++++ x86_64/NaTs2_t_apic.o | Bin 0 -> 14904 bytes x86_64/NaTs2_t_soma.c | 605 +++++++++++++++++++++++++++++ x86_64/NaTs2_t_soma.o | Bin 0 -> 14904 bytes x86_64/Nap_Et2.c | 614 ++++++++++++++++++++++++++++++ x86_64/Nap_Et2.o | Bin 0 -> 15832 bytes x86_64/SK_E2.c | 559 +++++++++++++++++++++++++++ x86_64/SK_E2.o | Bin 0 -> 13824 bytes x86_64/SK_E2_soma.c | 559 +++++++++++++++++++++++++++ x86_64/SK_E2_soma.o | Bin 0 -> 13928 bytes x86_64/SKv3_1.c | 537 ++++++++++++++++++++++++++ x86_64/SKv3_1.o | Bin 0 -> 13184 bytes x86_64/SKv3_1_apic.c | 537 ++++++++++++++++++++++++++ x86_64/SKv3_1_apic.o | Bin 0 -> 13280 bytes x86_64/SKv3_1_soma.c | 537 ++++++++++++++++++++++++++ x86_64/SKv3_1_soma.o | Bin 0 -> 13280 bytes x86_64/hhqt.c | 733 ++++++++++++++++++++++++++++++++++++ x86_64/hhqt.o | Bin 0 -> 19792 bytes x86_64/libnrnmech.so | Bin 0 -> 183600 bytes x86_64/makemod2c_inc | 200 ++++++++++ x86_64/mod_func.cpp | 94 +++++ x86_64/mod_func.o | Bin 0 -> 7328 bytes x86_64/special | Bin 0 -> 16112 bytes x86_64/xtra.c | 325 ++++++++++++++++ x86_64/xtra.o | Bin 0 -> 7736 bytes 57 files changed, 14480 insertions(+) create mode 100644 flake.lock create mode 100644 x86_64/.libs/libnrnmech.so create mode 100644 x86_64/Ca.c create mode 100644 x86_64/Ca.o create mode 100644 x86_64/CaDynamics_E2.c create mode 100644 x86_64/CaDynamics_E2.o create mode 100644 x86_64/CaDynamics_E2_soma.c create mode 100644 x86_64/CaDynamics_E2_soma.o create mode 100644 x86_64/Ca_HVA.c create mode 100644 x86_64/Ca_HVA.o create mode 100644 x86_64/Ca_HVA_soma.c create mode 100644 x86_64/Ca_HVA_soma.o create mode 100644 x86_64/Ca_LVAst.c create mode 100644 x86_64/Ca_LVAst.o create mode 100644 x86_64/Ca_LVAst_soma.c create mode 100644 x86_64/Ca_LVAst_soma.o create mode 100644 x86_64/Ih.c create mode 100644 x86_64/Ih.o create mode 100644 x86_64/Im.c create mode 100644 x86_64/Im.o create mode 100644 x86_64/K_Pst.c create mode 100644 x86_64/K_Pst.o create mode 100644 x86_64/K_Tst.c create mode 100644 x86_64/K_Tst.o create mode 100644 x86_64/NaTa_t.c create mode 100644 x86_64/NaTa_t.o create mode 100644 x86_64/NaTa_t_myel.c create mode 100644 x86_64/NaTa_t_myel.o create mode 100644 x86_64/NaTa_t_nor.c create mode 100644 x86_64/NaTa_t_nor.o create mode 100644 x86_64/NaTs2_t.c create mode 100644 x86_64/NaTs2_t.o create mode 100644 x86_64/NaTs2_t_apic.c create mode 100644 x86_64/NaTs2_t_apic.o create mode 100644 x86_64/NaTs2_t_soma.c create mode 100644 x86_64/NaTs2_t_soma.o create mode 100644 x86_64/Nap_Et2.c create mode 100644 x86_64/Nap_Et2.o create mode 100644 x86_64/SK_E2.c create mode 100644 x86_64/SK_E2.o create mode 100644 x86_64/SK_E2_soma.c create mode 100644 x86_64/SK_E2_soma.o create mode 100644 x86_64/SKv3_1.c create mode 100644 x86_64/SKv3_1.o create mode 100644 x86_64/SKv3_1_apic.c create mode 100644 x86_64/SKv3_1_apic.o create mode 100644 x86_64/SKv3_1_soma.c create mode 100644 x86_64/SKv3_1_soma.o create mode 100644 x86_64/hhqt.c create mode 100644 x86_64/hhqt.o create mode 100644 x86_64/libnrnmech.so create mode 100644 x86_64/makemod2c_inc create mode 100644 x86_64/mod_func.cpp create mode 100644 x86_64/mod_func.o create mode 100644 x86_64/special create mode 100644 x86_64/xtra.c create mode 100644 x86_64/xtra.o diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..9bac605 --- /dev/null +++ b/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1770667721, + "narHash": "sha256-vz7gbwsMH9iQxywSIfZAQ4V9m+N+Z9v5+F3XdN8Zn8g=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "47617cf6e75b32d7bcacc8539e6ba379afda99d9", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/x86_64/.libs/libnrnmech.so b/x86_64/.libs/libnrnmech.so new file mode 100644 index 0000000000000000000000000000000000000000..9e7ce03f3ae9208d6739ea1449d47be71bf8e92f GIT binary patch literal 183600 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 literal 0 HcmV?d00001 diff --git a/x86_64/Ca.c b/x86_64/Ca.c new file mode 100644 index 0000000..38655b9 --- /dev/null +++ b/x86_64/Ca.c @@ -0,0 +1,587 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__Ca +#define _nrn_initial _nrn_initial__Ca +#define nrn_cur _nrn_cur__Ca +#define _nrn_current _nrn_current__Ca +#define nrn_jacob _nrn_jacob__Ca +#define nrn_state _nrn_state__Ca +#define _net_receive _net_receive__Ca +#define rates rates__Ca +#define states states__Ca + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gCabar _p[0] +#define gCabar_columnindex 0 +#define ica _p[1] +#define ica_columnindex 1 +#define gCa _p[2] +#define gCa_columnindex 2 +#define m _p[3] +#define m_columnindex 3 +#define h _p[4] +#define h_columnindex 4 +#define eca _p[5] +#define eca_columnindex 5 +#define mInf _p[6] +#define mInf_columnindex 6 +#define mTau _p[7] +#define mTau_columnindex 7 +#define mAlpha _p[8] +#define mAlpha_columnindex 8 +#define mBeta _p[9] +#define mBeta_columnindex 9 +#define hInf _p[10] +#define hInf_columnindex 10 +#define hTau _p[11] +#define hTau_columnindex 11 +#define hAlpha _p[12] +#define hAlpha_columnindex 12 +#define hBeta _p[13] +#define hBeta_columnindex 13 +#define Dm _p[14] +#define Dm_columnindex 14 +#define Dh _p[15] +#define Dh_columnindex 15 +#define v _p[16] +#define v_columnindex 16 +#define _g _p[17] +#define _g_columnindex 17 +#define _ion_eca *_ppvar[0]._pval +#define _ion_ica *_ppvar[1]._pval +#define _ion_dicadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_Ca", _hoc_setdata, + "rates_Ca", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gCabar_Ca", "S/cm2", + "ica_Ca", "mA/cm2", + "gCa_Ca", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"Ca", + "gCabar_Ca", + 0, + "ica_Ca", + "gCa_Ca", + 0, + "m_Ca", + "h_Ca", + 0, + 0}; + static Symbol* _ca_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 18, _prop); + /*initialize range parameters*/ + gCabar = 1e-05; + _prop->param = _p; + _prop->param_size = 18; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_ca_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* eca */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ica */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dicadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _Ca_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("ca", -10000.); + _ca_sym = hoc_lookup("ca_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 18, 4); + hoc_register_dparam_semantics(_mechtype, 0, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 Ca /mnt/c/neuron/neurenv/mech/Ca.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + if ( ( v == - 27.0 ) ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.055 * ( - 27.0 - v ) ) / ( exp ( ( - 27.0 - v ) / 3.8 ) - 1.0 ) ; + mBeta = ( 0.94 * exp ( ( - 75.0 - v ) / 17.0 ) ) ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + mTau = 1.0 / ( mAlpha + mBeta ) ; + hAlpha = ( 0.000457 * exp ( ( - 13.0 - v ) / 50.0 ) ) ; + hBeta = ( 0.0065 / ( exp ( ( - v - 15.0 ) / 28.0 ) + 1.0 ) ) ; + hInf = hAlpha / ( hAlpha + hBeta ) ; + hTau = 1.0 / ( hAlpha + hBeta ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_ca_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_ca_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_ca_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + eca = _ion_eca; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gCa = gCabar * m * m * h ; + ica = gCa * ( v - eca ) ; + } + _current += ica; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + eca = _ion_eca; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dica; + _dica = ica; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dicadv += (_dica - ica)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ica += ica ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + eca = _ion_eca; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/Ca.mod"; +static const char* nmodl_file_text = + ":Comment :\n" + ":Reference : : Reuveni, Friedman, Amitai, and Gutnick, J.Neurosci. 1993\n" + "\n" + "NEURON {\n" + " SUFFIX Ca\n" + " USEION ca READ eca WRITE ica\n" + " RANGE gCabar, gCa, ica \n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gCabar = 0.00001 (S/cm2) \n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " eca (mV)\n" + " ica (mA/cm2)\n" + " gCa (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE { \n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gCa = gCabar*m*m*h\n" + " ica = gCa*(v-eca)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " UNITSOFF\n" + " if((v == -27) ){ \n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.055*(-27-v))/(exp((-27-v)/3.8) - 1) \n" + " mBeta = (0.94*exp((-75-v)/17))\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + " mTau = 1/(mAlpha + mBeta)\n" + " hAlpha = (0.000457*exp((-13-v)/50))\n" + " hBeta = (0.0065/(exp((-v-15)/28)+1))\n" + " hInf = hAlpha/(hAlpha + hBeta)\n" + " hTau = 1/(hAlpha + hBeta)\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/Ca.o b/x86_64/Ca.o new file mode 100644 index 0000000000000000000000000000000000000000..e54abfe3b0eb2d0671aa7405e57879c26015d19b GIT binary patch literal 13552 zcmb<-^>JfjWMqH=Mg}_u1P><4z))a-U^{@B4h%vJf(#y=wjiG2|HEng@-7SvJD3<4 z7!IfD@yoY>#2Gw0e|aR=8MOZA@0-ZTz!2)u%?c9t=zQuJ<{0YP`PDHb*rz*9z@s}( z!lj$Tr#p_rvztZ5qnq2c^(24mUj_z-Py7O^AU%fP3@=Ua?RI7G?Pf9X>^AtsFTnSS zU%)}aquVfzU*lsM|NGmY_yq($@eAmE;*Y%WiC-{71H?$<*EslzKj!Qw{)i)=_#*=p zKJmvK{lp)6>Jz_UfWRmI$U~p_1wA;@_%(if;*UA_i9h1^C;o_=pZMdBr16V<=NH`2 zz`(%Z(OoF;i9dqv6TcwaCw_s34zSZ=4uh0^;ui$-J-R(PKJg1Me&UaC;P}KZ$mrU7 zvc$(TnP;+Rx08cM^C8Ah`~oZ|KJkOJ39_84gL>)Fk6#iN_&vTw4zk z9?SJl{DLgkJuDBF-bHcZVSaf~WH9)2vxCH62jeiGkOL6*+Z^-g6*&qDvQPX1?O=Cw ziwJ<+;n5wW@QFWy=@Y*olZWMr(#s$l;emJ(L3OUxEaY zoH!vAl=8zpJHI=Id3K(240Sbp>lotG3r^s{9=)<4^&ZV{Bs@ApPxy5D9&qfeknm0x zS>w^|dcvc-^neG%KF?l}Yu=qA@4b>mR)g4Hogyz>I$wd^;Mp6>=(rb@i9MQsF_j+l zXg(qVO$Ltf7zyDplI!^88A3fe{~4Y%yyVgOG}xo_w@33E4ycu2v!QH{&U-tV85kIL zfowsO@aT^HadIaMNETEUKtcds9)x;y{@N!5%1)h69Ya7?Ks*FBgcsz0h=@n$t$iR< zJUTf%I-LcMJM)0FLDfM6-C4r3^9Wc7>=MIo9-W6hI*)@zJi46)JbD8p(meR{4tO*l zPyjJbd3L&}2&D1n9CYLtWKoHBj6n*J!w~<&JTCExU!Wh9*go+KfFm=FU+)BemlPud z1AnUsBdA0G3&W&8@e6>R@6p)~(Ix2n0_>7c{4p?vzArxU$DKgvh-ro>je{x>^mc%1 ziG+#>csqRJ7j*Xc#2;}mjb99GLmI!xfiyhk@C$kypcy0RoPf(#sLBYKg%eVjj z|A&UJV>qbn2gQE#8wsD}Gy~VxC;WZ0K#8K;jl;9^t7qpwSHu4vovtTd2Sf8aDE)hO zmnC>5+w1_9q5nSd3xdPWqnk60|NTji&ikIt$3ev_Bfp@x1SrTfUg-b(|Nj%efU`jw zznF6Xzo4^(ujTU+6VGm60cg?X)h+Y0o58c&SHi2C=V$AI(&?Vvr3_x(CjUIT%|7u9 zu)UrRsn;+v5x6WpJRuaGBc6J+{x4zi=&l!dvHdUDUT|>5LNWj>d?5KB#s7H*uB~tR z`+~qJ3grK9o}GUn{y*@N8I;=O9T+^iT@QG6m#AP303^>tJZ^^MfKU8!&K92>`6FFa zKy_0xC~Q(sKqFni+u{?yK(;~}zs7}6`~u+O2OMIb_~Sqo;6YfT{=^@1>Jxw5;ZOWA z&Jv&aBSE#K>xobNg1I09Bm~JLAlo9Kw!!U)fEf+7#yJ3=@e0VsJ1h8F{w=Ze?Dj*C zGCydP@wYzs_y50Vw;58by}S=jZ7vK9IN}XnzoEwmhfgvzJ{B`DFnD%;^X&ZZdGIN- ztKk!HdGFaR=GpBg;MFanU*YYWUYySWL z|2>+IaG;g$-;nYn*neR@$z=wPp^hQJuC3qdNxCOZolCMI$ z!2#mY`Ly+9i5fIl9tYTd|9_ue)}BBA z|7ZR8=;by3{{O#6uV~I!5M^5W6GVZvLk)$P0;zf+>|Rs(umAsd9*5NAU@?gFK2W{p z(JOl4$N&FG!XCY*ASdG$*#)Z6!1W)BGEtC5!*57p`#?3TM=w|cSr}?HNIkMJs4~V> z?bFLD^B3e%-mhRvv<@5yrr}@E91gYy+5J$nphC!ji_C@u2UHQ*IT2A%9z^OSxbOpc zB{`8HIWaynKaU}~EI%bRGqsSxT+dw3fWbMDA>BDKDX}QtIgueVIT1vqJA}u!^F@lGI|50tPGR{M_8syb=W~E~}u_wA7;1yyR2`D+Mb~ z&Y;xNvedjx9R;_d%+!?J#5^4Z$K1@4#7rH9#Jm&*_tKKQ%;anx1us3n)Y78-;^a&{ z1w%_qV=gW~*U%t;KhA0{&fritH_r$K=R_{f&|p_je?NufM1>$%M;C?EvtYv<^sIfvc8_E7Z?3Bp76vMzE%Wt%62zW@>I~Ua=+@r$%lV zSR^+yCnvKkKc@sN=7b8XQS1t`c& z)6ghWu(egtH8R&!(5!|EE5H?i1j-a_70R^1F=YsssO92>hOvUJf`W#Do`I>UmWHm8 zxo(-JroKjMMS%vCr*Euhp{by&V5kW)41_^iL1C`|)oN*?1yOHqs#~V1Z)mQm2~y&j zmj?0~IJWdPAQ7sdtpJWuu!4}pQUzNDLu_)8IEI>UU|?WkY7Vu-&=_QgsR7sya1wwy z!@$7I6z1|WT|-k%eIpA^Z9|Ach+`ne>T5t~1#Jbe0U*bK;s@dw3^_=s`*GEBfr>r` z2L0T;68&WTJW!6!15>GaW%{|P$r<|2iF&#DDG+508L2r13igHy&WQ>HwLp!A>Kq=_ zpOqgk`6dO}LwxhW{$s}Dj;%kQ*agM~dx+2Yy|4B4&zdQM*Y`o>tq*9%^dI`FvBo|P z4EP)@UEPa*{ngDNagUC774z`zeSoPmL% z=9WO!OM}!y?E#G^fP_^*gd@ldPhK`Z9(E1}1_qEFD?s853=ES%G+5r5m(8i4*|m?w zwU^bkhs~pzohb#P9^~#DAax833}GM|tlo>4&9RxenunbO6h1#d;tUK7b3rs%-kX=r zxre!#g{c{23dkKYQ1``xXs{Y*uo=vHj9fhI9KPHP3=A3||AXWi7#PmO&2r{t^X+Hu zW9en>VQXe*+6poe5}pN6wd!!SUc7AK5P6VUps)u?wS&~b>_jq)ITsX|5PSE4)G#nG zfc=U^Ez>@Txgfv1fT{)c9vNV2o%)zPds#qn#MA^07XeViiGhLP2}nIyohL6F^HqqY zAcx_=AmuC!AOB;MX2v>F%D}+P07~7MI+z(iDHc^6lrfl)%z>pzP&#B}U}30$DhH(( z5EGQHLFz$i7Q_ds1JUvf44^#007?TOJ~+)n(-=to1CU1;7#Lt_(;BKC=2TEvg7mFp zVqgH-TL9uPFu+~x0ab4R^%^+6GB7X%GCSa{m<0ES8Q2&;plLV)R?o@+D>uQ485kH& zfyLPvB%tL0O#A}04FKcA=w~>@KjRQ*WrDONVESRS5Dsw#9OC9U#JzEdC*Tmz!XaLU zL%fcOfkB9Yk--5PaNv58fq|h7hx$Go;xloGFUKJcnjb{Z>!7eZi9`KO9O7?qh%+-| zj~6K%;ubi>y>W;q;SevzAzq6^d?F5U2IoY*WQO?Eijw5SoSgWAqWl7e`23XA_~iW3 zyb^}^yrR7LVo81u zh{+J2oETqRnacn&GBGD7KbZmC$px9EmswntsAmANE;BE)1SH5153&HP1|k9O%tK^A zF3e3VDbCM<*j!wYn#>TNmRVF>0x|~FFH6kJEY5|P0nu2JpTht$F*C0utu!wg%q~mG zFHHioij%=iu$={oMY-`gnYo!I#SjC)0;PE%zMhY>0fU~8vk{0e1`%c;!V*N7fCy6% zVF*@ZXb5J5l^TN88iJJ=g4Gy7)L4Mkfc2Y$m|(sUSf>$Krx94E5m=`YL?_rvBd~HK zhZI1WK+B_2F728m6O zQkYn2Zah>lH8mwZH#Ij2rX@GO1Y)6UMFB&+b7Fi^YC1z^ejbQl2MeJm;yJdC^bDkFE>9WC%z=Lq6F$q zm{3|~PHJ9aF2pf#+rSVT#+*(8NJ`z)98lX7X73BA zILI6|B=!H1#6f)*n0j_-lMAFC)P{zM^CO9CBAKHA6$csTi6pK86$hCEiYu5omPq2D zvVSbmp95=XXo9+Eg{S_@|HPN+D@4CHij9x4tp zAK9EIIK+9N9YK(KWba;GX(9Ar)qlDIZh9Nio%s5nS{ zFp_!)s5rWMcO-G-`1ON|gUks*GA9Hoj&4o@k~p$CsZeorbF!i0=;o9oi6fg+0~JR% zrwJ;KZcZPPIB1$47XFi=;^^kggo>k^vkNK?QXh&G4hNv(=<1K7iNo46=g`D?K#7@w zf#EV#9ArLd%o66#TTpS3`Jj9R8fOG)d59zq(gUjVK;kdZ#6fuyB>omE4pJMAOpd_{KW?K2uwT%WGSdU2^9ya1&!sx%n^Z#gVclk z1ye7DBo5L8GhYEzI70KI6OucXK#HK^$n7^}Xng^aMpmx?H6J7%g=7xYx!@6WNd^W6 zVWR=Eb zROf$FmX`Wfz-ps0b$}Wcf!UK zVd60JVdHl&aZsHBG6yz(2NDOxF>HQd14t4)rp&+q3O7(%2MO%}5m0fkdT9K?!V@G0 z!cb)luy6v2fiNsSKy6)+8ju(W!}P=a3lali*gQrLNHMg14ibmCa}Am}Y`)?SnmBBp z;SZX)0VshnFfb^90szT;*nENqnmBAep#)7FHZ%?yUxlSx7xH7jSF^NI1xTFX|XTVrRsX2*y;GVV~Xjp(jFR8egL9Zwu!~rQc z)H6ioS}^E=^?(%=rRM16TQz||xdmsl|9CFg?|+A!$l<(H)Dx%-9c7MCO@XG8hv zd8K-wK6`3WNhQ>@)QtGFB2dR38q^d~pmYHWB4{%gZWb)xsX)sKm;_85#+QbcIq2dR ziVzhY&~g$qCk?U(R*t~t6+rnABn~asAetB$7*e42LX!_%9Gwp;??Gmw>(7Adhvj3K z0kHf5 z7Z3!gVqmxcq2MGazTg}N1_n?Y4rB$$9mwJbKmo(Rz%T=3ICM<_s3?Ki4-0?Lx(<*M z&{}Y0{STn_!^$a`985oqE`*j +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__CaDynamics_E2 +#define _nrn_initial _nrn_initial__CaDynamics_E2 +#define nrn_cur _nrn_cur__CaDynamics_E2 +#define _nrn_current _nrn_current__CaDynamics_E2 +#define nrn_jacob _nrn_jacob__CaDynamics_E2 +#define nrn_state _nrn_state__CaDynamics_E2 +#define _net_receive _net_receive__CaDynamics_E2 +#define states states__CaDynamics_E2 + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gamma _p[0] +#define gamma_columnindex 0 +#define decay _p[1] +#define decay_columnindex 1 +#define depth _p[2] +#define depth_columnindex 2 +#define minCai _p[3] +#define minCai_columnindex 3 +#define ica _p[4] +#define ica_columnindex 4 +#define cai _p[5] +#define cai_columnindex 5 +#define Dcai _p[6] +#define Dcai_columnindex 6 +#define v _p[7] +#define v_columnindex 7 +#define _g _p[8] +#define _g_columnindex 8 +#define _ion_ica *_ppvar[0]._pval +#define _ion_cai *_ppvar[1]._pval +#define _style_ca *((int*)_ppvar[2]._pvoid) + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_CaDynamics_E2", _hoc_setdata, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "decay_CaDynamics_E2", "ms", + "depth_CaDynamics_E2", "um", + "minCai_CaDynamics_E2", "mM", + 0,0 +}; + static double cai0 = 0; + static double delta_t = 0.01; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"CaDynamics_E2", + "gamma_CaDynamics_E2", + "decay_CaDynamics_E2", + "depth_CaDynamics_E2", + "minCai_CaDynamics_E2", + 0, + 0, + 0, + 0}; + static Symbol* _ca_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 9, _prop); + /*initialize range parameters*/ + gamma = 0.001734; + decay = 103.091; + depth = 0.1; + minCai = 0.0001; + _prop->param = _p; + _prop->param_size = 9; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_ca_sym); + nrn_check_conc_write(_prop, prop_ion, 1); + nrn_promote(prop_ion, 3, 0); + _ppvar[0]._pval = &prop_ion->param[3]; /* ica */ + _ppvar[1]._pval = &prop_ion->param[1]; /* cai */ + _ppvar[2]._pvoid = (void*)(&(prop_ion->dparam[0]._i)); /* iontype for ca */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _CaDynamics_E2_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("ca", -10000.); + _ca_sym = hoc_lookup("ca_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 9, 4); + hoc_register_dparam_semantics(_mechtype, 0, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "#ca_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + nrn_writes_conc(_mechtype, 0); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 CaDynamics_E2 /mnt/c/neuron/neurenv/mech/CaDynamics_E2.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } + +#define FARADAY _nrnunit_FARADAY[_nrnunit_use_legacy_] +static double _nrnunit_FARADAY[2] = {0x1.78e555060882cp+16, 96485.3}; /* 96485.3321233100141 */ +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[1], _dlist1[1]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + Dcai = - ( 10000.0 ) * ( ica * gamma / ( 2.0 * FARADAY * depth ) ) - ( cai - minCai ) / decay ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + Dcai = Dcai / (1. - dt*( ( - ( ( 1.0 ) ) / decay ) )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + cai = cai + (1. - exp(dt*(( - ( ( 1.0 ) ) / decay ))))*(- ( ( - ( 10000.0 ) )*( ( ( ( ica )*( gamma ) ) / ( 2.0 * FARADAY * depth ) ) ) - ( ( ( - minCai ) ) ) / decay ) / ( ( - ( ( 1.0 ) ) / decay ) ) - cai) ; + } + return 0; +} + +static int _ode_count(int _type){ return 1;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ica = _ion_ica; + cai = _ion_cai; + _ode_spec1 (_p, _ppvar, _thread, _nt); + _ion_cai = cai; + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 1; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + _pv[0] = &(_ion_cai); + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ica = _ion_ica; + cai = _ion_cai; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_ca_sym, _ppvar, 0, 3); + nrn_update_ion_pointer(_ca_sym, _ppvar, 1, 1); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ica = _ion_ica; + cai = _ion_cai; + initmodel(_p, _ppvar, _thread, _nt); + _ion_cai = cai; + nrn_wrote_conc(_ca_sym, (&(_ion_cai)) - 1, _style_ca); +} +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ica = _ion_ica; + cai = _ion_cai; + { states(_p, _ppvar, _thread, _nt); + } { + } + _ion_cai = cai; +}} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = cai_columnindex; _dlist1[0] = Dcai_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/CaDynamics_E2.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ": Dynamics that track inside calcium concentration\n" + ": modified from Destexhe et al. 1994\n" + "\n" + "NEURON {\n" + " SUFFIX CaDynamics_E2\n" + " USEION ca READ ica WRITE cai\n" + " RANGE decay, gamma, minCai, depth\n" + "}\n" + "\n" + "UNITS {\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + " FARADAY = (faraday) (coulombs)\n" + " (molar) = (1/liter)\n" + " (mM) = (millimolar)\n" + " (um) = (micron)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gamma = 0.001734 : percent of free calcium (not buffered)\n" + " decay = 103.091390 (ms) : rate of removal of calcium\n" + " depth = 0.1 (um) : depth of shell\n" + " minCai = 1e-4 (mM)\n" + "}\n" + "\n" + "ASSIGNED {ica (mA/cm2)}\n" + "\n" + "STATE {\n" + " cai (mM)\n" + " }\n" + "\n" + "BREAKPOINT { SOLVE states METHOD cnexp }\n" + "\n" + "DERIVATIVE states {\n" + " cai' = -(10000)*(ica*gamma/(2*FARADAY*depth)) - (cai - minCai)/decay\n" + "}\n" + ; +#endif diff --git a/x86_64/CaDynamics_E2.o b/x86_64/CaDynamics_E2.o new file mode 100644 index 0000000000000000000000000000000000000000..10de07b923d49d256b80fde86181d5d563e22091 GIT binary patch literal 11320 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 +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__CaDynamics_E2_soma +#define _nrn_initial _nrn_initial__CaDynamics_E2_soma +#define nrn_cur _nrn_cur__CaDynamics_E2_soma +#define _nrn_current _nrn_current__CaDynamics_E2_soma +#define nrn_jacob _nrn_jacob__CaDynamics_E2_soma +#define nrn_state _nrn_state__CaDynamics_E2_soma +#define _net_receive _net_receive__CaDynamics_E2_soma +#define states states__CaDynamics_E2_soma + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gamma _p[0] +#define gamma_columnindex 0 +#define decay _p[1] +#define decay_columnindex 1 +#define depth _p[2] +#define depth_columnindex 2 +#define minCai _p[3] +#define minCai_columnindex 3 +#define ica _p[4] +#define ica_columnindex 4 +#define cai _p[5] +#define cai_columnindex 5 +#define Dcai _p[6] +#define Dcai_columnindex 6 +#define v _p[7] +#define v_columnindex 7 +#define _g _p[8] +#define _g_columnindex 8 +#define _ion_ica *_ppvar[0]._pval +#define _ion_cai *_ppvar[1]._pval +#define _style_ca *((int*)_ppvar[2]._pvoid) + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_CaDynamics_E2_soma", _hoc_setdata, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "decay_CaDynamics_E2_soma", "ms", + "depth_CaDynamics_E2_soma", "um", + "minCai_CaDynamics_E2_soma", "mM", + 0,0 +}; + static double cai0 = 0; + static double delta_t = 0.01; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"CaDynamics_E2_soma", + "gamma_CaDynamics_E2_soma", + "decay_CaDynamics_E2_soma", + "depth_CaDynamics_E2_soma", + "minCai_CaDynamics_E2_soma", + 0, + 0, + 0, + 0}; + static Symbol* _ca_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 9, _prop); + /*initialize range parameters*/ + gamma = 0.000996; + decay = 873.499; + depth = 0.1; + minCai = 0.0001; + _prop->param = _p; + _prop->param_size = 9; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_ca_sym); + nrn_check_conc_write(_prop, prop_ion, 1); + nrn_promote(prop_ion, 3, 0); + _ppvar[0]._pval = &prop_ion->param[3]; /* ica */ + _ppvar[1]._pval = &prop_ion->param[1]; /* cai */ + _ppvar[2]._pvoid = (void*)(&(prop_ion->dparam[0]._i)); /* iontype for ca */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _CaDynamics_E2_soma_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("ca", -10000.); + _ca_sym = hoc_lookup("ca_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 9, 4); + hoc_register_dparam_semantics(_mechtype, 0, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "#ca_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + nrn_writes_conc(_mechtype, 0); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 CaDynamics_E2_soma /mnt/c/neuron/neurenv/mech/CaDynamics_E2_soma.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } + +#define FARADAY _nrnunit_FARADAY[_nrnunit_use_legacy_] +static double _nrnunit_FARADAY[2] = {0x1.78e555060882cp+16, 96485.3}; /* 96485.3321233100141 */ +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[1], _dlist1[1]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + Dcai = - ( 10000.0 ) * ( ica * gamma / ( 2.0 * FARADAY * depth ) ) - ( cai - minCai ) / decay ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + Dcai = Dcai / (1. - dt*( ( - ( ( 1.0 ) ) / decay ) )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + cai = cai + (1. - exp(dt*(( - ( ( 1.0 ) ) / decay ))))*(- ( ( - ( 10000.0 ) )*( ( ( ( ica )*( gamma ) ) / ( 2.0 * FARADAY * depth ) ) ) - ( ( ( - minCai ) ) ) / decay ) / ( ( - ( ( 1.0 ) ) / decay ) ) - cai) ; + } + return 0; +} + +static int _ode_count(int _type){ return 1;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ica = _ion_ica; + cai = _ion_cai; + _ode_spec1 (_p, _ppvar, _thread, _nt); + _ion_cai = cai; + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 1; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + _pv[0] = &(_ion_cai); + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ica = _ion_ica; + cai = _ion_cai; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_ca_sym, _ppvar, 0, 3); + nrn_update_ion_pointer(_ca_sym, _ppvar, 1, 1); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ica = _ion_ica; + cai = _ion_cai; + initmodel(_p, _ppvar, _thread, _nt); + _ion_cai = cai; + nrn_wrote_conc(_ca_sym, (&(_ion_cai)) - 1, _style_ca); +} +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ica = _ion_ica; + cai = _ion_cai; + { states(_p, _ppvar, _thread, _nt); + } { + } + _ion_cai = cai; +}} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = cai_columnindex; _dlist1[0] = Dcai_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/CaDynamics_E2_soma.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ": Dynamics that track inside calcium concentration\n" + ": modified from Destexhe et al. 1994\n" + "\n" + "NEURON {\n" + " SUFFIX CaDynamics_E2_soma\n" + " USEION ca READ ica WRITE cai\n" + " RANGE decay, gamma, minCai, depth\n" + "}\n" + "\n" + "UNITS {\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + " FARADAY = (faraday) (coulombs)\n" + " (molar) = (1/liter)\n" + " (mM) = (millimolar)\n" + " (um) = (micron)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gamma = 0.000996 : percent of free calcium (not buffered)\n" + " decay = 873.498863 (ms) : rate of removal of calcium\n" + " depth = 0.1 (um) : depth of shell\n" + " minCai = 1e-4 (mM)\n" + "}\n" + "\n" + "ASSIGNED {ica (mA/cm2)}\n" + "\n" + "STATE {\n" + " cai (mM)\n" + " }\n" + "\n" + "BREAKPOINT { SOLVE states METHOD cnexp }\n" + "\n" + "DERIVATIVE states {\n" + " cai' = -(10000)*(ica*gamma/(2*FARADAY*depth)) - (cai - minCai)/decay\n" + "}\n" + ; +#endif diff --git a/x86_64/CaDynamics_E2_soma.o b/x86_64/CaDynamics_E2_soma.o new file mode 100644 index 0000000000000000000000000000000000000000..2492bad1c44a98b34ed23b149e6d7aae43d78d7e GIT binary patch literal 11408 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 Vni8&~hZq0= literal 0 HcmV?d00001 diff --git a/x86_64/Ca_HVA.c b/x86_64/Ca_HVA.c new file mode 100644 index 0000000..6a4f912 --- /dev/null +++ b/x86_64/Ca_HVA.c @@ -0,0 +1,585 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__Ca_HVA +#define _nrn_initial _nrn_initial__Ca_HVA +#define nrn_cur _nrn_cur__Ca_HVA +#define _nrn_current _nrn_current__Ca_HVA +#define nrn_jacob _nrn_jacob__Ca_HVA +#define nrn_state _nrn_state__Ca_HVA +#define _net_receive _net_receive__Ca_HVA +#define rates rates__Ca_HVA +#define states states__Ca_HVA + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gCa_HVAbar _p[0] +#define gCa_HVAbar_columnindex 0 +#define ica _p[1] +#define ica_columnindex 1 +#define m _p[2] +#define m_columnindex 2 +#define h _p[3] +#define h_columnindex 3 +#define eca _p[4] +#define eca_columnindex 4 +#define gCa _p[5] +#define gCa_columnindex 5 +#define mInf _p[6] +#define mInf_columnindex 6 +#define mTau _p[7] +#define mTau_columnindex 7 +#define mAlpha _p[8] +#define mAlpha_columnindex 8 +#define mBeta _p[9] +#define mBeta_columnindex 9 +#define hInf _p[10] +#define hInf_columnindex 10 +#define hTau _p[11] +#define hTau_columnindex 11 +#define hAlpha _p[12] +#define hAlpha_columnindex 12 +#define hBeta _p[13] +#define hBeta_columnindex 13 +#define Dm _p[14] +#define Dm_columnindex 14 +#define Dh _p[15] +#define Dh_columnindex 15 +#define v _p[16] +#define v_columnindex 16 +#define _g _p[17] +#define _g_columnindex 17 +#define _ion_eca *_ppvar[0]._pval +#define _ion_ica *_ppvar[1]._pval +#define _ion_dicadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_Ca_HVA", _hoc_setdata, + "rates_Ca_HVA", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gCa_HVAbar_Ca_HVA", "S/cm2", + "ica_Ca_HVA", "mA/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"Ca_HVA", + "gCa_HVAbar_Ca_HVA", + 0, + "ica_Ca_HVA", + 0, + "m_Ca_HVA", + "h_Ca_HVA", + 0, + 0}; + static Symbol* _ca_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 18, _prop); + /*initialize range parameters*/ + gCa_HVAbar = 0.000684; + _prop->param = _p; + _prop->param_size = 18; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_ca_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* eca */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ica */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dicadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _Ca_HVA_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("ca", -10000.); + _ca_sym = hoc_lookup("ca_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 18, 4); + hoc_register_dparam_semantics(_mechtype, 0, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 Ca_HVA /mnt/c/neuron/neurenv/mech/Ca_HVA.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + if ( ( v == - 27.0 ) ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.055 * ( - 27.0 - v ) ) / ( exp ( ( - 27.0 - v ) / 3.8 ) - 1.0 ) ; + mBeta = ( 0.94 * exp ( ( - 75.0 - v ) / 17.0 ) ) ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + mTau = 1.0 / ( mAlpha + mBeta ) ; + hAlpha = ( 0.000457 * exp ( ( - 13.0 - v ) / 50.0 ) ) ; + hBeta = ( 0.0065 / ( exp ( ( - v - 15.0 ) / 28.0 ) + 1.0 ) ) ; + hInf = hAlpha / ( hAlpha + hBeta ) ; + hTau = 1.0 / ( hAlpha + hBeta ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_ca_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_ca_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_ca_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + eca = _ion_eca; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gCa = gCa_HVAbar * m * m * h ; + ica = gCa * ( v - eca ) ; + } + _current += ica; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + eca = _ion_eca; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dica; + _dica = ica; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dicadv += (_dica - ica)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ica += ica ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + eca = _ion_eca; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/Ca_HVA.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference : : Reuveni, Friedman, Amitai, and Gutnick, J.Neurosci. 1993\n" + "\n" + "NEURON {\n" + " SUFFIX Ca_HVA\n" + " USEION ca READ eca WRITE ica\n" + " RANGE gCa_HVAbar, gCa_HVA, ica \n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gCa_HVAbar = 0.000684 (S/cm2) \n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " eca (mV)\n" + " ica (mA/cm2)\n" + " gCa (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE { \n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gCa = gCa_HVAbar*m*m*h\n" + " ica = gCa*(v-eca)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " UNITSOFF\n" + " if((v == -27) ){ \n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.055*(-27-v))/(exp((-27-v)/3.8) - 1) \n" + " mBeta = (0.94*exp((-75-v)/17))\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + " mTau = 1/(mAlpha + mBeta)\n" + " hAlpha = (0.000457*exp((-13-v)/50))\n" + " hBeta = (0.0065/(exp((-v-15)/28)+1))\n" + " hInf = hAlpha/(hAlpha + hBeta)\n" + " hTau = 1/(hAlpha + hBeta)\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/Ca_HVA.o b/x86_64/Ca_HVA.o new file mode 100644 index 0000000000000000000000000000000000000000..1367b998571c7c8feb1675cd32563c51d7b3e207 GIT binary patch literal 13560 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 DK@6+j literal 0 HcmV?d00001 diff --git a/x86_64/Ca_HVA_soma.c b/x86_64/Ca_HVA_soma.c new file mode 100644 index 0000000..52c087c --- /dev/null +++ b/x86_64/Ca_HVA_soma.c @@ -0,0 +1,585 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__Ca_HVA_soma +#define _nrn_initial _nrn_initial__Ca_HVA_soma +#define nrn_cur _nrn_cur__Ca_HVA_soma +#define _nrn_current _nrn_current__Ca_HVA_soma +#define nrn_jacob _nrn_jacob__Ca_HVA_soma +#define nrn_state _nrn_state__Ca_HVA_soma +#define _net_receive _net_receive__Ca_HVA_soma +#define rates rates__Ca_HVA_soma +#define states states__Ca_HVA_soma + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gCa_HVAbar _p[0] +#define gCa_HVAbar_columnindex 0 +#define ica _p[1] +#define ica_columnindex 1 +#define m _p[2] +#define m_columnindex 2 +#define h _p[3] +#define h_columnindex 3 +#define eca _p[4] +#define eca_columnindex 4 +#define gCa _p[5] +#define gCa_columnindex 5 +#define mInf _p[6] +#define mInf_columnindex 6 +#define mTau _p[7] +#define mTau_columnindex 7 +#define mAlpha _p[8] +#define mAlpha_columnindex 8 +#define mBeta _p[9] +#define mBeta_columnindex 9 +#define hInf _p[10] +#define hInf_columnindex 10 +#define hTau _p[11] +#define hTau_columnindex 11 +#define hAlpha _p[12] +#define hAlpha_columnindex 12 +#define hBeta _p[13] +#define hBeta_columnindex 13 +#define Dm _p[14] +#define Dm_columnindex 14 +#define Dh _p[15] +#define Dh_columnindex 15 +#define v _p[16] +#define v_columnindex 16 +#define _g _p[17] +#define _g_columnindex 17 +#define _ion_eca *_ppvar[0]._pval +#define _ion_ica *_ppvar[1]._pval +#define _ion_dicadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_Ca_HVA_soma", _hoc_setdata, + "rates_Ca_HVA_soma", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gCa_HVAbar_Ca_HVA_soma", "S/cm2", + "ica_Ca_HVA_soma", "mA/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"Ca_HVA_soma", + "gCa_HVAbar_Ca_HVA_soma", + 0, + "ica_Ca_HVA_soma", + 0, + "m_Ca_HVA_soma", + "h_Ca_HVA_soma", + 0, + 0}; + static Symbol* _ca_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 18, _prop); + /*initialize range parameters*/ + gCa_HVAbar = 0.000459; + _prop->param = _p; + _prop->param_size = 18; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_ca_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* eca */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ica */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dicadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _Ca_HVA_soma_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("ca", -10000.); + _ca_sym = hoc_lookup("ca_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 18, 4); + hoc_register_dparam_semantics(_mechtype, 0, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 Ca_HVA_soma /mnt/c/neuron/neurenv/mech/Ca_HVA_soma.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + if ( ( v == - 27.0 ) ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.055 * ( - 27.0 - v ) ) / ( exp ( ( - 27.0 - v ) / 3.8 ) - 1.0 ) ; + mBeta = ( 0.94 * exp ( ( - 75.0 - v ) / 17.0 ) ) ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + mTau = 1.0 / ( mAlpha + mBeta ) ; + hAlpha = ( 0.000457 * exp ( ( - 13.0 - v ) / 50.0 ) ) ; + hBeta = ( 0.0065 / ( exp ( ( - v - 15.0 ) / 28.0 ) + 1.0 ) ) ; + hInf = hAlpha / ( hAlpha + hBeta ) ; + hTau = 1.0 / ( hAlpha + hBeta ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_ca_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_ca_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_ca_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + eca = _ion_eca; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gCa = gCa_HVAbar * m * m * h ; + ica = gCa * ( v - eca ) ; + } + _current += ica; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + eca = _ion_eca; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dica; + _dica = ica; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dicadv += (_dica - ica)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ica += ica ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + eca = _ion_eca; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/Ca_HVA_soma.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference : : Reuveni, Friedman, Amitai, and Gutnick, J.Neurosci. 1993\n" + "\n" + "NEURON {\n" + " SUFFIX Ca_HVA_soma\n" + " USEION ca READ eca WRITE ica\n" + " RANGE gCa_HVAbar, gCa_HVA, ica \n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gCa_HVAbar = 0.000459 (S/cm2) \n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " eca (mV)\n" + " ica (mA/cm2)\n" + " gCa (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE { \n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gCa = gCa_HVAbar*m*m*h\n" + " ica = gCa*(v-eca)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " UNITSOFF\n" + " if((v == -27) ){ \n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.055*(-27-v))/(exp((-27-v)/3.8) - 1) \n" + " mBeta = (0.94*exp((-75-v)/17))\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + " mTau = 1/(mAlpha + mBeta)\n" + " hAlpha = (0.000457*exp((-13-v)/50))\n" + " hBeta = (0.0065/(exp((-v-15)/28)+1))\n" + " hInf = hAlpha/(hAlpha + hBeta)\n" + " hTau = 1/(hAlpha + hBeta)\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/Ca_HVA_soma.o b/x86_64/Ca_HVA_soma.o new file mode 100644 index 0000000000000000000000000000000000000000..ed9f136e23779bd9148fd55dfef4dd8743940212 GIT binary patch literal 13656 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 M!Gh4Rg0Vp~0Nl;c=Kufz literal 0 HcmV?d00001 diff --git a/x86_64/Ca_LVAst.c b/x86_64/Ca_LVAst.c new file mode 100644 index 0000000..3e97271 --- /dev/null +++ b/x86_64/Ca_LVAst.c @@ -0,0 +1,578 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__Ca_LVAst +#define _nrn_initial _nrn_initial__Ca_LVAst +#define nrn_cur _nrn_cur__Ca_LVAst +#define _nrn_current _nrn_current__Ca_LVAst +#define nrn_jacob _nrn_jacob__Ca_LVAst +#define nrn_state _nrn_state__Ca_LVAst +#define _net_receive _net_receive__Ca_LVAst +#define rates rates__Ca_LVAst +#define states states__Ca_LVAst + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gCa_LVAstbar _p[0] +#define gCa_LVAstbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ica _p[2] +#define ica_columnindex 2 +#define gCa_LVAst _p[3] +#define gCa_LVAst_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define eca _p[6] +#define eca_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define hInf _p[9] +#define hInf_columnindex 9 +#define hTau _p[10] +#define hTau_columnindex 10 +#define Dm _p[11] +#define Dm_columnindex 11 +#define Dh _p[12] +#define Dh_columnindex 12 +#define v _p[13] +#define v_columnindex 13 +#define _g _p[14] +#define _g_columnindex 14 +#define _ion_eca *_ppvar[0]._pval +#define _ion_ica *_ppvar[1]._pval +#define _ion_dicadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_Ca_LVAst", _hoc_setdata, + "rates_Ca_LVAst", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gCa_LVAstbar_Ca_LVAst", "S/cm2", + "ica_Ca_LVAst", "mA/cm2", + "gCa_LVAst_Ca_LVAst", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"Ca_LVAst", + "gCa_LVAstbar_Ca_LVAst", + "celsius_Ca_LVAst", + 0, + "ica_Ca_LVAst", + "gCa_LVAst_Ca_LVAst", + 0, + "m_Ca_LVAst", + "h_Ca_LVAst", + 0, + 0}; + static Symbol* _ca_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 15, _prop); + /*initialize range parameters*/ + gCa_LVAstbar = 7e-06; + celsius = 35; + _prop->param = _p; + _prop->param_size = 15; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_ca_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* eca */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ica */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dicadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _Ca_LVAst_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("ca", -10000.); + _ca_sym = hoc_lookup("ca_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 15, 4); + hoc_register_dparam_semantics(_mechtype, 0, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 Ca_LVAst /mnt/c/neuron/neurenv/mech/Ca_LVAst.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + v = v + 10.0 ; + mInf = 1.0000 / ( 1.0 + exp ( ( v - - 30.000 ) / - 6.0 ) ) ; + mTau = ( 5.0000 + 20.0000 / ( 1.0 + exp ( ( v - - 25.000 ) / 5.0 ) ) ) / _lqt ; + hInf = 1.0000 / ( 1.0 + exp ( ( v - - 80.000 ) / 6.4 ) ) ; + hTau = ( 20.0000 + 50.0000 / ( 1.0 + exp ( ( v - - 40.000 ) / 7.0 ) ) ) / _lqt ; + v = v - 10.0 ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_ca_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_ca_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_ca_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + eca = _ion_eca; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gCa_LVAst = gCa_LVAstbar * m * m * h ; + ica = gCa_LVAst * ( v - eca ) ; + } + _current += ica; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + eca = _ion_eca; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dica; + _dica = ica; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dicadv += (_dica - ica)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ica += ica ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + eca = _ion_eca; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/Ca_LVAst.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Comment : LVA ca channel. Note: mtau is an approximation from the plots\n" + ":Reference : : Avery and Johnston 1996, tau from Randall 1997\n" + ":Comment: shifted by -10 mv to correct for junction potential\n" + ":Comment: corrected rates using q10 = 2.3, target temperature 35, orginal 21\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX Ca_LVAst\n" + " USEION ca READ eca WRITE ica\n" + " RANGE gCa_LVAstbar, gCa_LVAst, ica, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gCa_LVAstbar = 0.000007 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " eca (mV)\n" + " ica (mA/cm2)\n" + " gCa_LVAst (S/cm2)\n" + " mInf\n" + " mTau\n" + " hInf\n" + " hTau\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gCa_LVAst = gCa_LVAstbar*m*m*h\n" + " ica = gCa_LVAst*(v-eca)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10) \n" + " UNITSOFF\n" + " v = v + 10\n" + " mInf = 1.0000/(1+ exp((v - -30.000)/-6))\n" + " mTau = (5.0000 + 20.0000/(1+exp((v - -25.000)/5)))/qt\n" + " hInf = 1.0000/(1+ exp((v - -80.000)/6.4))\n" + " hTau = (20.0000 + 50.0000/(1+exp((v - -40.000)/7)))/qt\n" + " v = v - 10\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/Ca_LVAst.o b/x86_64/Ca_LVAst.o new file mode 100644 index 0000000000000000000000000000000000000000..e44d59b7c0e7aef70682cdfb66fb510af75dee2f GIT binary patch literal 14016 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 literal 0 HcmV?d00001 diff --git a/x86_64/Ca_LVAst_soma.c b/x86_64/Ca_LVAst_soma.c new file mode 100644 index 0000000..96fadc8 --- /dev/null +++ b/x86_64/Ca_LVAst_soma.c @@ -0,0 +1,578 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__Ca_LVAst_soma +#define _nrn_initial _nrn_initial__Ca_LVAst_soma +#define nrn_cur _nrn_cur__Ca_LVAst_soma +#define _nrn_current _nrn_current__Ca_LVAst_soma +#define nrn_jacob _nrn_jacob__Ca_LVAst_soma +#define nrn_state _nrn_state__Ca_LVAst_soma +#define _net_receive _net_receive__Ca_LVAst_soma +#define rates rates__Ca_LVAst_soma +#define states states__Ca_LVAst_soma + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gCa_LVAstbar _p[0] +#define gCa_LVAstbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ica _p[2] +#define ica_columnindex 2 +#define gCa_LVAst _p[3] +#define gCa_LVAst_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define eca _p[6] +#define eca_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define hInf _p[9] +#define hInf_columnindex 9 +#define hTau _p[10] +#define hTau_columnindex 10 +#define Dm _p[11] +#define Dm_columnindex 11 +#define Dh _p[12] +#define Dh_columnindex 12 +#define v _p[13] +#define v_columnindex 13 +#define _g _p[14] +#define _g_columnindex 14 +#define _ion_eca *_ppvar[0]._pval +#define _ion_ica *_ppvar[1]._pval +#define _ion_dicadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_Ca_LVAst_soma", _hoc_setdata, + "rates_Ca_LVAst_soma", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gCa_LVAstbar_Ca_LVAst_soma", "S/cm2", + "ica_Ca_LVAst_soma", "mA/cm2", + "gCa_LVAst_Ca_LVAst_soma", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"Ca_LVAst_soma", + "gCa_LVAstbar_Ca_LVAst_soma", + "celsius_Ca_LVAst_soma", + 0, + "ica_Ca_LVAst_soma", + "gCa_LVAst_Ca_LVAst_soma", + 0, + "m_Ca_LVAst_soma", + "h_Ca_LVAst_soma", + 0, + 0}; + static Symbol* _ca_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 15, _prop); + /*initialize range parameters*/ + gCa_LVAstbar = 0.005592; + celsius = 35; + _prop->param = _p; + _prop->param_size = 15; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_ca_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* eca */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ica */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dicadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _Ca_LVAst_soma_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("ca", -10000.); + _ca_sym = hoc_lookup("ca_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 15, 4); + hoc_register_dparam_semantics(_mechtype, 0, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 Ca_LVAst_soma /mnt/c/neuron/neurenv/mech/Ca_LVAst_soma.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + v = v + 10.0 ; + mInf = 1.0000 / ( 1.0 + exp ( ( v - - 30.000 ) / - 6.0 ) ) ; + mTau = ( 5.0000 + 20.0000 / ( 1.0 + exp ( ( v - - 25.000 ) / 5.0 ) ) ) / _lqt ; + hInf = 1.0000 / ( 1.0 + exp ( ( v - - 80.000 ) / 6.4 ) ) ; + hTau = ( 20.0000 + 50.0000 / ( 1.0 + exp ( ( v - - 40.000 ) / 7.0 ) ) ) / _lqt ; + v = v - 10.0 ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + eca = _ion_eca; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_ca_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_ca_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_ca_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + eca = _ion_eca; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gCa_LVAst = gCa_LVAstbar * m * m * h ; + ica = gCa_LVAst * ( v - eca ) ; + } + _current += ica; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + eca = _ion_eca; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dica; + _dica = ica; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dicadv += (_dica - ica)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ica += ica ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + eca = _ion_eca; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/Ca_LVAst_soma.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Comment : LVA ca channel. Note: mtau is an approximation from the plots\n" + ":Reference : : Avery and Johnston 1996, tau from Randall 1997\n" + ":Comment: shifted by -10 mv to correct for junction potential\n" + ":Comment: corrected rates using q10 = 2.3, target temperature 35, orginal 21\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX Ca_LVAst_soma\n" + " USEION ca READ eca WRITE ica\n" + " RANGE gCa_LVAstbar, gCa_LVAst, ica, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gCa_LVAstbar = 0.005592 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " eca (mV)\n" + " ica (mA/cm2)\n" + " gCa_LVAst (S/cm2)\n" + " mInf\n" + " mTau\n" + " hInf\n" + " hTau\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gCa_LVAst = gCa_LVAstbar*m*m*h\n" + " ica = gCa_LVAst*(v-eca)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10) \n" + " UNITSOFF\n" + " v = v + 10\n" + " mInf = 1.0000/(1+ exp((v - -30.000)/-6))\n" + " mTau = (5.0000 + 20.0000/(1+exp((v - -25.000)/5)))/qt\n" + " hInf = 1.0000/(1+ exp((v - -80.000)/6.4))\n" + " hTau = (20.0000 + 50.0000/(1+exp((v - -40.000)/7)))/qt\n" + " v = v - 10\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/Ca_LVAst_soma.o b/x86_64/Ca_LVAst_soma.o new file mode 100644 index 0000000000000000000000000000000000000000..10f5d47c469c79b764d3daeb17c54c5d32a20db9 GIT binary patch literal 14120 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 +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__Ih +#define _nrn_initial _nrn_initial__Ih +#define nrn_cur _nrn_cur__Ih +#define _nrn_current _nrn_current__Ih +#define nrn_jacob _nrn_jacob__Ih +#define nrn_state _nrn_state__Ih +#define _net_receive _net_receive__Ih +#define rates rates__Ih +#define states states__Ih + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gIhbar _p[0] +#define gIhbar_columnindex 0 +#define ihcn _p[1] +#define ihcn_columnindex 1 +#define gIh _p[2] +#define gIh_columnindex 2 +#define m _p[3] +#define m_columnindex 3 +#define mInf _p[4] +#define mInf_columnindex 4 +#define mTau _p[5] +#define mTau_columnindex 5 +#define mAlpha _p[6] +#define mAlpha_columnindex 6 +#define mBeta _p[7] +#define mBeta_columnindex 7 +#define Dm _p[8] +#define Dm_columnindex 8 +#define v _p[9] +#define v_columnindex 9 +#define _g _p[10] +#define _g_columnindex 10 + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_Ih", _hoc_setdata, + "rates_Ih", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ +#define ehcn ehcn_Ih + double ehcn = -45; + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "ehcn_Ih", "mV", + "gIhbar_Ih", "S/cm2", + "ihcn_Ih", "mA/cm2", + "gIh_Ih", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + "ehcn_Ih", &ehcn_Ih, + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[0]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"Ih", + "gIhbar_Ih", + 0, + "ihcn_Ih", + "gIh_Ih", + 0, + "m_Ih", + 0, + 0}; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 11, _prop); + /*initialize range parameters*/ + gIhbar = 8e-05; + _prop->param = _p; + _prop->param_size = 11; + _ppvar = nrn_prop_datum_alloc(_mechtype, 1, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _Ih_reg() { + int _vectorized = 1; + _initlists(); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 11, 1); + hoc_register_dparam_semantics(_mechtype, 0, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 Ih /mnt/c/neuron/neurenv/mech/Ih.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[1], _dlist1[1]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + if ( v == - 154.9 ) { + v = v + 0.0001 ; + } + mAlpha = 0.001 * 6.43 * ( v + 154.9 ) / ( exp ( ( v + 154.9 ) / 11.9 ) - 1.0 ) ; + mBeta = 0.001 * 193.0 * exp ( v / 33.1 ) ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + mTau = 1.0 / ( mAlpha + mBeta ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 1;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 1; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + _ode_matsol_instance1(_threadargs_); + }} + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + initmodel(_p, _ppvar, _thread, _nt); +} +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gIh = gIhbar * m ; + ihcn = gIh * ( v - ehcn ) ; + } + _current += ihcn; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + } + _g = (_g - _rhs)/.001; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + { states(_p, _ppvar, _thread, _nt); + }}} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/Ih.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference : : Kole,Hallermann,and Stuart, J. Neurosci. 2006\n" + "\n" + "NEURON {\n" + " SUFFIX Ih\n" + " NONSPECIFIC_CURRENT ihcn\n" + " RANGE gIhbar, gIh, ihcn \n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gIhbar = 0.00008 (S/cm2) \n" + " ehcn = -45.0 (mV)\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ihcn (mA/cm2)\n" + " gIh (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + "}\n" + "\n" + "STATE { \n" + " m\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gIh = gIhbar*m\n" + " ihcn = gIh*(v-ehcn)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " UNITSOFF\n" + " if(v == -154.9){\n" + " v = v + 0.0001\n" + " }\n" + " mAlpha = 0.001*6.43*(v+154.9)/(exp((v+154.9)/11.9)-1)\n" + " mBeta = 0.001*193*exp(v/33.1)\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + " mTau = 1/(mAlpha + mBeta)\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/Ih.o b/x86_64/Ih.o new file mode 100644 index 0000000000000000000000000000000000000000..faac5f5a58db1e836b002e79efa86bd4c7deaa48 GIT binary patch literal 10976 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 literal 0 HcmV?d00001 diff --git a/x86_64/Im.c b/x86_64/Im.c new file mode 100644 index 0000000..9c63456 --- /dev/null +++ b/x86_64/Im.c @@ -0,0 +1,557 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__Im +#define _nrn_initial _nrn_initial__Im +#define nrn_cur _nrn_cur__Im +#define _nrn_current _nrn_current__Im +#define nrn_jacob _nrn_jacob__Im +#define nrn_state _nrn_state__Im +#define _net_receive _net_receive__Im +#define rates rates__Im +#define states states__Im + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gImbar _p[0] +#define gImbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ik _p[2] +#define ik_columnindex 2 +#define gIm _p[3] +#define gIm_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define ek _p[5] +#define ek_columnindex 5 +#define mInf _p[6] +#define mInf_columnindex 6 +#define mTau _p[7] +#define mTau_columnindex 7 +#define mAlpha _p[8] +#define mAlpha_columnindex 8 +#define mBeta _p[9] +#define mBeta_columnindex 9 +#define Dm _p[10] +#define Dm_columnindex 10 +#define v _p[11] +#define v_columnindex 11 +#define _g _p[12] +#define _g_columnindex 12 +#define _ion_ek *_ppvar[0]._pval +#define _ion_ik *_ppvar[1]._pval +#define _ion_dikdv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_Im", _hoc_setdata, + "rates_Im", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gImbar_Im", "S/cm2", + "ik_Im", "mA/cm2", + "gIm_Im", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"Im", + "gImbar_Im", + "celsius_Im", + 0, + "ik_Im", + "gIm_Im", + 0, + "m_Im", + 0, + 0}; + static Symbol* _k_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 13, _prop); + /*initialize range parameters*/ + gImbar = 0.001; + celsius = 35; + _prop->param = _p; + _prop->param_size = 13; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_k_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ek */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ik */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dikdv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _Im_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("k", -10000.); + _k_sym = hoc_lookup("k_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 13, 4); + hoc_register_dparam_semantics(_mechtype, 0, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 Im /mnt/c/neuron/neurenv/mech/Im.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[1], _dlist1[1]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + mAlpha = 3.3e-3 * exp ( 2.5 * 0.04 * ( v - - 35.0 ) ) ; + mBeta = 3.3e-3 * exp ( - 2.5 * 0.04 * ( v - - 35.0 ) ) ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + mTau = ( 1.0 / ( mAlpha + mBeta ) ) / _lqt ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 1;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 1; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_k_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_k_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_k_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ek = _ion_ek; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gIm = gImbar * m ; + ik = gIm * ( v - ek ) ; + } + _current += ik; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ek = _ion_ek; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dik; + _dik = ik; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dikdv += (_dik - ik)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ik += ik ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ek = _ion_ek; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/Im.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference : : Adams et al. 1982 - M-currents and other potassium currents in bullfrog sympathetic neurones\n" + ":Comment: corrected rates using q10 = 2.3, target temperature 34, orginal 21\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX Im\n" + " USEION k READ ek WRITE ik\n" + " RANGE gImbar, gIm, ik, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gImbar = 0.001000 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ek (mV)\n" + " ik (mA/cm2)\n" + " gIm (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + "}\n" + "\n" + "STATE { \n" + " m\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gIm = gImbar*m\n" + " ik = gIm*(v-ek)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10) \n" + " UNITSOFF\n" + " mAlpha = 3.3e-3*exp(2.5*0.04*(v - -35))\n" + " mBeta = 3.3e-3*exp(-2.5*0.04*(v - -35))\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + " mTau = (1/(mAlpha + mBeta))/qt\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/Im.o b/x86_64/Im.o new file mode 100644 index 0000000000000000000000000000000000000000..370534494c642258c679e0cffa310c71c781a5fb GIT binary patch literal 12376 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 literal 0 HcmV?d00001 diff --git a/x86_64/K_Pst.c b/x86_64/K_Pst.c new file mode 100644 index 0000000..a0d77cd --- /dev/null +++ b/x86_64/K_Pst.c @@ -0,0 +1,588 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__K_Pst +#define _nrn_initial _nrn_initial__K_Pst +#define nrn_cur _nrn_cur__K_Pst +#define _nrn_current _nrn_current__K_Pst +#define nrn_jacob _nrn_jacob__K_Pst +#define nrn_state _nrn_state__K_Pst +#define _net_receive _net_receive__K_Pst +#define rates rates__K_Pst +#define states states__K_Pst + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gK_Pstbar _p[0] +#define gK_Pstbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ik _p[2] +#define ik_columnindex 2 +#define gK_Pst _p[3] +#define gK_Pst_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define ek _p[6] +#define ek_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define hInf _p[9] +#define hInf_columnindex 9 +#define hTau _p[10] +#define hTau_columnindex 10 +#define Dm _p[11] +#define Dm_columnindex 11 +#define Dh _p[12] +#define Dh_columnindex 12 +#define v _p[13] +#define v_columnindex 13 +#define _g _p[14] +#define _g_columnindex 14 +#define _ion_ek *_ppvar[0]._pval +#define _ion_ik *_ppvar[1]._pval +#define _ion_dikdv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_K_Pst", _hoc_setdata, + "rates_K_Pst", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gK_Pstbar_K_Pst", "S/cm2", + "ik_K_Pst", "mA/cm2", + "gK_Pst_K_Pst", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"K_Pst", + "gK_Pstbar_K_Pst", + "celsius_K_Pst", + 0, + "ik_K_Pst", + "gK_Pst_K_Pst", + 0, + "m_K_Pst", + "h_K_Pst", + 0, + 0}; + static Symbol* _k_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 15, _prop); + /*initialize range parameters*/ + gK_Pstbar = 0.957198; + celsius = 35; + _prop->param = _p; + _prop->param_size = 15; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_k_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ek */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ik */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dikdv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _K_Pst_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("k", -10000.); + _k_sym = hoc_lookup("k_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 15, 4); + hoc_register_dparam_semantics(_mechtype, 0, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 K_Pst /mnt/c/neuron/neurenv/mech/K_Pst.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + v = v + 10.0 ; + mInf = ( 1.0 / ( 1.0 + exp ( - ( v + 1.0 ) / 12.0 ) ) ) ; + if ( v < - 50.0 ) { + mTau = ( 1.25 + 175.03 * exp ( - v * - 0.026 ) ) / _lqt ; + } + else { + mTau = ( ( 1.25 + 13.0 * exp ( - v * 0.026 ) ) ) / _lqt ; + } + hInf = 1.0 / ( 1.0 + exp ( - ( v + 54.0 ) / - 11.0 ) ) ; + hTau = ( 360.0 + ( 1010.0 + 24.0 * ( v + 55.0 ) ) * exp ( - pow( ( ( v + 75.0 ) / 48.0 ) , 2.0 ) ) ) / _lqt ; + v = v - 10.0 ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_k_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_k_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_k_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ek = _ion_ek; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gK_Pst = gK_Pstbar * m * m * h ; + ik = gK_Pst * ( v - ek ) ; + } + _current += ik; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ek = _ion_ek; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dik; + _dik = ik; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dikdv += (_dik - ik)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ik += ik ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ek = _ion_ek; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/K_Pst.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Comment : The persistent component of the K current\n" + ":Reference : : Voltage-gated K+ channels in layer 5 neocortical pyramidal neurones from young rats:subtypes and gradients,Korngreen and Sakmann, J. Physiology, 2000\n" + ":Comment : shifted -10 mv to correct for junction potential\n" + ":Comment: corrected rates using q10 = 2.3, target temperature 35, orginal 21\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra** \n" + "\n" + "NEURON {\n" + " SUFFIX K_Pst\n" + " USEION k READ ek WRITE ik\n" + " RANGE gK_Pstbar, gK_Pst, ik, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gK_Pstbar = 0.957198 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ek (mV)\n" + " ik (mA/cm2)\n" + " gK_Pst (S/cm2)\n" + " mInf\n" + " mTau\n" + " hInf\n" + " hTau\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gK_Pst = gK_Pstbar*m*m*h\n" + " ik = gK_Pst*(v-ek)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10)\n" + " UNITSOFF\n" + " v = v + 10\n" + " mInf = (1/(1 + exp(-(v+1)/12)))\n" + " if(v<-50){\n" + " mTau = (1.25+175.03*exp(-v * -0.026))/qt\n" + " }else{\n" + " mTau = ((1.25+13*exp(-v*0.026)))/qt\n" + " }\n" + " hInf = 1/(1 + exp(-(v+54)/-11))\n" + " hTau = (360+(1010+24*(v+55))*exp(-((v+75)/48)^2))/qt\n" + " v = v - 10\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/K_Pst.o b/x86_64/K_Pst.o new file mode 100644 index 0000000000000000000000000000000000000000..fd83996d1ca66c4acda714dc7caebb3f20e5ed2b GIT binary patch literal 14528 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 Xg3Luz0+w(94K9H8Ac1)Z0$o1 +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__K_Tst +#define _nrn_initial _nrn_initial__K_Tst +#define nrn_cur _nrn_cur__K_Tst +#define _nrn_current _nrn_current__K_Tst +#define nrn_jacob _nrn_jacob__K_Tst +#define nrn_state _nrn_state__K_Tst +#define _net_receive _net_receive__K_Tst +#define rates rates__K_Tst +#define states states__K_Tst + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gK_Tstbar _p[0] +#define gK_Tstbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ik _p[2] +#define ik_columnindex 2 +#define gK_Tst _p[3] +#define gK_Tst_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define ek _p[6] +#define ek_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define hInf _p[9] +#define hInf_columnindex 9 +#define hTau _p[10] +#define hTau_columnindex 10 +#define Dm _p[11] +#define Dm_columnindex 11 +#define Dh _p[12] +#define Dh_columnindex 12 +#define v _p[13] +#define v_columnindex 13 +#define _g _p[14] +#define _g_columnindex 14 +#define _ion_ek *_ppvar[0]._pval +#define _ion_ik *_ppvar[1]._pval +#define _ion_dikdv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_K_Tst", _hoc_setdata, + "rates_K_Tst", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gK_Tstbar_K_Tst", "S/cm2", + "ik_K_Tst", "mA/cm2", + "gK_Tst_K_Tst", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"K_Tst", + "gK_Tstbar_K_Tst", + "celsius_K_Tst", + 0, + "ik_K_Tst", + "gK_Tst_K_Tst", + 0, + "m_K_Tst", + "h_K_Tst", + 0, + 0}; + static Symbol* _k_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 15, _prop); + /*initialize range parameters*/ + gK_Tstbar = 0.029456; + celsius = 35; + _prop->param = _p; + _prop->param_size = 15; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_k_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ek */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ik */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dikdv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _K_Tst_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("k", -10000.); + _k_sym = hoc_lookup("k_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 15, 4); + hoc_register_dparam_semantics(_mechtype, 0, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 K_Tst /mnt/c/neuron/neurenv/mech/K_Tst.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + v = v + 10.0 ; + mInf = 1.0 / ( 1.0 + exp ( - ( v + 0.0 ) / 19.0 ) ) ; + mTau = ( 0.34 + 0.92 * exp ( - pow( ( ( v + 71.0 ) / 59.0 ) , 2.0 ) ) ) / _lqt ; + hInf = 1.0 / ( 1.0 + exp ( - ( v + 66.0 ) / - 10.0 ) ) ; + hTau = ( 8.0 + 49.0 * exp ( - pow( ( ( v + 73.0 ) / 23.0 ) , 2.0 ) ) ) / _lqt ; + v = v - 10.0 ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_k_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_k_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_k_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ek = _ion_ek; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gK_Tst = gK_Tstbar * ( pow( m , 4.0 ) ) * h ; + ik = gK_Tst * ( v - ek ) ; + } + _current += ik; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ek = _ion_ek; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dik; + _dik = ik; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dikdv += (_dik - ik)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ik += ik ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ek = _ion_ek; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/K_Tst.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Comment : The transient component of the K current\n" + ":Reference : : Voltage-gated K+ channels in layer 5 neocortical pyramidal neurones from young rats:subtypes and gradients,Korngreen and Sakmann, J. Physiology, 2000\n" + ":Comment : shifted -10 mv to correct for junction potential\n" + ":Comment: corrected rates using q10 = 2.3, target temperature 35, orginal 21\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX K_Tst\n" + " USEION k READ ek WRITE ik\n" + " RANGE gK_Tstbar, gK_Tst, ik, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gK_Tstbar = 0.029456 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ek (mV)\n" + " ik (mA/cm2)\n" + " gK_Tst (S/cm2)\n" + " mInf\n" + " mTau\n" + " hInf\n" + " hTau\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gK_Tst = gK_Tstbar*(m^4)*h\n" + " ik = gK_Tst*(v-ek)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10)\n" + " UNITSOFF\n" + " v = v + 10\n" + " mInf = 1/(1 + exp(-(v+0)/19))\n" + " mTau = (0.34+0.92*exp(-((v+71)/59)^2))/qt\n" + " hInf = 1/(1 + exp(-(v+66)/-10))\n" + " hTau = (8+49*exp(-((v+73)/23)^2))/qt\n" + " v = v - 10\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/K_Tst.o b/x86_64/K_Tst.o new file mode 100644 index 0000000000000000000000000000000000000000..a1532d62c1c3a28d69f3a1b50832b2d85d55a00e GIT binary patch literal 14352 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�S4HXBO0cxwm z)C)t!LFOwnFfhQxrIExzdSLd#+RGsIAaM`|SrLGy9%fE4nmDNM3R2$>6$j~eMzZ%A zR2*hLtl#k(Dh^T)>R-dm{{$6BR}ZRxLH3}l=LRVRx49wV12f+RO&k_(o=|a+Ij%_V z41|he?<}p^=V+{{DO*u+~SF(o(Y-|LDIXFl-ACfpIt;5tuBZ+GxnV*g%j_jU7s5rX4l~8ezzd++K zF!LLc#C4I(pNu4~ha|oLNgO$RmO{nR?Oh8M2ic44-@QoU`bg%VLJ|k{F<|bzh9r*c z-v>}}bbDVw#XBUH2om^YXwvs6eq~#&ljjT$b1kJR&MY@`^g}2 zWdC*}iG!B>!ThxhDh@IOIi2i*ilduz5r_CsBynW(xu9JIbo0fb;^^iZ;1G|7ilc{v zJhY38ZcaS3V~VbR3RE1V9yIm>3x_#K;-KkNnD`&4ILQ6T`81Rhl)E5h8?tyER2`g@y2kC*8=UGs3keDBmIfYPhm^mPMP&kx9#X)?3B=xOOagchD9ISrnf{KI0 zKw|_j_e_9_qpM#C6$hygL^6LlR2*IXIwWyxB=wu2;vjQCV|p-qcS6O{%{hQ1Zi8gb zQK&e`oM0sJ(@=4Ab8bP!LFz-0)IWfVqpN?8B#s=v@1Wu!b3&2K`2rP3HwQK;0TM?x zhZQFtlDn zSAPI%K1e(o$sDM2LBqZbk_-$Cf=~fyH3An0%@cs6U}GvEXMxm%S6DJIz{gu*;-Iz> zNIj_S0it2zpfUo)2enl|G)x@i2M{0BW&qJJaZniq;)B|>AQ~nPiW?9gHjW7shq(tf zjtLV_1Sw`t&EQY`*0Tnz#W-l7WHY1DZH!JPsrz0`d@& zIk0&Z2Q+b*e<9=TkbW!3XxO|;51M+|yvhzVaoD`d12l2iyow0OP$c)j#wi)}iYs$V z5|bG8ic5+hbOwx7l$w*M2OdGt1C4qx=p_{wGw2oNgE%1NhI)pmTnh$0upY32qSPF{ zoc!d(9Jrd~;u4Swi2mf_5<@cvy=2JpD+ay1{E}2XcfU~G;*!MVY$!iHuT&2-GLc$T zQVBIXH6uQ)2sC^F3T4VMD4l?U4BCu^8wksvN1){iOadkj<4Z%!CUkKFP$M5Sw+z(} zN~a)uVC4;L-Uies1&M>&hA=ZhGz)kcB%~b+;=?egT!XPeG^kzxnTf8S1F9dEuR&@- z7~~ER4a1;55XgQ|p9dxeqG9@B`5z<(!XUNCG|1l|F?9VCp!SIpfCZs16jNR)OiGzJ0QbB^Y{!5;8{1A z{jl(d%%6hB?vZsfFw78!@L}Z~gvS7%FM*j;2%cZW)NcV@NP+HNSop)}dZ>O_Jpr>P z0;(VC445#i_=3}*_ +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__NaTa_t +#define _nrn_initial _nrn_initial__NaTa_t +#define nrn_cur _nrn_cur__NaTa_t +#define _nrn_current _nrn_current__NaTa_t +#define nrn_jacob _nrn_jacob__NaTa_t +#define nrn_state _nrn_state__NaTa_t +#define _net_receive _net_receive__NaTa_t +#define rates rates__NaTa_t +#define states states__NaTa_t + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gNaTa_tbar _p[0] +#define gNaTa_tbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ina _p[2] +#define ina_columnindex 2 +#define gNaTa_t _p[3] +#define gNaTa_t_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define ena _p[6] +#define ena_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define mAlpha _p[9] +#define mAlpha_columnindex 9 +#define mBeta _p[10] +#define mBeta_columnindex 10 +#define hInf _p[11] +#define hInf_columnindex 11 +#define hTau _p[12] +#define hTau_columnindex 12 +#define hAlpha _p[13] +#define hAlpha_columnindex 13 +#define hBeta _p[14] +#define hBeta_columnindex 14 +#define Dm _p[15] +#define Dm_columnindex 15 +#define Dh _p[16] +#define Dh_columnindex 16 +#define v _p[17] +#define v_columnindex 17 +#define _g _p[18] +#define _g_columnindex 18 +#define _ion_ena *_ppvar[0]._pval +#define _ion_ina *_ppvar[1]._pval +#define _ion_dinadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_NaTa_t", _hoc_setdata, + "rates_NaTa_t", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gNaTa_tbar_NaTa_t", "S/cm2", + "ina_NaTa_t", "mA/cm2", + "gNaTa_t_NaTa_t", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"NaTa_t", + "gNaTa_tbar_NaTa_t", + "celsius_NaTa_t", + 0, + "ina_NaTa_t", + "gNaTa_t_NaTa_t", + 0, + "m_NaTa_t", + "h_NaTa_t", + 0, + 0}; + static Symbol* _na_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 19, _prop); + /*initialize range parameters*/ + gNaTa_tbar = 3.28876; + celsius = 35; + _prop->param = _p; + _prop->param_size = 19; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_na_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ena */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ina */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dinadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _NaTa_t_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("na", -10000.); + _na_sym = hoc_lookup("na_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 19, 4); + hoc_register_dparam_semantics(_mechtype, 0, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 NaTa_t /mnt/c/neuron/neurenv/mech/NaTa_t.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + if ( v == - 38.0 ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.182 * ( v - - 38.0 ) ) / ( 1.0 - ( exp ( - ( v - - 38.0 ) / 6.0 ) ) ) ; + mBeta = ( 0.124 * ( - v - 38.0 ) ) / ( 1.0 - ( exp ( - ( - v - 38.0 ) / 6.0 ) ) ) ; + mTau = ( 1.0 / ( mAlpha + mBeta ) ) / _lqt ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + if ( v == - 66.0 ) { + v = v + 0.0001 ; + } + hAlpha = ( - 0.015 * ( v - - 66.0 ) ) / ( 1.0 - ( exp ( ( v - - 66.0 ) / 6.0 ) ) ) ; + hBeta = ( - 0.015 * ( - v - 66.0 ) ) / ( 1.0 - ( exp ( ( - v - 66.0 ) / 6.0 ) ) ) ; + hTau = ( 1.0 / ( hAlpha + hBeta ) ) / _lqt ; + hInf = hAlpha / ( hAlpha + hBeta ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_na_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_na_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_na_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ena = _ion_ena; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gNaTa_t = gNaTa_tbar * m * m * m * h ; + ina = gNaTa_t * ( v - ena ) ; + } + _current += ina; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ena = _ion_ena; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dina; + _dina = ina; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dinadv += (_dina - ina)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ina += ina ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ena = _ion_ena; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/NaTa_t.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference :Colbert and Pan 2002\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX NaTa_t\n" + " USEION na READ ena WRITE ina\n" + " RANGE gNaTa_tbar, gNaTa_t, ina, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gNaTa_tbar = 3.288755 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ena (mV)\n" + " ina (mA/cm2)\n" + " gNaTa_t (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gNaTa_t = gNaTa_tbar*m*m*m*h\n" + " ina = gNaTa_t*(v-ena)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10) \n" + " UNITSOFF\n" + " if(v == -38){\n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.182 * (v- -38))/(1-(exp(-(v- -38)/6)))\n" + " mBeta = (0.124 * (-v -38))/(1-(exp(-(-v -38)/6)))\n" + " mTau = (1/(mAlpha + mBeta))/qt\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + "\n" + " if(v == -66){\n" + " v = v + 0.0001\n" + " }\n" + "\n" + " hAlpha = (-0.015 * (v- -66))/(1-(exp((v- -66)/6)))\n" + " hBeta = (-0.015 * (-v -66))/(1-(exp((-v -66)/6)))\n" + " hTau = (1/(hAlpha + hBeta))/qt\n" + " hInf = hAlpha/(hAlpha + hBeta)\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/NaTa_t.o b/x86_64/NaTa_t.o new file mode 100644 index 0000000000000000000000000000000000000000..4cc8da3616732313e9ff66784b62ef5c09d2b61f GIT binary patch literal 14696 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 AMF0Q* literal 0 HcmV?d00001 diff --git a/x86_64/NaTa_t_myel.c b/x86_64/NaTa_t_myel.c new file mode 100644 index 0000000..56d2117 --- /dev/null +++ b/x86_64/NaTa_t_myel.c @@ -0,0 +1,605 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__NaTa_t_myel +#define _nrn_initial _nrn_initial__NaTa_t_myel +#define nrn_cur _nrn_cur__NaTa_t_myel +#define _nrn_current _nrn_current__NaTa_t_myel +#define nrn_jacob _nrn_jacob__NaTa_t_myel +#define nrn_state _nrn_state__NaTa_t_myel +#define _net_receive _net_receive__NaTa_t_myel +#define rates rates__NaTa_t_myel +#define states states__NaTa_t_myel + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gNaTa_tbar _p[0] +#define gNaTa_tbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ina _p[2] +#define ina_columnindex 2 +#define gNaTa_t _p[3] +#define gNaTa_t_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define ena _p[6] +#define ena_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define mAlpha _p[9] +#define mAlpha_columnindex 9 +#define mBeta _p[10] +#define mBeta_columnindex 10 +#define hInf _p[11] +#define hInf_columnindex 11 +#define hTau _p[12] +#define hTau_columnindex 12 +#define hAlpha _p[13] +#define hAlpha_columnindex 13 +#define hBeta _p[14] +#define hBeta_columnindex 14 +#define Dm _p[15] +#define Dm_columnindex 15 +#define Dh _p[16] +#define Dh_columnindex 16 +#define v _p[17] +#define v_columnindex 17 +#define _g _p[18] +#define _g_columnindex 18 +#define _ion_ena *_ppvar[0]._pval +#define _ion_ina *_ppvar[1]._pval +#define _ion_dinadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_NaTa_t_myel", _hoc_setdata, + "rates_NaTa_t_myel", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gNaTa_tbar_NaTa_t_myel", "S/cm2", + "ina_NaTa_t_myel", "mA/cm2", + "gNaTa_t_NaTa_t_myel", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"NaTa_t_myel", + "gNaTa_tbar_NaTa_t_myel", + "celsius_NaTa_t_myel", + 0, + "ina_NaTa_t_myel", + "gNaTa_t_NaTa_t_myel", + 0, + "m_NaTa_t_myel", + "h_NaTa_t_myel", + 0, + 0}; + static Symbol* _na_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 19, _prop); + /*initialize range parameters*/ + gNaTa_tbar = 6.57751; + celsius = 35; + _prop->param = _p; + _prop->param_size = 19; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_na_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ena */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ina */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dinadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _NaTa_t_myel_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("na", -10000.); + _na_sym = hoc_lookup("na_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 19, 4); + hoc_register_dparam_semantics(_mechtype, 0, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 NaTa_t_myel /mnt/c/neuron/neurenv/mech/NaTa_t_myel.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + if ( v == - 38.0 ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.182 * ( v - - 38.0 ) ) / ( 1.0 - ( exp ( - ( v - - 38.0 ) / 6.0 ) ) ) ; + mBeta = ( 0.124 * ( - v - 38.0 ) ) / ( 1.0 - ( exp ( - ( - v - 38.0 ) / 6.0 ) ) ) ; + mTau = ( 1.0 / ( mAlpha + mBeta ) ) / _lqt ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + if ( v == - 66.0 ) { + v = v + 0.0001 ; + } + hAlpha = ( - 0.015 * ( v - - 66.0 ) ) / ( 1.0 - ( exp ( ( v - - 66.0 ) / 6.0 ) ) ) ; + hBeta = ( - 0.015 * ( - v - 66.0 ) ) / ( 1.0 - ( exp ( ( - v - 66.0 ) / 6.0 ) ) ) ; + hTau = ( 1.0 / ( hAlpha + hBeta ) ) / _lqt ; + hInf = hAlpha / ( hAlpha + hBeta ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_na_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_na_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_na_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ena = _ion_ena; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gNaTa_t = gNaTa_tbar * m * m * m * h ; + ina = gNaTa_t * ( v - ena ) ; + } + _current += ina; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ena = _ion_ena; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dina; + _dina = ina; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dinadv += (_dina - ina)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ina += ina ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ena = _ion_ena; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/NaTa_t_myel.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference :Colbert and Pan 2002\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX NaTa_t_myel\n" + " USEION na READ ena WRITE ina\n" + " RANGE gNaTa_tbar, gNaTa_t, ina, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gNaTa_tbar = 6.577510 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ena (mV)\n" + " ina (mA/cm2)\n" + " gNaTa_t (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gNaTa_t = gNaTa_tbar*m*m*m*h\n" + " ina = gNaTa_t*(v-ena)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10) \n" + " UNITSOFF\n" + " if(v == -38){\n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.182 * (v- -38))/(1-(exp(-(v- -38)/6)))\n" + " mBeta = (0.124 * (-v -38))/(1-(exp(-(-v -38)/6)))\n" + " mTau = (1/(mAlpha + mBeta))/qt\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + "\n" + " if(v == -66){\n" + " v = v + 0.0001\n" + " }\n" + "\n" + " hAlpha = (-0.015 * (v- -66))/(1-(exp((v- -66)/6)))\n" + " hBeta = (-0.015 * (-v -66))/(1-(exp((-v -66)/6)))\n" + " hTau = (1/(hAlpha + hBeta))/qt\n" + " hInf = hAlpha/(hAlpha + hBeta)\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/NaTa_t_myel.o b/x86_64/NaTa_t_myel.o new file mode 100644 index 0000000000000000000000000000000000000000..c17798b4cb78b0a24c3ed31643b0fca3c154e223 GIT binary patch literal 14808 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 OKr5<@%*AD=-Nfh`1 literal 0 HcmV?d00001 diff --git a/x86_64/NaTa_t_nor.c b/x86_64/NaTa_t_nor.c new file mode 100644 index 0000000..6d468b9 --- /dev/null +++ b/x86_64/NaTa_t_nor.c @@ -0,0 +1,605 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__NaTa_t_nor +#define _nrn_initial _nrn_initial__NaTa_t_nor +#define nrn_cur _nrn_cur__NaTa_t_nor +#define _nrn_current _nrn_current__NaTa_t_nor +#define nrn_jacob _nrn_jacob__NaTa_t_nor +#define nrn_state _nrn_state__NaTa_t_nor +#define _net_receive _net_receive__NaTa_t_nor +#define rates rates__NaTa_t_nor +#define states states__NaTa_t_nor + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gNaTa_tbar _p[0] +#define gNaTa_tbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ina _p[2] +#define ina_columnindex 2 +#define gNaTa_t _p[3] +#define gNaTa_t_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define ena _p[6] +#define ena_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define mAlpha _p[9] +#define mAlpha_columnindex 9 +#define mBeta _p[10] +#define mBeta_columnindex 10 +#define hInf _p[11] +#define hInf_columnindex 11 +#define hTau _p[12] +#define hTau_columnindex 12 +#define hAlpha _p[13] +#define hAlpha_columnindex 13 +#define hBeta _p[14] +#define hBeta_columnindex 14 +#define Dm _p[15] +#define Dm_columnindex 15 +#define Dh _p[16] +#define Dh_columnindex 16 +#define v _p[17] +#define v_columnindex 17 +#define _g _p[18] +#define _g_columnindex 18 +#define _ion_ena *_ppvar[0]._pval +#define _ion_ina *_ppvar[1]._pval +#define _ion_dinadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_NaTa_t_nor", _hoc_setdata, + "rates_NaTa_t_nor", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gNaTa_tbar_NaTa_t_nor", "S/cm2", + "ina_NaTa_t_nor", "mA/cm2", + "gNaTa_t_NaTa_t_nor", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"NaTa_t_nor", + "gNaTa_tbar_NaTa_t_nor", + "celsius_NaTa_t_nor", + 0, + "ina_NaTa_t_nor", + "gNaTa_t_NaTa_t_nor", + 0, + "m_NaTa_t_nor", + "h_NaTa_t_nor", + 0, + 0}; + static Symbol* _na_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 19, _prop); + /*initialize range parameters*/ + gNaTa_tbar = 6.57751; + celsius = 35; + _prop->param = _p; + _prop->param_size = 19; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_na_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ena */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ina */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dinadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _NaTa_t_nor_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("na", -10000.); + _na_sym = hoc_lookup("na_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 19, 4); + hoc_register_dparam_semantics(_mechtype, 0, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 NaTa_t_nor /mnt/c/neuron/neurenv/mech/NaTa_t_nor.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + if ( v == - 38.0 ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.182 * ( v - - 38.0 ) ) / ( 1.0 - ( exp ( - ( v - - 38.0 ) / 6.0 ) ) ) ; + mBeta = ( 0.124 * ( - v - 38.0 ) ) / ( 1.0 - ( exp ( - ( - v - 38.0 ) / 6.0 ) ) ) ; + mTau = ( 1.0 / ( mAlpha + mBeta ) ) / _lqt ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + if ( v == - 66.0 ) { + v = v + 0.0001 ; + } + hAlpha = ( - 0.015 * ( v - - 66.0 ) ) / ( 1.0 - ( exp ( ( v - - 66.0 ) / 6.0 ) ) ) ; + hBeta = ( - 0.015 * ( - v - 66.0 ) ) / ( 1.0 - ( exp ( ( - v - 66.0 ) / 6.0 ) ) ) ; + hTau = ( 1.0 / ( hAlpha + hBeta ) ) / _lqt ; + hInf = hAlpha / ( hAlpha + hBeta ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_na_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_na_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_na_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ena = _ion_ena; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gNaTa_t = gNaTa_tbar * m * m * m * h ; + ina = gNaTa_t * ( v - ena ) ; + } + _current += ina; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ena = _ion_ena; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dina; + _dina = ina; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dinadv += (_dina - ina)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ina += ina ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ena = _ion_ena; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/NaTa_t_nor.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference :Colbert and Pan 2002\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX NaTa_t_nor\n" + " USEION na READ ena WRITE ina\n" + " RANGE gNaTa_tbar, gNaTa_t, ina, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gNaTa_tbar = 6.577510 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ena (mV)\n" + " ina (mA/cm2)\n" + " gNaTa_t (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gNaTa_t = gNaTa_tbar*m*m*m*h\n" + " ina = gNaTa_t*(v-ena)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10) \n" + " UNITSOFF\n" + " if(v == -38){\n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.182 * (v- -38))/(1-(exp(-(v- -38)/6)))\n" + " mBeta = (0.124 * (-v -38))/(1-(exp(-(-v -38)/6)))\n" + " mTau = (1/(mAlpha + mBeta))/qt\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + "\n" + " if(v == -66){\n" + " v = v + 0.0001\n" + " }\n" + "\n" + " hAlpha = (-0.015 * (v- -66))/(1-(exp((v- -66)/6)))\n" + " hBeta = (-0.015 * (-v -66))/(1-(exp((-v -66)/6)))\n" + " hTau = (1/(hAlpha + hBeta))/qt\n" + " hInf = hAlpha/(hAlpha + hBeta)\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/NaTa_t_nor.o b/x86_64/NaTa_t_nor.o new file mode 100644 index 0000000000000000000000000000000000000000..a553a21311430ee0274cfa0a6e4ebe1212ba53a5 GIT binary patch literal 14792 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 literal 0 HcmV?d00001 diff --git a/x86_64/NaTs2_t.c b/x86_64/NaTs2_t.c new file mode 100644 index 0000000..076fd58 --- /dev/null +++ b/x86_64/NaTs2_t.c @@ -0,0 +1,605 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__NaTs2_t +#define _nrn_initial _nrn_initial__NaTs2_t +#define nrn_cur _nrn_cur__NaTs2_t +#define _nrn_current _nrn_current__NaTs2_t +#define nrn_jacob _nrn_jacob__NaTs2_t +#define nrn_state _nrn_state__NaTs2_t +#define _net_receive _net_receive__NaTs2_t +#define rates rates__NaTs2_t +#define states states__NaTs2_t + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gNaTs2_tbar _p[0] +#define gNaTs2_tbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ina _p[2] +#define ina_columnindex 2 +#define gNaTs2_t _p[3] +#define gNaTs2_t_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define ena _p[6] +#define ena_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define mAlpha _p[9] +#define mAlpha_columnindex 9 +#define mBeta _p[10] +#define mBeta_columnindex 10 +#define hInf _p[11] +#define hInf_columnindex 11 +#define hTau _p[12] +#define hTau_columnindex 12 +#define hAlpha _p[13] +#define hAlpha_columnindex 13 +#define hBeta _p[14] +#define hBeta_columnindex 14 +#define Dm _p[15] +#define Dm_columnindex 15 +#define Dh _p[16] +#define Dh_columnindex 16 +#define v _p[17] +#define v_columnindex 17 +#define _g _p[18] +#define _g_columnindex 18 +#define _ion_ena *_ppvar[0]._pval +#define _ion_ina *_ppvar[1]._pval +#define _ion_dinadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_NaTs2_t", _hoc_setdata, + "rates_NaTs2_t", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gNaTs2_tbar_NaTs2_t", "S/cm2", + "ina_NaTs2_t", "mA/cm2", + "gNaTs2_t_NaTs2_t", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"NaTs2_t", + "gNaTs2_tbar_NaTs2_t", + "celsius_NaTs2_t", + 0, + "ina_NaTs2_t", + "gNaTs2_t_NaTs2_t", + 0, + "m_NaTs2_t", + "h_NaTs2_t", + 0, + 0}; + static Symbol* _na_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 19, _prop); + /*initialize range parameters*/ + gNaTs2_tbar = 1e-05; + celsius = 35; + _prop->param = _p; + _prop->param_size = 19; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_na_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ena */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ina */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dinadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _NaTs2_t_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("na", -10000.); + _na_sym = hoc_lookup("na_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 19, 4); + hoc_register_dparam_semantics(_mechtype, 0, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 NaTs2_t /mnt/c/neuron/neurenv/mech/NaTs2_t.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + if ( v == - 32.0 ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.182 * ( v - - 32.0 ) ) / ( 1.0 - ( exp ( - ( v - - 32.0 ) / 6.0 ) ) ) ; + mBeta = ( 0.124 * ( - v - 32.0 ) ) / ( 1.0 - ( exp ( - ( - v - 32.0 ) / 6.0 ) ) ) ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + mTau = ( 1.0 / ( mAlpha + mBeta ) ) / _lqt ; + if ( v == - 60.0 ) { + v = v + 0.0001 ; + } + hAlpha = ( - 0.015 * ( v - - 60.0 ) ) / ( 1.0 - ( exp ( ( v - - 60.0 ) / 6.0 ) ) ) ; + hBeta = ( - 0.015 * ( - v - 60.0 ) ) / ( 1.0 - ( exp ( ( - v - 60.0 ) / 6.0 ) ) ) ; + hInf = hAlpha / ( hAlpha + hBeta ) ; + hTau = ( 1.0 / ( hAlpha + hBeta ) ) / _lqt ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_na_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_na_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_na_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ena = _ion_ena; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gNaTs2_t = gNaTs2_tbar * m * m * m * h ; + ina = gNaTs2_t * ( v - ena ) ; + } + _current += ina; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ena = _ion_ena; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dina; + _dina = ina; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dinadv += (_dina - ina)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ina += ina ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ena = _ion_ena; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/NaTs2_t.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference :Colbert and Pan 2002\n" + ":comment: took the NaTa and shifted both activation/inactivation by 6 mv\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX NaTs2_t\n" + " USEION na READ ena WRITE ina\n" + " RANGE gNaTs2_tbar, gNaTs2_t, ina, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gNaTs2_tbar = 0.00001 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ena (mV)\n" + " ina (mA/cm2)\n" + " gNaTs2_t (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gNaTs2_t = gNaTs2_tbar*m*m*m*h\n" + " ina = gNaTs2_t*(v-ena)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10) \n" + " UNITSOFF\n" + " if(v == -32){\n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.182 * (v- -32))/(1-(exp(-(v- -32)/6)))\n" + " mBeta = (0.124 * (-v -32))/(1-(exp(-(-v -32)/6)))\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + " mTau = (1/(mAlpha + mBeta))/qt\n" + "\n" + " if(v == -60){\n" + " v = v + 0.0001\n" + " }\n" + " hAlpha = (-0.015 * (v- -60))/(1-(exp((v- -60)/6)))\n" + " hBeta = (-0.015 * (-v -60))/(1-(exp((-v -60)/6)))\n" + " hInf = hAlpha/(hAlpha + hBeta)\n" + " hTau = (1/(hAlpha + hBeta))/qt\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/NaTs2_t.o b/x86_64/NaTs2_t.o new file mode 100644 index 0000000000000000000000000000000000000000..b821108316ec78ceeeb62e834acffe97d6143d35 GIT binary patch literal 14800 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 +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__NaTs2_t_apic +#define _nrn_initial _nrn_initial__NaTs2_t_apic +#define nrn_cur _nrn_cur__NaTs2_t_apic +#define _nrn_current _nrn_current__NaTs2_t_apic +#define nrn_jacob _nrn_jacob__NaTs2_t_apic +#define nrn_state _nrn_state__NaTs2_t_apic +#define _net_receive _net_receive__NaTs2_t_apic +#define rates rates__NaTs2_t_apic +#define states states__NaTs2_t_apic + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gNaTs2_tbar _p[0] +#define gNaTs2_tbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ina _p[2] +#define ina_columnindex 2 +#define gNaTs2_t _p[3] +#define gNaTs2_t_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define ena _p[6] +#define ena_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define mAlpha _p[9] +#define mAlpha_columnindex 9 +#define mBeta _p[10] +#define mBeta_columnindex 10 +#define hInf _p[11] +#define hInf_columnindex 11 +#define hTau _p[12] +#define hTau_columnindex 12 +#define hAlpha _p[13] +#define hAlpha_columnindex 13 +#define hBeta _p[14] +#define hBeta_columnindex 14 +#define Dm _p[15] +#define Dm_columnindex 15 +#define Dh _p[16] +#define Dh_columnindex 16 +#define v _p[17] +#define v_columnindex 17 +#define _g _p[18] +#define _g_columnindex 18 +#define _ion_ena *_ppvar[0]._pval +#define _ion_ina *_ppvar[1]._pval +#define _ion_dinadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_NaTs2_t_apic", _hoc_setdata, + "rates_NaTs2_t_apic", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gNaTs2_tbar_NaTs2_t_apic", "S/cm2", + "ina_NaTs2_t_apic", "mA/cm2", + "gNaTs2_t_NaTs2_t_apic", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"NaTs2_t_apic", + "gNaTs2_tbar_NaTs2_t_apic", + "celsius_NaTs2_t_apic", + 0, + "ina_NaTs2_t_apic", + "gNaTs2_t_NaTs2_t_apic", + 0, + "m_NaTs2_t_apic", + "h_NaTs2_t_apic", + 0, + 0}; + static Symbol* _na_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 19, _prop); + /*initialize range parameters*/ + gNaTs2_tbar = 0.02569; + celsius = 35; + _prop->param = _p; + _prop->param_size = 19; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_na_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ena */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ina */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dinadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _NaTs2_t_apic_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("na", -10000.); + _na_sym = hoc_lookup("na_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 19, 4); + hoc_register_dparam_semantics(_mechtype, 0, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 NaTs2_t_apic /mnt/c/neuron/neurenv/mech/NaTs2_t_apic.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + if ( v == - 32.0 ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.182 * ( v - - 32.0 ) ) / ( 1.0 - ( exp ( - ( v - - 32.0 ) / 6.0 ) ) ) ; + mBeta = ( 0.124 * ( - v - 32.0 ) ) / ( 1.0 - ( exp ( - ( - v - 32.0 ) / 6.0 ) ) ) ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + mTau = ( 1.0 / ( mAlpha + mBeta ) ) / _lqt ; + if ( v == - 60.0 ) { + v = v + 0.0001 ; + } + hAlpha = ( - 0.015 * ( v - - 60.0 ) ) / ( 1.0 - ( exp ( ( v - - 60.0 ) / 6.0 ) ) ) ; + hBeta = ( - 0.015 * ( - v - 60.0 ) ) / ( 1.0 - ( exp ( ( - v - 60.0 ) / 6.0 ) ) ) ; + hInf = hAlpha / ( hAlpha + hBeta ) ; + hTau = ( 1.0 / ( hAlpha + hBeta ) ) / _lqt ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_na_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_na_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_na_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ena = _ion_ena; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gNaTs2_t = gNaTs2_tbar * m * m * m * h ; + ina = gNaTs2_t * ( v - ena ) ; + } + _current += ina; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ena = _ion_ena; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dina; + _dina = ina; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dinadv += (_dina - ina)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ina += ina ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ena = _ion_ena; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/NaTs2_t_apic.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference :Colbert and Pan 2002\n" + ":comment: took the NaTa and shifted both activation/inactivation by 6 mv\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX NaTs2_t_apic\n" + " USEION na READ ena WRITE ina\n" + " RANGE gNaTs2_tbar, gNaTs2_t, ina, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gNaTs2_tbar = 0.025690 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ena (mV)\n" + " ina (mA/cm2)\n" + " gNaTs2_t (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gNaTs2_t = gNaTs2_tbar*m*m*m*h\n" + " ina = gNaTs2_t*(v-ena)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10) \n" + " UNITSOFF\n" + " if(v == -32){\n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.182 * (v- -32))/(1-(exp(-(v- -32)/6)))\n" + " mBeta = (0.124 * (-v -32))/(1-(exp(-(-v -32)/6)))\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + " mTau = (1/(mAlpha + mBeta))/qt\n" + "\n" + " if(v == -60){\n" + " v = v + 0.0001\n" + " }\n" + " hAlpha = (-0.015 * (v- -60))/(1-(exp((v- -60)/6)))\n" + " hBeta = (-0.015 * (-v -60))/(1-(exp((-v -60)/6)))\n" + " hInf = hAlpha/(hAlpha + hBeta)\n" + " hTau = (1/(hAlpha + hBeta))/qt\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/NaTs2_t_apic.o b/x86_64/NaTs2_t_apic.o new file mode 100644 index 0000000000000000000000000000000000000000..cfcedbda1536239a39cc7eb167f87c3fac23225f GIT binary patch literal 14904 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 P?|@cRyI=~TG`fBOEI=~1 literal 0 HcmV?d00001 diff --git a/x86_64/NaTs2_t_soma.c b/x86_64/NaTs2_t_soma.c new file mode 100644 index 0000000..7e49473 --- /dev/null +++ b/x86_64/NaTs2_t_soma.c @@ -0,0 +1,605 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__NaTs2_t_soma +#define _nrn_initial _nrn_initial__NaTs2_t_soma +#define nrn_cur _nrn_cur__NaTs2_t_soma +#define _nrn_current _nrn_current__NaTs2_t_soma +#define nrn_jacob _nrn_jacob__NaTs2_t_soma +#define nrn_state _nrn_state__NaTs2_t_soma +#define _net_receive _net_receive__NaTs2_t_soma +#define rates rates__NaTs2_t_soma +#define states states__NaTs2_t_soma + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gNaTs2_tbar _p[0] +#define gNaTs2_tbar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ina _p[2] +#define ina_columnindex 2 +#define gNaTs2_t _p[3] +#define gNaTs2_t_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define ena _p[6] +#define ena_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define mAlpha _p[9] +#define mAlpha_columnindex 9 +#define mBeta _p[10] +#define mBeta_columnindex 10 +#define hInf _p[11] +#define hInf_columnindex 11 +#define hTau _p[12] +#define hTau_columnindex 12 +#define hAlpha _p[13] +#define hAlpha_columnindex 13 +#define hBeta _p[14] +#define hBeta_columnindex 14 +#define Dm _p[15] +#define Dm_columnindex 15 +#define Dh _p[16] +#define Dh_columnindex 16 +#define v _p[17] +#define v_columnindex 17 +#define _g _p[18] +#define _g_columnindex 18 +#define _ion_ena *_ppvar[0]._pval +#define _ion_ina *_ppvar[1]._pval +#define _ion_dinadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_NaTs2_t_soma", _hoc_setdata, + "rates_NaTs2_t_soma", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gNaTs2_tbar_NaTs2_t_soma", "S/cm2", + "ina_NaTs2_t_soma", "mA/cm2", + "gNaTs2_t_NaTs2_t_soma", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"NaTs2_t_soma", + "gNaTs2_tbar_NaTs2_t_soma", + "celsius_NaTs2_t_soma", + 0, + "ina_NaTs2_t_soma", + "gNaTs2_t_NaTs2_t_soma", + 0, + "m_NaTs2_t_soma", + "h_NaTs2_t_soma", + 0, + 0}; + static Symbol* _na_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 19, _prop); + /*initialize range parameters*/ + gNaTs2_tbar = 0.976885; + celsius = 35; + _prop->param = _p; + _prop->param_size = 19; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_na_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ena */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ina */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dinadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _NaTs2_t_soma_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("na", -10000.); + _na_sym = hoc_lookup("na_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 19, 4); + hoc_register_dparam_semantics(_mechtype, 0, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 NaTs2_t_soma /mnt/c/neuron/neurenv/mech/NaTs2_t_soma.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + if ( v == - 32.0 ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.182 * ( v - - 32.0 ) ) / ( 1.0 - ( exp ( - ( v - - 32.0 ) / 6.0 ) ) ) ; + mBeta = ( 0.124 * ( - v - 32.0 ) ) / ( 1.0 - ( exp ( - ( - v - 32.0 ) / 6.0 ) ) ) ; + mInf = mAlpha / ( mAlpha + mBeta ) ; + mTau = ( 1.0 / ( mAlpha + mBeta ) ) / _lqt ; + if ( v == - 60.0 ) { + v = v + 0.0001 ; + } + hAlpha = ( - 0.015 * ( v - - 60.0 ) ) / ( 1.0 - ( exp ( ( v - - 60.0 ) / 6.0 ) ) ) ; + hBeta = ( - 0.015 * ( - v - 60.0 ) ) / ( 1.0 - ( exp ( ( - v - 60.0 ) / 6.0 ) ) ) ; + hInf = hAlpha / ( hAlpha + hBeta ) ; + hTau = ( 1.0 / ( hAlpha + hBeta ) ) / _lqt ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_na_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_na_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_na_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ena = _ion_ena; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gNaTs2_t = gNaTs2_tbar * m * m * m * h ; + ina = gNaTs2_t * ( v - ena ) ; + } + _current += ina; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ena = _ion_ena; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dina; + _dina = ina; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dinadv += (_dina - ina)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ina += ina ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ena = _ion_ena; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/NaTs2_t_soma.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference :Colbert and Pan 2002\n" + ":comment: took the NaTa and shifted both activation/inactivation by 6 mv\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX NaTs2_t_soma\n" + " USEION na READ ena WRITE ina\n" + " RANGE gNaTs2_tbar, gNaTs2_t, ina, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gNaTs2_tbar = 0.976885 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ena (mV)\n" + " ina (mA/cm2)\n" + " gNaTs2_t (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gNaTs2_t = gNaTs2_tbar*m*m*m*h\n" + " ina = gNaTs2_t*(v-ena)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10) \n" + " UNITSOFF\n" + " if(v == -32){\n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.182 * (v- -32))/(1-(exp(-(v- -32)/6)))\n" + " mBeta = (0.124 * (-v -32))/(1-(exp(-(-v -32)/6)))\n" + " mInf = mAlpha/(mAlpha + mBeta)\n" + " mTau = (1/(mAlpha + mBeta))/qt\n" + "\n" + " if(v == -60){\n" + " v = v + 0.0001\n" + " }\n" + " hAlpha = (-0.015 * (v- -60))/(1-(exp((v- -60)/6)))\n" + " hBeta = (-0.015 * (-v -60))/(1-(exp((-v -60)/6)))\n" + " hInf = hAlpha/(hAlpha + hBeta)\n" + " hTau = (1/(hAlpha + hBeta))/qt\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/NaTs2_t_soma.o b/x86_64/NaTs2_t_soma.o new file mode 100644 index 0000000000000000000000000000000000000000..148741e952ec621f4ba6cf77d7d05b8f441ece40 GIT binary patch literal 14904 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 +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__Nap_Et2 +#define _nrn_initial _nrn_initial__Nap_Et2 +#define nrn_cur _nrn_cur__Nap_Et2 +#define _nrn_current _nrn_current__Nap_Et2 +#define nrn_jacob _nrn_jacob__Nap_Et2 +#define nrn_state _nrn_state__Nap_Et2 +#define _net_receive _net_receive__Nap_Et2 +#define rates rates__Nap_Et2 +#define states states__Nap_Et2 + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gNap_Et2bar _p[0] +#define gNap_Et2bar_columnindex 0 +#define celsius _p[1] +#define celsius_columnindex 1 +#define ina _p[2] +#define ina_columnindex 2 +#define gNap_Et2 _p[3] +#define gNap_Et2_columnindex 3 +#define m _p[4] +#define m_columnindex 4 +#define h _p[5] +#define h_columnindex 5 +#define ena _p[6] +#define ena_columnindex 6 +#define mInf _p[7] +#define mInf_columnindex 7 +#define mTau _p[8] +#define mTau_columnindex 8 +#define mAlpha _p[9] +#define mAlpha_columnindex 9 +#define mBeta _p[10] +#define mBeta_columnindex 10 +#define hInf _p[11] +#define hInf_columnindex 11 +#define hTau _p[12] +#define hTau_columnindex 12 +#define hAlpha _p[13] +#define hAlpha_columnindex 13 +#define hBeta _p[14] +#define hBeta_columnindex 14 +#define Dm _p[15] +#define Dm_columnindex 15 +#define Dh _p[16] +#define Dh_columnindex 16 +#define v _p[17] +#define v_columnindex 17 +#define _g _p[18] +#define _g_columnindex 18 +#define _ion_ena *_ppvar[0]._pval +#define _ion_ina *_ppvar[1]._pval +#define _ion_dinadv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_Nap_Et2", _hoc_setdata, + "rates_Nap_Et2", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gNap_Et2bar_Nap_Et2", "S/cm2", + "ina_Nap_Et2", "mA/cm2", + "gNap_Et2_Nap_Et2", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"Nap_Et2", + "gNap_Et2bar_Nap_Et2", + "celsius_Nap_Et2", + 0, + "ina_Nap_Et2", + "gNap_Et2_Nap_Et2", + 0, + "m_Nap_Et2", + "h_Nap_Et2", + 0, + 0}; + static Symbol* _na_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 19, _prop); + /*initialize range parameters*/ + gNap_Et2bar = 0.000671; + celsius = 35; + _prop->param = _p; + _prop->param_size = 19; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_na_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ena */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ina */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dinadv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _Nap_Et2_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("na", -10000.); + _na_sym = hoc_lookup("na_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 19, 4); + hoc_register_dparam_semantics(_mechtype, 0, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 Nap_Et2 /mnt/c/neuron/neurenv/mech/Nap_Et2.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[2], _dlist1[2]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + Dh = ( hInf - h ) / hTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / hTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / hTau)))*(- ( ( ( hInf ) ) / hTau ) / ( ( ( ( - 1.0 ) ) ) / hTau ) - h) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + double _lqt ; + _lqt = pow( 2.3 , ( ( celsius - 21.0 ) / 10.0 ) ) ; + mInf = 1.0 / ( 1.0 + exp ( ( v - - 52.6 ) / - 4.6 ) ) ; + if ( v == - 38.0 ) { + v = v + 0.0001 ; + } + mAlpha = ( 0.182 * ( v - - 38.0 ) ) / ( 1.0 - ( exp ( - ( v - - 38.0 ) / 6.0 ) ) ) ; + mBeta = ( 0.124 * ( - v - 38.0 ) ) / ( 1.0 - ( exp ( - ( - v - 38.0 ) / 6.0 ) ) ) ; + mTau = 6.0 * ( 1.0 / ( mAlpha + mBeta ) ) / _lqt ; + if ( v == - 17.0 ) { + v = v + 0.0001 ; + } + if ( v == - 64.4 ) { + v = v + 0.0001 ; + } + hInf = 1.0 / ( 1.0 + exp ( ( v - - 48.8 ) / 10.0 ) ) ; + hAlpha = - 2.88e-6 * ( v + 17.0 ) / ( 1.0 - exp ( ( v + 17.0 ) / 4.63 ) ) ; + hBeta = 6.94e-6 * ( v + 64.4 ) / ( 1.0 - exp ( - ( v + 64.4 ) / 2.63 ) ) ; + hTau = ( 1.0 / ( hAlpha + hBeta ) ) / _lqt ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 2;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 2; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_na_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_na_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_na_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + h = hInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ena = _ion_ena; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gNap_Et2 = gNap_Et2bar * m * m * m * h ; + ina = gNap_Et2 * ( v - ena ) ; + } + _current += ina; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ena = _ion_ena; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dina; + _dina = ina; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dinadv += (_dina - ina)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ina += ina ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ena = _ion_ena; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/Nap_Et2.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Comment : mtau deduced from text (said to be 6 times faster than for NaTa)\n" + ":Comment : so I used the equations from NaT and multiplied by 6\n" + ":Reference : Modeled according to kinetics derived from Magistretti & Alonso 1999\n" + ":Comment: corrected rates using q10 = 2.3, target temperature 35, orginal 21\n" + ": **Modified to use 'celsius' for temperature to correct rates by Aman Aberra**\n" + "NEURON {\n" + " SUFFIX Nap_Et2\n" + " USEION na READ ena WRITE ina\n" + " RANGE gNap_Et2bar, gNap_Et2, ina, celsius\n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gNap_Et2bar = 0.000671 (S/cm2)\n" + " celsius = 35\n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ena (mV)\n" + " ina (mA/cm2)\n" + " gNap_Et2 (S/cm2)\n" + " mInf\n" + " mTau\n" + " mAlpha\n" + " mBeta\n" + " hInf\n" + " hTau\n" + " hAlpha\n" + " hBeta\n" + "}\n" + "\n" + "STATE {\n" + " m\n" + " h\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gNap_Et2 = gNap_Et2bar*m*m*m*h\n" + " ina = gNap_Et2*(v-ena)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + " h' = (hInf-h)/hTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + " h = hInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " LOCAL qt\n" + " qt = 2.3^((celsius-21)/10)\n" + " UNITSOFF\n" + " mInf = 1.0/(1+exp((v- -52.6)/-4.6))\n" + " if(v == -38){\n" + " v = v+0.0001\n" + " }\n" + " mAlpha = (0.182 * (v- -38))/(1-(exp(-(v- -38)/6)))\n" + " mBeta = (0.124 * (-v -38))/(1-(exp(-(-v -38)/6)))\n" + " mTau = 6*(1/(mAlpha + mBeta))/qt\n" + "\n" + " if(v == -17){\n" + " v = v + 0.0001\n" + " }\n" + " if(v == -64.4){\n" + " v = v+0.0001\n" + " }\n" + "\n" + " hInf = 1.0/(1+exp((v- -48.8)/10))\n" + " hAlpha = -2.88e-6 * (v + 17) / (1 - exp((v + 17)/4.63))\n" + " hBeta = 6.94e-6 * (v + 64.4) / (1 - exp(-(v + 64.4)/2.63))\n" + " hTau = (1/(hAlpha + hBeta))/qt\n" + " UNITSON\n" + "}\n" + ; +#endif diff --git a/x86_64/Nap_Et2.o b/x86_64/Nap_Et2.o new file mode 100644 index 0000000000000000000000000000000000000000..937d5c71cdda081718e22edd0926041d8eff4ce7 GIT binary patch literal 15832 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 literal 0 HcmV?d00001 diff --git a/x86_64/SK_E2.c b/x86_64/SK_E2.c new file mode 100644 index 0000000..00b9ed5 --- /dev/null +++ b/x86_64/SK_E2.c @@ -0,0 +1,559 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__SK_E2 +#define _nrn_initial _nrn_initial__SK_E2 +#define nrn_cur _nrn_cur__SK_E2 +#define _nrn_current _nrn_current__SK_E2 +#define nrn_jacob _nrn_jacob__SK_E2 +#define nrn_state _nrn_state__SK_E2 +#define _net_receive _net_receive__SK_E2 +#define rates rates__SK_E2 +#define states states__SK_E2 + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gSK_E2bar _p[0] +#define gSK_E2bar_columnindex 0 +#define ik _p[1] +#define ik_columnindex 1 +#define gSK_E2 _p[2] +#define gSK_E2_columnindex 2 +#define z _p[3] +#define z_columnindex 3 +#define ek _p[4] +#define ek_columnindex 4 +#define cai _p[5] +#define cai_columnindex 5 +#define zInf _p[6] +#define zInf_columnindex 6 +#define Dz _p[7] +#define Dz_columnindex 7 +#define v _p[8] +#define v_columnindex 8 +#define _g _p[9] +#define _g_columnindex 9 +#define _ion_ek *_ppvar[0]._pval +#define _ion_ik *_ppvar[1]._pval +#define _ion_dikdv *_ppvar[2]._pval +#define _ion_cai *_ppvar[3]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_SK_E2", _hoc_setdata, + "rates_SK_E2", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ +#define zTau zTau_SK_E2 + double zTau = 1; + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "zTau_SK_E2", "ms", + "gSK_E2bar_SK_E2", "mho/cm2", + "ik_SK_E2", "mA/cm2", + "gSK_E2_SK_E2", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double z0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + "zTau_SK_E2", &zTau_SK_E2, + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[4]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"SK_E2", + "gSK_E2bar_SK_E2", + 0, + "ik_SK_E2", + "gSK_E2_SK_E2", + 0, + "z_SK_E2", + 0, + 0}; + static Symbol* _k_sym; + static Symbol* _ca_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 10, _prop); + /*initialize range parameters*/ + gSK_E2bar = 0.098377; + _prop->param = _p; + _prop->param_size = 10; + _ppvar = nrn_prop_datum_alloc(_mechtype, 5, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_k_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ek */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ik */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dikdv */ + prop_ion = need_memb(_ca_sym); + nrn_promote(prop_ion, 1, 0); + _ppvar[3]._pval = &prop_ion->param[1]; /* cai */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _SK_E2_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("k", -10000.); + ion_reg("ca", -10000.); + _k_sym = hoc_lookup("k_ion"); + _ca_sym = hoc_lookup("ca_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 10, 5); + hoc_register_dparam_semantics(_mechtype, 0, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 4, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 SK_E2 /mnt/c/neuron/neurenv/mech/SK_E2.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsprotocomma_ double); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[1], _dlist1[1]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargscomma_ cai ) ; + Dz = ( zInf - z ) / zTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargscomma_ cai ) ; + Dz = Dz / (1. - dt*( ( ( ( - 1.0 ) ) ) / zTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargscomma_ cai ) ; + z = z + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / zTau)))*(- ( ( ( zInf ) ) / zTau ) / ( ( ( ( - 1.0 ) ) ) / zTau ) - z) ; + } + return 0; +} + +static int rates ( _threadargsprotocomma_ double _lca ) { + if ( _lca < 1e-7 ) { + _lca = _lca + 1e-07 ; + } + zInf = 1.0 / ( 1.0 + pow( ( 0.00043 / _lca ) , 4.8 ) ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt, *getarg(1) ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 1;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + cai = _ion_cai; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 1; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + cai = _ion_cai; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_k_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_k_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_k_sym, _ppvar, 2, 4); + nrn_update_ion_pointer(_ca_sym, _ppvar, 3, 1); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + z = z0; + { + rates ( _threadargscomma_ cai ) ; + z = zInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ek = _ion_ek; + cai = _ion_cai; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gSK_E2 = gSK_E2bar * z ; + ik = gSK_E2 * ( v - ek ) ; + } + _current += ik; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ek = _ion_ek; + cai = _ion_cai; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dik; + _dik = ik; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dikdv += (_dik - ik)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ik += ik ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ek = _ion_ek; + cai = _ion_cai; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = z_columnindex; _dlist1[0] = Dz_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/SK_E2.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ": SK-type calcium-activated potassium current\n" + ": Reference : Kohler et al. 1996\n" + "\n" + "NEURON {\n" + " SUFFIX SK_E2\n" + " USEION k READ ek WRITE ik\n" + " USEION ca READ cai\n" + " RANGE gSK_E2bar, gSK_E2, ik\n" + "}\n" + "\n" + "UNITS {\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + " (mM) = (milli/liter)\n" + "}\n" + "\n" + "PARAMETER {\n" + " v (mV)\n" + " gSK_E2bar = 0.098377 (mho/cm2)\n" + " zTau = 1 (ms)\n" + " ek (mV)\n" + " cai (mM)\n" + "}\n" + "\n" + "ASSIGNED {\n" + " zInf\n" + " ik (mA/cm2)\n" + " gSK_E2 (S/cm2)\n" + "}\n" + "\n" + "STATE {\n" + " z FROM 0 TO 1\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gSK_E2 = gSK_E2bar * z\n" + " ik = gSK_E2 * (v - ek)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates(cai)\n" + " z' = (zInf - z) / zTau\n" + "}\n" + "\n" + "PROCEDURE rates(ca(mM)) {\n" + " if(ca < 1e-7){\n" + " ca = ca + 1e-07\n" + " }\n" + " zInf = 1/(1 + (0.00043 / ca)^4.8)\n" + "}\n" + "\n" + "INITIAL {\n" + " rates(cai)\n" + " z = zInf\n" + "}\n" + ; +#endif diff --git a/x86_64/SK_E2.o b/x86_64/SK_E2.o new file mode 100644 index 0000000000000000000000000000000000000000..5853c4e43dad4a1cb443f22237f1dacf5c2be109 GIT binary patch literal 13824 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 o1Bz4hv +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__SK_E2_soma +#define _nrn_initial _nrn_initial__SK_E2_soma +#define nrn_cur _nrn_cur__SK_E2_soma +#define _nrn_current _nrn_current__SK_E2_soma +#define nrn_jacob _nrn_jacob__SK_E2_soma +#define nrn_state _nrn_state__SK_E2_soma +#define _net_receive _net_receive__SK_E2_soma +#define rates rates__SK_E2_soma +#define states states__SK_E2_soma + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gSK_E2bar _p[0] +#define gSK_E2bar_columnindex 0 +#define ik _p[1] +#define ik_columnindex 1 +#define gSK_E2 _p[2] +#define gSK_E2_columnindex 2 +#define z _p[3] +#define z_columnindex 3 +#define ek _p[4] +#define ek_columnindex 4 +#define cai _p[5] +#define cai_columnindex 5 +#define zInf _p[6] +#define zInf_columnindex 6 +#define Dz _p[7] +#define Dz_columnindex 7 +#define v _p[8] +#define v_columnindex 8 +#define _g _p[9] +#define _g_columnindex 9 +#define _ion_ek *_ppvar[0]._pval +#define _ion_ik *_ppvar[1]._pval +#define _ion_dikdv *_ppvar[2]._pval +#define _ion_cai *_ppvar[3]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_SK_E2_soma", _hoc_setdata, + "rates_SK_E2_soma", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ +#define zTau zTau_SK_E2_soma + double zTau = 1; + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "zTau_SK_E2_soma", "ms", + "gSK_E2bar_SK_E2_soma", "mho/cm2", + "ik_SK_E2_soma", "mA/cm2", + "gSK_E2_SK_E2_soma", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double z0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + "zTau_SK_E2_soma", &zTau_SK_E2_soma, + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[4]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"SK_E2_soma", + "gSK_E2bar_SK_E2_soma", + 0, + "ik_SK_E2_soma", + "gSK_E2_SK_E2_soma", + 0, + "z_SK_E2_soma", + 0, + 0}; + static Symbol* _k_sym; + static Symbol* _ca_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 10, _prop); + /*initialize range parameters*/ + gSK_E2bar = 0.003869; + _prop->param = _p; + _prop->param_size = 10; + _ppvar = nrn_prop_datum_alloc(_mechtype, 5, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_k_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ek */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ik */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dikdv */ + prop_ion = need_memb(_ca_sym); + nrn_promote(prop_ion, 1, 0); + _ppvar[3]._pval = &prop_ion->param[1]; /* cai */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _SK_E2_soma_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("k", -10000.); + ion_reg("ca", -10000.); + _k_sym = hoc_lookup("k_ion"); + _ca_sym = hoc_lookup("ca_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 10, 5); + hoc_register_dparam_semantics(_mechtype, 0, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "ca_ion"); + hoc_register_dparam_semantics(_mechtype, 4, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 SK_E2_soma /mnt/c/neuron/neurenv/mech/SK_E2_soma.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsprotocomma_ double); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[1], _dlist1[1]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargscomma_ cai ) ; + Dz = ( zInf - z ) / zTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargscomma_ cai ) ; + Dz = Dz / (1. - dt*( ( ( ( - 1.0 ) ) ) / zTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargscomma_ cai ) ; + z = z + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / zTau)))*(- ( ( ( zInf ) ) / zTau ) / ( ( ( ( - 1.0 ) ) ) / zTau ) - z) ; + } + return 0; +} + +static int rates ( _threadargsprotocomma_ double _lca ) { + if ( _lca < 1e-7 ) { + _lca = _lca + 1e-07 ; + } + zInf = 1.0 / ( 1.0 + pow( ( 0.00043 / _lca ) , 4.8 ) ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt, *getarg(1) ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 1;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + cai = _ion_cai; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 1; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + cai = _ion_cai; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_k_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_k_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_k_sym, _ppvar, 2, 4); + nrn_update_ion_pointer(_ca_sym, _ppvar, 3, 1); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + z = z0; + { + rates ( _threadargscomma_ cai ) ; + z = zInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ek = _ion_ek; + cai = _ion_cai; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gSK_E2 = gSK_E2bar * z ; + ik = gSK_E2 * ( v - ek ) ; + } + _current += ik; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ek = _ion_ek; + cai = _ion_cai; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dik; + _dik = ik; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dikdv += (_dik - ik)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ik += ik ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ek = _ion_ek; + cai = _ion_cai; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = z_columnindex; _dlist1[0] = Dz_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/SK_E2_soma.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ": SK-type calcium-activated potassium current\n" + ": Reference : Kohler et al. 1996\n" + "\n" + "NEURON {\n" + " SUFFIX SK_E2_soma\n" + " USEION k READ ek WRITE ik\n" + " USEION ca READ cai\n" + " RANGE gSK_E2bar, gSK_E2, ik\n" + "}\n" + "\n" + "UNITS {\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + " (mM) = (milli/liter)\n" + "}\n" + "\n" + "PARAMETER {\n" + " v (mV)\n" + " gSK_E2bar = 0.003869 (mho/cm2)\n" + " zTau = 1 (ms)\n" + " ek (mV)\n" + " cai (mM)\n" + "}\n" + "\n" + "ASSIGNED {\n" + " zInf\n" + " ik (mA/cm2)\n" + " gSK_E2 (S/cm2)\n" + "}\n" + "\n" + "STATE {\n" + " z FROM 0 TO 1\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gSK_E2 = gSK_E2bar * z\n" + " ik = gSK_E2 * (v - ek)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates(cai)\n" + " z' = (zInf - z) / zTau\n" + "}\n" + "\n" + "PROCEDURE rates(ca(mM)) {\n" + " if(ca < 1e-7){\n" + " ca = ca + 1e-07\n" + " }\n" + " zInf = 1/(1 + (0.00043 / ca)^4.8)\n" + "}\n" + "\n" + "INITIAL {\n" + " rates(cai)\n" + " z = zInf\n" + "}\n" + ; +#endif diff --git a/x86_64/SK_E2_soma.o b/x86_64/SK_E2_soma.o new file mode 100644 index 0000000000000000000000000000000000000000..7507e877b9ca6b77e5c89af96dcfe6029e5f3295 GIT binary patch literal 13928 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 literal 0 HcmV?d00001 diff --git a/x86_64/SKv3_1.c b/x86_64/SKv3_1.c new file mode 100644 index 0000000..709522f --- /dev/null +++ b/x86_64/SKv3_1.c @@ -0,0 +1,537 @@ +/* Created by Language version: 7.7.0 */ +/* VECTORIZED */ +#define NRN_VECTORIZED 1 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__SKv3_1 +#define _nrn_initial _nrn_initial__SKv3_1 +#define nrn_cur _nrn_cur__SKv3_1 +#define _nrn_current _nrn_current__SKv3_1 +#define nrn_jacob _nrn_jacob__SKv3_1 +#define nrn_state _nrn_state__SKv3_1 +#define _net_receive _net_receive__SKv3_1 +#define rates rates__SKv3_1 +#define states states__SKv3_1 + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gSKv3_1bar _p[0] +#define gSKv3_1bar_columnindex 0 +#define ik _p[1] +#define ik_columnindex 1 +#define gSKv3_1 _p[2] +#define gSKv3_1_columnindex 2 +#define m _p[3] +#define m_columnindex 3 +#define ek _p[4] +#define ek_columnindex 4 +#define mInf _p[5] +#define mInf_columnindex 5 +#define mTau _p[6] +#define mTau_columnindex 6 +#define Dm _p[7] +#define Dm_columnindex 7 +#define v _p[8] +#define v_columnindex 8 +#define _g _p[9] +#define _g_columnindex 9 +#define _ion_ek *_ppvar[0]._pval +#define _ion_ik *_ppvar[1]._pval +#define _ion_dikdv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_SKv3_1", _hoc_setdata, + "rates_SKv3_1", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gSKv3_1bar_SKv3_1", "S/cm2", + "ik_SKv3_1", "mA/cm2", + "gSKv3_1_SKv3_1", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"SKv3_1", + "gSKv3_1bar_SKv3_1", + 0, + "ik_SKv3_1", + "gSKv3_1_SKv3_1", + 0, + "m_SKv3_1", + 0, + 0}; + static Symbol* _k_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 10, _prop); + /*initialize range parameters*/ + gSKv3_1bar = 1.93618; + _prop->param = _p; + _prop->param_size = 10; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_k_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ek */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ik */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dikdv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _SKv3_1_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("k", -10000.); + _k_sym = hoc_lookup("k_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 10, 4); + hoc_register_dparam_semantics(_mechtype, 0, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 SKv3_1 /mnt/c/neuron/neurenv/mech/SKv3_1.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[1], _dlist1[1]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + mInf = 1.0 / ( 1.0 + exp ( ( ( v - ( 18.700 ) ) / ( - 9.700 ) ) ) ) ; + mTau = 0.2 * 20.000 / ( 1.0 + exp ( ( ( v - ( - 46.560 ) ) / ( - 44.140 ) ) ) ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 1;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 1; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_k_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_k_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_k_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ek = _ion_ek; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gSKv3_1 = gSKv3_1bar * m ; + ik = gSKv3_1 * ( v - ek ) ; + } + _current += ik; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ek = _ion_ek; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dik; + _dik = ik; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dikdv += (_dik - ik)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ik += ik ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ek = _ion_ek; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/SKv3_1.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference : : Characterization of a Shaw-related potassium channel family in rat brain, The EMBO Journal, vol.11, no.7,2473-2486 (1992)\n" + "\n" + "NEURON {\n" + " SUFFIX SKv3_1\n" + " USEION k READ ek WRITE ik\n" + " RANGE gSKv3_1bar, gSKv3_1, ik \n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gSKv3_1bar = 1.936176 (S/cm2) \n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ek (mV)\n" + " ik (mA/cm2)\n" + " gSKv3_1 (S/cm2)\n" + " mInf\n" + " mTau\n" + "}\n" + "\n" + "STATE { \n" + " m\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gSKv3_1 = gSKv3_1bar*m\n" + " ik = gSKv3_1*(v-ek)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " UNITSOFF\n" + " mInf = 1/(1+exp(((v -(18.700))/(-9.700))))\n" + " mTau = 0.2*20.000/(1+exp(((v -(-46.560))/(-44.140))))\n" + " UNITSON\n" + "}\n" + "\n" + ; +#endif diff --git a/x86_64/SKv3_1.o b/x86_64/SKv3_1.o new file mode 100644 index 0000000000000000000000000000000000000000..e2a4c2cf7a22fa7b958d5def6262e1d979e6a0e3 GIT binary patch literal 13184 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 +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__SKv3_1_apic +#define _nrn_initial _nrn_initial__SKv3_1_apic +#define nrn_cur _nrn_cur__SKv3_1_apic +#define _nrn_current _nrn_current__SKv3_1_apic +#define nrn_jacob _nrn_jacob__SKv3_1_apic +#define nrn_state _nrn_state__SKv3_1_apic +#define _net_receive _net_receive__SKv3_1_apic +#define rates rates__SKv3_1_apic +#define states states__SKv3_1_apic + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gSKv3_1bar _p[0] +#define gSKv3_1bar_columnindex 0 +#define ik _p[1] +#define ik_columnindex 1 +#define gSKv3_1 _p[2] +#define gSKv3_1_columnindex 2 +#define m _p[3] +#define m_columnindex 3 +#define ek _p[4] +#define ek_columnindex 4 +#define mInf _p[5] +#define mInf_columnindex 5 +#define mTau _p[6] +#define mTau_columnindex 6 +#define Dm _p[7] +#define Dm_columnindex 7 +#define v _p[8] +#define v_columnindex 8 +#define _g _p[9] +#define _g_columnindex 9 +#define _ion_ek *_ppvar[0]._pval +#define _ion_ik *_ppvar[1]._pval +#define _ion_dikdv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_SKv3_1_apic", _hoc_setdata, + "rates_SKv3_1_apic", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gSKv3_1bar_SKv3_1_apic", "S/cm2", + "ik_SKv3_1_apic", "mA/cm2", + "gSKv3_1_SKv3_1_apic", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"SKv3_1_apic", + "gSKv3_1bar_SKv3_1_apic", + 0, + "ik_SKv3_1_apic", + "gSKv3_1_SKv3_1_apic", + 0, + "m_SKv3_1_apic", + 0, + 0}; + static Symbol* _k_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 10, _prop); + /*initialize range parameters*/ + gSKv3_1bar = 0.039763; + _prop->param = _p; + _prop->param_size = 10; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_k_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ek */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ik */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dikdv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _SKv3_1_apic_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("k", -10000.); + _k_sym = hoc_lookup("k_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 10, 4); + hoc_register_dparam_semantics(_mechtype, 0, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 SKv3_1_apic /mnt/c/neuron/neurenv/mech/SKv3_1_apic.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[1], _dlist1[1]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + mInf = 1.0 / ( 1.0 + exp ( ( ( v - ( 18.700 ) ) / ( - 9.700 ) ) ) ) ; + mTau = 0.2 * 20.000 / ( 1.0 + exp ( ( ( v - ( - 46.560 ) ) / ( - 44.140 ) ) ) ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 1;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 1; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_k_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_k_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_k_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ek = _ion_ek; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gSKv3_1 = gSKv3_1bar * m ; + ik = gSKv3_1 * ( v - ek ) ; + } + _current += ik; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ek = _ion_ek; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dik; + _dik = ik; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dikdv += (_dik - ik)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ik += ik ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ek = _ion_ek; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/SKv3_1_apic.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference : : Characterization of a Shaw-related potassium channel family in rat brain, The EMBO Journal, vol.11, no.7,2473-2486 (1992)\n" + "\n" + "NEURON {\n" + " SUFFIX SKv3_1_apic\n" + " USEION k READ ek WRITE ik\n" + " RANGE gSKv3_1bar, gSKv3_1, ik \n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gSKv3_1bar = 0.039763 (S/cm2) \n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ek (mV)\n" + " ik (mA/cm2)\n" + " gSKv3_1 (S/cm2)\n" + " mInf\n" + " mTau\n" + "}\n" + "\n" + "STATE { \n" + " m\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gSKv3_1 = gSKv3_1bar*m\n" + " ik = gSKv3_1*(v-ek)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " UNITSOFF\n" + " mInf = 1/(1+exp(((v -(18.700))/(-9.700))))\n" + " mTau = 0.2*20.000/(1+exp(((v -(-46.560))/(-44.140))))\n" + " UNITSON\n" + "}\n" + "\n" + ; +#endif diff --git a/x86_64/SKv3_1_apic.o b/x86_64/SKv3_1_apic.o new file mode 100644 index 0000000000000000000000000000000000000000..5e6dff64d202f94238fd0b711d08e4e0cafbc5ac GIT binary patch literal 13280 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 +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__SKv3_1_soma +#define _nrn_initial _nrn_initial__SKv3_1_soma +#define nrn_cur _nrn_cur__SKv3_1_soma +#define _nrn_current _nrn_current__SKv3_1_soma +#define nrn_jacob _nrn_jacob__SKv3_1_soma +#define nrn_state _nrn_state__SKv3_1_soma +#define _net_receive _net_receive__SKv3_1_soma +#define rates rates__SKv3_1_soma +#define states states__SKv3_1_soma + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gSKv3_1bar _p[0] +#define gSKv3_1bar_columnindex 0 +#define ik _p[1] +#define ik_columnindex 1 +#define gSKv3_1 _p[2] +#define gSKv3_1_columnindex 2 +#define m _p[3] +#define m_columnindex 3 +#define ek _p[4] +#define ek_columnindex 4 +#define mInf _p[5] +#define mInf_columnindex 5 +#define mTau _p[6] +#define mTau_columnindex 6 +#define Dm _p[7] +#define Dm_columnindex 7 +#define v _p[8] +#define v_columnindex 8 +#define _g _p[9] +#define _g_columnindex 9 +#define _ion_ek *_ppvar[0]._pval +#define _ion_ik *_ppvar[1]._pval +#define _ion_dikdv *_ppvar[2]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + /* declaration of user functions */ + static void _hoc_rates(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_SKv3_1_soma", _hoc_setdata, + "rates_SKv3_1_soma", _hoc_rates, + 0, 0 +}; + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gSKv3_1bar_SKv3_1_soma", "S/cm2", + "ik_SKv3_1_soma", "mA/cm2", + "gSKv3_1_SKv3_1_soma", "S/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double m0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[3]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"SKv3_1_soma", + "gSKv3_1bar_SKv3_1_soma", + 0, + "ik_SKv3_1_soma", + "gSKv3_1_SKv3_1_soma", + 0, + "m_SKv3_1_soma", + 0, + 0}; + static Symbol* _k_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 10, _prop); + /*initialize range parameters*/ + gSKv3_1bar = 0.072929; + _prop->param = _p; + _prop->param_size = 10; + _ppvar = nrn_prop_datum_alloc(_mechtype, 4, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_k_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ek */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ik */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dikdv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _SKv3_1_soma_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("k", -10000.); + _k_sym = hoc_lookup("k_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 10, 4); + hoc_register_dparam_semantics(_mechtype, 0, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 SKv3_1_soma /mnt/c/neuron/neurenv/mech/SKv3_1_soma.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsproto_); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[1], _dlist1[1]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargs_ ) ; + Dm = ( mInf - m ) / mTau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargs_ ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mTau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargs_ ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mTau)))*(- ( ( ( mInf ) ) / mTau ) / ( ( ( ( - 1.0 ) ) ) / mTau ) - m) ; + } + return 0; +} + +static int rates ( _threadargsproto_ ) { + mInf = 1.0 / ( 1.0 + exp ( ( ( v - ( 18.700 ) ) / ( - 9.700 ) ) ) ) ; + mTau = 0.2 * 20.000 / ( 1.0 + exp ( ( ( v - ( - 46.560 ) ) / ( - 44.140 ) ) ) ) ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 1;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 1; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ek = _ion_ek; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_k_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_k_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_k_sym, _ppvar, 2, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + m = m0; + { + rates ( _threadargs_ ) ; + m = mInf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ek = _ion_ek; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gSKv3_1 = gSKv3_1bar * m ; + ik = gSKv3_1 * ( v - ek ) ; + } + _current += ik; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ek = _ion_ek; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dik; + _dik = ik; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dikdv += (_dik - ik)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ik += ik ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ek = _ion_ek; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/SKv3_1_soma.mod"; +static const char* nmodl_file_text = + ":Comment : L6\n" + ":Reference : : Characterization of a Shaw-related potassium channel family in rat brain, The EMBO Journal, vol.11, no.7,2473-2486 (1992)\n" + "\n" + "NEURON {\n" + " SUFFIX SKv3_1_soma\n" + " USEION k READ ek WRITE ik\n" + " RANGE gSKv3_1bar, gSKv3_1, ik \n" + "}\n" + "\n" + "UNITS {\n" + " (S) = (siemens)\n" + " (mV) = (millivolt)\n" + " (mA) = (milliamp)\n" + "}\n" + "\n" + "PARAMETER {\n" + " gSKv3_1bar = 0.072929 (S/cm2) \n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (mV)\n" + " ek (mV)\n" + " ik (mA/cm2)\n" + " gSKv3_1 (S/cm2)\n" + " mInf\n" + " mTau\n" + "}\n" + "\n" + "STATE { \n" + " m\n" + "}\n" + "\n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gSKv3_1 = gSKv3_1bar*m\n" + " ik = gSKv3_1*(v-ek)\n" + "}\n" + "\n" + "DERIVATIVE states {\n" + " rates()\n" + " m' = (mInf-m)/mTau\n" + "}\n" + "\n" + "INITIAL{\n" + " rates()\n" + " m = mInf\n" + "}\n" + "\n" + "PROCEDURE rates(){\n" + " UNITSOFF\n" + " mInf = 1/(1+exp(((v -(18.700))/(-9.700))))\n" + " mTau = 0.2*20.000/(1+exp(((v -(-46.560))/(-44.140))))\n" + " UNITSON\n" + "}\n" + "\n" + ; +#endif diff --git a/x86_64/SKv3_1_soma.o b/x86_64/SKv3_1_soma.o new file mode 100644 index 0000000000000000000000000000000000000000..5c071efaa8dcb89dfeb3fc06e2ee141a7f732ce6 GIT binary patch literal 13280 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 +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__hhqt +#define _nrn_initial _nrn_initial__hhqt +#define nrn_cur _nrn_cur__hhqt +#define _nrn_current _nrn_current__hhqt +#define nrn_jacob _nrn_jacob__hhqt +#define nrn_state _nrn_state__hhqt +#define _net_receive _net_receive__hhqt +#define rates rates__hhqt +#define states states__hhqt + +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + /* Thread safe. No static _p or _ppvar. */ + +#define t _nt->_t +#define dt _nt->_dt +#define gnabar _p[0] +#define gnabar_columnindex 0 +#define gkbar _p[1] +#define gkbar_columnindex 1 +#define gl _p[2] +#define gl_columnindex 2 +#define el _p[3] +#define el_columnindex 3 +#define celsius _p[4] +#define celsius_columnindex 4 +#define gna _p[5] +#define gna_columnindex 5 +#define gk _p[6] +#define gk_columnindex 6 +#define il _p[7] +#define il_columnindex 7 +#define m _p[8] +#define m_columnindex 8 +#define h _p[9] +#define h_columnindex 9 +#define n _p[10] +#define n_columnindex 10 +#define ena _p[11] +#define ena_columnindex 11 +#define ek _p[12] +#define ek_columnindex 12 +#define ina _p[13] +#define ina_columnindex 13 +#define ik _p[14] +#define ik_columnindex 14 +#define minf _p[15] +#define minf_columnindex 15 +#define hinf _p[16] +#define hinf_columnindex 16 +#define ninf _p[17] +#define ninf_columnindex 17 +#define mtau _p[18] +#define mtau_columnindex 18 +#define htau _p[19] +#define htau_columnindex 19 +#define ntau _p[20] +#define ntau_columnindex 20 +#define Dm _p[21] +#define Dm_columnindex 21 +#define Dh _p[22] +#define Dh_columnindex 22 +#define Dn _p[23] +#define Dn_columnindex 23 +#define v _p[24] +#define v_columnindex 24 +#define _g _p[25] +#define _g_columnindex 25 +#define _ion_ena *_ppvar[0]._pval +#define _ion_ina *_ppvar[1]._pval +#define _ion_dinadv *_ppvar[2]._pval +#define _ion_ek *_ppvar[3]._pval +#define _ion_ik *_ppvar[4]._pval +#define _ion_dikdv *_ppvar[5]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; + /* external NEURON variables */ + extern double celsius; + /* declaration of user functions */ + static void _hoc_rates(void); + static void _hoc_vtrap(void); + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _extcall_prop = _prop; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_hhqt", _hoc_setdata, + "rates_hhqt", _hoc_rates, + "vtrap_hhqt", _hoc_vtrap, + 0, 0 +}; +#define vtrap vtrap_hhqt + extern double vtrap( _threadargsprotocomma_ double , double ); + /* declare global and static user variables */ + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + "gl_hhqt", 0, 1e+09, + "gkbar_hhqt", 0, 1e+09, + "gnabar_hhqt", 0, 1e+09, + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "gnabar_hhqt", "S/cm2", + "gkbar_hhqt", "S/cm2", + "gl_hhqt", "S/cm2", + "el_hhqt", "mV", + "celsius_hhqt", "degC", + "gna_hhqt", "S/cm2", + "gk_hhqt", "S/cm2", + "il_hhqt", "mA/cm2", + 0,0 +}; + static double delta_t = 0.01; + static double h0 = 0; + static double m0 = 0; + static double n0 = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + +static int _ode_count(int); +static void _ode_map(int, double**, double**, double*, Datum*, double*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); + +#define _cvode_ieq _ppvar[6]._i + static void _ode_matsol_instance1(_threadargsproto_); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"hhqt", + "gnabar_hhqt", + "gkbar_hhqt", + "gl_hhqt", + "el_hhqt", + "celsius_hhqt", + 0, + "gna_hhqt", + "gk_hhqt", + "il_hhqt", + 0, + "m_hhqt", + "h_hhqt", + "n_hhqt", + 0, + 0}; + static Symbol* _na_sym; + static Symbol* _k_sym; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 26, _prop); + /*initialize range parameters*/ + gnabar = 0.12; + gkbar = 0.036; + gl = 0.0003; + el = -54.3; + celsius = 29; + _prop->param = _p; + _prop->param_size = 26; + _ppvar = nrn_prop_datum_alloc(_mechtype, 7, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + prop_ion = need_memb(_na_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[0]._pval = &prop_ion->param[0]; /* ena */ + _ppvar[1]._pval = &prop_ion->param[3]; /* ina */ + _ppvar[2]._pval = &prop_ion->param[4]; /* _ion_dinadv */ + prop_ion = need_memb(_k_sym); + nrn_promote(prop_ion, 0, 1); + _ppvar[3]._pval = &prop_ion->param[0]; /* ek */ + _ppvar[4]._pval = &prop_ion->param[3]; /* ik */ + _ppvar[5]._pval = &prop_ion->param[4]; /* _ion_dikdv */ + +} + static void _initlists(); + /* some states have an absolute tolerance */ + static Symbol** _atollist; + static HocStateTolerance _hoc_state_tol[] = { + 0,0 +}; + static void _update_ion_pointer(Datum*); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _hhqt_reg() { + int _vectorized = 1; + _initlists(); + ion_reg("na", -10000.); + ion_reg("k", -10000.); + _na_sym = hoc_lookup("na_ion"); + _k_sym = hoc_lookup("k_ion"); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 1); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 26, 7); + hoc_register_dparam_semantics(_mechtype, 0, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 1, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 2, "na_ion"); + hoc_register_dparam_semantics(_mechtype, 3, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 4, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 5, "k_ion"); + hoc_register_dparam_semantics(_mechtype, 6, "cvodeieq"); + hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); + hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 hhqt /mnt/c/neuron/neurenv/mech/hhqt.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} +static int rates(_threadargsprotocomma_ double); + +static int _ode_spec1(_threadargsproto_); +/*static int _ode_matsol1(_threadargsproto_);*/ + static int _slist1[3], _dlist1[3]; + static int states(_threadargsproto_); + +/*CVODE*/ + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { + rates ( _threadargscomma_ v ) ; + Dm = ( minf - m ) / mtau ; + Dh = ( hinf - h ) / htau ; + Dn = ( ninf - n ) / ntau ; + } + return _reset; +} + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + rates ( _threadargscomma_ v ) ; + Dm = Dm / (1. - dt*( ( ( ( - 1.0 ) ) ) / mtau )) ; + Dh = Dh / (1. - dt*( ( ( ( - 1.0 ) ) ) / htau )) ; + Dn = Dn / (1. - dt*( ( ( ( - 1.0 ) ) ) / ntau )) ; + return 0; +} + /*END CVODE*/ + static int states (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { + rates ( _threadargscomma_ v ) ; + m = m + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / mtau)))*(- ( ( ( minf ) ) / mtau ) / ( ( ( ( - 1.0 ) ) ) / mtau ) - m) ; + h = h + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / htau)))*(- ( ( ( hinf ) ) / htau ) / ( ( ( ( - 1.0 ) ) ) / htau ) - h) ; + n = n + (1. - exp(dt*(( ( ( - 1.0 ) ) ) / ntau)))*(- ( ( ( ninf ) ) / ntau ) / ( ( ( ( - 1.0 ) ) ) / ntau ) - n) ; + } + return 0; +} + +static int rates ( _threadargsprotocomma_ double _lv ) { + double _lalpha , _lbeta , _lsum , _lq10 ; + _lq10 = pow( 3.0 , ( ( celsius - 6.3 ) / 10.0 ) ) ; + _lalpha = .1 * vtrap ( _threadargscomma_ - ( _lv + 40.0 ) , 10.0 ) ; + _lbeta = 4.0 * exp ( - ( _lv + 65.0 ) / 18.0 ) ; + _lsum = _lalpha + _lbeta ; + mtau = 1.0 / ( _lq10 * _lsum ) ; + minf = _lalpha / _lsum ; + _lalpha = .07 * exp ( - ( _lv + 65.0 ) / 20.0 ) ; + _lbeta = 1.0 / ( exp ( - ( _lv + 35.0 ) / 10.0 ) + 1.0 ) ; + _lsum = _lalpha + _lbeta ; + htau = 1.0 / ( _lq10 * _lsum ) ; + hinf = _lalpha / _lsum ; + _lalpha = .01 * vtrap ( _threadargscomma_ - ( _lv + 55.0 ) , 10.0 ) ; + _lbeta = .125 * exp ( - ( _lv + 65.0 ) / 80.0 ) ; + _lsum = _lalpha + _lbeta ; + ntau = 1.0 / ( _lq10 * _lsum ) ; + ninf = _lalpha / _lsum ; + return 0; } + +static void _hoc_rates(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt, *getarg(1) ); + hoc_retpushx(_r); +} + +double vtrap ( _threadargsprotocomma_ double _lx , double _ly ) { + double _lvtrap; + if ( fabs ( _lx / _ly ) < 1e-6 ) { + _lvtrap = _ly * ( 1.0 - _lx / _ly / 2.0 ) ; + } + else { + _lvtrap = _lx / ( exp ( _lx / _ly ) - 1.0 ) ; + } + +return _lvtrap; + } + +static void _hoc_vtrap(void) { + double _r; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = vtrap ( _p, _ppvar, _thread, _nt, *getarg(1) , *getarg(2) ); + hoc_retpushx(_r); +} + +static int _ode_count(int _type){ return 3;} + +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + ek = _ion_ek; + _ode_spec1 (_p, _ppvar, _thread, _nt); + }} + +static void _ode_map(int _ieq, double** _pv, double** _pvdot, double* _pp, Datum* _ppd, double* _atol, int _type) { + double* _p; Datum* _ppvar; + int _i; _p = _pp; _ppvar = _ppd; + _cvode_ieq = _ieq; + for (_i=0; _i < 3; ++_i) { + _pv[_i] = _pp + _slist1[_i]; _pvdot[_i] = _pp + _dlist1[_i]; + _cvode_abstol(_atollist, _atol, _i); + } + } + +static void _ode_matsol_instance1(_threadargsproto_) { + _ode_matsol1 (_p, _ppvar, _thread, _nt); + } + +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { + double* _p; Datum* _ppvar; Datum* _thread; + Node* _nd; double _v; int _iml, _cntml; + _cntml = _ml->_nodecount; + _thread = _ml->_thread; + for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; + v = NODEV(_nd); + ena = _ion_ena; + ek = _ion_ek; + _ode_matsol_instance1(_threadargs_); + }} + extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); + static void _update_ion_pointer(Datum* _ppvar) { + nrn_update_ion_pointer(_na_sym, _ppvar, 0, 0); + nrn_update_ion_pointer(_na_sym, _ppvar, 1, 3); + nrn_update_ion_pointer(_na_sym, _ppvar, 2, 4); + nrn_update_ion_pointer(_k_sym, _ppvar, 3, 0); + nrn_update_ion_pointer(_k_sym, _ppvar, 4, 3); + nrn_update_ion_pointer(_k_sym, _ppvar, 5, 4); + } + +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ + h = h0; + m = m0; + n = n0; + { + rates ( _threadargscomma_ v ) ; + m = minf ; + h = hinf ; + n = ninf ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + ena = _ion_ena; + ek = _ion_ek; + initmodel(_p, _ppvar, _thread, _nt); + } +} + +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { + gna = gnabar * m * m * m * h ; + ina = gna * ( v - ena ) ; + gk = gkbar * n * n * n * n ; + ik = gk * ( v - ek ) ; + il = gl * ( v - el ) ; + } + _current += ina; + _current += ik; + _current += il; + +} return _current; +} + +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + ena = _ion_ena; + ek = _ion_ek; + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); + { double _dik; + double _dina; + _dina = ina; + _dik = ik; + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); + _ion_dinadv += (_dina - ina)/.001 ; + _ion_dikdv += (_dik - ik)/.001 ; + } + _g = (_g - _rhs)/.001; + _ion_ina += ina ; + _ion_ik += ik ; +#if CACHEVEC + if (use_cachevec) { + VEC_RHS(_ni[_iml]) -= _rhs; + }else +#endif + { + NODERHS(_nd) -= _rhs; + } + +} + +} + +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; +#if CACHEVEC + if (use_cachevec) { + VEC_D(_ni[_iml]) += _g; + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + NODED(_nd) += _g; + } + +} + +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +_thread = _ml->_thread; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ + ena = _ion_ena; + ek = _ion_ek; + { states(_p, _ppvar, _thread, _nt); + } }} + +} + +static void terminal(){} + +static void _initlists(){ + double _x; double* _p = &_x; + int _i; static int _first = 1; + if (!_first) return; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; + _slist1[2] = n_columnindex; _dlist1[2] = Dn_columnindex; +_first = 0; +} + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/hhqt.mod"; +static const char* nmodl_file_text = + "COMMENT\n" + " This is the original Hodgkin-Huxley treatment for the set of sodium, \n" + " potassium, and leakage channels found in the squid giant axon membrane.\n" + " (\"A quantitative description of membrane current and its application \n" + " conduction and excitation in nerve\" J.Physiol. (Lond.) 117:500-544 (1952).)\n" + " Membrane voltage is in absolute mV and has been reversed in polarity\n" + " from the original HH convention and shifted to reflect a resting potential\n" + " of -65 mV.\n" + " Remember to set a squid-appropriate temperature\n" + " (e.g. in HOC: \"celsius=6.3\" or in Python: \"h.celsius=6.3\").\n" + " See squid.hoc for an example of a simulation using this model.\n" + " SW Jaslove 6 March, 1992\n" + "ENDCOMMENT\n" + "\n" + "NEURON {\n" + " SUFFIX hhqt\n" + " USEION na READ ena WRITE ina\n" + " USEION k READ ek WRITE ik\n" + " NONSPECIFIC_CURRENT il\n" + " RANGE gnabar, gkbar, gl, el, gna, gk, celsius\n" + "}\n" + " \n" + "UNITS {\n" + " (mA) = (milliamp)\n" + " (mV) = (millivolt)\n" + " (S) = (siemens)\n" + "}\n" + " \n" + "PARAMETER {\n" + " gnabar = .12 (S/cm2) <0,1e9>\n" + " gkbar = .036 (S/cm2) <0,1e9>\n" + " gl = .0003 (S/cm2) <0,1e9>\n" + " el = -54.3 (mV)\n" + " celsius = 29 (degC)\n" + "}\n" + " \n" + "ASSIGNED {\n" + " v (mV)\n" + " ena (mV)\n" + " ek (mV)\n" + " gna (S/cm2)\n" + " gk (S/cm2)\n" + " ina (mA/cm2)\n" + " ik (mA/cm2)\n" + " il (mA/cm2)\n" + " minf hinf ninf\n" + " mtau (ms) htau (ms) ntau (ms)\n" + "}\n" + " \n" + "STATE {\n" + " m h n\n" + "}\n" + " \n" + "BREAKPOINT {\n" + " SOLVE states METHOD cnexp\n" + " gna = gnabar*m*m*m*h\n" + " ina = gna*(v - ena)\n" + " gk = gkbar*n*n*n*n\n" + " ik = gk*(v - ek) \n" + " il = gl*(v - el)\n" + "}\n" + "\n" + "DERIVATIVE states { \n" + " rates(v)\n" + " m' = (minf-m)/mtau\n" + " h' = (hinf-h)/htau\n" + " n' = (ninf-n)/ntau\n" + "}\n" + " \n" + "INITIAL {\n" + " rates(v)\n" + " m = minf\n" + " h = hinf\n" + " n = ninf\n" + "}\n" + "\n" + "PROCEDURE rates(v(mV)) { :Computes rate and other constants at current v.\n" + " :Call once from HOC to initialize inf at resting v.\n" + " LOCAL alpha, beta, sum, q10\n" + " q10 = 3^((celsius - 6.3)/10)\n" + "\n" + "UNITSOFF\n" + " :\"m\" sodium activation system\n" + " alpha = .1*vtrap(-(v+40),10)\n" + " beta = 4*exp(-(v+65)/18)\n" + " sum = alpha + beta\n" + " mtau = 1/(q10*sum)\n" + " minf = alpha/sum\n" + " \n" + " :\"h\" sodium inactivation system\n" + " alpha = .07*exp(-(v+65)/20)\n" + " beta = 1/(exp(-(v+35)/10) + 1)\n" + " sum = alpha + beta\n" + " htau = 1/(q10*sum)\n" + " hinf = alpha/sum\n" + " \n" + " :\"n\" potassium activation system\n" + " alpha = .01*vtrap(-(v+55),10) \n" + " beta = .125*exp(-(v+65)/80)\n" + " sum = alpha + beta\n" + " ntau = 1/(q10*sum)\n" + " ninf = alpha/sum\n" + "}\n" + " \n" + "FUNCTION vtrap(x,y) { :Traps for 0 in denominator of rate eqns.\n" + " if (fabs(x/y) < 1e-6) {\n" + " vtrap = y*(1 - x/y/2)\n" + " }else{\n" + " vtrap = x/(exp(x/y) - 1)\n" + " }\n" + "}\n" + " \n" + "UNITSON\n" + ; +#endif diff --git a/x86_64/hhqt.o b/x86_64/hhqt.o new file mode 100644 index 0000000000000000000000000000000000000000..1b769f1a27987a0feb73b9aeee2a38bda4b5ce95 GIT binary patch literal 19792 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 literal 0 HcmV?d00001 diff --git a/x86_64/libnrnmech.so b/x86_64/libnrnmech.so new file mode 100644 index 0000000000000000000000000000000000000000..9e7ce03f3ae9208d6739ea1449d47be71bf8e92f GIT binary patch literal 183600 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 literal 0 HcmV?d00001 diff --git a/x86_64/makemod2c_inc b/x86_64/makemod2c_inc new file mode 100644 index 0000000..f3ded5f --- /dev/null +++ b/x86_64/makemod2c_inc @@ -0,0 +1,200 @@ +./CaDynamics_E2.c: /mnt/c/neuron/neurenv/mech/CaDynamics_E2.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "CaDynamics_E2.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./CaDynamics_E2.o: ./CaDynamics_E2.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./CaDynamics_E2_soma.c: /mnt/c/neuron/neurenv/mech/CaDynamics_E2_soma.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "CaDynamics_E2_soma.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./CaDynamics_E2_soma.o: ./CaDynamics_E2_soma.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./Ca_HVA.c: /mnt/c/neuron/neurenv/mech/Ca_HVA.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "Ca_HVA.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./Ca_HVA.o: ./Ca_HVA.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./Ca_HVA_soma.c: /mnt/c/neuron/neurenv/mech/Ca_HVA_soma.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "Ca_HVA_soma.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./Ca_HVA_soma.o: ./Ca_HVA_soma.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./Ca_LVAst.c: /mnt/c/neuron/neurenv/mech/Ca_LVAst.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "Ca_LVAst.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./Ca_LVAst.o: ./Ca_LVAst.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./Ca_LVAst_soma.c: /mnt/c/neuron/neurenv/mech/Ca_LVAst_soma.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "Ca_LVAst_soma.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./Ca_LVAst_soma.o: ./Ca_LVAst_soma.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./Ca.c: /mnt/c/neuron/neurenv/mech/Ca.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "Ca.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./Ca.o: ./Ca.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./hhqt.c: /mnt/c/neuron/neurenv/mech/hhqt.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "hhqt.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./hhqt.o: ./hhqt.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./Ih.c: /mnt/c/neuron/neurenv/mech/Ih.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "Ih.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./Ih.o: ./Ih.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./Im.c: /mnt/c/neuron/neurenv/mech/Im.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "Im.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./Im.o: ./Im.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./K_Pst.c: /mnt/c/neuron/neurenv/mech/K_Pst.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "K_Pst.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./K_Pst.o: ./K_Pst.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./K_Tst.c: /mnt/c/neuron/neurenv/mech/K_Tst.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "K_Tst.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./K_Tst.o: ./K_Tst.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./Nap_Et2.c: /mnt/c/neuron/neurenv/mech/Nap_Et2.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "Nap_Et2.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./Nap_Et2.o: ./Nap_Et2.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./NaTa_t.c: /mnt/c/neuron/neurenv/mech/NaTa_t.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "NaTa_t.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./NaTa_t.o: ./NaTa_t.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./NaTa_t_myel.c: /mnt/c/neuron/neurenv/mech/NaTa_t_myel.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "NaTa_t_myel.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./NaTa_t_myel.o: ./NaTa_t_myel.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./NaTa_t_nor.c: /mnt/c/neuron/neurenv/mech/NaTa_t_nor.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "NaTa_t_nor.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./NaTa_t_nor.o: ./NaTa_t_nor.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./NaTs2_t_apic.c: /mnt/c/neuron/neurenv/mech/NaTs2_t_apic.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "NaTs2_t_apic.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./NaTs2_t_apic.o: ./NaTs2_t_apic.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./NaTs2_t.c: /mnt/c/neuron/neurenv/mech/NaTs2_t.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "NaTs2_t.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./NaTs2_t.o: ./NaTs2_t.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./NaTs2_t_soma.c: /mnt/c/neuron/neurenv/mech/NaTs2_t_soma.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "NaTs2_t_soma.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./NaTs2_t_soma.o: ./NaTs2_t_soma.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./SK_E2.c: /mnt/c/neuron/neurenv/mech/SK_E2.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "SK_E2.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./SK_E2.o: ./SK_E2.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./SK_E2_soma.c: /mnt/c/neuron/neurenv/mech/SK_E2_soma.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "SK_E2_soma.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./SK_E2_soma.o: ./SK_E2_soma.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./SKv3_1_apic.c: /mnt/c/neuron/neurenv/mech/SKv3_1_apic.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "SKv3_1_apic.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./SKv3_1_apic.o: ./SKv3_1_apic.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./SKv3_1.c: /mnt/c/neuron/neurenv/mech/SKv3_1.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "SKv3_1.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./SKv3_1.o: ./SKv3_1.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./SKv3_1_soma.c: /mnt/c/neuron/neurenv/mech/SKv3_1_soma.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "SKv3_1_soma.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./SKv3_1_soma.o: ./SKv3_1_soma.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + +./xtra.c: /mnt/c/neuron/neurenv/mech/xtra.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd "/mnt/c/neuron/neurenv/mech"; MODLUNIT=$(NRNUNITS) $(NOCMODL) "xtra.mod" -o "/mnt/c/neuron/neurenv/x86_64") + +./xtra.o: ./xtra.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I"/mnt/c/neuron/neurenv/mech" $(INCLUDES) -fPIC -c $< -o $@ + diff --git a/x86_64/mod_func.cpp b/x86_64/mod_func.cpp new file mode 100644 index 0000000..790385b --- /dev/null +++ b/x86_64/mod_func.cpp @@ -0,0 +1,94 @@ +#include +#include "hocdec.h" +extern int nrnmpi_myid; +extern int nrn_nobanner_; +#if defined(__cplusplus) +extern "C" { +#endif + +extern void _CaDynamics_E2_reg(void); +extern void _CaDynamics_E2_soma_reg(void); +extern void _Ca_HVA_reg(void); +extern void _Ca_HVA_soma_reg(void); +extern void _Ca_LVAst_reg(void); +extern void _Ca_LVAst_soma_reg(void); +extern void _Ca_reg(void); +extern void _hhqt_reg(void); +extern void _Ih_reg(void); +extern void _Im_reg(void); +extern void _K_Pst_reg(void); +extern void _K_Tst_reg(void); +extern void _Nap_Et2_reg(void); +extern void _NaTa_t_reg(void); +extern void _NaTa_t_myel_reg(void); +extern void _NaTa_t_nor_reg(void); +extern void _NaTs2_t_apic_reg(void); +extern void _NaTs2_t_reg(void); +extern void _NaTs2_t_soma_reg(void); +extern void _SK_E2_reg(void); +extern void _SK_E2_soma_reg(void); +extern void _SKv3_1_apic_reg(void); +extern void _SKv3_1_reg(void); +extern void _SKv3_1_soma_reg(void); +extern void _xtra_reg(void); + +void modl_reg() { + if (!nrn_nobanner_) if (nrnmpi_myid < 1) { + fprintf(stderr, "Additional mechanisms from files\n"); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/CaDynamics_E2.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/CaDynamics_E2_soma.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/Ca_HVA.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/Ca_HVA_soma.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/Ca_LVAst.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/Ca_LVAst_soma.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/Ca.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/hhqt.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/Ih.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/Im.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/K_Pst.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/K_Tst.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/Nap_Et2.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/NaTa_t.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/NaTa_t_myel.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/NaTa_t_nor.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/NaTs2_t_apic.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/NaTs2_t.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/NaTs2_t_soma.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/SK_E2.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/SK_E2_soma.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/SKv3_1_apic.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/SKv3_1.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/SKv3_1_soma.mod\""); + fprintf(stderr, " \"/mnt/c/neuron/neurenv/mech/xtra.mod\""); + fprintf(stderr, "\n"); + } + _CaDynamics_E2_reg(); + _CaDynamics_E2_soma_reg(); + _Ca_HVA_reg(); + _Ca_HVA_soma_reg(); + _Ca_LVAst_reg(); + _Ca_LVAst_soma_reg(); + _Ca_reg(); + _hhqt_reg(); + _Ih_reg(); + _Im_reg(); + _K_Pst_reg(); + _K_Tst_reg(); + _Nap_Et2_reg(); + _NaTa_t_reg(); + _NaTa_t_myel_reg(); + _NaTa_t_nor_reg(); + _NaTs2_t_apic_reg(); + _NaTs2_t_reg(); + _NaTs2_t_soma_reg(); + _SK_E2_reg(); + _SK_E2_soma_reg(); + _SKv3_1_apic_reg(); + _SKv3_1_reg(); + _SKv3_1_soma_reg(); + _xtra_reg(); +} + +#if defined(__cplusplus) +} +#endif diff --git a/x86_64/mod_func.o b/x86_64/mod_func.o new file mode 100644 index 0000000000000000000000000000000000000000..9c32f3c4b04a1fda62dc395e21dc9d1db1ef6aef GIT binary patch literal 7328 zcmb<-^>JfjWMqH=Mg}_u1P><4!0Mad5b!vo;3^dR2^uzte>L&JoZl7IjIXJBwlNy#k9%+E{AQOHeA&PdG5 zEY2-fNGrXB?9 zpdM~AUUeB6g)leZRp*&OoOzzP#HsU+4}f_duf5*!Aw;S3ODu?YErF&8P;3!MM}CPR ziSaO>6Rkczw=y*c=0UvfhL|6pmtO=^jz69HC599m#h1h<7Gx$vbr3Qiq#mji>;Yob zBPAdF?g{oLE`Nd5A)87d+=IQ#jN=WFy-CO&Aoa-JBt|`ogYbq+MM)8~MBrjzaCdgL zQqXYs3)NIGG}SZGGXRGx3#hDMU|;}M;_iN-3``7+2S8%5wg4jfdl&HaM2r&gru`+m|iO+(HSD=Y6 z0E@GMNn~Of0|SE)Qu+j^eFg@G^$ZLQ0>}!X?4vluFXIruk3;+u4sk9PhyBM@N>B1}Mp zDTpuw5#}Jm0z_DX2t$Y#upUFOCPT0;L$EeOus%buMnkYpL$FpuuwEmuUL&wxBd}g0 zuwEmuUL&wxBQuaAbK;9q(;4F3ef*sqed7Jy+=5+0;zJyrd|cxh@{01}^YW7t^YT)Q zz`Wdo%=p~O%oK)rl%_Yt2vi|Z>l!8wZViL2aZUuYQ6#}lU${~T4@Ci3C#Y=-QRJBc zrE?)Pxb+BQh7^}Tn9w#Lj00-mp|C-XHxz-q{319X)S3b}OHf6?4uLh!5Ke?Nd%%(q zCbAT$#e!rMw8;Zi43q{Sy^WJ3x>9tg#t1#O4? z`40h-NaBhN3=A-FSiKG^o<6Jd!xb?=W#l zy$o@W9+EkkNb2>G#Pg8EK`laP?ZvdyvFIZ6uia6OqJ0aR(Ehh9qu*WX^0PaZ4oe%}{Yr*n`?yFmrZ6#X-#(P!j?s zeiAAUieFILfQjFNii6aHIA zq#iW(0ds#cR2<#>5~w&xJ*cAqQ(p-cM_1nk6$hyYl_4qcmR2-yU5Xt<% zP;qqid?1Ak3=AMj2uZy#NB~QEQ-O+uC{P~?<{nLu02cLDP;n3i>J!4$+k*tKs1JaO zgDB7tEKGeUNC1oaG^jX;5<_x-Hb?-A`WmP>h!RIq-v|=GqJ9!o97KWohA{U`2MJ(N zzXB=_qCj;MO#NDr02cM&F-&OqOCh=EFb?%spyD7(8cF?4kN_6*UqQt|6sX?~bI*H_ z02cMI{uoFa)aQk%X9X2@Skx~CC1$9&6_R@tpyD8NKp4tpV9+bB%q>YwV$drtDT2@$ zFji4&PNH5(YDEcyUP@v~B7U9*Pf*qZmA%L&LHgkg z46uG4Ob(QXVQdf$ibGJIgsBIKfp7;@;RaA4&A`9_D!V}TfXZNyJSZ)KXi(b&Bo2)p zkPsOAp$mXT8IXFQ5CKqI0c0k+a$@y^>U@y>pgJC6B7_Wp8aN;1IfxLL1la{*fb@W9 zkiS7}bp7w4{zgeV3<&pw^nmpHL&ZRC5)dDTKSK3`$|#r^h=%Ed(V+1R7#k!H!z?g| z!UUi+y4nl|1_qE-=PL4MR2XU+0|RK%31lX^eha8VQ24+VGcYhfh2cWg(7cDP z&H|c1pcFX$fa+J6ewa8myFrFmKo#x)H9{B|7(jKQ9FqMo{h&G?8r2|eaBKjo3>g?0 eg3&w%vJb9^fq?;3M`6<+0JWeCSur%Ok%a(=>k)1M literal 0 HcmV?d00001 diff --git a/x86_64/special b/x86_64/special new file mode 100644 index 0000000000000000000000000000000000000000..4d24c753a4d6688f5d821ab927d131ba97ea2d85 GIT binary patch literal 16112 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 SoBmughzd}@2f~7o==uRp9C3#L literal 0 HcmV?d00001 diff --git a/x86_64/xtra.c b/x86_64/xtra.c new file mode 100644 index 0000000..5b3d37e --- /dev/null +++ b/x86_64/xtra.c @@ -0,0 +1,325 @@ +/* Created by Language version: 7.7.0 */ +/* NOT VECTORIZED */ +#define NRN_VECTORIZED 0 +#include +#include +#include +#include "mech_api.h" +#undef PI +#define nil 0 +#include "md1redef.h" +#include "section.h" +#include "nrniv_mf.h" +#include "md2redef.h" + +#if METHOD3 +extern int _method3; +#endif + +#if !NRNGPU +#undef exp +#define exp hoc_Exp +extern double hoc_Exp(double); +#endif + +#define nrn_init _nrn_init__xtra +#define _nrn_initial _nrn_initial__xtra +#define nrn_cur _nrn_cur__xtra +#define _nrn_current _nrn_current__xtra +#define nrn_jacob _nrn_jacob__xtra +#define nrn_state _nrn_state__xtra +#define _net_receive _net_receive__xtra + +#define _threadargscomma_ /**/ +#define _threadargsprotocomma_ /**/ +#define _threadargs_ /**/ +#define _threadargsproto_ /**/ + /*SUPPRESS 761*/ + /*SUPPRESS 762*/ + /*SUPPRESS 763*/ + /*SUPPRESS 765*/ + extern double *getarg(int); + static double *_p; static Datum *_ppvar; + +#define t nrn_threads->_t +#define dt nrn_threads->_dt +#define es _p[0] +#define es_columnindex 0 +#define x _p[1] +#define x_columnindex 1 +#define y _p[2] +#define y_columnindex 2 +#define z _p[3] +#define z_columnindex 3 +#define type _p[4] +#define type_columnindex 4 +#define order _p[5] +#define order_columnindex 5 +#define ex *_ppvar[0]._pval +#define _p_ex _ppvar[0]._pval +#define area *_ppvar[1]._pval + +#if MAC +#if !defined(v) +#define v _mlhv +#endif +#if !defined(h) +#define h _mlhh +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + static int hoc_nrnpointerindex = 0; + /* external NEURON variables */ + /* declaration of user functions */ + static int _mechtype; +extern void _nrn_cacheloop_reg(int, int); +extern void hoc_register_prop_size(int, int, int); +extern void hoc_register_limits(int, HocParmLimits*); +extern void hoc_register_units(int, HocParmUnits*); +extern void nrn_promote(Prop*, int, int); +extern Memb_func* memb_func; + +#define NMODL_TEXT 1 +#if NMODL_TEXT +static const char* nmodl_file_text; +static const char* nmodl_filename; +extern void hoc_reg_nmodl_text(int, const char*); +extern void hoc_reg_nmodl_filename(int, const char*); +#endif + + extern void _nrn_setdata_reg(int, void(*)(Prop*)); + static void _setdata(Prop* _prop) { + _p = _prop->param; _ppvar = _prop->dparam; + } + static void _hoc_setdata() { + Prop *_prop, *hoc_getdata_range(int); + _prop = hoc_getdata_range(_mechtype); + _setdata(_prop); + hoc_retpushx(1.); +} + /* connect user functions to hoc names */ + static VoidFunc hoc_intfunc[] = { + "setdata_xtra", _hoc_setdata, + 0, 0 +}; + /* declare global and static user variables */ +#define stim stim_xtra + double stim = 0; + /* some parameters have upper and lower limits */ + static HocParmLimits _hoc_parm_limits[] = { + 0,0,0 +}; + static HocParmUnits _hoc_parm_units[] = { + "stim_xtra", "unitless", + "es_xtra", "mV", + "x_xtra", "1", + "y_xtra", "1", + "z_xtra", "1", + "type_xtra", "1", + "order_xtra", "1", + "ex_xtra", "millivolts", + 0,0 +}; + static double v = 0; + /* connect global user variables to hoc */ + static DoubScal hoc_scdoub[] = { + "stim_xtra", &stim_xtra, + 0,0 +}; + static DoubVec hoc_vdoub[] = { + 0,0,0 +}; + static double _sav_indep; + static void _ba1(Node*_nd, double* _pp, Datum* _ppd, Datum* _thread, NrnThread* _nt) ; + static void nrn_alloc(Prop*); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + /* connect range variables in _p that hoc is supposed to know about */ + static const char *_mechanism[] = { + "7.7.0", +"xtra", + "es_xtra", + "x_xtra", + "y_xtra", + "z_xtra", + "type_xtra", + "order_xtra", + 0, + 0, + 0, + "ex_xtra", + 0}; + extern Node* nrn_alloc_node_; + +extern Prop* need_memb(Symbol*); + +static void nrn_alloc(Prop* _prop) { + Prop *prop_ion; + double *_p; Datum *_ppvar; + _p = nrn_prop_data_alloc(_mechtype, 6, _prop); + /*initialize range parameters*/ + es = 0; + x = 0; + y = 0; + z = 0; + type = 0; + order = 0; + _prop->param = _p; + _prop->param_size = 6; + _ppvar = nrn_prop_datum_alloc(_mechtype, 2, _prop); + _prop->dparam = _ppvar; + /*connect ionic variables to this model*/ + _ppvar[1]._pval = &nrn_alloc_node_->_area; /* diam */ + +} + static void _initlists(); + extern Symbol* hoc_lookup(const char*); +extern void _nrn_thread_reg(int, int, void(*)(Datum*)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); +extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); +extern void _cvode_abstol( Symbol**, double*, int); + + void _xtra_reg() { + int _vectorized = 0; + _initlists(); + register_mech(_mechanism, nrn_alloc,(void*)0, (void*)0, (void*)0, nrn_init, hoc_nrnpointerindex, 0); + _mechtype = nrn_get_mechtype(_mechanism[1]); + _nrn_setdata_reg(_mechtype, _setdata); + #if NMODL_TEXT + hoc_reg_nmodl_text(_mechtype, nmodl_file_text); + hoc_reg_nmodl_filename(_mechtype, nmodl_filename); +#endif + hoc_register_prop_size(_mechtype, 6, 2); + hoc_register_dparam_semantics(_mechtype, 0, "pointer"); + hoc_register_dparam_semantics(_mechtype, 1, "area"); + hoc_reg_ba(_mechtype, _ba1, 11); + hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); + ivoc_help("help ?1 xtra /mnt/c/neuron/neurenv/mech/xtra.mod\n"); + hoc_register_limits(_mechtype, _hoc_parm_limits); + hoc_register_units(_mechtype, _hoc_parm_units); + } +static int _reset; +static char *modelname = ""; + +static int error; +static int _ninits = 0; +static int _match_recurse=1; +static void _modl_cleanup(){ _match_recurse=1;} + /* BEFORE BREAKPOINT */ + static void _ba1(Node*_nd, double* _pp, Datum* _ppd, Datum* _thread, NrnThread* _nt) { + _p = _pp; _ppvar = _ppd; + v = NODEV(_nd); + ex = stim * es ; + } + +static void initmodel() { + int _i; double _save;_ninits++; +{ + { + ex = stim * es ; + } + +} +} + +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +Node *_nd; double _v; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v = _v; + initmodel(); +}} + +static double _nrn_current(double _v){double _current=0.;v=_v;{ +} return _current; +} + +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type){ +Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; +#if CACHEVEC + _ni = _ml->_nodeindices; +#endif +_cntml = _ml->_nodecount; +for (_iml = 0; _iml < _cntml; ++_iml) { + _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + _nd = _ml->_nodelist[_iml]; +#if CACHEVEC + if (use_cachevec) { + _v = VEC_V(_ni[_iml]); + }else +#endif + { + _nd = _ml->_nodelist[_iml]; + _v = NODEV(_nd); + } + v=_v; +{ +}} + +} + +static void terminal(){} + +static void _initlists() { + int _i; static int _first = 1; + if (!_first) return; +_first = 0; +} + +#if NMODL_TEXT +static const char* nmodl_filename = "/mnt/c/neuron/neurenv/mech/xtra.mod"; +static const char* nmodl_file_text = + ": $Id: xtra.mod,v 1.4 2014/08/18 23:15:25 ted Exp ted $\n" + ": 2018/05/20 Modified by Aman Aberra \n" + "\n" + "NEURON {\n" + " SUFFIX xtra\n" + " RANGE es : (es = max amplitude of the potential) \n" + " RANGE x, y, z, type, order\n" + " GLOBAL stim : (stim = normalized waveform)\n" + " POINTER ex \n" + "}\n" + "\n" + "PARAMETER { \n" + " es = 0 (mV)\n" + " x = 0 (1) : spatial coords\n" + " y = 0 (1)\n" + " z = 0 (1) \n" + " type = 0 (1) : numbering system for morphological category of section - unassigned is 0\n" + " order = 0 (1) : order of branch/collateral. \n" + "}\n" + "\n" + "ASSIGNED {\n" + " v (millivolts)\n" + " ex (millivolts)\n" + " stim (unitless) \n" + " area (micron2)\n" + "}\n" + "\n" + "INITIAL {\n" + " ex = stim*es \n" + "}\n" + "\n" + "\n" + "BEFORE BREAKPOINT { : before each cy' = f(y,t) setup\n" + " ex = stim*es\n" + "}\n" + "\n" + ; +#endif diff --git a/x86_64/xtra.o b/x86_64/xtra.o new file mode 100644 index 0000000000000000000000000000000000000000..5af44af1f7368a801c078226cc73ac2ec8372730 GIT binary patch literal 7736 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 Q`YWIg+znF*rP1{R02%8~@&Et; literal 0 HcmV?d00001