x86_64/corenrn/mod2c/Aradi_CadepK.cpp: In member function 'void coreneuron::nrn_state_CadepK(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::operator()(const Eigen::Matrix<double, 4, 1>&, Eigen::Matrix<double, 4, 1>&, Eigen::Matrix<double, 4, 4>&) const':
x86_64/corenrn/mod2c/Aradi_CadepK.cpp:653:37: error: assignment of member 'coreneuron::nrn_state_CadepK(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphaq_in_0' in read-only object
653 | alphaq_in_0 = exp1_in_0;
| ~~~~~~~~~~~~^~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_CadepK.cpp:676:36: error: assignment of member 'coreneuron::nrn_state_CadepK(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::betaq_in_0' in read-only object
676 | betaq_in_0 = exp1_in_1;
| ~~~~~~~~~~~^~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_CadepK.cpp:696:36: error: assignment of member 'coreneuron::nrn_state_CadepK(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::betar_in_0' in read-only object
696 | betar_in_0 = 0.11 / exptrap_in_1;
| ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_CadepK.cpp:706:37: error: assignment of member 'coreneuron::nrn_state_CadepK(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::mysinf_in_0' in read-only object
706 | mysinf_in_0 = 1.0 / (1.0 + 4.0 / (1000.0 * x_in_6));
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp: In member function 'void coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::operator()(const Eigen::Matrix<double, 6, 1>&, Eigen::Matrix<double, 6, 1>&, Eigen::Matrix<double, 6, 6, 0, 6, 6>&) const':
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1216:37: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphaa_in_0' in read-only object
1216 | alphaa_in_0 = f_in_0;
| ~~~~~~~~~~~~^~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1245:37: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphaa_in_1' in read-only object
1245 | alphaa_in_1 = f_in_0;
| ~~~~~~~~~~~~^~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1268:36: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::betaa_in_0' in read-only object
1268 | betaa_in_0 = exponential_in_0;
| ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1298:37: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphaa_in_2' in read-only object
1298 | alphaa_in_2 = f_in_0;
| ~~~~~~~~~~~~^~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1321:36: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::betaa_in_1' in read-only object
1321 | betaa_in_1 = exponential_in_0;
| ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1352:37: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphab_in_0' in read-only object
1352 | alphab_in_0 = exponential_in_1;
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1375:37: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphab_in_1' in read-only object
1375 | alphab_in_1 = exponential_in_1;
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1398:36: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::betab_in_0' in read-only object
1398 | betab_in_0 = logistic_in_0;
| ~~~~~~~~~~~^~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1422:37: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphab_in_2' in read-only object
1422 | alphab_in_2 = exponential_in_1;
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1445:36: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::betab_in_1' in read-only object
1445 | betab_in_1 = logistic_in_0;
| ~~~~~~~~~~~^~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1482:37: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphac_in_0' in read-only object
1482 | alphac_in_0 = f_in_1;
| ~~~~~~~~~~~~^~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1505:36: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::betac_in_0' in read-only object
1505 | betac_in_0 = exponential_in_2;
| ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1535:37: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphad_in_0' in read-only object
1535 | alphad_in_0 = exponential_in_3;
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1558:36: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::betad_in_0' in read-only object
1558 | betad_in_0 = logistic_in_1;
| ~~~~~~~~~~~^~~~~~~~~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1594:37: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::alphae_in_0' in read-only object
1594 | alphae_in_0 = f_in_2;
| ~~~~~~~~~~~~^~~~~~~~
x86_64/corenrn/mod2c/Aradi_Ca.cpp:1617:36: error: assignment of member 'coreneuron::nrn_state_Aradi_Ca(coreneuron::NrnThread*, coreneuron::Memb_list*, int)::functor::betae_in_0' in read-only object
1617 | betae_in_0 = exponential_in_4;
| ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
The problem arises from the fact that some variables should be declared inside the operator() of the Newton functor and instead they are declared as members of the struct. As a result, when they are modified within the operator() -which is const-, there is the above compilation error. NMODL should declare these variables at the correct place.
I followed the instructions of the reduced dentate benchmark (https://github.com/pramodk/reduced_dentate), and I got the following compilation error (code generation issue):
The problem arises from the fact that some variables should be declared inside the operator() of the Newton functor and instead they are declared as members of the struct. As a result, when they are modified within the operator() -which is const-, there is the above compilation error. NMODL should declare these variables at the correct place.
I have used nrn + coreneuron (with
sympy --analyticflags) + nmodl to produce the special.