流れの三つの肖像 — 流線・流跡線・流脈線はなぜ食い違うのか
非定常流で分かれる三つの曲線と物質微分の話
川にインクを一筋たらして写真を撮りました。同じ瞬間、横で木の葉を一枚浮かべて軌跡を描きました。二本の線は別の形になりました。流れは一つのはずなのに、姿が二つに分かれるのです。本記事では、流線・流跡線・流脈線という三つの曲線がなぜ食い違うのか、そしてその食い違いが物質微分(流体に乗って見る変化率)とどう結びつくのかを示します。読み終えると、川の写真一枚に隠れた時間の痕跡が読めるようになります。
同じ流れ、異なる三枚の絵#
流れを絵に残す方法は一つではありません。研究室では普通、三つを使います。
第一に、ある瞬間に全点の速度の向きをつないで描きます。第二に、粒子一つに目印を付けてその足跡を追います。第三に、一か所から染料を流し続けてできる帯を撮ります。三つの方法は同じ流れを見ますが、結果はいつも一致するわけではありません。
鍵は時間です。流れが時間とともに変われば(非定常流)、三枚の絵は食い違います。変わらなければ(定常流)、三つはぴたりと重なります。この差が今日のテーマです。
流線・流跡線・流脈線 — 三つの定義#
三つの曲線を式で切り分けてみましょう。速度場を とします。
流線(streamline):固定したある瞬間 に、全点で速度に接する曲線です。
ここで はその瞬間の速度成分です。時間を止めたスナップ写真です。
流跡線(pathline):粒子一つを時間に沿って積分した実際の足跡です。
木の葉一枚の旅の記録だと考えてください。
流脈線(streakline):同じ点 を通り過ぎたすべての粒子が、いま どこにいるかをつないだ線です。煙突から立ちのぼる煙やインクの帯がまさにこれです。
定常流でのみ三つが重なる#
定常流とは、速度場が時間に依存しない流れ、すなわち の場合です。このとき、粒子が一度ある点を通れば、後から来る粒子も同じ道をたどります。道が時間とともに変わらないからです。
そのため流跡線と流脈線が一致します。流線も毎瞬間同じなので、三つすべてが重なります。教科書で見る「きれいな流線図」は、実は定常流という暗黙の仮定の上に立っています。
非定常流ではこの仮定が崩れます。先に通った粒子の道と後の粒子の道が違い、瞬間の接線方向も毎瞬間変わります。だから三つの曲線は離れていきます。
オイラーとラグランジュ、そして物質微分#
この食い違いの根には二つの視点があります。オイラー視点(空間の固定点で観察)とラグランジュ視点(粒子を追って観察)です。流線はオイラー的、流跡線はラグランジュ的です。
二つの視点をつなぐ橋が物質微分です。
ここで は任意の物理量、右辺の第一項は局所変化率、第二項は対流変化率です。前者は「固定点での時間変化」、後者は「粒子が場所を移したことで生じる変化」を意味します。
直感がつまずきやすいのがここです。定常流で でも、粒子は加速できます。狭まるノズルを思い浮かべてください。固定点で見れば速度は時間とともに変わりません。しかし粒子がのどへ吸い込まれるにつれてどんどん速くなります。その加速をすべて作るのが対流項 です。
下のシミュレーションで収縮比を操作してみましょう。
Nothing in this field depends on time, so ∂u/∂t = 0 at every fixed point. Yet the pink parcel still accelerates into the throat — all of it from the convective term u·∂u/∂x.
収縮比を0.25まで下げると、のど付近で粒子速度が4倍に跳ね上がります。それでも の棒はゼロに張り付いたままです。すべての加速が水色の対流項から出ているということです。
Python — 振動する流れで三つの曲線を描く#
三つの曲線を一度に描いてみましょう。横方向速度が下流へ伝わる波である流れを使います。、、ここで です。この流れでは三つの曲線がきれいに異なる形を持ちます。
import numpy as np
U, V0, omega = 1.0, 0.6, 2.0
k = omega / U
def velocity(x, t):
"""下流へ伝わる横波: (u, v) を返す"""
return U, V0 * np.cos(omega * t - k * x)
def pathline(t0, t_end, dt=0.01):
"""t0 に原点から出た粒子の足跡(数値積分)"""
x, y, t = 0.0, 0.0, t0
xs, ys = [x], [y]
while t < t_end:
u, v = velocity(x, t)
x += u * dt; y += v * dt; t += dt
xs.append(x); ys.append(y)
return np.array(xs), np.array(ys)
def streakline(t_now, n=400):
"""t_now 時点の染料帯: s<=t_now に放出した粒子の現在位置"""
s = np.linspace(0.0, t_now, n)
x = U * (t_now - s)
y = V0 * np.cos(omega * s) * (t_now - s) # この流れでの厳密解
return x, y
def streamline_snapshot(t_now, x_max=10.0, n=400):
"""t_now の瞬間、原点を通る流線"""
x = np.linspace(0.0, x_max, n)
y = (V0 / omega) * (np.sin(omega * t_now) - np.sin(omega * t_now - k * x))
return x, y
t_now = 6.0
xp, yp = pathline(0.0, t_now)
xs, ys = streakline(t_now)
xl, yl = streamline_snapshot(t_now)
print(f"流跡線の終点 : ({xp[-1]:.2f}, {yp[-1]:.2f})")
print(f"流脈線 y 範囲: [{ys.min():.2f}, {ys.max():.2f}]")
print(f"流線 y 範囲: [{yl.min():.2f}, {yl.max():.2f}]")出力は、三つの曲線がまったく異なる領域を占めることを示します。流跡線は直線に伸び、流線は振幅 の浅い波、流脈線はそれより大きく揺れます。同じ流れ、異なる三枚の絵です。
非定常性を自分で揺らす#
では時間を生かして、三つの曲線がどう分かれるかを見ましょう。下のシミュレーションで振幅 と周波数 を操作してみましょう。
Field: u = U, v = V₀·cos(ωt − kx) with k = ω/U. Drag V₀ to 0 and the three curves collapse onto the axis — they only ever agree when the flow is steady.
をゼロに下げると、三つの曲線が軸の上に重なります。定常流に戻ったのです。 と を上げると、黄色の流線は速く波打ち、ピンクの流跡線はまっすぐ伸び、シアンの流脈線はまた別の波形を描きます。非定常性が強いほど、三つの肖像は遠ざかります。
川をもう一度見るとき#
一つの流れから三枚の絵が出る理由は、ただ一つ、時間です。流線は時間を止めた断面、流跡線は一粒子の一代記、流脈線は一か所を通り過ぎた全員の現在です。
三つを一行ずつ持ち帰りましょう。
- 三つが重なれば流れは定常です。違えば流れが時間とともに変わっている合図です。
- 物質微分 の対流項は、定常流でも加速を生みます。
- 実験写真がインクの帯なら、それは流脈線であって流線ではありません。二つを混同すると速度の向きを読み違えます。
役に立ったらシェアしてください。