3

「代数ループ」が何を意味するのか、そして「前」演算子を追加することでこの状況にどのように対処すればよいか、誰かヒントを教えてもらえますか? 本気で腑に落ちない…

Error: Failed to generate code for an algebraic loop
involving when equations or algorithms with when parts.
Unknowns:
  pump.Hb_flow
  pump.medium.d
  pump.medium.h
  pump.medium.state.melting
  pump.medium.state.T
  pump.V_flow
  pump.V_flow_single
  pump.W_single

Equations:
  algorithm 
    when Modelica.SIunits.Conversions.to_degC(pump.medium.state.T) < 13.9 then
      pump.medium.state.melting := true;
    elsewhen Modelica.SIunits.Conversions.to_degC(pump.medium.state.T) > 32.8       then
      pump.medium.state.melting := false;
    end when;
  // [removed set of equations that contained no "when"]

You may be able to cut the loop 
by putting 'pre' around some of the references to
unknown continuous time variables in when parts or when conditions.

よろしくお願いします。

ティモ。

4

1 に答える 1

4

この問題は、一般に、when 句内の方程式が、それらをトリガーする条件ステートメントに影響を与えるためです。

Modelica で理解しておく必要があるのは、ソルバーがシミュレーション プロセスの一部として「候補解」を使用して方程式を評価するということです。これらは必ずしも最終的に選択する解決策ではありませんが、最終的な解決策に近づくにつれてそれらを評価する必要があります。

これはどのように関連していますか?あなたの場合、「融解」変数の値を変更していることがわかります。しかし、その値が媒体温度に影響を与える場合 (「融解」の値の変化を引き起こした場合)、ツールは連立方程式の矛盾を検出します。ツールは反復して一貫性のある候補ソリューションを見つけることができるかもしれませんが、Dymola は単に「パント」し、そのような状況をサポートしていないと述べています。

さて、ここで理解しておくべき重要なことは、基本的にこれは通常すべて無関係であるということです。なんで?ほとんどの場合、ユーザーはそのような場合に when 句のデフォルトのセマンティクスを本当に望んでいないからです。ほとんどのユーザーが望むのは、when 句の条件を「原因」として扱い、when 句内の方程式を「結果」として扱うことです。この意味で、それらはシーケンシャルであり、結果が好転して原因に影響を与えるべきではありません (ただし、ホワイト ストライプスはそのような状況について素晴らしい曲を書きました ;-))。

ここでの一般的なパターンは、条件を分離してから、when 句でその前後に「前」演算子を追加することです。元のモデルが次のような場合:

model Test
...
equation
  when x>12.5 then
    // equations involving y
  end when;
  // equations coupling x to y
end Test;

モデルを次のようにリファクタリングするだけです。

model Test2
...
  Boolean cond;
equation
  cond = x>12.5;
  when pre(cond) then
    // equations involving y
  end when;
  // equations coupling x to y
end Test;

ここで重要なことは、y を含む方程式は、条件が真の後にのみ来るということです。この場合の「pre」は基本的に、現在の時間からいくつかのイプシロンを差し引いた時点で condition の値true であった場合、(応答として) when 句の方程式が作動することを示しています。

このような状況は、経過する時間の「イプシロン」ごとに状態の値が反転する「チャタリング」と呼ばれる状態につながる可能性がありますが、これは問題が適切に提起されていないことを意味します。

これが意味をなすことを願っています。複雑なケースでは、代数ループが存在する場所を正確に検出するのが難しい場合があることは認めます (ただし、Dymola はいくつかの診断を提供しようとします)。また、場合によっては、Modelica のデフォルトの動作が必要な場合もあるため、不要な 'pre' 修飾子を常に追加する必要はありません。

この説明についてご不明な点がございましたら、お問い合わせください。

于 2011-11-06T16:16:52.823 に答える