Skip to content

TransientPropagation: Treat Boundary Crossing for 1x1 Induction Matrix

Simon Spannagel requested to merge transient_doublecounting into master

This is a fix for an issue discovered and nicely documented by @ldecilla and @cferrero in this forum thread. In summary, they observe a difference when using a 1x1 weighting potential and electric field with a 1x1 or 3x3 induction matrix:

3x3 induction matrix

image

1x1 induction matrix

image

Here, clearly the edge and corner cases see too much charge compared to the center incidence of the particle.

The reason for this is intricate but not complicated to solve. In case of a one-by-one induction matrix, we always only look at the pixel, the charge carrier is in after the last step from the motion has been calculated. This is a good approximation to induction as long as we don't have strong contributions from the weighting potential in neighboring pixel cells. If we only have a 1x1 weighting potential map, we would not expect any difference to the 3x3 induction matrix.

However, the key here is that we look at the position only after the step. The issue now arises once charge carriers cross pixel boundaries. If we have a carrier moving in pixel (1,1) and inducing current there, but have it then crossing over to (2, 1) this step is miscalculated. With a 1x1 induction matrix, we would now only calculate the current induced in the new pixel (2,1) but not the same amount being subtracted in pixel (1,1) where the charge carrier moved out of.

With a larger induction matrix like 3x3, this problem does not appear because we always calculate the induced current also relative to the surrounding pixels and properly take this into account - only in the special case of 1x1 this is unaccounted for, leading to an overall "double counting" of induced current, and hence the unexpected overshoots seen above.

This fix implemented in this merge request is rather straight forward:

  • we also calculate the pixel index at the position before the current step.
  • if the indices differ, we know that we have crossed a pixel boundary
  • we now extend the induction matrix temporarily to also include the "last pixel" and hence correct for the negative current induced there.

🎉

Merge request reports