Upgrading the emission line structure
We want to break up the existing emission line structure into several parts. This will help reduce memory overhead and may also speed up the code by creating a linked list of emission lines (or maybe an array of pointers) that have non-zero Einstein-A's instead of testing this over and over. The reduced stride of the smaller structures may also improve CPU cache performance. We could create an iterator to go over the emission lines.
There will be separate structures for atomic states (there are far less states than lines), the data needed for radiative transitions and for collisional transitions. The master emission line structure will have pointers to these sub-structures as needed.
An example of what the new emission line structure could look like is shown in EmLine.