共同シミュレーション — CAE用語解説
共同シミュレーション
先生、Co-simulationって「連成解析」と何が違うんですか?
理論と物理
共同シミュレーションの基本概念
共同シミュレーションって、単に複数の物理現象を連成させるシミュレーションとはどう違うんですか?
本質的な違いは「計算実行主体」にあります。連成解析は単一のソルバー内で複数の支配方程式を解きますが、共同シミュレーションは異なるソフトウェア(例えば構造解析ソルバーと制御シミュレータ)が独立して動作し、データを交換しながら並行して計算を進めます。FMI(Functional Mock-up Interface)規格がその代表的な実装方法です。
FMI規格の中身は具体的に何を決めているんですか?
主に2つの部分、FMU(Functional Mock-up Unit)のパッケージ形式とAPIを規定しています。FMUはzipアーカイブで、モデル記述XMLファイル、共有ライブラリ(.dllや.so)、リソースファイルを含みます。APIはC関数の集合で、fmi2GetRealやfmi2SetRealといった関数を通じて、ホスト環境がFMUの状態変数にアクセスしたり、時間積分を指示したりします。
データの受け渡しのタイミングはどう制御するんですか? 勝手に交換すると計算が発散しそうですが。
良い着眼点です。それが共同シミュレーションの肝である「コシミュレーション・マスター」と「通信ステップサイズ」の問題です。マスターが全体のシミュレーションクロックを管理し、例えば1msごとに各FMUの計算を一時停止させ、変数値を交換します。このステップサイズが粗すぎると精度が落ち、細かすぎると計算コストが膨大になります。自動車のESC(横滑り防止装置)シミュレーションでは、車体ダイナミクスと制御ECUの間で1~10msが典型的な値です。
数値解法と実装
アルゴリズムとデータ交換
通信ステップの間、各サブシステムはどうやって計算を進めるんですか? 相手からの入力が固定だと、積分誤差が大きくなりませんか?
まさにその通りで、これが「コシミュレーション・カップリング誤差」の主要因です。単純な方法(明示的カップリング)では、ステップ間で入力値を定数と見なして積分します。より精度の高い方法では、前回ステップの情報を使って入力値を補外(例えば1次補外)します。FMI for Co-Simulationでは、FMUが
各FMUが使うソルバー(例えば、構造は陰解法、制御は陽解法)がバラバラでも大丈夫なんですか?
それが共同シミュレーションの大きな利点の一つです。各FMUは内部で最適なソルバーと時間ステップを使えます。例えば、Simulinkで制御ロジック(固定ステップ1msの陽的オイラー法)を、Abaqusで非線形構造解析(自動ステップ制御の陰的積分法)を実行し、両者を10ms間隔で結合できます。マスターは「マクロステップ」だけを管理し、FMU内部の「マイクロステップ」には干渉しません。
データ交換の順番は重要ですか? AからBへ渡して、次にBからAへ戻す、という流れ?
非常に重要で、因果関係を考慮した「実行順序」を定義する必要があります。非因果的なシステム(例えば、相互に力と変位を交換する構造-構造連成)では、Jacobi型(並列交換)かGauss-Seidel型(逐次交換)のアルゴリズムを選びます。FMI 2.0では、FMUが「出力遅延」を宣言でき、これをもとにマスターが適切な順序を決定します。順番を誤ると、代数ループが発生して計算が停止します。
実践ガイド
ワークフローと検証
実際に共同シミュレーションを組むとき、最初に何から手を付けるべきですか?
まずは「インターフェース定義書」を作成します。交換する変数のリスト(名前、単位、因果性(入力/出力))、通信ステップサイズの目標値、シミュレーションの総時間を明確にします。例えば「モーター温度解析(JMAG)と冷却CFD(FloTHERM)の共同シミュレーション」なら、交換変数は「発熱量[W]」と「最高温度[°C]」、ステップサイズは熱時定数を考慮して10秒、などと決めます。
各サブシステムを単独でテストする方法はありますか?
必須のステップです。「スタブ」または「テストハーネス」を使います。例えば、構造解析FMUをテストするには、制御側からの入力(作動力)を、簡単なスクリプトで生成された時系列データ(正弦波やステップ入力)に置き換えて実行します。Dassault SystèmesのSIMULIA Co-simulation Engineや、オープンソースのFMIライブラリを利用して、FMU単体の入出力応答を検証できます。
全体のシミュレーションが終わった後、結果の検証はどうすれば? 共同だから責任の所在が曖昧になりそうで。
システム全体の挙動と、各FMUの境界でのデータを同時にモニタリングします。具体的には、交換変数の時系列データをログに出力し、物理的に妥当かチェックします(例えば、力が突然10^6倍になっていないか)。また、通信ステップサイズを半分にした場合(例えば5msから2.5ms)で結果がどの程度変化するか、感度解析を行い、数値誤差の影響を評価します。変化が許容範囲(例えば出力変数で0.5%以内)なら、ステップサイズは適切と判断できます。
ソフトウェア比較
ツールとプラットフォーム
共同シミュレーションを主導する「マスターツール」にはどんなものがあるんですか?
大きく分けて3種類あります。1) 汎用シミュレーションプラットフォーム: SiemensのSimcenter AmesimやDymola、MATLAB/Simulink。特にSimulinkは制御系設計のデファクトスタンダードで、他のCAEツールのFMUをブロックとして組み込めます。2) CAE専用連成環境: Ansys Twin Builder、DassaultのSIMULIA Co-simulation Engine。3) オープンソース/研究用: INTO-CPS、FMIライブラリをベースにしたPythonスクリプト。
AnsysとAbaqusは、共同シミュレーションに対応してる部分が違いますか?
アプローチが異なります。Ansysは「Twin Builder」をハブとして、Mechanical (構造)、Fluent (流体)、Maxwell (電磁界) などからFMUをエクスポートし、連成させます。一方、Dassault Systèmes (Abaqus) は「SIMULIA Co-simulation Engine」を中心に据え、Abaqus Standard/ExplicitとCATIA Systems (または第三者のFMU) を結合します。また、Abaqus自体には「Co-simulation Executor」という機能があり、Abaqus/StandardとAbaqus/Explicitを直接共同シミュレーションさせることも可能です。
オープンソースのFMIツールチェーンは実務で使えるレベルなんですか?
プロトタイピングや研究用途では十分有用です。例えば、JModelica.org (Pythonベース) でFMUを生成し、FMPy (純PythonのFMIシミュレータ) で実行するスタックがあります。ただし、産業用途では、商用ツールが提供する堅牢なソルバー連携、技術サポート、大量の並列計算管理機能、およびITARやISO26262などの規格認証が重要になるため、依然として商用プラットフォームが主流です。
トラブルシューティング
よくあるエラーと対策
シミュレーションが開始直後に「初期化エラー」で失敗します。何を疑えばいいですか?
まず、各FMUが単独で正常に初期化できるか確認します。次に、マスターがFMUに渡す「初期値」が適切かチェックします。FMIでは、初期値が設定されていない入力変数は「未定義」状態です。例えば、構造解析FMUが制御力の初期値を要求するのに、マスターが渡していない、というケースが多発します。modelDescription.xmlファイルを開き、変数定義のinitial="exact"やcausality="input"を確認し、すべての必須初期値をマスター側で設定しているか確認してください。
計算は進むのですが、ある時点で数値が発散(NaNや異常に大きな値)します。原因は?
主に3つの原因が考えられます。1) 通信ステップサイズが大きすぎてカップリング誤差が蓄積し、不安定化。ステップサイズを1/10にして試します。2) サブシステム自体が不安定。各FMUを単独で、共同シミュレーションと同様の入力条件下で実行し、発散しないか検証します。3) 代数ループ。変数AがBの関数で、BもAの関数という相互依存関係があると、単純な交換アルゴリズムでは解けません。この場合、1ステップ遅延要素を導入するか、マスターが反復解法(イテレーション)を使用するモードに切り替える必要があります。
シミュレーション速度が想像以上に遅いです。ボトルネックの特定方法は?
各FMUの内部計算時間と、データ交換・同期のオーバーヘッド時間を計測・分離します。多くのマスターツールはプロファイリング機能を持っています。もしデータ交換のオーバーヘッドが大きい場合、通信ステップサイズを見直します。もし特定のFMU(例えば高忠実度CFD)の計算時間が支配的なら、そのFMU内部のソルバー設定を変更するか、代わりに応答曲面モデル(ROM)をFMU化することを検討します。Ansys Twin Builderでは、詳細モデルから作成したROMをFMUとしてエクスポートし、計算速度を数十倍から数百倍向上させることが可能です。
関連トピック
なった
詳しく
報告