|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Variables | |
| float | AMBIENT = 101325.0 |
A drawing made in pid-designer the way a person makes one. pid-designer's lines have no direction: "walking any line in either direction. What 'upstream' means on a drawing with no arrows" (its `checks.ts`). Which end is a line's ``source`` is only the end the mouse started at. The shipped stand drawings were authored in flow order, so reading ``source -> target`` as upstream to downstream happened to work on them; a drawing made freely broke on it. Run a press line *from* the tank *to* its solenoid and both of the solenoid's lines arrived at its inlet, its outlet hung open, and the press valve was read as a vent from the regulator to atmosphere. These pin the rule that replaced it -- the port a line was drawn on decides the side, but only where the old reading left a side with nothing on it -- and the two messages a user importing their own drawing actually needs.
|
protected |
Definition at line 180 of file test_pid_drawn_freely.py.
References built().
Referenced by test_a_check_valve_drawn_backwards_checks_the_flow(), test_a_directed_valve_dragged_against_the_flow_reads_its_ports(), and test_a_directed_valve_drawn_in_flow_order_is_read_as_before().
|
protected |
Bottle, regulator-less press manifold, two tanks, two press solenoids, two mains to an engine -- tagged the way LE4 tags them.
Definition at line 432 of file test_pid_drawn_freely.py.
Referenced by _le4_with_top_manifold(), test_a_direct_line_into_the_engine_starts_the_injector_leg_at_the_valve(), test_a_dome_nothing_loads_is_the_operators_setting(), test_a_line_bore_of_zero_is_said(), test_a_line_with_half_a_size_takes_the_fallback_for_the_rest_and_says_so(), test_a_line_with_no_size_is_a_direct_connection(), test_a_motorized_main_valve_has_the_same_job_as_a_rotary_one(), test_a_name_that_matches_still_wins_over_a_role(), test_a_segment_with_a_zero_bore_is_reported(), test_each_commandable_valves_job_is_read_off_the_plumbing(), test_two_fixed_pressures_joined_directly_stay_a_line(), test_two_tanks_on_one_direct_press_manifold_conserve_pressurant(), and test_valves_the_names_do_not_match_are_bound_by_what_they_do().
|
protected |
LE4's LOX tank top: a manifold on the tank's ``t2`` port carrying a transducer and a quick-disconnect with nothing beyond it -- the GSE vent couples there, and the vent valve is on the cart.
Definition at line 622 of file test_pid_drawn_freely.py.
References _le4_like(), line(), and P().
Referenced by test_a_capped_disconnect_on_an_unvented_tank_top_is_its_gse_vent(), test_a_drawn_vent_valve_leaves_the_disconnect_capped(), test_a_manifold_on_a_tanks_top_port_is_on_its_ullage(), test_a_turned_tanks_ports_say_nothing_about_up(), and test_ox_fill_vents_through_the_gse_disconnect().
|
protected |
Definition at line 505 of file test_pid_drawn_freely.py.
Referenced by test_a_capped_disconnect_on_an_unvented_tank_top_is_its_gse_vent(), test_a_name_that_matches_still_wins_over_a_role(), test_a_role_two_valves_share_binds_neither(), test_ox_fill_vents_through_the_gse_disconnect(), test_two_tanks_on_one_direct_press_manifold_conserve_pressurant(), and test_valves_the_names_do_not_match_are_bound_by_what_they_do().
|
protected |
|
protected |
|
protected |
Definition at line 305 of file test_pid_drawn_freely.py.
References line(), P(), and press_leg().
Referenced by test_a_bottle_with_no_volume_is_the_stands_copv_not_a_k_bottle(), test_a_copv_drawn_as_a_tank_is_read_as_the_pressurant_supply(), and test_a_tank_that_only_forgot_its_temperature_is_not_reread_and_says_why().
|
protected |
Definition at line 654 of file test_pid_drawn_freely.py.
Referenced by test_a_manifold_on_a_tanks_top_port_is_on_its_ullage(), and test_a_turned_tanks_ports_say_nothing_about_up().
|
protected |
Bottle, a check valve or regulator ``X``, vent: the smallest directed run.
Definition at line 161 of file test_pid_drawn_freely.py.
References P().
Referenced by test_a_check_valve_drawn_backwards_checks_the_flow(), test_a_directed_valve_dragged_against_the_flow_reads_its_ports(), and test_a_directed_valve_drawn_in_flow_order_is_read_as_before().
| test_pid_drawn_freely.built | ( | Any | payload | ) |
Definition at line 99 of file test_pid_drawn_freely.py.
Referenced by _flow(), test_a_capped_disconnect_on_an_unvented_tank_top_is_its_gse_vent(), test_a_capped_fitting_behind_a_shut_valve_does_not_make_the_solve_singular(), test_a_check_valve_drawn_backwards_checks_the_flow(), test_a_directed_valve_dragged_against_the_flow_reads_its_ports(), test_a_directed_valve_drawn_in_flow_order_is_read_as_before(), test_a_dome_nothing_loads_is_the_operators_setting(), test_a_drawn_vent_valve_leaves_the_disconnect_capped(), test_a_fill_disconnect_left_capped_does_not_crash_the_solve(), test_a_line_bore_of_zero_is_said(), test_a_line_with_half_a_size_takes_the_fallback_for_the_rest_and_says_so(), test_a_line_with_no_size_is_a_direct_connection(), test_a_manifold_on_a_tanks_top_port_is_on_its_ullage(), test_a_motorized_main_valve_has_the_same_job_as_a_rotary_one(), test_a_name_that_matches_still_wins_over_a_role(), test_a_press_line_drawn_from_the_tank_lands_on_the_valves_other_side(), test_a_relief_valve_with_no_set_pressure_is_shut_not_a_hole(), test_a_segment_with_a_zero_bore_is_reported(), test_a_tank_full_of_gas_is_told_to_be_a_pressurant_bottle(), test_a_turned_tanks_ports_say_nothing_about_up(), test_a_valve_with_lines_on_both_sides_is_read_exactly_as_before(), test_each_commandable_valves_job_is_read_off_the_plumbing(), test_reading_the_ports_says_so(), test_the_engine_symbols_chamber_pressure_is_its_boundary(), test_the_same_holds_when_both_lines_are_drawn_out_of_the_valve(), test_two_fixed_pressures_joined_directly_stay_a_line(), test_valves_the_names_do_not_match_are_bound_by_what_they_do(), and test_without_ports_a_one_sided_valve_is_still_a_vent().
| dict[str, object] test_pid_drawn_freely.line | ( | str | eid, |
| str | a, | ||
| str | b, | ||
| str | from_port = "", | ||
| str | to_port = "" ) |
Definition at line 42 of file test_pid_drawn_freely.py.
References P().
Referenced by _le4_like(), _le4_with_top_manifold(), _stand_with_copv_tank(), test_a_capped_fitting_behind_a_shut_valve_does_not_make_the_solve_singular(), test_a_check_valve_drawn_backwards_checks_the_flow(), test_a_directed_valve_dragged_against_the_flow_reads_its_ports(), test_a_directed_valve_drawn_in_flow_order_is_read_as_before(), test_a_dome_nothing_loads_is_the_operators_setting(), test_a_fill_disconnect_left_capped_does_not_crash_the_solve(), test_a_part_the_library_refuses_is_named_and_fails_the_assembly(), test_a_press_line_drawn_from_the_tank_lands_on_the_valves_other_side(), test_a_relief_valve_with_no_set_pressure_is_shut_not_a_hole(), test_a_tank_full_of_gas_is_told_to_be_a_pressurant_bottle(), test_a_valve_with_lines_on_both_sides_is_read_exactly_as_before(), test_reading_the_ports_says_so(), test_the_engine_symbols_chamber_pressure_is_its_boundary(), test_the_same_holds_when_both_lines_are_drawn_out_of_the_valve(), test_two_fixed_pressures_joined_directly_stay_a_line(), test_two_tanks_on_one_direct_press_manifold_conserve_pressurant(), and test_without_ports_a_one_sided_valve_is_still_a_vent().
| dict[str, object] test_pid_drawn_freely.node | ( | str | nid, |
| str | ctype, | ||
| str | label, | ||
| **object | data ) |
Definition at line 34 of file test_pid_drawn_freely.py.
| dict[str, object] test_pid_drawn_freely.P | ( | float | value, |
| str | unit, | ||
| str | source = "measured" ) |
Definition at line 30 of file test_pid_drawn_freely.py.
Referenced by _le4_like(), _le4_with_top_manifold(), _stand_with_copv_tank(), _through(), line(), press_leg(), test_a_capped_fitting_behind_a_shut_valve_does_not_make_the_solve_singular(), test_a_dome_nothing_loads_is_the_operators_setting(), test_a_K_with_no_bore_to_refer_it_to_is_said(), test_a_line_bore_of_zero_is_said(), test_a_line_with_half_a_size_takes_the_fallback_for_the_rest_and_says_so(), test_a_part_the_library_refuses_is_named_and_fails_the_assembly(), test_a_segment_with_a_zero_bore_is_reported(), test_a_stretch_with_no_bore_on_a_bored_run_is_sized_at_the_run_and_said(), test_a_tank_full_of_gas_is_told_to_be_a_pressurant_bottle(), test_the_engine_symbols_chamber_pressure_is_its_boundary(), and test_two_tanks_on_one_direct_press_manifold_conserve_pressurant().
| Any test_pid_drawn_freely.press_leg | ( | *dict[str, object] | lines, |
| dict[str, Any] | None | sol = None ) |
Bottle, press solenoid, fuel tank, with the two lines as given.
Definition at line 65 of file test_pid_drawn_freely.py.
References P().
Referenced by _stand_with_copv_tank(), test_a_capped_fitting_behind_a_shut_valve_does_not_make_the_solve_singular(), test_a_fill_disconnect_left_capped_does_not_crash_the_solve(), test_a_part_the_library_refuses_is_named_and_fails_the_assembly(), test_a_press_line_drawn_from_the_tank_lands_on_the_valves_other_side(), test_a_relief_valve_with_no_set_pressure_is_shut_not_a_hole(), test_a_tank_full_of_gas_is_told_to_be_a_pressurant_bottle(), test_a_valve_with_lines_on_both_sides_is_read_exactly_as_before(), test_reading_the_ports_says_so(), test_the_engine_symbols_chamber_pressure_is_its_boundary(), test_the_same_holds_when_both_lines_are_drawn_out_of_the_valve(), and test_without_ports_a_one_sided_valve_is_still_a_vent().
| None test_pid_drawn_freely.test_a_bottle_with_no_volume_is_the_stands_copv_not_a_k_bottle | ( | ) |
LE4's COPV gives no volume. It was given a 44 L K-bottle, so a burn took 250 psi out of a bottle that really loses thousands: 45 scf of air at 4500 psi is a 4.64 L cylinder (4.6871 L with its fittings), the one the stand and the Study run.
Definition at line 342 of file test_pid_drawn_freely.py.
References _open(), and _stand_with_copv_tank().
| None test_pid_drawn_freely.test_a_capped_disconnect_on_an_unvented_tank_top_is_its_gse_vent | ( | ) |
No vent valve on the drawing: the pad's Ox Fill boiled TK-3 up to the 717 psig critical pin and the sequence never left it. The disconnect is where the cart's vent couples, so the table's LOX Vent opens it.
Definition at line 678 of file test_pid_drawn_freely.py.
References _le4_with_top_manifold(), _machine(), and built().
| ( None ) test_pid_drawn_freely.test_a_capped_fitting_behind_a_shut_valve_does_not_make_the_solve_singular | ( | ) |
LE4's regulator dome line: a solenoid, then a quick-disconnect left open to nothing. With the solenoid shut that run is an island cut off from every fixed pressure. Peeled from both ends, the stubs met in the middle and left one node with no equation and no live end -- "the Jacobian could not be factorised" on every solve with the solenoid shut, which in a DAQ sequence that never commands it is every solve.
Definition at line 362 of file test_pid_drawn_freely.py.
References built(), line(), P(), and press_leg().
| None test_pid_drawn_freely.test_a_check_valve_drawn_backwards_checks_the_flow | ( | ) |
Lines in flow order, but onto ``r`` from the bottle: pid-designer's ``cv-backwards``. The valve's own inlet faces the vent, so it does not pass the bottle -- and the build says why.
Definition at line 218 of file test_pid_drawn_freely.py.
References _flow(), _through(), built(), and line().
| None test_pid_drawn_freely.test_a_copv_drawn_as_a_tank_is_read_as_the_pressurant_supply | ( | ) |
Nitrogen stated at 293 K is above its 126 K critical point: it can only be gas, so the TANK is the pressurant bottle. LE4 drew its COPV this way, and read as a propellant tank it could not even open (a propellant tank starts from a saturated liquid that does not exist there).
Definition at line 332 of file test_pid_drawn_freely.py.
References _open(), and _stand_with_copv_tank().
| None test_pid_drawn_freely.test_a_direct_line_into_the_engine_starts_the_injector_leg_at_the_valve | ( | ) |
Definition at line 762 of file test_pid_drawn_freely.py.
References _le4_like(), and _sizeless().
| None test_pid_drawn_freely.test_a_directed_valve_dragged_against_the_flow_reads_its_ports | ( | str | ctype | ) |
Ports right (``l`` in, as pid-designer draws and checks a CV), both lines dragged from the far end. pid-designer is silent, so the twin must flow; it read the direction and put the bottle on the outlet, flowing nothing.
Definition at line 188 of file test_pid_drawn_freely.py.
References _flow(), _through(), built(), and line().
| None test_pid_drawn_freely.test_a_directed_valve_drawn_in_flow_order_is_read_as_before | ( | str | ctype | ) |
Definition at line 206 of file test_pid_drawn_freely.py.
References _flow(), _through(), built(), and line().
| None test_pid_drawn_freely.test_a_dome_nothing_loads_is_the_operators_setting | ( | ) |
LE4's regulator is dome-loaded, with its dome filled through a QD rather
than by a drawn control regulator. Nothing exposed the dome, so the
cockpit's dome knob did not reach it and Layer X could not solve the dome
for a lockup ("Could not solve the dome setting"). It is a signal now --
and the press valves are still found through the regulator.
Definition at line 587 of file test_pid_drawn_freely.py.
References _le4_like(), built(), line(), and P().
| None test_pid_drawn_freely.test_a_drawn_vent_valve_leaves_the_disconnect_capped | ( | ) |
Definition at line 702 of file test_pid_drawn_freely.py.
References _le4_with_top_manifold(), and built().
| None test_pid_drawn_freely.test_a_fill_disconnect_left_capped_does_not_crash_the_solve | ( | ) |
A QD with no coefficient is a fitting, priced as a bend. Capped, it is a stub, and the solver back-fills a stub at exactly zero flow -- where the bend correlation (Rennels, via fluids) refuses a Reynolds number of zero. The ValueError escaped a solve asked not to raise, on every solve of any drawing with a fill QD on it.
Definition at line 244 of file test_pid_drawn_freely.py.
References built(), line(), and press_leg().
| None test_pid_drawn_freely.test_a_K_with_no_bore_to_refer_it_to_is_said | ( | ) |
A K multiplies a dynamic head, which needs a bore. With none on the run the segment priced nothing and the reader said nothing.
Definition at line 886 of file test_pid_drawn_freely.py.
References P().
| None test_pid_drawn_freely.test_a_line_bore_of_zero_is_said | ( | ) |
A line-level 0 mm with no segments built without a word, as a branch no flow can pass, and a steady solve through it stalls on its first step. It is said; the line itself is left as drawn, because Layer X reads that 0 as "not a line" (its preflight names it) and a fallback here would contradict it.
Definition at line 823 of file test_pid_drawn_freely.py.
References _le4_like(), built(), and P().
| None test_pid_drawn_freely.test_a_line_with_half_a_size_takes_the_fallback_for_the_rest_and_says_so | ( | ) |
Definition at line 786 of file test_pid_drawn_freely.py.
References _le4_like(), built(), and P().
| None test_pid_drawn_freely.test_a_line_with_no_size_is_a_direct_connection | ( | ) |
A line drawn with no length and no bore is two parts screwed together -- a tank's port into its valve. It used to be solved as the fallback tube, a metre of 9.5 mm, which put 94 psi on a LOX feed that has none.
Definition at line 752 of file test_pid_drawn_freely.py.
References _le4_like(), _sizeless(), and built().
| None test_pid_drawn_freely.test_a_manifold_on_a_tanks_top_port_is_on_its_ullage | ( | ) |
It reaches no supply and no atmosphere, so topology alone hung it on the *liquid outlet*: LE4's LOX vent manifold read as full of LOX, and its transducer read the outlet. Drawn on the top port, it is on the ullage.
Definition at line 664 of file test_pid_drawn_freely.py.
References _le4_with_top_manifold(), _tank_end(), and built().
| None test_pid_drawn_freely.test_a_motorized_main_valve_has_the_same_job_as_a_rotary_one | ( | ) |
A motor where the rotary has a pneumatic actuator changes nothing about what the valve does on the stand.
Definition at line 528 of file test_pid_drawn_freely.py.
References _le4_like(), and built().
| None test_pid_drawn_freely.test_a_name_that_matches_still_wins_over_a_role | ( | ) |
Definition at line 566 of file test_pid_drawn_freely.py.
References _le4_like(), _machine(), and built().
| None test_pid_drawn_freely.test_a_part_the_library_refuses_is_named_and_fails_the_assembly | ( | ) |
A solenoid with ``Cd = 20`` reached the API as an unhandled SpecError, a bare 500, and the message said "valve" rather than which one.
Definition at line 266 of file test_pid_drawn_freely.py.
References line(), P(), and press_leg().
| None test_pid_drawn_freely.test_a_press_line_drawn_from_the_tank_lands_on_the_valves_other_side | ( | ) |
Both lines drawn *into* the solenoid, on its two ports. The tank's line is on ``r``, so it is the outlet; nothing is vented, and the pressurant reaches the tank's ullage.
Definition at line 106 of file test_pid_drawn_freely.py.
References built(), line(), and press_leg().
| None test_pid_drawn_freely.test_a_relief_valve_with_no_set_pressure_is_shut_not_a_hole | ( | ) |
A relief valve is shut until its set pressure; with none it never lifts. It used to be built as an always-open Cv valve -- a hole to atmosphere on the tank it guards, so the stand could never hold press.
Definition at line 399 of file test_pid_drawn_freely.py.
References built(), line(), and press_leg().
| None test_pid_drawn_freely.test_a_role_two_valves_share_binds_neither | ( | ) |
Two fuel press valves in parallel: which one "Fuel Press" means is not settled by the plumbing, so neither is guessed.
Definition at line 576 of file test_pid_drawn_freely.py.
References _machine().
| None test_pid_drawn_freely.test_a_segment_with_a_zero_bore_is_reported | ( | ) |
A stated 0 mm passed the reader where a missing bore was reported, and the run then contributed no loss at all (LE4's fuel tank-to-main run).
Definition at line 806 of file test_pid_drawn_freely.py.
References _le4_like(), built(), and P().
| None test_pid_drawn_freely.test_a_stretch_with_no_bore_on_a_bored_run_is_sized_at_the_run_and_said | ( | ) |
A run split before its diameter was given, one stretch bored and one not. The solver sizes the bare stretch at the run's narrowest stated bore (`SegmentedPipe`), so it is priced -- and the reader used to say it "contributes nothing", which the run report then repeated.
Definition at line 845 of file test_pid_drawn_freely.py.
References P().
| None test_pid_drawn_freely.test_a_tank_full_of_gas_is_told_to_be_a_pressurant_bottle | ( | ) |
pid-designer offers ``copv`` as a tank *wall material*; the vessel that supplies the press lines is its Pressurant bottle (KBOTTLE). A COPV drawn as a TANK is read as a propellant tank, and nothing presses anything.
Definition at line 283 of file test_pid_drawn_freely.py.
References built(), line(), P(), and press_leg().
| None test_pid_drawn_freely.test_a_tank_that_only_forgot_its_temperature_is_not_reread_and_says_why | ( | ) |
With no temperature the drawing has not ruled a liquid out, so nothing is re-read -- and the stand refuses to open with the tank named and the reason given, rather than CoolProp's "rhoV is invalid" as a bare 500.
Definition at line 352 of file test_pid_drawn_freely.py.
References _open(), and _stand_with_copv_tank().
| None test_pid_drawn_freely.test_a_turned_tanks_ports_say_nothing_about_up | ( | ) |
Definition at line 673 of file test_pid_drawn_freely.py.
References _le4_with_top_manifold(), _tank_end(), and built().
| None test_pid_drawn_freely.test_a_valve_with_lines_on_both_sides_is_read_exactly_as_before | ( | ) |
The gate. Drawn in flow order, the ports are not consulted even when they disagree with the direction -- a drawing that worked yesterday builds the same network today.
Definition at line 147 of file test_pid_drawn_freely.py.
References built(), line(), and press_leg().
| None test_pid_drawn_freely.test_each_commandable_valves_job_is_read_off_the_plumbing | ( | ) |
Definition at line 518 of file test_pid_drawn_freely.py.
References _le4_like(), and built().
| None test_pid_drawn_freely.test_ox_fill_vents_through_the_gse_disconnect | ( | ) |
The cockpit's own pad: Ox Fill with the LOX Vent bound to the disconnect holds the ullage near ambient instead of boiling it toward critical.
Definition at line 710 of file test_pid_drawn_freely.py.
References _le4_with_top_manifold(), and _machine().
| None test_pid_drawn_freely.test_reading_the_ports_says_so | ( | ) |
Definition at line 137 of file test_pid_drawn_freely.py.
References built(), line(), and press_leg().
| None test_pid_drawn_freely.test_the_engine_symbols_chamber_pressure_is_its_boundary | ( | ) |
pid-designer's engine dialog saves "Chamber pressure" as `chamber_pressure`; hand-written drawings say `pressure`. Both are read.
Definition at line 417 of file test_pid_drawn_freely.py.
References built(), line(), P(), and press_leg().
| None test_pid_drawn_freely.test_the_same_holds_when_both_lines_are_drawn_out_of_the_valve | ( | ) |
Definition at line 124 of file test_pid_drawn_freely.py.
References built(), line(), and press_leg().
| None test_pid_drawn_freely.test_two_fixed_pressures_joined_directly_stay_a_line | ( | ) |
A bottle drawn straight into a tank: two pressures cannot be one place.
Definition at line 796 of file test_pid_drawn_freely.py.
References _le4_like(), built(), and line().
| None test_pid_drawn_freely.test_two_tanks_on_one_direct_press_manifold_conserve_pressurant | ( | ) |
Press valves joined straight onto their tanks: the two ullages trade gas through the manifold, and what one sent and the other refused was handed to the bottle, whose draw cannot go negative -- so it vanished. LE4 lost 7 g/s this way and emptied its COPV before ignition.
Definition at line 906 of file test_pid_drawn_freely.py.
References _le4_like(), _machine(), _sizeless(), line(), and P().
| None test_pid_drawn_freely.test_valves_the_names_do_not_match_are_bound_by_what_they_do | ( | ) |
"FU_SOL_R" shares no word with "Fuel Press", so LE4 bound nothing and Fire opened nothing. Bound by role, every press and main is commanded.
Definition at line 540 of file test_pid_drawn_freely.py.
References _le4_like(), _machine(), and built().
| None test_pid_drawn_freely.test_without_ports_a_one_sided_valve_is_still_a_vent | ( | ) |
No port to read, so nothing to correct: the old reading stands.
Definition at line 233 of file test_pid_drawn_freely.py.
References built(), line(), and press_leg().
| float test_pid_drawn_freely.AMBIENT = 101325.0 |
Definition at line 27 of file test_pid_drawn_freely.py.