# Ideal Rankine Cycle with feedwater heater calculations

The content of this post is based on the video:

### The problem

Consider a regenerative cycle using steam as the working fluid. Steam leaves the boiler and enters the turbine at 4 MPa, 400$$^\circ$$C. After expansion to 400 kPa, some of the steam is extracted from the turbine to heat the feedwater in an open FWH. The pressure in the FWH is 400 kPa, and the water leaving it is saturated liquid at 400 kPa. The steam not extracted expands to 10 kPa. Determine the cycle efficiency.

Looking at the mass flow of steam entering and exiting the turbine: $y = \dot{m}_6/\dot{m}_5$

and thus $$\dot{m}_6$$ can be written as a function of $$\dot{m}_5$$: $\dot{m}_6 = y\dot{m}_5$

Similarly $$\dot{m}_7$$ can be written as: $\dot{m}_7=(1-y)\dot{m}_5$

and $\dot{m}_7=(1-y)\dot{m}_5=\dot{m}_1=\dot{m}_2$

### Initiate PYroMat and configure its units:

import pyromat as pm
import numpy as np

pm.config["unit_pressure"] = "kPa"
pm.config["def_p"] = 100

mp_water = pm.get("mp.H2O") # <-- for multi-phase water properties

To solve this problem we consider a control surface around the pump, the boiler, the turbine, and the condenser.

First, let us consider the low pressure pump:

p1 = 10 # <-- given
p2 = 400 # <-- given

v1 = 1/mp_water.ds(p=p1)[0]

w_pump1 = v1*(p2-p1)
h2 = h1+w_pump1
print(f"Work required by pump 1: {round(float(w_pump1),1)} kJ/kg")
Work required by pump 1: 0.4 kJ/kg

Next, let’s consider the turbine:

p5 = 4000 # <-- given
T5 = 400+273.15 # K <-- given
h5 = mp_water.h(p=p5, T=T5)
s5 = mp_water.s(p=p5, T=T5)

s6 =s5
p6 = 400 # <-- given
T6, x6 = mp_water.T_s(s=s6, p=p6, quality=True)
h6 = mp_water.h(x=x6, p=p6)

print(f"Quality of bled steam: {round(float(x6),4)}")
Quality of bled steam: 0.9757

Now, let’s consider the feedwater heater:

p3 = 400 # <-- given
h3 = mp_water.hs(p=p3)[0]


The energy conservation equation for the FWH is: $y(h_6)+(1-y)h_2 = h_3$ This can be re-arranged to solve $$y$$ explicitly: $y = \frac{h_2 - h_3}{h_2 - h_6}$

y = (h2-h3)/(h2-h6)
print(f"y = {round(float(y),4)}")
y = 0.1654

We can now calculate the work extracted by the turbine:

p7 = p1
s7 = s5
T7, x7 = mp_water.T_s(s=s7, p=p7, quality=True)
h7 = mp_water.h(x=x7, p=p7)
w_t = h5 - y*h6 - (1-y)*h7
print(f"Work generated by turbine: {round(float(w_t),1)} kJ/kg")
Work generated by turbine: 980.4 kJ/kg

Next, let’s consider the high pressure pump:

p4 = 4000 # <-- given
v3 = 1/mp_water.ds(p=p3)[0]
w_pump2 = v3*(p4-p3)
print(f"Work required by pump 2: {round(float(w_pump2),1)} kJ/kg")
Work required by pump 2: 3.9 kJ/kg

Finally, we can consider the boiler:

h4 = h3 + w_pump2
q_H = h5-h4
print(f"Heat input by boiler: {round(float(q_H),1)} kJ/kg")
Heat input by boiler: 2605.9 kJ/kg

We can now calculate the thermal efficiency with $\eta_{th}=\frac{w_{net}}{q_H}$

eta_th = (w_t - w_pump1*(1-y) - w_pump2)/q_H*100
print(f"Thermal efficiency is: {round(float(eta_th),2)}%")
Thermal efficiency is: 37.46%