From 8228db6d47d22367eaafbad7ba32e417341c320f Mon Sep 17 00:00:00 2001 From: Patrick Shriwise Date: Sat, 17 Sep 2022 12:05:48 -0500 Subject: [PATCH] Writing interpolation attribute as an attribute of the 'y' dataset. --- docs/source/io_formats/statepoint.rst | 5 +++-- openmc/filter.py | 7 ++++--- src/tallies/filter_energyfunc.cpp | 5 +++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/source/io_formats/statepoint.rst b/docs/source/io_formats/statepoint.rst index 09a531ecd..a05034a2d 100644 --- a/docs/source/io_formats/statepoint.rst +++ b/docs/source/io_formats/statepoint.rst @@ -108,8 +108,9 @@ The current version of the statepoint file format is 17.0. interpolation. Only used for 'energyfunction' filters. - **y** (*double[]*) -- Interpolant values for energyfunction interpolation. Only used for 'energyfunction' filters. - - **interpolation** (*int*) -- Interpolation type. Only used for - 'energyfunction' filters. + + :Attributes: - **interpolation** (*int*) -- Interpolation type. Only used for + 'energyfunction' filters. **/tallies/derivatives/derivative /** diff --git a/openmc/filter.py b/openmc/filter.py index 35a65f4fe..1928f5ddb 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -1967,13 +1967,14 @@ class EnergyFunctionFilter(Filter): + group['type'][()].decode() + " instead") energy = group['energy'][()] - y = group['y'][()] + y_grp = group['y'] + y = y_grp[()] filter_id = int(group.name.split('/')[-1].lstrip('filter ')) out = cls(energy, y, filter_id=filter_id) - if 'interpolation' in group: + if 'interpolation' in y_grp.attrs: out.interpolation = \ - cls.INTERPOLATION_SCHEMES[group['interpolation'][()]] + cls.INTERPOLATION_SCHEMES[y_grp.attrs['interpolation'][()]] return out diff --git a/src/tallies/filter_energyfunc.cpp b/src/tallies/filter_energyfunc.cpp index e5a6bc9b7..b961105a2 100644 --- a/src/tallies/filter_energyfunc.cpp +++ b/src/tallies/filter_energyfunc.cpp @@ -104,8 +104,9 @@ void EnergyFunctionFilter::to_statepoint(hid_t filter_group) const Filter::to_statepoint(filter_group); write_dataset(filter_group, "energy", energy_); write_dataset(filter_group, "y", y_); - write_dataset( - filter_group, "interpolation", static_cast(interpolation_)); + hid_t y_dataset = open_dataset(filter_group, "y"); + write_attribute(y_dataset, "interpolation", static_cast(interpolation_)); + close_dataset(y_dataset); } std::string EnergyFunctionFilter::text_label(int bin) const