流れ関数と速度ポテンシャルを基礎から徹底解説

航空機の翼はなぜ揚力を生むのか、船の船首形状はどのように設計するのか――流体の運動を解析するためには、空間の各点における速度を知る必要があります。しかし、速度は $x$ 成分と $y$ 成分の2つの未知関数を持つベクトル量であり、直接扱うのは容易ではありません。もし速度場全体をたった1つのスカラー関数で表現できれば、問題は劇的に単純化されます。

それを実現するのが流れ関数 $\psi$ と速度ポテンシャル $\phi$ です。流れ関数は非圧縮性条件を自動的に満たすスカラー関数であり、速度ポテンシャルは非回転条件を自動的に満たすスカラー関数です。この2つを組み合わせると、非圧縮・非回転の理想流体の流れを複素関数の理論で統一的に扱えるようになります。

この理論は、翼まわりの揚力計算(クッタ・ジューコフスキーの定理)、船舶の造波抵抗の推定、風力タービンの翼型設計など、工学の幅広い分野で実用されています。さらに、地下水流の解析や静電場のポテンシャル分布の計算にも、全く同じ数学的構造が現れます。

本記事の内容

  • 流れ関数 $\psi$ の定義と、非圧縮条件を自動的に満たす仕組み
  • 速度ポテンシャル $\phi$ の定義と、非回転条件との関係
  • $\psi$ と $\phi$ の直交関係(コーシー・リーマンの関係式)
  • 複素ポテンシャル $W(z)$ による統一的記述
  • 基本流れ(一様流、湧き出し/吸い込み、渦、二重湧き出し)の解
  • 重ね合わせの原理による半無限体、ランキンの楕円体、円柱まわりの流れの構成
  • Python による4種類の可視化(基本流れの流線図、重ね合わせ流れ、円柱まわりの循環付き流れ、圧力分布)

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

流れ関数とは

直感的な理解 — 流線を「等高線」で描く

地形図を思い浮かべてください。等高線が密に描かれた場所は急斜面、疎な場所は緩やかな平地を意味します。流れ関数 $\psi$ は、流体の流れに対してまさに「等高線」の役割を果たします。$\psi$ が一定の曲線を描くと、それがそのまま流線(streamline)になるのです。等高線の間隔が狭いところでは流れが速く、広いところでは流れが遅い――地形の等高線と同じ直感がそのまま通用します。

さらに重要なのは、流れ関数を1つ定義するだけで、速度場の $x$ 成分と $y$ 成分の両方が自動的に決まるという点です。2つの未知関数の問題が、1つのスカラー関数の問題に帰着されるわけです。

非圧縮条件から流れ関数を導く

2次元の非圧縮性流れを考えます。連続の式から、非圧縮条件は次のように表されます。

$$ \nabla \cdot \bm{v} = \frac{\partial u}{\partial x} + \frac{\partial v}{\partial y} = 0 $$

ここで $u$ は $x$ 方向の速度成分、$v$ は $y$ 方向の速度成分です。この式は「$x$ 方向に広がった分だけ、$y$ 方向に縮む」ことを意味しており、流体の体積が保存されることを表しています。

いま、あるスカラー関数 $\psi(x, y)$ を導入し、速度成分を次のように定義します。

$$ \boxed{u = \frac{\partial \psi}{\partial y}, \quad v = -\frac{\partial \psi}{\partial x}} $$

この定義が非圧縮条件を自動的に満たすことを確認しましょう。連続の式に代入すると、

$$ \frac{\partial u}{\partial x} + \frac{\partial v}{\partial y} = \frac{\partial}{\partial x}\left(\frac{\partial \psi}{\partial y}\right) + \frac{\partial}{\partial y}\left(-\frac{\partial \psi}{\partial x}\right) $$

偏微分の順序を交換できるので($\psi$ が十分滑らかであると仮定)、

$$ = \frac{\partial^2 \psi}{\partial x \partial y} – \frac{\partial^2 \psi}{\partial x \partial y} = 0 $$

見事に恒等的にゼロになります。つまり、$\psi$ がどんな関数であっても、上の定義で速度を決めれば非圧縮条件は必ず成り立ちます。これが流れ関数の最大の利点です。非圧縮条件を「解くべき方程式」から「自動的に満たされる構造」へと変換してくれるのです。

流れ関数の等値線が流線である理由

$\psi = \text{const}$ の曲線上では、$\psi$ の全微分がゼロになります。

$$ d\psi = \frac{\partial \psi}{\partial x}dx + \frac{\partial \psi}{\partial y}dy = 0 $$

流れ関数の定義 $u = \partial \psi / \partial y$、$v = -\partial \psi / \partial x$ を代入すると、

$$ -v \, dx + u \, dy = 0 $$

これを整理すると、

$$ \frac{dy}{dx} = \frac{v}{u} $$

これはまさに流線の定義式(速度ベクトルに接する曲線の微分方程式)そのものです。したがって、$\psi$ が一定の曲線は流線と一致します。

2本の流線の間の流量

流れ関数のもう一つの重要な性質は、2本の流線 $\psi_1$ と $\psi_2$ の間を通る単位奥行きあたりの体積流量が $|\psi_2 – \psi_1|$ に等しいということです。

任意の曲線 $C$ に沿った体積流量 $Q$ は次のように計算できます。

$$ Q = \int_C (u \, dy – v \, dx) = \int_C \left(\frac{\partial \psi}{\partial y} dy + \frac{\partial \psi}{\partial x} dx\right) = \int_C d\psi = \psi_2 – \psi_1 $$

この結果は、流線のとり方(経路の形状)によらず成り立ちます。流線の間隔が狭いところでは同じ流量が狭い領域を通るため、流速が大きくなる――先ほど述べた「等高線が密な場所は流れが速い」という直感と整合しています。

極座標での流れ関数

円柱まわりの流れなど、軸対称性を持つ問題では極座標 $(r, \theta)$ が便利です。極座標での速度成分は次のように表されます。

$$ v_r = \frac{1}{r}\frac{\partial \psi}{\partial \theta}, \quad v_\theta = -\frac{\partial \psi}{\partial r} $$

この定義も、極座標での連続の式を自動的に満たすように構成されています。

$$ \frac{1}{r}\frac{\partial (r v_r)}{\partial r} + \frac{1}{r}\frac{\partial v_\theta}{\partial \theta} = 0 $$

に代入して確認してみましょう。$r v_r = \partial \psi / \partial \theta$ なので、

$$ \frac{1}{r}\frac{\partial^2 \psi}{\partial r \partial \theta} + \frac{1}{r}\frac{\partial}{\partial \theta}\left(-\frac{\partial \psi}{\partial r}\right) = \frac{1}{r}\frac{\partial^2 \psi}{\partial r \partial \theta} – \frac{1}{r}\frac{\partial^2 \psi}{\partial r \partial \theta} = 0 $$

確かにゼロになります。流れ関数は座標系によらず非圧縮条件を自動的に保証してくれる、普遍的な道具であることがわかります。

ここまでで、流れ関数 $\psi$ が非圧縮条件を自動的に満たし、その等値線が流線を与えることを見ました。しかし、非圧縮条件だけでは流れは一意に定まりません。もう一つの重要な条件――流れが渦を持たない(非回転である)という条件が必要です。これを満たすスカラー関数が、次に説明する速度ポテンシャルです。

速度ポテンシャルとは

直感的な理解 — 「高い場所から低い場所へ」

水は高い場所から低い場所へ流れます。地形の高さを表す関数を $h(x, y)$ とすれば、水の流れる方向は $h$ が最も急に減少する方向、すなわち $-\nabla h$ の方向です。速度ポテンシャル $\phi$ は、この「高さ」に相当するスカラー関数です。流体は $\phi$ の勾配方向に流れます。

ただし、このようなスカラー関数が存在するためには、流れに条件が必要です。水が山をぐるぐる回り続けるような流れ(渦を持つ流れ)では、$\phi$ を矛盾なく定義できません。速度ポテンシャルが存在するためには、流れが非回転でなければなりません。

非回転条件から速度ポテンシャルを導く

流れが非回転(irrotational)であるとは、渦度がゼロであることを意味します。2次元の場合、

$$ \omega_z = \frac{\partial v}{\partial x} – \frac{\partial u}{\partial y} = 0 $$

ベクトル解析の基本定理によれば、回転がゼロのベクトル場は、必ずあるスカラー関数の勾配として表すことができます。すなわち、スカラー関数 $\phi(x, y)$ が存在して、

$$ \boxed{\bm{v} = \nabla \phi} $$

成分で書くと、

$$ u = \frac{\partial \phi}{\partial x}, \quad v = \frac{\partial \phi}{\partial y} $$

この $\phi$ を速度ポテンシャル(velocity potential)と呼びます。

非回転条件の自動満足

速度ポテンシャルの定義から渦度を計算してみましょう。

$$ \omega_z = \frac{\partial v}{\partial x} – \frac{\partial u}{\partial y} = \frac{\partial^2 \phi}{\partial x \partial y} – \frac{\partial^2 \phi}{\partial y \partial x} = 0 $$

偏微分の交換可能性から、渦度は恒等的にゼロになります。これは流れ関数が非圧縮条件を自動的に満たしたのと対称的な関係です。

スカラー関数 自動的に満たす条件 追加で課すべき条件
流れ関数 $\psi$ 非圧縮条件 $\nabla \cdot \bm{v} = 0$ 非回転条件 $\nabla \times \bm{v} = \bm{0}$
速度ポテンシャル $\phi$ 非回転条件 $\nabla \times \bm{v} = \bm{0}$ 非圧縮条件 $\nabla \cdot \bm{v} = 0$

流れ関数は非圧縮条件を自動的に満たし、速度ポテンシャルは非回転条件を自動的に満たします。では、両方が同時に成り立つとき、すなわち非圧縮かつ非回転の流れ(ポテンシャル流れ)では何が起こるのでしょうか。ここで $\psi$ と $\phi$ の間に驚くべき関係が現れます。

ラプラス方程式

速度ポテンシャルに対するラプラス方程式

非圧縮条件 $\nabla \cdot \bm{v} = 0$ に $\bm{v} = \nabla \phi$ を代入すると、

$$ \nabla \cdot (\nabla \phi) = \nabla^2 \phi = \frac{\partial^2 \phi}{\partial x^2} + \frac{\partial^2 \phi}{\partial y^2} = 0 $$

これはラプラス方程式に他なりません。すなわち、非圧縮・非回転流の速度ポテンシャルは調和関数です。

流れ関数に対するラプラス方程式

同様に、非回転条件 $\omega_z = 0$ に流れ関数の定義を代入してみましょう。

$$ \omega_z = \frac{\partial v}{\partial x} – \frac{\partial u}{\partial y} = \frac{\partial}{\partial x}\left(-\frac{\partial \psi}{\partial x}\right) – \frac{\partial}{\partial y}\left(\frac{\partial \psi}{\partial y}\right) $$

$$ = -\frac{\partial^2 \psi}{\partial x^2} – \frac{\partial^2 \psi}{\partial y^2} = -\nabla^2 \psi = 0 $$

したがって、

$$ \nabla^2 \psi = 0 $$

流れ関数もまたラプラス方程式を満たします。$\phi$ と $\psi$ はどちらも調和関数であり、同じ支配方程式に従います。

ラプラス方程式は線形方程式であるため、重ね合わせの原理が成り立ちます。すなわち、ラプラス方程式の2つの解 $\phi_1$ と $\phi_2$ があれば、その線形結合 $a\phi_1 + b\phi_2$ もまたラプラス方程式の解です。この性質が、後述する基本流れの重ね合わせによる複雑な流れの構成を可能にします。

$\phi$ と $\psi$ がともにラプラス方程式を満たすことがわかりました。しかし、両者の関係はこれだけではありません。実は、$\phi$ と $\psi$ は複素関数論におけるコーシー・リーマンの関係式で結ばれているのです。

流れ関数と速度ポテンシャルの直交関係

コーシー・リーマンの関係式

$\phi$ と $\psi$ の定義から速度成分を書き出してみましょう。

速度ポテンシャルから:

$$ u = \frac{\partial \phi}{\partial x}, \quad v = \frac{\partial \phi}{\partial y} $$

流れ関数から:

$$ u = \frac{\partial \psi}{\partial y}, \quad v = -\frac{\partial \psi}{\partial x} $$

両者を等置すると、次の関係式が得られます。

$$ \boxed{\frac{\partial \phi}{\partial x} = \frac{\partial \psi}{\partial y}, \quad \frac{\partial \phi}{\partial y} = -\frac{\partial \psi}{\partial x}} $$

これは複素関数論でおなじみのコーシー・リーマンの関係式と全く同じ構造です。$\phi$ を実部、$\psi$ を虚部に持つ複素関数 $W = \phi + i\psi$ は正則関数になります。

等ポテンシャル線と流線の直交性

コーシー・リーマンの関係式から、重要な幾何学的性質が導かれます。$\phi = \text{const}$ の等値線(等ポテンシャル線)と $\psi = \text{const}$ の等値線(流線)は直交します。

これを確認しましょう。$\phi$ の等値線の法線方向は $\nabla \phi$ であり、$\psi$ の等値線の法線方向は $\nabla \psi$ です。両者の内積を計算すると、

$$ \nabla \phi \cdot \nabla \psi = \frac{\partial \phi}{\partial x}\frac{\partial \psi}{\partial x} + \frac{\partial \phi}{\partial y}\frac{\partial \psi}{\partial y} $$

コーシー・リーマンの関係式を代入します。$\partial \phi / \partial x = \partial \psi / \partial y$ と $\partial \phi / \partial y = -\partial \psi / \partial x$ を使うと、

$$ = \frac{\partial \psi}{\partial y}\frac{\partial \psi}{\partial x} + \left(-\frac{\partial \psi}{\partial x}\right)\frac{\partial \psi}{\partial y} = 0 $$

内積がゼロなので、$\nabla \phi$ と $\nabla \psi$ は直交しています。等値線はそれぞれの勾配に垂直ですから、$\phi$ の等値線と $\psi$ の等値線もまた直交します。

この直交関係は実に美しい構造です。速度ベクトルは流線に接し、等ポテンシャル線に垂直――まるで等高線と最急降下方向の関係そのものです。実際に後ほどPythonで $\phi$ と $\psi$ の等値線を同時に描くと、直交する格子模様が現れることが確認できます。

この直交格子構造は、$\phi$ と $\psi$ が一つの正則関数の実部と虚部であることに起因しています。次に、この正則関数としての統一的な記述法を見ていきましょう。

複素ポテンシャル

定義と基本的性質

複素座標 $z = x + iy$ を導入し、複素ポテンシャル $W(z)$ を次のように定義します。

$$ \boxed{W(z) = \phi(x, y) + i\psi(x, y)} $$

前節で確認した通り、$\phi$ と $\psi$ はコーシー・リーマンの関係式を満たすので、$W(z)$ は $z$ の正則関数(解析関数)です。

$W(z)$ を $z$ で微分すると、速度の情報が得られます。

$$ \frac{dW}{dz} = \frac{\partial \phi}{\partial x} + i\frac{\partial \psi}{\partial x} $$

コーシー・リーマンの関係式 $\partial \psi / \partial x = -\partial \phi / \partial y$ を用いると、

$$ \frac{dW}{dz} = \frac{\partial \phi}{\partial x} – i\frac{\partial \phi}{\partial y} = u – iv $$

この量を複素速度と呼びます。複素速度の実部が $u$、虚部(の符号を変えたもの)が $v$ を与えます。速度の大きさは、

$$ |\bm{v}| = \sqrt{u^2 + v^2} = \left|\frac{dW}{dz}\right| $$

で得られます。

複素ポテンシャルの利点

複素ポテンシャルを使う最大の利点は、ポテンシャル流れの問題が複素関数論の問題に変換されることです。これにより、次のような強力な道具が使えるようになります。

  1. 等角写像: ある領域での解を、別の領域での解に変換できます。たとえば円柱まわりの流れの解を等角写像で変換すれば、翼型まわりの流れが得られます(ジューコフスキー変換)。
  2. 留数定理: 物体に働く力(揚力・抗力)を複素積分で計算できます(ブラジウスの定理)。
  3. 重ね合わせ: 正則関数の和も正則関数なので、単純な流れの複素ポテンシャルを足し合わせて複雑な流れを構成できます。

これらの理論は全て、$W(z)$ が正則関数であるという一つの事実から導かれます。次に、この複素ポテンシャルの具体的な形を、基本的な流れのパターンごとに見ていきましょう。

基本流れ

ラプラス方程式の線形性を活用して複雑な流れを構成するために、まず4つの基本的な流れの解を整理します。各基本流れについて、物理的な意味、複素ポテンシャル、速度場、流れ関数を求めます。

一様流

最も単純な流れは、$x$ 方向に速度 $U$ で一様に流れる流れです。全ての点で速度が同じ $(u, v) = (U, 0)$ です。

複素ポテンシャルは、

$$ W(z) = Uz $$

実部と虚部を分離します。$z = x + iy$ を代入すると、

$$ W = U(x + iy) = Ux + iUy $$

したがって、

$$ \phi = Ux, \quad \psi = Uy $$

流線 $\psi = \text{const}$ は $y = \text{const}$ の水平線であり、等ポテンシャル線 $\phi = \text{const}$ は $x = \text{const}$ の鉛直線です。両者は確かに直交しています。

一般に、$x$ 軸と角度 $\alpha$ をなす方向への一様流は、

$$ W(z) = Ue^{-i\alpha}z $$

で表されます。

湧き出しと吸い込み

原点から放射状に流体が湧き出す流れを湧き出し(source)、原点に向かって吸い込まれる流れを吸い込み(sink)と呼びます。体積流量(2次元なので単位奥行きあたり)を $m$ とすると、$m > 0$ が湧き出し、$m < 0$ が吸い込みです。

対称性から、速度は径方向成分のみを持ちます。原点からの距離 $r$ の円周上を通過する流量は $2\pi r v_r = m$ なので、

$$ v_r = \frac{m}{2\pi r}, \quad v_\theta = 0 $$

複素ポテンシャルは、

$$ W(z) = \frac{m}{2\pi}\ln z $$

これを確認します。$z = re^{i\theta}$ なので $\ln z = \ln r + i\theta$ です。

$$ W = \frac{m}{2\pi}(\ln r + i\theta) $$

したがって、

$$ \phi = \frac{m}{2\pi}\ln r, \quad \psi = \frac{m}{2\pi}\theta $$

等ポテンシャル線 $\phi = \text{const}$ は $r = \text{const}$ の同心円、流線 $\psi = \text{const}$ は $\theta = \text{const}$ の放射線です。同心円と放射線は直交しており、コーシー・リーマンの関係式が成り立っていることが幾何学的にも確認できます。

渦(点渦)

原点のまわりを周回する流れが(vortex)です。循環を $\Gamma$ とすると、原点から距離 $r$ の位置での速度は、

$$ v_r = 0, \quad v_\theta = \frac{\Gamma}{2\pi r} $$

湧き出しとは対照的に、速度は周方向のみです。$\Gamma > 0$ が反時計回り、$\Gamma < 0$ が時計回りに対応します。

複素ポテンシャルは、

$$ W(z) = -\frac{i\Gamma}{2\pi}\ln z $$

実部と虚部を分離すると、

$$ W = -\frac{i\Gamma}{2\pi}(\ln r + i\theta) = \frac{\Gamma}{2\pi}\theta – i\frac{\Gamma}{2\pi}\ln r $$

したがって、

$$ \phi = \frac{\Gamma}{2\pi}\theta, \quad \psi = -\frac{\Gamma}{2\pi}\ln r $$

流線 $\psi = \text{const}$ は $r = \text{const}$ の同心円であり、流体が原点のまわりをぐるぐる回っている様子を表しています。等ポテンシャル線 $\phi = \text{const}$ は $\theta = \text{const}$ の放射線です。

注目すべきは、原点以外では渦度がゼロだということです。一見すると「渦」なのに「非回転」とは矛盾しているように感じますが、個々の流体粒子は回転しながら移動しているのではなく、単に円軌道を描いているだけです。自転せずに公転している――太陽のまわりを回る惑星のようなイメージです。渦度は原点の一点にデルタ関数的に集中しており、それ以外の領域ではゼロです。

二重湧き出し(ダブレット)

二重湧き出し(doublet)は、湧き出しと吸い込みを無限に近づけながら、その積(強さ $\times$ 距離)を一定に保った極限として得られます。

具体的には、強さ $m$ の湧き出しを $z = -\varepsilon$ に、強さ $-m$ の吸い込みを $z = +\varepsilon$ に置き、$\varepsilon \to 0$、$m \to \infty$ の極限を $\mu = m \cdot 2\varepsilon / (2\pi) = \text{const}$ を保って取ります。

$$ W = \frac{m}{2\pi}\ln(z + \varepsilon) – \frac{m}{2\pi}\ln(z – \varepsilon) $$

$\varepsilon \to 0$ の極限で $\ln(z+\varepsilon) – \ln(z-\varepsilon) \approx 2\varepsilon/z$ を用いると、

$$ W(z) = \frac{\mu}{z} $$

ここで $\mu$ は二重湧き出しの強さです。$z = re^{i\theta}$ を代入して実部と虚部を分離すると、

$$ W = \frac{\mu}{re^{i\theta}} = \frac{\mu}{r}e^{-i\theta} = \frac{\mu}{r}(\cos\theta – i\sin\theta) $$

したがって、

$$ \phi = \frac{\mu \cos\theta}{r}, \quad \psi = -\frac{\mu \sin\theta}{r} $$

流線 $\psi = c$ は $r = -(\mu \sin\theta)/c$ を満たします。$r = -(\mu/c)\sin\theta$ は原点を通る円であり、二重湧き出しの流線は原点を通る円の族を描きます。

二重湧き出しは、後述する円柱まわりの流れを構成する上で不可欠な要素です。一様流と二重湧き出しを重ね合わせることで、円柱の存在を表現できるのです。

ここまでで4つの基本流れの複素ポテンシャルが揃いました。次に、Pythonでこれらの流線を可視化し、各基本流れの特徴を視覚的に確認しましょう。

Python: 基本流れの流線図

4つの基本流れ(一様流、湧き出し、渦、二重湧き出し)の流線を一度に可視化し、それぞれの流れのパターンを比較します。

import numpy as np
import matplotlib.pyplot as plt

# 計算グリッドの設定
N = 400
x = np.linspace(-3, 3, N)
y = np.linspace(-3, 3, N)
X, Y = np.meshgrid(x, y)

# 原点付近の特異点を避けるため微小値を加える
R = np.sqrt(X**2 + Y**2)
R = np.where(R < 1e-6, 1e-6, R)
Theta = np.arctan2(Y, X)

# パラメータ
U = 1.0       # 一様流の速度
m = 5.0       # 湧き出しの強さ
Gamma = 5.0   # 循環の強さ
mu = 1.0      # 二重湧き出しの強さ

# 流れ関数の計算
psi_uniform = U * Y
psi_source = (m / (2 * np.pi)) * Theta
psi_vortex = -(Gamma / (2 * np.pi)) * np.log(R)
psi_doublet = -mu * np.sin(Theta) / R

# 可視化
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# (a) 一様流
ax = axes[0, 0]
ax.contour(X, Y, psi_uniform, levels=20, colors='steelblue', linewidths=0.8)
ax.set_title('(a) Uniform flow', fontsize=13)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)

# (b) 湧き出し
ax = axes[0, 1]
ax.contour(X, Y, psi_source, levels=20, colors='steelblue', linewidths=0.8)
ax.set_title('(b) Source', fontsize=13)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)

# (c) 渦
ax = axes[1, 0]
ax.contour(X, Y, psi_vortex, levels=20, colors='steelblue', linewidths=0.8)
ax.set_title('(c) Vortex', fontsize=13)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)

# (d) 二重湧き出し
ax = axes[1, 1]
psi_doublet_clipped = np.clip(psi_doublet, -5, 5)
ax.contour(X, Y, psi_doublet_clipped, levels=np.linspace(-3, 3, 25),
           colors='steelblue', linewidths=0.8)
ax.set_title('(d) Doublet', fontsize=13)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.set_xlim(-3, 3)
ax.set_ylim(-3, 3)

plt.tight_layout()
plt.savefig('basic_flows.png', dpi=150, bbox_inches='tight')
plt.show()

上のグラフから、4つの基本流れの特徴が明確に読み取れます。

(a) 一様流 では、流線は完全に平行な水平線です。全ての点で同じ方向・同じ速さの流れを表しており、遠方での境界条件としてよく用いられます。

(b) 湧き出し では、流線は原点から放射状に広がる直線です。原点に近いほど流線の間隔が狭く(流速が大きく)、遠方に向かうほど間隔が広がります。これは $v_r \propto 1/r$ の関係に対応しています。

(c) 渦 では、流線は原点を中心とする同心円です。流体は原点のまわりを周回しており、原点に近いほど流速が大きくなります。竜巻やバスタブの排水口付近の流れのモデルです。

(d) 二重湧き出し では、流線は原点を通る円の族を描きます。$x$ 軸の上下で対称的なパターンが現れ、左側(湧き出し側)から右側(吸い込み側)に向かう流れの特徴が見て取れます。

これらの基本流れは単体で見ると単純ですが、重ね合わせの原理を使って組み合わせると、驚くほど複雑で実用的な流れを構成できます。次に、その重ね合わせの具体例を見ていきましょう。

重ね合わせの原理

線形性と重ね合わせ

ラプラス方程式は線形方程式です。したがって、$\psi_1$ と $\psi_2$ がそれぞれラプラス方程式の解であれば、その線形結合 $\psi = \psi_1 + \psi_2$ もまたラプラス方程式の解です。

$$ \nabla^2 \psi_1 = 0, \quad \nabla^2 \psi_2 = 0 \quad \Rightarrow \quad \nabla^2(\psi_1 + \psi_2) = 0 $$

同じことが速度ポテンシャル $\phi$ と複素ポテンシャル $W(z)$ にも成り立ちます。この重ね合わせの原理を用いて、基本流れを足し合わせ、物体まわりの流れを構成する方法を見ていきましょう。

半無限体(ランキンの半体)

一様流と湧き出しを原点に置いて重ね合わせます。

$$ W(z) = Uz + \frac{m}{2\pi}\ln z $$

流れ関数は、

$$ \psi = Uy + \frac{m}{2\pi}\theta = Ur\sin\theta + \frac{m}{2\pi}\theta $$

$\theta = \pi$($x$ 軸の負の方向)上で $\psi = 0 + m/2 = m/2$ です。この値 $\psi = m/2$ の流線を追跡すると、原点の上流側で分岐した流線が物体の表面を形成します。この物体形状をランキンの半体(Rankine half-body)と呼びます。

よどみ点(速度がゼロになる点)は、$dW/dz = 0$ から求まります。

$$ \frac{dW}{dz} = U + \frac{m}{2\pi z} = 0 \quad \Rightarrow \quad z = -\frac{m}{2\pi U} $$

よどみ点は $x$ 軸の負の方向、原点から $m/(2\pi U)$ の位置にあります。

ランキンの楕円体

一様流に、原点の上流側に湧き出し、下流側に吸い込みを配置した流れがランキンの楕円体です。湧き出しを $z = -a$、吸い込みを $z = +a$ に置くと、

$$ W(z) = Uz + \frac{m}{2\pi}\ln(z + a) – \frac{m}{2\pi}\ln(z – a) $$

$$ = Uz + \frac{m}{2\pi}\ln\frac{z+a}{z-a} $$

湧き出しから出た流体は下流の吸い込みに吸い込まれるため、ある閉じた流線が現れます。この閉曲線の形状は細長い楕円に似ており、ランキンの楕円体と呼ばれます。これは有限長の物体まわりの流れのモデルとして利用されます。

円柱まわりの流れ

一様流と二重湧き出しを重ね合わせると、円柱まわりの流れが得られます。これは流体力学で最も重要な重ね合わせの一つです。

$$ W(z) = Uz + \frac{\mu}{z} $$

ここで $\mu = Ua^2$ と定めると、$|z| = a$ の円周上で $\psi = 0$(速度の法線成分がゼロ)になります。すなわち、半径 $a$ の円が物体表面に対応します。

これを確認しましょう。$z = re^{i\theta}$ を代入すると、

$$ W = Ure^{i\theta} + \frac{Ua^2}{r}e^{-i\theta} $$

虚部を取ると($\psi$ を求めると)、

$$ \psi = Ur\sin\theta – \frac{Ua^2}{r}\sin\theta = U\sin\theta\left(r – \frac{a^2}{r}\right) $$

$r = a$ のとき $\psi = U\sin\theta(a – a) = 0$ となり、確かに円周上で $\psi = 0$ です。

速度場を求めます。複素速度は、

$$ \frac{dW}{dz} = U – \frac{Ua^2}{z^2} $$

$z = re^{i\theta}$ を代入して整理すると、円周上 $r = a$ では、

$$ v_r = 0, \quad v_\theta = -2U\sin\theta $$

速度は $\theta = \pi/2$(円柱の上端)と $\theta = 3\pi/2$(下端)で最大 $2U$ となり、$\theta = 0$ と $\theta = \pi$(よどみ点)でゼロになります。

この流れは上下対称であるため、円柱に働く揚力はゼロです。これは実験事実(実際の円柱にも循環がなければ揚力は生じない)と一致しています。では、循環を加えると何が起こるのでしょうか。

円柱まわりの流れ + 循環

円柱まわりの流れに強さ $\Gamma$ の循環(点渦)を加えます。

$$ W(z) = Uz + \frac{Ua^2}{z} – \frac{i\Gamma}{2\pi}\ln z $$

流れ関数は、

$$ \psi = U\sin\theta\left(r – \frac{a^2}{r}\right) – \frac{\Gamma}{2\pi}\ln r $$

$r = a$ では第1項がゼロなので $\psi = -(\Gamma / 2\pi)\ln a = \text{const}$ となり、依然として円周は流線です。循環を加えても円柱の形状は変わりません。

しかし、流れの対称性は崩れます。円柱の上側では一様流と循環の速度が同じ方向を向くため流速が増加し、下側では逆向きになるため流速が減少します。ベルヌーイの定理により、流速が大きい側は圧力が低くなるため、円柱には下から上への力(揚力)が生じます

この揚力はクッタ・ジューコフスキーの定理で定量化されます。

$$ L = \rho U \Gamma $$

ここで $L$ は単位スパンあたりの揚力、$\rho$ は流体密度です。揚力は循環 $\Gamma$ に比例するという、極めて簡潔で美しい結果です。

よどみ点の位置は循環の大きさによって変化します。$r = a$ の円周上でのよどみ点は $v_\theta = 0$ の条件から求まります。

$$ -2U\sin\theta – \frac{\Gamma}{2\pi a} = 0 \quad \Rightarrow \quad \sin\theta = -\frac{\Gamma}{4\pi U a} $$

$|\Gamma| < 4\pi U a$ のとき、2つのよどみ点が円周上に存在します。$|\Gamma| = 4\pi U a$ のとき、2つのよどみ点が合流します。$|\Gamma| > 4\pi U a$ のとき、よどみ点は円周を離れ、流れの中に移動します。

理論の導出が一通り終わりましたので、ここからPythonで重ね合わせ流れを可視化し、理論の予測を視覚的に確認していきましょう。

Python: 重ね合わせ流れの可視化

一様流 + 湧き出し(ランキンの半体)と一様流 + 湧き出し + 吸い込み(ランキンの楕円体)の流線を並べて描画します。

import numpy as np
import matplotlib.pyplot as plt

N = 500
x = np.linspace(-4, 6, N)
y = np.linspace(-4, 4, N)
X, Y = np.meshgrid(x, y)

U = 1.0
m = 4.0
a = 1.5  # 湧き出し・吸い込みの位置(±a)

# --- ランキンの半体 ---
R0 = np.sqrt(X**2 + Y**2)
R0 = np.where(R0 < 1e-6, 1e-6, R0)
Theta0 = np.arctan2(Y, X)

psi_half = U * Y + (m / (2 * np.pi)) * Theta0

# --- ランキンの楕円体 ---
R_plus = np.sqrt((X + a)**2 + Y**2)
R_plus = np.where(R_plus < 1e-6, 1e-6, R_plus)
R_minus = np.sqrt((X - a)**2 + Y**2)
R_minus = np.where(R_minus < 1e-6, 1e-6, R_minus)
Theta_plus = np.arctan2(Y, X + a)
Theta_minus = np.arctan2(Y, X - a)

psi_oval = U * Y + (m / (2 * np.pi)) * (Theta_plus - Theta_minus)

# --- 可視化 ---
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# ランキンの半体
ax = axes[0]
levels_half = np.linspace(-5, 5, 40)
ax.contour(X, Y, psi_half, levels=levels_half, colors='steelblue', linewidths=0.7)
# 物体表面を描画(psi = m/2 の流線)
ax.contour(X, Y, psi_half, levels=[m / 2], colors='crimson', linewidths=2)
ax.plot(-m / (2 * np.pi * U), 0, 'ko', markersize=6)
ax.set_title('Rankine half-body', fontsize=13)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.set_xlim(-4, 6)
ax.set_ylim(-4, 4)

# ランキンの楕円体
ax = axes[1]
levels_oval = np.linspace(-5, 5, 40)
ax.contour(X, Y, psi_oval, levels=levels_oval, colors='steelblue', linewidths=0.7)
# 物体表面を描画(psi = 0 の流線)
ax.contour(X, Y, psi_oval, levels=[0], colors='crimson', linewidths=2)
ax.plot(-a, 0, 'ko', markersize=5, label='Source')
ax.plot(a, 0, 'ks', markersize=5, label='Sink')
ax.legend(fontsize=10)
ax.set_title('Rankine oval', fontsize=13)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.set_xlim(-4, 6)
ax.set_ylim(-4, 4)

plt.tight_layout()
plt.savefig('superposition_flows.png', dpi=150, bbox_inches='tight')
plt.show()

この図から、重ね合わせの原理がどのように物体形状を生み出すかが視覚的に理解できます。

ランキンの半体(左図)では、赤い太線が $\psi = m/2$ の流線であり、これが物体の表面に対応しています。上流側によどみ点(黒い点)が存在し、流線がそこで分岐して物体の上下を回り込みます。物体の形状は上流側で丸みを帯び、下流側では $y = \pm m/(2U)$ の水平線に漸近します。これは船首形状や橋脚の先端部のモデルとして利用されます。

ランキンの楕円体(右図)では、湧き出しと吸い込みの組み合わせにより、閉じた物体形状が現れます。赤い太線で示された $\psi = 0$ の流線が楕円に似た閉曲線を描いており、この内側が「物体」です。湧き出しと吸い込みの距離 $2a$ と強さ $m$ の比によって、物体の細長さを制御できます。これは魚雷や潜水艦の船体のモデルとして古くから用いられてきました。

次に、最も重要な応用例である円柱まわりの流れを、循環の効果も含めて詳しく可視化しましょう。

Python: 円柱まわりの流れ + 循環

循環なし、弱い循環、臨界循環の3つの場合を比較します。よどみ点の移動と流れの非対称性に注目してください。

import numpy as np
import matplotlib.pyplot as plt

N = 500
x = np.linspace(-4, 4, N)
y = np.linspace(-4, 4, N)
X, Y = np.meshgrid(x, y)

U = 1.0
a = 1.0  # 円柱の半径

R = np.sqrt(X**2 + Y**2)
Theta = np.arctan2(Y, X)

# 円柱内部をマスクするための配列
mask = R < a

# 循環の値
Gammas = [0.0, 4 * np.pi * U * a * 0.5, 4 * np.pi * U * a]
titles = [
    r'$\Gamma = 0$ (no circulation)',
    r'$\Gamma = 2\pi Ua$ (moderate)',
    r'$\Gamma = 4\pi Ua$ (critical)',
]

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

for idx, (Gamma, title) in enumerate(zip(Gammas, titles)):
    ax = axes[idx]

    # 流れ関数
    psi = U * np.sin(Theta) * (R - a**2 / R) - (Gamma / (2 * np.pi)) * np.log(R / a)
    psi[mask] = np.nan  # 円柱内部をマスク

    # 流線を描画
    levels = np.linspace(-4, 4, 50)
    ax.contour(X, Y, psi, levels=levels, colors='steelblue', linewidths=0.6)

    # 円柱を描画
    theta_circle = np.linspace(0, 2 * np.pi, 200)
    ax.fill(a * np.cos(theta_circle), a * np.sin(theta_circle),
            color='lightgray', edgecolor='black', linewidth=1.5)

    # よどみ点を計算して表示
    if abs(Gamma) <= 4 * np.pi * U * a + 1e-10:
        sin_val = -Gamma / (4 * np.pi * U * a)
        sin_val = np.clip(sin_val, -1, 1)
        theta_stag1 = np.arcsin(sin_val)
        theta_stag2 = np.pi - theta_stag1
        xs1, ys1 = a * np.cos(theta_stag1), a * np.sin(theta_stag1)
        xs2, ys2 = a * np.cos(theta_stag2), a * np.sin(theta_stag2)
        ax.plot(xs1, ys1, 'ro', markersize=7, zorder=5)
        if abs(theta_stag1 - theta_stag2) > 0.01:
            ax.plot(xs2, ys2, 'ro', markersize=7, zorder=5)

    ax.set_title(title, fontsize=12)
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_aspect('equal')
    ax.set_xlim(-3.5, 3.5)
    ax.set_ylim(-3.5, 3.5)

plt.tight_layout()
plt.savefig('cylinder_circulation.png', dpi=150, bbox_inches='tight')
plt.show()

3つのパネルから、循環が流れのパターンを劇的に変えることが読み取れます。

左図($\Gamma = 0$): 循環なしの場合、流れは上下に完全に対称です。2つのよどみ点(赤い点)は $\theta = 0$ と $\theta = \pi$($x$ 軸上)に位置しています。上下対称なので揚力はゼロです。

中央図($\Gamma = 2\pi Ua$): 循環を加えると、円柱の上側では一様流と循環が同じ方向に向かうため流線が密になり(流速が増加し)、下側では疎になります(流速が減少します)。ベルヌーイの定理により、流速が大きい側は圧力が低いので、円柱には上向きの揚力が生じます。よどみ点は下方に移動しています。

右図($\Gamma = 4\pi Ua$、臨界循環): 循環をさらに強くすると、2つのよどみ点が円柱の最下部で合流します。これが臨界循環であり、$\Gamma = 4\pi Ua$ のときに起こります。循環がこれよりも大きくなると、よどみ点は円柱表面を離れ、流れの中に移動します。

この結果は理論の予測と完全に一致しています。円柱上側の流線の密度が循環に伴って増加する様子は、翼が揚力を発生するメカニズムの本質を視覚的に示しています。

円柱表面の圧力分布

ベルヌーイの定理からの導出

ベルヌーイの定理により、定常・非粘性・非圧縮の流れでは、

$$ p + \frac{1}{2}\rho |\bm{v}|^2 = p_\infty + \frac{1}{2}\rho U^2 $$

が成り立ちます。ここで $p_\infty$ は遠方の圧力、$U$ は遠方の一様流速度です。

圧力係数 $C_p$ を次のように定義します。

$$ C_p = \frac{p – p_\infty}{\frac{1}{2}\rho U^2} = 1 – \frac{|\bm{v}|^2}{U^2} $$

循環なしの場合

循環なしの円柱表面 $r = a$ では $v_r = 0$、$v_\theta = -2U\sin\theta$ でした。したがって、

$$ \frac{|\bm{v}|^2}{U^2} = \frac{v_\theta^2}{U^2} = 4\sin^2\theta $$

圧力係数は、

$$ C_p = 1 – 4\sin^2\theta $$

$\theta = 0, \pi$(よどみ点)で $C_p = 1$(最大圧力)、$\theta = \pi/2, 3\pi/2$(上端・下端)で $C_p = -3$(最小圧力)となります。

循環ありの場合

循環 $\Gamma$ を加えた場合、円柱表面での速度は、

$$ v_\theta = -2U\sin\theta – \frac{\Gamma}{2\pi a} $$

圧力係数は、

$$ C_p = 1 – \left(2\sin\theta + \frac{\Gamma}{2\pi U a}\right)^2 $$

この式から、$\theta = \pi/2$(上端)での $|v_\theta|$ は $2U + \Gamma/(2\pi a)$ であり、$\theta = -\pi/2$(下端)では $|v_\theta|$ は $|{-2U + \Gamma/(2\pi a)}|$ です。上側と下側で速度の大きさが異なるため、圧力分布が非対称になり、正味の揚力が発生します。

圧力を円柱表面にわたって積分すると、揚力 $L$ と抗力 $D$ が得られます。

$$ L = -\oint p \sin\theta \, a \, d\theta = \rho U \Gamma $$

$$ D = -\oint p \cos\theta \, a \, d\theta = 0 $$

ポテンシャル流れでは抗力がゼロという結果が得られます。これはダランベールのパラドックスとして知られており、現実の流れでは粘性に起因する摩擦抗力や流れの剥離による圧力抗力が存在するため、この理論だけでは抗力を予測できないことを示しています。現実の流れを正確に扱うには、ナビエ・ストークス方程式に基づく解析が必要になります。

それでは、Pythonで圧力係数の分布を循環の有無で比較してみましょう。

Python: 圧力分布の計算と可視化

循環なしと循環ありの2つの場合について、円柱表面の圧力係数分布を計算し、比較します。

import numpy as np
import matplotlib.pyplot as plt

U = 1.0
a = 1.0

theta = np.linspace(0, 2 * np.pi, 500)

# 循環の値
Gamma_values = [0.0, 2 * np.pi * U * a, 4 * np.pi * U * a]
labels = [r'$\Gamma = 0$', r'$\Gamma = 2\pi Ua$', r'$\Gamma = 4\pi Ua$']
colors = ['steelblue', 'darkorange', 'crimson']

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# --- 直交座標プロット ---
ax = axes[0]
for Gamma, label, color in zip(Gamma_values, labels, colors):
    v_theta = -2 * U * np.sin(theta) - Gamma / (2 * np.pi * a)
    Cp = 1 - (v_theta / U)**2
    ax.plot(np.degrees(theta), Cp, color=color, linewidth=1.8, label=label)

ax.axhline(y=0, color='gray', linestyle='--', linewidth=0.5)
ax.set_xlabel(r'$\theta$ [deg]', fontsize=12)
ax.set_ylabel(r'$C_p$', fontsize=12)
ax.set_title('Pressure coefficient on cylinder surface', fontsize=13)
ax.set_xlim(0, 360)
ax.set_ylim(-12, 2)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)

# --- 極座標プロット ---
ax = axes[1]
ax_polar = fig.add_axes(ax.get_position(), polar=True)
ax.set_visible(False)

for Gamma, label, color in zip(Gamma_values, labels, colors):
    v_theta = -2 * U * np.sin(theta) - Gamma / (2 * np.pi * a)
    Cp = 1 - (v_theta / U)**2
    # Cpを正の値にスケーリングして表示(外側が負圧)
    r_plot = 1 - Cp / 5  # スケーリング
    ax_polar.plot(theta, r_plot, color=color, linewidth=1.5, label=label)

ax_polar.plot(theta, np.ones_like(theta), 'k-', linewidth=2)  # 円柱表面
ax_polar.set_title('Polar plot of $C_p$ distribution', fontsize=13, pad=15)
ax_polar.legend(loc='upper right', bbox_to_anchor=(1.3, 1.0), fontsize=10)

plt.savefig('pressure_distribution.png', dpi=150, bbox_inches='tight')
plt.show()

左図(直交座標プロット)から、圧力分布に関する重要な特徴が読み取れます。

循環なし($\Gamma = 0$、青線): 圧力係数は $\theta$ に関して対称的です。$\theta = 0°$ と $\theta = 180°$(よどみ点)で $C_p = 1$(最大圧力)、$\theta = 90°$ と $\theta = 270°$ で $C_p = -3$(最小圧力)となります。この対称性のため、圧力の合力はゼロであり、揚力も抗力も生じません。

循環あり($\Gamma = 2\pi Ua$、橙線): $\theta = 90°$(上端)付近で圧力が大きく低下し、$\theta = 270°$(下端)付近では圧力の低下が緩和されています。この上下の非対称性が正味の揚力を生み出します。

臨界循環($\Gamma = 4\pi Ua$、赤線): さらに顕著な非対称性が見られ、$\theta = 90°$ 付近で $C_p$ が極端に小さく(大きな負圧)なっています。揚力は $\Gamma$ に比例して増加します。

右図(極座標プロット)では、円柱表面からの距離で圧力分布の大きさを表しています。外側に張り出している部分が低圧(負圧)、内側に入り込んでいる部分が高圧を意味します。循環を加えることで上側の低圧領域が拡大し、揚力が発生する様子が直感的に把握できます。

等角写像とポテンシャル流れ

等角写像の基本的な考え方

ここまでで円柱まわりの流れを詳しく解析しましたが、現実の航空機の翼は円柱ではありません。翼型(エアフォイル)のような複雑な形状に対して、ラプラス方程式を直接解くのは容易ではありません。

ここで威力を発揮するのが等角写像(conformal mapping)です。$\zeta = f(z)$ という正則関数による写像は、角度を保存する性質を持ちます(等角性)。そして重要なことに、正則関数による座標変換はラプラス方程式を保存します

つまり、$z$ 平面でラプラス方程式を満たす $\phi$ と $\psi$ は、$\zeta$ 平面でもラプラス方程式を満たします。これは、$z$ 平面で円柱まわりの流れが分かっていれば、適切な等角写像を選ぶことで、$\zeta$ 平面の翼型まわりの流れが自動的に得られることを意味します。

ジューコフスキー変換

最も有名な等角写像の例がジューコフスキー変換です。

$$ \zeta = z + \frac{c^2}{z} $$

この変換は、$z$ 平面の円を $\zeta$ 平面で翼型に変換します。円の中心を少しずらし、円が $z = -c$ を通るようにすると、$\zeta$ 平面では後縁が尖った翼型(ジューコフスキー翼型)が得られます。

$z$ 平面での円柱まわりの流れ(循環付き)の複素ポテンシャルがわかっているので、$z = f^{-1}(\zeta)$ を通じて $\zeta$ 平面(翼型まわり)の流れが求まります。クッタ条件(後縁で流れが滑らかに離れる条件)を課すことで、循環の値が一意に定まり、翼の揚力が計算できます。

このように、円柱まわりの流れの理論は、翼理論への架け橋としても極めて重要です。等角写像については、複素関数の理論と併せて、より発展的な記事で詳しく取り上げます。

Python: 等ポテンシャル線と流線の直交格子

最後に、$\phi$ と $\psi$ の等値線を同時に描画し、両者が直交する美しい格子構造を視覚的に確認しましょう。一様流 + 二重湧き出し(円柱まわりの流れ)について描画します。

import numpy as np
import matplotlib.pyplot as plt

N = 600
x = np.linspace(-4, 4, N)
y = np.linspace(-4, 4, N)
X, Y = np.meshgrid(x, y)

U = 1.0
a = 1.0

R = np.sqrt(X**2 + Y**2)
R = np.where(R < 1e-6, 1e-6, R)
Theta = np.arctan2(Y, X)

# 円柱内部のマスク
mask = R < a

# 速度ポテンシャルと流れ関数
phi = U * np.cos(Theta) * (R + a**2 / R)
psi = U * np.sin(Theta) * (R - a**2 / R)

phi[mask] = np.nan
psi[mask] = np.nan

fig, ax = plt.subplots(figsize=(8, 8))

# 流線(青)
levels_psi = np.linspace(-3, 3, 25)
cs_psi = ax.contour(X, Y, psi, levels=levels_psi, colors='steelblue',
                     linewidths=0.8)

# 等ポテンシャル線(オレンジ)
levels_phi = np.linspace(-4, 4, 25)
cs_phi = ax.contour(X, Y, phi, levels=levels_phi, colors='darkorange',
                     linewidths=0.8, linestyles='dashed')

# 円柱
theta_circle = np.linspace(0, 2 * np.pi, 200)
ax.fill(a * np.cos(theta_circle), a * np.sin(theta_circle),
        color='lightgray', edgecolor='black', linewidth=2)

# 凡例用のダミー
ax.plot([], [], color='steelblue', linewidth=1.5, label=r'Streamlines ($\psi$ = const)')
ax.plot([], [], color='darkorange', linewidth=1.5, linestyle='dashed',
        label=r'Equipotential lines ($\phi$ = const)')

ax.legend(fontsize=11, loc='upper right')
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_title(r'Orthogonal grid: $\psi$ and $\phi$ around a cylinder', fontsize=14)
ax.set_aspect('equal')
ax.set_xlim(-3.5, 3.5)
ax.set_ylim(-3.5, 3.5)
ax.grid(True, alpha=0.15)

plt.tight_layout()
plt.savefig('orthogonal_grid.png', dpi=150, bbox_inches='tight')
plt.show()

この図は、本記事の理論的な核心を視覚的に凝縮したものです。

流線(青い実線、$\psi = \text{const}$)は流体粒子が辿る経路を表し、等ポテンシャル線(橙色の破線、$\phi = \text{const}$)は速度ポテンシャルが等しい点を結ぶ曲線です。両者があらゆる交点で直交していることが明確に確認できます。これは、コーシー・リーマンの関係式 $\nabla \phi \cdot \nabla \psi = 0$ の幾何学的な表現に他なりません。

円柱の上流側と下流側のよどみ点付近では、流線と等ポテンシャル線が一点に収束しています。円柱の上端・下端付近では流線の間隔が狭くなっており、流速が増加していることが見て取れます。遠方では流線が平行な水平線に漸近し、一様流に戻っていくことも確認できます。

この直交格子構造は、$W(z) = \phi + i\psi$ が正則関数であることの直接的な帰結であり、ポテンシャル流れと複素関数論の深い結びつきを象徴しています。

3次元への拡張

ここまでの議論は2次元の流れに限定していましたが、3次元の場合についても簡単に触れておきましょう。

3次元の速度ポテンシャル

3次元でも、非回転条件 $\nabla \times \bm{v} = \bm{0}$ が成り立てば速度ポテンシャル $\phi$ が存在し、$\bm{v} = \nabla \phi$ と書けます。非圧縮条件 $\nabla \cdot \bm{v} = 0$ を課すと、3次元のラプラス方程式が得られます。

$$ \nabla^2 \phi = \frac{\partial^2 \phi}{\partial x^2} + \frac{\partial^2 \phi}{\partial y^2} + \frac{\partial^2 \phi}{\partial z^2} = 0 $$

3次元のラプラス方程式もまた線形であるため、重ね合わせの原理は引き続き成り立ちます。3次元の湧き出しは $\phi = -m/(4\pi r)$($r = |\bm{x}|$)であり、二重湧き出しやその他の基本解も同様に構成できます。

3次元での流れ関数の制限

一方、流れ関数 $\psi$ は2次元(または軸対称)の場合に特有の概念です。一般の3次元流れでは、速度の2つの独立成分を1つのスカラー関数で表すことはできません(3つの速度成分があるため)。ただし、軸対称流れの場合は、ストークスの流れ関数を定義できます。

この点は実務上重要です。翼の揚力問題のように2次元近似が妥当な場合は $\psi$ と $\phi$ の両方が使えますが、3次元の複雑な流れでは $\phi$ のみを用いるか、数値解法(パネル法など)に頼ることになります。

実際の応用と限界

ポテンシャル流れの応用例

ポテンシャル流れの理論は、以下のような分野で広く応用されています。

航空工学: 翼型まわりの揚力の計算は、ジューコフスキー変換やクッタ条件を通じてポテンシャル流れの理論から導かれます。現代の航空機の翼型設計でも、初期設計段階ではパネル法(ポテンシャル流れの数値解法)が広く使われています。

船舶工学: 船体まわりの流れの解析、造波抵抗の推定にポテンシャル流れが利用されます。船体を湧き出しと吸い込みの分布で近似するのは、ランキンの楕円体の考え方の直接的な拡張です。

地下水流: 地下の帯水層を流れる水は粘性が低く流速も遅いため、ポテンシャル流れでよく近似できます。ラプラス方程式を解くことで、井戸の汲み上げ量と水位低下の関係が求められます。

静電場: 静電場のポテンシャルもラプラス方程式に従います。電場の解析は、流体のポテンシャル流れと数学的に全く同じ構造を持っており、一方の問題で得られた解をそのまま他方の問題に転用できます。

ダランベールのパラドックスと粘性の重要性

先に触れたように、ポテンシャル流れの理論では円柱に作用する抗力がゼロになります(ダランベールのパラドックス)。しかし現実の流れでは、円柱に抗力が作用することは周知の事実です。

この矛盾の原因は、ポテンシャル流れが粘性を無視しているところにあります。実際の流体には粘性があり、物体表面に境界層が形成されます。境界層内で流速が急激に変化し、上流側のよどみ点から下流に向かう途中で流れの剥離が起こります。剥離が起こると、物体の背面に低圧の領域(後流、ウェイク)が生じ、これが圧力抗力の原因となります。

粘性を含む正確な解析にはナビエ・ストークス方程式が必要です。しかし、ポテンシャル流れの理論は境界層の外側の流れを精度よく記述するため、境界層理論と組み合わせて使うのが実務上の標準的なアプローチです。

発散回転の観点からの整理

本記事の内容を、ベクトル解析の言葉で改めて整理しておきましょう。

  • 流れ関数 $\psi$ は、速度場の発散がゼロ(非圧縮)であることを自動的に保証する
  • 速度ポテンシャル $\phi$ は、速度場の回転がゼロ(非回転)であることを自動的に保証する
  • 両方を同時に満たすと、$\phi$ と $\psi$ はどちらもラプラス方程式を満たし、コーシー・リーマンの関係式で結ばれる
  • ラプラス方程式の線形性が重ね合わせの原理を保証し、基本流れの足し合わせによる複雑な流れの構成を可能にする

この構造は、流体力学と複素関数論と偏微分方程式論の3つの分野が美しく交差する場所であり、理論物理・工学数学の中でも特に優雅な体系の一つです。

まとめ

本記事では、流れ関数 $\psi$ と速度ポテンシャル $\phi$ を基礎から解説しました。

  • 流れ関数 $\psi$ はその定義から非圧縮条件 $\nabla \cdot \bm{v} = 0$ を自動的に満たし、$\psi$ の等値線が流線を与える。2本の流線間の体積流量は流れ関数の差 $\psi_2 – \psi_1$ に等しい
  • 速度ポテンシャル $\phi$ はその定義から非回転条件 $\nabla \times \bm{v} = \bm{0}$ を自動的に満たし、速度場をスカラー関数の勾配として表現する
  • 非圧縮かつ非回転の流れ(ポテンシャル流れ)では、$\phi$ と $\psi$ がともにラプラス方程式を満たし、コーシー・リーマンの関係式で結ばれる。等ポテンシャル線と流線は直交する
  • 複素ポテンシャル $W(z) = \phi + i\psi$ を導入すると、ポテンシャル流れの問題が複素関数論の枠組みで統一的に扱える
  • 基本流れ(一様流、湧き出し、渦、二重湧き出し)のラプラス方程式の解を重ね合わせの原理で組み合わせることにより、半無限体、ランキンの楕円体、円柱まわりの流れなどの実用的な流れが構成できる
  • 円柱まわりの流れに循環を加えると揚力が発生し、クッタ・ジューコフスキーの定理 $L = \rho U \Gamma$ が成り立つ。一方、ポテンシャル流れでは抗力がゼロ(ダランベールのパラドックス)であり、粘性を含むナビエ・ストークス方程式に基づく解析が必要な場面がある

次のステップとして、以下の記事も参考にしてください。