Expansion Valve - Nouman090/ThermoSim GitHub Wiki

An expansion valve (also called a throttling valve or Joule-Thomson valve) reduces the pressure of a fluid through an isenthalpic (constant enthalpy) process. It is commonly used in refrigeration cycles and Organic Rankine Cycles (ORC).

Physics

H_out = H_in    (isenthalpic expansion)
Ex_D = Ex_in - Ex_out

No work is produced or consumed. The process is irreversible and generates entropy.

Syntax

Expansion_valve(Model, ID, In_state, Out_state, 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
Calculate bool False Solve immediately if True

Output Attributes

Attribute Type Unit Description
.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 pressure known. Valve calculates outlet state.

from Thermosim import ThermodynamicModel, Expansion_valve

Model = ThermodynamicModel()
Model.set_dead_state()

# Inlet: high-pressure saturated liquid
Model.add_point('R134a', '1', P=10e5, Q=0, Mass_flowrate=0.1)
# Outlet: low pressure
Model.add_point('R134a', '2', P=2e5)

Expansion_valve(Model, 'Valve1', '1', '2', Calculate=True)

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

Case 2: Known Outlet, Unknown Inlet (Reverse)

Outlet fully defined; inlet pressure known. Valve calculates inlet state.

Model = ThermodynamicModel()
Model.set_dead_state()

# Inlet: only pressure known
Model.add_point('R134a', '1', P=10e5, Mass_flowrate=0.1)
# Outlet: fully defined
Model.add_point('R134a', '2', P=2e5, H=250000)

Expansion_valve(Model, 'Valve1', '1', '2', Calculate=True)

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

Case 3: Both Known (Validation Mode)

Both states known. Valve checks enthalpy consistency and calculates exergy.

Model = ThermodynamicModel()
Model.set_dead_state()

Model.add_point('R134a', '1', P=10e5, Q=0, Mass_flowrate=0.1)
Model.add_point('R134a', '2', P=2e5, H=249000)

Expansion_valve(Model, 'Valve1', '1', '2', Calculate=True)
# If H_in ≠ H_out (within tolerance), raises ValueError

Case 4: Refrigeration Cycle

Expansion valve between condenser and evaporator.

Model = ThermodynamicModel()
Model.set_dead_state()

# After condenser: saturated liquid at 10 bar
Model.add_point('R134a', '3', P=10e5, Q=0, Mass_flowrate=0.05)

# Before evaporator: 2 bar
Model.add_point('R134a', '4', P=2e5)

Expansion_valve(Model, 'ExpValve', '3', '4', Calculate=True)

print(f"Quality at evaporator inlet: {Model.Point['4'].Q:.4f}")

Case 5: ORC Cycle

Throttle valve for pressure regulation.

Model = ThermodynamicModel()
Model.set_dead_state()

Model.add_point('R245fa', 'HX_out', P=15e5, T=373.15, Mass_flowrate=2)
Model.add_point('R245fa', 'Turb_in', P=12e5)

Expansion_valve(Model, 'ThrottleValve', 'HX_out', 'Turb_in', Calculate=True)

print(f"Pressure drop: {(Model.Point['HX_out'].P - Model.Point['Turb_in'].P)/1e5:.2f} bar")

Print Component Data

print(Model.Component['Valve1'])

Output:

Valve1 (Expansion valve):
  P_in  : 10.00 bar
  P_out : 2.00 bar
  Ex_D  : XXXXX.XX
  Solved: True

Complete Example

from Thermosim import ThermodynamicModel, Expansion_valve

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

# Define state points
Model.add_point('R134a', 'BeforeValve', P=10e5, Q=0, Mass_flowrate=0.1)
Model.add_point('R134a', 'AfterValve', P=2e5)

# Add expansion valve
Expansion_valve(Model, 'ExpansionValve', 'BeforeValve', 'AfterValve', Calculate=True)

# Access results
valve = Model.Component['ExpansionValve']
print(f"Inlet enthalpy:     {Model.Point['BeforeValve'].H:.2f} J/kg")
print(f"Outlet enthalpy:    {Model.Point['AfterValve'].H:.2f} J/kg")
print(f"Outlet temperature: {Model.Point['AfterValve'].T - 273.15:.2f} °C")
print(f"Outlet quality:     {Model.Point['AfterValve'].Q}")
print(f"Exergy destruction: {valve.Ex_D/1e3:.2f} kW")