|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Variables | |
| float | AMB = 13.64 |
| CONFIG | |
| SETTINGS = SimpleNamespace(tank_pressure_psia=578.0, copv_pressure_psig=4500.0) | |
| dict | STAND = {"lockup_psia": 578.0, "fill_psig": 4500.0, "max_fill_psig": 4500.0, "reference_thrust_N": 6751.0} |
Set point (engine/layerx/setpoint.py): the dome, lockup and fill for a target mean thrust. The solve is checked against closed-form stands, where the root is known by hand, through the same ``evaluate`` seam the burns go through. One real burn smoke test runs with ``LAYERX_SLOW=1``. Hand numbers used below: * Linear stand, F(L) = 7013 + 10.1 (L - 578) N (LE4's slope, docs/layerx/AUDIT.md 9.10 3.2): F = 7200 N at L = 578 + 187/10.1 = 596.5149 psia. The secant is exact on a line, so two opening burns and one Newton burn. * Coupled stand, the same thrust plus 0.015 N per psig of fill above 4500, and the bottle spare S = F_fill + 14.7 - 6 L psi (a draw of 5 psi per psia of lockup, so 3000 psi at 600 psia): S = 100 gives F_fill = 85.3 + 6 L; substituted, (10.1 + 0.09) L = 7200 - 7013 + 5837.8 + 0.015 * 4414.7 = 6091.0205, so L = 597.7449 psia and F_fill = 3671.77 psig.
|
protected |
Definition at line 87 of file test_layerx_setpoint.py.
Referenced by test_a_bottle_too_small_for_the_margin_is_said_not_hidden(), test_a_curved_stand_converges_to_its_closed_form_root(), test_a_set_point_over_the_meop_is_infeasible_and_says_where_the_limit_binds(), test_a_target_beyond_a_trip_homes_on_the_trip_and_says_so(), test_a_trip_is_never_a_root(), test_an_accepted_fill_never_leaves_less_than_the_margin(), test_broyden_learns_the_fill_column_it_was_not_given(), test_lockup_and_fill_together_land_on_the_hand_solution(), test_the_card_change_list_and_model_block(), test_the_secant_lands_on_the_hand_root_of_a_linear_stand_in_three_burns(), and test_without_the_replay_the_answer_is_verified_with_it_and_corrected_once().
|
protected |
A closed-form stand behind the ``evaluate`` seam.
Definition at line 34 of file test_layerx_setpoint.py.
Referenced by test_a_bottle_too_small_for_the_margin_is_said_not_hidden(), test_a_curved_stand_converges_to_its_closed_form_root(), test_a_set_point_over_the_meop_is_infeasible_and_says_where_the_limit_binds(), test_a_target_beyond_a_trip_homes_on_the_trip_and_says_so(), test_a_trip_is_never_a_root(), test_an_accepted_fill_never_leaves_less_than_the_margin(), test_broyden_learns_the_fill_column_it_was_not_given(), test_lockup_and_fill_together_land_on_the_hand_solution(), test_the_card_change_list_and_model_block(), test_the_secant_lands_on_the_hand_root_of_a_linear_stand_in_three_burns(), and test_without_the_replay_the_answer_is_verified_with_it_and_corrected_once().
| float test_layerx_setpoint.coupled | ( | float | L, |
| float | F ) |
Definition at line 73 of file test_layerx_setpoint.py.
References linear().
| float test_layerx_setpoint.coupled_spare | ( | float | L, |
| float | F ) |
Definition at line 77 of file test_layerx_setpoint.py.
| float test_layerx_setpoint.linear | ( | float | L, |
| float | F ) |
Definition at line 69 of file test_layerx_setpoint.py.
Referenced by coupled(), and test_without_the_replay_the_answer_is_verified_with_it_and_corrected_once().
| test_layerx_setpoint.test_a_bottle_too_small_for_the_margin_is_said_not_hidden | ( | ) |
Definition at line 180 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_a_curved_stand_converges_to_its_closed_form_root | ( | ) |
F = 300 sqrt(L): F = 7200 N at L = (7200/300)^2 = 576 psia.
Definition at line 103 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_a_set_point_over_the_meop_is_infeasible_and_says_where_the_limit_binds | ( | ) |
Peak = lockup + 41 psi; MEOP 585 psi + 13.64 = 598.64 psia, reached at 557.64 psia lockup, where the line gives 7013 + 10.1 (557.64 - 578) = 6807.4 N.
Definition at line 188 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_a_target_beyond_a_trip_homes_on_the_trip_and_says_so | ( | ) |
7400 N needs 616.3 psia on the line, but the stand trips above 605 psia. Each burn that trips bounds the next step at halfway to it, so the solve closes on the highest usable lockup.
Definition at line 208 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_a_trip_is_never_a_root | ( | ) |
The stand trips above 610 psia: the opening guess (616.4) trips, the solve still finds 596.5.
Definition at line 199 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_an_accepted_fill_never_leaves_less_than_the_margin | ( | ) |
The fill band is one-sided. Stand: spare rises 1.02 psi per psi of fill, where the first Jacobian assumes 1.0, so the first fill step overshoots low by 2 % of the distance: from 965 psi at the full bottle, a two-sided +-20 psi band around 100 would accept the 82.7 psi it lands on -- a "solved" fill that the shared ``bottle_margin`` limit (100 psi) grades bad. Aiming at 110 +- 10 it lands at 92.9, is refused, and Broyden's update brings it into [100, 120].
Definition at line 145 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_broyden_learns_the_fill_column_it_was_not_given | ( | ) |
Near dropout the spare rises only 0.5 psi per psi of fill, not the 1.0 the first Jacobian assumes, and the thrust-fill coupling is not the 0 it assumes. Stand: thrust as ``coupled``; spare S = 944 + 0.5 (F - 4500) - 5.5 (L - 600.36) (AUDIT 9.10 3.2/3.4 numbers). With u = L - 578, v = F - 4500 the root solves 10.1 u + 0.015 v = 187, 0.5 v - 5.5 u = -966.98: v = -1702.48, u = 21.0433, i.e. L = 599.043 psia, F = 2797.5 psig. A fixed first Jacobian closes the spare only by half each burn and runs out of burns; Broyden's update does not.
Definition at line 124 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_figures_by_hand | ( | ) |
A burn's flat figures, on the delivered basis where there is one. The bottle's spare is over the higher tank's T-0 pressure (the shared ``bottle_margin``'s basis), not the lockup asked for: 706.38 - 597.93 = 108.45 psi (the builder's real LE4 burn: 108.57 over the 597.81 lockup).
Definition at line 159 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_lockup_and_fill_together_land_on_the_hand_solution | ( | ) |
Definition at line 111 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_smoke_the_real_stand_reaches_a_target_in_three_burns | ( | ) |
LE4 on the He drawing, on the pad, no replay (as-built throat): AUDIT 9.10 3.2 measured 6972 N at 578 psia and 7196 N at 600 psia. Target 7100 N: the answer lies between, ~589.5 psia.
Definition at line 359 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_the_card_change_list_and_model_block | ( | ) |
Definition at line 243 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_the_fallback_grade_by_hand | ( | ) |
Peaks 642.0 (LOX) / 642.5 (fuel) psia at 13.64 psia ambient: the tanks trip at 1000 psia (``tank_mawp_psi`` is absolute, prepare.vessel_trip; it is held as it is, not with the site's atmosphere added), ok; the design cap 600 -> warn (AUDIT D11); fuel MEOP 625 psi -> 638.64 psia, bad by 3.86 psi.
Definition at line 280 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_the_route_refuses_before_a_slot_is_taken | ( | tmp_path, | |
| monkeypatch ) |
Definition at line 334 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_the_secant_lands_on_the_hand_root_of_a_linear_stand_in_three_burns | ( | ) |
Definition at line 94 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_the_shared_grade_gets_the_meop_and_it_is_graded_once | ( | monkeypatch | ) |
With engine/layerx/diag/limits.py present, the request's MEOP is handed to it (graded on the contract's basis, psi across the wall) and the set point adds no second MEOP row of its own.
Definition at line 309 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_the_target_defaults_to_the_design_and_refuses_none | ( | ) |
Definition at line 270 of file test_layerx_setpoint.py.
| test_layerx_setpoint.test_without_the_replay_the_answer_is_verified_with_it_and_corrected_once | ( | ) |
The replay adds a constant +41 N (AUDIT 9.10 4a: 7013 vs 6972 N at 578 psia).
Definition at line 218 of file test_layerx_setpoint.py.
| float test_layerx_setpoint.AMB = 13.64 |
Definition at line 31 of file test_layerx_setpoint.py.
| test_layerx_setpoint.CONFIG |
Definition at line 81 of file test_layerx_setpoint.py.
| test_layerx_setpoint.SETTINGS = SimpleNamespace(tank_pressure_psia=578.0, copv_pressure_psig=4500.0) |
Definition at line 83 of file test_layerx_setpoint.py.
| dict test_layerx_setpoint.STAND = {"lockup_psia": 578.0, "fill_psig": 4500.0, "max_fill_psig": 4500.0, "reference_thrust_N": 6751.0} |
Definition at line 84 of file test_layerx_setpoint.py.