Separator - Nouman090/ThermoSim GitHub Wiki
A separator (flash drum) splits a two-phase mixture into saturated vapor and saturated liquid streams at the same pressure. The inlet must be in the two-phase region (0 < Q < 1).
Quality = x = ṁ_vapor / ṁ_total
ṁ_vapor = x × ṁ_in
ṁ_liquid = (1 - x) × ṁ_in
Vapor outlet: Q = 1 (saturated vapor), P = P_in
Liquid outlet: Q = 0 (saturated liquid), P = P_in
Ex_D = Ex_in - Ex_vapor - Ex_liquid
Separator(Model, ID, In_state, Out_vap_state, Out_liq_state, Calculate=False)| Parameter | Type | Default | Description |
|---|---|---|---|
Model |
ThermodynamicModel | — | The model object |
ID |
str | — | Unique component name |
In_state |
str | — | Inlet state point name (must be two-phase) |
Out_vap_state |
str | — | Vapor outlet state point name |
Out_liq_state |
str | — | Liquid outlet state point name |
Calculate |
bool | False | Solve immediately if True |
| Attribute | Type | Unit | Description |
|---|---|---|---|
.Ex_D |
float/str | W | Exergy destruction |
.Solution_Status |
bool | — | True if solved |
.In |
Prop | — | Inlet state point object |
.Out_vap |
Prop | — | Vapor outlet object |
.Out_liq |
Prop | — | Liquid outlet object |
Most common. Inlet is a saturated mixture; separator splits it into vapor and liquid.
from Thermosim import ThermodynamicModel, Separator
Model = ThermodynamicModel()
Model.set_dead_state()
# Inlet: two-phase mixture at 10 bar, quality = 0.3
Model.add_point('water', 'Mixture', P=10e5, Q=0.3, Mass_flowrate=1.0)
# Outlets
Model.add_point('water', 'Vapor', P=10e5)
Model.add_point('water', 'Liquid', P=10e5)
Separator(Model, 'FlashDrum', In_state='Mixture',
Out_vap_state='Vapor', Out_liq_state='Liquid', Calculate=True)
print(f"Vapor flow: {Model.Point['Vapor'].Mass_flowrate:.2f} kg/s")
print(f"Liquid flow: {Model.Point['Liquid'].Mass_flowrate:.2f} kg/s")
print(f"Vapor T: {Model.Point['Vapor'].T - 273.15:.2f} °C")
print(f"Liquid T: {Model.Point['Liquid'].T - 273.15:.2f} °C")Expansion valve creates two-phase mixture; separator splits it.
Model = ThermodynamicModel()
Model.set_dead_state()
# After expansion valve: R134a at 2 bar, Q = 0.25
Model.add_point('R134a', 'AfterValve', P=2e5, Q=0.25, Mass_flowrate=0.1)
Model.add_point('R134a', 'Vap_out', P=2e5)
Model.add_point('R134a', 'Liq_out', P=2e5)
Separator(Model, 'Sep1', In_state='AfterValve',
Out_vap_state='Vap_out', Out_liq_state='Liq_out', Calculate=True)
print(f"Vapor outlet: {Model.Point['Vap_out'].Mass_flowrate:.4f} kg/s")
print(f"Liquid outlet: {Model.Point['Liq_out'].Mass_flowrate:.4f} kg/s")If quality is very close to 0 or 1, most flow goes to one outlet.
Model = ThermodynamicModel()
Model.set_dead_state()
# Nearly all liquid (Q = 0.05)
Model.add_point('water', 'MostlyLiq', P=5e5, Q=0.05, Mass_flowrate=2.0)
Model.add_point('water', 'Vap', P=5e5)
Model.add_point('water', 'Liq', P=5e5)
Separator(Model, 'Sep2', In_state='MostlyLiq',
Out_vap_state='Vap', Out_liq_state='Liq', Calculate=True)
print(f"Vapor: {Model.Point['Vap'].Mass_flowrate:.2f} kg/s (5%)")
print(f"Liquid: {Model.Point['Liq'].Mass_flowrate:.2f} kg/s (95%)")If inlet is not two-phase (Q < 0 or Q > 1 or Q is a string), the separator issues a warning.
Model = ThermodynamicModel()
Model.set_dead_state()
# Superheated vapor (not two-phase)
Model.add_point('water', 'Superheated', P=5e5, T=500, Mass_flowrate=1.0)
Model.add_point('water', 'Vap', P=5e5)
Model.add_point('water', 'Liq', P=5e5)
Separator(Model, 'Sep3', In_state='Superheated',
Out_vap_state='Vap', Out_liq_state='Liq', Calculate=True)
# Warning: [Sep3] Inlet 'Superheated' is not two-phase (Q = Superheated (27.00 K))print(Model.Component['FlashDrum'])Output:
FlashDrum (Separator):
Inlet flow : 1.00 kg/s
Vapour outlet : 0.30 kg/s
Liquid outlet : 0.70 kg/s
Exergy destr. : XXXX.XX
Solved : True
from Thermosim import ThermodynamicModel, Separator
# Create model
Model = ThermodynamicModel()
Model.set_dead_state()
# Define two-phase inlet
Model.add_point('water', 'TwoPhase', P=10e5, Q=0.4, Mass_flowrate=5.0)
# Define outlets
Model.add_point('water', 'SatVapor', P=10e5)
Model.add_point('water', 'SatLiquid', P=10e5)
# Add separator
Separator(Model, 'FlashSeparator', In_state='TwoPhase',
Out_vap_state='SatVapor', Out_liq_state='SatLiquid', Calculate=True)
# Access results
sep = Model.Component['FlashSeparator']
print(f"Inlet flow: {Model.Point['TwoPhase'].Mass_flowrate:.2f} kg/s")
print(f"Vapor outlet flow: {Model.Point['SatVapor'].Mass_flowrate:.2f} kg/s")
print(f"Liquid outlet flow: {Model.Point['SatLiquid'].Mass_flowrate:.2f} kg/s")
print(f"Exergy destruction: {sep.Ex_D:.2f} W")
print(f"Both outlets at: {Model.Point['SatVapor'].T - 273.15:.2f} °C")