The injector as a network branch, and the engine as a network boundary.
Two objects, and the split matters.
An **injector leg** is an ordinary hydraulic component: an orifice of known area
and discharge coefficient, one per propellant, sitting at the downstream end of
each feed line. Nothing about it is special except that its area came out of a
Layer-1 optimisation rather than off a drawing.
The **engine** is not a component at all. It is a boundary condition, and a
circular one: chamber pressure depends on the flows, and the flows depend on
chamber pressure through the injector's pressure difference. The session closes
that loop each coupling step (``Session._close_chamber``), root-finding the
chamber pressure the network and the engine agree on -- the same coupled
injector-to-chamber solve EngineDesign performs, done here around a whole feed
system instead of around two pressures.
Why the loop is worth having
----------------------------
It is the reason a pressure-fed engine is stable in the large. Raise tank
pressure and flow rises, so chamber pressure rises, so the injector's pressure
difference rises by *less* than the tank did -- the engine absorbs part of every
upstream change. That is also why injector stiffness is a design rule rather
than a preference: as the injector's share of the total pressure drop falls, the
loop gain rises, and below roughly 20% the engine starts responding to its own
chamber more than to its tanks.