Example Refrigeration - Nouman090/ThermoSim GitHub Wiki

Cycle Description

      Condenser (Q_out)
   2 ──────────────→ 3
   ↑                  ↓
 Compressor     Expansion Valve
   ↑                  ↓
   1 ←──────────── 4
     Evaporator (Q_in)

Complete Code



from ThermoSim import (
    ThermodynamicModel, Compressor, Expansion_valve, HeatExchanger,
)
from ThermoSim.plotting import CyclePlotter

Model = ThermodynamicModel()
Model.set_dead_state()

wf = 'R134a'

# Design conditions
T_evap = -10 + 273.15    # evaporator temperature (°C → K)
T_cond =  40 + 273.15    # condenser temperature
T_superheat = 5           # superheat at evaporator exit (K)
T_subcool   = 5           # subcooling at condenser exit (K)
eta_comp = 0.80
m_dot = 0.1               # kg/s

# Get saturation pressures
from CoolProp.CoolProp import PropsSI
P_evap = PropsSI('P', 'T', T_evap, 'Q', 1, wf)
P_cond = PropsSI('P', 'T', T_cond, 'Q', 0, wf)

# State points
# 1: Compressor inlet (superheated vapour from evaporator)
Model.add_point(wf, '1', P=P_evap, T=T_evap + T_superheat, Mass_flowrate=m_dot)
# 2: Compressor outlet
Model.add_point(wf, '2', P=P_cond)
# 3: Condenser outlet (subcooled liquid)
Model.add_point(wf, '3', P=P_cond, T=T_cond - T_subcool)
# 4: Expansion valve outlet
Model.add_point(wf, '4', P=P_evap)

# Components
Compressor(Model, 'Compressor', '1', '2', n_isen=eta_comp)

HeatExchanger(Model, 'Condenser', PPT=5, HEX_type='SimpleHEX',
              HeatAdded=False,
              Hot_In_state='2', Hot_Out_state='3',
              Cold_In_state=None, Cold_Out_state=None)

Expansion_valve(Model, 'ExpValve', '3', '4')

HeatExchanger(Model, 'Evaporator', PPT=5, HEX_type='SimpleHEX',
              HeatAdded=True,
              Hot_In_state=None, Hot_Out_state=None,
              Cold_In_state='4', Cold_Out_state='1')

# Results
Model.Solve(verbose=1)
Model.ModelSummary()

W_comp  = Model.Component['Compressor'].work
Q_evap  = Model.Component['Evaporator'].Q
Q_cond  = Model.Component['Condenser'].Q
COP     = Q_evap / W_comp

print(f"\nCompressor work: {W_comp:.2f} W")
print(f"Cooling capacity: {Q_evap:.2f} W")
print(f"Heat rejected:   {Q_cond:.2f} W")
print(f"COP:             {COP:.2f}")

# Plots
plotter = CyclePlotter(Model)
plotter.plot_Ts_diagram(['1', '2', '3', '4', '1'],
                        title='R134a Refrigeration Cycle')
plotter.plot_Ph_diagram(['1', '2', '3', '4', '1'],
                        title='R134a P-h Diagram')