|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Variables | |
| FINAL | |
| float | IGNITER_BOSS_M = 0.0280 |
| SHIP | |
| float | EQUAL_AREA = 1.0 / math.sqrt(2.0) |
The injector face has finite real estate, and the optimizer must respect it.
Until these constraints existed, WHERE the doublet ring pair sat radially was an exactly
flat direction in the Layer-1 objective: ``_layer1_derive_fuel_spacing`` solves the fuel
pitch so the standoff hits its target, and it does so by fixing the ring GAP, so ``dr`` is
independent of ``s_O`` and the pair slides radially at zero cost. ``s_O`` fell onto its own
lower bound (0.003 m).
Measured on configs/ethalox_8kN_FINAL.yaml before the fix:
D_pitch_O 26.90 mm (28 holes at a 3.018 mm pitch -- a 1.44 mm web)
D_pitch_F 88.01 mm
impingement 41.79 mm circle, inside a 127.00 mm bore and NARROWER THAN THE
49.57 mm THROAT -- 10.8 % of the chamber area was fed directly
centre 24.83 mm clear, against 27.15 mm needed for a 3/8-18 NPT igniter boss
None of that violated a single constraint, because none of those constraints existed.
|
protected |
Definition at line 42 of file test_injector_face_real_estate.py.
Referenced by test_shipped_design_has_no_room_for_the_igniter().
|
protected |
Definition at line 289 of file test_injector_face_real_estate.py.
References min.
Referenced by test_face_terms_compete_rather_than_cancel(), test_spray_radius_band_has_width(), test_spray_radius_is_free_inside_the_band(), and test_the_shipped_bug_is_a_third_of_the_way_out().
| test_injector_face_real_estate.test_both_optimizer_paths_enforce_the_same_face_limits | ( | ) |
A limit only one path applies is not a limit. The serial loop's _impinging_hard_geometry_blocks_eval never ran in the parallel CMA workers, where essentially every candidate is scored. Two of three seeds converged outside their own declared spray-radius band and reported ALL GATES PASS.
Definition at line 361 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_breakeven_is_where_the_fan_arrives_at_the_throat_plane | ( | ) |
Definition at line 239 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_centre_clearance_hard_blocks_the_shipped_design | ( | ) |
Definition at line 74 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_centre_clearance_is_free_once_the_ring_moves_out | ( | ) |
Same design, LOX ring opened to a 60 mm pitch circle: the term must go to zero.
Definition at line 63 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_centre_clearance_penalises_the_shipped_design | ( | ) |
Definition at line 57 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_derived_allowance_tracks_the_impingement_radius | ( | ) |
A ring pair further out has less room, so it must be allowed less tilt.
Definition at line 247 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_derived_mode_is_opt_in_and_falls_back_safely | ( | ) |
CLAUDE.md: defaults to the previous behaviour, exactly.
Definition at line 272 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_face_incidence_blocks_a_jet_the_drill_cannot_start | ( | ) |
theta is from the AXIS, so the drill meets the face at (90 - theta). The shipped FINAL put the fuel jet at 69 deg -- 21 deg of incidence. A twist drill entering a flat that shallow walks off the spot.
Definition at line 191 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_face_incidence_passes_the_replacement_design | ( | ) |
40 / 49 deg -> 50 / 41 deg of incidence, both above a 40 deg floor.
Definition at line 212 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_face_infeasibility_is_graded_not_binary | ( | ) |
A binary block puts the whole violating region on one flat 1e6 plateau. Measured: with `infeasibility_score += 1.0`, 2 of 3 seeds never found the feasible set at all (converged O/F 2.09 and 25.6 against a 1.65 target). The term must carry a gradient pointing back toward the band.
Definition at line 382 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_face_infeasibility_zero_for_the_shipped_design | ( | ) |
Definition at line 451 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_face_terms_compete_rather_than_cancel | ( | ) |
Pushing the rings out to hit the spray target must not smuggle them past the wall. At a fixed ring GAP, sliding the pair out far enough to reach the equal-area radius puts the fuel ring at 136 mm on a 127 mm bore. The spray term is then satisfied and the wall term is not, and the total must rise -- the sum is a constraint set, not a score to game.
Definition at line 415 of file test_injector_face_real_estate.py.
References _r_imp().
| test_injector_face_real_estate.test_margin_means_chamber_lengths | ( | ) |
margin = 1.5 => the fan reaches the liner at 1.5 chamber lengths, not 1.0.
Definition at line 262 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_radial_extent_uses_the_ellipse_not_the_drill_diameter | ( | ) |
A hole inclined theta from the axis prints as an ellipse of major axis d/cos(theta). At 69 deg that is 2.79x the drill diameter. Using d would under-state the radial reach of every orifice, which is exactly the number the clearance terms are made of.
Definition at line 91 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_shipped_design_has_no_room_for_the_igniter | ( | ) |
Documents the defect: the FINAL face cannot take a 3/8 NPT boss.
Definition at line 50 of file test_injector_face_real_estate.py.
References _dp().
| test_injector_face_real_estate.test_spray_radius_band_has_width | ( | ) |
Just outside the band costs; just inside does not.
Definition at line 330 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_spray_radius_is_free_inside_the_band | ( | ) |
A ring pair at the equal-area radius must pay exactly nothing.
Definition at line 315 of file test_injector_face_real_estate.py.
References _r_imp().
| test_injector_face_real_estate.test_spray_radius_is_hard_not_merely_priced | ( | ) |
The soft term cost 1.5 points against an objective of ~2690, so every seed bought a spray circle outside its own declared band. Hard, like ring fit.
Definition at line 341 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_spray_radius_penalises_a_core_jet | ( | ) |
0.33 of the radius is 10.8 % of the area -- it must cost something against 0.707.
Definition at line 308 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_spray_radius_term_is_inert_unless_asked | ( | ) |
Definition at line 303 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_the_shipped_bug_is_a_third_of_the_way_out | ( | ) |
FINAL put every element on a circle at 0.33 of the bore radius.
Definition at line 298 of file test_injector_face_real_estate.py.
References _r_imp().
| test_injector_face_real_estate.test_unset_keys_change_nothing | ( | ) |
CLAUDE.md: new physics is opt-in and defaults to the previous behaviour, exactly.
Definition at line 171 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_wall_clearance_costs_a_ring_crowding_the_bore | ( | ) |
Definition at line 157 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_web_floor_catches_a_land_thinner_than_asked | ( | ) |
spacing >= d_jet alone permits a web of exactly zero.
Definition at line 130 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.test_web_floor_hard_blocks | ( | ) |
Definition at line 140 of file test_injector_face_real_estate.py.
| float test_injector_face_real_estate.EQUAL_AREA = 1.0 / math.sqrt(2.0) |
Definition at line 286 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.FINAL |
Definition at line 29 of file test_injector_face_real_estate.py.
| float test_injector_face_real_estate.IGNITER_BOSS_M = 0.0280 |
Definition at line 39 of file test_injector_face_real_estate.py.
| test_injector_face_real_estate.SHIP |
Definition at line 234 of file test_injector_face_real_estate.py.