Prandtl-Meyer Expansion (aerodynamics/high-speed/prandtl-meyer)
Use when the task is the Prandtl-Meyer expansion of a supersonic
flow: the expansion angle from the Mach number, the downstream Mach
number after the flow turns away from itself, the total turning
angle of the fan, and the static pressure ratio across it.
Domain quick reference
- Prandtl-Meyer function: nu(M) = sqrt((gamma+1)/(gamma-1)) *
atan(sqrt((gamma-1)/(gamma+1) * (M^2 - 1))) - atan(sqrt(M^2 - 1)),
in radians. nu(1.0) = 0.0 exactly: the expansion fan collapses to
zero width at the sonic point and widens monotonically above it.
The function is undefined for subsonic Mach numbers (M < 1 raises
ValueError).
- Specific heat ratio: gamma (default 1.4 for air) must be > 1.
- Total turning angle of an expansion fan: delta = nu(M2) - nu(M1)
in radians for a flow turning away from itself; positive for an
expansion (M2 > M1), negative for a compression (not a
Prandtl-Meyer fan).
- Downstream Mach after a turn: solve nu(M2) = nu(M1) + delta for
M2, where delta is the turning angle in radians. Bisection on the
bracket [1, 50] is deterministic and offline; a turning angle too
large for the bracket raises ValueError.
- Static pressure ratio: p2/p1 = pr(M2) / pr(M1) with the isentropic
relation pr(M) = (1 + (gamma-1)/2 * M^2)^(-gamma/(gamma-1));
always < 1 for M2 > M1 (the expansion drops static pressure as it
accelerates the flow).
- Textbook anchor (Anderson, Modern Compressible Flow, Table A.5):
nu(2.0) = 26.380 deg at gamma = 1.4; a 10 deg turn from M = 2.0
gives M2 = 2.385 and p2/p1 = 0.548.
Workflow
- Collect the upstream Mach number M1 (must be >= 1) and the
specific heat ratio gamma (default 1.4).
- Compute the expansion angle with prandtl_meyer_function; verify
the flow is supersonic before trusting the fan.
- For a turn away from itself, find the downstream Mach number with
mach_after_expansion from the turning angle in degrees.
- Compute the total turning angle between two Mach numbers with
flow_turn_angle.
- Compute the static pressure drop with expansion_pressure_ratio.
- Get the downstream state at once with expansion_properties for
the airfoil, inlet, or nozzle analysis.
Pitfalls
- Feeding a subsonic Mach number: nu(M) is undefined below Mach 1;
a subsonic input raises, never returns a negative angle.
- Using degrees where radians are expected: prandtl_meyer_function
and flow_turn_angle return radians; mach_after_expansion takes the
turning angle in degrees.
- Confusing expansion with compression: a flow turning toward itself
is a shock, not a Prandtl-Meyer fan; flow_turn_angle is only the
expansion (M2 > M1) case.
- Asking for an unreachable turning angle: nu(M) is bounded above,
so a turn too large for the Mach bracket raises instead of
converging to nonsense.
- Treating the fan as zero width above Mach 1: nu(M) = 0 only at
M = 1; any M > 1 widens the fan strictly.
Behavior contract (gate 3)
The Prandtl-Meyer function, turning angle, downstream Mach,
pressure ratio, and downstream state logic is exercised by the gate
3 contract test: scripts/test_prandtl_meyer.py against
scripts/prandtl_meyer_logic.py (stdlib unittest, offline). Run:
python3 scripts/test_prandtl_meyer.py
Compliance
- Standards referenced, not reproduced: NACA TR-824 anchors the
compressible-flow tables (Anderson, Modern Compressible Flow,
Table A.5 reproduces its values); the Prandtl-Meyer relations are
standard compressible-flow methodology, summary-only per
standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: prandtl-meyer3description: Use when you must compute Prandtl-Meyer expansion relations for supersonic compressible flow: derive the expansion angle from the Mach number, find the downstream Mach number after the flow turns away from itself by a given angle, compute the total turning angle across the expansion fan, and the static pressure ratio across it. Produces the Prandtl-Meyer angle, the downstream Mach number, the turning angle, and the pressure ratio that gate supersonic airfoil, inlet, and nozzle analysis. Trigger: prandtl-meyer, expansion fan, mach number, supersonic flow, turning angle, compressible flow.4license: Apache-2.05---67# Prandtl-Meyer Expansion (aerodynamics/high-speed/prandtl-meyer)89Use when the task is the Prandtl-Meyer expansion of a supersonic10flow: the expansion angle from the Mach number, the downstream Mach11number after the flow turns away from itself, the total turning12angle of the fan, and the static pressure ratio across it.1314## Domain quick reference1516- Prandtl-Meyer function: nu(M) = sqrt((gamma+1)/(gamma-1)) *17 atan(sqrt((gamma-1)/(gamma+1) * (M^2 - 1))) - atan(sqrt(M^2 - 1)),18 in radians. nu(1.0) = 0.0 exactly: the expansion fan collapses to19 zero width at the sonic point and widens monotonically above it.20 The function is undefined for subsonic Mach numbers (M < 1 raises21 ValueError).22- Specific heat ratio: gamma (default 1.4 for air) must be > 1.23- Total turning angle of an expansion fan: delta = nu(M2) - nu(M1)24 in radians for a flow turning away from itself; positive for an25 expansion (M2 > M1), negative for a compression (not a26 Prandtl-Meyer fan).27- Downstream Mach after a turn: solve nu(M2) = nu(M1) + delta for28 M2, where delta is the turning angle in radians. Bisection on the29 bracket [1, 50] is deterministic and offline; a turning angle too30 large for the bracket raises ValueError.31- Static pressure ratio: p2/p1 = pr(M2) / pr(M1) with the isentropic32 relation pr(M) = (1 + (gamma-1)/2 * M^2)^(-gamma/(gamma-1));33 always < 1 for M2 > M1 (the expansion drops static pressure as it34 accelerates the flow).35- Textbook anchor (Anderson, Modern Compressible Flow, Table A.5):36 nu(2.0) = 26.380 deg at gamma = 1.4; a 10 deg turn from M = 2.037 gives M2 = 2.385 and p2/p1 = 0.548.3839## Workflow40411. Collect the upstream Mach number M1 (must be >= 1) and the42 specific heat ratio gamma (default 1.4).432. Compute the expansion angle with prandtl_meyer_function; verify44 the flow is supersonic before trusting the fan.453. For a turn away from itself, find the downstream Mach number with46 mach_after_expansion from the turning angle in degrees.474. Compute the total turning angle between two Mach numbers with48 flow_turn_angle.495. Compute the static pressure drop with expansion_pressure_ratio.506. Get the downstream state at once with expansion_properties for51 the airfoil, inlet, or nozzle analysis.5253## Pitfalls5455- Feeding a subsonic Mach number: nu(M) is undefined below Mach 1;56 a subsonic input raises, never returns a negative angle.57- Using degrees where radians are expected: prandtl_meyer_function58 and flow_turn_angle return radians; mach_after_expansion takes the59 turning angle in degrees.60- Confusing expansion with compression: a flow turning toward itself61 is a shock, not a Prandtl-Meyer fan; flow_turn_angle is only the62 expansion (M2 > M1) case.63- Asking for an unreachable turning angle: nu(M) is bounded above,64 so a turn too large for the Mach bracket raises instead of65 converging to nonsense.66- Treating the fan as zero width above Mach 1: nu(M) = 0 only at67 M = 1; any M > 1 widens the fan strictly.6869## Behavior contract (gate 3)7071The Prandtl-Meyer function, turning angle, downstream Mach,72pressure ratio, and downstream state logic is exercised by the gate733 contract test: scripts/test_prandtl_meyer.py against74scripts/prandtl_meyer_logic.py (stdlib unittest, offline). Run:75python3 scripts/test_prandtl_meyer.py7677## Compliance7879- Standards referenced, not reproduced: NACA TR-824 anchors the80 compressible-flow tables (Anderson, Modern Compressible Flow,81 Table A.5 reproduces its values); the Prandtl-Meyer relations are82 standard compressible-flow methodology, summary-only per83 standards-map.yaml.84- compliance: STANDARDS-REF, gated: false.