Could anyone suggest a good way to calculate the fission matrix from an OpenMC run? I’m sure it can be done I just don’t know what would be the best way to approach it. Computational speed is not really an issue and it could also be based on post processing of data. I would appreciate any tips.
You can easily compute the fission matrix for any arbitrary energy group structure in OpenMC. In summary, you need a tally with “energy” and “energyout” filters for your desired group structure. Since the tally must contain an “energyout” filter, it must use an “analog” tally estimator. The following is an example of the code you would need to specify a tally for a 2-group global fission matrix in the “tallies.xml” input file for OpenMC:
This may alternatively be generated using our Python API as follows:
tally = openmc.Tally()
tally.estimator = ‘analog’
tally.add_filter(openmc.Filter(type=‘energy’, bins=[0., 1.e-6, 20.]))
tally.add_filter(openmc.Filter(type=‘energyout’, bins=[0., 1.e-6, 20.]))
tallies_file = openmc.TalliesFile()
This tally will result in a 2x2 matrix of output which you will need to appropriately normalize. If instead of a matrix all you need is the vector form of the “chi” fission spectrum, then you might consider using the built-in “Chi” class in the “openmc.mgxs” Python module.
If you are referring to a spatial fission matrix, that can also be done based on cells (unfortunately can’t be done on meshes right now). You would need to specify ‘cellborn’ and ‘cell’ filters, e.g.:
Again, that can be done in a similar fashion in the Python API as to what Will showed before.
I’m not aware of many people using ‘cellborn’ filters, so if you do try it out, let us know how it turns out and of course please don’t hesitate to write if you run into any problems.
Thanks for the replies. I should’ve clarified, I do mean a spatial fission matrix in the sense as described in this, for example:
So that means I would like to tally how many neutrons were born in the i-th cell caused by neutrons born in the j-th cell. And it would be nice to do it over a mesh. I can see how to tally the nu-fissions in a mesh but not how I could track how a given neutron in a given cell caused a fission in another (or the same) cell. Is it something I could extract from the statepoint files instead?
Kaur- right now it’s not possible to determine scores filtered by what mesh cell the source particle was born in. If that’s a feature you’re interested in, feel free to create an issue on the OpenMC github page.
If you don’t mind me asking, what is your intended use of the fission matrix? If you are interested in determining higher harmonic eigenmodes, that can probably be done via CMFD which is in OpenMC.
Yes, I am interested in the higher modes. I have looked at results I can get from CMFD and another method but I would also like to compare them to results from the fission matrix. I would like to get the results from the fission matrix as a sort of a reference. So you would say it’s not possible at the moment?
That’s correct; at the moment it is not possible. I’m trying to think of creative ways to do it, but none of them seem reasonable, e.g.
- Run a series of fixed source calculations each having a source only in one mesh cell. Problem is that for a k-eigenvalue calculation (i.e., a system with k >=1), running in fixed source mode will cause the particle population to blow up.
- Generate particle track files and post-process to determine the fission matrix. This would be super cumbersome and error-prone.
- Hack the OpenMC source to show the mesh cell that a particle originated from when it scores to a tally bin. Probably not the answer you were looking for.
Hi OpenMC development team,
Is there a current capability for doing mesh-based spatial fission matrix with OpenMC? As a follow-up, what will be an alternative method for determining higher eigenmodes and eigenvalues?