#1375: Slab does not fill in outmost layer of points in mesh refinement levels ------------------------------------+--------------------------------------- Reporter: rhaas | Owner: Type: defect | Status: new Priority: minor | Milestone: Component: EinsteinToolkit thorn | Version: development version Resolution: | Keywords: Slab ------------------------------------+---------------------------------------
Comment (by eschnett):
Setting useghosts=1 in Slab is dangerous, since Slab then will use (read) ghost zones. This means that one has to synchronize before calling Slab. In multiple dimensions, points can be e.g. both symmetry and ghost zones, so that one also has to apply all symmetry conditions before synchronizing, so that these ghost zones are correct. This is in general difficult to ensure; one has to write the schedule very carefully to ensure that symmetries are applied last.
In other words: Slab would use ghost points not only to fill in ghost points, but also to fill in non-ghost points. If the ghost points have not been set (via synchronisation), non-ghost points would remain undefined.
However, points that are both symmetry and AMR ghost points (as opposed to inter-processor ghost points), cannot be set via AMR interpolation since they are too close to the boundary. That means that the symmetry condition is the only way to set them. Hence the correct solution is here: (1) synchronize first, (2) apply symmetry condition with useghosts=1. In addition to setting useghosts=1, we would also need to ensure that synchronization occurs first. Ideas?
I do not understand your argument about "technically correct". Technically, with RK3 and 3 ghost zones, a refined region is surrounded by 9 buffer zones, which are in turn surrounded by 3 ghost zones. This is Carpet's terminology, although people often call all 12 points "buffer zones".