最近更新やシミュレーションネタ記事が滞っていたのだが、筆者が作成・公開している推進機・パワーシステムモデリング用ライブラリ、PropulsionSystem library、更新を辞めてしまったわけではない。逆に、この記事でも述べた通り大がかり刷新を進行中で、それに未だに苦戦しているために記事ネタが出てこなかった。本記事作成段階でも改修未完、今回の内容は途中進捗報告+改修内容の予告だ。

この改修で一番達成したいことは下記;

"Design Point(定格点)計算用のモデルと、Off-Design(非定格作動)計算用モデルを別々にせず、1つのモデルでまとめて計算を行えるようにすること。"

詳しくは改修完了したら記事を立てたいと考えているのだが、やりたいことは"discrete" variableとwhenを用いたevent handlingで達成できそうな見通しが立ってきている。

これまで、計算目的で機能特化させておくことで、それぞれのComponentのコードをよりシンプルで見通しが良い状態を保てた。また、変に色々入り混じらせない方が、特別な目的を持った特別なComponent作成に迫られた時に継承を使ったComponent流用がし易い筈との思想もあった。

しかし、これらを分けていることで不便も発生している。大きく下記の2点。

  1. 計算の二度手間
  2. Design Point用モデルと完全に等価なOff-Design用モデルを作成するためには、Off-Designモデル側で多数のparameter設定が必要。そうなると、Design PointのComponent特性値を振りつつ、Off-Designのシミュレーションも回したいとき、Off-Designモデルのシミュレーションのparameter設定がとても煩雑・手間。

  3. 収束性
  4. Off-Designモデル(特に過渡現象要素を含むとき)は収束性に課題があり、initializationでfailすることが多々有る(initializeに成功して、途中計算で落ちることはまず無い。windmillingなどの余程特殊な作動状態をシミュレートしようとinputを与えた場合位でないと。)。variableのinitial guess valueを上手く設定することで解消できることが期待出来るが、”こうすればinitialize成功する”という決まった設定法は無いし、inputを変える度にそのような調整をするのは煩雑過ぎる。

    一方で、Design Pointモデルはinitializationでfailすることはこれまで一度も発生したことが無く、Off-Design用モデルでinitialization途中で発生する"invalid root"が立つことも皆無。とすると、一度Design Pointの計算を行って定格点の収束状態を作り、そこから非定格点の作動状態へと持っていけば恐らく収束性の問題と付き合う必要が激減することが期待できる。


PropulsionSystemライブラリの中身に多少親しんでいないと、ここまで読んで、"?"となった方が大半だと思う。Design Point計算とOff-Design計算がそれぞれ何をするものなのかを軽く述べておく。本業者の知識・解説には確実に劣るものなので了承願いたい。本格的に学びたい方は、推進機やガスタービン系の専門書で"Performance calculation", "Turbo-matching calculation"といったトピックを本格的に調べて頂きたい。

  1. Design Point
  2. 総てのComponentの特性値(例えば、圧縮機圧力比や断熱効率)、大きさ(空気流量や機械回転数など)の値を人が直接決めて、熱サイクル全体として達成される性能(取出しpower, 推力, 燃料消費率, 最高ガス温度など)を算出する。計算内容は、熱力学の例題で行う計算と同じで反復計算を行う必要が無く、Excelや手計算(物性モデルが複雑でなければ)でも実行可能。当然ながら、投入燃料を増やして加速すると機械回転数、空気流量、最高圧力・温度がどれだけ増えるのかと言った、”ものが同じで作動状態が変わった”計算を行うことは出来ない。

    DesPtMdl_turbojet

  3. Off-Design
  4. 各Componentの特性値が、作動状態に応じて決まる。計算手法としては、作動状態を代表するvariableとComponent特性値を関連付ける特性テーブルデータを参照する。テーブルデータではなく、より詳細な物理モデルの方程式が得られていればそれを用いても良い。各Componentの作動状態と特性値が互いに依存しあっているため、(具体例としては、Compressorの圧力比が(作動流体を介して)Turbineの圧力比、断熱効率に影響し、それが軸と流体を介してCompressorの作動状態に影響しループする。)収束計算が必須となる。

    厳密な事を言うとテーブルデータはComponentの設計・解析から取得して毎度作成しなければならないものだ。しかし、その独立変数と従属変数には無次元数を簡略化したものを用いている。なので、1Dで設計やシミュレーションを重ねる段階では、Componentの大きさや定格点特性値を多少変えても”グラフの形”=独立変数と従属変数の相関は同じであると考えて、既存のテーブルをスケーリングして使い回す。そうして概念設計段階でテーブルデータを何度も作成する手間を省く。

    OffDesSimMdl_turbojet

    テーブルデータのスケーリングを行おうとすると必要になるのが、テーブルの独立変数・従属変数の定格点での値だ。システムが大きくなると、それら(図中の青枠中のもの)を総てのcomponentでparamterから入力するのは多大な手間だ。なのでparameterから入力するのを省き、定格点計算を行ってその結果から値を自動で設定したい。

    ここで、定格点の計算結果を定数として保管しておいて非定格計算のinputに使う、という処理がModelicaのコーディングで壁となる。Modelicaでvariableとして宣言した変数は、シミュレーション時間中常にそれを決定する方程式が存在してなければならず、一度値を算出したら変更せずにそのまま保管するという一般的なプログラミングのような処理を行えないからだ。この問題は"discrete"という接頭辞でvariableを宣言することで解決出来そうと判った。

筆者が知る限り、ガスタービン系機関のDesign Point, Off-Design計算は文献・解説を幾ら読んでもスッキリ理解できることは無いので、深く理解したいと思う方、興味のある方は是非PropulsionSystem libraryのExampleに収録されているDesign-Point, Off-Designそれぞれのモデルを動かして遊んでみて欲しい。また、Design Point, Off-Design計算それぞれの簡易なモデルをExcelで自作してみるのも良いかと思う(繰り返し計算機能を使えば可能ではある)。

この改修に成功して2軸、3軸turbofanのような複雑な機関のモデリング&シミュレーションが大幅に簡単になる。それが叶ったら、一度初心者~中級者向けのハンズオンマテリアルを作成ようかと考えている次第である。

以上



文献紹介

Modelicaによるシステムシミュレーション入門

入門者に最適の書。Modelicaって何?という導入から、簡単なコードベースやGUIベースの例モデルまで解説。筆者も入門時に手に取った。訳に少し癖が有る印象だが、英語書物がハードルになる方には確かな助けになる筈。


[楽天、電子書籍版] [AU payマーケット、電子書籍版] [7ネットショッピング、電子書籍版]
[楽天、紙面書籍版] [AU payマーケット、紙面書籍版]

Introduction to Modeling and Simulation of Technical and Physical Systems with Modelica

「Modelicaによるシステムシミュレーション入門」の英語版原書。英語に抵抗がなければこちらを入手したら良いと思う。


[Yahoo、紙面書籍版]

Principles of Object-Oriented Modeling and Simulation with Modelica 3.3 A Cyber-Physical Approach (Wiley-IEEE Press)

本格的にModelicaを使い込むなら必携の書。辞書的に適宜調べものをするような形で手元に有ると頼もしい武器。量が多いので電子版もお勧め。筆者もKindle版を所有し、かなりの頻度で参照している。


[楽天、電子書籍版]

Introduction to Physical Modeling With Modelica


[楽天、紙面書籍版]


------------------------------