Skip to content
cfd-lab:~/ja/posts/2026-07-21-water-wave-di…● online

この記事は著者が韓国語で書いた原文の翻訳です。 原文(한국어)を読む

NOTE #108DAY TUE 유체역학DATE 2026.07.21UPDATED 2026.10.19READ 5 min read#Water-Waves#Dispersion#Group-Velocity#Capillary-Wave#Flow-Phenomena

波ひとつは集団より速い — 波の分散と群速度

エネルギーが追うのは峰ではなく包絡線です。浅い水ではそのずれが、水深だけで決まる一つの速度に消えます。

静かな池に小石を一つ投げ込みます。波紋が輪を描いて広がります。ここまでは誰でも知っています。

ところが輪をよく見ると、おかしなことに気づきます。波紋の一つひとつは輪の後ろで生まれます。外へ走り出します。そして輪の先端で消えていきます。集団はゆっくり広がるのに、その中の波紋は集団を追い越して進みます。

波長ごとに速度が変わるのが**分散(dispersion、波長による速度差)です。波ひとつと波の集団が別の速度で動く量が群速度(group velocity)**です。小石の輪が妙に見える理由はここにあります。

表面張力 σ のスライダーを 0 側へ下げると、左側の表面張力波の枝が消え、曲線の最低点が短い波長へずれます。

1mm1cm10cm1m10m0.01.02.03.03.9m/swavelength λ (log)gravity ↔ capillaryc_min ≈ 0.23 m/sphase speed cgroup speed c_g

Lower σ toward 0 and the capillary upturn on the left flattens — only gravity is left. Shrink h and the long-wave end levels off at the shallow-water speed √(gh), where waves stop dispersing.

最低の位相速度が 0.23 m/s 付近に残るかを見ます。重力だけになると、波長が短いほど曲線は下へ垂れます。

小石が作った輪

水面の波は、元の位置に戻ろうとする力、すなわち復元力(restoring force)で動きます。復元力は二つあります。

一つは重力です。盛り上がった波の峰を下へ引き戻します。もう一つは表面張力(surface tension、水面を張り詰めさせる力)です。曲がった水面を平らにしようとします。

波長が長いと重力が勝ちます。波長が 1.7cm より短くなると表面張力が主導します。海のうねりは重力波です。池のさざ波は表面張力波です。

波長が速度を決める

水面波を支配する関係は、分散関係式(dispersion relation)一つに要約されます。

ω2=(gk+σk3ρ)tanh⁡(kh)\omega^2 = \left( g k + \frac{\sigma k^3}{\rho} \right)\tanh(k h)

ω\omega は角振動数、k=2π/λk = 2\pi/\lambda は波数(単位長さあたりの波の数)、λ\lambda は波長、gg は重力加速度、σ\sigma は表面張力、ρ\rho は密度、hh は水深です。

波ひとつが進む速度は位相速度(phase velocity)です。c=ω/kc = \omega/k で定義します。

c=(gk+σkρ)tanh⁡(kh)c = \sqrt{\left( \frac{g}{k} + \frac{\sigma k}{\rho} \right)\tanh(k h)}

要点は、cc が kk に、つまり波長に依存することです。波長が違えば速度も違います。これが分散です。音や光(真空中)は波長が違っても速度は同じです。水面波はそうではありません。

重力と表面張力の綱引き

深い水を見ます。khkh が大きいと tanh⁡(kh)→1\tanh(kh) \to 1 です。式が簡単になります。

c=gk+σkρc = \sqrt{ \frac{g}{k} + \frac{\sigma k}{\rho} }

第一項は重力の分です。波長が長いほど(kk が小さいほど)大きくなります。第二項は表面張力の分です。波長が短いほど(kk が大きいほど)大きくなります。

二つの項が逆に動きます。だから速度には最小値があります。dc/dk=0dc/dk = 0 を解くと、最も遅い速度の波長が出ます。

λ∗=2πσρg≈1.7 cm\lambda_\ast = 2\pi\sqrt{\frac{\sigma}{\rho g}} \approx 1.7\,\text{cm}

この波長で位相速度は約 0.23 m/s と最も遅くなります。重力の項と表面張力の項が同じ大きさになる地点です。どちらか一方だけになると、谷は消えます。

表面張力が液柱をちぎる長さも、同じ σ\sigma, ρ\rho, gg から出ます。液柱が液滴へ切れる Plateau–Rayleigh は、その長さをジェット半径の側から見ます。

深い水と浅い水

水深が波長よりずっと浅いとどうなるでしょうか。khkh が小さいと tanh⁡(kh)≈kh\tanh(kh) \approx kh です。表面張力を無視すると速度が驚くほど単純になります。

c=ghc = \sqrt{g h}

波長が消えました。浅い水ではすべての波長が同じ速度で進みます。分散がありません。この状態を非分散(non-dispersive)と呼びます。

津波が怖い理由はここにあります。水深 4km の海で gh\sqrt{gh} は時速 700km に達します。波長が数百 km の長い波が、形をほぼ保ったままジェット機の速度で走ります。

集団は波より遅い

さて最初の謎に戻ります。なぜ波紋ひとつは集団を追い越すのでしょうか。

波の集団、すなわち波束(wave packet)が動く速度が群速度です。cg=dω/dkc_g = d\omega/dk で定義します。位相速度とは別の量です。

深い水の純粋な重力波を見ます。ω=gk\omega = \sqrt{gk} です。微分すると結果はきれいです。

cg=dωdk=12gk=c2c_g = \frac{d\omega}{dk} = \frac{1}{2}\sqrt{\frac{g}{k}} = \frac{c}{2}

群速度が位相速度のちょうど半分です。集団は自分の波の半分の速度で這います。だから波紋ひとつは集団の後ろで生まれ、前へ走り、集団の先端で消えます。

エネルギーは群速度で移動します。位相速度で進むのは峰の形だけです。下で黄色い峰を一つ追ってみましょう。

At c_g/c = 0.5 (deep-water gravity waves) the yellow crest clearly outruns the pink envelope and fades at the front. Set the ratio to 1 and the crest freezes inside the lump — nothing disperses.

c_g/c を 0.5 にすると、黄色い峰がピンクの包絡線(envelope、集団の外形)を追い越して前で薄れます。比を 1 に上げると峰は集団の中に固定されます。分散のない波の姿です。

Python で描く分散曲線#

分散関係式さえあれば、位相速度と群速度はすぐに描けます。群速度は ω(k)\omega(k) を数値微分して求めます。

import numpy as np
 
g, rho = 9.81, 1000.0          # 重力加速度[m/s^2]、水の密度[kg/m^3]
sigma = 0.072                  # 水-空気の表面張力[N/m]
 
def omega(k, h):
    return np.sqrt((g * k + sigma * k**3 / rho) * np.tanh(k * h))
 
def phase_speed(lam, h):
    k = 2.0 * np.pi / lam
    return omega(k, h) / k
 
def group_speed(lam, h):
    k = 2.0 * np.pi / lam
    dk = k * 1e-5                       # 中心差分で domega/dk
    return (omega(k + dk, h) - omega(k - dk, h)) / (2.0 * dk)
 
lam = np.geomspace(1e-3, 10.0, 400)    # 1mm ~ 10m、深水を仮定
c = phase_speed(lam, h=100.0)
i = int(np.argmin(c))
print(f"最小位相速度 {c[i]:.3f} m/s @ 波長 {lam[i]*100:.2f} cm")
# 最小位相速度 0.232 m/s @ 波長 1.73 cm
 
lam_swell = 2.0                        # 2m のうねり: 重力が支配
cp = phase_speed(lam_swell, 100.0)
cg = group_speed(lam_swell, 100.0)
print(f"位相 {cp:.3f} m/s, 群 {cg:.3f} m/s, 比 {cg/cp:.3f}")
# 位相 1.767 m/s, 群 0.884 m/s, 比 0.500

最小位相速度は手計算と一致します。波長 1.73cm で 0.232 m/s です。本文の 1.7cm、約 0.23 m/s と同じ谷です。2m のうねりは位相 1.767 m/s、群 0.884 m/s、比 0.500 です。1.767 の半分は 0.8835 なので、出力の 0.884 と小数第3位で会います。この波長では重力の項が表面張力の項を大きく上回るので、cg=c/2c_g = c/2 がそのまま残ります。

最も遅い波長ではそうなりません。そこでは g/kg/k と σk/ρ\sigma k/\rho が同じ大きさです。純粋な重力波だとして群速度を半分に固定すると、1.7cm のさざ波でエネルギーの速度を誤ります。比 0.500 が合うのは、2m のうねりのように重力だけが残った波長です。

浅い水は反対側の端です。c=ghc = \sqrt{g h} には kk がありません。ω=ck\omega = c k を微分すると cg=cc_g = c です。峰と集団が一緒に進みます。水深 4km ではその速度が時速 700km です。深い水の半分ルールをこの波へ持って行くと、エネルギーの位置が 2 倍ずれます。

水深を抜いて c/2 を使うとエネルギーが遅れる#

水切りの輪は深い水に近いです。峰は位相速度で走り、集団はその半分で這います。輪の先端で波紋が消える光景が、その差です。

水深が波長を下回ったら、その絵は捨てます。速度は gh\sqrt{gh} ひとつで、群速度と位相速度は同じです。Reynolds 数が長さで流れの世界を分ける仕方と同じ種類の比較です。残す項は、水深と波長、そして 1.7cm の見比べが決めます。

役に立ったらシェアしてください。