Type3157のしくみ
一般的なコンポーネントはFortran、もしくはC/C++などコンパイル型の言語で作成されます。高速で動作し、プログラム上の柔軟性もありますが、習得には専門的な知識を必要とします。
一方Pythonは構文がシンプルで習得しやすい、外部ライブラリが豊富に用意されているなどの特徴があります。インタープリタ型の言語のためコンパイル不要で実行できるのも特徴です。
Type3157ではPythonを呼び出して処理を行います。呼び出されたPython側では指定されたスクリプトに従って計算処理を行います。Type3157では、このスクリプトを変更する事で様々な処理を実行することができます。
前提としてPythonにTRNSYSからの呼び出しに対応した5つの関数を実装する必要があります。TRNSYSはこの5つの関数を処理の各段階で呼び出して計算を行います。
関数
Initialization()
計算開始時点の初期化処理に呼び出される関数。計算開示に一度だけ必要な処理を記述する。
例)外部ファイルのオープン処理
StartTime()
最初のタイムステップの初期化処理。Outputの初期値を設定する。
Iteration()
タイムステップ毎に収束するまで繰り返し呼び出される関数。
通常、コンポーネントの計算式はここに記述する。
EndOfTimeStep()
タイムステップ毎の収束時に呼び出される関数。収束後の処理を記述する。
例)タイムステップの計算結果の書き出し処理
LastCallOfSimulation()
計算終了時点に呼び出される関数。終了時に実行したい処理を記述する。
例)外部ファイルのクローズ処理。
Type3157は、これら決められた関数を呼び出すことでPythonとのやり取りをします。
逆にPythonから見た場合、これらの関数が呼び出されるタイミングに合わせて処理を実装する必要があります。
それぞれの関数がどのタイミングで呼びだされるかフローチャートにすると下図のようになります。
この仕組みは基本的にTRNSYSの通常のコンポーネントと同じです。実質的にPythonでコンポーネントを作れるのに等しい仕組みに見えます。
残念ながら制限もあって、TRNSYSにはコンポーネント用に便利なAPIが用意されていますが、それらはPythonからは使用できません。(※)
本格的にいろいろやろうとすると制限が出てくる可能性があります。とはいえ、コンパイル不要で、気軽に試せるのはPythonの大きな利点です。充実したライブラリを利用できるのも魅力です。
前回ご紹介した例のように、既存のライブラリを簡単にTRNSYSの計算に取り込むことができます。
既存のライブラリの利用もそうですが、なにか思いついたらすぐに試せるのがいいところですね。
※ソースコードは公開されています。かなりハードルは高くなりますが、API呼び出しを実装することもできます。
動作環境
以下の環境で動作を確認しています。
- Windows11 Pro(64bit, 21H2)
- TRNSYS18.04.0000(64bit)
- Python 3.10