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")