|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Public Member Functions | |
| None | __init__ (self, float throat_area, CStarModel cstar_model, *, float volume=0.0, float efficiency=1.0, float nozzle_efficiency=1.0, float ambient_pressure=101325.0) |
| ChamberResult | evaluate (self, float mdot_oxidiser, float mdot_fuel) |
| bool | is_firing (self, ChamberResult result) |
| float | fill_time (self, float pressure, float mixture_ratio) |
| str | __repr__ (self) |
Public Attributes | |
| throat_area = throat_area | |
| cstar_model = cstar_model | |
| volume = volume | |
| efficiency = efficiency | |
| nozzle_efficiency = nozzle_efficiency | |
| ambient_pressure = ambient_pressure | |
Chamber pressure from the flows the injector delivers.
Args:
throat_area: ``A_t`` [m^2].
cstar_model: Where combustion properties come from.
volume: Chamber volume [m^3]. Not integrated -- see
:meth:`fill_time`, which reports how long the chamber takes to
respond so the quasi-steady assumption is visible rather than
assumed.
nozzle_efficiency: ``eta_n``. Multiplies the thrust coefficient, so it
moves thrust and Isp and leaves chamber pressure alone.
efficiency: ``c*`` efficiency. Multiplies the table value, and is the
one place a real engine's losses enter this model.
ambient_pressure: What the chamber sits at with nothing flowing [Pa].
**Not a numerical guard.** A chamber is open to atmosphere through
its own nozzle, so ``mdot c* / A_t`` is only the chamber pressure
once that exceeds ambient; below it the nozzle is not choked and the
chamber is simply at ambient. Leaving it out lets a shut engine
report a near-vacuum chamber, which then asks the feed system to
solve a 650 psi drop across a shut valve into 0.5 psi -- a state no
hardware ever occupies and no solver enjoys being asked about.
Sea level by default; set it for altitude or a vacuum stand.
Definition at line 297 of file chamber.py.
| None feedtwin.engine.chamber.Chamber.__init__ | ( | self, | |
| float | throat_area, | ||
| CStarModel | cstar_model, | ||
| * | , | ||
| float | volume = 0.0, | ||
| float | efficiency = 1.0, | ||
| float | nozzle_efficiency = 1.0, | ||
| float | ambient_pressure = 101325.0 ) |
Definition at line 322 of file chamber.py.
| str feedtwin.engine.chamber.Chamber.__repr__ | ( | self | ) |
Definition at line 433 of file chamber.py.
| ChamberResult feedtwin.engine.chamber.Chamber.evaluate | ( | self, | |
| float | mdot_oxidiser, | ||
| float | mdot_fuel ) |
Chamber state for a pair of propellant flows. Chamber pressure is ``mdot c* / A_t``, but ``c*`` depends on mixture ratio and (weakly) on pressure, so this iterates the pressure to consistency. Three passes is ample -- the dependence on pressure is gentle -- and it converges from any starting point because raising pressure barely moves ``c*``.
Reimplemented in feedtwin.engine.card.CardChamber.
Definition at line 341 of file chamber.py.
References feedtwin.engine.card.CardChamber.ambient_pressure, ambient_pressure, feedtwin.engine.chamber.burning(), cstar_model, efficiency, max, min, nozzle_efficiency, feedtwin.engine.card.EngineCard.throat_area, throat_area, and feedtwin.engine.chamber.unlit().
Referenced by engine.core.runner.PintleEngineRunner.evaluate_arrays().
| float feedtwin.engine.chamber.Chamber.fill_time | ( | self, | |
| float | pressure, | ||
| float | mixture_ratio ) |
Chamber residence time [s]: how fast chamber pressure can respond. ``tau = V / (A_t c*)``, of order a millisecond on a small engine. It is reported rather than integrated because it is three orders of magnitude below anything a feed system does, and carrying it as a state would make the whole system stiff for no answer anyone wants. When it stops being small -- a very large chamber, or a startup transient resolved at the millisecond level -- this is the number that says so.
Definition at line 416 of file chamber.py.
References cstar_model, feedtwin.engine.card.EngineCard.throat_area, throat_area, and volume.
| bool feedtwin.engine.chamber.Chamber.is_firing | ( | self, | |
| ChamberResult | result ) |
Whether the throat is actually choked, or the engine is just open. Below ambient-driven flow there is no combustion chamber to speak of; reporting a thrust and an Isp there would be arithmetic, not physics.
Definition at line 408 of file chamber.py.
References feedtwin.engine.card.CardChamber.ambient_pressure, and ambient_pressure.
| feedtwin.engine.chamber.Chamber.ambient_pressure = ambient_pressure |
Definition at line 339 of file chamber.py.
Referenced by engine.layerx.card._ExpansionScaling.evaluate(), evaluate(), feedtwin.engine.card.EngineCard.install(), and is_firing().
| feedtwin.engine.chamber.Chamber.cstar_model = cstar_model |
Definition at line 335 of file chamber.py.
Referenced by evaluate(), and fill_time().
| feedtwin.engine.chamber.Chamber.efficiency = efficiency |
Definition at line 337 of file chamber.py.
Referenced by evaluate().
| feedtwin.engine.chamber.Chamber.nozzle_efficiency = nozzle_efficiency |
Definition at line 338 of file chamber.py.
Referenced by evaluate().
| feedtwin.engine.chamber.Chamber.throat_area = throat_area |
Definition at line 334 of file chamber.py.
Referenced by engine.layerx.card._ExpansionScaling.evaluate(), evaluate(), fill_time(), and feedtwin.engine.design.EngineDesign.throat_diameter().
| feedtwin.engine.chamber.Chamber.volume = volume |