When running an operator with an injection at the beginning, the time loop is split in two.
from devito import *
grid = Grid(shape=(10, 10))
time = grid.time_dim
nt = 200
factor = 5
time_under = ConditionalDimension(name='timeu', parent=time, factor=factor)
rec = SparseTimeFunction(name='rec', grid=grid, npoint=1, nt=nt)
u = TimeFunction(name='u', grid=grid, space_order=2)
v = TimeFunction(name='v', grid=grid, space_order=2)
g = Function(name='g', grid=grid, space_order=2)
usaved = TimeFunction(name='usaved', grid=grid, space_order=2, time_dim=time_under, save=nt//factor+1)
eq = [Eq(u.forward, u + 1), Eq(usaved, u.forward)] + rec.interpolate(u)
op = Operator(eq)
op(time_m=1, time_M=nt-1)
t = rec.time_dim
eq = rec.inject(field=v, expr=rec) + [Eq(v.backward, v + 1), Inc(g, v.backward * usaved)]
op = Operator(eq)
op(time_m=1, time_M=nt-1)
where the second operator ends up with two time loops instead of one.