Thrust Chamber Cooling (propulsion/rocket/thrust-chamber-cooling)
Use when the task is the thermal design of a liquid rocket thrust
chamber and nozzle wall: the throat area and mass flow anchor, the
hot-gas side Bartz convective coefficient at the throat, the
coolant-side coefficient from the regenerative channel flow, the series
wall resistance network giving the heat flux and the hot and cold wall
temperatures, and the coolant mass flux required to hold a copper wall
temperature limit before handing off to film cooling. This leaf
implements the regenerative cooling thermal balance in pure Python,
stdlib only. It pairs with propulsion/rocket/combustion-chamber-design,
which sizes the chamber and delivers the operating point, and
propulsion/rocket/nozzle-design, which takes the geometry downstream.
The gas-turbine analogue with air-cooled blades lives in
propulsion/axial-compressor/turbine-blade-cooling; this leaf is the
rocket chamber wall counterpart.
Domain quick reference
- Throat area: A_t = pi d^2 / 4 for a circular throat of diameter d.
The throat is the reference station of the whole thermal balance.
- Mass flow anchor: m_dot = Pc * A_t / c-star, with c-star the
delivered characteristic velocity from the chamber design leaf.
- Recovery temperature at the throat (M = 1): T_t = T_c / (1 +
(gamma - 1) / 2) with T_c the chamber total temperature, and
T_aw = T_t * (1 + r * (gamma - 1) / 2) with the recovery factor
r = Pr^(1/3). T_aw sits between T_t and T_c; the recovery
temperature drives the hot wall balance.
- Bartz hot gas coefficient (SI form, throat station At/A = 1):
h_g = 0.026 * (mu^0.2 * cp / Pr^0.6) * (Pc / c-star)^0.8 / Dt^0.2 *
sigma, with sigma the transport-property correction (about 1 at the
throat). h_g scales as Pc^0.8 and Dt^-0.2.
- Coolant side, Dittus-Boelter for the heated channel flow: Re =
G * D_h / mu, Pr = cp * mu / k, Nu = 0.023 * Re^0.8 * Pr^0.4,
h_c = Nu * k / D_h, with G the coolant mass flux and D_h the channel
hydraulic diameter.
- Series wall network: R = 1/h_g + t_w/k_w + 1/h_c; q = (T_aw -
T_cool) / R; T_wg = T_aw - q/h_g; T_wc = T_cool + q/h_c; and the
wall drop T_wg - T_wc = q * t_w/k_w. Copper walls run at high flux,
so the wall drop is small relative to the convective drops.
- Wall limit sizing: q_lim = h_g * (T_aw - T_lim) fixes the flux that
holds the hot wall at the limit; R_lim = (T_aw - T_cool) / q_lim
gives the network resistance, the required h_c follows from the
series network, and inverting the Dittus-Boelter correlation gives
the required Re and mass flux G.
- Film cooling handoff: when the plain-regenerative hot wall
temperature exceeds the wall limit, regenerative flow alone cannot
hold the copper wall and film cooling takes over.
- ECSS frames the propulsion context; the relations above are standard
engineering methodology (Bartz, Dittus-Boelter), summary-only.
Workflow
- Fix the operating point from the chamber design leaf: chamber
pressure Pc, c-star, chamber temperature T_c, gamma, throat
diameter, and the hot gas transport properties mu, cp, Pr.
- Anchor the flow: throat_area from the diameter and
chamber_mass_flow from Pc, A_t and c-star.
- Get the recovery temperature with
adiabatic_wall_temperature(T_c, gamma, Pr_gas), the M = 1
throat-station reference for the hot side.
- Compute the hot gas coefficient with
bartz_hot_gas_coefficient (sigma 1 at the throat).
- Compute the coolant side with coolant_side_coefficient from the
channel mass flux, D_h and the coolant properties; the dict returns
h_c, Re, Nu and Pr.
- Balance the wall with wall_heat_flux(h_g, h_c, t_w, k_w, T_aw,
T_cool): q, T_wg, T_wc and the wall drop in one dict.
- Compare T_wg with the copper wall limit using
film_cooling_handoff; when True, quantify the fix with
coolant_mass_flux_for_wall_limit, which returns the h_c, Re and
mass flux needed to hold the limit.
- For a one-call design pass, run chamber_cooling_summary with all
inputs; it returns the flat dict of every quantity above.
- Confirm the deterministic checks with the contract test
scripts/test_thrust_chamber_cooling.py.
Worked example
LOX/RP-1 subscale chamber: Pc = 7.0 MPa, c-star = 1750 m/s, Tc =
3500 K, gamma = 1.2, Dt = 0.15 m, Pr_g = 0.72, mu_g = 8.0e-5 Pa s,
cp_g = 2000 J/(kg K). RP-1 coolant at 300 K in rectangular channels
D_h = 2 mm with G_c = 12000 kg/m2 s, mu_c = 0.0022 Pa s, cp_c =
2000 J/(kg K), k_c = 0.13 W/(m K). Copper wall 1.5 mm, k_w =
390 W/(m K), wall limit 800 K. Module outputs:
- Throat area 0.017671 m2; chamber mass flow 70.6858 kg/s.
- Throat static temperature 3181.82 K; recovery temperature
3466.998 K (about 3467 K).
- Bartz hot gas coefficient 10681.98 W/m2K, close to the 10682 anchor.
- Coolant side: Re 10909.1, Pr 33.85, Nu 159.87, h_c 10391.44 W/m2K.
- Wall balance: q = 16.350 MW/m2, T_wg = 1936.34 K, T_wc =
1873.45 K, wall drop 62.89 K.
- Handoff verdict True: the plain-regenerative hot wall at 1936 K
blows past the 800 K copper limit.
- To hold the limit: required h_c 72968 W/m2K, required Re 124698,
required mass flux 137168 kg/m2 s, roughly 11 times the 12000 kg/m2 s
reference flow, the shortfall that motivates film cooling.
Verification
- Confirm the worked example outputs above: throat_area, mass flow,
recovery temperature, h_g, the coolant side dict, the wall balance
dict and the handoff verdict (True at the 800 K limit).
- Confirm the scaling laws: doubling Pc doubles m_dot at fixed A_t and
c-star and raises h_g by 2^0.8; doubling Dt lowers h_g by 2^-0.2;
sigma enters h_g linearly; doubling the coolant mass flux raises h_c
by 2^0.8 through Re^0.8.
- Confirm the closed forms: Nu = 0.023 Re^0.8 Pr^0.4 and h_c =
Nu k / D_h to float precision; q equals (T_aw - T_cool) / R_total
and T_wg - T_wc equals q t_w / k_w.
- Confirm the ordering T_t < T_aw < T_c and T_cool < T_wc < T_wg <
T_aw, and that feeding the required mass flux back through
coolant_side_coefficient recovers the required h_c (round trip).
- Confirm ValueError rejection of every non-positive pressure,
c-star, diameter, viscosity, specific heat, conductivity, thickness,
mass flux and coolant temperature, of gamma <= 1, of sigma <= 0, of
a wall limit at or above the recovery temperature, and of a wall
limit below what infinite coolant convection could hold.
- Determinism: repeated runs return identical floats, no RNG.
- Run the contract test offline: python3
scripts/test_thrust_chamber_cooling.py (34 tests, deterministic).
Related leaves
- propulsion/rocket/combustion-chamber-design: chamber sizing sibling;
boundary: volume/c-star vs wall thermal design.
- propulsion/rocket/nozzle-design: nozzle expansion sibling.
- propulsion/axial-compressor/turbine-blade-cooling: gas-turbine
airfoil cooling boundary: this leaf is the rocket chamber wall
analogue.
Pitfalls
- Reporting the hot wall temperature without the handoff verdict: the
plain-regenerative hot wall runs at 1936 K in the worked example,
far past the 800 K copper limit, so film_cooling_handoff must gate
the design - a flux number alone hides that regenerative flow cannot
hold the wall.
- Sizing the coolant flow from the reference flux: the flux needed to
hold the 800 K limit is 137168 kg/m2 s, roughly 11 times the 12000
kg/m2 s reference flow - the required-flux round trip is the design
answer, not the channel flow you started with.
- Confusing the recovery temperature with the chamber total
temperature: the hot side balances against T_aw (3467 K in the
example), which sits between the throat static 3181.82 K and the
chamber total 3500 K - using T_c instead of T_aw overdrives the
flux.
- Applying the wall-limit sizing with the limit at or above the
recovery temperature: a wall limit at or above T_aw raises
ValueError, as does a limit below what infinite coolant convection
could hold - the limit must lie inside the physically reachable
band.
- Reading the wall drop as the dominant resistance: the copper wall
drop is 62.89 K of a 1936 K wall temperature, small against the
convective drops, so the series network is dominated by 1/h_g and
1/h_c - strengthening the wrong term does not cool the wall.
- Feeding a non-physical operating point: any non-positive pressure,
c-star, diameter, viscosity, specific heat, conductivity, thickness,
mass flux or coolant temperature, gamma <= 1 and sigma <= 0 all raise
ValueError.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_thrust_chamber_cooling.py
The test covers the worked LOX/RP-1 balance (throat area 0.017671 m2,
mass flow 70.6858 kg/s, recovery temperature 3467 K, Bartz h_g 10682
W/m2K within 1%, coolant Re 10909 / Pr 33.85 / Nu 159.87, wall flux
16.35 MW/m2, hot wall 1936.3 K, cold wall 1873.5 K, wall drop 62.9 K),
the scaling laws (Pc^0.8, Dt^-0.2, sigma linear, Re^0.8), the series
network identities, the closed-form Nusselt relation, the wall-limit
sizing round trip (required mass flux 137168 kg/m2 s), the film
cooling handoff verdict flipping to False at a high coolant flow, and
ValueError rejection of non-physical inputs.
Compliance
- Standards referenced, not reproduced: ECSS propulsion context per
standards-map.yaml; the Bartz, Dittus-Boelter and series-resistance
relations above are standard engineering methodology, summary-only.
- compliance: STANDARDS-REF, gated: false.
1---2name: thrust-chamber-cooling3description: Use when you must estimate the regenerative cooling of a liquid rocket thrust chamber: the throat area and propellant mass flow anchor of the operating point, the Bartz hot gas convective coefficient at the throat, the coolant side convective coefficient from the channel flow with the Dittus-Boelter correlation, the series wall resistance network giving the heat flux and the hot and cold wall temperatures, the coolant mass flux required to hold a copper wall temperature limit, and the film cooling handoff verdict when plain regenerative flow cannot hold the limit. Produces the heat flux, hot and cold wall temperatures, the plain regenerative shortfall and the required coolant mass flux. Trigger: regenerative cooling, thrust chamber cooling, Bartz heat transfer, throat heat flux, coolant channel sizing, copper wall limit, film cooling, rocket chamber wall, throat wall temperature.4license: Apache-2.05---67# Thrust Chamber Cooling (propulsion/rocket/thrust-chamber-cooling)89Use when the task is the thermal design of a liquid rocket thrust10chamber and nozzle wall: the throat area and mass flow anchor, the11hot-gas side Bartz convective coefficient at the throat, the12coolant-side coefficient from the regenerative channel flow, the series13wall resistance network giving the heat flux and the hot and cold wall14temperatures, and the coolant mass flux required to hold a copper wall15temperature limit before handing off to film cooling. This leaf16implements the regenerative cooling thermal balance in pure Python,17stdlib only. It pairs with propulsion/rocket/combustion-chamber-design,18which sizes the chamber and delivers the operating point, and19propulsion/rocket/nozzle-design, which takes the geometry downstream.20The gas-turbine analogue with air-cooled blades lives in21propulsion/axial-compressor/turbine-blade-cooling; this leaf is the22rocket chamber wall counterpart.2324## Domain quick reference2526- Throat area: A_t = pi d^2 / 4 for a circular throat of diameter d.27 The throat is the reference station of the whole thermal balance.28- Mass flow anchor: m_dot = Pc * A_t / c-star, with c-star the29 delivered characteristic velocity from the chamber design leaf.30- Recovery temperature at the throat (M = 1): T_t = T_c / (1 +31 (gamma - 1) / 2) with T_c the chamber total temperature, and32 T_aw = T_t * (1 + r * (gamma - 1) / 2) with the recovery factor33 r = Pr^(1/3). T_aw sits between T_t and T_c; the recovery34 temperature drives the hot wall balance.35- Bartz hot gas coefficient (SI form, throat station At/A = 1):36 h_g = 0.026 * (mu^0.2 * cp / Pr^0.6) * (Pc / c-star)^0.8 / Dt^0.2 *37 sigma, with sigma the transport-property correction (about 1 at the38 throat). h_g scales as Pc^0.8 and Dt^-0.2.39- Coolant side, Dittus-Boelter for the heated channel flow: Re =40 G * D_h / mu, Pr = cp * mu / k, Nu = 0.023 * Re^0.8 * Pr^0.4,41 h_c = Nu * k / D_h, with G the coolant mass flux and D_h the channel42 hydraulic diameter.43- Series wall network: R = 1/h_g + t_w/k_w + 1/h_c; q = (T_aw -44 T_cool) / R; T_wg = T_aw - q/h_g; T_wc = T_cool + q/h_c; and the45 wall drop T_wg - T_wc = q * t_w/k_w. Copper walls run at high flux,46 so the wall drop is small relative to the convective drops.47- Wall limit sizing: q_lim = h_g * (T_aw - T_lim) fixes the flux that48 holds the hot wall at the limit; R_lim = (T_aw - T_cool) / q_lim49 gives the network resistance, the required h_c follows from the50 series network, and inverting the Dittus-Boelter correlation gives51 the required Re and mass flux G.52- Film cooling handoff: when the plain-regenerative hot wall53 temperature exceeds the wall limit, regenerative flow alone cannot54 hold the copper wall and film cooling takes over.55- ECSS frames the propulsion context; the relations above are standard56 engineering methodology (Bartz, Dittus-Boelter), summary-only.5758## Workflow59601. Fix the operating point from the chamber design leaf: chamber61 pressure Pc, c-star, chamber temperature T_c, gamma, throat62 diameter, and the hot gas transport properties mu, cp, Pr.632. Anchor the flow: throat_area from the diameter and64 chamber_mass_flow from Pc, A_t and c-star.653. Get the recovery temperature with66 adiabatic_wall_temperature(T_c, gamma, Pr_gas), the M = 167 throat-station reference for the hot side.684. Compute the hot gas coefficient with69 bartz_hot_gas_coefficient (sigma 1 at the throat).705. Compute the coolant side with coolant_side_coefficient from the71 channel mass flux, D_h and the coolant properties; the dict returns72 h_c, Re, Nu and Pr.736. Balance the wall with wall_heat_flux(h_g, h_c, t_w, k_w, T_aw,74 T_cool): q, T_wg, T_wc and the wall drop in one dict.757. Compare T_wg with the copper wall limit using76 film_cooling_handoff; when True, quantify the fix with77 coolant_mass_flux_for_wall_limit, which returns the h_c, Re and78 mass flux needed to hold the limit.798. For a one-call design pass, run chamber_cooling_summary with all80 inputs; it returns the flat dict of every quantity above.819. Confirm the deterministic checks with the contract test82 scripts/test_thrust_chamber_cooling.py.8384## Worked example8586LOX/RP-1 subscale chamber: Pc = 7.0 MPa, c-star = 1750 m/s, Tc =873500 K, gamma = 1.2, Dt = 0.15 m, Pr_g = 0.72, mu_g = 8.0e-5 Pa s,88cp_g = 2000 J/(kg K). RP-1 coolant at 300 K in rectangular channels89D_h = 2 mm with G_c = 12000 kg/m2 s, mu_c = 0.0022 Pa s, cp_c =902000 J/(kg K), k_c = 0.13 W/(m K). Copper wall 1.5 mm, k_w =91390 W/(m K), wall limit 800 K. Module outputs:9293- Throat area 0.017671 m2; chamber mass flow 70.6858 kg/s.94- Throat static temperature 3181.82 K; recovery temperature95 3466.998 K (about 3467 K).96- Bartz hot gas coefficient 10681.98 W/m2K, close to the 10682 anchor.97- Coolant side: Re 10909.1, Pr 33.85, Nu 159.87, h_c 10391.44 W/m2K.98- Wall balance: q = 16.350 MW/m2, T_wg = 1936.34 K, T_wc =99 1873.45 K, wall drop 62.89 K.100- Handoff verdict True: the plain-regenerative hot wall at 1936 K101 blows past the 800 K copper limit.102- To hold the limit: required h_c 72968 W/m2K, required Re 124698,103 required mass flux 137168 kg/m2 s, roughly 11 times the 12000 kg/m2 s104 reference flow, the shortfall that motivates film cooling.105106## Verification107108- Confirm the worked example outputs above: throat_area, mass flow,109 recovery temperature, h_g, the coolant side dict, the wall balance110 dict and the handoff verdict (True at the 800 K limit).111- Confirm the scaling laws: doubling Pc doubles m_dot at fixed A_t and112 c-star and raises h_g by 2^0.8; doubling Dt lowers h_g by 2^-0.2;113 sigma enters h_g linearly; doubling the coolant mass flux raises h_c114 by 2^0.8 through Re^0.8.115- Confirm the closed forms: Nu = 0.023 Re^0.8 Pr^0.4 and h_c =116 Nu k / D_h to float precision; q equals (T_aw - T_cool) / R_total117 and T_wg - T_wc equals q t_w / k_w.118- Confirm the ordering T_t < T_aw < T_c and T_cool < T_wc < T_wg <119 T_aw, and that feeding the required mass flux back through120 coolant_side_coefficient recovers the required h_c (round trip).121- Confirm ValueError rejection of every non-positive pressure,122 c-star, diameter, viscosity, specific heat, conductivity, thickness,123 mass flux and coolant temperature, of gamma <= 1, of sigma <= 0, of124 a wall limit at or above the recovery temperature, and of a wall125 limit below what infinite coolant convection could hold.126- Determinism: repeated runs return identical floats, no RNG.127- Run the contract test offline: python3128 scripts/test_thrust_chamber_cooling.py (34 tests, deterministic).129130## Related leaves131132- propulsion/rocket/combustion-chamber-design: chamber sizing sibling;133 boundary: volume/c-star vs wall thermal design.134- propulsion/rocket/nozzle-design: nozzle expansion sibling.135- propulsion/axial-compressor/turbine-blade-cooling: gas-turbine136 airfoil cooling boundary: this leaf is the rocket chamber wall137 analogue.138139## Pitfalls140141- Reporting the hot wall temperature without the handoff verdict: the142 plain-regenerative hot wall runs at 1936 K in the worked example,143 far past the 800 K copper limit, so film_cooling_handoff must gate144 the design - a flux number alone hides that regenerative flow cannot145 hold the wall.146- Sizing the coolant flow from the reference flux: the flux needed to147 hold the 800 K limit is 137168 kg/m2 s, roughly 11 times the 12000148 kg/m2 s reference flow - the required-flux round trip is the design149 answer, not the channel flow you started with.150- Confusing the recovery temperature with the chamber total151 temperature: the hot side balances against T_aw (3467 K in the152 example), which sits between the throat static 3181.82 K and the153 chamber total 3500 K - using T_c instead of T_aw overdrives the154 flux.155- Applying the wall-limit sizing with the limit at or above the156 recovery temperature: a wall limit at or above T_aw raises157 ValueError, as does a limit below what infinite coolant convection158 could hold - the limit must lie inside the physically reachable159 band.160- Reading the wall drop as the dominant resistance: the copper wall161 drop is 62.89 K of a 1936 K wall temperature, small against the162 convective drops, so the series network is dominated by 1/h_g and163 1/h_c - strengthening the wrong term does not cool the wall.164- Feeding a non-physical operating point: any non-positive pressure,165 c-star, diameter, viscosity, specific heat, conductivity, thickness,166 mass flux or coolant temperature, gamma <= 1 and sigma <= 0 all raise167 ValueError.168169## Behavior contract (gate 3)170171Run the deterministic contract test (stdlib unittest, offline):172173 python3 scripts/test_thrust_chamber_cooling.py174175The test covers the worked LOX/RP-1 balance (throat area 0.017671 m2,176mass flow 70.6858 kg/s, recovery temperature 3467 K, Bartz h_g 10682177W/m2K within 1%, coolant Re 10909 / Pr 33.85 / Nu 159.87, wall flux17816.35 MW/m2, hot wall 1936.3 K, cold wall 1873.5 K, wall drop 62.9 K),179the scaling laws (Pc^0.8, Dt^-0.2, sigma linear, Re^0.8), the series180network identities, the closed-form Nusselt relation, the wall-limit181sizing round trip (required mass flux 137168 kg/m2 s), the film182cooling handoff verdict flipping to False at a high coolant flow, and183ValueError rejection of non-physical inputs.184185## Compliance186187- Standards referenced, not reproduced: ECSS propulsion context per188 standards-map.yaml; the Bartz, Dittus-Boelter and series-resistance189 relations above are standard engineering methodology, summary-only.190- compliance: STANDARDS-REF, gated: false.