nmodl icon indicating copy to clipboard operation
nmodl copied to clipboard

Remove noisy `static_cast<int>(0)`.

Open 1uc opened this issue 1 year ago • 4 comments

1uc avatar Sep 18 '24 07:09 1uc

It has been added because sometime this is a double and this is forbidden to use this for indexing

alkino avatar Sep 18 '24 10:09 alkino

It has been added because sometime this is a double

Okay, so it's not just for readability, but it's a bug fix, even better.

1uc avatar Sep 18 '24 11:09 1uc

https://github.com/BlueBrain/nmodl/issues/776

alkino avatar Sep 18 '24 19:09 alkino

We have code that looks like this:

            nmodl_eigen_j[static_cast<int>(120)] =  -nmodl_eigen_x[static_cast<int>(0)] * _nt->_dt * kf11_ / (pow((*inst.diam[id]), 2.0) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(0)]);
            nmodl_eigen_j[static_cast<int>(132)] = _nt->_dt * kb11_ / (pow((*inst.diam[id]), 2.0) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(0)]);
            nmodl_eigen_f[static_cast<int>(1)] = (nmodl_eigen_x[static_cast<int>(0)] * _nt->_dt * kf0_ - nmodl_eigen_x[static_cast<int>(1)] * _nt->_dt * kb0_ - nmodl_eigen_x[static_cast<int>(1)] * _nt->_dt * kf1_ + nmodl_eigen_x[static_cast<int>(2)] * _nt->_dt * kb1_ + pow((*inst.diam[id]), 2.0) * ( -nmodl_eigen_x[static_cast<int>(1)] + old_ca_1) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(1)]) / (pow((*inst.diam[id]), 2.0) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(1)]);
            nmodl_eigen_j[static_cast<int>(1)] = _nt->_dt * kf0_ / (pow((*inst.diam[id]), 2.0) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(1)]);
            nmodl_eigen_j[static_cast<int>(13)] = ( -inst.global->beta * pow((*inst.diam[id]), 2.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(1)] - pow((*inst.diam[id]), 2.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(1)] - _nt->_dt * kb0_ - _nt->_dt * kf1_) / (pow((*inst.diam[id]), 2.0) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(1)]);
            nmodl_eigen_j[static_cast<int>(25)] = _nt->_dt * kb1_ / (pow((*inst.diam[id]), 2.0) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(1)]);

In order to be able to read this I need to apply a sequence of substitutions, first one it to remove all the static_cast<int>, they're just too much. Then we need to strip the nmodl_eigen_ which adds more clutter.

For example compare:

            nmodl_eigen_j[static_cast<int>(120)] =  -nmodl_eigen_x[static_cast<int>(0)] * _nt->_dt * kf11_ / (pow((*inst.diam[id]), 2.0) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[static_cast<int>(0)]);

            nmodl_eigen_j[120] =  -nmodl_eigen_x[0] * _nt->_dt * kf11_ / (pow((*inst.diam[id]), 2.0) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[0]);

            j[120] =  -x[0] * _nt->_dt * kf11_ / (pow((*inst.diam[id]), 2.0) * (inst.global->beta + 1.0) * (_thread_vars.vol_ptr(id))[0]);

There's still some problems with inst.diam, inst.global->beta and _thread_vars.vol_ptr that make it difficult to read; and arguably NOCMODL generated output is superior in that regard.

1uc avatar Sep 19 '24 07:09 1uc