openmc
openmc copied to clipboard
Tally in non vacuum cells only
We have a use case for a large mesh tally, where we only want to record results in cells that have material in them, in this particular case its a mesh with 1500x1500x600 elements, and then filtering by the 5000 material cells, we run out of memory, ideally we'd have a little syntax that could say all cells except these? Or all materials, except vaccum?
<bins>all #3 #4 #505</bins>
</filter>
or
<bins>all #void</bins>
</filter>
Some like above Maybe?
FYI, 1500x1500x600x5000 is 2 Tb of memory :) We get a fail from that, but not from a memory error, its not an int_t_32 or something somehere is it? have meshes this big been tried? We're getting std::bad_alloc, makeing a debug build now
sorry 300x300x300x5000
In this instance, is we dont really want the flux binned by those cells, we want the flux to be only counted in those cells, dont need a breakdown if that makes any sense?
Interesting idea, but our mesh filters are really not designed to handle something like this. The mesh filter bins just reference an existing mesh object, so there is no way to specify anything about a subset of the mesh bins. The best thing I could suggest is to roll your own filter type that meets the requirements you need.
Would a collision estimator be an option? Possibly a lower FOM, but it would guarantee that tallies only occur in non-void regions.
@pshriwise I think the problem is memory, not performance. Changing the estimator won't fundamentally change the memory required.
Agreed, but isn't the memory bottleneck caused by the number of material filter bins required to differentiate between tally scores in void and non-void regions inside the mesh? Maybe I'm misunderstanding @makeclean's need here.
I thought by using a collision estimator one could remove the material filter that has 5000 bins, reducing the tally's memory requirement, but still know that tally scores are only occurring in regions filled by a material.
Yeah a collision estimator would be fine, since then as you say scores should only occurs when there is a collision and only in non-vacuum cells. I could also bin by material, that reduces the problem by an order of magnitude, but fundamentally, the score i want is to record the flux in a given mesh region, but only score in the non vacuum parts - I think the collision esimateor would work for this but I think a another filer bin, of non-vaccuum would be quite useful too.
Again, I don't see a way to do this in our current setup. The memory for a mesh filter is the same regardless of the estimator being used and is allocated before transport happens. We also don't have any examples of filters that are dynamically sized at runtime based on bins being scored to. If you can figure out a priori which mesh bins aren't going to be used (so that the size is static), maybe you could have some kind of custom filter that does that, but with the existing mesh filter I don't think it'd be possible.