CFL条件 — CAE用語解説
CFL条件
CFL条件って「陽解法の安定条件」って書いてありますが、陽解法が「不安定」になるってどういう状態なんですか?
理論と物理
CFL条件の物理的意味
CFL条件って、時間刻み幅を決めるための条件だと聞きましたが、具体的に何を制限しているんですか?
物理的な情報が、1回の時間ステップで計算格子を飛び越えないように制限しています。例えば、流速が10 m/sで格子サイズが0.01 mのとき、情報が1ステップで移動できる距離は10×Δtです。これが格子サイズ0.01 mを超えると、計算が物理を追従できず発散します。これがCFL条件の本質です。
「情報」というのは具体的に何を指しているんですか?圧力波や渦ですか?
移流項によって運ばれる物理量の変動です。例えば、CFDで言えば、速度、温度、渦度の擾乱です。音速が支配的な圧縮性流れでは、圧力波(音波)の伝播速度が重要になります。その場合の条件は、
CFL数C_maxは1以下と聞きますが、これは絶対的なルールなんですか?
1次精度の陽解法では理論的にC_max=1が安定限界です。しかし、実用的には0.8や0.9に設定して安全マージンを取ります。一方、高次精度のスキームや陰解法では、この限界は変わります。例えば、2次精度のRunge-Kutta法ではC_maxが√2程度まで許容されることもあります。
数値解法と実装
陽解法と陰解法での扱いの違い
CFL条件は陽解法にしか関係ない、と聞いたことがあります。陰解法では時間刻みを大きく取れるのはなぜですか?
その理解はほぼ正しいです。陽解法は次の時刻の値を「明示的」に計算するので、情報の伝播をタイムステップ内に収める必要があります。一方、陰解法は連立方程式を解くことで次の時刻の値を求めるので、数値的な安定性が高く、CFL条件の制約を大幅に緩和できます。Ansys Fluentのデフォルト圧力-速度連成ソルバーは陰解法です。
陰解法でも、時間刻みを無限に大きくできるわけではないですよね?別の制限はありますか?
もちろんです。第一に、時間精度が必要な非定常解析では、物理現象の時間スケールを解像できる刻み幅が必要です。第二に、刻み幅を大きくすると非線形性の影響で収束が悪化したり、ソルバーの反復回数が増加します。実務では、陰解法でもCFL数が10を超えると収束性や精度が劣化し始めるケースが多いです。
ソフトウェアではCFL数はどう設定するんですか?自動調整される?
ソルバーによります。陽解法ベースの爆発解析ソフト(LS-DYNAの一部アルゴリズムなど)では、固定のCFL数に基づきソフトウェアが自動でΔtを計算します。一方、陰解法CFDソフト(OpenFOAMのPISO法など)では、ユーザーが直接「時間刻み幅」を指定し、ソルバー内部でCFL数をモニターして警告を出します。Ansys CFXは「タイムスケールファクター」という形で間接的に制御します。
実践ガイド
非定常CFD解析での設定手順
実際に非定常CFD解析を始めるとき、最初にどう時間刻みを決めればいいですか?格子サイズと流速から計算する?
まずは粗いメッシュでCFL数を目安にした推定を行います。例えば、最小格子サイズΔx=0.001 m、最大流速u_max=50 m/s、目標CFL数=1とすると、
解析中に流速が場所や時間で大きく変わる場合はどう対処するんですか?最初に決めたΔtで最後まで計算するのは危険では?
まさにその通りです。そのため、多くの商用ソフト(Star-CCM+やFluent)には「自動時間刻み制御」機能があります。これは各タイムステップで領域内の最大CFL数を計算し、あらかじめ設定した最大CFL数(例:1.0)を超えないように、次のステップのΔtを自動で増減させます。これが実務における標準的なアプローチです。
自動制御を使う場合、ユーザーが設定するパラメータは何ですか?
主に3つです。1. 最大CFL数(通常0.5〜1.5)、2. 時間刻み幅の増加率・減少率の限界(例:前ステップの±20%まで)、3. 絶対的最小・最大時間刻み幅(物理的に意味のある範囲)。Fluentでは「Adaptive Time Stepping」の設定画面でこれらを指定します。
ソフトウェア比較
主要CAEソフトにおける実装の違い
Ansys FluentとAbaqus/Explicitでは、CFL条件の扱いがどう違うんですか?
根本的に異なります。Fluentのデフォルトソルバーは陰解法のため、CFL条件は「収束性や精度へのガイドライン」です。一方、Abaqus/Explicitは陽解法の動的解析ソルバーで、安定性の「絶対条件」です。Abaqus/Explicitは要素ごとに安定な時間増分を計算し、その最小値を全体の時間刻みとして採用します。材料の音速と要素サイズが決め手です。
COMSOL Multiphysicsはどうですか?「分離型」や「完全陰解法」といった時間ステップ手法を選べますが。
COMSOLはユーザーがアルゴリズムを選択できる点が特徴的です。「分離型」ステッパー(陽解法に近い)を選べば、CFL条件が厳しく効きます。一方、「BDF(後退差分公式)」などの「完全陰解法」を選べば、安定性制約は緩和されます。ただし、COMSOLのマニュアルでは、移流支配問題で陰解法を使う場合でも、CFL数が10を超えないよう推奨する記述があります。
オープンソースのOpenFOAMでは、ユーザーが直接CFL数を設定する場面が多いですか?
はい、非常に直接的です。`controlDict`ファイル内で`CourantNo`というパラメータを設定し、`maxCo`(最大CFL数)を定義します。また、`adjustTimeStep`を`yes`に設定すれば、この`maxCo`を超えないようにソルバーが自動で`deltaT`を調整します。PISOやPIMPLEアルゴリズムを使う非定常解析では、この設定が収束と安定性の鍵になります。
トラブルシューティング
発散や不安定の原因と対策
解析が突然発散したとき、CFL数が原因かどうかをどう見分けますか?
まず、ソルバーのモニター出力で「最大CFL数」や「Courant Number」の時系列を確認します。発散する直前でこの値が急激に上昇(例えば100や1000を超える)していれば、CFL条件破綻が強く疑われます。特に、再計算やリスタートをせずに解析を続行すると、ごく短時間でNaN(Not a Number)エラーが発生します。
陰解法なのにCFL数が大きすぎて発散するのはなぜですか?理論的には安定では?
「無条件安定」は線形問題の話です。実問題は非線形であり、時間刻みが大きすぎると、非線形方程式を解くための反復(例えばFluentの係数更新ループ)が収束しなくなります。また、離散化スキームの数値拡散が不足し、解が振動して発散に至るケースもあります。対策は、時間刻みを小さくするか、ソルバーの緩和係数を厳しくするかです。
局所的に非常に小さい要素(リボンメッシュなど)がある場合、全体の時間刻みが極端に小さくなって計算コストが跳ね上がります。このジレンマをどう解決しますか?
これは実務上の頻出問題です。対策は主に3つあります。1. 「マススケーリング」:Abaqus/Explicitなどで、小さな要素の密度を人為的に上げて安定時間増分を大きくする(物理的精度とのトレードオフあり)。2. 「サブサイクリング」:小さな要素だけをより細かい時間ステップで計算する特殊なアルゴリズムを使う(LS-DYNAなど)。3. メッシュ品質の見直し:どうしても必要なのかを検討し、メッシュサイズのばらつきを抑える。
自動時間刻み制御を使っていて、CFL数は上限以内なのに発散することがあります。他にチェックすべき点は?
まず、CFL数の定義が適切か確認します。特に圧縮性流れで、式に音速cを含めていない定義を使っていないか。次に、メッシュの歪みが極端に大きい領域がないかチェックします。歪んだ要素では、実効的なΔxが定義より極端に小さくなり、実質CFL数が想定以上に大きくなることがあります。最後に、初期条件や境界条件に不連続点や物理的に不可能な値が設定されていないか見直します。
関連トピック
なった
詳しく
報告