# How to use WhenEvent with a vector ODE in NDSolve

I have an ODE system I'd like to specify as a vector equation in NDSolve. I'm not clear on how to use WhenEvent for a system specified in this way. Ultimately I'd like WhenEvent to change the value of one of the state variables in the vector equation when it reaches a threshold.

For example, the following code doesn't work because WhenEvent[y[t]==0, ...] is applying a conditional test to a list of values. Replacing this with y[t][[1]]==0 also doesn't work.

sol = NDSolve[{y'[t] == {{.1, -.2}, {-.1, .2}}.y[t], y[0] == {1, 1},
WhenEvent[y[t] == 0, y[t] -> 1]}, y, {t, 0, 10}]


Ideas anyone?

-
s = NDSolve[{y'[t] == {{.1, -.2}, {-.1, .2}}.y[t], y[0] == {1, 1},
WhenEvent[Norm[y[t] - {0.9460552574072016, 1.053944742592798}] <= .01, y[t] -> {1, 1}]}

@dvasseur y[t][[1]] works OK. Your error was using == instead of <= –  belisarius Oct 31 '13 at 19:04