OpenModelica と Dymola のイベント処理について質問があります。次のモデルは、入力信号を特定のしきい値に制限します。これは、log() の負の引数を避けるために必要です。そのため、イベントが作成され、イベントが true になると、引数 'l' の変数が変更されます。
私が理解している限り、DASSL ソルバーはイベントを認識し、そのステップ サイズを自動的に調整して、イベントを正しく解決する必要があります。指定された間隔の数は、出力に保存されるポイントの数を定義するためにのみ使用されます。
モデル 'CompleteModel' を Dymola で DASSL を使用して 10 秒間、100 間隔で解くと問題なく動作し、変数 'l' は 0.05 に制限されます。10 間隔のみでモデルを解くと失敗します。奇妙なことに、OpenModelica の DASSL は、与えられた間隔の数に関係なく、モデルを正しく解決します。
この動作は期待できますか? Dymola と OpenModelica の DASSL ソルバーに大きな違いはありますか? 私の意見では、DASSL を使用したモデルの正しいソリューションは、(保存された) 間隔の数とは無関係である必要があります (OpenModelica の場合と同様)。
package EventHandling
model LimitSignal
Real l;
Real lmin(start = 1, fixed = true);
Real x;
Boolean Event(start = false, fixed = true);
input Real InputSignal;
algorithm
when InputSignal <= 0.05 then
Event := true;
lmin := pre(InputSignal);
end when;
equation
l = if Event then lmin else InputSignal;
x = log(l);
end LimitSignal;
model RampSignal
parameter Real start = 1;
parameter Real height = 2;
parameter Real Time = 10;
output Real y;
equation
y = 1 - (height/Time)*time;
end RampSignal;
model CompleteModel
LimitSignal EventHandling(InputSignal = Signal.y);
RampSignal Signal;
end CompleteModel;
end EventHandling;