MuSurfaceFilter usage

Hi all,

I’m testing MuSurfaceFilter in OpenMC 0.15.3:

tally.filters = [
    openmc.SurfaceFilter([cz_2]),
    openmc.MuSurfaceFilter([-1.0, 0.0, 1.0]),
]
tally.scores = ["current"]

with

cz_2 = openmc.ZCylinder(r=130.0, name="reflector boundary")

To investigate, I also changed the outer boundary to reflective:

cz_3 = openmc.ZCylinder(
    r=132.0,
    name="core barrel boundary",
    boundary_type="reflective",
)

With reflective boundary:

surface  musurface low  musurface high nuclide    score     mean  std. dev.
0        2      -1.00e+00        0.00e+00   total  current 0.00e+00   0.00e+00
1        2       0.00e+00        1.00e+00   total  current 4.79e-02   1.64e-04
surface  musurface low  musurface high
2        -1.0           0.0               0.000000
         0.0            1.0               0.047905
Name: mean, dtype: float64

Without reflective boundary (vacuum):

surface  musurface low  musurface high nuclide    score     mean  std. dev.
0        2      -1.00e+00        0.00e+00   total  current 0.00e+00   0.00e+00
1        2       0.00e+00        1.00e+00   total  current 4.92e-02   1.59e-04
surface  musurface low  musurface high
2        -1.0           0.0               0.0000
         0.0            1.0               0.0492
Name: mean, dtype: float64

In both cases, the [-1, 0] μ-bin is exactly zero, while all current appears in the [0, 1] bin. The results are also very similar between reflective and vacuum boundary conditions.

My understanding was that MuSurfaceFilter([-1, 0, 1]) should separate surface crossings according to the sign of the cosine between the particle direction and the local surface normal. With a reflective outer boundary, I expected at least some population of both μ bins at the internal surface cz_2.

Am I misunderstanding how MuSurfaceFilter works with the current score, or would one normally expect both μ bins to be populated for an internal surface?

OpenMC version

OpenMC 0.15.3
Commit hash: 27e38e894697bb32a1dac7848d2618818b6b8daf