Rocket Engine Injector Design (propulsion/rocket/injector-design)
Use when you must design rocket engine injection elements and their
atomization basis: sizing the orifices that meter propellant into the
chamber, checking the impinging doublet momentum balance, and laying
out the element count for a chamber mass flow and mixture ratio. This
leaf implements the standard injector hydraulics model in pure Python,
stdlib only: orifice discharge with a discharge coefficient, injection
velocity from the Bernoulli head, momentum flux ratio, per-propellant
orifice counts and the per-element flow balance. It pairs with
propulsion/rocket/combustion-chamber-design for the chamber geometry
upstream of the face and propulsion/rocket/rocket-engine-cycle for the
feed pressure context.
Domain quick reference
- Orifice area: A = pi * d^2 / 4 for a round orifice of diameter d.
- Injection velocity: v = Cd * sqrt(2 * dP / rho), the discharge
coefficient applied to the Bernoulli head of the pressure drop dP
across the orifice.
- Orifice discharge: m_dot = rho * A * v = Cd * A * sqrt(2 * rho * dP),
the standard discharge law written through the jet velocity.
- Momentum flux ratio: J = (rho_o * v_o^2) / (rho_f * v_f^2) per
impinging unlike-doublet pair. For equal fuel and oxidizer pressure
drops the Cd, dP and density factors cancel and J = 1 exactly, a
known design consequence of equal-dP doublets; near-unity J gives a
well-mixed atomized sheet, large excursions leave one jet dominant.
- Mass split at mixture ratio O/F: m_dot_f = m_dot_c / (1 + O/F) and
m_dot_ox = m_dot_c - m_dot_f for the chamber mass flow m_dot_c.
- Orifice count: N = ceil(m_dot / m_dot_per_orifice) per propellant,
rounded up to whole orifices.
- Element flow: the element layout fixes fuel and oxidizer orifices per
element; the element carries fuel_orifices * m_dot_f_orifice plus
oxidizer_orifices * m_dot_ox_orifice.
- ECSS E-ST-35-03 frames the liquid propulsion context; the relations
above are standard engineering methodology, summary-only.
- Units are SI throughout: m, Pa, kg/m^3, m/s, kg/s, dimensionless
ratios. Typical liquid engine values: Cd 0.6-0.9, injection dP
1-3 MPa, orifice diameters 1-3 mm.
Workflow
- Fix the operating point: chamber mass flow and mixture ratio
(injector_layout_summary arguments) and the propellant densities.
- Choose the discharge coefficient Cd and the fuel and oxidizer
pressure drops; equal drops are the usual unlike-doublet baseline
because they give J = 1.
- Pick the orifice diameters, then size one orifice of each
propellant with orifice_mass_flow (area, jet velocity, per-orifice
mass flow) or read the same values from the summary.
- Check the momentum balance with momentum_flux_ratio; recompute J
for unequal drops and confirm the dP ratio scaling.
- Get the per-propellant orifice counts with orifice_count and the
element count with the summary (binding side over orifices per
element).
- Balance one element with element_mass_flow and confirm the element
count times the per-element flow covers the chamber flow.
- Report the face layout: per-orifice flows, velocities, momentum
flux ratio, orifice counts, element count and element balance from
injector_layout_summary.
- Confirm the deterministic checks with the contract test
scripts/test_injector_design.py.
Worked example
RP-1/LOX injector: chamber flow 70.686 kg/s at O/F 2.56, Cd 0.8,
dP 2.0 MPa on both sides, 2.5 mm orifices, RP-1 density 820 kg/m3,
LOX density 1140 kg/m3, element layout one fuel plus two oxidizer
orifices. Real module outputs:
- Orifice area: A = 4.9087e-6 m2 (anchor 4.909e-6 m2).
- Fuel injection velocity: 55.874 m/s, fuel per-orifice flow
0.22490 kg/s (anchors 55.87 m/s, 0.2249 kg/s).
- LOX injection velocity: 47.388 m/s, LOX per-orifice flow
0.26518 kg/s (anchors 47.39 m/s, 0.2652 kg/s).
- Momentum flux ratio: J = 1.000000 exactly on the equal-dP case.
- Mass split: fuel 19.856 kg/s, LOX 50.830 kg/s (anchors 19.86,
50.83); oxidizer over fuel is 2.56 exactly.
- Fuel orifices: ceil(19.856 / 0.22490) = ceil(88.28) = 89; LOX
orifices: ceil(50.830 / 0.26518) = ceil(191.68) = 192.
- Element: 1 fuel + 2 LOX carries 0.22490 + 2 * 0.26518 = 0.75527 kg/s
(anchor 0.7553 kg/s); the binding element count is 96 (LOX
192 orifices at two per element), and 96 * 0.75527 = 72.51 kg/s
covers the 70.686 kg/s chamber flow.
Verification
- Confirm orifice_mass_flow returns mass_flow_kgs equal to density
times area times velocity to 1e-12 and matching Cd * A *
sqrt(2 rho dP) to 1e-9.
- Confirm momentum_flux_ratio on the equal-dP worked case returns
1.0 to 1e-9 and that an unequal case (2.5 MPa oxidizer against
2.0 MPa fuel) returns J = 1.25, the dP ratio.
- Confirm orifice_count ceil behavior: 88.28 to 89, 191.68 to 192, and
no bump for exactly integral requirements.
- Confirm element_mass_flow(1, 2, 0.2249, 0.2652) totals 0.7553 kg/s
to 1e-4 and the summary element count times the element flow covers
the chamber flow.
- Confirm every non-positive Cd, pressure drop, density, diameter,
orifice count, chamber flow and mixture ratio raises ValueError.
- Run the contract test offline: python3
scripts/test_injector_design.py (30 tests, deterministic).
Related leaves
- propulsion/rocket/combustion-chamber-design: the chamber this
injector faces; boundary is chamber geometry and combustion
performance upstream of the injection face.
- propulsion/rocket/rocket-engine-cycle: the feed system pressure
context that sets the injection pressure drops.
- propulsion/rocket/propellant-selection: propellant property context
for the density terms.
Pitfalls
- Truncating the orifice count: orifice_count rounds up with ceil, so
88.28 becomes 89 fuel orifices and 191.68 becomes 192 LOX orifices -
rounding down under-feeds the chamber, and the element count must
cover the chamber flow on the binding side (96 elements x 0.75527
kg/s covers the 70.686 kg/s chamber flow).
- Forgetting that equal pressure drops force J = 1: with matching fuel
and oxidizer dP the Cd, dP and density factors cancel and the
momentum flux ratio is exactly 1.0; a design that needs a different
J must run unequal drops, where J scales as the dP ratio (1.25 in the
verification case).
- Reading an element balance that does not cover the chamber flow: the
per-element flow times the element count must exceed the chamber
mass flow; the worked example's 96-element layout covers 72.51 kg/s
against 70.686 kg/s - a layout below that under-injects.
- Mixing propellant densities in the mass split: the split at O/F 2.56
gives fuel 19.856 kg/s and LOX 50.830 kg/s from the mass ratio alone;
density enters only the orifice sizing and momentum ratio, not the
split.
- Feeding non-physical hydraulics: any non-positive Cd, pressure drop,
density, diameter, orifice count, chamber flow or mixture ratio
raises ValueError - and the 0.6-0.9 Cd and 1-3 MPa dP ranges are
typical liquid-engine values to sanity-check the inputs against.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_injector_design.py
The test covers the worked-example anchors (orifice area 4.909e-6 m2,
fuel velocity 55.87 m/s and 0.2249 kg/s per orifice, LOX velocity
47.39 m/s and 0.2652 kg/s per orifice, mass split 19.86/50.83 kg/s,
orifice counts 89/192, element balance 0.7553 kg/s), the discharge
identity mass flow equals density times area times velocity, the
equal-dP momentum flux ratio identity J = 1.0 and the unequal-dP
1.25 scaling, ceil behavior of orifice counts, layout summary dict
keys, determinism, chamber-flow coverage by the element count, and
ValueError rejection of non-positive Cd, pressure drop, density,
diameter, counts and mixture ratio.
Compliance
- Standards referenced, not reproduced: ECSS E-ST-35-03 is a free ESA
download (ecss.nl/standards); the injector hydraulics relations above
are standard engineering methodology, summary-only per
standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: injector-design3description: Use when you must design the rocket engine injection elements and their atomization basis: orifice discharge flow from discharge coefficient and pressure drop, injection velocity, the momentum flux ratio of impinging unlike-doublet elements, the fuel and oxidizer orifice counts for a chamber mass flow at a given mixture ratio, and the per-element flow balance. Produces per-orifice mass flow, injection velocity, momentum flux ratio, fuel and oxidizer orifice counts, and per-element mass flow for the element layout. Trigger: unlike doublet, impinging jet, atomization, injector pressure drop, momentum flux ratio, orifice count, discharge coefficient, injection velocity, mixture ratio.4license: Apache-2.05---67# Rocket Engine Injector Design (propulsion/rocket/injector-design)89Use when you must design rocket engine injection elements and their10atomization basis: sizing the orifices that meter propellant into the11chamber, checking the impinging doublet momentum balance, and laying12out the element count for a chamber mass flow and mixture ratio. This13leaf implements the standard injector hydraulics model in pure Python,14stdlib only: orifice discharge with a discharge coefficient, injection15velocity from the Bernoulli head, momentum flux ratio, per-propellant16orifice counts and the per-element flow balance. It pairs with17propulsion/rocket/combustion-chamber-design for the chamber geometry18upstream of the face and propulsion/rocket/rocket-engine-cycle for the19feed pressure context.2021## Domain quick reference2223- Orifice area: A = pi * d^2 / 4 for a round orifice of diameter d.24- Injection velocity: v = Cd * sqrt(2 * dP / rho), the discharge25 coefficient applied to the Bernoulli head of the pressure drop dP26 across the orifice.27- Orifice discharge: m_dot = rho * A * v = Cd * A * sqrt(2 * rho * dP),28 the standard discharge law written through the jet velocity.29- Momentum flux ratio: J = (rho_o * v_o^2) / (rho_f * v_f^2) per30 impinging unlike-doublet pair. For equal fuel and oxidizer pressure31 drops the Cd, dP and density factors cancel and J = 1 exactly, a32 known design consequence of equal-dP doublets; near-unity J gives a33 well-mixed atomized sheet, large excursions leave one jet dominant.34- Mass split at mixture ratio O/F: m_dot_f = m_dot_c / (1 + O/F) and35 m_dot_ox = m_dot_c - m_dot_f for the chamber mass flow m_dot_c.36- Orifice count: N = ceil(m_dot / m_dot_per_orifice) per propellant,37 rounded up to whole orifices.38- Element flow: the element layout fixes fuel and oxidizer orifices per39 element; the element carries fuel_orifices * m_dot_f_orifice plus40 oxidizer_orifices * m_dot_ox_orifice.41- ECSS E-ST-35-03 frames the liquid propulsion context; the relations42 above are standard engineering methodology, summary-only.43- Units are SI throughout: m, Pa, kg/m^3, m/s, kg/s, dimensionless44 ratios. Typical liquid engine values: Cd 0.6-0.9, injection dP45 1-3 MPa, orifice diameters 1-3 mm.4647## Workflow48491. Fix the operating point: chamber mass flow and mixture ratio50 (injector_layout_summary arguments) and the propellant densities.512. Choose the discharge coefficient Cd and the fuel and oxidizer52 pressure drops; equal drops are the usual unlike-doublet baseline53 because they give J = 1.543. Pick the orifice diameters, then size one orifice of each55 propellant with orifice_mass_flow (area, jet velocity, per-orifice56 mass flow) or read the same values from the summary.574. Check the momentum balance with momentum_flux_ratio; recompute J58 for unequal drops and confirm the dP ratio scaling.595. Get the per-propellant orifice counts with orifice_count and the60 element count with the summary (binding side over orifices per61 element).626. Balance one element with element_mass_flow and confirm the element63 count times the per-element flow covers the chamber flow.647. Report the face layout: per-orifice flows, velocities, momentum65 flux ratio, orifice counts, element count and element balance from66 injector_layout_summary.678. Confirm the deterministic checks with the contract test68 scripts/test_injector_design.py.6970## Worked example7172RP-1/LOX injector: chamber flow 70.686 kg/s at O/F 2.56, Cd 0.8,73dP 2.0 MPa on both sides, 2.5 mm orifices, RP-1 density 820 kg/m3,74LOX density 1140 kg/m3, element layout one fuel plus two oxidizer75orifices. Real module outputs:7677- Orifice area: A = 4.9087e-6 m2 (anchor 4.909e-6 m2).78- Fuel injection velocity: 55.874 m/s, fuel per-orifice flow79 0.22490 kg/s (anchors 55.87 m/s, 0.2249 kg/s).80- LOX injection velocity: 47.388 m/s, LOX per-orifice flow81 0.26518 kg/s (anchors 47.39 m/s, 0.2652 kg/s).82- Momentum flux ratio: J = 1.000000 exactly on the equal-dP case.83- Mass split: fuel 19.856 kg/s, LOX 50.830 kg/s (anchors 19.86,84 50.83); oxidizer over fuel is 2.56 exactly.85- Fuel orifices: ceil(19.856 / 0.22490) = ceil(88.28) = 89; LOX86 orifices: ceil(50.830 / 0.26518) = ceil(191.68) = 192.87- Element: 1 fuel + 2 LOX carries 0.22490 + 2 * 0.26518 = 0.75527 kg/s88 (anchor 0.7553 kg/s); the binding element count is 96 (LOX89 192 orifices at two per element), and 96 * 0.75527 = 72.51 kg/s90 covers the 70.686 kg/s chamber flow.9192## Verification9394- Confirm orifice_mass_flow returns mass_flow_kgs equal to density95 times area times velocity to 1e-12 and matching Cd * A *96 sqrt(2 rho dP) to 1e-9.97- Confirm momentum_flux_ratio on the equal-dP worked case returns98 1.0 to 1e-9 and that an unequal case (2.5 MPa oxidizer against99 2.0 MPa fuel) returns J = 1.25, the dP ratio.100- Confirm orifice_count ceil behavior: 88.28 to 89, 191.68 to 192, and101 no bump for exactly integral requirements.102- Confirm element_mass_flow(1, 2, 0.2249, 0.2652) totals 0.7553 kg/s103 to 1e-4 and the summary element count times the element flow covers104 the chamber flow.105- Confirm every non-positive Cd, pressure drop, density, diameter,106 orifice count, chamber flow and mixture ratio raises ValueError.107- Run the contract test offline: python3108 scripts/test_injector_design.py (30 tests, deterministic).109110## Related leaves111112- propulsion/rocket/combustion-chamber-design: the chamber this113 injector faces; boundary is chamber geometry and combustion114 performance upstream of the injection face.115- propulsion/rocket/rocket-engine-cycle: the feed system pressure116 context that sets the injection pressure drops.117- propulsion/rocket/propellant-selection: propellant property context118 for the density terms.119120## Pitfalls121122- Truncating the orifice count: orifice_count rounds up with ceil, so123 88.28 becomes 89 fuel orifices and 191.68 becomes 192 LOX orifices -124 rounding down under-feeds the chamber, and the element count must125 cover the chamber flow on the binding side (96 elements x 0.75527126 kg/s covers the 70.686 kg/s chamber flow).127- Forgetting that equal pressure drops force J = 1: with matching fuel128 and oxidizer dP the Cd, dP and density factors cancel and the129 momentum flux ratio is exactly 1.0; a design that needs a different130 J must run unequal drops, where J scales as the dP ratio (1.25 in the131 verification case).132- Reading an element balance that does not cover the chamber flow: the133 per-element flow times the element count must exceed the chamber134 mass flow; the worked example's 96-element layout covers 72.51 kg/s135 against 70.686 kg/s - a layout below that under-injects.136- Mixing propellant densities in the mass split: the split at O/F 2.56137 gives fuel 19.856 kg/s and LOX 50.830 kg/s from the mass ratio alone;138 density enters only the orifice sizing and momentum ratio, not the139 split.140- Feeding non-physical hydraulics: any non-positive Cd, pressure drop,141 density, diameter, orifice count, chamber flow or mixture ratio142 raises ValueError - and the 0.6-0.9 Cd and 1-3 MPa dP ranges are143 typical liquid-engine values to sanity-check the inputs against.144145## Behavior contract (gate 3)146147Run the deterministic contract test (stdlib unittest, offline):148149 python3 scripts/test_injector_design.py150151The test covers the worked-example anchors (orifice area 4.909e-6 m2,152fuel velocity 55.87 m/s and 0.2249 kg/s per orifice, LOX velocity15347.39 m/s and 0.2652 kg/s per orifice, mass split 19.86/50.83 kg/s,154orifice counts 89/192, element balance 0.7553 kg/s), the discharge155identity mass flow equals density times area times velocity, the156equal-dP momentum flux ratio identity J = 1.0 and the unequal-dP1571.25 scaling, ceil behavior of orifice counts, layout summary dict158keys, determinism, chamber-flow coverage by the element count, and159ValueError rejection of non-positive Cd, pressure drop, density,160diameter, counts and mixture ratio.161162## Compliance163164- Standards referenced, not reproduced: ECSS E-ST-35-03 is a free ESA165 download (ecss.nl/standards); the injector hydraulics relations above166 are standard engineering methodology, summary-only per167 standards-map.yaml.168- compliance: STANDARDS-REF, gated: false.