#971: global-early, loop-local routines in PostRegrid cause access to elements outside of a vector capacity ---------------------+------------------------------------------------------ Reporter: rhaas | Owner: eschnett Type: defect | Status: new Priority: major | Milestone: Component: Carpet | Version: Resolution: | Keywords: ---------------------+------------------------------------------------------
Comment (by rhaas):
Ok. That is about what I had feared (namely that one cannot to all recompose steps first and only then do a postregrid). For PostRegridInitial (the one in Meta mode, not the one during initial data) this works since there is no data that needs to be preserved since regridding happens before CCTK_INITIAL, yes?
For the present problem the routines that need to be changed are:
* SphericalSurface::SphericalSurface_Set from global to global-early (runs in PostStep and Initial) * SetMask_SphericalSurface::SetMask_SphericalSurface from global, loop- local to just local * HydrBase::HydroBase_InitExcisionMask from global-early,loop-local to just local
The reasoning is that SphericalSurface::SphericalSurface_Set has to run before local routines that schedule themselves after SphericalSurface_HasBeenSet and that global is during CCTK_POSTSTEP (and global-early during EVOL and INITIAL). Anything else that sets spherical surface should then also be converted from global to global-early if it runs in CCTK_POSTSTEP. Anything that runs in HydroBase_InitExcisionMask must be local or global-late if it accesses the grid patches. This will change the order in which routines are called.
I'll try to come up with a way to alert the user at runtime if they try to schedule a global-early, loop-local routine in PostRegrid. Global-early in itself is still ok in PostRegrid, as long as the routine only accesses say grid arrays and grid scalars, yes?