-
Notifications
You must be signed in to change notification settings - Fork 590
Open
Labels
Description
Bug Description
Reading in the h5 nuclear data with openmc appears to result in default interpolation and breakpoint values such as [2]
Steps to Reproduce
change the dir in this script and run the script it should print out different interpolation and breakpoint values when the file is read with the openmc python api and h5py directly.
import openmc.data
import h5py
# Load a sample HDF5 file and product
filename = "/home/jon/nuclear_data/tendl-2021-hdf5/tendl-2021-hdf5/Cr52.h5"
lib = openmc.data.IncidentNeutron.from_hdf5(filename)
# Pick a product with tabulated distributions
for rx in lib.reactions.values():
for prod in rx.products:
# Look for Tabulated1D in applicability or yield
for app in getattr(prod, "applicability", []):
if hasattr(app, "breakpoints") and hasattr(app, "interpolation"):
print("App breakpoints:", app.breakpoints)
print("App interpolation:", app.interpolation)
y = getattr(prod, "yield_", None)
if hasattr(y, "breakpoints") and hasattr(y, "interpolation"):
print("Yield breakpoints:", y.breakpoints)
print("Yield interpolation:", y.interpolation)
# Look for Tabulated1D in distributions
for dist in getattr(prod, "distribution", []):
if hasattr(dist, "breakpoints") and hasattr(dist, "interpolation"):
print("Dist breakpoints:", dist.breakpoints)
print("Dist interpolation:", dist.interpolation)
# Now print the same info using h5py
print("\n--- h5py direct read ---")
with h5py.File(filename, "r") as f:
cr52 = f["Cr52"]
reactions = cr52["reactions"]
for rx_name in reactions:
rx_group = reactions[rx_name]
for prod_name in rx_group:
if not prod_name.startswith("product_"):
continue
prod_group = rx_group[prod_name]
# Yield
if "yield" in prod_group:
y_ds = prod_group["yield"]
print(f"{rx_name} {prod_name} yield breakpoints:", y_ds.attrs.get("breakpoints", None))
print(f"{rx_name} {prod_name} yield interpolation:", y_ds.attrs.get("interpolation", None))
# Distribution(s)
for dist_key in prod_group:
if dist_key.startswith("distribution_"):
dist_group = prod_group[dist_key]
# Applicability
if "applicability" in dist_group:
app_ds = dist_group["applicability"]
print(f"{rx_name} {prod_name} {dist_key} applicability breakpoints:", app_ds.attrs.get("breakpoints", None))
print(f"{rx_name} {prod_name} {dist_key} applicability interpolation:", app_ds.attrs.get("interpolation", None))
# Angle/mu distribution
if "angle" in dist_group and "mu" in dist_group["angle"]:
mu_ds = dist_group["angle"]["mu"]
print(f"{rx_name} {prod_name} {dist_key} angle/mu interpolation:", mu_ds.attrs.get("interpolation", None))Environment
ubuntu , python 3.13, openmc develop branch