STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
feedtwin.engine.balance Namespace Reference

Classes

class  SideBalance
class  MixtureBalance

Functions

MixtureBalance balance_from (EngineDesign design, *, float mdot_oxidiser, float mdot_fuel, float density_oxidiser, float density_fuel, float injector_dp_oxidiser, float injector_dp_fuel, float chamber_pressure, float supply_oxidiser=0.0, float supply_fuel=0.0)

Variables

float SOFT_STIFFNESS = 0.20
float VERY_SOFT_STIFFNESS = 0.10
float MIXTURE_TOLERANCE = 0.05

Detailed Description

Why the mixture ratio is what it is.

A coupled run reports an O/F. On its own that number is nearly useless as a
design input, because it says nothing about *what set it* -- and the two things
that could have are owned by different people. The injector face is the engine
designer's; the pressure the two legs arrive at is the stand's. Told only that
O/F came out at 2.19 against a 1.65 target, the engine designer redrills the
face and the stand builder does nothing, and the redrilled face is then wrong
for the day the fuel line gets shortened.

The decomposition is exact, not a correlation
---------------------------------------------
Each side of an injector is an orifice::

    mdot = Cd . A . sqrt(2 . rho . dp)

so the ratio of the two is, with no approximation at all,

.. code-block:: text

    O/F  =  Cd_ox A_ox sqrt(rho_ox)     .   sqrt( dp_ox )
            -------------------------       ------------
            Cd_f  A_f  sqrt(rho_f )         sqrt( dp_f  )

            \______ face ratio ______/       \_ feed _/

Two multiplicative terms. The **face ratio** is what the injector would deliver
if both sides saw the same pressure difference -- pure geometry, discharge
coefficient and propellant density, and the number the engine was drilled to.
The **feed term** is everything the stand does to that, and it is one at
equal injector drop, above one when the fuel leg is the more restrictive, below
when the ox leg is.

Because the split is exact, it is a *fault localisation* rather than a summary:
a face ratio that is off tells the engine designer to redrill, a feed term that
is off tells the stand builder to re-plumb, and neither has to wonder.

Stiffness is the other half of the same picture
-----------------------------------------------
The injector's share of the total pressure drop, ``dp_inj / p_c``, is the
classic design rule -- roughly 20% and up, and both legs, not the average. Below
it the chamber starts talking back to the feed system faster than the feed
system can answer, which is where coupled instability lives. It is reported per
side here because an average hides exactly the case that matters: one stiff leg
and one soft one is not a healthy injector, it is a healthy leg next to the leg
that will chug.

Function Documentation

◆ balance_from()

MixtureBalance feedtwin.engine.balance.balance_from ( EngineDesign design,
* ,
float mdot_oxidiser,
float mdot_fuel,
float density_oxidiser,
float density_fuel,
float injector_dp_oxidiser,
float injector_dp_fuel,
float chamber_pressure,
float supply_oxidiser = 0.0,
float supply_fuel = 0.0 )
Assemble a balance from a solved operating point.

``Cd`` is recovered from the flow and the pressure drop rather than
re-evaluated from the Reynolds model, so the identity closes on the numbers
the solver actually produced. Re-evaluating it would make the residual
report the difference between two ``Cd`` models instead of a real
inconsistency, which is the one thing the residual exists to catch.

Definition at line 340 of file balance.py.

Variable Documentation

◆ MIXTURE_TOLERANCE

float feedtwin.engine.balance.MIXTURE_TOLERANCE = 0.05

Definition at line 67 of file balance.py.

◆ SOFT_STIFFNESS

float feedtwin.engine.balance.SOFT_STIFFNESS = 0.20

Definition at line 60 of file balance.py.

◆ VERY_SOFT_STIFFNESS

float feedtwin.engine.balance.VERY_SOFT_STIFFNESS = 0.10

Definition at line 64 of file balance.py.