Skip to content
cfd-lab:~/ja/posts/2026-09-24-kelvin-wake-a…● online

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

NOTE #164DAY THU 유체역학DATE 2026.09.24UPDATED 2026.10.19READ 7 min read#Kelvin-Wake#Froude-Number#Free-Surface#Flow-Phenomena#Historical

速度を4倍にしても楔角は19.47°のまま — 水深がケルビン航跡を90°まで開く場所

楔角を決めるのは速度ではなく水深です。深水では19.47°に固定され、水深フルード数が1に達した瞬間に90°まで開きます。

1803年のセーヌ川、船を上流へ押し上げるという仕事#

1803年8月9日、セーヌ川でRobert Fultonが蒸気船を実演しました。川岸の銘板には立ち会った三人の 名が残っています。Bossut、Carnot、Pronyです。三人とも流体力学者でした。

蒸気機関は1776年にすでにありました。船に載せる試みも複数ありました。つまずいたのは一点です。 川を遡れませんでした。Fultonが解いたのは機関ではなく抵抗でした。

この記事ではその抵抗の一部、船が引きずる波の幾何を扱います。深い水では航跡の楔角は速度を いくら上げても19.47°から動きません。ところが水深を2 mに下げると同じ角が89°まで開きます。 なぜ速度にできないことを水深がするのか、分散関係ひとつで最後まで計算します。

計算できないから測るしかなかった抵抗

1752年、d'Alembertは非粘性・非回転流では物体が受ける抗力が厳密に0になることを示しました。 理論が現実と正面から食い違いました。学界は抵抗を予測する手段を失いました。

Bossutはその空白を曳航水槽の実験で埋めました。模型船を一定速度で曳きながら張力を測ります。 Pronyがそのデータを整理しました。Fultonが受け継いだのはこの実験の伝統です。

彼らが測った抵抗の大半は摩擦ではありません。船が作った波が後方へ運び去るエネルギーです。 まずその波がどこに立てるのかからです。

水深スライダーを500 mから2 mへ下げると黄色い楔が開き、速度スライダーだけを上げても角はそのままです。

Fr_h = 0.000 (subcritical)half-angle = 0.00°transverse λ = 0.0 m

Push V up with h fixed at “deep”: the yellow wedge never budges from 19.47°. Now drag h down toward 2 m and raise V until Fr_h → 1: the wedge opens to 90°, then closes again once Fr_h > 1.

速度スライダーだけを動かしても黄色い楔は微動だにしません。水深を500 mから2 m側へ下げて はじめて角が変わります。操作は二つですが、角を決めているのは一つだけです。

静止して見える波だけが残る

船と一緒に動く座標系では航跡は静止しています。静止して見えるには、波の位相速度が船速の その方向成分と一致しなければなりません。

波数ベクトルが船の進行方向となす角をθ\thetaとします。条件はこうなります。

Vcos⁡θ=c(k)=gktanh⁡khV\cos\theta = c(k) = \sqrt{\frac{g}{k}\tanh kh}

VVは船速、kkは波数、hhは水深、ggは重力加速度です。右辺が水面波の分散関係です。

この式がこの記事のすべてです。深い水(kh≫1kh \gg 1)ではtanh⁡kh→1\tanh kh \to 1となりc=g/kc = \sqrt{g/k}、 水深が消えます。浅い水(kh≪1kh \ll 1)ではtanh⁡kh→kh\tanh kh \to khでc→ghc \to \sqrt{gh}、波数が消えます。 この二つの極限のあいだに今日の話があります。

位相速度はgh\sqrt{gh}を超えられません。水深が有限なら、どんなに長い波もこれより 速くはなれません。船がその速度を超えると、左辺を合わせる手段がなくなります。

エネルギーが実際に向かう方向

波の峰は位相速度で動きますが、エネルギーは群速度で動きます。有限水深では次の形です。

cg(k)=c2(1+2khsinh⁡2kh)c_g(k) = \frac{c}{2}\left(1 + \frac{2kh}{\sinh 2kh}\right)

括弧の中は深い水で1、浅い水で2に向かいます。つまりcgc_gはc/2c/2からccまで変わります。

航跡の形はこの群速度が作ります。船がτ\tau秒前に作った波動成分を追ってみましょう。その間に 船はVτV\tau進み、エネルギーは波数方向へcgτc_g\tau進みました。船を原点に取ると、その成分は 後方へ(V−cgcos⁡θ)τ(V - c_g\cos\theta)\tau、横へcgsin⁡θ⋅τc_g\sin\theta \cdot \tauの位置にあります。

τ\tauが約分されます。航跡上でこの成分が現れる方向はτ\tauに依存しません。

tan⁡α(θ)=cgsin⁡θV−cgcos⁡θ\tan\alpha(\theta) = \frac{c_g\sin\theta}{V - c_g\cos\theta}

α\alphaは船の進行軸から測った光線角(ray angle)です。楔角はθ\thetaを00から90°90°まで 走査したときのα\alphaの最大値です。停留位相法(stationary phase)が選ぶ方向がまさにこの 最大値で、そこにエネルギーが積み上がって明瞭な境界線として見えます。

19.47°はどこから出てくる数字か#

深い水で計算してみます。c=g/kc = \sqrt{g/k}なので静止条件からc=Vcos⁡θc = V\cos\theta、 cg=c/2=Vcos⁡θ/2c_g = c/2 = V\cos\theta/2です。代入するとVVが丸ごと約分されます。

tan⁡α=sin⁡θcos⁡θ2−cos⁡2θ\tan\alpha = \frac{\sin\theta\cos\theta}{2 - \cos^2\theta}

速度が式から消えました。この関数の最大値はcos⁡2θ=2/3\cos^2\theta = 2/3、すなわちθ=35.26°\theta = 35.26°で 1/(22)1/(2\sqrt{2})です。角に直すと19.47°19.47°になります。

船が2 m/sで進もうと8 m/sで進もうと同じです。速度が変えるのは波長だけです。深い水の横波の 波長はλ=2πV2/g\lambda = 2\pi V^2/gで速度の二乗に比例します。形はそのままに大きさだけを変えます。

cos⁡2θ=2/3\cos^2\theta = 2/3ならcos⁡θ=2/3\cos\theta = \sqrt{2/3}、sin⁡θ=1/3\sin\theta = \sqrt{1/3}です。分子は sin⁡θcos⁡θ=2/3\sin\theta\cos\theta = \sqrt{2}/3、分母は2−2/3=4/32 - 2/3 = 4/3です。比は 2/4=1/(22)\sqrt{2}/4 = 1/(2\sqrt{2})になります。逆正接を取ると19.47°です。VVは分子と分母の両方に入り、 約分されます。g=9.81g = 9.81ならV=2V = 2 m/sの波長は2π×4/9.812\pi \times 4 / 9.81で2.56 mです。速度を4倍の 8 m/sにするとV2V^2が16倍になり40.99 mです。4 m/sは2倍なので波長は4倍、10.25 / 2.56 = 4です。 表の2.56、10.25、40.99がその比です。

水深を2 mに下げて同じ計算を回した#

ここからはtanh⁡kh\tanh khを残したまま数値で解きます。静止条件を二分法で解いてk(θ)k(\theta)を求め、 群速度を入れてα(θ)\alpha(\theta)を作り、最大値を走査します。

import math
 
g = 9.81
 
def c_phase(k, h):
    return math.sqrt(g / k * math.tanh(k * h))
 
def solve_k(v, h):
    if v >= math.sqrt(g * h) - 1e-12:
        return None
    lo, hi = 1e-8, 1.0
    while c_phase(hi, h) > v:
        hi *= 2.0
        if hi > 1e6:
            return None
    for _ in range(200):
        mid = 0.5 * (lo + hi)
        if c_phase(mid, h) > v:
            lo = mid
        else:
            hi = mid
    return 0.5 * (lo + hi)
 
def group_velocity(k, h):
    kh = k * h
    if kh > 20.0:
        f = 1.0
    else:
        f = 1.0 + 2.0 * kh / math.sinh(2.0 * kh)
    return 0.5 * c_phase(k, h) * f
 
def ray_angle(theta, v, h):
    k = solve_k(v * math.cos(theta), h)
    if k is None:
        return None
    cg = group_velocity(k, h)
    num = cg * math.sin(theta)
    den = v - cg * math.cos(theta)
    if den <= 0.0:
        return 0.5 * math.pi
    return math.atan2(num, den)
 
def wedge_scan(v, h, n=8000):
    best, best_t = 0.0, 0.0
    for i in range(1, n):
        th = 0.5 * math.pi * i / n
        a = ray_angle(th, v, h)
        if a is not None and a > best:
            best, best_t = a, th
    return math.degrees(best), math.degrees(best_t)
 
print("  V[m/s]   h[m]    Fr_h    wedge[deg]  theta*[deg]   lambda_t[m]")
cases = [(2.0, 500.0), (4.0, 500.0), (8.0, 500.0),
         (2.0, 2.0), (3.5, 2.0), (4.0, 2.0), (4.3, 2.0),
         (4.43, 2.0), (5.5, 2.0), (8.0, 2.0)]
for v, h in cases:
    frh = v / math.sqrt(g * h)
    a, t = wedge_scan(v, h)
    k0 = solve_k(v, h)
    lam = (2 * math.pi / k0) if k0 else float('inf')
    ls = f"{lam:10.2f}" if k0 else "       inf"
    print(f"{v:7.2f} {h:7.1f} {frh:7.3f} {a:11.2f} {t:11.2f} {ls}")
 
print()
print("supercritical branch vs Mach-like angle arcsin(1/Fr_h)")
print("   Fr_h    wedge[deg]   asin(1/Fr_h)[deg]   diff")
for v, h in [(5.0, 2.0), (5.5, 2.0), (6.5, 2.0), (8.0, 2.0)]:
    frh = v / math.sqrt(g * h)
    a, _ = wedge_scan(v, h)
    m = math.degrees(math.asin(1.0 / frh))
    print(f"{frh:7.3f} {a:11.2f} {m:17.2f} {a-m:8.3f}")
  V[m/s]   h[m]    Fr_h    wedge[deg]  theta*[deg]   lambda_t[m]
   2.00   500.0   0.029       19.47       35.27       2.56
   4.00   500.0   0.057       19.47       35.27      10.25
   8.00   500.0   0.114       19.47       35.27      40.99
   2.00     2.0   0.452       19.47       35.26       2.56
   3.50     2.0   0.790       23.74       23.94       8.80
   4.00     2.0   0.903       35.13       16.47      14.91
   4.30     2.0   0.971       54.46        9.50      29.17
   4.43     2.0   1.000       89.08        0.91        inf
   5.50     2.0   1.242       53.63       36.36        inf
   8.00     2.0   1.806       33.61       56.39        inf
 
supercritical branch vs Mach-like angle arcsin(1/Fr_h)
   Fr_h    wedge[deg]   asin(1/Fr_h)[deg]   diff
  1.129       62.35             62.36   -0.007
  1.242       53.63             53.64   -0.013
  1.467       42.94             42.96   -0.014
  1.806       33.61             33.62   -0.015

Fr_hスライダーを表の0.452から1.000へ動かすと、α(θ)\alpha(\theta)の山がθ∗=35.27°\theta^* = 35.27°を離れて左へ下がります。

peak α = 19.47° at θ* = 35.27°subcritical branch

Below Fr_h ≈ 0.7 the peak sits fixed at θ* = 35.27°, α = 19.47°. Drag Fr_h toward 1 and watch θ* slide to zero while α climbs to 90°. Past 1 a forbidden band opens on the left and the peak tracks asin(1/Fr_h).

0.1から0.7のあいだ山は35.27°に留まり、楔角は19.47°から動きません。1の近くだけで山が上がり、表の89.08°へ向かいます。

上の三行が深い水です。速度が4倍になっても楔角は19.47°で小数第二位まで同じです。波長だけが 2.56 mから40.99 mへ16倍になりました。

四行目が面白いところです。h=2h = 2 mなのに19.47°がそのまま出ています。Fr_hは0.452です。 水深が浅くても波長が2.56 mと短ければkh=4.9kh = 4.9なので、波にとってはまだ深い水です。水深その ものではなく、波長に対する水深が問題なのです。

k=2π/λk = 2\pi/\lambdaで見ると、h=2h = 2 m、λ=2.56\lambda = 2.56 mのときkh=2π×2/2.56=4.9kh = 2\pi \times 2 / 2.56 = 4.9です。 tanh⁡(4.9)\tanh(4.9)は1に張り付くので、分散関係は深水の式へ戻ります。だから水深2 mでも楔角は19.47°です。 V=4.30V = 4.30 m/s、λ=29.17\lambda = 29.17 mならkh=2π×2/29.17kh = 2\pi \times 2 / 29.17で0.43まで下がります。 tanh⁡kh\tanh khは1から離れ、表の角は54.46°です。Fr_h = 0.790で23.74°、0.903で35.13°、0.971で54.46°、 1.000で89.08°です。深水では速度を4倍にしても動かなかった角が、4.30 m/sと4.43 m/sのあいだで 23.74°から89.08°まで開きます。

Fr_hが0.79を超えたあたりから角が動きます。0.903で35.13°、0.971で54.46°、1.000で89.08°です。 最後の値が90°に0.9°届かないのは、θ\theta格子が有限であるための残差です。θ∗\theta^*が0.91°まで 下がっていることを併せて見ると理由が分かります。山がθ=0\theta = 0へ収束しつつあるのです。

臨界速度を超えると楔は再び狭くなる

Fr_hが1を超えると、Vcos⁡θ≤ghV\cos\theta \le \sqrt{gh}を満たすθ\thetaだけが残ります。つまり θ>arccos⁡(1/Frh)\theta > \arccos(1/\mathrm{Fr}_h)の区間だけが波を作ります。船首方向は禁止帯になります。 横波は完全に消えます。表でλt\lambda_tがinfと出ているのがそれです。

残った発散波(divergent wave)だけで作られる楔角は再び狭くなります。1.242で53.63°、1.806で 33.61°です。二つ目の表はその値をarcsin⁡(1/Frh)\arcsin(1/\mathrm{Fr}_h)と比べたものです。四つの場合すべてが 0.015°以内で一致しています。

この角は超音速流のマッハコーンと同じ式です。浅い水のgh\sqrt{gh}が音速の位置に入っているだけです。 Fr_hが1を超えた瞬間に横波が消え、発散波だけが残る分かれ目は、 流しの水面に毎日できる跳水がフルード数1を境に 常流と射流を分ける場所と同じです。

Fultonがセーヌ川でぶつかった壁がこれです。水深2 mの川では臨界速度が4.43 m/s、およそ8.6ノットです。 その近くで航跡は川幅いっぱいに広がります。波が船から離れられないので、押し込んだエネルギーが そのまま抵抗として返ってきます。

この角度がCFD格子を決める場所#

自由表面解析で領域の幅を決める数字は、楔角の正接です。19.47°の正接は0.354なので、船尾からLLだけ 後ろの航跡半幅は0.354L0.354Lです。表のFr_h = 0.971、角54.46°では正接が1.40付近です。同じ地点が 1.40L1.40Lになり、およそ4倍です。側壁を深水の習慣どおり0.354L0.354Lの外に置くと、反射波が船体圧力に 混ざります。抵抗係数が静かにずれます。

波長の予算も一緒に動きます。Fr_h = 0.971の横波波長は29.17 mです。波長あたり40セルなら、その波 だけで1,000セルを超えます。h=2h = 2 m、V=2V = 2 m/sの行は波長2.56 mでkh=4.9kh = 4.9なので、同じ40セル 規則でも100セルほどです。船体と速度が同じでも、水深がkhkhを臨界側へ押すと格子の行が長くなります。 深水の19.47°は速度・船型・粘性に付かない定数です。角が狭ければ波を潰したのであり、広ければ分散 誤差が混じっています。

臨界の手前で領域を閉じると航跡が壁に当たる

Fultonは分散関係を知りませんでした。Bossutの水槽の張力計が、先にV=ghV = \sqrt{gh}を指していました。 水深2 mではその値は4.43 m/s、約8.6ノットです。Fr_hが0.79を超えた瞬間、楔は19.47°を離れ、1.000で 89.08°まで開きます。波が船を離れられなければ、入れたエネルギーは抵抗になって戻ってきます。

船体抵抗を見るとき最初に見るのは船速そのものではありません。その船が作る波長にとって、この水深が 深水かどうかです。h=2h = 2 mでλ=2.56\lambda = 2.56 mならkh=4.9kh = 4.9で、まだ19.47°です。同じ水深で波長が 29.17 mまで伸びると、楔は川幅いっぱいに広がります。速度の数字だけで側壁を閉じる失敗は、 Reynolds数がレジームを分ける場所で 粘性係数だけを見て流れを一つの箱に入れる失敗と同じです。

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