|
| str | _normal (object name) |
| str | _side_from_drawing (object symbol) |
| str | _chamber_node ("Session" session) |
| set[str] | _walk (str start, Mapping[str, list[tuple[str, str, bool]]] adjacency, Any passable) |
| list[tuple[str, bool]]|None | _shortest (Iterable[str] starts, str goal, Mapping[str, list[tuple[str, str, bool]]] adjacency, Any passable) |
| str | _branch_kind (str symbol_type, object component) |
| tuple[str,...] | _state_keys (object component) |
| float | _opening (Mapping[str, float] signals, tuple[str,...] keys) |
| str | _node_label (str node_id, Mapping[str, Any] symbols, Mapping[str, str] ullages, Mapping[str, str] outlets, str chamber, Mapping[str, str] inlets) |
| str | _node_kind (str node_id, Mapping[str, Any] symbols, set[str] bottles, Mapping[str, str] ullages, Mapping[str, str] outlets, str chamber, Mapping[str, str] inlets, set[str] fixed) |
Every node and branch of a burn, every step: the opt-in network recorder.
A burn's ordinary trace (:class:`~feedtwin.session.burn.BurnTrace`) keeps its
probes -- the tank ullages and outlets, the regulator outlets, the injector
face, the chamber. That is what a summary needs and what the COPV study always
read. A pressure *ladder* -- bottle to chamber, element by element -- needs all
of it: every node's pressure and temperature, every branch's flow, its own drop
and (valves) how far open it is, and the two paths a propellant's pressure
travels. :class:`NetworkTrace` records that when
:attr:`~feedtwin.session.burn.Probes.network` asks for it. It reads the
:class:`~feedtwin.session.core.Sample` a step already produced and changes no
physics; off (the default) the trace is exactly what it always was.
Node values, not vessel states
------------------------------
Everything here is read off the sample: the pressures of the step's last network
solve. A vessel node in there (the bottle, a tank ullage, a tank outlet) is the
*boundary value that solve started from*, not the vessel's state after the step
-- on the LE4 helium burn the bottle node read 1651.4 psia against the bottle
state's 1645.6 at burnout (``EngineDesign/docs/layerx/AUDIT.md`` 5.5). The
ladder is built from node values only, so its rungs telescope exactly to the
first node minus the last of one solve. Mixing in the post-step vessel states
(``BurnTrace.tank``, ``BurnTrace.bottle``) would put a step's worth of blowdown
into one rung.
What a rung's ``dp`` is
-----------------------
``p(from) - p(to)`` of the same solve: the element's own drop, positive
downstream. Liquid nodes carry the lumped-K convention's pressures (total, not
wall-static; see AUDIT.md 9.6 B4). A tank's liquid column is its own element,
``<tank>.head``, from the ullage node to the outlet node: its ``dp`` is negative,
a gain. A branch a path runs against its drawn direction is reported along the
path (``from``/``to`` swapped, ``mdot`` and ``dp`` negated) so that "positive
downstream" means downstream in the feed.