共同シミュレーション — CAE用語解説

カテゴリ: 用語集 | 2026-01-15
CAE visualization for co simulation - technical simulation diagram

共同シミュレーション

🧑‍🎓

先生、Co-simulationって「連成解析」と何が違うんですか?


理論と物理

共同シミュレーションの基本概念

🧑‍🎓

共同シミュレーションって、単に複数の物理現象を連成させるシミュレーションとはどう違うんですか?

🎓

本質的な違いは「計算実行主体」にあります。連成解析は単一のソルバー内で複数の支配方程式を解きますが、共同シミュレーションは異なるソフトウェア(例えば構造解析ソルバーと制御シミュレータ)が独立して動作し、データを交換しながら並行して計算を進めます。FMI(Functional Mock-up Interface)規格がその代表的な実装方法です。

🧑‍🎓

FMI規格の中身は具体的に何を決めているんですか?

🎓

主に2つの部分、FMU(Functional Mock-up Unit)のパッケージ形式とAPIを規定しています。FMUはzipアーカイブで、モデル記述XMLファイル、共有ライブラリ(.dllや.so)、リソースファイルを含みます。APIはC関数の集合で、fmi2GetRealfmi2SetRealといった関数を通じて、ホスト環境がFMUの状態変数にアクセスしたり、時間積分を指示したりします。

🧑‍🎓

データの受け渡しのタイミングはどう制御するんですか? 勝手に交換すると計算が発散しそうですが。

🎓

良い着眼点です。それが共同シミュレーションの肝である「コシミュレーション・マスター」と「通信ステップサイズ」の問題です。マスターが全体のシミュレーションクロックを管理し、例えば1msごとに各FMUの計算を一時停止させ、変数値を交換します。このステップサイズが粗すぎると精度が落ち、細かすぎると計算コストが膨大になります。自動車のESC(横滑り防止装置)シミュレーションでは、車体ダイナミクスと制御ECUの間で1~10msが典型的な値です。

数値解法と実装

アルゴリズムとデータ交換

🧑‍🎓

通信ステップの間、各サブシステムはどうやって計算を進めるんですか? 相手からの入力が固定だと、積分誤差が大きくなりませんか?

🎓

まさにその通りで、これが「コシミュレーション・カップリング誤差」の主要因です。単純な方法(明示的カップリング)では、ステップ間で入力値を定数と見なして積分します。より精度の高い方法では、前回ステップの情報を使って入力値を補外(例えば1次補外)します。FMI for Co-Simulationでは、FMUが

$$ \frac{\partial y}{\partial t} $$
のような導関数情報を提供できるオプションがあり、マスターがより高精度な補外アルゴリズムを適用できます。

🧑‍🎓

各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としてエクスポートし、計算速度を数十倍から数百倍向上させることが可能です。

この記事の評価
ご回答ありがとうございます!
参考に
なった
もっと
詳しく
誤りを
報告
参考になった
0
もっと詳しく
0
誤りを報告
0
Written by NovaSolver Contributors
Anonymous Engineers & AI — サイトマップ
プロフィールを見る