Hello Miguel, all,
with this commit it seems to be working fine, yes! unless there is some other way of doing this, it would be great if this commit could be merged to master.
I think there is one more roadblock to consider: when you have 3 timelevels then Carpet will cycle the timelevels after each step, shuffling shift0 into shift0_p and shift0_p into shift0_pp and (at least making it look like it was) allocating fresh memory for shift0. If you have enabled poison_new_timelevels (off by default I think) then you'd see poison in the new timelevel. This will happen whenever you have 3 timelevels.
The solution would be to have only a single timelevel and do eg what CartGrid3D does and schedule your setting routine in BASEGRID, POSTREGRIDINITIAL and POSTREGRID:
schedule CartGrid3D_SetCoordinates as SpatialCoordinates at CCTK_BASEGRID { LANG:C WRITES: grid::coordinates(Everywhere) } "Set up spatial 3D Cartesian coordinates on the GH"
schedule CartGrid3D_SetCoordinates as SpatialCoordinates at CCTK_POSTREGRIDINITIAL { LANG: C WRITES: grid::coordinates(Everywhere) } "Set Coordinates after regridding"
schedule CartGrid3D_SetCoordinates as SpatialCoordinates at CCTK_POSTREGRID { LANG: C WRITES: grid::coordinates(Everywhere) } "Set Coordinates after regridding"
you can also *try* to see if removing the "prolongation_opertaor='none'" setting in you interface.ccl *and* also making sure to regrid only during coarse steps (so that interpolation in time is not needed).
Yours, Roland