23 ap = argparse.ArgumentParser(description=__doc__)
24 ap.add_argument(
"--config", type=str, default=str(ROOT /
"configs/impinging_lox_ch4_8000N.yaml"))
25 ap.add_argument(
"--layer1-max-iterations", type=int, default=22)
26 args = ap.parse_args()
28 cfg_path = Path(args.config)
29 weights = [300.0, 1000.0, 3000.0]
30 base_cfg = load_config(str(cfg_path))
32 print(
"\n=== Layer-1 W_MOM comparison (same smoke budget per trial) ===")
35 cfg = copy.deepcopy(base_cfg)
36 req = cfg.design_requirements.model_dump()
37 req[
"W_MOM"] = float(w_mom)
39 "mode":
"optimizer_controlled",
40 "max_lox_pressure_psi": float(req[
"max_lox_tank_pressure_psi"]),
41 "max_fuel_pressure_psi": float(req[
"max_fuel_tank_pressure_psi"]),
44 _, results = run_layer1_optimization(
48 target_burn_time=float(req.get(
"target_burn_time", 6.0)),
49 tolerances={
"thrust": 0.10,
"apogee": 0.15},
52 layer1_max_iterations=int(args.layer1_max_iterations),
53 layer1_cma_restarts=1,
55 perf = results.get(
"performance")
or {}
57 f
"W_MOM={w_mom:g}\tR={perf.get('momentum_ratio_R')}\tMR={perf.get('MR')}\t"
58 f
"F={perf.get('F')}\tdP_O/Pc={perf.get('injector_dp_ratio_O')}\t"
59 f
"dP_F/Pc={perf.get('injector_dp_ratio_F')}\t"
60 f
"AoAf={perf.get('geom_ao_af')}\texp_R1={perf.get('expected_ao_af_for_R1')}"