|
| | _stream_flow (Pc, P_tank, rho, A, d_hyd, mu, discharge, T_in, cd_cap, feed_dp, *, cav=None, network=None, detail=None) |
| float | _churchill_f (float Re, float rel_rough) |
| | _ring_manifold_for (config, side, rho, mu, n_holes, d_hole) |
| | _manifold_diagnostics (net_O, net_F, detail, mdot_O, mdot_F) |
| float | impingement_standoff_m (float n_elements, float spacing_O_m, float spacing_F_m, float angle_O_deg, float angle_F_deg) |
| float | momentum_ratio_R_from_bulk_velocities (float rho_O, float rho_F, float v_O_bulk, float v_F_bulk) |
| float | rupe_mixing_ratio (float rho_O, float v_O, float d_O, float rho_F, float v_F, float d_F) |
| float | injector_face_pressure (float Pc, float gamma, float contraction_ratio) |
Impinging injector model implementation.
| engine.core.injectors.impinging._stream_flow |
( |
| Pc, |
|
|
| P_tank, |
|
|
| rho, |
|
|
| A, |
|
|
| d_hyd, |
|
|
| mu, |
|
|
| discharge, |
|
|
| T_in, |
|
|
| cd_cap, |
|
|
| feed_dp, |
|
|
* | , |
|
|
| cav = None, |
|
|
| network = None, |
|
|
| detail = None ) |
|
protected |
One stream's closure at a fixed Pc: ṁ = Cd(Re(ṁ), P_inj) A √(2ρ (P_tank − Δp_feed(ṁ) − Pc)).
g(ṁ) = ṁ − Cd A √(2ρ Δp_inj) is negative at ṁ = 0 and non-negative at
ṁ_max = Cd_cap A √(2ρ (P_tank − Pc)) (Δp_feed ≥ 0, Cd ≤ Cd_cap), so the root is bracketed and
found by Illinois false position. A tank at or below Pc does not flow.
Mirrored by ``engine.accel.kernels._stream_flow``.
Returns (ṁ, Cd, P_inj, Δp_feed, Δp_inj, evaluations).
Definition at line 53 of file impinging.py.
References max, min, and state.
Referenced by engine.core.injectors.impinging.ImpingingInjector.solve().
| float engine.core.injectors.impinging.impingement_standoff_m |
( |
float | n_elements, |
|
|
float | spacing_O_m, |
|
|
float | spacing_F_m, |
|
|
float | angle_O_deg, |
|
|
float | angle_F_deg ) |
Axial distance from the injector FACE to where a doublet's two jets meet [m].
The two streams of an unlike doublet sit on DIFFERENT pitch circles::
D_pitch = n * spacing / pi (spacing = arc between adjacent same-stream holes)
dr = |D_pitch_O - D_pitch_F| / 2
``dr`` is the RADIAL gap between the two rings at the face. Each jet is inclined toward
the other and closes its share of that gap at rate ``tan(theta)`` per unit axial
distance, so they meet at::
L_imp = dr / (tan(theta_O) + tan(theta_F))
NOTE the offset is ``dr``, not the element spacing. ``spacing`` is the circumferential
distance between ADJACENT holes of the SAME stream around its own ring -- it says how
densely one ring is populated and has nothing to do with how far the O and F jets of a
single doublet are from each other. An earlier version used ``0.5*(s_O + s_F)`` here,
which is the average ring density: dimensionally a length, physically the wrong one, and
it under-reported the standoff (2.89 mm vs 4.35 mm on a real design, i.e. L/d 1.59 vs
2.39) while also shortening the spray length that feeds the residence-time correction.
Returns NaN when the rings coincide or both jets are axial -- in either case there is no
crossing point.
Definition at line 256 of file impinging.py.
References max.
Referenced by engine.core.injectors.impinging.ImpingingInjector.solve().
| float engine.core.injectors.impinging.injector_face_pressure |
( |
float | Pc, |
|
|
float | gamma, |
|
|
float | contraction_ratio ) |
Static pressure at the injector face for a nozzle-inlet stagnation pressure ``Pc``.
Heat addition in a constant-area chamber (Rayleigh line) costs stagnation pressure between
the face, where the gas is at rest, and the nozzle inlet at M_c, the subsonic root of
A_c/A_t: p_face / p0 = (1 + gamma M_c^2) / (1 + (gamma-1)/2 M_c^2)^(gamma/(gamma-1)).
Sutton & Biblarz ch. 3: ~1.05 at A_c/A_t = 2, under 1 % above ~5. Not applied by the solve
yet (dp_inj = P_inj - Pc); it needs the CEA gamma the chamber solver holds.
Definition at line 344 of file impinging.py.
| float engine.core.injectors.impinging.momentum_ratio_R_from_bulk_velocities |
( |
float | rho_O, |
|
|
float | rho_F, |
|
|
float | v_O_bulk, |
|
|
float | v_F_bulk ) |
Jet momentum-flux ratio R = sqrt(rho_O*v_O^2 / (rho_F*v_F^2)), used by Layer 1.
``v_*_bulk`` are bulk speeds per stream: mdot / (rho * n_elements * A_jet). Since
mdot = Cd A sqrt(2 rho dp), rho v^2 = 2 Cd^2 dp and R = (Cd_O/Cd_F) sqrt(dp_O/dp_F): the
injector's Cd-dp split, with no density or hole size in it. It is not Rupe's mixing
criterion; that is rupe_mixing_ratio.
Definition at line 301 of file impinging.py.
Referenced by engine.core.injectors.impinging.ImpingingInjector.solve().
| float engine.core.injectors.impinging.rupe_mixing_ratio |
( |
float | rho_O, |
|
|
float | v_O, |
|
|
float | d_O, |
|
|
float | rho_F, |
|
|
float | v_F, |
|
|
float | d_F ) |
Rupe's mixing ratio for an unlike doublet, M = rho_O v_O^2 d_O / (rho_F v_F^2 d_F).
Rupe (JPL PR 20-195), restated by Elverum & Morey, JPL Memo 30-5 (1959) eq. 1: the most
uniform mixture-ratio distribution is at M = 1 (stream momentum ratio equal to the diameter
ratio). No angle term; the spray's direction is a separate quantity. M = R^2 d_O / d_F.
Definition at line 329 of file impinging.py.
Referenced by engine.core.injectors.impinging.ImpingingInjector.solve().