Flat Plate Skin Friction Heating (aerodynamics/high-speed/flat-plate-skin-friction-heating)
Use when the task is estimating the convective skin friction heating on
a flat plate or vehicle skin away from the leading edge at high Mach:
recovery factor, adiabatic wall temperature, Eckert reference
temperature, Sutherland viscosity, local skin friction coefficient and
cold-wall heat flux for laminar or turbulent boundary layers. This leaf
implements the classical compressible boundary-layer model in pure
Python, stdlib only, with the module constants from the leaf spec
(GAMMA = 1.4, R = 287.0, CP = 1005.0, PR = 0.71, MU_REF = 1.716e-5,
T_REF = 273.15, SUTH_S = 110.4). It pairs with
aerodynamics/high-speed/aerodynamic-heating for the leading-edge
counterpart and with the inviscid shock leaves for the flow-field
context around the boundary layer.
Domain quick reference
- Recovery factor: laminar r = sqrt(PR) about 0.8426, turbulent
r = PR**(1/3) about 0.8921 for air. The factor converts kinetic
heating into the driving temperature for heat transfer.
- Adiabatic wall temperature: T_aw = T_inf * (1 + r * (GAMMA - 1) / 2 *
M**2). This is the wall temperature at which the net convective flux
is zero; it is the correct reference for the flux, not T_inf.
- Eckert reference temperature: T_star = T_inf * (1 + 0.032 * M**2 +
0.58 * (T_wall / T_inf - 1)), the compressibility-corrected
temperature for evaluating the local properties.
- Sutherland viscosity: mu = MU_REF * (T / T_REF)**1.5 * (T_REF +
SUTH_S) / (T + SUTH_S), Pa s.
- Edge velocity: U_e = M * sqrt(GAMMA * R * T_inf). Density at the
reference state: rho_star = p_inf / (R * T_star).
- Reynolds number at the reference state: Re_star = rho_star * U_e * x
/ mu_star, with x the running length from the leading edge.
- Local skin friction: laminar Cf = 0.664 / sqrt(Re_star); turbulent
Cf = 0.0592 / Re_star**0.2 (1/7-power law form).
- Heat transfer coefficient, Reynolds-analogy style:
h_c = 0.5 * Cf * rho_star * U_e * CP, W/(m2 K).
- Cold-wall heat flux: q_cold_wall = h_c * (T_aw - T_wall), W/m2.
Positive into a cold wall, negative when the wall is hotter than the
adiabatic wall temperature (wall heating).
- Units are SI throughout: K, Pa, kg/m3, m/s, W/m2.
- NACA-TR-824 frames the classical boundary-layer context; the
relations above are standard engineering methodology, summary-only.
Workflow
- Fix the flight point: Mach M, static temperature T_inf, static
pressure p_inf, the running length x and the regime ("laminar" or
"turbulent"). The model takes freestream or local edge conditions.
- Choose the regime recovery factor with recovery_factor(regime) and
confirm r against the PR powers (0.8426 laminar, 0.8921 turbulent).
- Get the driving temperature: adiabatic_wall_temperature(M, T_inf,
regime). At M = 0 this returns T_inf (zero-speed identity).
- Compute the compressibility-corrected property state:
reference_temperature(M, T_inf, T_wall) and
sutherland_viscosity(T_star).
- Evaluate the boundary layer: skin_friction_coefficient(M, T_inf,
p_inf, T_wall, x, regime) returns the dict {T_star, rho_star,
mu_star, Re_star, Cf} at the reference state.
- Convert friction to heat transfer with
heat_transfer_coefficient(cf, rho_star, u_e) using the
Reynolds-analogy factor 0.5.
- Report the heating: cold_wall_heat_flux(M, T_inf, p_inf, T_wall, x,
regime) chains all of the above into {r, T_aw, T_star, Re_star, Cf,
h_c, q_cold_wall}. Run it for both regimes when the transition
location is unknown and take the envelope.
- Confirm the deterministic checks with the contract test
scripts/test_flat_plate_skin_friction_heating.py.
Worked example
Mach 3 cruise point: M = 3.0, T_inf = 223.0 K, p_inf = 10000.0 Pa,
T_wall = 500.0 K (heated wall), x = 0.5 m.
- Turbulent: r = 0.89211, T_aw = 581.09 K, T_star = 447.88 K,
rho_star = 0.077795 kg/m3, mu_star = 2.4753e-5 Pa s,
Re_star = 1.4111e6, Cf = 0.003487, h_c = 122.40 W/(m2 K),
q_cold_wall = 9925.7 W/m2.
- Laminar at the same point: r = 0.84261, T_aw = 561.23 K,
Re_star = 1.4111e6 (identical T_star), Cf = 5.590e-4,
h_c = 19.62 W/(m2 K), q_cold_wall = 1201.4 W/m2.
- The turbulent flux is about 8.3 times the laminar value at the same
Reynolds number, so calling the regime wrong changes the thermal
protection answer by an order of magnitude.
- At the adiabatic condition T_wall = T_aw = 581.09 K the flux returns
to zero; raising the wall above T_aw (for example to 1200 K) makes
q_cold_wall negative, which is wall heating back into the flow.
Verification
- Confirm cold_wall_heat_flux(3.0, 223.0, 10000.0, 500.0, 0.5,
"turbulent")["q_cold_wall"] = 9925.7 W/m2 and the laminar run gives
1201.4 W/m2, each within 1 percent of the prep-verified anchors.
- Confirm recovery_factor("laminar") = 0.84261 and
recovery_factor("turbulent") = 0.89211 match sqrt(PR) and PR**(1/3).
- Confirm adiabatic_wall_temperature(0.0, T_inf, regime) equals T_inf
and that T_star lies between T_inf and T_wall for the heated-wall
example.
- Confirm sutherland_viscosity(273.15) equals MU_REF within 1e-3
relative.
- Confirm the sign flip: T_wall > T_aw gives negative q_cold_wall.
- Confirm every non-physical input raises ValueError: M <= 0 or >= 20
(flight functions), T_inf <= 0, p_inf <= 0, x <= 0, T_wall <= 0, and
any regime string other than "laminar" or "turbulent". The module
admits M = 0 only inside adiabatic_wall_temperature so the zero-speed
identity T_aw = T_inf is testable; every function that needs an edge
velocity requires 0 < M < 20.
- Run the contract test offline: python3
scripts/test_flat_plate_skin_friction_heating.py (34 tests,
deterministic).
Related leaves
- aerodynamics/high-speed/aerodynamic-heating: the leading-edge
stagnation convective heating counterpart of this surface skin
heating model.
- aerodynamics/high-speed/hypersonic-flow: the regime map that decides
when real-gas and strong-shock effects matter for the edge state.
- aerodynamics/high-speed/normal-shock: post-shock conditions that
provide the boundary-layer edge state behind a shock.
- aerodynamics/high-speed/oblique-shock: the inviscid flow turning that
sets the edge Mach number for swept or wedge-type surfaces.
- aerodynamics/high-speed/shock-expansion-airfoil: edge conditions
along an airfoil surface for panel-by-panel heating runs.
Pitfalls
- Using the stagnation-point correlation for surface locations: the
stagnation convective heating correlation peaks at the leading edge
and is not valid down the surface; this leaf owns the non-stagnation
skin heating with local edge conditions and running length x.
- Driving the flux with T_inf instead of T_aw: at M = 3 the recovery
temperature is 581.09 K against 223.0 K static, so a flux computed
from T_inf badly understates the driving potential (T_aw - T_wall).
- Calling the regime wrong: the turbulent flux is about 8.3 times the
laminar value at the same Reynolds number in the worked example, so
an assumed transition point changes the thermal protection margin by
an order of magnitude.
- Evaluating properties at freestream instead of reference conditions:
at M = 3 even a cold wall gives T_star above T_inf (244.9 K at a
150 K wall), and density computed from T_inf overstates rho_star and
the Reynolds number, shifting Cf.
- Mixing the recovery-factor powers: laminar uses sqrt(PR) (0.8426)
and turbulent uses PR**(1/3) (0.8921); swapping them changes T_aw by
almost 20 K in the example.
- Reading q_cold_wall as the structural heat load: it assumes the wall
holds at T_wall; conduction through the skin and re-radiation to the
surroundings rebalance it in a real thermal protection check.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_flat_plate_skin_friction_heating.py
The test covers the module constants, the recovery factor for both
regimes against the PR powers and its ValueError on bad regime strings,
the adiabatic wall temperature anchors and the M = 0 identity, the
Eckert reference temperature anchor with the between-static-and-wall
bound, the Sutherland law at the reference temperature, the worked
example anchors within 1 percent (Re_star 1.41e6, Cf 0.003487,
q_cold_wall 9926 W/m2 turbulent; q_cold_wall 1201 W/m2 and T_aw 561 K
laminar), the laminar Blasius closed form, the turbulent-over-laminar
Cf order, the Reynolds-number scaling with length, the wall-heating
sign flip, the zero-flux adiabatic wall round trip, the
Reynolds-analogy heat transfer coefficient, determinism of the full
chain, and ValueError rejection of every non-physical input class.
Compliance
- Standards referenced, not reproduced: NACA-TR-824 provides the
classical boundary-layer context for the skin friction and recovery
factor correlations; the relations above are standard engineering
methodology, summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: flat-plate-skin-friction-heating3description: Use when you must estimate the surface skin friction heating on a flat plate or vehicle skin at high Mach: it computes the recovery factor, adiabatic wall temperature, Eckert reference temperature, Sutherland viscosity, local skin friction coefficient and Reynolds-analogy heat transfer coefficient, then the cold-wall heat flux for a laminar or turbulent boundary layer. Produces the non-stagnation heating report with r, T_aw, T_star, Re_star, Cf, h_c and q_cold_wall in SI units for a thermal protection check. Trigger: recovery-factor, adiabatic-wall-temperature, cold-wall-heat-flux, reference-temperature-method, reynolds-analogy-factor, skin-friction-coefficient, turbulent-plate-heating, flat-plate-heating.4license: Apache-2.05---67# Flat Plate Skin Friction Heating (aerodynamics/high-speed/flat-plate-skin-friction-heating)89Use when the task is estimating the convective skin friction heating on10a flat plate or vehicle skin away from the leading edge at high Mach:11recovery factor, adiabatic wall temperature, Eckert reference12temperature, Sutherland viscosity, local skin friction coefficient and13cold-wall heat flux for laminar or turbulent boundary layers. This leaf14implements the classical compressible boundary-layer model in pure15Python, stdlib only, with the module constants from the leaf spec16(GAMMA = 1.4, R = 287.0, CP = 1005.0, PR = 0.71, MU_REF = 1.716e-5,17T_REF = 273.15, SUTH_S = 110.4). It pairs with18aerodynamics/high-speed/aerodynamic-heating for the leading-edge19counterpart and with the inviscid shock leaves for the flow-field20context around the boundary layer.2122## Domain quick reference2324- Recovery factor: laminar r = sqrt(PR) about 0.8426, turbulent25 r = PR**(1/3) about 0.8921 for air. The factor converts kinetic26 heating into the driving temperature for heat transfer.27- Adiabatic wall temperature: T_aw = T_inf * (1 + r * (GAMMA - 1) / 2 *28 M**2). This is the wall temperature at which the net convective flux29 is zero; it is the correct reference for the flux, not T_inf.30- Eckert reference temperature: T_star = T_inf * (1 + 0.032 * M**2 +31 0.58 * (T_wall / T_inf - 1)), the compressibility-corrected32 temperature for evaluating the local properties.33- Sutherland viscosity: mu = MU_REF * (T / T_REF)**1.5 * (T_REF +34 SUTH_S) / (T + SUTH_S), Pa s.35- Edge velocity: U_e = M * sqrt(GAMMA * R * T_inf). Density at the36 reference state: rho_star = p_inf / (R * T_star).37- Reynolds number at the reference state: Re_star = rho_star * U_e * x38 / mu_star, with x the running length from the leading edge.39- Local skin friction: laminar Cf = 0.664 / sqrt(Re_star); turbulent40 Cf = 0.0592 / Re_star**0.2 (1/7-power law form).41- Heat transfer coefficient, Reynolds-analogy style:42 h_c = 0.5 * Cf * rho_star * U_e * CP, W/(m2 K).43- Cold-wall heat flux: q_cold_wall = h_c * (T_aw - T_wall), W/m2.44 Positive into a cold wall, negative when the wall is hotter than the45 adiabatic wall temperature (wall heating).46- Units are SI throughout: K, Pa, kg/m3, m/s, W/m2.47- NACA-TR-824 frames the classical boundary-layer context; the48 relations above are standard engineering methodology, summary-only.4950## Workflow51521. Fix the flight point: Mach M, static temperature T_inf, static53 pressure p_inf, the running length x and the regime ("laminar" or54 "turbulent"). The model takes freestream or local edge conditions.552. Choose the regime recovery factor with recovery_factor(regime) and56 confirm r against the PR powers (0.8426 laminar, 0.8921 turbulent).573. Get the driving temperature: adiabatic_wall_temperature(M, T_inf,58 regime). At M = 0 this returns T_inf (zero-speed identity).594. Compute the compressibility-corrected property state:60 reference_temperature(M, T_inf, T_wall) and61 sutherland_viscosity(T_star).625. Evaluate the boundary layer: skin_friction_coefficient(M, T_inf,63 p_inf, T_wall, x, regime) returns the dict {T_star, rho_star,64 mu_star, Re_star, Cf} at the reference state.656. Convert friction to heat transfer with66 heat_transfer_coefficient(cf, rho_star, u_e) using the67 Reynolds-analogy factor 0.5.687. Report the heating: cold_wall_heat_flux(M, T_inf, p_inf, T_wall, x,69 regime) chains all of the above into {r, T_aw, T_star, Re_star, Cf,70 h_c, q_cold_wall}. Run it for both regimes when the transition71 location is unknown and take the envelope.728. Confirm the deterministic checks with the contract test73 scripts/test_flat_plate_skin_friction_heating.py.7475## Worked example7677Mach 3 cruise point: M = 3.0, T_inf = 223.0 K, p_inf = 10000.0 Pa,78T_wall = 500.0 K (heated wall), x = 0.5 m.7980- Turbulent: r = 0.89211, T_aw = 581.09 K, T_star = 447.88 K,81 rho_star = 0.077795 kg/m3, mu_star = 2.4753e-5 Pa s,82 Re_star = 1.4111e6, Cf = 0.003487, h_c = 122.40 W/(m2 K),83 q_cold_wall = 9925.7 W/m2.84- Laminar at the same point: r = 0.84261, T_aw = 561.23 K,85 Re_star = 1.4111e6 (identical T_star), Cf = 5.590e-4,86 h_c = 19.62 W/(m2 K), q_cold_wall = 1201.4 W/m2.87- The turbulent flux is about 8.3 times the laminar value at the same88 Reynolds number, so calling the regime wrong changes the thermal89 protection answer by an order of magnitude.90- At the adiabatic condition T_wall = T_aw = 581.09 K the flux returns91 to zero; raising the wall above T_aw (for example to 1200 K) makes92 q_cold_wall negative, which is wall heating back into the flow.9394## Verification9596- Confirm cold_wall_heat_flux(3.0, 223.0, 10000.0, 500.0, 0.5,97 "turbulent")["q_cold_wall"] = 9925.7 W/m2 and the laminar run gives98 1201.4 W/m2, each within 1 percent of the prep-verified anchors.99- Confirm recovery_factor("laminar") = 0.84261 and100 recovery_factor("turbulent") = 0.89211 match sqrt(PR) and PR**(1/3).101- Confirm adiabatic_wall_temperature(0.0, T_inf, regime) equals T_inf102 and that T_star lies between T_inf and T_wall for the heated-wall103 example.104- Confirm sutherland_viscosity(273.15) equals MU_REF within 1e-3105 relative.106- Confirm the sign flip: T_wall > T_aw gives negative q_cold_wall.107- Confirm every non-physical input raises ValueError: M <= 0 or >= 20108 (flight functions), T_inf <= 0, p_inf <= 0, x <= 0, T_wall <= 0, and109 any regime string other than "laminar" or "turbulent". The module110 admits M = 0 only inside adiabatic_wall_temperature so the zero-speed111 identity T_aw = T_inf is testable; every function that needs an edge112 velocity requires 0 < M < 20.113- Run the contract test offline: python3114 scripts/test_flat_plate_skin_friction_heating.py (34 tests,115 deterministic).116117## Related leaves118119- aerodynamics/high-speed/aerodynamic-heating: the leading-edge120 stagnation convective heating counterpart of this surface skin121 heating model.122- aerodynamics/high-speed/hypersonic-flow: the regime map that decides123 when real-gas and strong-shock effects matter for the edge state.124- aerodynamics/high-speed/normal-shock: post-shock conditions that125 provide the boundary-layer edge state behind a shock.126- aerodynamics/high-speed/oblique-shock: the inviscid flow turning that127 sets the edge Mach number for swept or wedge-type surfaces.128- aerodynamics/high-speed/shock-expansion-airfoil: edge conditions129 along an airfoil surface for panel-by-panel heating runs.130131## Pitfalls132133- Using the stagnation-point correlation for surface locations: the134 stagnation convective heating correlation peaks at the leading edge135 and is not valid down the surface; this leaf owns the non-stagnation136 skin heating with local edge conditions and running length x.137- Driving the flux with T_inf instead of T_aw: at M = 3 the recovery138 temperature is 581.09 K against 223.0 K static, so a flux computed139 from T_inf badly understates the driving potential (T_aw - T_wall).140- Calling the regime wrong: the turbulent flux is about 8.3 times the141 laminar value at the same Reynolds number in the worked example, so142 an assumed transition point changes the thermal protection margin by143 an order of magnitude.144- Evaluating properties at freestream instead of reference conditions:145 at M = 3 even a cold wall gives T_star above T_inf (244.9 K at a146 150 K wall), and density computed from T_inf overstates rho_star and147 the Reynolds number, shifting Cf.148- Mixing the recovery-factor powers: laminar uses sqrt(PR) (0.8426)149 and turbulent uses PR**(1/3) (0.8921); swapping them changes T_aw by150 almost 20 K in the example.151- Reading q_cold_wall as the structural heat load: it assumes the wall152 holds at T_wall; conduction through the skin and re-radiation to the153 surroundings rebalance it in a real thermal protection check.154155## Behavior contract (gate 3)156157Run the deterministic contract test (stdlib unittest, offline):158159 python3 scripts/test_flat_plate_skin_friction_heating.py160161The test covers the module constants, the recovery factor for both162regimes against the PR powers and its ValueError on bad regime strings,163the adiabatic wall temperature anchors and the M = 0 identity, the164Eckert reference temperature anchor with the between-static-and-wall165bound, the Sutherland law at the reference temperature, the worked166example anchors within 1 percent (Re_star 1.41e6, Cf 0.003487,167q_cold_wall 9926 W/m2 turbulent; q_cold_wall 1201 W/m2 and T_aw 561 K168laminar), the laminar Blasius closed form, the turbulent-over-laminar169Cf order, the Reynolds-number scaling with length, the wall-heating170sign flip, the zero-flux adiabatic wall round trip, the171Reynolds-analogy heat transfer coefficient, determinism of the full172chain, and ValueError rejection of every non-physical input class.173174## Compliance175176- Standards referenced, not reproduced: NACA-TR-824 provides the177 classical boundary-layer context for the skin friction and recovery178 factor correlations; the relations above are standard engineering179 methodology, summary-only per standards-map.yaml.180- compliance: STANDARDS-REF, gated: false.