62 payload = copy.deepcopy(json.loads(DRAWING.read_text()))
63 if mawp_psig
is not None:
64 fuel = next(n
for n
in payload[
"nodes"]
if n[
"id"] ==
"FUT")
65 fuel[
"data"][
"params"][
"MAWP"] = {
68 "source":
"estimated",
69 "reference":
"test: restated so the regulator's climb trips it",
71 diagram = read_diagram(payload, name=
"copv_study_he_trip")
72 design = engine_from_config(yaml.safe_load(ENGINE.read_text()), name=
"7000N")
73 model = assemble_model(
74 diagram, diagram_id=
"copv_study_he_trip", engine=design, cea_cache=str(CEA)
76 return open_session(model, load_machine(tables=TABLES), setup=burn_setup())
81 trace = run_burn(session, PLAN)
83 assert end
is not None and end.tripped
is not None
85 assert trip.vessel ==
"FUT" and trip.kind ==
"tank"
86 limit = from_psig(MAWP_PSIG)
87 assert trip.limit == pytest.approx(limit, rel=1e-12)
88 assert trip.pressure > limit
90 assert trip.pressure - limit < 0.5 * PSI
92 assert 0.0 < trip.t < 1.5
94 assert trace.t[-1] == pytest.approx(trip.t, abs=PLAN.dt + 1e-9)
95 assert trace.t[-1] < PLAN.horizon_s - 0.4
96 assert len(trace.t) == end.steps
97 assert end.depleted_s
is None and end.tank ==
""
99 assert trace.tank[
"FUT"][
"pressure_Pa"][-1] == pytest.approx(trip.pressure)
100 assert all(p <= limit
for p
in trace.tank[
"FUT"][
"pressure_Pa"][:-1])
102 record = trip_record(trace)
103 assert record
is not None
104 assert record[
"vessel"] ==
"FUT"
105 assert record[
"t"] == trip.t
106 assert record[
"mawp_psia"] == pytest.approx((MAWP_PSIG * PSI + ATMOSPHERE) / PSI)
107 assert record[
"p_psia"] > record[
"mawp_psia"]
108 assert "MAWP" in record[
"message"]
111 assert say(trip.pressure, 1)
in record[
"message"], record[
"message"]
112 assert say(trip.limit, 1)
in record[
"message"], record[
"message"]
113 assert "psig" not in record[
"message"]
115 assert any(note.startswith(
"Burn stopped at t = ")
for note
in trace.notes)