forked from 1b-agent/fieldcraft-upstream
run() drives a Backend in chunks of steps (to the next frame, history sample or progress check) instead of the CPU Flow directly, so a device backend registered by an application can step the same prepared flow: Flow keeps building the grid, links and open cells and exposes them read-only, and implements the trait itself. solve_fluid_on picks the CPU or the registered device backend; solve_fluid stays the CPU and is unchanged in its results. Part of #529.