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, and plant-wide as Energy Analysis ▸ Pinch Targets and the heat-exchanger-network design.
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.
It works at two scales. Inside 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. Across the whole flowsheet, Energy Analysis ▸ Pinch Targets takes every heater, cooler, reboiler and condenser and reports how much heating and cooling the process could save by recovering heat, and Energy Analysis ▸ Heat Exchanger Network designs the exchangers that reach those targets.
Show the governing equations
Where it actually lives today
A cold box: drop an LNG exchanger (cold box) from the Model Palette, wire its streams and run — the pinch, the duty and the UA come back on the block's own Results sheet, and a temperature cross is reported as a warning.
The whole flowsheet: after a run, open Energy Analysis ▸ Pinch Targets (also offered as the copilot's Energy targets chip). It shows heating and cooling now against the minimum, the heat that can be recovered, the pinch, and the composite and grand composite curves — and says so when the process is a threshold problem with no pinch to design around. From Python, the same numbers:
# In the simulation's notebook — Simulator is pre-loaded and bound to it.
Simulator.pinch_table(dt_min=10) # now vs minimum heating/cooling, the saving, the pinch, the case
curves = Simulator.composite_curves(dt_min=10) # {"hot", "cold", "grand"} as DataFrames
ax = curves["hot"].plot(x="heat_w", y="temperature_k", label="hot composite")
curves["cold"].plot(x="heat_w", y="temperature_k", label="cold composite", ax=ax)
Simulator.hen_table(dt_min=10) # the exchanger network the pinch design method builds
# A cold box reports its own pinch on the Blocks sheet:
Simulator.block_table().loc["MCHE", ["duty", "pinch_k", "ua_total"]]