Reinitialize state variable
reinit(x, expr)
The operator reinitializes x
with expr at an event instant. x
is a Real variable
(or an array of Real variables) that must be selected as a state (resp., states), that is
reinit on x
implies stateSelect = StateSelect.always
on x
.
expr
needs to be type-compatible with x
. The reinit operator can for the same variable
(resp. array of variables) only be applied (either as an individual variable or as part
of an array of variables) in one equation (having reinit of the same variable in when and
else-when of the same variable is allowed).
The reinit operator can only be used in the body of a when-equation. It cannot be used
in an algorithm section.
The reinit operator does not break the single assignment rule, because reinit(x,expr) in equations evaluates expr to a value (value), then at the end of the current event iteration step it assigns this value to x (this copying from values to reinitialized state(s) is done after all other evaluations of the model and before copying x to pre(x)).
[If a higher index system is present, that is constraints between state variables, some state variables need to be redefined to non-state variables. During simulation, non-state variables should be chosen in such a way that variables with an applied reinit operator are selected as states at least when the corresponding when-clauses become active. If this is not possible, an error occurs, since otherwise the reinit operator would be applied on a non-state variable.]
// Bouncing ball parameter Real e=0.5 "Coefficient of restitution" Real h, v; Boolean flying; equation der(h) = v; der(v) = if flying then -g else 0; flying = not (h<=0 and v<=0); when h < 0 then reinit(v, -e*pre(v)); end when;