Fix tally mesh bug for very short tracks

This commit is contained in:
Sterling Harper 2019-10-28 11:15:53 -04:00
parent 684bc7ef1b
commit 521964149f

View file

@ -523,6 +523,14 @@ void RegularMesh::bins_crossed(const Particle* p, std::vector<int>& bins,
}
r1 = r;
// The TINY_BIT offsets above mean that the preceding logic cannot always find
// the correct ijk0 and ijk1 indices. For tracks shorter than 2*TINY_BIT, just
// assume the track lies in only one mesh bin. These tracks are very short so
// any error caused by this assumption will be small.
if (total_distance < 2*TINY_BIT) {
for (int i = 0; i < n; ++i) ijk0[i] = ijk1[i];
}
// ========================================================================
// Find which mesh cells are traversed and the length of each traversal.
@ -898,6 +906,14 @@ void RectilinearMesh::bins_crossed(const Particle* p, std::vector<int>& bins,
}
r1 = r;
// The TINY_BIT offsets above mean that the preceding logic cannot always find
// the correct ijk0 and ijk1 indices. For tracks shorter than 2*TINY_BIT, just
// assume the track lies in only one mesh bin. These tracks are very short so
// any error caused by this assumption will be small.
if (total_distance < 2*TINY_BIT) {
for (int i = 0; i < 3; ++i) ijk0[i] = ijk1[i];
}
// ========================================================================
// Find which mesh cells are traversed and the length of each traversal.