Chapter 5#

Question #14: Feedwater Heater#

a) Consider a steam cycle where water is pumped from room its satuated liquid state at atmospheric pressure (\(P_1=101\:kPa\)) iseontropically to \(P_2=1\:MPa\). Water then is heated in a bolier in a constant pressure to a maximum temperature of \(T_3=600\:^{\circ}C\) which is limited by the metallurgical consederations of the turbine. Steam then is expanded iseontrepically in the turbine before entering the constant-pressure condenser. Calculate the efficiency of the cycle.

CH5-Q14_1.jpg

b) To increase the efficiency of the cycle, a feed-water heater is prposed where steam at a medium pressure of \(P_6=500\:kPa\) is extracted from the turbine and is mixed in a feed-water heater with the pumped water before being pumped again to the maximum pressure \(P_4=1\:MPa\). Assuming water is at its saturated liquid state before entering pumps, calculate the efficiency of the system.

CH5-Q14.jpg

c) optimize the medium pressure to maximize the efficiency

Solution Approach for a)#

The pump is iseotropic, therefore

\(s_2 = s_1\)

which is used to calculate ethalpy at the second state (\(h_2\))

and for the turbine again,

\(s_4=s_3\)

which is used to calculate the enthalpy at state #4 (\(h_4\))

the efficiency is calculated by

\(\eta=w/q_H=(w_{turbine}-w_{pump})/q_H\)

where for work from the turbine

\(w_{turbine}=h_3-h_4\)

and

\(w_{pump}=h_2-h_1\)

and from the boiler

\(q_H=h_3-h_2\)

#importing the required library
import CoolProp.CoolProp as CP
fluid = 'water'
P_1 = 101E+3   #P1 in Pa
s_1 = CP.PropsSI("S", "P", P_1, "Q", 0 , fluid)   #entropy in state#1 in J/kg.K
h_1 = CP.PropsSI("H", "P", P_1, "Q", 0 , fluid)   #enthalpy in state#1 in J/kg

s_2 = s_1   #iseontropic pump
P_2 = 1E+6   #pressure in state #2 in Pa
h_2 = CP.PropsSI("H", "P", P_2, "S", s_2 , fluid)   #enthalpy in state#2 in J/kg

P_3 = P_2   #constant pressure boiler
T_3 = 600 + 273.15   #temperature at state #3 in K
s_3 = CP.PropsSI("S", "P", P_3, "T", T_3 , fluid)   #entropy in state#3 in J/kg.K
h_3 = CP.PropsSI("H", "P", P_3, "T", T_3 , fluid)   #enthalpy in state#3 in J/kg

s_4 = s_3   #iseontropic turbine
P_4 = P_1   #constant pressure condenser
h_4 = CP.PropsSI("H", "P", P_4, "S", s_4 , fluid)   #enthalpy in state#4 in J/kg

w_turbine = h_3 - h_4   #work output from turbine in J/kg
w_pump = h_2 - h_1   #work output in pump in J/kg
w = w_turbine - w_pump   #net work output in J/kg

q_H = h_3 - h_2   #heat input in boiler in J/kg

etha = w / q_H   #overall efficiency of the cycle

print('Theefficiency of the cycle is:', f"{etha*100:.1f}", '%')
Theefficiency of the cycle is: 22.0 %

Solution Approach for b)#

The pumps are iseotropic, therefore

$s_2 = s_1$\

\(s_4 = s_3\)

which are used to calculate ethalpy at the states after being pumped (\(h_2\) and \(h_4\))

Additionally, mixing happens at a constant medium pressure, therefore

\(P_6=500\:kPa=P_7=P_8=P_2=P_3\)

#importing the required library
import CoolProp.CoolProp as CP
fluid = 'water'

#pressure distribution
P_4 = 1E+6 #pressure in state #4 in Pa
P_6 = 500E+3 #medium extraction pressure in Pa
P_1 = 101E+3   #P1 in Pa

#first pump
s_1 = CP.PropsSI("S", "P", P_1, "Q", 0 , fluid)   #entropy in state#1 in J/kg.K
h_1 = CP.PropsSI("H", "P", P_1, "Q", 0 , fluid)   #enthalpy in state#1 in J/kg

s_2 = s_1   #iseontropic pump
P_2 = P_6   #pressure in state #2 in Pa
h_2 = CP.PropsSI("H", "P", P_2, "S", s_2 , fluid)   #enthalpy in state#2 in J/kg

#second Pump
P_3 = P_2   #P3 in Pa
s_3 = CP.PropsSI("S", "P", P_3, "Q", 0 , fluid)   #entropy in state#3 in J/kg.K
h_3 = CP.PropsSI("H", "P", P_3, "Q", 0 , fluid)   #enthalpy in state#3 in J/kg

s_4 = s_3   #iseontropic pump
h_4 = CP.PropsSI("H", "P", P_4, "S", s_4 , fluid)   #enthalpy in state#4 in J/kg

#first turbine
P_5 = P_4   #constant pressure boiler
T_5 = 600 + 273.15   #temperature at state #3 in K
s_5 = CP.PropsSI("S", "P", P_5, "T", T_5 , fluid)   #entropy in state#5 in J/kg.K
h_5 = CP.PropsSI("H", "P", P_5, "T", T_5 , fluid)   #enthalpy in state#5 in J/kg

s_6 = s_5   #iseontropic turbine
h_6 = CP.PropsSI("H", "P", P_6, "S", s_6 , fluid)   #enthalpy in state#6 in J/kg

#second turbine
h_8 = h_6   #constant enthalpy flow extraction
P_8 = P_6   
s_8 = s_6

s_9 = s_8   #iseontropic turbine
P_9 = P_1   #constaht pressure condenser
h_9 = CP.PropsSI("H", "P", P_9, "S", s_9 , fluid)   #enthalpy in state#9 in J/kg

Assuming unit mass flow-rate through the boiler (\(\dot m_4=1\:kg/s\)) and an extracted flow rate of (\(\dot m_7=x\:kg/s\)),

the mass balance for steam extraction:

\(\dot m_6=\dot m_7+\dot m_8\)

and

\(\dot m_6=\dot m_4=1\:kg/s\)

therefore

\(1=x+\dot m_8\)

therefore

\(\dot m_8=\dot m_9=\dot m_1=\dot m_2=1-x\)

Applying the first law to the feed-water heater,

\(\dot m_{in}h_{in}=\dot m_{out}h_{out}\)

\(xh_7+(1-x)h_2=h_3\)

therefore

\(x=(h_3-h_2)/(h_7-h_2)\)

h_7 = h_6   #constant enthalpy flow extraction

x = (h_3-h_2)/(h_7-h_2)   #extracted portion of steam

w_turbine1 = h_5 - h_6   #work output from turbine before flow extraction in W
w_turbine2 = (1 - x) * (h_8 - h_9)   #work output from turbine after flow extraction in W
w_turbine = w_turbine1 + w_turbine2   #work output from turbines in W

w_pump1 = (1 - x) * (h_2 - h_1)   #work input in pump before mixing in W
w_pump2 = h_4 - h_3   #work input in pump after mixing in W
w_pump = w_pump1 + w_pump2   #work output in pumps in W

w = w_turbine - w_pump   #net work output in W

q_H = h_5 - h_4   #heat input in boiler in W

etha = w / q_H   #overall efficiency of the cycle
print('Theefficiency of the cycle with feedwater heater is:', f"{etha*100:.1f}", '%')
Theefficiency of the cycle with feedwater heater is: 22.5 %

Solution Approach for c)#

import numpy as np
import matplotlib.pyplot as plt

P_vals = np.linspace(P_1, P_4, 1000)   #an array of pressures between two ends in Pa
etha = np.zeros(1000)   #empty array to store efficiency values

i = 0   #counter for the for loop
for P_6 in P_vals:

    #pressure distribution
    P_4 = 1E+6 #pressure in state #4 in Pa
    P_1 = 101E+3   #P1 in Pa

    #first pump
    s_1 = CP.PropsSI("S", "P", P_1, "Q", 0 , fluid)   #entropy in state#1 in J/kg.K
    h_1 = CP.PropsSI("H", "P", P_1, "Q", 0 , fluid)   #enthalpy in state#1 in J/kg

    s_2 = s_1   #iseontropic pump
    P_2 = P_6   #pressure in state #2 in Pa
    h_2 = CP.PropsSI("H", "P", P_2, "S", s_2 , fluid)   #enthalpy in state#2 in J/kg

    #second Pump
    P_3 = P_2   #P3 in Pa
    s_3 = CP.PropsSI("S", "P", P_3, "Q", 0 , fluid)   #entropy in state#3 in J/kg.K
    h_3 = CP.PropsSI("H", "P", P_3, "Q", 0 , fluid)   #enthalpy in state#3 in J/kg

    s_4 = s_3   #iseontropic pump
    h_4 = CP.PropsSI("H", "P", P_4, "S", s_4 , fluid)   #enthalpy in state#4 in J/kg

    #first turbine
    P_5 = P_4   #constant pressure boiler
    T_5 = 600 + 273.15   #temperature at state #3 in K
    s_5 = CP.PropsSI("S", "P", P_5, "T", T_5 , fluid)   #entropy in state#5 in J/kg.K
    h_5 = CP.PropsSI("H", "P", P_5, "T", T_5 , fluid)   #enthalpy in state#5 in J/kg

    s_6 = s_5   #iseontropic turbine
    h_6 = CP.PropsSI("H", "P", P_6, "S", s_6 , fluid)   #enthalpy in state#6 in J/kg

    #second turbine
    h_8 = h_6   #constant enthalpy flow extraction
    P_8 = P_6   
    s_8 = s_6

    s_9 = s_8   #iseontropic turbine
    P_9 = P_1   #constaht pressure condenser
    h_9 = CP.PropsSI("H", "P", P_9, "S", s_9 , fluid)   #enthalpy in state#9 in J/kg

    h_7 = h_6   #constant enthalpy flow extraction

    x = (h_3-h_2)/(h_7-h_2)   #extracted portion of steam

    w_turbine1 = h_5 - h_6   #work output from turbine before flow extraction in W
    w_turbine2 = (1 - x) * (h_8 - h_9)   #work output from turbine after flow extraction in W
    w_turbine = w_turbine1 + w_turbine2   #work output from turbines in W

    w_pump1 = (1 - x) * (h_2 - h_1)   #work input in pump before mixing in W
    w_pump2 = h_4 - h_3   #work input in pump after mixing in W
    w_pump = w_pump1 + w_pump2   #work output in pumps in W

    w = w_turbine - w_pump   #net work output in W

    q_H = h_5 - h_4   #heat input in boiler in W

    etha[i] = w / q_H #overall efficiency of the cycle
    i = i + 1


plt.plot(P_vals/1000,etha*100)
plt.ylabel("Efficiency [%]")  # give y axis a label
plt.xlabel("Medium Pressure [kPa]")  # give x axis a label
Text(0.5, 0, 'Medium Pressure [kPa]')
../../_images/e4c84dfaefeb2f7134601820a45e8fa978c3a2912fbe0535d4c83cf276df14b0.png