|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Variables | |
| M = Provenance.MANUFACTURER | |
Vessels and the gas side: does a COPV's pressure mean anything? Phase 05's exit criteria. The one that matters is the first: an adiabatic blowdown has a closed-form answer, and a model that cannot reproduce it has no business predicting how long a bottle holds regulator inlet pressure. Checked at *low* pressure, deliberately. Nitrogen is nearly ideal there, so the ideal-gas closed form is the right reference; at COPV pressure the model should depart from it, and by how much is the whole reason for using a real equation of state. Both directions are asserted.
|
protected |
Definition at line 192 of file test_vessels.py.
Referenced by test_choked_flow_is_a_ceiling_not_an_asymptote(), test_gas_pressure_drop_rises_with_flow_and_inverts_correctly(), and test_helium_chokes_at_a_third_the_mass_flow_of_nitrogen().
|
protected |
The sample nearest a mass fraction, asserting it was actually reached. Without the assertion a blowdown that ran out of time returns its last sample and the test quietly checks the wrong point -- which is exactly what happened while writing these.
Definition at line 33 of file test_vessels.py.
References min.
Referenced by test_a_real_gas_departs_from_the_ideal_result_at_copv_pressure(), test_adiabatic_blowdown_matches_the_closed_form(), and test_the_wall_sets_the_polytropic_exponent_rather_than_assuming_it().
| None test_vessels.test_a_liquid_in_a_gas_volume_is_refused | ( | ) |
(rho, u) is a fine state pair for a gas and a poor one for a liquid. Liquid density is roughly 180x less sensitive to pressure, so recovering pressure from density amplifies any error in it by the same factor: through interpolated tables a liquid comes back 0.1-0.7% out where a gas is within 1e-4%. That is small enough to go unnoticed and large enough to matter, so it is refused rather than tolerated.
Definition at line 285 of file test_vessels.py.
| None test_vessels.test_a_real_gas_departs_from_the_ideal_result_at_copv_pressure | ( | ) |
And it must, or the real equation of state is doing nothing. A test that only checked the ideal limit would pass on an ideal-gas model, which is the model this phase exists to replace.
Definition at line 76 of file test_vessels.py.
References _reached().
| None test_vessels.test_adiabatic_blowdown_matches_the_closed_form | ( | ) |
``T/T0 = (m/m0)^(g-1)`` and ``p/p0 = (m/m0)^g``, exactly, for an ideal gas. Phase 05's headline criterion. A vessel with no wall is adiabatic, and at two bar nitrogen is ideal to within 0.04%, so the model has nowhere to hide.
Definition at line 51 of file test_vessels.py.
References _reached().
| None test_vessels.test_an_ideal_gas_would_overstate_what_a_bottle_holds | ( | ) |
The number that justifies the whole property layer. A 9 L bottle at 4500 psi holds about 2.79 kg of nitrogen. Ideal gas says 3.21 kg -- 15% more pressurant than is actually in there, which propagates straight into how long the tanks stay up.
Definition at line 97 of file test_vessels.py.
| None test_vessels.test_an_isolated_vessel_holds_its_state | ( | ) |
No flow, no heat: nothing should drift.
Definition at line 163 of file test_vessels.py.
| None test_vessels.test_choked_flow_is_a_ceiling_not_an_asymptote | ( | ) |
Past it, no downstream pressure exists that passes the flow. Reported as infeasible rather than iterated on, so a solver can back off rather than wander.
Definition at line 208 of file test_vessels.py.
References _orifice().
| None test_vessels.test_choked_flow_scales_with_area_and_upstream_pressure | ( | ) |
The two things a relief orifice is sized on.
Definition at line 223 of file test_vessels.py.
| None test_vessels.test_gas_conditions_carry_what_a_gas_needs | ( | ) |
Liquid components ignore these; gas components cannot work without them.
Definition at line 277 of file test_vessels.py.
| None test_vessels.test_gas_pressure_drop_rises_with_flow_and_inverts_correctly | ( | ) |
The relation is solved by bracketing, so check it actually inverts.
Definition at line 250 of file test_vessels.py.
References _orifice().
| None test_vessels.test_gases_round_trip_through_tables_without_loss | ( | ) |
The other half of that claim, so the guard is not merely superstition.
Definition at line 299 of file test_vessels.py.
| None test_vessels.test_heat_from_the_wall_is_reported_not_buried | ( | ) |
It decides how fast a bottle droops, so it belongs in the result.
Definition at line 146 of file test_vessels.py.
| None test_vessels.test_helium_chokes_at_a_third_the_mass_flow_of_nitrogen | ( | ) |
Same hole, same pressure, very different pressurant budget. Helium's low molecular weight means far less mass through the same orifice, which is the trade against its not condensing into a cold ullage.
Definition at line 236 of file test_vessels.py.
References _orifice().
| None test_vessels.test_initial_state_round_trips_through_pressure_and_temperature | ( | ) |
Nobody fills a bottle to an internal energy.
Definition at line 176 of file test_vessels.py.
| None test_vessels.test_stirring_scales_only_the_wall_exchange | ( | ) |
A charge jet stirs the vessel; `stirring` multiplies the still-gas conductance and nothing else. At 1 it is exactly the old behaviour.
Definition at line 311 of file test_vessels.py.
| None test_vessels.test_the_critical_pressure_ratio_is_the_textbook_value | ( | ) |
0.528 for a diatomic gas. A constant worth pinning, not deriving twice.
Definition at line 202 of file test_vessels.py.
| None test_vessels.test_the_wall_sets_the_polytropic_exponent_rather_than_assuming_it | ( | ) |
EngineDesign's blowdown solver takes ``n`` as an input. Here it is output. The vessel wall is a heat reservoir several times the gas's own capacity, and how tightly it is coupled decides how much the bottle cools. Assuming an exponent assumes the answer; giving the wall its real mass and conductance produces one.
Definition at line 116 of file test_vessels.py.
References _reached().
| test_vessels.M = Provenance.MANUFACTURER |
Definition at line 30 of file test_vessels.py.