Zonal and Total Site Workflows
Purpose
Use zonal workflows when a study needs more than one process boundary. Zones let OpenPinch solve local direct targets and then aggregate solved subzones into Total Process or Total Site utility-system views.
Prerequisites
You should understand the first-solve workflow and the difference between direct and indirect integration. See First Solve with Python and Direct vs Indirect Integration.
Sample Case
Use zonal_site.json for a compact multizone example or pulp_mill.json
for a richer Total Site and cogeneration context.
Runnable Workflow
from OpenPinch import PinchWorkspace
workspace = PinchWorkspace(source="pulp_mill.json", project_name="Site")
case = workspace.case("baseline")
direct = case.target.direct_heat_integration()
total_site = case.target.indirect_heat_integration()
summary = case.summary_frame()
print(summary[["Target", "Zone", "Hot Utility Target", "Cold Utility Target"]])
Expected Output
The summary contains target rows for different scopes and target families. Direct rows describe local recovery inside a zone. Indirect or Total Site rows describe utility-mediated recovery across solved subzones.
Interpretation
Compare zonal results by scope before comparing numbers:
Check the target family: Direct Integration, Total Process, or Total Site.
Check the zone name and hierarchy level.
Compare hot and cold utility targets first.
Use Grand Composite Curves, Total Site profiles, and SUGCC views to explain why the utility targets changed.
For multiperiod inputs, pass period_id=... to the targeting accessor:
winter_site = case.target.indirect_heat_integration(period_id="winter")
Next Steps
Zones, Streams, Utilities, and Targets for the model.
Graphing and Interpretation for graph reading order.
Notebooks and Sample Cases for notebook 02 and zonal sample cases.