TRNSYSのTrace機能で計算中の値を調べる

TRNSYSでシミュレーションしていると、計算結果が本当に合っているんだろうかと思える時があります。計算結果が想像していたのとかなり違っているとか、思ったような動きになっていない、そういう事ってないですか?

コンポーネントの出力をファイルに書きだして値を確認すると、思い違いで設定していたり、単位が違っていたりといった、どこかに問題があることが大半です。

しかし、そのたびにファイルに書きだすのも面倒、そういう時にはTRNSYSのTraec機能を使うと手っ取り早く値をチェックする事ができます。

TRNSYSに慣れていないと少々解りにくいネタなのでブログに書くのはありや?なしや?な気分ではあるんですが、ま、知ってて役に立つこともあるので、書いておきます。

Traceは新規にオリジナルのコンポーネントを作る際や収束に問題がある場合に役立ちそうな機能です。

例として図のようなプロジェクトで特定のコンポーネントの出力内容を調べてみることにします。ここでは気象データのコンポーネントを選んで値を調べてみます。

House.tpf

Traceの設定

まずは値を確認したいコンポーネントへTraceの設定を行います。

  1. 値を確認するコンポーネント(この例では、Type99-AMeDAS)をクリック
  2. ツールバーからTraceアイコンをクリック
Type99-AMeDASへTraceを設定する

コンポーネントのアイコンの右上に「足跡」のマークが表示されていれば準備完了です。

リストファイル(.lstファイル)を確認する

Traceの情報はリストファイル(.lstファイル)に出力されます。普通にシミュレーションを実行した後、Error Mangerの「List file」ボタンをクリックしてリストファイル(.lstファイル)を開きます。

メモ帳が起動して、リストファイルが表示されます。ファイルの中程に数字が大量に書きだされている箇所があります。

リストファイル(.lst ファイル)

数値が塊で書きだされていますが、” *TRACE*“で始まる行がコンポーネントの情報です。タイムステップが収束するまでの繰り返し計算(イテレーション)ごとにコンポーネントの情報がまとめて書きだされています。

イテレーションごとのPrameter,Input,Outputの値は行頭の文字で次のように区別されます。

文字
PPrameterの値
IInputの値
OOutputの値

確認のためコンポーネントの設定と見比べてみます。

Paramter

まずは、Prameterタブの設定とTraceの出力を確認します。

Trace出力:(太字の部分に注目)

 *TRACE*  UNIT   2  TYPE   99  AT TIME   1.0000000000000000E+00  ITERATION      0  CALL       4  ITERATIVE CALL
 P  3.0000000000000000E+01  4.0000000000000000E+00  1.0000000000000000E+00
 I  2.0000000000000001E-01  0.0000000000000000E+00  0.0000000000000000E+00
 O  3.2719117647058829E+00  5.0429000000000002E+01  2.4500000000000002E+00  3.4875000000000000E+02  2.7500000000000000E+02
 O  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  9.0000000000000000E+01
 O -9.0000000000000000E+01  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00
 O  9.0000000000000000E+01  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00
 O  0.0000000000000000E+00  9.0000000000000000E+01  0.0000000000000000E+00

指数表記なので若干みにくいですが、Parameterの設定と同じ値が書きだされています。

Input

次はInputタブの値。

Trace出力:(太字の部分に注目)

 *TRACE*  UNIT   2  TYPE   99  AT TIME   1.0000000000000000E+00  ITERATION      0  CALL       4  ITERATIVE CALL
 P  3.0000000000000000E+01  4.0000000000000000E+00  1.0000000000000000E+00
 I  2.0000000000000001E-01  0.0000000000000000E+00  0.0000000000000000E+00
 O  3.2719117647058829E+00  5.0429000000000002E+01  2.4500000000000002E+00  3.4875000000000000E+02  2.7500000000000000E+02
 O  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  9.0000000000000000E+01
 O -9.0000000000000000E+01  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00
 O  9.0000000000000000E+01  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00
 O  0.0000000000000000E+00  9.0000000000000000E+01  0.0000000000000000E+00

こちらもInputsで指定された値が書きだされます。

注意)この例は気象データリーダーなので他のコンポーネントから値を受け取らないため、Inputsの値は常に同じ値(初期値)です。他のコンポーネントから値を受け取るコンポーネントでは値がタイムステップごとに変化します。

Output

最後はOutputタブですが、こちらは計算値が出力されます。

Trace出力:(太字の部分に注目)

 *TRACE*  UNIT   2  TYPE   99  AT TIME   1.0000000000000000E+00  ITERATION      0  CALL       4  ITERATIVE CALL
 P  3.0000000000000000E+01  4.0000000000000000E+00  1.0000000000000000E+00
 I  2.0000000000000001E-01  0.0000000000000000E+00  0.0000000000000000E+00
 O  3.2719117647058829E+00  5.0429000000000002E+01  2.4500000000000002E+00  3.4875000000000000E+02  2.7500000000000000E+02
 O  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  9.0000000000000000E+01
 O -9.0000000000000000E+01  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00
 O  9.0000000000000000E+01  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00  0.0000000000000000E+00
 O  0.0000000000000000E+00  9.0000000000000000E+01  0.0000000000000000E+00

Outputsは気象データから読み出された値が出力されています。このためコンポーネントの設定値と比較はできませんが、Outputタブの項目順にそれぞれの値が出力されています。

でも値を順番に見ていくと、それらしい値かどうかの見分けはつきます。この例だと一番最初の項目は外気温になります。書きだされた値を見ると3.2719117647058829E+00でタイムテップは1hなので、1/1 1:00としては妥当な値だという事が想像できます。

こうやって順番に調べていくと、おかしな値なのか、そうじゃないのか調べていくことができます。

ITERATIVE CALL と POST-CONVERGENCE CALL

リストファイルをさらに詳しく見ると、同じタイムステップでITERATIVE CALLPOST-CONVERGENCE CALLの2種類の値が書き出されています。

これは名前の通りですが、それぞれ収束計算中と収束後の値です。

この例ではそれぞれ1回ずつ登場していますが、複雑なコンポーネントの組み合わせでは、相互に影響を受けます。収束までITERATIVE CALLが複数繰り返されたあとで、収束(POST-CONVERGENCE CALL)することも十分にあり得ます。

逆に言うと収束までの値の変化を覗くことができるわけです。なにか収束に問題があると思われるケースでは、この値の検討することが非常に有効です。

動作環境

以下の環境で動作を確認しています。

  • Windows11 Pro(64bit, 21H2)
  • TRNSYS18.04.0001(64bit)
Pocket

1件のピンバック

コメントする

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