流れ関数 — 数値解法と実装

カテゴリ: 流体解析(CFD) | 2026-01-20
stream-function-method
数値解法の舞台裏

渦度-流れ関数法の実装

🧑‍🎓

渦度-流れ関数法を実際にコードで実装するにはどうすればいいですか?


🎓

アルゴリズムの流れはこうだ。各タイムステップで以下を繰り返す。


1. 渦度方程式を時間積分して $\omega^{n+1}$ を求める

2. Poisson方程式 $\nabla^2 \psi^{n+1} = -\omega^{n+1}$ を解いて流れ関数を更新

3. 速度場を $u = \partial\psi/\partial y$、$v = -\partial\psi/\partial x$ で計算

4. 壁面渦度を更新してステップ1に戻る


🧑‍🎓

有限差分法での具体的な離散化を教えてください。


🎓

均一格子間隔 $h$ のスタガード格子で、Poisson方程式の5点差分は


$$ \frac{\psi_{i+1,j} + \psi_{i-1,j} + \psi_{i,j+1} + \psi_{i,j-1} - 4\psi_{i,j}}{h^2} = -\omega_{i,j} $$

速度の中心差分は


$$ u_{i,j} = \frac{\psi_{i,j+1} - \psi_{i,j-1}}{2h}, \quad v_{i,j} = -\frac{\psi_{i+1,j} - \psi_{i-1,j}}{2h} $$

🧑‍🎓

渦度方程式の移流項はどう離散化するんですか?


🎓

中心差分だと格子Reynolds数 $Re_h = |u|h/\nu$ が2を超えると振動する。実用的な選択肢を比較しよう。


スキーム精度数値拡散安定性備考
中心差分2次なし$Re_h < 2$振動の可能性
1次風上1次無条件渦が消える
QUICK3次$Re_h < 8/3$バランスが良い
Kawamura-Kuwahara3次極小良好コンパクト差分
🧑‍🎓

QUICKが良さそうですね。


🎓

実際、QUICK(Quadratic Upstream Interpolation for Convective Kinematics)は多くの問題でバランスが良い。ただし単調性が保証されないので、急な不連続がある場合はTVD(Total Variation Diminishing)制限子を組み合わせるとよい。


Poisson方程式の反復解法

🧑‍🎓

毎ステップPoisson方程式を解くのがコストのネックになりますよね?


🎓

そうだ。代表的な反復法の収束速度を比較しよう。$N \times N$ 格子の場合。


解法反復回数($O(\cdot)$)1反復あたりの演算トータル
Jacobi$O(N^2)$$O(N^2)$$O(N^4)$
Gauss-Seidel$O(N^2)$$O(N^2)$$O(N^4)$
SOR(最適$\omega$)$O(N)$$O(N^2)$$O(N^3)$
マルチグリッド$O(1)$$O(N^2)$$O(N^2)$
FFT直接法1回$O(N^2 \log N)$$O(N^2 \log N)$
🧑‍🎓

マルチグリッドが圧倒的ですね。


🎓

マルチグリッドのV-cycleは、粗い格子で低周波誤差を効率的に除去する。実装はやや複雑だが、$256 \times 256$ 以上の格子では他の手法と桁違いの速度差になるよ。PythonならPyAMGライブラリで簡単にAMG(Algebraic Multigrid)を使えるんだ。


境界条件の実装

🧑‍🎓

境界条件の具体的な実装方法を教えてください。


🎓

代表的な境界条件の実装をまとめよう。


静止壁面: $\psi = 0$(Dirichlet)、$\omega_{wall}$ はThomの公式 $\omega_{i,0} = -2\psi_{i,1}/h^2$ で計算


移動壁面(速度 $U$ で移動): $\psi = 0$、$\omega_{i,0} = -2(\psi_{i,1})/h^2 - 2U/h$


流入境界: 速度分布を指定し、$\psi$ を壁面から積分して求める。例えば一様流 $U_\infty$ なら $\psi(y) = U_\infty y$


流出境界: $\partial^2 \psi / \partial x^2 = 0$ や $\partial \omega / \partial x = 0$ のNeumann条件が一般的


自由面: $\psi = \text{const.}$、$\omega = 0$(せん断応力ゼロ)


🧑‍🎓

流出境界条件の選び方で結果が変わったりしませんか?


🎓

よく変わるよ。流出境界が渦の存在する領域に近すぎると、非物理的な反射が起きて結果がおかしくなる。流出境界は関心領域から十分離すこと(最低でも特性長さの10倍以上)が鉄則だ。


Pythonでの簡易実装例

🧑‍🎓

教育目的で自分で実装してみたいんですが、どのくらいのコード量ですか?


🎓

Python + NumPyで渦度-流れ関数法のLid-driven cavity問題を解くなら、200行程度で書ける。核心部分は以下のような構造だ。


  • SOR法でPoisson方程式を解く関数(約30行)
  • 移流拡散方程式の時間積分関数(約20行)
  • 壁面渦度の更新関数(約15行)
  • メインの時間ループ(約20行)

Re=100のLid-driven cavityなら $64 \times 64$ 格子で十分な精度が得られる。計算時間はノートPCで数秒程度だよ。


🧑‍🎓

まずはそのくらいの規模から始めて、理解を深めたいですね。


🎓

その姿勢はとても良い。自分でコードを書くと、離散化スキームの選択が結果にどう影響するか体感できる。教科書で読むだけでは身につかない感覚が養えるんだ。

Coffee Break よもやま話

F1と空力の戦い

F1マシンは時速300kmで走ると、車重と同じくらいのダウンフォース(下向きの空力的な力)を発生します。つまり理論上、天井に貼り付けて走れる! チームは数千CPU時間のCFDシミュレーションを毎週実行し、フロントウィングの角度を0.1°単位で最適化しています。F1はCAEの技術力がそのまま順位に直結する世界です。

離散化手法の詳細解説

空間離散化における手法選択が数値精度・安定性・計算コストに与える影響を詳述する。

風上差分(Upwind)

1次風上: 数値拡散が大きいが安定。2次風上: 精度向上するが振動のリスク。高レイノルズ数流れでは必須。

中心差分(Central Differencing)

2次精度だが、Pe数 > 2で数値振動が発生。低レイノルズ数の拡散支配流れに適する。

TVDスキーム(MUSCL、QUICK等)

リミッタ関数により数値振動を抑制しつつ高精度を維持。衝撃波や急勾配の捕捉に有効。

有限体積法 vs 有限要素法

FVM: 保存則を自然に満足。CFDの主流。FEM: 複雑形状・マルチフィジックスに有利。SPH等のメッシュフリー法も発展中。

マトリクスソルバーの選定指針

問題規模と特性に応じた最適なソルバー選択のガイドライン。

ソルバー種別詳細・推奨条件
圧力-速度連成(SIMPLE系)SIMPLE: 標準的だが収束が遅い。SIMPLEC: 圧力補正の緩和が改善。PISO: 非定常問題に適する。
連立系ソルバーAMG(代数的マルチグリッド): 大規模問題の標準。ILU前処理: メモリ効率良好。ブロックGauss-Seidel: 連成系に有効。
DOF別推奨〜10⁵セル: SIMPLE+AMG、10⁵〜10⁷セル: SIMPLEC+AMG+並列、10⁷セル〜: 結合型ソルバー(Coupled Solver)を検討

時間積分法と収束判定

ソルバー内部の制御パラメータと収束判定基準について記述する。

CFL条件(クーラン数)

陽解法: CFL ≤ 1が安定条件。陰解法: CFL > 1でも安定だが、精度と反復回数に影響。LES: CFL ≈ 1を推奨。物理的意味: 1タイムステップで情報が1セル以上進まないこと。

残差モニタリング

連続の式・運動量・エネルギーの各残差が3〜4桁低下で収束と判断。質量保存の残差は特に重要。

緩和係数

圧力: 0.2〜0.3、速度: 0.5〜0.7が一般的な初期値。発散する場合は緩和係数を下げる。収束後は上げて加速。

非定常計算の内部反復

各タイムステップ内で定常解に収束するまで反復。内部反復数: 5〜20回が目安。残差がタイムステップ間で変動する場合は時間刻みを見直す。

数値解法の直感的理解

FVMのイメージ

有限体積法は「会計帳簿」に似ている。各セル(口座)について「入ってくる量」と「出ていく量」の収支を厳密に管理する。隣のセルに流れ出た量は、そのセルに流れ込む量と完全に一致する——これが「保存性」であり、流体解析で質量やエネルギーが勝手に増減しないことを保証する。

SIMPLE法のたとえ

SIMPLE法は「交互に調整する」手法。まず速度を仮に求め(予測ステップ)、その速度で質量保存が満たされるよう圧力を補正し(補正ステップ)、補正された圧力で速度を修正する——このキャッチボールを繰り返して正解に近づく。2人で棚を水平にする作業に似ている:片方が高さを合わせ、もう片方がバランスを取り、これを交互に繰り返す。

風上差分のたとえ

風上差分は「川の流れに立って上流の情報を重視する」手法。川の中にいる人が下流を見ても水の出所は分からない——上流の情報が下流を決めるという物理を反映した離散化手法。精度は1次だが、流れの方向を正しく捕捉するため安定性が高い。

CFDメッシュの品質管理や乱流モデルの選定に悩む時間を、もっと創造的な設計作業に使えたら。 — Project NovaSolverはそんな実務者の声から生まれました。

流れ関数の実務で感じる課題を教えてください

Project NovaSolverは、CAEエンジニアが日々直面する課題——セットアップの煩雑さ、計算コスト、結果の解釈——の解決を目指しています。あなたの実務経験が、より良いツール開発の原動力になります。

実務課題アンケートに回答する →