Improved CE physics and data
From the 05/07/2025 document "MC/DC Plans Through the End of CEMeNT" :
The plan is to add more continuous energy physics (by referring to OpenMC) and prepare the ACE-based data library using ACETk. Initial validation results (ICSBEP and pulsed sphere experiment) suggests that fast neutron reaction physics implementations need to be prioritized. For work efficiency, using an LLM to convert OpenMC C++ functions into Python as an initial draft is considered.
Status update 5/20/25:
I created a branch for this work.
https://github.com/northroj/MCDC/tree/openmc_data_integration
I started adding the capability to read openmc's data format. Much of how the data is read/stored is specific to the codes, and can't be easily translated. I believe many of the more physics oriented functions will be more easily translated. I haven't included a bunch of translated functions yet since I haven't gotten far enough to use them.
Current progress:
- dependency added import xml.etree.ElementTree as ET (not yet actually added in pyproject.toml). This is needed for reading the cross_sections.xml file that openmc uses
- Functions added in a new file called nuclear_data.py. Currently some XML and h5 interface functions. I am planning on adding physics specific stuff here as well.
- Added an ability to specify a material temperature. Currently, I just pick the nuclear data corresponding to whichever temperature level is closest to the specified temperature.
- Added an ability to define a material density in g/cc with nuclide densities specified in atom or weight fraction (converted to atoms/b-cm in the backend). This is more standard in MC codes than defining atoms/b-cm for each nuclide.
- OpenMC data does not have atomic weight ratios, so an approximation has been used for now (i.e. U235 is just set to 235 instead of its actual A). I will have to look into how they access that data.
- Only capture and elastic scattering implemented currently, and no physics changed yet (other than fission being missing and the scattering cross sections not including summed inelastic).
- Capture is the sum of various reactions (with different products like gammas or ions) and will need to be separated out if we do photon or ion transport later.
- Current implementation shouldn't conflict with our multigroup definitions (needs testing), but it does wipe out the old CE implementation.
Next steps:
- Implement fission. A bunch of the fission parameters, (chi, nu, etc.) are stored and used differently in OpenMC, and I have to figure out how to interpret that.
- Implement total xs. This should be easy, I just need to figure out what does/does not go into it.
- Implement the inelastic scattering collisions.
- I have been trying to keep aware of when other particle types would interface with this work and code to make future particle implementation easier, but this implementation doesn't support anything else besides neutrons currently.