Turbine - Nouman090/ThermoSim GitHub Wiki

A turbine expands a high-pressure fluid to produce work. The expansion process is modelled with isentropic and mechanical efficiencies.

Physics

h_out = h_in - η_isen × (h_in - h_out,isen)
W = ṁ × (h_in - h_out) × η_mech
Ex_D = Ex_in - Ex_out - W

Syntax

Turbine(Model, ID, In_state, Out_state,
        n_isen=1.0, n_mech=1.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
n_isen float 1.0 Isentropic efficiency (0–1)
n_mech float 1.0 Mechanical efficiency (0–1)
Calculate bool False Solve immediately if True

Output Attributes

Attribute Type Unit Description
.work float W Work output
.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 Calculation)

Most common. You know the inlet conditions and outlet pressure. The turbine calculates the outlet state.

from ThermoSim import ThermodynamicModel, Turbine

Model = ThermodynamicModel()
Model.set_dead_state()

# Inlet: fully defined
Model.add_point('water', '1', P=8e6, T=753.15, Mass_flowrate=1)
# Outlet: only pressure known
Model.add_point('water', '2', P=0.008e6)

Turbine(Model, 'T1', '1', '2', n_isen=0.85, Calculate=True)

print(f"Work output: {Model.Component['T1'].work/1e3:.2f} kW")
print(f"Outlet T:    {Model.Point['2'].T - 273.15:.2f} °C")
print(f"Outlet H:    {Model.Point['2'].H:.0f} J/kg")

Case 2: Known Outlet, Unknown Inlet (Reverse Calculation)

You know the outlet conditions and inlet pressure. The turbine solves for the inlet state using fsolve.

Model = ThermodynamicModel()
Model.set_dead_state()

# Inlet: only pressure known
Model.add_point('water', '1', P=8e6, Mass_flowrate=1)
# Outlet: fully defined
Model.add_point('water', '2', P=0.008e6, H=2200000)

Turbine(Model, 'T1', '1', '2', n_isen=0.85, Calculate=True)

print(f"Inlet T: {Model.Point['1'].T - 273.15:.2f} °C")
print(f"Inlet H: {Model.Point['1'].H:.0f} J/kg")

Case 3: Both Inlet and Outlet Known

Used when you already know both states (e.g., from another calculation). The turbine just computes work and exergy.

Model = ThermodynamicModel()
Model.set_dead_state()

Model.add_point('water', '1', P=8e6, T=753.15, Mass_flowrate=1)
Model.add_point('water', '2', P=0.008e6, H=2200000)

Turbine(Model, 'T1', '1', '2', n_isen=0.85, Calculate=True)

print(f"Work: {Model.Component['T1'].work/1e3:.2f} kW")

Case 4: Mass Flow Not Given

If neither inlet nor outlet has a mass flow rate, the turbine assumes 1 kg/s and issues a warning. After calculation, mass flow is reset to None.

Model.add_point('water', '1', P=8e6, T=753.15)   # no mass flow
Model.add_point('water', '2', P=0.008e6)

Turbine(Model, 'T1', '1', '2', n_isen=0.85, Calculate=True)
# Warning: Mass flowrate through T1 set to 1 kg/s

Case 5: Isentropic Turbine (η = 1)

Turbine(Model, 'T1', '1', '2', n_isen=1.0, Calculate=True)
# Outlet entropy equals inlet entropy

Print Component Data

print(Model.Component['T1'])

Output:

T1 (Turbine):
  P_in        : 80.00 bar
  P_out       : 0.08 bar
  η_isen      : 85.0 %
  η_mech      : 100.0 %
  Work        : XXXXX.XX W
  Exergy dest.: XXXXX.XX
  Solved      : True

Case 6: Multiple Turbines (Reheat)

Model.add_point('water', '1', P=8e6, T=753.15, Mass_flowrate=1)
Model.add_point('water', '2', P=2e6)
Model.add_point('water', '3', P=2e6, T=753.15)   # reheat
Model.add_point('water', '4', P=0.008e6)

Turbine(Model, 'HPT', '1', '2', n_isen=0.85, Calculate=True)
Turbine(Model, 'LPT', '3', '4', n_isen=0.85, Calculate=True)

Print Component Data

print(Model.Component['T1'])
print(Model.Component['T1'])

Complete Example

from ThermoSim import ThermodynamicModel, Turbine

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

# Define state points
Model.add_point('water', '1', P=8e6, T=753.15, Mass_flowrate=1)
Model.add_point('water', '2', P=0.008e6)

# Add turbine
Turbine(Model, 'MainTurbine', '1', '2', n_isen=0.85, n_mech=0.98, Calculate=True)

# Access results
turb = Model.Component['MainTurbine']
print(f"Work output:        {turb.work/1e3:.2f} kW")
print(f"Exergy destruction: {turb.Ex_D/1e3:.2f} kW")
print(f"Outlet temperature: {Model.Point['2'].T - 273.15:.2f} °C")
print(f"Outlet quality:     {Model.Point['2'].Q}")