modelica: calcular mínimo / máximo de variable continua en el tiempo

Como se indicó anteriormente: Deseo calcular el mínimo (y / o máximo) de una variable continua a lo largo del tiempo. Aquí hay un ejemplo mínimo para demostrar:

model MinMaxTest
  Real u;
  Real u_min(start = 10);
  Real u_max(start = -10);
equation
  u = sin(time / 180 * Modelica.Constants.pi);
  u_min = min(u, u_min);
  u_max = max(u, u_max);
  annotation(experiment(StartTime = 0, StopTime = 360, Tolerance = 1e-06, Interval = 1));
end MinMaxTest;

u es la variable continua arbitraria (para fines de demostración, una onda sinusal simple).u_min/u_max es el mínimo / máximo en el tiempo.

Obviamente el resultado esperado esu_min=-1 yu_max=1. Lamentablemente, la simulación se bloquea con una "Matriz singular". error. ¿Alguien puede indicarme cómo evitar eso?

EDITAR 1

Estoy usando OpenModelica 1.15 (era 1.9.2)

EDITAR 2

Como soy bastante nuevo en Modelica, me cuesta entender las diferencias entre los siguientes enfoques:

u_min = if noEvent(u < u_min) then u else pre(u_min);if noEvent(u < u_min) then u_min = u; else u_min = pre(u_min); end if;u_min = if noEvent(u < u_min) then u else u_min;u_min = if u < u_min then u else pre(u_min);u_min = if u < u_min then u else u_min;when u < u_min then u_min = u; end when;u_min + T*der(u_min) = if u <= u_min then u else u_min;

1 y 2 son equivalentes y dan como resultado el comportamiento esperado.

3 produce el resultado deseado pero da una "Notificación de traducción" sobre un "ciclo algebraico", ¿por qué?

4 falla hasta ahora, que el resultadou_min&nbsp;la curva es idéntica au?! ¿por qué?

5 combina 3 y 4.

6 no se compila conSorry - Support for Discrete Equation Systems is not yet implemented

7 No tengo claro cuál es la idea detrás de esto, pero funciona siT&nbsp;Es del tamaño sugerido.

Si entiendo la documentación de Modelica correctamente, 1-5 tienen en común que exactamente una ecuación está activa en todo momento.noEvent&nbsp;suprime la generación de eventos en el cruce por cero especificado. Tenía la impresión de que esto es principalmente una mejora de la eficiencia. ¿Por qué dejarlo afuera hace que 4 falle?pre&nbsp;se refiere al valor anterior de la variable, así que supongo que tiene sentido si queremos mantener una variable constante, pero ¿por qué 7 funciona sin ella? Mi comprensión dewhen&nbsp;era que su ecuación solo está activa en ese evento preciso, y de lo contrariomantiene el valor anterior, por eso intenté usarlo en 6. Parece que funciona si comparo con valores constantes (que no sirve para este problema en particular).

EDITAR3u_min = smooth(0, if u < u_min then u else pre(u_min));

Curiosamente, esto también funciona.