Decay calculations

Hello.

I am testing the depletion capabilities of version 0.12, and I am wondering if it possible to perform decay-only steps between criticality calculations. With “decay only” I mean that only natural decay of the isotopes happens, and no fission or transmutation of any other kind take place, so this should be independent of the flux or power.

Thanks in advance.

Hi @emilio.castro and welcome to the community! Decay only timesteps are indeed possible by specifying a power value of 0 when you are creating an instance of one of the Integrator classes. For example:

op = openmc.deplete.Operator(...)
timesteps = [10.0, 5.0, 10.0]
power = [100.0e6, 0.0, 100.0e6]
x = openmc.deplete.CECMIntegrator(op, timesteps, power, timestep_units='d')

In this hypothetical example, the model is being depleted for 10 days at 100 MW, then a decay-only timestep of 5 days, followed by another 10 day step at 100 MW. One major caveat is that in version 0.12, performing a decay-only timestep still results in a transport calculation (even though we know the reaction rates will be all zero). This has been fixed in the developmental version of OpenMC so that no transport solve takes place when the power is zero and will be part of the next release.

1 Like

Thank you very much for your quick response. It works well!

Only one simple question/comment:

There are some isotopes which have decay information in file chain_endfb71_pwr.xml but do not have cross sections information in the nuclear data files (at least in ENDF/B-VII.1 official data libraries). Those isotopes have very low amounts or importance on the fuel behavior so not having cross sections shouldn’t be a problem.

For example Y93 suffers a beta- decay to Zr93. This information is available in the decay file but Y93 has no cross sections. I have chosen Y93 for nothing in particular, just to illustrate.

If I use a spent fuel containing one of these materials, and I simulate decay steps, when I run openmc it complains that the material does not exist (as it cannot load the cross sections), so I think I cannot consider their evolution along decay at least with version 0.12. Am I correct?

In any case, I can omit those materials. It is just a question that arised.

Yes, right now it is not possible to include nuclides in a material that don’t have corresponding neutron cross sections. If you were to start from fresh fuel, OpenMC would produce all of these nuclides without neutron cross sections (including Y93) and keep track of them during the depletion calculation, but it doesn’t include them when doing a transport solve. If this is something you think would be useful (ability to specify initial nuclides in a material that have no cross sections), feel free to create an issue here: Issues · openmc-dev/openmc · GitHub

Hello, I have been trying to get flux maps from neutrons and photons(n,gamma) after shutdown. It works fine for any time step with the source. However, when I set power to zero, my tally is all zeros for both neutrons and photos. Can anyone spot anything wrong with this script example that could be leading to zero tally values?

chain_filename = 'chain_endfb71_sfr.xml'

operator = openmc.deplete.CoupledOperator(
    model=model,
    chain_file=chain_filename,
    normalization_mode="source-rate", 
    dilute_initial=0,  
    reduce_chain=True,  
    reduce_chain_level=5,
)
timesteps_and_source_rates = [
    (55, 1.834368e20),
    (1, 0),
    (7, 0),
]


timesteps = [item[0] for item in timesteps_and_source_rates]
source_rates = [item[1] for item in timesteps_and_source_rates]

integrator = openmc.deplete.CF4Integrator(
    operator=operator,
    timesteps=timesteps,
    source_rates=source_rates,
    timestep_units='d'
)
integrator.integrate()

results = openmc.deplete.Results.from_hdf5("depletion_results.h5")
for counter in [0,1,2]:
    sp = openmc.StatePoint(f'openmc_simulation_n{counter}.h5')
    flux_mesh_tally  = sp.get_tally(name='flux_on_mesh')
    mesh.write_data_to_vtk(
        datasets={'flux_mean': 1.834368e20*flux_mesh_tally.mean},
        filename=f"total{counter}.vtk",
    )

@fnovais OpenMC doesn’t currently simulate the “intrinsic” source of photons or other particles from decay, so you’d have to setup a separate calculation where the source is defined based on the decay source produced from the depleted material compositions (essentially an R2S calculation). Our development team is actively working on making this possible with an intuitive workflow, but right now you’d have to handle most of the steps yourself.

In summary, right now when you specify a 0 source rate for a time step, OpenMC will not run a transport calculation because it knows that if you don’t have a source, then you don’t have any reaction rates (i.e., why waste time calculating 0). It does not account for the intrinsic decay source in the material.

1 Like

@paulromano Thank you for your reply. I have been watching all the progress as well as the new decay_photon_energy function. Just to be clear, for the non-zero source rates, will OpenMC still simulate particles from decay?

At present, OpenMC will not automatically simulate particles emitted from decay. The source that is used at each step in a fixed-source depletion calculation is simply whatever the user-defined source is. If you want to transport decay particles, you’ll need to define a Source object accordingly.

I see. I am producing a gamma flux map immediately after shutdown (2.75 years of irradiation time). In order to produce the correct map immediately after shutdown, my understanding is that I will need to combine the results from a transport calculation with results from a separate calculation using a source generated from the photon_decay_energy function.

That’s correct — if you want to assess the photon flux from the resulting decay source, you would have to feed the information from decay_photon_energy to a new Source object and run a photon transport calculation.

Just posting a minimal R2S example here in case it is handy for anyone else. Requires a Ethan’s R2S branch

2 Likes