Photon transport discrepancies with MCNP and Serpent

Glad to hear you’re seeing good agreement. Regarding the source question, yes, if we had a general source filtering capability, that would make it easy as you could just ask it to filter on the cell you want the source to be in. In the absence of that, if you wanted to sample a source uniformly over a spherical shell (one of your concentric spheres), you’d have to either write a C++ custom source routine (described here) or use the new PowerLaw distribution as follows:

r = openmc.stats.PowerLaw(r_min, r_max, 1)
theta = openmc.stats.Uniform(0, pi)
phi = openmc.stats.Uniform(0, 2*pi)
spatial_dist = openmc.stats.SphericalIndependent(r, theta, phi)
source = openmc.Source(space=spatial_dist, ...)