Skip to content
cfd-lab:~/ja/posts/2026-08-06-oblique-shock…online
NOTE #125DAY THU 유체역학DATE 2026.08.06READ 6 min read#Gas-Dynamics#Oblique-Shock#Supersonic-Inlet#Stagnation-Pressure#Flow-Phenomena

衝撃波は1枚より4枚 — 超音速インレットの斜め衝撃波列

弱い斜め衝撃波を何度も通すほうが全圧をはるかに失わずに済む理由

1944年のゲッティンゲンで、Klaus Oswatitschは超音速推進体のインレット問題に取り組んでいました。ラムジェットは取り込んだ空気を圧縮しなければなりませんが、Mach 3で空気をそのまま止めてしまうと圧力の3分の2が消えてしまいます。彼が出した答えは、圧縮をもっと強くすることではなく、いくつもの断片に分けることでした。斜面を何枚か立てて、流れを少しずつだけ曲げるのです。今回は、この計算がなぜ正しいのかを斜め衝撃波(斜めに立つ衝撃波)の関係式から導き、ランプの枚数を変えながら回復率がどう動くのかを実際に数えてみます。

衝撃波は何を奪っていくのか

衝撃波を通っても質量・運動量・エネルギーは保存されます。淀み温度 T0T_0 もそのままです。消えていくのは淀み圧力(全圧)p0p_0 ただ一つです。

p02p01=exp ⁣(ΔsR)\frac{p_{02}}{p_{01}} = \exp\!\left(-\frac{\Delta s}{R}\right)

Δs\Delta s は衝撃波を通る間に増えたエントロピー、RR は気体定数です。エントロピーが増えた分だけ全圧が削られます。

なぜよりによって全圧なのか。インレットがエンジンへ渡せる仕事の最大値が、そのまま全圧だからです。淀み圧力が半分になれば、ノズルで取り出せる膨張比も半分になります。インレットの性能指標を回復率 πd=p0e/p0\pi_d = p_{0e}/p_{0\infty} 一つに絞る理由がこれです。

Mach 3で垂直衝撃波を一枚立てると、この値はいくつになるか。ちょうど 0.3283 です。全圧の67%が熱へ散っていきます。

斜めに当てると法線成分だけが残る

衝撃波を流れに対して斜めに立てると事情が変わります。衝撃波面に平行な速度成分は、衝撃波を通っても変わりません。圧力勾配が面に垂直な向きにしか働かないからです。

つまり斜め衝撃波は法線成分だけを受ける垂直衝撃波です。波角(wave angle)β\beta が決まれば、有効Mach数は

M1n=M1sinβM_{1n} = M_1 \sin\beta

となります。β\beta が小さいほど M1nM_{1n} は1に近づきます。Mach 3の流れであっても β=25.6°\beta = 25.6° なら、衝撃波が実際に感じているのはMach 1.30の弱い衝撃波です。

流れが曲がる角 θ\theta(deflection angle)と波角 β\beta は、次の関係で結ばれます。

tanθ=2cotβM12sin2β1M12(γ+cos2β)+2\tan\theta = 2\cot\beta \, \frac{M_1^2 \sin^2\beta - 1}{M_1^2 (\gamma + \cos 2\beta) + 2}

γ\gamma は比熱比(空気は1.4)。この式がこの記事のすべてだと言ってもかまいません。

θ–β–M 一つに答えが二つ#

M1M_1θ\theta を与えて β\beta を解くと、根が二つ出てきます。波角が小さいほうが弱い解(weak solution)、大きいほうが強い解(strong solution)です。弱い解では衝撃波の後ろはたいてい超音速のまま残り、強い解では亜音速になります。

自然はほとんど常に弱い解を選びます。背圧が特別に高くない限り、くさびに付いた衝撃波は弱いほうです。

そして θ\theta を上げ続けると、あるところで根そのものがなくなります。M1M_1 ごとに、曲げられる最大角 θmax\theta_{\max} が決まっているのです。

M1M_11.52.03.05.0
θmax\theta_{\max}12.1°23.0°34.1°41.1°

θ>θmax\theta > \theta_{\max} になると衝撃波は物体に付いていられず、前方へ離れて曲線状の離脱衝撃波(bow shock)になります。離脱した瞬間、先端の前は事実上の垂直衝撃波になり、回復率は真っ逆さまに落ちます。

下のシミュレーションで直接操作してみましょう。

drag theta and watch the amber Vn arrow grow while the slate Vt arrow never changes — that is why p02/p01 falls. push theta past the amber thetamax line and the shock detaches. then drag M1: the whole theta-beta knee slides right, so a faster inlet can turn the flow harder.

M1M_1 スライダーを上げると、θ–β曲線の膝(knee)が右へ押し出されます。速いほど大きく曲げられるという意味です。θ\thetaθmax\theta_{\max} の向こうへ押して衝撃波が離脱する瞬間と、そのとき p02/p01p_{02}/p_{01} の数字がどう崩れるかを一緒に見てください。右の図の接線成分の矢印は、衝撃波の前後で長さが同じです — 削られるのは法線成分だけです。

損失は三乗で減る

ここで決定的な事実が一つ。弱い衝撃波のエントロピー増加は M1n1M_{1n}-1 に比例しません。三乗に比例します。

ΔsR2γ3(γ+1)2(M1n21)3\frac{\Delta s}{R} \simeq \frac{2\gamma}{3(\gamma+1)^2}\left(M_{1n}^2 - 1\right)^3

γ=1.4\gamma = 1.4 では係数は0.162です。M1n21M_{1n}^2 - 1 が半分になれば、損失は8分の1になります。

この三乗がOswatitschの計算を支えています。Mach 3で一度に立てる場合、衝撃波が引き受ける Mn21M_n^2-1 は8です。これを四つに割れば各断片ははるかに小さい値だけを引き受け、損失は断片ごとに三乗の分だけ小さくなります。断片の数だけ掛け合わせても、総和は元よりはるかに小さいままです。

実際の数字で確かめましょう。M1n=1.30M_{1n} = 1.30 一回の全圧損失は2.1%です。同じ仕事を M1n=1.15M_{1n} = 1.15 二回に分けると、それぞれ0.33%、合わせても0.7%に届きません。衝撃波の枚数は二倍なのに、損失は3分の1です。

Mach 3インレットを刻んでみます#

8°のランプを一枚ずつ増やし、最後に垂直衝撃波で締める構成を計算しました。各ランプは、前のランプを通ってきた局所Mach数で計算し直す必要があります。

import math
 
GAMMA = 1.4
 
def stagnation_ratio(mn):
    """垂直Mach数 mn を受ける衝撃波の全圧比 p02/p01"""
    g = GAMMA
    a = ((g + 1) * mn**2 / 2) / (1 + (g - 1) * mn**2 / 2)
    b = (g + 1) / (2 * g * mn**2 - (g - 1))
    return a ** (g / (g - 1)) * b ** (1 / (g - 1))
 
def downstream_normal_mach(mn):
    g = GAMMA
    return math.sqrt((1 + (g - 1) / 2 * mn**2) / (g * mn**2 - (g - 1) / 2))
 
def deflection(mach, beta):
    """与えられた波角 beta(rad)が作る曲がり角 theta(rad)"""
    g = GAMMA
    num = mach**2 * math.sin(beta) ** 2 - 1
    den = mach**2 * (g + math.cos(2 * beta)) + 2
    return math.atan(2 / math.tan(beta) * num / den)
 
def wave_angle_weak(mach, theta):
    """theta を作る弱い解 beta。曲げられなければ None"""
    lo, hi = math.asin(1 / mach), math.pi / 2
    grid = [lo + (hi - lo) * i / 4000 for i in range(4001)]
    peak = max(grid, key=lambda b: deflection(mach, b))
    if theta > deflection(mach, peak):
        return None
    a, b = lo, peak
    for _ in range(80):
        mid = 0.5 * (a + b)
        if deflection(mach, mid) < theta:
            a = mid
        else:
            b = mid
    return 0.5 * (a + b)
 
def inlet_recovery(mach_inf, n_ramps, ramp_deg):
    """ランプ n 枚 + 終端垂直衝撃波を通った後の全圧回復率"""
    theta = math.radians(ramp_deg)
    total, mach = 1.0, mach_inf
    for _ in range(n_ramps):
        beta = wave_angle_weak(mach, theta)
        if beta is None:
            break
        mn = mach * math.sin(beta)
        total *= stagnation_ratio(mn)
        mach = downstream_normal_mach(mn) / math.sin(beta - theta)
    return total * stagnation_ratio(mach)
 
for n in range(5):
    print(f"ランプ {n}枚: 回復率 {inlet_recovery(3.0, n, 8.0):.4f}")

出力はこうなります。

ランプ 0枚: 回復率 0.3283
ランプ 1枚: 回復率 0.4497
ランプ 2枚: 回復率 0.5808
ランプ 3枚: 回復率 0.7101
ランプ 4枚: 回復率 0.8235

8°ランプ四枚で回復率は0.33から0.82へ、2.5倍になります。総曲がり角はわずか32°で、追加したものは斜面四枚がすべてです。

Mach 2.4で6°ランプを使って繰り返しても傾向は同じです。0.5401 → 0.7440(2枚)→ 0.9096(4枚)。

ランプを無限に増やし、各ランプの曲がり角を0へ送れば、圧縮は等エントロピーに収束します。理論的には回復率1が可能だという意味です。実際のConcordeやSR-71のインレットが曲面ランプと可動スパイクを使う理由がここにあります。

下でランプの枚数と曲がり角を直接変えてみましょう。

keep M inf = 3.00 and delta = 8 deg, then drag N from 0 to 4 and watch the bottom number climb 0.3283 → 0.8235 while the red terminal shock bar gets visibly thinner. now push delta up: each ramp bites harder, the chain runs out of Mach, and it turns red.

ランプ枚数 NN を0から5まで上げながら、下のバーの回復率がどう上がっていくかを見てください。次にランプあたりの曲がり角を14°まで押していくと、あるところで後ろのランプが赤色に変わります。流れがすでに十分に遅くなっていて、その角度ではもう曲げられないという合図です。

刻むのはタダではありません

ではランプを20枚立てればよいのか。そうしない理由がいくつかあります。

第一に、長さです。ランプを一枚追加するたびに、衝撃波がカウル(cowl)リップに届く位置が後ろへずれます。インレットが長くなれば、その分だけ重量と摩擦抗力が付いてきます。回復率3%を稼ぐために機体を1 m伸ばす取引は、たいてい損です。

第二に、設計点を外れた条件です。ランプ角は、特定のMach数ですべての衝撃波がカウルリップにぴたりと集まる(shock-on-lip)ように合わせます。そのMach数を外れると衝撃波がリップの手前や内側へずれ、空気がインレットを迂回する溢流抗力(spillage drag)が生じます。ランプが多いほど、このずれに敏感になります。

第三に、境界層です。各ランプの衝撃波は壁面境界層と出会い、圧力を急激に上げます。衝撃波-境界層干渉が剥離を起こせば、計算上の回復率は意味を失います。実際のインレットがランプの近くに吸い込みスロット(bleed)を置く理由です。

第四に、終端の垂直衝撃波はなくせません。エンジンの圧縮機は亜音速の流入を要求します。どこかで必ず音速を通過しなければならないのです。ランプの役割は、その最後の衝撃波と出会うMach数を下げることであって、なくすことではありません。上の計算では、ランプ4枚の構成の終端衝撃波はMach 1.67で起こり、それ一枚だけで13%を持っていきます。

覚えておく三行

衝撃波を通って失うものは全圧ただ一つであり、損失は (M1n21)3(M_{1n}^2-1)^3 に比例します — だから弱い衝撃波はほとんどタダです。

斜め衝撃波は法線成分だけを受ける垂直衝撃波であり、θ\thetaβ\betaMM の関係には答えが二つあって、θmax\theta_{\max} を超えると答えが消えて衝撃波は離脱します。

同じ減速を複数の断片に分ければ、三乗のおかげで総損失は激減します。Mach 3での8°ランプ四枚は、回復率を0.33から0.82へ引き上げます。代償はインレットの長さと、設計点からのずれに対する敏感さです。

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