Code_Saturne — CAE用語解説

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

Code_Saturne

🧑‍🎓

先生、Code_SaturneってCode_Asterと同じEDF発祥のCFDソルバーですか?OpenFOAMと何が違うんですか?


理論と物理

Code_Saturneの基本概念

🧑‍🎓

Code_Saturneって、名前からして何か特殊な流体ソルバーなんでしょうか?普通のCFDソフトと何が違うんですか?

🎓

本質は「圧縮性・非圧縮性の定常・非定常ナビエ-ストークス方程式」を解く汎用CFDソルバーです。最大の特徴は、フランス電力公社(EDF)が自社の原子力プラントやタービン、建屋の換気解析のために開発した「産業向けオープンソース」ソフトウェアである点です。商用ソフトのようにGUIが充実しているわけではなく、CやFortranでユーザー定義関数を書いて物理モデルを拡張する文化が根付いています。

🧑‍🎓

支配方程式は具体的にどう書かれるんですか?非圧縮性の仮定が基本なんですか?

🎓

デフォルトの求解アルゴリズムは、非圧縮性または弱圧縮性流れを想定した「圧力補正法」です。連続の式と運動量式は以下の通りです。

$$ \nabla \cdot \mathbf{u} = 0 $$
$$ \frac{\partial \mathbf{u}}{\partial t} + \nabla \cdot (\mathbf{u} \otimes \mathbf{u}) = -\frac{1}{\rho} \nabla p + \nabla \cdot (\nu \nabla \mathbf{u}) + \mathbf{g} $$
ただし、圧縮性アルゴリズムも選択可能で、航空機周りの亜音速流れ(マッハ数0.3以上)などにも適用できます。EDFが扱うタービン内部の蒸気流れなどは、密度変化が無視できないため、そのモードが使われます。

🧑‍🎓

乱流モデルは何が使えるんですか?k-εモデルだけですか?

🎓

いえ、非常に豊富です。産業用途を強く意識しており、RANSモデルでは標準k-ε、RNG k-ε、k-ω SST、低レイノルズ数対応のv2-f (Elliptic Blending)モデルが使えます。特にv2-fモデルは、壁面近くのアニソトロピーを比較的安価に捉えられるため、原子炉内の複雑な流路解析で重宝されます。また、LES(Large Eddy Simulation)もネイティブでサポートしており、SmagorinskyモデルやDynamic Smagorinskyモデル、WALEモデルが利用可能です。

数値解法と実装

離散化とソルバーの特徴

🧑‍🎓

空間離散化にはどんな方法を使っているんですか?FVM(有限体積法)ですよね?

🎓

その通り、FVMがコアです。任意の形状の非構造格子(テトラ、プリズム、六面体、ピラミッド、多面体)を扱えます。離散化スキームは、対流項に対して1次風上差分から2次中心差分、または各種の高次精度スキーム(例えば、Blended Gammaスキーム)を選択可能です。実務では、数値拡散と安定性のバランスから、2次精度の中心差分とわずかな1次風上をブレンドすることが多いです。

🧑‍🎓

圧力と速度の連成を解く「圧力補正法」の中身は?SIMPLE法ですか?

🎓

デフォルトはSIMPLEの改良系であるSIMPLEアルゴリズムです。ただし、非定常計算ではPISO(Pressure Implicit with Splitting of Operators)アルゴリズムも選択できます。PISOは1タイムステップ内で複数回の圧力修正を行うため、大きな時間ステップを使う非定常計算で有利です。Code_Saturneでは、この圧力-速度連成ソルバーに加え、共役勾配法(CG)や代数的マルチグリッド法(AMG)を前処理とした線形ソルバーが組み込まれており、大規模問題(数億セル)でも効率的に求解できます。

🧑‍🎓

並列計算はどうやって行うんですか?MPIですか?

🎓

はい、MPI(Message Passing Interface)による領域分割法が基本です。計算格子を複数のサブドメインに自動分割し、各サブドメインを1つのMPIプロセスが担当します。通信ライブラリにはMPIの他、大規模クラスタ向けにOpenMPIMPICHとの組み合わせが一般的です。EDFの内部では、数千コアを使った原子炉スケールの解析が日常的に行われており、そのノウハウがソルバーのスケーラビリティに反映されています。

実践ガイド

典型的なワークフロー

🧑‍🎓

Code_Saturneで解析を始める場合、どんなソフトウェアと組み合わせて使うのが一般的なんですか?

🎓

典型的なワークフローは「前処理→求解→後処理」に分かれます。前処理(メッシュ生成)には、Salome Platform(同じくEDF系のオープンソースCAEプラットフォーム)や、商用のANSYS Fluent MeshingSiemens Star-CCM+が使われます。メッシュ形式はCGNSまたはMED(Salome形式)が標準的です。後処理には、ParaViewやEnSightが用いられます。Code_Saturne自体には簡易GUI「GUI」が付属しますが、本格的な設定はXML形式の設定ファイルを直接編集することが多いです。

🧑‍🎓

計算を始める前に、メッシュ品質で特にチェックすべきポイントはありますか?

🎓

特に重要なのは「非直交性」と「アスペクト比」です。Code_Saturneのソルバーはロバストですが、非直交性が60度を超えるセルが大量にあると、圧力修正の収束が極端に悪化したり、発散したりします。アスペクト比(セルの伸び)は1,000を超えないようにするのが無難です。また、壁面の最初のセル厚さは、使用する壁面関数(例えば、標準壁関数ならy+≈30〜300)に合うように設定する必要があります。これらは`check_mesh`ユーティリティで事前に診断できます。

🧑‍🎓

収束判定はどう設定すればいいですか?残差だけ見ていれば大丈夫?

🎓

残差の低下(例えば、連続の式の残差が10^-3以下)は必要条件ですが、十分条件ではありません。必ず物理量のモニタリングを併用してください。例えば、流出口の平均圧力、代表点の速度、抗力係数などが定常値に収束しているかを確認します。Code_Saturneでは`probes`や`monitoring`機能で任意の点や面の値を時系列で出力できます。産業用途では、これらモニター値の変動が初期値の0.1%以下で安定することを収束の目安とすることが多いです。

ソフトウェア比較

他のCFDソフトとの位置付け

🧑‍🎓

Code_Saturneは、Ansys FluentやOpenFOAMと比べて、どういう位置付けなんですか?

🎓

3つのオープンソース/商用ソフトを比べるとこうなります。

1. Ansys Fluent: 包括的なGUI、豊富な物理モデル、優れたサポート。ただしライセンスコストが高い。
2. OpenFOAM: 極めて高い柔軟性と学術的評価。C++でソルバーを自作できるが、学習曲線が急。
3. Code_Saturne: その中間。産業用途(特にエネルギー分野)に特化した堅牢なソルバーがデフォルトで用意され、カスタマイズは可能だが、OpenFOAMほど「何でもあり」ではない。EDFという大口ユーザーによる実戦テスト済みという強み。

🧑‍🎓

具体的に、FluentにはあるけどCode_Saturneにない機能は何ですか?

🎓

顕著なのは「多相流モデルの充実度」と「組み込みの最適化ツール」です。FluentにはVOF、Eulerian、Mixtureモデルに加え、破砕・合体モデルなど非常に細かいオプションがあります。Code_Saturneにも欧州原子力共同体のコードであるNEPTUNE_CFDと連携する機能はありますが、標準装備としては限定的です。また、Fluentに組み込まれたAdjoint Solverによる形状最適化や、ANSYS DesignXplorerとの連携によるDOE(実験計画法)は、Code_Saturne単体ではできません。これらはユーザーが外部スクリプトで実装する必要があります。

🧑‍🎓

では逆に、Code_Saturneにしかない強みは?

🎓

最大の強みは「特定の産業分野における検証済みのモデルとノウハウ」です。例えば、原子炉のコア内の熱水力解析、タービンブレードの冷却、建屋内の火災・煙流動(火災シミュレーション専用フロントエンドSalamandreと連携)、放射性エアロゾルの拡散など、EDFが実際に規制当局に提出する安全審査で使用してきた実績があります。これらのテンプレート的な設定と、大規模並列計算に対する高いスケーラビリティは、同分野では大きなアドバンテージです。

トラブルシューティング

よくあるエラーと対策

🧑‍🎓

計算が最初の数ステップでいきなり「浮動小数点例外」で落ちます。まず何を疑えばいいですか?

🎓

まずは「初期条件」と「境界条件」の不一致を疑います。例えば、流入速度を設定したのに流出境界が全て壁面だったり、圧力境界が重複していたりすると、ソルバーが発散します。次に「メッシュ品質」、特に体積がゼロまたは負の「潰れたセル」がないか`check_mesh`で確認します。最後に「物性値」です。密度や粘度に極端に小さい値(ほぼゼロ)や大きい値を設定していないかチェックしてください。デバッグには、`--log`オプションを詳細モード(`debug`)にして実行し、どのルーチンで落ちたかを特定します。

🧑‍🎓

計算は回るけど、残差が10^-2あたりで下がらなくなり、振動します。どう対処しますか?

🎓

これはほぼ間違いなく「数値的不安定性」です。以下の順で対策します。

1. 時間ステップ/緩和係数を小さくする: 非定常ならCFL数を1以下に。定常なら運動量や圧力のアンダーリラクゼーション係数を0.3や0.5まで下げてみる。
2. 離散化スキームを変更する: 2次中心差分から1次風上差分に一時的に切り替え、安定化させる。収束傾向が見えたら、再び2次精度に戻すこともある。
3. メッシュを確認する: 先述した非直交性の大きいセルや、急激に縮小する流路部分のメッシュを細かくする。
「振動」が物理的な非定常現象(カルマン渦など)の可能性もあるので、モニタリング点の値が周期的に変動していないかも確認します。

🧑‍🎓

並列計算で、プロセス数を増やすと却って計算が遅くなったり、メモリ不足で落ちたりします。なぜですか?

🎓

これは典型的な「並列効率の低下」と「通信オーバーヘッド」の問題です。原因は主に二つ。

1. 負荷分散が均等でない: メッシュ分割ツール(`part`)の設定が不適切で、一部のプロセスにだけセルが集中している。`part`の出力を確認し、各プロセスのセル数が均等になるように再分割します。
2. 通信量が増大する: プロセス数が増えると、分割界面(インターフェース)の総面積が増え、MPI通信の回数と量が増加します。特に、隣接セルリストを必要とする高次精度スキームを使うと顕著です。対策としては、ある程度以上のプロセス数では、線形ソルバーに通信効率の良いAMG(代数的マルチグリッド)を選択し、反復回数を減らすことが有効です。また、1ノードあたりの物理メモリを超えてしまう場合は、使用するソルバーの前処理をより省メモリなもの(例えば、不完全LU分解のレベルを下げる)に変更します。

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