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