|
| Any | _get (Any obj, str path) |
| Tuple[List[Factor], List[str]] | factors (Any prep, Any config) |
| Any | _perturbed_config (Any config, Dict[str, Any] engine) |
| Dict[str, Optional[float]] | _metrics (Dict[str, Any] summary) |
| Dict[str, Any] | _burn_case (Tuple[Any, Any, Any, List[Any], Dict[str, Any]] args) |
| str | _trip_words (Dict[str, Any] trip) |
| Dict[str, Any] | run_sweep (Any config, Any drawing, Any settings, List[Any] overrides, *, Optional[Callable[[str, float], None]] progress=None, Callable[[], bool] cancelled=lambda:False, Optional[int] workers=None) |
Phase 5: which unmeasured input moves the burn, and by how much.
A burn rests on inputs nobody has measured yet. Each is varied on its own, from the low end
of its plausible range to the high end, with everything else held at nominal. This is a
tornado. It answers two questions:
* how wide the answer is: the band on impulse, burn time, thrust and margins, as the
root-sum-square of the one-at-a-time swings;
* which measurement narrows it most: the factors ranked by how far they move the burn.
A one-at-a-time sweep assumes the effects are roughly independent and linear over their
ranges, which is what the RSS assumes too. It costs 2N burns rather than the hundreds a Monte
Carlo needs, and it says *which* input, which a Monte Carlo cloud does not.
The factors, and where their ranges come from
----------------------------------------------
Feed, from the drawing:
* **Dome regulator supply-pressure effect, ×0.5–1.5.** One GN2 back-fit plus the vendor's sheet.
* **Dome regulator droop, ×0.5–1.5.** Same basis.
* **Ullage collapse, off → on.** A model choice. The collapse model is a stated lower bound.
Engine, through EngineDesign's own measurement fields, so the engine card is rebuilt by
EngineDesign under each perturbation rather than scaled by a guessed sensitivity:
* **LOX and fuel orifice Cd, ±3 %.** The scatter of the Lichtarowicz correlation the plate is
sized with. Replace it with a cold-flow Cd.
* **Rupe mixing E_m_opt, 0.70 / 0.85.** The literature range the spray report uses
(engine/core/injectors/spray_report.py). On the 6.5 kN engine that range is 6242–6601 N.
* **Nozzle efficiency, ±0.02 about the config's value.** Assumed.
A factor that has been measured uses its stated uncertainty instead. A measured value with
no uncertainty is treated as exact and dropped from the sweep, which the result says.
Burns run without the erosion replay. The replay moves every case the same way, and the
question here is the difference between cases. They run in parallel worker processes, each
seeded with the nominal engine card, so only the engine perturbations pay for a new card.