I’m trying to replicate a neutron activation detector by simulating a cylinder of pure Indium next to a source of 2.45 MeV neutrons. All the papers say that this should produce some In115m, which will then emit a gamma of 336 keV. The reaction should be In115 to In115m via (n, n’) with a threshold neutron energy of 0.38 MeV.
However, when I simulate this, I make no In115m from my In115. I am using the ENDF VIII chain file, and I can’t find anywhere in it the reaction to go from In115 to In115m. My chain file contains the isotope In115m with the correct gamma decay, I am just not producing any In115m. I have tried plotting the source spectrum using the openmc_source_plotter, and there are no gammas from In115m. I have listed the most active nuclides after irradiation and In115m is not significantly active. Is my chain file missing the reaction that takes In115 to In115m? Is there another chain file I can use or can I modify this one?
Below is a minimal working example which takes a cylinder of Indium next to a neutron source and then saves a csv showing the most active nuclides present in the irradiated material. In115m should be produced from the In115 in the material at the start, but it is not (in any great quantity).
Many thanks in advance for your help!
import openmc
import math
import pandas as pd
# Material
In_material = openmc.Material(material_id=1)
In_material.add_element("In", percent=1)
In_material.set_density(units="g/cc", density=7.31)
In_material.name = "pure_indium"
In_material.depletable = True
In_material.volume = (math.pi * 25 / 4)
my_materials = openmc.Materials([In_material])
# Geometry
outer_sim = openmc.Sphere(r=30, boundary_type="vacuum")
front_detector = openmc.ZPlane(z0=20)
back_detector = openmc.ZPlane(z0=21)
surface_detector = openmc.ZCylinder(r=2.5)
detector_region = -surface_detector & +front_detector & -back_detector
rest_of_sim_region = -outer_sim & ~detector_region
detector_cell = openmc.Cell(region = detector_region, fill=In_material)
outside_detector_cell = openmc.Cell(region = rest_of_sim_region)
my_geometry = openmc.Geometry([detector_cell, outside_detector_cell])
# Source
my_source = openmc.IndependentSource()
my_source.space = openmc.stats.Point((0, 0, 0))
my_source.angle = openmc.stats.Isotropic()
my_source.energy = openmc.stats.Discrete([2.45e6], [1])
settings = openmc.Settings(
particles=100000,
batches=100,
run_mode="fixed source",
output={'tallies': False},
source=my_source
)
model = openmc.Model(my_geometry, my_materials, settings)
# Settings
model.settings.run_mode = 'fixed source'
model.settings.volume_calculations = []
model.settings.particles = 1_000_000
model.settings.batches = 100
# Depletion timesteps
timesteps_and_source_rates = [
(1, 1e9),
(5, 0), # 5 s
(55, 0), # 60 s
]
timesteps = [item[0] for item in timesteps_and_source_rates]
source_rates = [item[1] for item in timesteps_and_source_rates]
# Run depletion
model.deplete(
timesteps,
source_rates=source_rates,
method="predictor",
operator_kwargs={
"normalization_mode": "source-rate",
"reduce_chain_level": 5,
"reduce_chain": True,
},
)
# Save a csv of active nuclides in the Indium for each timestep
results = openmc.deplete.ResultsList.from_hdf5("depletion_results.h5")
for step_id in range(4):
step = results[step_id]
material = step.get_material("1")
nuclides = material.get_activity(by_nuclide=True, units='Bq/cm3')
nuclide_df = pd.DataFrame(nuclides.items(), columns=['nuclide', 'activity_bq_per_cc'])
nuclide_df = nuclide_df.sort_values('activity_bq_per_cc', ascending=False)
nuclide_df.to_csv(f'Indium_nuclide_data_step_{step_id}.csv')