Fix MaterialFilter C-API indexing error

This commit is contained in:
Sterling Harper 2018-10-14 14:21:37 -04:00
parent ea0a91b0e6
commit 77cef923b5
2 changed files with 6 additions and 2 deletions

View file

@ -238,13 +238,15 @@ class MaterialFilter(Filter):
materials = POINTER(c_int32)()
n = c_int32()
_dll.openmc_material_filter_get_bins(self._index, materials, n)
return [Material(index=materials[i]) for i in range(n.value)]
#TODO: fix this off-by-one when materials become 0-indexed
return [Material(index=materials[i]+1) for i in range(n.value)]
@bins.setter
def bins(self, materials):
# Get material indices as int32_t[]
n = len(materials)
bins = (c_int32*n)(*(m._index for m in materials))
#TODO: fix this off-by-one when materials become 0-indexed
bins = (c_int32*n)(*(m._index-1 for m in materials))
_dll.openmc_material_filter_set_bins(self._index, n, bins)

View file

@ -168,6 +168,8 @@ def test_tally(capi_init):
openmc.capi.MaterialFilter(uid=1)
mats = openmc.capi.materials
f = openmc.capi.MaterialFilter([mats[2], mats[1]])
assert f.bins[0] == mats[2]
assert f.bins[1] == mats[1]
t.filters = [f]
assert t.filters == [f]