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

Four Shocks Beat One — The Oblique Shock Train in a Supersonic Inlet

Why several weak oblique shocks cost far less stagnation pressure than one strong shock

Göttingen, 1944. Klaus Oswatitsch was wrestling with the inlet problem for supersonic propulsion. A ramjet has to compress the air it swallows, but bringing Mach 3 flow to a halt threw away two thirds of the pressure. His answer was not to compress harder. It was to break the compression into pieces. Stand up a few ramps and turn the flow only a little at a time. Today we pull that arithmetic out of the oblique-shock relations — the shocks that stand at an angle to the flow — and then count for ourselves how the recovery moves as the number of ramps changes.

What a Shock Takes From You#

Mass, momentum and energy all survive a shock. So does the stagnation temperature T0T_0. Exactly one thing disappears: the stagnation pressure (total pressure) p0p_0.

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

Δs\Delta s is the entropy generated across the shock, RR the gas constant. Total pressure is shaved off in proportion to the entropy gained.

Why total pressure of all things? Because the total pressure is the ceiling on the work the inlet can hand to the engine. Halve the stagnation pressure and you halve the expansion ratio available at the nozzle. That is why inlet performance collapses into a single number, the recovery πd=p0e/p0\pi_d = p_{0e}/p_{0\infty}.

Stand a single normal shock in Mach 3 flow and what is that number? Exactly 0.3283. 67% of the total pressure is scattered into heat.

Hit It at an Angle and Only the Normal Component Survives#

Tilt the shock relative to the flow and the story changes. The velocity component parallel to the shock face passes through unchanged, because the pressure gradient acts only normal to the face.

So an oblique shock is a normal shock that only feels the normal component. Once the wave angle β\beta is fixed, the effective Mach number is

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

The smaller β\beta is, the closer M1nM_{1n} sits to 1. Even in Mach 3 flow, at β=25.6°\beta = 25.6° what the shock actually experiences is a weak Mach 1.30 shock.

The flow deflection angle θ\theta and the wave angle β\beta are tied together by this relation.

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 is the ratio of specific heats (1.4 for air). You could say this one equation is the whole post.

One θ–β–M Relation, Two Answers#

Give M1M_1 and θ\theta, solve for β\beta, and two roots come out. The smaller wave angle is the weak solution, the larger one the strong solution. Behind the weak solution the flow usually stays supersonic; behind the strong one it goes subsonic.

Nature picks the weak solution almost every time. Unless the back pressure is unusually high, the shock attached to a wedge is the weak one.

And if you keep increasing θ\theta, at some point the roots vanish altogether. Every M1M_1 has a maximum turning angle θmax\theta_{\max}.

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

If θ>θmax\theta > \theta_{\max}, the shock can no longer stay attached to the body. It detaches, moves upstream and becomes a curved bow shock. The instant it detaches, the portion right in front of the nose is effectively a normal shock, and the recovery falls off a cliff.

Try it yourself in the simulation below.

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.

Push the M1M_1 slider up and the knee of the θ–β curve slides to the right — faster flow can be turned harder. Then push θ\theta past θmax\theta_{\max} and watch both the moment the shock detaches and how the p02/p01p_{02}/p_{01} number collapses along with it. In the right-hand figure the tangential-component arrows are the same length upstream and downstream — only the normal component gets shaved.

The Loss Falls as a Cube#

Here is the decisive fact. The entropy rise across a weak shock is not proportional to M1n1M_{1n}-1. It is proportional to the cube.

Δ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

At γ=1.4\gamma = 1.4 the coefficient is 0.162. Halve M1n21M_{1n}^2 - 1 and the loss drops to one eighth.

That cube is what holds Oswatitsch's arithmetic up. At Mach 3, the Mn21M_n^2-1 that a single shock must absorb is 8. Split that into four pieces and each piece absorbs a much smaller value, with the loss falling by the cube on every piece. Multiply the pieces back together and the total is still far below the original.

Check it with real numbers. One shock at M1n=1.30M_{1n} = 1.30 loses 2.1% of the total pressure. Split the same job into two shocks at M1n=1.15M_{1n} = 1.15 and each loses 0.33%, under 0.7% together. Twice as many shocks, one third of the loss.

Slicing Up a Mach 3 Inlet#

I computed a configuration that adds 8° ramps one at a time and finishes with a terminal normal shock. Each ramp has to be recomputed with the local Mach number left behind by the ramp ahead of it.

import math
 
GAMMA = 1.4
 
def stagnation_ratio(mn):
    """Total pressure ratio p02/p01 across a shock seeing normal Mach number mn"""
    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):
    """Deflection angle theta(rad) produced by a given wave angle beta(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):
    """Weak-solution beta that produces theta. None if the flow cannot turn that far"""
    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):
    """Total pressure recovery after n ramps plus a terminal normal shock"""
    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} ramps: recovery {inlet_recovery(3.0, n, 8.0):.4f}")

The output is this.

0 ramps: recovery 0.3283
1 ramps: recovery 0.4497
2 ramps: recovery 0.5808
3 ramps: recovery 0.7101
4 ramps: recovery 0.8235

Four 8° ramps take the recovery from 0.33 to 0.82, a factor of 2.5. The total turning is only 32°, and all that was added is four inclined surfaces.

Repeat it at Mach 2.4 with 6° ramps and the trend is the same. 0.5401 → 0.7440 (two) → 0.9096 (four).

Let the number of ramps go to infinity while each turning angle goes to zero and the compression converges to isentropic. Which means a recovery of 1 is theoretically reachable. That is exactly why the real Concorde and SR-71 inlets use curved ramps and translating spikes.

Change the ramp count and the turning angle yourself below.

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.

Raise the ramp count NN from 0 to 5 and watch the recovery bar at the bottom climb. Then push the per-ramp turning angle out to 14° and at some point the rear ramps turn red. That is the signal that the flow has already slowed enough that it cannot be turned that far anymore.

Splitting Is Not Free#

So why not stand up 20 ramps? A few reasons.

First, length. Every added ramp pushes the point where the shock reaches the cowl lip further back. A longer inlet brings weight and friction drag with it. Trading a meter of fuselage for three points of recovery is usually a losing deal.

Second, off-design conditions. Ramp angles are set so that at one particular Mach number every shock converges precisely on the cowl lip — shock-on-lip. Step off that Mach number and the shocks land ahead of or inside the lip, and air spilling around the inlet generates spillage drag. The more ramps there are, the more sensitive the arrangement is to that mismatch.

Third, the boundary layer. Each ramp's shock meets the wall boundary layer and raises the pressure abruptly. If the shock–boundary-layer interaction separates the flow, the recovery you calculated stops meaning anything. That is why real inlets put bleed slots near the ramps.

Fourth, the terminal normal shock cannot be removed. The engine compressor demands subsonic inflow. Somewhere the flow must pass through the speed of sound. The ramps exist to lower the Mach number at which that final shock happens, not to eliminate it. In the calculation above, the four-ramp case has its terminal shock at Mach 1.67, and that one shock alone takes 13%.

Three Lines Worth Remembering#

The only thing lost across a shock is total pressure, and the loss scales as (M1n21)3(M_{1n}^2-1)^3 — which is what makes weak shocks nearly free.

An oblique shock is a normal shock that only feels the normal component; the θ\thetaβ\betaMM relation has two answers, and past θmax\theta_{\max} it has none and the shock detaches.

Split the same deceleration into several pieces and the cube makes the total loss plummet. At Mach 3, four 8° ramps lift the recovery from 0.33 to 0.82. The price is inlet length and sensitivity to off-design operation.

Share if you found it helpful.