Skip to content

Complex Network with Pumps, Vessels & Equipment

Problem

Build and validate a network with multiple branches, fittings, pumps, vessels, and equipment.
This example demonstrates network creation, validation, and visualization of a process pipeline system.

Code

from processpi.pipelines.network import PipelineNetwork
from processpi.pipelines.pipes import Pipe
from processpi.pipelines.pumps import Pump
from processpi.pipelines.vessel import Vessel
from processpi.pipelines.equipment import Equipment
from processpi.units import Diameter, Length

# Create main network
net = PipelineNetwork("MainPlantLoop")

# Define nodes
for node in ["A","B","C","D","E","F","G","H"]:
    net.add_node(node)

# Define elements (nominal sizes as DN in millimetres: DN 100 is NPS 4)
pipe1 = Pipe("Pipe1", nominal_diameter=Diameter(100, "mm"), length=Length(10, "m"))
pipe2 = Pipe("Pipe2", nominal_diameter=Diameter(150, "mm"), length=Length(15, "m"))
pump1 = Pump("Pump1", pump_type="Centrifugal", head=20)
vessel1 = Vessel("Separator1")
equipment1 = Equipment("HeatExchanger", pressure_drop=0.5)

# Connect series and branches
net.add_edge(pipe1, "A", "B")
net.add_edge(pipe2, "B", "C")
net.add_edge(pump1, "C", "D")
net.add_edge(Pipe("PipeBranch1", nominal_diameter=Diameter(80, "mm"), length=Length(5, "m")), "D", "E")
net.add_edge(Pipe("PipeBranch2", nominal_diameter=Diameter(125, "mm"), length=Length(8, "m")), "D", "F")
net.add_edge(Pipe("PipeEG", nominal_diameter=Diameter(100, "mm"), length=Length(12, "m")), "E", "G")
net.add_edge(Pipe("PipeFH", nominal_diameter=Diameter(100, "mm"), length=Length(12, "m")), "F", "H")

# Validation, description, schematic
net.validate()
print(net.describe())
print(net.schematic())
net.visualize_network(compact=True)

Output

Network: MainPlantLoop (connection: series)
  Nodes:
    Node(name='A', elevation=0.0 m)
    Node(name='B', elevation=0.0 m)
    Node(name='C', elevation=0.0 m)
    Node(name='D', elevation=0.0 m)
    Node(name='E', elevation=0.0 m)
    Node(name='F', elevation=0.0 m)
    Node(name='G', elevation=0.0 m)
    Node(name='H', elevation=0.0 m)
  Elements:
    Pipe: nominal 4 in, ID 102.26 mm, L=10 m, from A → B
    Pipe: nominal 6 in, ID 154.08 mm, L=15 m, from B → C
    Pump: Centrifugal, from C → D
    Pipe: nominal 3 in, ID 77.92 mm, L=5 m, from D → E
    Pipe: nominal 5 in, ID 128.20 mm, L=8 m, from D → F
    Pipe: nominal 4 in, ID 102.26 mm, L=12 m, from E → G
    Pipe: nominal 4 in, ID 102.26 mm, L=12 m, from F → H

MainPlantLoop [series]
  │ └─1. Pipe1
  │ └─2. Pipe2
  │ └─3. Pump1
  │ └─4. PipeBranch1
  │ └─5. PipeBranch2
  │ └─6. PipeEG
    └─7. PipeFH