流れ関数
理論と物理
流れ関数の定義
先生、流れ関数ってどういう意味があるんですか? 名前はよく聞くんですけど。
流れ関数 $\psi$ は2次元非圧縮流れにおいて、連続の式を自動的に満たす速度場を与えるスカラー関数だ。定義はこうなる。
この定義から連続の式 $\frac{\partial u}{\partial x} + \frac{\partial v}{\partial y} = 0$ が恒等的に成り立つことが確認できるよ。
恒等的に、ということはメッシュの粗さとか関係なく厳密に成り立つんですか?
解析的にはそうだ。数値計算では離散化誤差が入るけれど、流れ関数で定式化すれば質量保存は構造的に保証される。これがprimitive変数($u, v, p$)法に対する流れ関数法の大きなメリットなんだ。
流線との関係
流れ関数と流線にはどんな関係があるんですか?
流れ関数の等値線が流線に一致する。つまり $\psi = \text{const.}$ の曲線に沿って流体粒子が移動する。さらに2つの流線 $\psi_1$ と $\psi_2$ の間を通過する単位奥行きあたりの体積流量は
で与えられる。これが流れ関数の物理的な意味だよ。
流れ関数の値の差がそのまま流量になるんですね。便利だなあ。
壁面は流線の一つだから $\psi = \text{const.}$ を壁面の境界条件として使える。例えば静止壁面なら $\psi = 0$ と置くことが多い。
流れ関数のPoisson方程式
渦度と組み合わせて使うんですよね?
渦度 $\omega$ の定義 $\omega = \frac{\partial v}{\partial x} - \frac{\partial u}{\partial y}$ に流れ関数の定義を代入すると、Poisson方程式が得られる。
つまり渦度分布が分かれば、この楕円型方程式を境界条件のもとで解くことで流れ関数(そして速度場)が決まるんだ。
非粘性・非回転流れ($\omega = 0$)だとどうなりますか?
ラプラス方程式 $\nabla^2 \psi = 0$ になる。これはポテンシャル流れの流れ関数で、速度ポテンシャル $\phi$ のラプラス方程式と双対関係にある。$\psi$ と $\phi$ の等値線は直交するんだ。
Stokesの流れ関数(軸対称)
3次元でも流れ関数って使えるんですか?
一般の3次元流れでは流れ関数は定義できない。ただし軸対称流れではStokesの流れ関数が定義できる。円筒座標 $(r, z)$ で
$$ u_z = \frac{1}{r} \frac{\partial \Psi}{\partial r}, \quad u_r = -\frac{1}{r} \frac{\partial \Psi}{\partial z} $$
3次元でも流れ関数って使えるんですか?
一般の3次元流れでは流れ関数は定義できない。ただし軸対称流れではStokesの流れ関数が定義できる。円筒座標 $(r, z)$ で
注意点は2次元の $\psi$ と違って $\Psi$ の次元が $[m^3/s]$ になること。2つの流面の間の体積流量は $Q = 2\pi(\Psi_2 - \Psi_1)$ だ。
パイプ内の流れとかノズル流れに使えそうですね。
まさにその通りで、軸対称ジェットやパイプ流れの解析で重宝する。Hagen-Poiseuille流れの流れ関数は $\Psi = \frac{U_0}{2R^2}(R^2 r^2 - r^4/2)$ と解析的に求まるから、検証問題に使えるよ。
適用範囲と限界
流れ関数法が使えないケースってどんなときですか?
主な制約は以下だ。
- 一般の3次元流れ: スカラー流れ関数は定義不可。ベクトルポテンシャルで拡張可能だが実用性は低い
- 圧縮性流れ: 非圧縮を前提としているため適用不可。圧縮性では $\rho u = \partial \psi / \partial y$ と修正定義すれば使えるが複雑になる
- 多相流: 界面を跨ぐ流れ関数の連続性条件が複雑
- 3次元乱流: 実用的なCFDではprimitive変数法(SIMPLE系など)が主流
つまり2次元非圧縮流れでの教育・研究用途が主な活躍の場ということですね。
その認識で正しい。ただし計算の堅牢性(質量保存の構造的保証)は魅力的なので、2次元ベンチマーク問題の検証には今でもよく使われるよ。
流線関数の発明——ラグランジュが導いた2次元流れの美しい描写(1781年)
流線関数(Stream Function)ψの概念はフランスの数学者ジョゼフ=ルイ・ラグランジュ(Joseph-Louis Lagrange)が1781年の論文で導入したとされている。2次元非圧縮流れでは速度成分u=∂ψ/∂y, v=-∂ψ/∂xと定義することで連続の方程式を自動的に満足させる美しい数学的工夫だ。ψ=const.の等値線が流線に一致するため、流れの可視化にも直接使える。ベルヌーイの定理との組み合わせで翼型の揚力計算に使われるポテンシャル流理論(ψとφ(速度ポテンシャル)の複素関数)の核心をなす概念でもある。現代CFDでは圧力-速度結合法が主流だが、ψの等値線プロットは依然として流れ場の物理的理解を深める最も直感的な可視化手段の一つだ。
各項の物理的意味
- 時間項 $\partial(\rho\phi)/\partial t$:蛇口をひねった瞬間を思い浮かべてください。最初は水がバタバタと不安定に出て、しばらくすると安定した流れになりますよね? この「変化している最中」を記述するのが時間項です。心臓の拍動で血流が脈打つのも、エンジンのバルブが開閉するたびに流れが変動するのも、すべて非定常現象。では定常解析とは? 「十分時間が経って流れが落ち着いた後」だけを見る——つまりこの項をゼロにする。計算コストが大幅に下がるため、まず定常で解いてみるのがCFDの基本戦略です。
- 対流項 $\nabla \cdot (\rho \mathbf{u} \phi)$:川に落ち葉を落としたらどうなりますか? 流れに乗って下流に運ばれますよね。これが「対流」——流体の動きが物を運ぶ効果です。暖房の温風が部屋の端まで届くのも、空気という「運び屋」が熱を対流で輸送しているから。ここが面白いところ——この項は「速度×速度」を含むため非線形です。つまり、流れが速くなるとこの項が急激に強くなり、制御が難しくなる。これが乱流の根本原因です。よくある勘違い:「対流と伝導は同じようなもの」→ 全然違います! 対流は流れが運ぶ、伝導は分子が伝える。桁違いの効率差があります。
- 拡散項 $\nabla \cdot (\Gamma \nabla \phi)$:コーヒーにミルクを入れて放置したことはありますか? かき混ぜなくても、しばらく経つと自然に混ざりますよね。あれが分子拡散です。では次の質問——ハチミツとお水、どちらが流しやすいですか? 当然お水ですよね。ハチミツは粘性($\mu$)が高いから流れにくい。粘性が大きいと拡散項が強くなり、流体は「もったりした」動きになります。レイノルズ数が小さい流れ(ゆっくり、ドロドロ)では拡散が支配的。逆にRe数が大きい流れでは対流が圧倒し、拡散は脇役になります。
- 圧力項 $-\nabla p$:注射器のピストンを押すと、液体が針先から勢いよく出ますよね? なぜでしょう? ピストン側が高圧、針先が低圧——この圧力差が流体を押す力になるからです。ダムの放水も同じ原理。天気図で等圧線がギュッと密になっている場所では? そう、強風が吹きます。「圧力差があるところに流れが生まれる」——これがナビエ-ストークス方程式の圧力項の物理的意味。ここでの勘違いポイント:CFDの「圧力」は絶対圧ではなくゲージ圧のことが多い。圧縮性解析に切り替えたとたんに結果がおかしくなる場合、絶対圧/ゲージ圧の混同が原因かもしれません。
- ソース項 $S_\phi$:暖められた空気が上に昇る——なぜでしょう? 周囲より軽く(密度が低く)なったから、浮力で押し上げられるのです。この浮力はソース項として方程式に追加されます。他にも、ガスコンロの炎で化学反応熱が発生する、工場の電磁ポンプで金属溶湯にローレンツ力がかかる…これらはすべて「外部から流体にエネルギーや力を注入する」作用であり、ソース項で表現します。ソース項を忘れるとどうなるか? 自然対流の解析で浮力を入れ忘れると、流体は一切動かない——冬の部屋で暖房をつけたのに暖かい空気が上に行かない、という物理的にありえない結果になります。
仮定条件と適用限界
- 連続体仮定:クヌッセン数 Kn < 0.01(分子平均自由行程 ≪ 代表長さ)で成立
- ニュートン流体仮定:せん断応力と歪み速度が線形関係(非ニュートン流体では粘度モデルが必要)
- 非圧縮性仮定(Ma < 0.3の場合):密度を一定として扱う。マッハ数0.3以上では圧縮性効果を考慮
- ブシネスク近似(自然対流):密度変化を浮力項のみで考慮し、他の項では一定密度を使用
- 適用外ケース:希薄気体(Kn > 0.1)、超音速・極超音速流れ(衝撃波捕捉が必要)、自由表面流れ(VOF/Level Set等が必要)
次元解析と単位系
| 変数 | SI単位 | 注意点・換算メモ |
|---|---|---|
| 速度 $u$ | m/s | 入口条件で体積流量から換算する際、断面積の単位に注意 |
| 圧力 $p$ | Pa | ゲージ圧と絶対圧の区別。圧縮性解析では絶対圧を使用 |
| 密度 $\rho$ | kg/m³ | 空気: 約1.225 kg/m³@20°C、水: 約998 kg/m³@20°C |
| 粘性係数 $\mu$ | Pa·s | 動粘性係数 $\nu = \mu/\rho$ [m²/s] との混同に注意 |
| レイノルズ数 $Re$ | 無次元 | $Re = \rho u L / \mu$。層流/乱流遷移の判定指標 |
| CFL数 | 無次元 | $CFL = u \Delta t / \Delta x$。時間刻みの安定性に直結 |
数値解法と実装
渦度-流れ関数法の実装
渦度-流れ関数法を実際にコードで実装するにはどうすればいいですか?
アルゴリズムの流れはこうだ。各タイムステップで以下を繰り返す。
渦度-流れ関数法を実際にコードで実装するにはどうすればいいですか?
アルゴリズムの流れはこうだ。各タイムステップで以下を繰り返す。
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点差分は
速度の中心差分は
渦度方程式の移流項はどう離散化するんですか?
中心差分だと格子Reynolds数 $Re_h = |u|h/\nu$ が2を超えると振動する。実用的な選択肢を比較しよう。
| スキーム | 精度 | 数値拡散 | 安定性 | 備考 |
|---|---|---|---|---|
| 中心差分 | 2次 | なし | $Re_h < 2$ | 振動の可能性 |
| 1次風上 | 1次 | 大 | 無条件 | 渦が消える |
| QUICK | 3次 | 小 | $Re_h < 8/3$ | バランスが良い |
| Kawamura-Kuwahara | 3次 | 極小 | 良好 | コンパクト差分 |
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で数秒程度だよ。
まずはそのくらいの規模から始めて、理解を深めたいですね。
その姿勢はとても良い。自分でコードを書くと、離散化スキームの選択が結果にどう影響するか体感できる。教科書で読むだけでは身につかない感覚が養えるんだ。
流線関数-渦度法——NSEの代替定式化とその現代的復権
流線関数(ψ)と渦度(ω)を未知数とする「ψ-ω定式化」は、圧力を陽に求める必要がなく2次元非圧縮流れを2変数の方程式系で解ける利点がある。1970〜80年代はu-v-p(速度-圧力)定式化よりシンプルで人気があったが、境界条件設定の難しさから一時下火になった。しかし近年、機械学習(Physics-Informed Neural Networks: PINN)による流れ場推定で再注目されている——PINNではψ-ω定式化の方が速度-圧力定式化よりネットワーク収束が速いことが報告されているためだ。また3次元への拡張が困難という弱点も、クラウド並列計算の普及で実用的に対処できるようになっており、特定の2次元解析では依然として有効な選択肢だ。
風上差分(Upwind)
1次風上: 数値拡散が大きいが安定。2次風上: 精度向上するが振動のリスク。高レイノルズ数流れでは必須。
中心差分(Central Differencing)
2次精度だが、Pe数 > 2で数値振動が発生。低レイノルズ数の拡散支配流れに適する。
TVDスキーム(MUSCL、QUICK等)
リミッタ関数により数値振動を抑制しつつ高精度を維持。衝撃波や急勾配の捕捉に有効。
有限体積法 vs 有限要素法
FVM: 保存則を自然に満足。CFDの主流。FEM: 複雑形状・マルチフィジックスに有利。SPH等のメッシュフリー法も発展中。
CFL条件(クーラン数)
陽解法: CFL ≤ 1が安定条件。陰解法: CFL > 1でも安定だが、精度と反復回数に影響。LES: CFL ≈ 1を推奨。物理的意味: 1タイムステップで情報が1セル以上進まないこと。
残差モニタリング
連続の式・運動量・エネルギーの各残差が3〜4桁低下で収束と判断。質量保存の残差は特に重要。
緩和係数
圧力: 0.2〜0.3、速度: 0.5〜0.7が一般的な初期値。発散する場合は緩和係数を下げる。収束後は上げて加速。
非定常計算の内部反復
各タイムステップ内で定常解に収束するまで反復。内部反復数: 5〜20回が目安。残差がタイムステップ間で変動する場合は時間刻みを見直す。
SIMPLE法のたとえ
SIMPLE法は「交互に調整する」手法。まず速度を仮に求め(予測ステップ)、その速度で質量保存が満たされるよう圧力を補正し(補正ステップ)、補正された圧力で速度を修正する——このキャッチボールを繰り返して正解に近づく。2人で棚を水平にする作業に似ている:片方が高さを合わせ、もう片方がバランスを取り、これを交互に繰り返す。
風上差分のたとえ
風上差分は「川の流れに立って上流の情報を重視する」手法。川の中にいる人が下流を見ても水の出所は分からない——上流の情報が下流を決めるという物理を反映した離散化手法。精度は1次だが、流れの方向を正しく捕捉するため安定性が高い。
実践ガイド
CFDツールでの流れ関数の活用
商用CFDツールでは流れ関数ってどう使われるんですか? 直接解いているわけではないですよね。
その通り。Ansys FluentやSTAR-CCM+は原始変数法(SIMPLE系)でN-S方程式を解く。しかし後処理で流れ関数を計算して流れの構造を分析するのは非常に有効だ。
- Ansys Fluent: Custom Field Function で $\psi$ を定義できないが、Streamlines(流線)の可視化は標準機能。Pathlines やParticle Tracks で流体粒子の軌跡を追跡可能
- STAR-CCM+: Stream Function をDerived Part として計算可能。2D解析では直接的に流れ関数等値線をプロットできる
- OpenFOAM:
postProcess -func streamFunctionで $\psi$ フィールドを出力可能(2D問題のみ)
ParaViewで流線を描くこともできますよね?
ParaViewのStream Tracerフィルターで流線を可視化できる。Seed Points の配置が重要で、関心領域を横切るように直線上に等間隔で配置するのが基本だ。渦の中心を通るように配置すれば閉じた流線が得られる。
典型的なベンチマーク問題
流れ関数法の検証にはどんな問題を使うんですか?
代表的なベンチマークを紹介しよう。
Lid-driven cavity(蓋駆動キャビティ)
正方形領域の上壁が速度 $U$ で移動。Ghia et al.(1982)の参照データが標準。Re=100〜10000 の結果が報告されている。
| Re | 主渦 $\psi_{min}/(UL)$ | 主渦中心 $(x/L, y/L)$ |
|---|---|---|
| 100 | $-0.1034$ | (0.6172, 0.7344) |
| 1000 | $-0.1179$ | (0.5313, 0.5625) |
| 5000 | $-0.1190$ | (0.5117, 0.5352) |
後向きステップ流れ
ステップ高さ $h$ の後ろに剥離再付着流れが形成される。再付着長さ $x_r/h$ が検証指標。Re=100 で $x_r/h \approx 3.0$、Re=800 で $x_r/h \approx 11.3$ が標準値。
Taylor-Green渦
解析解 $\psi = -\cos(x)\cos(y) e^{-2\nu t}$ が既知で、時間積分精度の検証に最適。エネルギー減衰率が $e^{-4\nu t}$ に従うことを確認する。
自分のコードの検証にはまずLid-driven cavityから始めるのが良さそうですね。
そうだね。Re=100から始めて、格子を $32^2$、$64^2$、$128^2$ と細かくしてメッシュ収束性を確認する。Ghiaの参照データとキャビティ中心線上の速度プロファイルを比較するのが定番だ。
メッシュ設計の指針
流れ関数法でのメッシュ設計のコツを教えてください。
2次元問題でのメッシュ設計指針をまとめよう。
- 壁面近傍: 境界層厚さ $\delta \sim L/\sqrt{Re}$ に最低10セル配置。幾何級数的に壁から離れる方向に膨張させる
- 剥離・再付着領域: 流れ方向にも十分な解像度が必要。セルアスペクト比は5以下
- 渦構造: 渦核の直径に10セル以上。渦が移動する領域全体で均一な解像度を確保
- 遠方境界: 流入・流出境界は関心領域から十分離す。閉空間問題なら不要
構造格子と非構造格子のどちらが良いですか?
流れ関数法は有限差分法と組み合わせることが多く、その場合は直交構造格子が自然だ。曲線境界には体に合った座標変換(body-fitted coordinate)を適用する。有限要素法で流れ関数を解く場合は三角形非構造格子も使えるが、精度は六面体構造格子に劣る傾向がある。
結果の検証手順
解析結果が正しいかどうかをどう確認すればいいですか?
以下のチェックリストを推奨する。
1. 質量保存: 流れ関数法では構造的に保証されるが、数値誤差の影響を確認。流入流量 = 流出流量を検証
2. メッシュ収束性: 3水準以上のメッシュでRichardson外挿。理論上の収束次数(2次精度なら $O(h^2)$)と一致するか確認
3. 参照データとの比較: Ghia et al. のようなベンチマークデータとの定量比較
4. 対称性の確認: 対称な問題設定で解が対称になるか
5. エネルギー収支: Taylor-Green渦などで運動エネルギーの時間変化が解析解と一致するか
Richardson外挿ってどうやるんですか?
格子間隔 $h_1 = h$, $h_2 = 2h$, $h_3 = 4h$ の3水準で計算し、解 $f_1, f_2, f_3$ から収束次数 $p = \ln\frac{f_3 - f_2}{f_2 - f_1}/\ln 2$ を求める。外挿値は $f_{exact} \approx f_1 + \frac{f_1 - f_2}{2^p - 1}$ だ。GCI(Grid Convergence Index)を用いれば不確かさの定量化もできるよ。
流線可視化で設計を変えた事例——翼型失速のCFD流線解析と風洞の共鳴
航空機翼の失速(Stall)解析では、流線(Streamline)の剥離点と再付着点の変化を追うことが設計改善の核心だ。ある小型航空機メーカーの事例では、迎角14°での流線CFD解析(RANS-SA)で翼前縁剥離泡(Laminar Separation Bubble)が後縁まで拡大する様子を可視化し、失速時の揚力急減のメカニズムを特定した。これを受けて前縁スラット形状を最適化し、失速迎角を2°改善することに成功した。流線可視化は単なる見た目以上の情報を持っており、よどみ点・再循環域・流れの収束発散を定量的に評価するCFD後処理の基本ツールとして、設計エンジニアへの説明資料にも広く活用されている。
解析フローのたとえ
CFDの解析フローは「水族館の水槽を設計する」感覚で考えてみてください。まず水槽の形を決め(計算領域)、水の入り口と出口を設計し(境界条件)、ポンプの強さを設定する(流量条件)。魚がどう泳ぐか見たければ粒子追跡。水温が気になれば熱解析を追加。…どうですか? 意外と直感的ではありませんか?
初心者が陥りやすい落とし穴
「y+って何ですか?」——この質問が出たら要注意。壁面近くのメッシュ解像度を表すy+は、CFDの結果精度を左右する最重要パラメータの1つ。壁関数を使うなら30〜300、壁を完全に解像するなら1以下。これを確認せずに「摩擦抵抗が合わない!」と悩む人がとても多い。体温計の先端をちゃんと脇に挟まないで「熱がないのに37.5度って出た!」と慌てているようなものです。
境界条件の考え方
入口の境界条件は「蛇口をどのくらい開けるか」と同じ。ちょろちょろ出すか(低速)、全開にするか(高速)。でもCFDではもう一つ——「どのくらい暴れた水を出すか」(乱流強度)も指定する必要があります。蛇口の開け方を間違えると、下流のシンク全体の流れが変わりますよね? CFDでも入口条件のミスは下流全体に波及します。
ソフトウェア比較
流れ関数に関連するCFDツール機能
流れ関数を活用する観点で、各CFDツールの特徴を教えてください。
流れ関数を直接ソルバーに使用するツールは限られるが、後処理での流線・流跡線の可視化や2D解析機能という観点で比較しよう。
| ツール | 2D専用ソルバー | 流線可視化 | 流れ関数出力 | 軸対称解析 |
|---|---|---|---|---|
| Ansys Fluent | 2D/軸対称モード | Pathlines, Streamlines | UDFで可能 | ○(swirl含む) |
| STAR-CCM+ | 2Dモード | Streamlines | Derived Part | ○ |
| OpenFOAM | 2Dメッシュ(1セル厚) | postProcess | streamFunction | ○ |
| COMSOL | 2D/軸対称 | Streamline Plot | 組込み変数 | ○ |
COMSOLが流れ関数を直接変数として持っているのは面白いですね。
COMSOLのCFDモジュールでは2D解析時に流れ関数 $\psi$ を内部変数として計算し、spf.Psi(Single-Phase Flowモジュール)として参照できる。流れ関数の等値線プロットが標準機能で提供されているのは教育用途に便利だよ。
2D解析の設定比較
2D問題を各ツールで解くときの設定の違いを教えてください。
典型的なLid-driven cavity問題(Re=1000)の設定を比較しよう。
Ansys Fluent
General > 2Dを選択、Planarモード- Viscous Model: Laminar
- Spatial Discretization: Second Order Upwind (Momentum), PRESTO! (Pressure)
- Pressure-Velocity Coupling: SIMPLE
- 格子: $128 \times 128$ の均一四角形メッシュ
STAR-CCM+
- 2D Mesher で四角形メッシュ生成
- Physics: Steady, Laminar, Incompressible
- Discretization: Second Order Upwind
- Solver: Segregated Flow (SIMPLE-type)
OpenFOAM
blockMeshで1セル厚の3Dメッシュを作成(emptyパッチタイプで2D化)- ソルバー:
icoFoam(非定常層流)またはsimpleFoam(定常) - fvSchemes:
div(phi,U)にlinearUpwindを指定
OpenFOAMの「1セル厚の3Dメッシュで2Dを表現する」というのが独特ですね。
OpenFOAMは本質的に3Dソルバーだから、2D問題はz方向に1セルだけ用意して前後面を empty 境界条件にすることで実現する。少し面倒だが、3D問題への拡張がシームレスにできるメリットがある。
軸対称解析の比較
Stokesの流れ関数が活きる軸対称解析は、各ツールでどう設定するんですか?
パイプ拡大部の層流剥離問題を例に見てみよう。
- Fluent:
General > 2D Axisymmetric、対称軸をx軸に設定。axis境界条件を適用 - STAR-CCM+:
Two-Dimensional Axisymmetricフィジックスモデルを選択 - OpenFOAM:
wedgeメッシュタイプ(5度程度のくさび形)で軸対称を表現。wedgeパッチを使用 - COMSOL:
Model Wizard > 2D Axisymmetricで自動設定。r-z 平面でモデリング
OpenFOAMのwedgeメッシュはちょっとクセがありますね。
blockMeshDict で扇型メッシュを記述する必要がある。角度は5度が推奨で、あまり大きいと近似精度が落ちる。慣れるまではcfMeshのcartesian2DMeshでフラット2Dメッシュを作り、extrudeMeshでwedge化する方が楽だよ。
選定ガイドライン
結局、流れ関数を使った解析にはどのツールがおすすめですか?
用途別の推奨をまとめよう。
| 用途 | 推奨ツール | 理由 |
|---|---|---|
| 教育・学習 | COMSOL or 自作コード | 流れ関数が直接扱える、可視化が直感的 |
| 2Dベンチマーク検証 | OpenFOAM | 無償、postProcessで$\psi$出力可能 |
| 軸対称工業問題 | Fluent/STAR-CCM+ | 2D axisymmetric モードが成熟、GUI操作が楽 |
| 研究(カスタム定式化) | OpenFOAM | ソルバーの自作・改造が容易 |
| 流線の高品質可視化 | Tecplot/ParaView | 専門可視化ツールの流線描画機能が優秀 |
流れ関数法そのものを使いたいなら自作コードかCOMSOLで、工業的な2D/軸対称問題ならFluentかSTAR-CCM+ということですね。
そうだね。現代のCFDでは流れ関数法を直接使うことは少ないが、流れ関数の概念を理解していることは結果の解釈や検証において非常に重要だ。
流れ関数ψ——「可視化専用」で使われてきた意外な歴史
商用CFDツールでは、流れ関数ψはもっぱら「結果の可視化」に使われてきました。ANSYSやStarCCM+では、流線の描画にψを内部計算しますが、支配方程式の解変数としては速度・圧力を使うのが主流。ところが、小規模2次元問題や教育用コードでは今でも「流れ関数—渦度法(ψ-ω法)」が使われており、圧力変数を消去できるため、速度・圧力連成問題特有の収束難を回避できる。「古い手法」に見えて、実は特定の問題では今も最速のアプローチです。
選定で最も重要な3つの問い
- 「何を解くか」:流れ関数に必要な物理モデル・要素タイプが対応しているか。例えば、流体ではLES対応の有無、構造では接触・大変形の対応能力が差になる。
- 「誰が使うか」:初心者チームならGUIが充実したツール、経験者ならスクリプト駆動の柔軟なツールが適する。自動車のAT車(GUI)とMT車(スクリプト)の違いに似ている。
- 「どこまで拡張するか」:将来の解析規模拡大(HPC対応)、他部門への展開、他ツールとの連携を見据えた選択が長期的なコスト削減につながる。
先端技術
ベクトルポテンシャルによる3D拡張
3次元で流れ関数に相当するものはないんですか?
3次元非圧縮流れではベクトルポテンシャル $\mathbf{A}$ を $\mathbf{u} = \nabla \times \mathbf{A}$ と定義すると、$\nabla \cdot \mathbf{u} = 0$ が恒等的に満たされる。ただし $\mathbf{A}$ にはゲージ自由度があり、例えばCoulombゲージ $\nabla \cdot \mathbf{A} = 0$ を課す必要がある。
実用的に使われているんですか?
CFDではあまり使われないが、MHD(磁気流体力学)では磁場のベクトルポテンシャルが標準的に使われる。流体のベクトルポテンシャルは3成分のベクトルなのでスカラー圧力を消す利点が薄く、primitive変数法が好まれる。ただし渦度ベクトルポテンシャル法は一部の研究で使われており、特にスペクトル法との相性が良いんだ。
Hamiltonian流体力学と流れ関数
流れ関数に関連する先端的な理論研究はありますか?
2次元非圧縮非粘性流れでは渦度方程式がHamiltonian系として定式化できる。流れ関数 $\psi$ がHamiltonianの役割を果たし、
ここで $\{\cdot, \cdot\}$ はポアソン括弧だ。この構造を保存するシンプレクティック積分法を使えば、エンストロフィーやエネルギーの長時間保存性が格段に向上する。
通常のRunge-Kutta法とどのくらい違いますか?
$10^5$ ステップ程度の長時間積分で、RK4法ではエネルギーが数%ドリフトするのに対し、シンプレクティック法ではドリフトがほぼゼロに保たれる。木星の大赤斑のような超長時間の渦構造シミュレーションで重要になる。
トポロジカル流体力学
最近のトレンドで面白い研究はありますか?
トポロジカル流体力学は流線・渦線のトポロジー(結び目、絡み合い)を研究する分野だ。3次元流れでは渦管が結び目構造を形成し得る。渦の交差再結合(vortex reconnection)は流れ関数やベクトルポテンシャルの特異点として記述される。
流れ関数の等値線構造の変化(分岐)は位相的流れ解析(topological flow analysis)の基礎だ。流れ関数の鞍点が合流・分裂するとき、流れパターンが定性的に変化する。これはGreenらの「Topological Fluid Mechanics」の研究で体系化されているよ。
機械学習による流れ場再構成
AIと流れ関数の組み合わせはありますか?
最近注目されているのがPINN(Physics-Informed Neural Network)による流れ関数の学習だ。ニューラルネットワークの出力を流れ関数 $\psi$ とすれば、$u = \partial\psi/\partial y$, $v = -\partial\psi/\partial x$ とすることで質量保存が構造的に保証される。
ニューラルネットワークの出力を流れ関数にするのは賢いですね。
Raissi et al.(2019)が提案した手法で、PIVの欠損データ補完や超解像に応用されている。流れ関数経由で質量保存を組み込むことで、データが少ない場合でも物理的に整合的な予測が得られるんだ。
大気・海洋科学における準地衡流モデル
流れ関数って気象学でも使われるんですか?
大気・海洋科学では準地衡流(quasi-geostrophic)モデルが流れ関数ベースで定式化される。地衡流の流れ関数は $\psi = p/(\rho f)$($f$ はコリオリパラメータ)で、準地衡渦位方程式
がRossby波や中規模渦の力学を記述する。数値気象予報の基礎的なモデルとして今でも教育・研究で広く使われているよ。
流れ関数は2次元の基礎概念だと思っていましたが、大気・海洋の大スケール現象でも現役なんですね。
地球の大気と海洋は水平スケールが鉛直スケールよりずっと大きいから、実質的に2次元に近い。そのため流れ関数ベースの定式化が非常に有効なんだ。
流れ関数と機械学習——「物理制約型NN」の核心
最近注目の Physics-Informed Neural Networks (PINN) では、流れ関数が非常に重要な役割を果たします。非圧縮流れでは流れ関数 ψ を出力変数にすると、連続の式を自動的に満たす(u=∂ψ/∂y、v=−∂ψ/∂x)。これにより学習の拘束条件が一つ減り、収束が劇的に速くなる。2020年代に入ってから、この「流れ関数ベースのPINN」論文が急増しており、150年前のラグランジュが考案した概念が最先端のAI流体解析の道具として蘇っています。
トラブルシューティング
渦度-流れ関数法の典型的トラブル
渦度-流れ関数法のコードを書いているんですが、なかなかうまくいきません。よくあるトラブルを教えてください。
代表的な問題と対策をまとめよう。
1. Poisson方程式が収束しない
SOR法でPoisson方程式を解いているんですが、何万回反復しても収束しません。
以下を順にチェックしてくれ。
- 緩和係数の確認: SORの最適緩和係数は $\omega_{SOR} = \frac{2}{1 + \sin(\pi h / L)}$ で近似できる。$N=100$ のとき $\omega_{SOR} \approx 1.94$ だ。$\omega > 2$ だと発散する
- 境界条件の一貫性: 全境界で $\psi$ の値を合計したとき、質量保存と矛盾しないか確認
- 残差の定義: 相対残差 $\|r\|/\|b\| < 10^{-6}$ で判定。絶対残差だとスケーリングの影響を受ける
- 初期推定: 前のタイムステップの解を初期推定に使う(warm start)ことで反復回数を大幅に削減できる
2. 壁面渦度で振動が発生する
Thomの公式で壁面渦度を計算すると、値がステップごとに振動するんです。
壁面渦度の更新とPoisson方程式の解が相互依存しているため、不安定になることがある。対策は
- 副反復(sub-iteration): 各タイムステップ内でPoisson方程式と壁面渦度の更新を3〜5回繰り返す
- under-relaxation: 壁面渦度の更新に緩和を適用。$\omega_{wall}^{new} = \alpha \omega_{wall}^{calc} + (1-\alpha) \omega_{wall}^{old}$、$\alpha = 0.5$ 程度
- 陰的処理: 壁面渦度をPoisson方程式に陰的に組み込む(Napolitano et al., 1999)
3. 高Reynolds数で発散する
Re=1000以上にすると計算が発散してしまいます。
高Re数では移流項が支配的になり、以下の問題が発生する。
渦度-流れ関数法のコードを書いているんですが、なかなかうまくいきません。よくあるトラブルを教えてください。
代表的な問題と対策をまとめよう。
SOR法でPoisson方程式を解いているんですが、何万回反復しても収束しません。
以下を順にチェックしてくれ。
Thomの公式で壁面渦度を計算すると、値がステップごとに振動するんです。
壁面渦度の更新とPoisson方程式の解が相互依存しているため、不安定になることがある。対策は
Re=1000以上にすると計算が発散してしまいます。
高Re数では移流項が支配的になり、以下の問題が発生する。
| 症状 | 原因 | 対策 |
|---|---|---|
| 渦度にウィグル(波状振動) | 中心差分 + 高$Re_h$ | 風上差分 or QUICK に切替 |
| 全体が発散 | CFL条件違反 | $\Delta t$ を CFL < 0.5 に調整 |
| 壁面近傍で不安定 | メッシュ不足 | 壁面近傍のメッシュを2倍に細分化 |
| 定常解に収束しない | 流れが本質的に非定常 | 非定常計算に切替(Re>10000で典型的) |
商用ツールでの流線可視化トラブル
Fluentで流線を描いたら、壁面を突き抜けたり途中で消えたりします。
これは流線の積分が数値誤差で不正確になるケースだ。
- Maximum Steps: デフォルト値(500)が小さすぎる場合がある。2000〜5000 に増やす
- Step Size: デフォルトのままだと粗い。0.001〜0.01 に減らす
- 壁面突き抜け: メッシュ品質が悪い領域で発生。セルのnon-orthogonality > 70度のセルがないか確認
- Pathlines vs Streamlines: 非定常流れでは Streamlines(瞬間の流れ場)と Pathlines(粒子の軌跡)は一致しない。目的に応じて使い分けること
OpenFOAMの streamFunction postProcess で「Stream function is not available for 3D cases」というエラーが出ました。
OpenFOAMのstreamFunction は2Dメッシュ(1セル厚、empty パッチ使用)でのみ動作する。3D問題では使えない。代わりにParaViewの Stream Tracer フィルタを使って流線を可視化しよう。
よくある物理的な間違い
物理的な設定ミスでおかしな結果になることもありますよね?
流れ関数に関連する典型的な物理的ミスを挙げよう。
- 境界条件の過不足: Poisson方程式は楕円型なので全境界にDirichlet条件を課す必要がある。流出境界に$\psi$の値を指定し忘れると解が不定になる
- 流入流量と壁面条件の矛盾: 流入 $\psi$ の値が壁面の $\psi$ と矛盾すると質量が保存されない
- Reynolds数の定義: $Re = UL/\nu$ の特性長さ $L$ と特性速度 $U$ の定義を問題設定と一致させること。Lid-driven cavityでは $L$ = キャビティ辺長、$U$ = 蓋の速度
- 無次元化の不整合: コードを無次元化して実装する場合、全ての変数が同じ基準で無次元化されているか確認
基本的なところでミスしやすいんですね。
特に単位系と無次元化は初心者が最もミスしやすいポイントだ。まず無次元化された方程式を紙に書き下し、コードの各行がどの項に対応するか確認することを強くおすすめする。
流線が閉じない・交差する——CFD後処理での流線描画エラーの診断
CFD後処理で「流線が途中で途切れる」「流線が交差して見える」というビジュアル上の問題は、物理的な異常ではなく後処理手順の問題であることが多い。主な原因:①流線積分の精度不足——積分ステップを細かくすれば解決(ParaViewではMaximumStepLength設定)。②非定常場で瞬間スナップショットの流速場に流線を描く場合、粒子軌跡(Pathline)と流線(Streamline)が一致せず「交差しているように見える」——これは異常ではなく非定常流れの本質的特性だ。③周期境界近傍で流線が境界を越えてラップアラウンドする場合、後処理ソフトが境界を認識できず途切れる。正確な流線可視化には速度場の収束品質(質量保存)の確認が前提だ。
「解析が合わない」と思ったら
- まず深呼吸——焦って設定をランダムに変えると、問題がさらに複雑になる
- 最小再現ケースを作る——流れ関数の問題を最も単純な形で再現する。「引き算のデバッグ」が最も効率的
- 1つだけ変えて再実行——複数の変更を同時に行うと、何が効いたか分からなくなる。科学実験と同じ「対照実験」の原則
- 物理に立ち返る——計算結果が「重力に逆らって物が浮く」ような非物理的な結果なら、入力データの根本的な間違いを疑う
関連トピック
なった
詳しく
報告