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

Functions

dict[str, object] P (float value, str unit, str source="measured")
dict[str, object] node (str nid, str ctype, str label, **object data)
dict[str, object] line (str eid, str a, str b, str from_port="", str to_port="")
Any press_leg (*dict[str, object] lines, dict[str, Any]|None sol=None)
 built (Any payload)
None test_a_press_line_drawn_from_the_tank_lands_on_the_valves_other_side ()
None test_the_same_holds_when_both_lines_are_drawn_out_of_the_valve ()
None test_reading_the_ports_says_so ()
None test_a_valve_with_lines_on_both_sides_is_read_exactly_as_before ()
Any _through (str ctype, *dict[str, object] lines)
float _flow (Any payload)
None test_a_directed_valve_dragged_against_the_flow_reads_its_ports (str ctype)
None test_a_directed_valve_drawn_in_flow_order_is_read_as_before (str ctype)
None test_a_check_valve_drawn_backwards_checks_the_flow ()
None test_without_ports_a_one_sided_valve_is_still_a_vent ()
None test_a_fill_disconnect_left_capped_does_not_crash_the_solve ()
None test_a_part_the_library_refuses_is_named_and_fails_the_assembly ()
None test_a_tank_full_of_gas_is_told_to_be_a_pressurant_bottle ()
Any _stand_with_copv_tank (bool temperature)
 _open (Any payload)
None test_a_copv_drawn_as_a_tank_is_read_as_the_pressurant_supply ()
None test_a_bottle_with_no_volume_is_the_stands_copv_not_a_k_bottle ()
None test_a_tank_that_only_forgot_its_temperature_is_not_reread_and_says_why ()
( None) test_a_capped_fitting_behind_a_shut_valve_does_not_make_the_solve_singular ()
None test_a_relief_valve_with_no_set_pressure_is_shut_not_a_hole ()
None test_the_engine_symbols_chamber_pressure_is_its_boundary ()
Any _le4_like (str fuel_main_label="FM-R")
 _machine ()
None test_each_commandable_valves_job_is_read_off_the_plumbing ()
None test_a_motorized_main_valve_has_the_same_job_as_a_rotary_one ()
None test_valves_the_names_do_not_match_are_bound_by_what_they_do ()
None test_a_name_that_matches_still_wins_over_a_role ()
None test_a_role_two_valves_share_binds_neither ()
None test_a_dome_nothing_loads_is_the_operators_setting ()
Any _le4_with_top_manifold (*, bool vent_valve=False, int rotation=0)
str _tank_end (b, str edge_id, str tank)
None test_a_manifold_on_a_tanks_top_port_is_on_its_ullage ()
None test_a_turned_tanks_ports_say_nothing_about_up ()
None test_a_capped_disconnect_on_an_unvented_tank_top_is_its_gse_vent ()
None test_a_drawn_vent_valve_leaves_the_disconnect_capped ()
None test_ox_fill_vents_through_the_gse_disconnect ()
Any _sizeless (Any payload, *str edge_ids)
None test_a_line_with_no_size_is_a_direct_connection ()
None test_a_direct_line_into_the_engine_starts_the_injector_leg_at_the_valve ()
None test_a_line_with_half_a_size_takes_the_fallback_for_the_rest_and_says_so ()
None test_two_fixed_pressures_joined_directly_stay_a_line ()
None test_a_segment_with_a_zero_bore_is_reported ()
None test_a_line_bore_of_zero_is_said ()
None test_a_stretch_with_no_bore_on_a_bored_run_is_sized_at_the_run_and_said ()
None test_a_K_with_no_bore_to_refer_it_to_is_said ()
None test_two_tanks_on_one_direct_press_manifold_conserve_pressurant ()

Variables

float AMBIENT = 101325.0

Detailed Description

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.

Function Documentation

◆ _flow()

◆ _le4_like()

◆ _le4_with_top_manifold()

Any test_pid_drawn_freely._le4_with_top_manifold ( * ,
bool vent_valve = False,
int rotation = 0 )
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().

◆ _machine()

◆ _open()

◆ _sizeless()

◆ _stand_with_copv_tank()

◆ _tank_end()

str test_pid_drawn_freely._tank_end ( b,
str edge_id,
str tank )
protected

◆ _through()

Any test_pid_drawn_freely._through ( str ctype,
*dict[str, object] lines )
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().

◆ built()

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().

◆ line()

◆ node()

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.

◆ P()

◆ press_leg()

◆ test_a_bottle_with_no_volume_is_the_stands_copv_not_a_k_bottle()

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().

◆ test_a_capped_disconnect_on_an_unvented_tank_top_is_its_gse_vent()

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().

◆ test_a_capped_fitting_behind_a_shut_valve_does_not_make_the_solve_singular()

( 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().

◆ test_a_check_valve_drawn_backwards_checks_the_flow()

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().

◆ test_a_copv_drawn_as_a_tank_is_read_as_the_pressurant_supply()

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().

◆ test_a_direct_line_into_the_engine_starts_the_injector_leg_at_the_valve()

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().

◆ test_a_directed_valve_dragged_against_the_flow_reads_its_ports()

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().

◆ test_a_directed_valve_drawn_in_flow_order_is_read_as_before()

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().

◆ test_a_dome_nothing_loads_is_the_operators_setting()

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().

◆ test_a_drawn_vent_valve_leaves_the_disconnect_capped()

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().

◆ test_a_fill_disconnect_left_capped_does_not_crash_the_solve()

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().

◆ test_a_K_with_no_bore_to_refer_it_to_is_said()

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().

◆ test_a_line_bore_of_zero_is_said()

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().

◆ test_a_line_with_half_a_size_takes_the_fallback_for_the_rest_and_says_so()

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().

◆ test_a_line_with_no_size_is_a_direct_connection()

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().

◆ test_a_manifold_on_a_tanks_top_port_is_on_its_ullage()

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().

◆ test_a_motorized_main_valve_has_the_same_job_as_a_rotary_one()

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().

◆ test_a_name_that_matches_still_wins_over_a_role()

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().

◆ test_a_part_the_library_refuses_is_named_and_fails_the_assembly()

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().

◆ test_a_press_line_drawn_from_the_tank_lands_on_the_valves_other_side()

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().

◆ test_a_relief_valve_with_no_set_pressure_is_shut_not_a_hole()

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().

◆ test_a_role_two_valves_share_binds_neither()

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().

◆ test_a_segment_with_a_zero_bore_is_reported()

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().

◆ test_a_stretch_with_no_bore_on_a_bored_run_is_sized_at_the_run_and_said()

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().

◆ test_a_tank_full_of_gas_is_told_to_be_a_pressurant_bottle()

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().

◆ test_a_tank_that_only_forgot_its_temperature_is_not_reread_and_says_why()

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().

◆ test_a_turned_tanks_ports_say_nothing_about_up()

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().

◆ test_a_valve_with_lines_on_both_sides_is_read_exactly_as_before()

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().

◆ test_each_commandable_valves_job_is_read_off_the_plumbing()

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().

◆ test_ox_fill_vents_through_the_gse_disconnect()

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().

◆ test_reading_the_ports_says_so()

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().

◆ test_the_engine_symbols_chamber_pressure_is_its_boundary()

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().

◆ test_the_same_holds_when_both_lines_are_drawn_out_of_the_valve()

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().

◆ test_two_fixed_pressures_joined_directly_stay_a_line()

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().

◆ test_two_tanks_on_one_direct_press_manifold_conserve_pressurant()

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().

◆ test_valves_the_names_do_not_match_are_bound_by_what_they_do()

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().

◆ test_without_ports_a_one_sided_valve_is_still_a_vent()

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().

Variable Documentation

◆ AMBIENT

float test_pid_drawn_freely.AMBIENT = 101325.0

Definition at line 27 of file test_pid_drawn_freely.py.