← Projects

UCLA Rocket Project

Two-Phase N₂O Flow Model

To better predict oxidizer mass flow rate

Overview

Language Python 3
Thermo. Property Lib. CoolProp
N₂O Error (Initial) 35%
N₂O Error (After) 10.3%
Orifice Diameter 0.0468''
Area per Orifice 0.00172'' ²
Sized Injector To 69 Orifices
Discharge Coefficient 0.4522
69 orifices

Injector orifices

10.3 %

Final N₂O mass-flow error

2.654 lbm/s

Predicted ox flow rate

Problem

Hybrid rocket injectors using saturated-liquid nitrous oxide have a modeling problem: the Single-Phase Incompressible (SPI) model

ṁ = Cd · Ac · √1(P1 − P2)

assumes non-flashing liquid and overpredicts mass flow by up to 30% when nitrous accelerates through the atomizing injector and drops below the saturation pressure, starting vapor formation. It uses pressure drop. The Homogeneous Equilibrium Model (HEM)

ṁ = Cd · Ac · ρ2 · √2(h1 − h2)

corrects for phase change by assuming full thermodynamic equilibrium between phases, but underpredicts flow, and neither model is perfect. HEM uses enthalpy drop. Injector sizing in our program paired waterflow testing with SPI alone, which is a terrible forward predictor. Two-phase nitrous oxide flow through short orifices remains an active research area with no consensus. The need was a validated forward predictor.

Approach

We chose the Non-Homogeneous Non-Equilibrium (NHNE) model, a weighted combination of SPI and HEM controlled by a single factor κ. The methodology we used was a waterflow-test-derived discharge coefficient (Cd), which captures our geometry-specific losses, and used saturation property lookups in Python for nitrous oxide to produce a forward mass-flow prediction across the operating pressure-drop range. Calibrating κ against oxidizer flow measured in a previous static fire made the abstract physics match our actual injector geometry. Choke detection, specifically the pressure ratio P2/Psat at which further increasing upstream pressure no longer increases mass flow, is computed directly from a thermodynamic lookup, creating an upper bound for any sizing decision.

Build

The implementation uses Python 3 with CoolProp for fluid properties through property lookups (inputs: pressure, temperature — outputs: density, enthalpy, vapor quality). NumPy was used for vectorized flow math, Matplotlib for plotting, and pandas for terminal output. The project is in a GitHub repository with three scripts: inputs.py holds all parameters, model.py is the pure forward model from literature, and prediction.py sweeps orifice counts to find the quantity that best meets the target oxidizer flow rate.

Analysis

Calibration swept κ values, evaluating predicted mass flow against the 1.85 lb/s measured from the oxidizer tank load cell of the previous static fire. The key finding was that pure-HEM over-predicted measured flow by 10%, and blending in any SPI only worsened accuracy. Choke detection returned a critical pressure ratio P2/Psat of 0.765, closely matching the empirically established value of approximately 0.8 derived from over 500 cold-flow tests in published literature, independently confirming the results. The 10% over-prediction falls within the ±15% accuracy band reported at appropriate discharge coefficients (Cd), so the validation passed both average mass flow within published accuracy and choke pressure ratio matching empirical expectations. Honestly, the 10% gap is likely water-flow Cd being slightly higher than effective two-phase Cd, and feed-line two-phase effects at the manifold.

SPI vs HEM calibration curves at best kappa — mass-flow comparison
Shows the SPI model substantially overpredicts mass flow relative to the clamped HEM behavior, with the measured flow rate landing below the HEM critical limit
Orifice count sweep optimization results
The optimization works by sweeping the number of orifices, comparing the predicted mass flow against the target, and selecting the recommended count of 69 where the design-point curve intersects the target

Result

My calibrated model sized our flight injector to 69 orifices, with the orifice-count sweep selecting it. On our program’s second hybrid engine static fire, the final fire before flight, the model predicted mass flow (2.693 lbm/s) with a −6.71% error relative to measured (2.88 lbm/s), well within the ±15% accuracy band reported in literature. The legacy SPI approach lacks any physical reality and cannot represent phase change, so it systematically overpredicts flow in the flashing regime. This establishes a calibrated two-phase flow model for the program’s injector development, replacing a waterflow-only sizing method with a quantitative, reproducible process that can be recalibrated. I made sure to document everything for future students.

Reflection

None of this would have been possible without Brian J. Solomon from Utah State University and his 2011 M.S. report, “Engineering Model to Calculate Mass Flow Rate of a Two-Phase Saturated Fluid Through an Injector Orifice.” The residual ~10% error is consistent with HEM’s limitations: it assumes equal velocity for liquid and vapor phases. Closing that gap would require instrumentation that our program does not have. Another limiting factor is that we continue to use Cd derived from water flows.

Injector water flow — produces the discharge coefficient (Cd) used by the model