TRNSYSの計算が途中で止まる

TRNSYSの計算中に次のようなエラーで止まってしまうことがあります。

*** Fatal Error at time   :       168.000000
    Generated by Unit     : Not applicable or not available
    Generated by Type     : Not applicable or not available
    TRNSYS Message    450 : The maximum number of warnings allowed per simulation has been exceeded. Please fix these warnings or increase the limit on the number of warnings allowed per simulation (LIMITS command)
    Reported information  : Not available

シミュレーションごとに許可される警告(WARNINGメッセージ)の上限数を超えました。これらの警告を修正するか、シミュレーションごとに許容される警告の数の制限を増やしてください。

通常、このメッセージが表示されるケースでは直前に大量のWARNINGが発生します。

WARNINGはエラーほど深刻ではないが計算上の問題がある場合、一定時間内に収束しない(計算が発散している)場合に発生します。一つ一つは軽微な問題でも、連続して発生するとTRNSYSはエラーとして計算を停止します。

対策

上記のメッセージにあるように、対策は次の2つです。

  1. WARNINGの原因を修正する
  2. WARNINGの上限数を増やす

後者はエラーとして処理されるまでの許容されるWARNINGの上限を増やすだけです。WARNINGの原因そのものの解決にはなりません。上限値を増やしても、しばらくすると計算が止まる可能性が大きいので一旦置いておきます。

では、どうして対策として示されているか不思議ですが、そもそもWARNINGが発生することが予め分かっていて、敢えて計算を続行したい場合にはこの対策が有効です。計算精度は落ちるので、なにか理由がある場合を除いてオススメはしません。

WARNINGの発生原因

WARNINGが発生する原因は多数考えられます。

計算に使われるデータの間違い

実測データを使う場合は単位の間違い、値そのものの間違いなど、用意されているデータに問題があるケース。

実際に目にした例では、日の出前なのに日射のデータが存在する(こういう場合、直散分離の計算などで問題が発生します)や、相対湿度の値が100%を超えているなどといった本来あり得ない値が使われているケースがあります。

原因としては実測の間違いや、計算精度で誤った値が入り込む事があります。例えば、相対湿度は希に計算制度の関係で100.00000000012%など微妙な値になる事があります。これは受け取ったコンポーネントによって対応が変わりますが、WARNINGを出した後、湿度100%に補正して処理を続行する場合もあれば、エラーとして計算を停止する場合もあります。

このような原因が疑われる場合には、使われている値が妥当かどうかファイルに書き出して確認、問題があれば対策を検討します。

コンポーネントのつなぎ方の問題

コンポーネントの接続を間違えている。つなぐべき所をつないでいない(初期値のまま)など、引き渡される値が適切ではないケース。これは接続関係を再チェックするなどして問題箇所を特定、修正します。

収束しない、しにくい条件が指定されいる

指定されている計算条件がそもそも収束しにくい条件なっている事があります。後述しますが、こういった場合は計算方法の見直しが必要です。

ケーススタディ

何はともあれ、多発しているWARNINGのメッセージの内容を検討します。複数のWARNINGが発生している事もありますが、多くの場合は同じWARNINGが連続して発生しています。

この例では、エラーに先行して次のようなWARNINGが大量に発生していました。

*** Warning at time       :       168.000000
    Generated by Unit     : Not applicable or not available
    Generated by Type     : Not applicable or not available
    TRNSYS Message    441 : The inputs to the listed units have not converged at this timestep. The values at the last iteration will be used and the simulation will proceed.
    Reported information  : UNITS: 56

リストされたユニットへの入力は、このタイムステップで収束していません。 最後の反復での値が使用され、シミュレーションが続行されます。

Type56の計算が収束しないため、最後の反復計算(イテレーション)の値を使って計算を続行しています。

これはもちろん、あまりいい状況ではありませんが、次のタイムステップで改善する可能性に期待して計算を続行しています。

それでも収束しない状況が続くと、WARNINGが多発して最後はエラーとして計算を終了します。さて困った。

収束しない原因は?

TRNSYSの計算では、すべてのコンポーネントを逐次実行し、すべて計算結果が安 定(収束)した段階で次のタイムステップへと進みます。逆の言い方をすると、計算結果が安定するまで同じタイムステップの中で計算を繰り返し(イテレーションを繰り返す)、計算を繰り返しても安定しなければWARNINGとして次のタイムステップへ進みます。WARNINGが多発すると前述したように最終的にはエラーとして計算を停止します。

収束しない原因の1つとして、イテレーションを繰り返している間に条件が変わってしまっている事が考えられます。

例えば、外気導入の条件を気温を使ってEquationで次のように処理しているとします。(室温が高くなったら窓を開けて外気を入れて室温を下げるモデルです)

室温≧27℃:外気導入で室温を下げる、換気回数を10回/h
室温<27℃:外気導入を止めて換気回数を0.5回/hへ戻す

Equationで次の式でTairは室温を受け取って、27℃を条件に換気回数を10回/h、0.5回/hを判定してachへ返します。

ach=ge(Tair,27)*10+lt(Tair,27)*0.5 !室温が27℃以上なら換気回数を増やす(外気導入)

これ、一見何の問題も無いように見えますが、実際に計算を始めると、あるタイムステップでEquationとType56のやり取りで次のような状況が発生します。

Equation(室温≧27℃ 換気回数は10回/h、外気導入を始める)

Type56(換気回数が増えて、室温が下がり始める)

Equation(室温<27℃ 室温が十分下がったので、換気回数を0.5回/hへ戻す)

Type56(換気回数が減って再び室温が上がり始める)

最初へ戻って繰り返し。(終わらなくなる)

この繰り返しが同じタイムステップで発生すると、計算が収束しなくなります。(収束しない→WARNING多発→エラーで停止)

この例では単純に27℃で条件を切り換えているため、イテレーション中に判定が次々と変わるため、収束しなくなります。

対策としては、一旦条件が変わったらしばらくは条件が変わらないように処理して回避します。

例えば、室温≧27℃で換気10回/hに変わって室温が下がり始めても、室温が1℃低い26℃までは10回/hを維持するように変更します。

こういった処理はTRNSYSに用意されている制御系のコンポーネントを使って処理することができます。

詳しくは以下のリンク先にまとめてありますが、サーモスタットなど制御系のコンポーネントで条件を切り換えるようにします。

参考までですが、確実に収束しない例はこちらです。

WARNINGの上限を増やす

さて、WARNINGが出ることは条件的に予め分かっていて、それでも計算を実行したい場合は設定を変更して上限を増やします。

この設定はSimulation Studioのメニューから[Assembly]-[Settings]を選択して表示されるSettingsの画面で行います。

SettingsのAdvanced Settingsで設定する
SettingsのAdvanced Settingsで設定する

この画面の「Advanced Settings」タブの10番目、11番目の設定項目で指定します。

  • # of Iterations Before Warning

WARNINGとして処理されるまでのイテレーション(反復計算)の上限。ここで指定された回数までイテレーションを繰り返して収束しなければWARNINGとして処理します。単に収束に時間の掛かる計算であれば、ここの値を大きくすればWARNINGが出にくくなります。

前述した外気導入の例のようにイテレーション中に条件が変わる場合は、ここを変更しても効果はありません。

  • # of Warnings Before Error

エラーとして処理するまでのWARNINGの上限。この画面の例ではWARNINGが30回を超えたらエラーとして処理する設定です。実測データの精度が多少悪い場合など、予めWARNINGが多発する事が分かっているような場合には値を大きくするとエラーで停止する確率が低くなります。

本来はWARNINGの原因を取り除くのが望ましいですが、これらの設定を変更するのも場合によっては有効です。

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 1909)
TRNSYS18.01.0001(64bit)

Pocket

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です