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

Functions

 _dp (n, s)
 test_shipped_design_has_no_room_for_the_igniter ()
 test_centre_clearance_penalises_the_shipped_design ()
 test_centre_clearance_is_free_once_the_ring_moves_out ()
 test_centre_clearance_hard_blocks_the_shipped_design ()
 test_radial_extent_uses_the_ellipse_not_the_drill_diameter ()
 test_web_floor_catches_a_land_thinner_than_asked ()
 test_web_floor_hard_blocks ()
 test_wall_clearance_costs_a_ring_crowding_the_bore ()
 test_unset_keys_change_nothing ()
 test_face_incidence_blocks_a_jet_the_drill_cannot_start ()
 test_face_incidence_passes_the_replacement_design ()
 test_breakeven_is_where_the_fan_arrives_at_the_throat_plane ()
 test_derived_allowance_tracks_the_impingement_radius ()
 test_margin_means_chamber_lengths ()
 test_derived_mode_is_opt_in_and_falls_back_safely ()
 _r_imp (kw)
 test_the_shipped_bug_is_a_third_of_the_way_out ()
 test_spray_radius_term_is_inert_unless_asked ()
 test_spray_radius_penalises_a_core_jet ()
 test_spray_radius_is_free_inside_the_band ()
 test_spray_radius_band_has_width ()
 test_spray_radius_is_hard_not_merely_priced ()
 test_both_optimizer_paths_enforce_the_same_face_limits ()
 test_face_infeasibility_is_graded_not_binary ()
 test_face_terms_compete_rather_than_cancel ()
 test_face_infeasibility_zero_for_the_shipped_design ()

Variables

 FINAL
float IGNITER_BOSS_M = 0.0280
 SHIP
float EQUAL_AREA = 1.0 / math.sqrt(2.0)

Detailed Description

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.

Function Documentation

◆ _dp()

test_injector_face_real_estate._dp ( n,
s )
protected

◆ _r_imp()

◆ test_both_optimizer_paths_enforce_the_same_face_limits()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

References _r_imp(), and at().

◆ test_spray_radius_is_free_inside_the_band()

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

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

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

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

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

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

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

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

test_injector_face_real_estate.test_web_floor_hard_blocks ( )

Definition at line 140 of file test_injector_face_real_estate.py.

Variable Documentation

◆ EQUAL_AREA

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.

◆ FINAL

test_injector_face_real_estate.FINAL
Initial value:
1= dict(
2 n_elements=28.0,
3 spacing_O_m=0.0030182972100858507,
4 spacing_F_m=0.009875029755263455,
5 d_jet_O_m=0.0015821116699998301,
6 d_jet_F_m=0.001375132476863662,
7 D_chamber_inner_m=0.127,
8 angle_O_deg=40.0,
9 angle_F_deg=69.0,
10)

Definition at line 29 of file test_injector_face_real_estate.py.

◆ IGNITER_BOSS_M

float test_injector_face_real_estate.IGNITER_BOSS_M = 0.0280

Definition at line 39 of file test_injector_face_real_estate.py.

◆ SHIP

test_injector_face_real_estate.SHIP
Initial value:
1= dict(n_elements=27.0, spacing_O_m=0.0090639037305711,
2 spacing_F_m=0.0119080988215582, angle_O_deg=40.0, angle_F_deg=49.0,
3 D_chamber_inner_m=0.127, L_chamber_m=0.15340)

Definition at line 234 of file test_injector_face_real_estate.py.