When I use the following system
model = {x'[t] == x[t] (1 - x[t]) - x[t] y[t], y'[t] == x[t] y[t] - y[t], x[0] == 0.5, y[0] == 0.5}
with the WhenEvent
perturb = WhenEvent[Mod[t, 1],
{x[t] -> x[t], y[t] -> y[t]}
];
chosen to be trivial, I have what seems to be strange behavior to me, namely if I do the following integration
NDSolve[{model, perturb}, {x, y}, {t, 0, 10000}]
I get an error that the integration reached maximum steps at t==8670., even though nothing is changing. If I increase the MaxSteps I can get it to integrate. So my question is if this is expected? The longer you integrate a system when using a WhenEvent the larger the MaxSteps you will need? I can replicate this same behavior when I use initial conditions that are on a stable equilibrium value ... so truly nothing is changing.

MaxStepsfor longer output ... as I using up my "bank" near each event. I was thinking more like this was analogous to a Fortran solver that does integration a "step" at a time ... not considering the how the adaptive step size was working. Thanks! – Gabriel Dec 12 '12 at 03:39FindRootto figure out exactly when the event occurs. That's quite costly. – Mark McClure Dec 12 '12 at 19:03Mod[t,1]etc) this is slightly counter intuitive until you understand your answer. In these cases the events are easy to detect ... but the way the solver is allocating effort is subtle since it is I imagine trying to ensure that possible local discontinuities are being handled correctly. – Gabriel Dec 12 '12 at 19:06Mod[t,1]might work better. I think the detection techniques are purely numerical, though, so while it's clear to us where they happen, they still generate a lot of extra work for the algorithm. – Mark McClure Dec 12 '12 at 19:11WhenEventso much ... it could make me have to do a back flip each time I use it and it would still keep me coming back! – Gabriel Dec 12 '12 at 19:34