|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Public Member Functions | |
| None | __init__ (self, Any card, Callable[[float, float, float], float] cf_vac, *, float ambient_pressure=101325.0, float volume=0.0) |
| float | expansion_scale (self, float mixture_ratio, float pressure) |
| Dict[str, Any] | model_block (self) |
| Any | evaluate (self, float mdot_oxidiser, float mdot_fuel) |
Public Attributes | |
| cf_vac = cf_vac | |
| eps0 = float(card.exit_area) / float(card.throat_area) | |
| Optional[Tuple[float, float]] | eps_bounds = None |
| int | eps_clamped = 0 |
| Optional[bool] | eps_axis = None |
| throat_area = self.card.throat_area: | |
Static Protected Attributes | |
| Optional | _EXPANSION_CLASS = None |
A card chamber whose vacuum exhaust velocity follows the eroding throat (audit D4-B, opt-in). Mixed into feedtwin's ``CardChamber`` as :data:`ExpansionCardChamber` (built on first use, so this module still imports without feedtwin, as the rest of it does). The card tabulates ``v_vac = (F + p_a A_e)/mdot`` at the as-built expansion ratio ``eps0``. When the throat opens (``throat_area`` set per step from the replay's schedule) and the exit does not, EngineDesign's nozzle runs at ``eps(t) = A_e/A_t(t) < eps0`` and its thrust is ``zeta_n Cf_vac(eps(t)) P0 A_t - p_a A_e`` (engine/core/nozzle.py). Its flow is ``mdot = P0 A_t / c*`` (chamber_solver.py), so ``v_vac = zeta_n Cf_vac c*``: at the same O/F and flow it scales with ``Cf_vac`` alone, and this chamber multiplies the card's ``v_vac`` by ``Cf_vac(O/F, Pc, eps(t)) / Cf_vac(O/F, Pc, eps0)`` from the CEA table EngineDesign uses (shifting equilibrium, NASA CEA via rocketcea: Gordon & McBride, NASA RP-1311, 1994; ``cf_vac`` is ``cea_cache.eval_cf_vac``). Without it the twin's thrust ran +0.5 % high at burnout against a fresh EngineDesign solve at the eroded geometry (audit D4, table "A. Keep"). Chamber pressure and flows are the card's exactly: c* does not depend on the nozzle. At the as-built throat the result *is* :class:`CardChamber`'s, the same object, so a run that never applies a throat schedule is unchanged bit for bit. The ratio is read at the card's chamber pressure, where EngineDesign reads ``Cf_vac`` at the nozzle's stagnation pressure ``Pc/kappa``; ``Cf_vac`` moves ~1e-5 relative over that 0.4 % (LE4), far inside the card's fit. An ``eps`` outside the CEA table is clamped by the table and counted in ``eps_clamped``.
| None engine.layerx.card._ExpansionScaling.__init__ | ( | self, | |
| Any | card, | ||
| Callable[[float, float, float], float] | cf_vac, | ||
| * | , | ||
| float | ambient_pressure = 101325.0, | ||
| float | volume = 0.0 ) |
| Any engine.layerx.card._ExpansionScaling.evaluate | ( | self, | |
| float | mdot_oxidiser, | ||
| float | mdot_fuel ) |
Definition at line 446 of file card.py.
References feedtwin.engine.card.CardChamber.ambient_pressure, feedtwin.engine.card.EngineCard.ambient_pressure(), feedtwin.engine.chamber.Chamber.ambient_pressure, payload.cold_gas_thruster.ColdGasThrusterConfig.ambient_pressure, payload.cold_gas_thruster.ColdGasThrusterResult.ambient_pressure, engine.layerx.link.EngineLink.card, feedtwin.engine.card._CardCStar.card, feedtwin.engine.card.CardChamber.card, feedtwin.engine.design.InjectorSide.card, world_t.card, evaluate(), expansion_scale(), max, throat_area, feedtwin.engine.card.EngineCard.throat_area, and feedtwin.engine.chamber.Chamber.throat_area.
Referenced by evaluate().
| float engine.layerx.card._ExpansionScaling.expansion_scale | ( | self, | |
| float | mixture_ratio, | ||
| float | pressure ) |
``Cf_vac(eps(t))/Cf_vac(eps0)`` at this O/F and pressure; exactly 1 at the as-built throat.
Definition at line 415 of file card.py.
Referenced by evaluate().
| Dict[str, Any] engine.layerx.card._ExpansionScaling.model_block | ( | self | ) |
The run record's description of this option (``{name, source, assumptions, inputs}``).
Definition at line 424 of file card.py.
References eps0, eps_axis, and eps_clamped.
|
staticprotected |
| engine.layerx.card._ExpansionScaling.eps0 = float(card.exit_area) / float(card.throat_area) |
Definition at line 407 of file card.py.
Referenced by model_block().
| engine.layerx.card._ExpansionScaling.eps_axis = None |
Definition at line 413 of file card.py.
Referenced by model_block().
| Optional[Tuple[float, float]] engine.layerx.card._ExpansionScaling.eps_bounds = None |
| engine.layerx.card._ExpansionScaling.eps_clamped = 0 |
Definition at line 409 of file card.py.
Referenced by model_block().
| engine.layerx.card._ExpansionScaling.throat_area = self.card.throat_area: |
Definition at line 417 of file card.py.
Referenced by evaluate(), and feedtwin.engine.design.EngineDesign.throat_diameter().