Skip to content
This repository was archived by the owner on Mar 25, 2025. It is now read-only.
This repository was archived by the owner on Mar 25, 2025. It is now read-only.

Error in code generation of reduced dentate benchmark (1) #691

Description

@kotsaloscv

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):

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 have used nrn + coreneuron (with sympy --analytic flags) + nmodl to produce the special.

Metadata

Metadata

Labels

bugSomething isn't workingcodegenCode generation backendnecessary-featureFunctionality required for simulations

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions