STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
engine.layerx.diag.shutdown Namespace Reference

Classes

class  TailSide
class  ShutdownSettings

Functions

Dict[str, Any] tail_off (TailSide a, TailSide b, *, float t0, float t_cmd, float dt=1.0e-5, float horizon_s=2.0)
Dict[str, Any] classify (Mapping[str, Any] tail, *, float end_tol_s=1.0e-3)
Dict[str, str] _note (str mode, Mapping[str, Any] cls)
Optional[str] _side_key (Optional[str] side)
Dict[str, Any] shutdown_from_run (Any prep, Mapping[str, Any] result, Any config=None, ShutdownSettings settings=ShutdownSettings(), Optional[Sequence[Mapping[str, Any]]] outflow=None)
Dict[str, Any] _shutdown_from_run (Any prep, Mapping[str, Any] result, Any config, ShutdownSettings settings, Optional[Sequence[Mapping[str, Any]]] outflow)

Variables

str MODEL_NAME = "shutdown_tail_timeline"

Detailed Description

Layer X shutdown: which tank runs dry first, and what the tail-off feeds the chamber.

``shutdown_from_run(prep, result, config=None, settings=ShutdownSettings(), outflow=None)``
-> ``diagnostics.shutdown`` (DATA-CONTRACT 3). ``tail_off(a, b, ...)`` is the model on plain inputs.

The main burn ends on depletion (``end_on_depletion``): the first tank reaches the dry mass and
the twin stops. It has no tail. This module takes that instant (or, when ``diag.outflow`` says
the outlet starts drawing gas earlier, that onset; or a timed cutoff) and follows each side's
**liquid** into the chamber from there, so the run says whether the engine shuts down
oxidiser-rich or fuel-rich, and how much of one propellant arrives with none of the other.

The model (a bounding timeline, every rule stated in the block)
---------------------------------------------------------------
* **The dry side.** Its tank is empty, but the line from the tank outlet to the orifices is full
  of liquid. The pressurant pushes that column through at the pre-dry flow (the ullage is still
  at tank pressure; gas behind a liquid slug). Its liquid ends when the line's contents
  ``rho (V_up + V_dn)`` have gone, or, once the main valve is shut, when the liquid that was
  downstream of the seat has gone.
* **The wet side** keeps flowing at its pre-dry rate until its main valve shuts.
* **The valves** are commanded shut ``delay_s`` after the first dry-out (default 0: commanded at
  it; the stand's actual cutoff logic is not on the drawing) and close over the drawing's travel
  time along the valve's own characteristic. Through the closing valve the flow is quasi-steady
  at the pre-shutdown driving pressure: ``m = m0 sqrt(R0 / (R_rest + R_valve(1)/f(x)^2))``,
  ``R0 = R_rest + R_valve(1)``, with ``R_rest`` the line and injector losses at the pre-shutdown
  point (the line's own time constant, 1-7 ms, is short against 50 ms of travel; AUDIT 9.5 §1).
* **After the seat shuts** the liquid downstream of it (tube, manifold, orifice passages) drains
  into the chamber. Its **mass** is exact; its **rate** is taken as the pre-shutdown flow, the
  fastest it can go, so the duration is a lower bound (the real drain decays with the chamber
  pressure, and LOX at ambient pressure flashes).
* **Mode**: the side whose liquid ends last is the one entering the chamber alone at the end:
  **LOX-rich** if LOX, **fuel-rich** if fuel. ``tail_mr_max`` is the O/F of everything that enters
  from the first dry-out to the end of flow (cumulative; once one side has stopped the
  instantaneous O/F is unbounded, so the cumulative figure and ``alone_kg``/``alone_s`` carry it).

A LOX-rich tail feeds oxygen with no fuel into a chamber whose walls are at their hottest: the
copper injector face and the graphite throat insert are both attacked by oxidiser-rich gas (the
replay's own graphite model counts O2 and O among the oxidisers, AUDIT 5.1). That is a graded note,
not a computed recession; no face thermal model exists (AUDIT 7 item 8).

Function Documentation

◆ _note()

Dict[str, str] engine.layerx.diag.shutdown._note ( str mode,
Mapping[str, Any] cls )
protected

Definition at line 179 of file shutdown.py.

Referenced by _shutdown_from_run().

◆ _shutdown_from_run()

Dict[str, Any] engine.layerx.diag.shutdown._shutdown_from_run ( Any prep,
Mapping[str, Any] result,
Any config,
ShutdownSettings settings,
Optional[Sequence[Mapping[str, Any]]] outflow )
protected

Definition at line 208 of file shutdown.py.

References _note(), _side_key(), classify(), max, min, and tail_off().

Referenced by shutdown_from_run().

◆ _side_key()

Optional[str] engine.layerx.diag.shutdown._side_key ( Optional[str] side)
protected

Definition at line 193 of file shutdown.py.

Referenced by _shutdown_from_run().

◆ classify()

Dict[str, Any] engine.layerx.diag.shutdown.classify ( Mapping[str, Any] tail,
* ,
float end_tol_s = 1.0e-3 )
Mode, the propellant alone at the end, LOX alone, and the cumulative tail O/F.

Definition at line 148 of file shutdown.py.

Referenced by _shutdown_from_run().

◆ shutdown_from_run()

Dict[str, Any] engine.layerx.diag.shutdown.shutdown_from_run ( Any prep,
Mapping[str, Any] result,
Any config = None,
ShutdownSettings settings = ShutdownSettings(),
Optional[Sequence[Mapping[str, Any]]] outflow = None )
``diagnostics.shutdown`` for a finished run. ``outflow`` is ``diagnostics.outflow`` when it
was computed: an earlier gas-ingestion onset is then the first dry-out. Never raises.

Definition at line 197 of file shutdown.py.

References _shutdown_from_run().

◆ tail_off()

Dict[str, Any] engine.layerx.diag.shutdown.tail_off ( TailSide a,
TailSide b,
* ,
float t0,
float t_cmd,
float dt = 1.0e-5,
float horizon_s = 2.0 )
Each side's liquid flow into the chamber from ``t0`` (the first dry-out) with the valves
commanded shut at ``t_cmd``. Returns per side the flow history, the mass delivered after
``t0`` and when its liquid ended.

Definition at line 99 of file shutdown.py.

References max, and min.

Referenced by _shutdown_from_run().

Variable Documentation

◆ MODEL_NAME

str engine.layerx.diag.shutdown.MODEL_NAME = "shutdown_tail_timeline"

Definition at line 53 of file shutdown.py.