wtbarnes / fiasco

Python interface to the CHIANTI atomic database
http://fiasco.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
21 stars 17 forks source link

Integrating non-Maxwellian distribution functions? #235

Open jwreep opened 1 year ago

jwreep commented 1 year ago

Currently there's an extension to CHIANTI called KAPPA (http://kappa.asu.cas.cz/) that recreates its IDL structure for various kappa distributions, with the same functionality otherwise. The ionization equilibria, etc, could presumably be pooled into a separate H5 file as is being done for CHIANTI. For most of the functionality, it is identical to CHIANTI with one extra input parameter (kappa value).

Presumably fiasco could be extended to incorporate this with a bit of effort? Is there any interest in doing so?

Paper on the package: https://ui.adsabs.harvard.edu/abs/2021ApJS..257...62D/abstract

wtbarnes commented 1 year ago

Huh I hadn't even thought about integration with KAPPA. That is a really interesting idea.

I've not ever used KAPPA so I'm not really sure what the API/database look like. Are there additional file types needed (e.g. other than the usual elvlc, wgfa, etc.) or is it literally a drop-in replacement for the entire database? Do you have a sense of what calculations we would need to modify? My naive understanding is that anything that involves an integration over a cross-section has to be recomputed for varying $\kappa$ values.

If it is largely just the database that is modified then it probably wouldn't be too challenging as it would just be a matter of rebuilding the HDF5 database and then pointing fiasco at that. If there are significant changes in the underlying calculations, it becomes more tricky.

jwreep commented 1 year ago

I think the main data files are largely the same format (except that it's meant to be compatible with CHIANTI 10 rather than the older versions). There are a couple of extra file types that seem to be ionization/recombination rates broken down for different values of kappa.

Comparing the directories for a random ion:

CHIANTI 10: ne_4 jreep$ ls ne_4.diparams ne_4.elvlc ne_4.rrparams ne_4.scups.fits.gz ne_4.drparams ne_4.fblvl ne_4.scups ne_4.wgfa

KAPPA: ne_4 jreep$ ls ne_4.drparams ne_4_k10.ups ne_4_k3.dwns ne_4_k5.dwns ne_4.elvlc ne_4_k15.dwns ne_4_k3.sav ne_4_k5.sav ne_4.fblvl ne_4_k15.sav ne_4_k3.tioniz ne_4_k5.tioniz ne_4.rrparams ne_4_k15.ups ne_4_k3.tionizr ne_4_k5.tionizr ne_4.scups ne_4_k2.dwns ne_4_k3.trecombr ne_4_k5.trecombr ne_4.splups ne_4_k2.sav ne_4_k3.ups ne_4_k5.ups ne_4.transp ne_4_k2.tioniz ne_4_k33.dwns ne_4_k7.dwns ne_4.trparam ne_4_k2.tionizr ne_4_k33.sav ne_4_k7.sav ne_4.wgfa ne_4_k2.trecombr ne_4_k33.tioniz ne_4_k7.tioniz ne_4_k1.80.tioniz ne_4_k2.ups ne_4_k33.trecombr ne_4_k7.tionizr ne_4_k1.80.trecombr ne_4_k25.dwns ne_4_k33.ups ne_4_k7.trecombr ne_4_k10.dwns ne_4_k25.sav ne_4_k4.dwns ne_4_k7.ups ne_4_k10.sav ne_4_k25.tioniz ne_4_k4.sav ne_4_mxw.tionizr ne_4_k10.tioniz ne_4_k25.tionizr ne_4_k4.tionizr ne_4_mxw.trecombr ne_4_k10.tionizr ne_4_k25.trecombr ne_4_k4.trecombr ne_4_k10.trecombr ne_4_k25.ups ne_4_k4.ups

The routines for calculating free-free or free-bound emission are essentially modified versions of the CHIANTI routines to make adjustments in the equations. The biggest limitation is that there are only discrete values of kappa accepted (2, 3, 4, 5, 7, 10, 15, 25, 33).

jwreep commented 1 year ago

The user guide explains what the new files are:

Screen Shot 2023-04-06 at 10 43 11 AM
wtbarnes commented 1 year ago

Ok, looking at those files above, I'm unsure (just off the top of my head) where the "downsilon" files come in to play. From my understanding those files do not exist in CHIANTI.

I can imagine the API for this kind of feature being an argument for kappa= with the default being zero (corresponding to a Maxwellian) and the possible values being those you've listed above. In that way, it would be easy to incorporate these changes by then just selecting the appropriate datasets based on that value of $\kappa$.

I say all this with the caveat that fiasco is still lagging behind the Maxwellian version of CHIANTI and my current priority is implementing the changes introduced in v9 and v10. However, I think this should be the next step on the roadmap after those changes. The ability to relax the assumption of thermal equilibrium with one keyword would be really powerful. It would be really useful to gather a list of changes that need to be made to fiasco in order to support this.