STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
engine.layerx.card._ExpansionScaling Class Reference

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

Detailed Description

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``.

Definition at line 375 of file card.py.

Constructor & Destructor Documentation

◆ __init__()

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 )

Definition at line 403 of file card.py.

References __init__().

Referenced by __init__().

Member Function Documentation

◆ evaluate()

◆ expansion_scale()

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

◆ model_block()

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.

Member Data Documentation

◆ _EXPANSION_CLASS

Optional engine.layerx.card._ExpansionScaling._EXPANSION_CLASS = None
staticprotected

Definition at line 474 of file card.py.

◆ cf_vac

engine.layerx.card._ExpansionScaling.cf_vac = cf_vac

Definition at line 406 of file card.py.

◆ eps0

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

◆ eps_axis

engine.layerx.card._ExpansionScaling.eps_axis = None

Definition at line 413 of file card.py.

Referenced by model_block().

◆ eps_bounds

Optional[Tuple[float, float]] engine.layerx.card._ExpansionScaling.eps_bounds = None

Definition at line 408 of file card.py.

◆ eps_clamped

engine.layerx.card._ExpansionScaling.eps_clamped = 0

Definition at line 409 of file card.py.

Referenced by model_block().

◆ throat_area

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


The documentation for this class was generated from the following file:
  • EngineDesign/engine/layerx/card.py