STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
engine.core.injectors.impinging Namespace Reference

Classes

class  _RingManifold
class  ImpingingInjector

Functions

 _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)

Variables

 _LOG = logging.getLogger(__name__)
 _print_raw = os.environ.get("ENGINE_PRINT_IMPINGING_FEED_CLOSURE", "")
str _PRINT_FEED_ORIFICE_CLOSURE = "" and str(_print_raw).lower() not in ("0", "false", "no")
int _STREAM_ROOT_MAX_EVAL = 200

Detailed Description

Impinging injector model implementation.

Function Documentation

◆ _churchill_f()

float engine.core.injectors.impinging._churchill_f ( float Re,
float rel_rough )
protected
Darcy friction factor, Churchill (1977), laminar through fully rough in one expression.

Definition at line 131 of file impinging.py.

Referenced by engine.core.injectors.impinging._RingManifold.march().

◆ _manifold_diagnostics()

engine.core.injectors.impinging._manifold_diagnostics ( net_O,
net_F,
detail,
mdot_O,
mdot_F )
protected
Per-hole flow along each channel branch (port first) and the element mixture ratios.

Definition at line 230 of file impinging.py.

References max, and min.

Referenced by engine.core.injectors.impinging.ImpingingInjector.solve().

◆ _ring_manifold_for()

engine.core.injectors.impinging._ring_manifold_for ( config,
side,
rho,
mu,
n_holes,
d_hole )
protected
The stream's ring network when the declared plate has back channels, else None.

Definition at line 206 of file impinging.py.

Referenced by engine.core.injectors.impinging.ImpingingInjector.solve().

◆ _stream_flow()

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().

◆ impingement_standoff_m()

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().

◆ injector_face_pressure()

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.

◆ momentum_ratio_R_from_bulk_velocities()

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().

◆ rupe_mixing_ratio()

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().

Variable Documentation

◆ _LOG

engine.core.injectors.impinging._LOG = logging.getLogger(__name__)
protected

Definition at line 12 of file impinging.py.

◆ _PRINT_FEED_ORIFICE_CLOSURE

str engine.core.injectors.impinging._PRINT_FEED_ORIFICE_CLOSURE = "" and str(_print_raw).lower() not in ("0", "false", "no")
protected

Definition at line 14 of file impinging.py.

◆ _print_raw

engine.core.injectors.impinging._print_raw = os.environ.get("ENGINE_PRINT_IMPINGING_FEED_CLOSURE", "")
protected

Definition at line 13 of file impinging.py.

◆ _STREAM_ROOT_MAX_EVAL

int engine.core.injectors.impinging._STREAM_ROOT_MAX_EVAL = 200
protected

Definition at line 16 of file impinging.py.