Pipe - Nouman090/ThermoSim GitHub Wiki

A pipe models pressure drop and/or temperature drop (heat loss) between two state points. It is a passive component with no work or phase change.

Physics

P_out = P_in - ΔP
T_out = T_in - ΔT
Ex_D = Ex_in - Ex_out

The pipe can solve in forward or reverse mode depending on which side is known.

Syntax

Pipe(Model, ID, In_state, Out_state,
     Pressure_drop=0, Temperature_drop=0, Calculate=False)
Parameter Type Default Description
Model ThermodynamicModel The model object
ID str Unique component name
In_state str Inlet state point name
Out_state str Outlet state point name
Pressure_drop float 0 Pressure drop [Pa] (ΔP = P_in - P_out)
Temperature_drop float 0 Temperature drop [K] (ΔT = T_in - T_out)
Calculate bool False Solve immediately if True

Output Attributes

Attribute Type Unit Description
.Pressure_drop float Pa Pressure drop
.Temperature_drop float K Temperature drop
.Ex_D float/str W Exergy destruction
.Solution_Status bool True if solved
.In Prop Inlet state point object
.Out Prop Outlet state point object

Cases

Case 1: Known Inlet, Unknown Outlet (Forward)

Most common. Inlet fully defined; outlet calculated with specified drops.

from Thermosim import ThermodynamicModel, Pipe

Model = ThermodynamicModel()
Model.set_dead_state()

# Inlet
Model.add_point('water', 'In', P=10e5, T=373.15, Mass_flowrate=1.0)

# Outlet (unknown)
Model.add_point('water', 'Out', P=None, T=None)

Pipe(Model, 'Pipe1', In_state='In', Out_state='Out',
     Pressure_drop=0.5e5, Temperature_drop=5, Calculate=True)

print(f"Outlet P: {Model.Point['Out'].P/1e5:.2f} bar")
print(f"Outlet T: {Model.Point['Out'].T - 273.15:.2f} °C")

Case 2: Known Outlet, Unknown Inlet (Reverse)

Outlet fully defined; inlet calculated by adding back the drops.

Model = ThermodynamicModel()
Model.set_dead_state()

# Inlet (unknown)
Model.add_point('water', 'In', P=None, T=None, Mass_flowrate=1.0)

# Outlet
Model.add_point('water', 'Out', P=9e5, T=363.15)

Pipe(Model, 'Pipe1', In_state='In', Out_state='Out',
     Pressure_drop=1e5, Temperature_drop=10, Calculate=True)

print(f"Inlet P: {Model.Point['In'].P/1e5:.2f} bar")
print(f"Inlet T: {Model.Point['In'].T - 273.15:.2f} °C")

Case 3: Both Known (Calculate Actual Drops)

Both inlet and outlet known; pipe calculates the actual drops.

Model = ThermodynamicModel()
Model.set_dead_state()

Model.add_point('water', 'In',  P=10e5, T=373.15, Mass_flowrate=1.0)
Model.add_point('water', 'Out', P=9.5e5, T=368.15)

Pipe(Model, 'Pipe1', In_state='In', Out_state='Out', Calculate=True)

print(f"Measured ΔP: {Model.Component['Pipe1'].Pressure_drop/1e5:.2f} bar")
print(f"Measured ΔT: {Model.Component['Pipe1'].Temperature_drop:.2f} K")

Case 4: Pressure Drop Only (Adiabatic Pipe)

No heat loss; only pressure drop due to friction.

Model = ThermodynamicModel()
Model.set_dead_state()

Model.add_point('water', 'In',  P=10e5, T=373.15, Mass_flowrate=1.0)
Model.add_point('water', 'Out', P=None, T=None)

Pipe(Model, 'AdiabaticPipe', In_state='In', Out_state='Out',
     Pressure_drop=2e5, Temperature_drop=0, Calculate=True)

print(f"Outlet P: {Model.Point['Out'].P/1e5:.2f} bar")
print(f"Outlet T: {Model.Point['Out'].T - 273.15:.2f} °C (same as inlet)")

Case 5: Temperature Drop Only (Isobaric Heat Loss)

Heat loss but no pressure drop.

Model = ThermodynamicModel()
Model.set_dead_state()

Model.add_point('water', 'In',  P=10e5, T=373.15, Mass_flowrate=1.0)
Model.add_point('water', 'Out', P=None, T=None)

Pipe(Model, 'IsobaricPipe', In_state='In', Out_state='Out',
     Pressure_drop=0, Temperature_drop=8, Calculate=True)

print(f"Outlet P: {Model.Point['Out'].P/1e5:.2f} bar (same as inlet)")
print(f"Outlet T: {Model.Point['Out'].T - 273.15:.2f} °C")

Case 6: Long Insulated Pipeline

Model heat loss over a long distance.

Model = ThermodynamicModel()
Model.set_dead_state()

Model.add_point('water', 'Pipeline_in',  P=50e5, T=473.15, Mass_flowrate=10)
Model.add_point('water', 'Pipeline_out', P=None, T=None)

Pipe(Model, 'LongPipe', In_state='Pipeline_in', Out_state='Pipeline_out',
     Pressure_drop=5e5, Temperature_drop=15, Calculate=True)

print(f"After 1 km pipe:")
print(f"  P: {Model.Point['Pipeline_out'].P/1e5:.2f} bar")
print(f"  T: {Model.Point['Pipeline_out'].T - 273.15:.2f} °C")

Print Component Data

print(Model.Component['Pipe1'])

Output:

Pipe1 (Pipe):
  ΔP  : 0.50 bar
  ΔT  : 5.00 K
  Ex_D: XXXX.XX
  Solved: True

Complete Example

from Thermosim import ThermodynamicModel, Pipe

# Create model
Model = ThermodynamicModel()
Model.set_dead_state()

# Define inlet
Model.add_point('water', 'BoilerOut', P=100e5, T=773.15, Mass_flowrate=5.0)

# Define outlet (unknown)
Model.add_point('water', 'TurbineIn', P=None, T=None)

# Add pipe with pressure and temperature drops
Pipe(Model, 'SteamLine', In_state='BoilerOut', Out_state='TurbineIn',
     Pressure_drop=2e5, Temperature_drop=10, Calculate=True)

# Access results
pipe = Model.Component['SteamLine']
print(f"Pressure drop:      {pipe.Pressure_drop/1e5:.2f} bar")
print(f"Temperature drop:   {pipe.Temperature_drop:.2f} K")
print(f"Exergy destruction: {pipe.Ex_D/1e3:.2f} kW")
print(f"Turbine inlet P:    {Model.Point['TurbineIn'].P/1e5:.2f} bar")
print(f"Turbine inlet T:    {Model.Point['TurbineIn'].T - 273.15:.2f} °C")