Pinch Analysis — Multistream Composite Curves
Hot/cold composite temperature-enthalpy curves built from real thermo-package flash enthalpies (so latent heat is captured), giving the pinch temperature, minimum approach, and required UA — the feasibility core behind the LNG/cold-box multistream exchanger, consumed internally by that unit op rather than exposed as a standalone tool.
A multistream exchanger (a plate-fin cold box, a coil-wound LNG exchanger) moves heat among several hot and cold streams at once, and whether that's even thermodynamically possible isn't an LMTD question — it's answered by composite curves: stack every hot stream into one hot temperature-vs-enthalpy curve, every cold stream into one cold curve, and check the hot composite clears the cold composite by at least the minimum approach ΔTmin everywhere. Where the gap is smallest is the pinch; if the curves cross, no exchanger — however large — closes the gap.
This isn't a standalone tool with its own menu — there's no general-purpose "run pinch analysis across my whole flowsheet" panel or auto-HEN-synthesis feature today. It's the internal feasibility engine behind the LNG exchanger (cold box) unit op: every enthalpy point comes from a real ThermoPkg.flash_tp call, so a condensing/vaporizing leg's latent heat shows up in the composite exactly where it should — the effect that dominates LNG duty and that a constant-Cp shortcut would miss entirely.
Show the governing equations
Where it actually lives today
Drop an "LNG exchanger (cold box)" node from the Units palette, wire its streams, and run the solve — dt_min, pinch_temperature, and any infeasibility warning come back in that unit op's own solved result, not a separate pinch panel.
For a bespoke composite-curve study outside a flowsheet solve, call the pure function directly (there's no REST endpoint for it yet — it's solver-internal, so this needs a local Python environment with the package installed, not the browser/REST SDK):
from flowsim.analysis.pinch import StreamLeg, composite_curves
legs = [
StreamLeg(composition={"methane": 1.0}, flow=50.0, pressure=4.5e6, t_in=300.0, t_out=115.0), # hot
StreamLeg(composition={"nitrogen": 1.0}, flow=60.0, pressure=1.5e5, t_in=100.0, t_out=290.0), # cold
]
curves = composite_curves(thermo, legs, min_approach=3.0)
print(curves.pinch_temperature, curves.dt_min, curves.feasible, curves.ua)