Project 2 - Rankine cycle Simulator
AIM
To understand the concept of Rankine cycle by referring to standard thermal engineering text book.
OBJECTIVES
1. To calculate the state points of the Rankine Cycle based on user inputs.
2. To plot corresponding T-s and h-s Diagrams.
INTRODUCTION TO RANKINE CYCLE
The Rankine cycle or Rankine Vapor Cycle is the process widely used by power plants such as coal-fired power plants or nuclear reactors. In this mechanism, a fuel is used to produce heat within a boiler, converting water into steam which then expands through a turbine producing useful work. This is a thermodynamic cycle which converts heat into mechanical energy which usually gets transformed into electricity by electrical generation.

The components in the Rankine Cycle as shown in figure and given below:
- Turbine (Process: 1-2)
- Condenser (Process: 2-3)
- Pump (Process: 3-4)
- Boiler (Process: 4-1)
Process 1-2: Isentropic Expansion: The superheated vapor is expanded isentropically in the turbine, thus producing work which may be converted to electricity. The exit condition of turbine may exits in 3 states i.e, superheated state, saturated vapor state or liquid-vapor mix state.
`Wt=m(h1−h2)`
Process 2-3: Isobaric Heat Rejection: The vapor-liquid mixture leaving the turbine is condensed at constant low pressure, usually in a surface condenser using cooling water. In well designed and maintained condensers, the pressure of the vapor is well below atmospheric pressure, approaching the saturation pressure of the operating fluid at the cooling water temperature.
`Qadd=m(h2−h3)`
Process 3-4: Isentropic Compression. The pressure of the condensate is raised isentropically in the feed pump. Because of the low specific volume of liquids, the pump work is relatively small and often neglected in thermodynamic calculations.
`Wp=m(h4−h3)`
Process 4-1: Isobaric Heat Transfer: High pressure liquid enters the boiler from the feed pump and is heated to the saturation temperature. Further addition of energy causes evaporation of the liquid until it is fully converted to saturated steam. Further addition of energy takes the saturated steam into superheated state.
`Qrej=m(h1-h4)`
Thermal efficiency of Rankine cycle is given by
`η=1−(Qrej)/(Qadd)`
Specific Steam Consumption
`SSC=3600/(WT−WP)`
Back Work Ratio
`BWR=(WP)/(WT)`
INPUT PARAMETERS:
Case 1: Turbine Outlet is either Saturated state or Liquid-vapor mix state:
Pressure at Turbine Inlet (`P1`) = 30 bar
Temperature at Turbine Inlet (`T1`) = 400 deg Celcius
Pressure at Condenser Inlet (`P2`) = 0.05 bar
Case 2: Turbine Outlet is in Superheated state:
Pressure at Turbine Inlet (`P1`) = 45 bar
Temperature at Turbine Inlet (`T1`) = 600 deg Celcius
Pressure at Condenser Inlet (`P2`) = 6 bar
CODE ALGORITHM:
1. Initial known conditions (operating pressures of boiler and condenser and turbine inlet temperature) are taken as input by using 'input' command.
2. State 1: Values of Enthalpy and Entropy are determined using XSteam function using P1">P1 as input.
3. State 2: Depending on exit state of turbine (superheated state, saturated vapor state or liquid-vapor mix state), the values of enthalpy are calculated and using entropy relation between states 1 and 2, dryness fraction is calculated.
`s2=s1`
`x 2 = (s 2 − s f 2 )/(s g 2 − s f 2)`
If State 2 is in saturated or liquid-vapor mix state then enthalpy at state 2 is given by
`h 2 = h f 2 + x 2 ( h g 2 − h f 2 )`
If State 2 is in superheated state the enthalpy at state 2 is given by
`h 2 = h g 2 + C p v ( T 2 − ( T s a t ) p 2 )`
where
`T2` - Temperature at state`
`( T s a t ) p 2` - Saturation temperature at `P 2`
`h f & s f`- enthalpy and entropy at saturated liquid state
`h g & s g` - enthalpy and entropy at saturated vapor state
`C p v` - Specific heat of liquid vapor
`T 2 , ( T s a t ) p 2 ,h_(f2) , h_(g2) , s_(f2) , s_(g2)`and `C p v` are calculated using XSteam function.
4. State 3 and State 4 properties are calculated directly using XSteam function.
5. Plotting T-s and H-s Diagrams:
i. Plotting Saturaion line in T-s diagram:
Entropy range is divided into equal number of divisions using linspace command. At each entropy value, saturation temperation is obtained using XSteam function using entropy as input. Plotting these will give saturation line in T-s diagram.
ii. Plotting Saturaion line in h-s diagram:
Entropy at critical point is obtained. At each point before critical entropy, saturation pressure is obtained and using that saturation pressure, saturation liquid enthalpy is obtained using XSteam function. At each point after critical entropy, saturation pressure is obtained and using that saturation pressure, saturation vapor enthalpy is obtained using XSteam function. These Saturation liquid and vapor enthalpies are plotted across entropy.
iii. Process 1-2 and 3-4 are directly plotted using plot command using end state `s , T`and `s , h` as inputs.
iv. Process 4-1 contains 3 regions i.e, Subcooling, Phase change and Superheating.
- Subcooling Region: From state 4 to saturated liquid state on pressure `P1` . It is a curve along constant pressure.
- Phase Change Region: From saturated liquid state on pressure `P1` to saturated vapor state on pressure `P1`. It is straight line inside saturation curve at constant pressure.
- Superheat Region: From saturated vapor state on pressure `P1` to State 1. It is a curve along constant pressure.
v. Process 2-3 may contain 2 regions depending on exit state of turbine.
- If end state 2 is in superheated region then the process contains 2 regions. Superheated region from state 2 to saturated vapor state on pressure `P2` which is a curve outside saturation curve and Phase change region from saturated vapor state on pressure `P2` to State 3 which is a straight line inside saturation curve.
- If end state 2 is in saturated region or liquid-vapor mix region then the process contains only phase change region from saturated vapor state on pressure `P2` to State 3 which is a straight line inside saturation curve.
clear all
close all
clc
disp(' RANKINE CYCLE '); % Displaying
disp('1-2 is Isentropic Expansion in the turbine');
disp('2-3 is constant pressure heat removal in the condenser');
disp('3-4 is Isentropic compression in the pump');
disp('4-1 is Constant pressure heat addition in the boiler');
%Obtaining the input data
p1 = input('\nValue of pressure at turbine inlet, p1(in bar) = ');
T1 = input('\nValue of temperature at turbine inlet, T1(in degree.C) = ');
p2 = input('\nValue of temperature at condenser inlet, p2(in bar) = ');
% Extracting data _ defining variables
% State 1
h1 = XSteam('h_pT', p1, T1); % extracting enthalpy at state pt 1
s1 = XSteam('s_pT', p1, T1); % similarly
% State 2
s2 = s1; % Isentropic expansion
sf2= XSteam('sL_p', p2); % Saturated liquid Entropy
sg2 = XSteam('sV_p', p2); % Saturated Vapour Entropy
x2 = (s2-sf2)/(sg2-sf2);
hf2 = XSteam('hL_p', p2);
hg2 = XSteam('hV_p', p2);
h2 = hf2 + (x2*(hg2-hf2));
% State 3
p3 = p2; % Constant pressure Heat rejection in condenser
s3= XSteam('sL_p', p3);
h3 = XSteam('hL_p', p3);
% State 4
s4 = s3;
p4 = p1;
% Work done by turbine
Wt = h1 - h2;
% Work done to run pump
v3 = XSteam('vL_p', p3);
Wp = v3*(p4 - p3)*100;
h4 = h3 + Wp;
%net work
Wnet = Wt - Wp;
%Heat into the system
Qin = h1 - h4;
%Heat out of the system
Qout = h2 - h3;
%Thermal efficiency
eff = (Wnet/Qin)*100;
%Specific Steam Consumption
%SSC = mass flow rate/power
SSC = (3600/Wnet);
%Calculating temperatures at the state points
T3 = XSteam('Tsat_p', p3);
T2 = T3;
Cp4 = XSteam('Cp_ps', p4, s4);
Cv4 = XSteam('Cv_ps', p4, s4);
k = Cp4/Cv4;
T4 = T3/((p3/p4)^((k-1)/k));
%Calculating temperature, entropy and enthalpy at the vapour and liquid
%line for plotting
T6 = XSteam('Tsat_p', p1);
s5 = XSteam('sL_p', p1);
s6 = XSteam('sV_p', p1);
h5 = XSteam('hL_p', p1);
h6 = XSteam('hV_p', p1);
T5 = T6;
%Plotting the saturation curve
T = linspace(1,375,1000);
for i = 1:length(T)
sf(i) = XSteam('sL_T', T(i));
sg(i) = XSteam('sV_T', T(i));
hf(i) = XSteam('hL_T', T(i));
hg(i) = XSteam('hV_T', T(i));
end
%Plotting T-s diagram
figure(1)
hold on
plot(sf, T, 'r','linewidth',1)
plot(sg, T, 'r','linewidth',1)
plot([s1 s2], [T1 T2], 'k', 'linewidth', 2)
plot([s2 s3], [T2 T3] ,'k', 'linewidth', 2)
plot([s3 s4], [T3 T4], 'k', 'linewidth', 2)
plot([s4 s5], [T4 T5], 'k', 'linewidth', 2)
plot([s5 s6], [T5 T6], 'k', 'linewidth', 2)
sc1 = linspace(s6, s1, 1000);
for l = 1:length(sc1)
Tc1(l) = XSteam('T_ps', p1, sc1(l));
end
plot(sc1, Tc1, 'k', 'linewidth', 2)
text(s1+0.1, T1, '1')
text(s2+0.1, T2, '2')
text(s3, T3-20, '3')
text(s4, T4+20, '4')
title('Temp vs Entropy plot')
xlabel('Entropy ,S (Kj/kgk')
ylabel('Temperature (degree C) ')
legend('Saturation curve')
%Plotting h-s diagram
figure(2)
hold on
plot(sf, hf, 'r', 'linewidth', 1)
plot(sg, hg, 'r', 'linewidth', 1)
plot([s1 s2], [h1 h2], 'k', 'linewidth', 2)
plot([s2 s3], [h2 h3], 'k', 'linewidth', 2)
plot([s3 s4], [h3 h4], 'k', 'linewidth', 2)
hc = linspace(h4, h5, 100);
for k = 1:length(hc)
sch(k) = XSteam('s_ph', p1, hc(k));
end
plot(sch,hc, 'k', 'linewidth', 2)
plot([s5 s6], [h5 h6], 'k', 'linewidth', 2)
for m = 1:length(sc1)
hc1(m) = XSteam('h_ps', p1, sc1(m));
end
plot(sc1, hc1, 'k', 'linewidth', 2)
text(s1+0.1, h1, '1')
text(s2+0.1, h2, '2')
text(s3, h3-100, '3')
text(s4, h4 +200, '4')
title('Enthalpy vs Entropy plot')
xlabel('Entropy , S (KJ/kgk) ')
ylabel('Enthalpy , H (KJ/kg)')
legend('Saturation curve','location','northwest')
% Displaying Results
disp(' RESULTS');
fprintf('At State Point 1:\n');
fprintf('p1: %8.3f bar\n', p1);
fprintf('T1: %8.3f C\n', T1);
fprintf('h1: %8.3f KJ/kg\n', h1);
fprintf('s1: %8.3f KJ/kgK\n\n', s1);
fprintf('At State Point 2:\n');
fprintf('p2: %8.3f bar\n', p2);
fprintf('T2: %8.3f C\n', T2);
fprintf('h2: %8.3f kJ/kg\n', h2);
fprintf('s2: %8.3f kJ/kgK\n', s2);
fprintf('x2: %8.3f\n\n', x2);
fprintf('At State Point 3:\n');
fprintf('p3: %8.3f bar\n', p3);
fprintf('T3: %8.3f K\n', T3);
fprintf('h3: %8.3f kJ/kg\n', h3);
fprintf('s3: %8.3f kJ/kgK\n\n', s3);
fprintf('At State Point 4:\n');
fprintf('p4: %8.3f bar\n', p4);
fprintf('T4: %8.3f K\n', T4);
fprintf('h4: %8.3f KJ/kg\n', h4);
fprintf('s4: %8.3f kJ/kgK\n\n', s4);
fprintf('Turbine Work: %8.3f kJ/kg\n', Wt);
fprintf('Pump Work: %8.3f kJ/kg\n', Wp);
fprintf('Wnet: %8.3f kJ/kg\n', Wnet);
fprintf('Efficiency: %8.3f Percent \n ', eff);
fprintf('S.S.C: %8.3f kJ/kWh', SSC);
- XSteam data is used to extract steam and water properties of enthalpy , entropy at specific pressure and temperatures for saturated liquid, saturated vapour conditions etc .
- The program requires the input of Pressure ( in bar) at state point 1 ( turbine inlet) , Temperature at same point (deg celcius) and Temperature at condenser inlet (point 2).
- With the help of these inlets & from XSteam data, the program calculates all the state points of the Rankine cycle .
- The xsteam data works as ,
- h1 = XSteam('h_pT' , p1 , T1) ; ( Returns the enthalpy of water at given pressure and temperature in bar and degC respectively .)
- As we extract the data , we use thermodynamic relation to further find state points and extract their data from XSteam.
- Sf and sg , hf and hg , where f and g stands for saturated liquid and saturated vapour respectively.
- The net work , work done by turbine , work done to run the pump , Heat in and heat out are calculated using standard thermodynamic relation
- Efficiency and Specific steam consumption (s.s.c) of the Rankine cycle is calculated .
- T , s and h are extracted at vapour and liquid line for plotting purpose , after 4th point for the variation you observe in the plot .
- Saturation curve is plotted in red for saturated liquid and saturated gas .
- Plot of T vs s and h vs s is created from all the points obtained from the program .
- The plot changes as the user input changes for the above mentioned inputs .
- Results are displayed in the command window .
Results
[ Enthalpy vs Entropy plot ]

[ Temperature vs Entropy plot ]

Results shown in the command window for entire calculation
