PROJ-H405
A simple thermodynamic model to
predict the performances of a steam
cycle power plant
Master Program : Electromechanical
Engineering module Energy
Author :
Justin Yakunze
Supervisor :
Julien Blondeau
Academic Year 2023 – 2024
Contents
1 Abstract
4
2 Introduction
5
3 The Carnot Vapor Cycle
3.1 Carnot cycle : reversible transformation . . . . . . . . . . . . . . . . . .
3.2 Real cycles : irreversible transformations . . . . . . . . . . . . . . . . .
6
6
7
4 The Rankine-Hirn Cycle
4.0.1 Components . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.0.2 Energy analysis . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
8
5 Reheat Cycle
5.1 Working principle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Energy analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
12
13
6 Feedwater Heater
6.1 Working principle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Energy analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
14
15
7 Cost Aspect
7.1 Benefits of steam cycle with FWH . . . . . . . . . . . . . . . . . . . . .
7.2 Benefits of steam cycle with heat exchanger . . . . . . . . . . . . . . .
7.3 Cost-Benefit comparison via NPV . . . . . . . . . . . . . . . . . . . . .
18
18
19
19
8 Conclusion
20
9 Acknowledgments
21
10 Appendix
10.1 Basic Rankine-Hirn Cycle . . . . . . . . . . . . . . . . . . . . . . . . .
10.2 Steam cycle with reheat . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3 Steam cycle with FWH . . . . . . . . . . . . . . . . . . . . . . . . . .
22
22
25
28
2
List of Figures
3.1
T-s diagram of two Carnot steam cycles [Yun23] . . . . . . . . . . . . .
4.1
4.2
4.3
Basic Rankine-Hirn Cycle [Yun23] . . . . . . . . . . . . . . . . . . . . .
9
T-s Diagram of Rankine cycle following real assumptions . . . . . . . . . 11
Values of temperature and pressure at each stage of the Rankine-Hirn cycle 11
5.1
5.2
Rankine Cycle with Reheat[Yun23] . . . . . . . . . . . . . . . . . . . .
T-s diagram of a Rankine cycle with reheat . . . . . . . . . . . . . . . .
12
13
6.1
6.2
Rankine Cycle with FWH[Yun23] . . . . . . . . . . . . . . . . . . . . .
Efficiency of the cycle as a function of the fraction the steam bled from
the turbine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
T-s diagram of a real steam cycle . . . . . . . . . . . . . . . . . . . . .
Values of temperature and pressure at each stage of the Rankine cycle
with a FWH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
6.3
6.4
3
6
15
16
17
1 Abstract
This report studies a simple thermodynamic model to predict the performances of modern
steam cycle power plants with an increasing level of details and complexity. Starting with
the Carnot cycle, limits in efficiency are established followed by the thorough analysis of
the Rankine-Hirn cycle as the basis of the modern steam cycle power plant. Through
thermodynamic analysis, this report evaluates water properties such as pressure, tempertature, enthalpy and entropy at each stage of the process leading to exact calculations
of the thermal efficiency. Once this has been established, the addition of a reheat cycle
and feedwater heaters are also analysed and provide evidence that significant gains in
efficiency thus power output can be achieved. This report concludes with a cost-benefit
analysis of the addition of a heat exchanger instead of a condenser showing once again
that the benefits are worth the investments.
4
2 Introduction
Although the incentive is to invest in renewable energy technologies, steam cycle power
plants are still widely used to respond to the growth in energy demand. Undersanting and
improving their operation is therefore necessary.
Introducing the steam cycles via the ideal cycle or Carnot cycle, this reports then studies
in details the thermodynamic properties involved at each stage of a real cycle or RankineHirn cycle followed by improvements such as the integration of a reheat cycle as well as
feedwater heaters. With a thorough analysis of the performance of each cycles, the goal
is to highlight the evolution of the efficiency. At the end of the report, the cost-benefit
aspect of adding a heat exchanger to the existing cycle is examined and compared to
a cycle without heat exchanger.This last section gives an overview of how complex the
economic analysis is as many factors are involved.
5
3 The Carnot Vapor Cycle
3.1
Carnot cycle : reversible transformation
As the Carnot cycle is considered to be the most efficient thermal cycle, it makes sense
to look at it as the ideal cycle for vapor power plants. The Carnot cycle is based on 4
reversible transformation shown in Fig.3.1:
1. 1 → 2, reversible and isothermal heating in a boiler
2. 2 → 3, isentropical expansion in a turbine
3. 3 → 4, reversible and isothermal condensation in a condenser
4. 4 → 1, isentropical compression by a compressor
Figure 3.1: T-s diagram of two Carnot steam cycles [Yun23]
Considering this ideal cycle, the source temperatures are assumed to be constant values
TH and TC for the hot source and cold source temperature resp. This also implies that
there is no temperature pinch at the source, meaning that there is no difference between
the source temperature and the cycle temperature. The heat extracted from the boiler
QH and lost at the condenser QC can be expressed as:
QH = TH (SH – SL )
(3.1)
QC = TC (SH – SL )
(3.2)
6
with SL and SH the low and high value of entropy resp. For such a cycle, the total
work extracted is:
Wtot =
Z 2
1
T dS = QH – QC = (TH – TC )(SH – SL ) = a(T, S)
(3.3)
with a(T,S) defined as the area inside the Carnot cycle and Wtot the total work extracted
by one cycle. The cycle efficiency depends on the heat exchanged at the two sources and
can be written as:
ηcycle =
Q
T
Wtot
=1– C =1– C
QH
QH
TH
(3.4)
The Carnot cycle is a good indicator of the maximum reachable efficiency of a steam
cycle. In real cycles, irreversibilities and non-isentropic transformations have to be taken
into account which reduces the global efficiency.
3.2
Real cycles : irreversible transformations
The Carnot cycle is not a realistic steam cycle for the following reasons:
1. Isothermal processes: This process, mainly inside the boiler and the condenser,
is not too difficult to achieve in practice as the temperature is set at the saturation
value by the pressure. Note that the higher the maximum temperature, the bigger
the area under the cycle which means it is much more efficient. This is the reason
why steam cycles evolved from two-phase systems to single phase or supercritical as
shown on Fig3.1-b but in this case it is much more difficult to achieve the process
isothermally.
2. Isentropic processes: Due to imperfections in reality such as friction and heat
transfer the isentropic process can’t be perfectly achieved but it is possible to get
very close. The real issue is that the quality of the steam decreases and at some
point, i.e. when its quality goes lower than 90%, there are some risks of damaging the
turbine blades as liquid droplets might cause erosion over time. For the compression,
the difficulties are linked to the starting point as it is not easy to control the quality
of the steam via the condenser but also the design of a compressor handling two
phases is not realistic.
7
4 The Rankine-Hirn Cycle
The basic Rankine-Hirn cycle or steam turbine cycle is the basis of modern power plants
as it reflects the Carnot cycle but deals with the unrealistic scenarios explained in previous
section 3.2.
4.0.1
Components
It is a water-based cycle with 4 main elements shown on Fig.4.1:
- a pump will raise the pressure from state 1 (saturated liquid) to state 2 which is
the operating pressure of the boiler. As liquid water is almost incompressible, the
work required by the pump will be very low.
- a boiler or steam-generator is a large heat exchanger where the heat, which can
come from various sources such as combustion gases or nuclear reactors, will be
transferred to the compressed liquid water at constant pressure from state 2 to a
superheated vapor at state 3.
- a turbine will expand the vapor and produce work by rotating the shaft connected
to an electric generator. This expansion results in the decrease of temperature and
pressure to state 4 where the saturated steam will enter the condenser. Note that,
to avoid damaging the blades, the quality of the steam must be higher than 90%
which will affect the design of the turbine.
- a condenser is also a large heat exchanger but its role is to condense the steam at
constant pressure by losing heat to a cooling medium such as a lake or a river. The
condensed saturated water will enter the pump and go back into the cycle.
4.0.2
Energy analysis
Considering a steady-flow through all 4 components, the energy conservation equation
becomes:
(qin – qout ) + (win – wout ) = hout – hin [kJ/kg]
(4.1)
assuming that the kinetic and potential energy terms are negligible compared to the
heat transfer and work terms. State 1 is simply determined knowing the temperature of
the saturated liquid water and using the thermodynamic table listing the properties of
saturated water for all the pressures[CF 86]. In order to determine state 2, one needs to
look at the pump. To simplify the equation, the compression is assumed to be isentropic
(q=0) by neglecting the irreversibility in the pump which gives:
wpump,is = h2,is – h1
8
(4.2)
Figure 4.1: Basic Rankine-Hirn Cycle [Yun23]
with h2,is the enthalpy at state 2 following an isentropic compression. This work can
also be expressed as
wpump,is = v(p2 – p1 )
(4.3)
where v ∼
= v1 = ρ11 with ρ1 being the density or volumetric mass of saturated liquid
water at pressure 1 and h1 its enthalpy. The real enthalpy at state 2 is found taking into
account the isentropic efficiency of the pump ηpump defined as
ηpump =
wpump,is
h – h1
= 2,is
wpump
h2 – h 1
(4.4)
Combined with equations 4.2 and 4.3, the real value of enthalpy at state 2 is
h – h1
h2 = 2,is
+ h1 = wpump + h1
ηpump
(4.5)
As state 3 is superheated vapor, the value of enthalpy h3 is given by its pressure and
temperature in the thermodynamic table. Thus the heat captured by the water inside the
boiler is given by
qboiler = h3 – h2
(4.6)
After the expansion, the steam will reach a certain temperature due to the cooling
device usually a river or a lake, at the saturation level. A small difference of temperature
between the cooling fluid and the working fluid should be taken into account in reality
but is neglected in this analysis. Once again, the irreversibility in the turbine needs to be
considered to obtain the real value of enthalpy of the steam coming out of the turbine.
First, an isentropic expansion is defined by
s4,is = s3
9
(4.7)
with s being the entropy. Second, the relation between the quality of the steam, still
isentropic, and the entropy is given by
s4,is – s4′
x4,is = ′′ ′
s4 – s4
(4.8)
with s4 ’ and s4 ” the values of entropy of saturated liquid and saturated vapor resp.
at pressure 4 which is found in the thermodynamic table. The enthalpy following an
isentropic expansion h4,is is then given by
h4,is = x4,is h4′′ + (1 – x4,is )h4′
(4.9)
where h4 ’ and h4 " are the values enthalpy of saturated liquid and saturated vapor resp.
at pressure 4 also found in the thermodynamic table. Finally, the actual value of enthalpy
at point 4 is given by
h4 = h3 – ηturbine (h3 – h4,is ) = h3 – wturbine
(4.10)
where ηturbine is defined as
ηturbine =
h – h4
wturbine
= 3
wturbine,is
h3 – h4,is
(4.11)
and wturbine is the work extracted by the rotating turbine.
The cycle efficiency can be expressed in 2 equivalent ways. The first more intuitive is
the ratio between the area inside the cycle and the area under the heat-addition process.
The second more mathematical is the ratio between the electrical power generated from
the cycle and the thermal power transferred to the fluid inside the boiler which is defined
by
ηcyc =
Pe
q
= 1 – out
Pth
qboiler
(4.12)
where qout is the heat lost at the condenser and qboiler the heat given to the vapour
inside the heating chamber. Assuming the work done by the pump is negligible compared
to the work extracted by the turbine, the thermal efficiency is given by
ηth =
wturbine
h – h4
= 3
qboiler
h3 – h 2
(4.13)
Using Python, the cycle is modeled on Fig.4.2 following the values of temperature and
pressure given in Table.4.3 Considering the steam turbines and pumps used in the model
are brand new very efficient pieces of equipment having both efficiencies around 90%, the
efficiency of the cycle given by equation 4.13 is equal to 38.59%.
The expression of the total electrical power produced Pe in Watt is given by:
Pe = ṁsteam ∆hturbine
(4.14)
where the first term in the equation is the mass flow rate of the steam in kg/s and
the second term is the enthalpy difference around the turbine or in other words the work
generated by the turbine in J/kg. Typical big power plants produce around 1GW.[Blo24b]
10
Figure 4.2: T-s Diagram of Rankine cycle following real assumptions
Figure 4.3: Values of temperature and pressure at each stage of the Rankine-Hirn cycle
As steam power plants produce most of the energy consumed in the world, it is crucial
to make smart savings at every possible levels. The basic idea is to increase the surface
within the cycle or in other words net work and decrease the temperature of the steam
entering the condenser or in other words heat lost and this will be the focus point of the
coming sections.
11
5 Reheat Cycle
5.1
Working principle
In order to reduce losses, reheating is a process well known and used in modern steam
power plants shown in Fig. 5.1. As the moisture content of the vapor coming out of the
turbine has to be below a certain threshold, i.e. the quality has to be below 90%, the
pressure of the steam coming out of the boiler is limited. There are two possibilities to
raise the pressure anyways:
- The first one is to superheat the steam to very high temperatures before entering
the turbine. This solution sounds good in theory but does not work in practice as
the temperature reached would melt the pipes connecting the boiler and the turbine.
- The second solution is to expand the steam in two stages and reheat in between
which is the most practical solution.
Figure 5.1: Rankine Cycle with Reheat[Yun23]
As the model shows on Fig. 5.1, there is a first expansion from p3 to an intermediate
pressure p4 , then a reheat at constant pressure inside the boiler where the steam will
12
reach the same temperature reached in state 3. Finally, there is a last expansion where
the pressure drops to the one inside the condenser.
5.2
Energy analysis
Based on Fig. 5.1, the work extracted by both turbine is given by
wturbines = wturbine,HP + wturbine,LP = (h3 – h4 ) + (h5 – h6 )
(5.1)
while the heat transferred inside the boiler is given by
qboiler = qprimary + qreheat = (h3 – h2 ) + (h5 – h4 )
(5.2)
thus the thermal efficiency becomes
ηth =
wturbines
(h – h4 ) + (h5 – h6 )
= 3
qboiler
(h3 – h2 ) + (h5 – h4 )
(5.3)
As shown on Fig.5.2, the ideal Rankine-Hirn cycle with one reheat will be more efficient
simply because the area covered by the cycle is bigger. It can be shown that adding
more than two reheat stages is not beneficial because in theory, adding a second reheat
improves only by half the initial gain in efficiency from the first reheat. The same scenario
can be observed by adding a third reheat which is why, by comparing the gain and the
added cost and complexity, 2 reheats are enough.
Figure 5.2: T-s diagram of a Rankine cycle with reheat
13
6 Feedwater Heater
6.1
Working principle
As the heat coming from the boiler is transferred to the pressurized water at a relatively
low temperature, a smart way to improve the cycle efficiency is to warm up the feedwater
before it enters the boiler. Energy is saved as less heat is required to reach the same
temperature at the exit of the boiler thus improving the cycle efficiency. The device
taking advantage of this principle is called the feedwater heater or FWH and is shown in
Fig.6.1.
Figure 6.1: Rankine Cycle with FWH[Yun23]
In practice, this is done by extracting steam from the turbine at some point during the
expansion, which is also called "bleeding". This fraction of the steam y bled from the
turbine does not directly participate in the electricity production by going through the
turbine but instead is used to heat up the other fraction of condensed water that went
through the turbine before entering the condenser. One might argue that at some point,
the bleeding will be detrimental to the cycle efficiency but as Fig.6.2 shows, the more
steam is bled from the turbine the more efficient the cycle is. So not only does it make
the cycle more efficient but the FWH is also a good tool to remove the air leaked in at
the condenser and control the flow rate as the expansion at low pressure leads to larger
volume flow rates. There are 2 different types of FWHs, the first one which will be used
14
for the energy analysis is an open feedwater heater which mixes the two fluid streams
together. The second one doesn’t mix them and is called the closed feedwater heater.
Figure 6.2: Efficiency of the cycle as a function of the fraction the steam bled from the
turbine
6.2
Energy analysis
In order to make a correct energy analysis, the following assumptions and calculations will
be based upon Fig.6.1: for each 1 kg of steam leaving the boiler, y kg of steam is bled
from the turbine to heat up the water to saturated liquid at heater pressure, this fraction
is derived from the energy conservation equation around the FWH.
h – h3
y= 2
h2 – h 6
(6.1)
The other fraction 1-y kg of steam goes entirely through the turbine before leaving at
the condenser. Thus the work extracted by the turbine is:
wturbine = h5 – yh6 – (1 – y)h7
(6.2)
The thermal energy required by the boiler becomes in this case:
qboiler = h5 – h4
(6.3)
Once again neglecting the energy consumed by the pumps, the cycle efficiency comes
down to:
15
ηcyc =
wturbine
h – yh6 – (1 – y)h7
= 5
qboiler
h5 – h 4
(6.4)
Fig.6.3 is implemented by modeling the cycle using the values found in Table6.4. Under
these conditions, the efficiency of the cyle goes up to 41.82% compared to 38.08% for a
basic steam cycle operating in the same conditions.
Figure 6.3: T-s diagram of a real steam cycle
Here are some values found via the model and assuming a big power plant producing
1GW of power working 80% of the time(7000h/year1 ):
1. Work generated by the turbine: We = 1,127.8 kJ/kg
2. Work required by the pumps: Wpumps = 18.6 kJ/kg
3. Heat given by the boiler: Qboiler = 2,696.942 kJ/kg
4. Thermal efficiency with FWH: η cyc = 41.82%
5. Steam mass flow rate: ṁsteam = 886.68 kg/s
1 important value to calculate the energy in Wh in the next section
16
Figure 6.4: Values of temperature and pressure at each stage of the Rankine cycle with a
FWH
17
7 Cost Aspect
Through this section, 2 different scenarios are analyzed and compared in order to determine
how to maximize the benefits generated by a power plant. The first scenario is the study of
the cycle studied in the previous section, using a feedwater heater. The second scenario
is based on the same cycle but in this case, some steam is bled from the turbine and
redirected towards a heat exchanger. This impacts the cycle efficiency as less electrical
power is produced but benefits from the heat exchanger also have to be taken into account.
7.1
Benefits of steam cycle with FWH
First of all, we need to define the electrical power produced by the turbine (Pe ) as well
as the thermal power consumed in the heating chamber (Pth ). These 2 are expressed via
equation 4.14 where the thermal power is found knowing the fuel mass flow rate and the
enthalpy difference around the heating chamber.
As the power produced by the turbine and the heat at the boiler are given at the end
of the previous section, the revenues and costs can be calculated the following way:
Revenues = Pe Priceelec
(7.1)
Costs = Pth Pricefuel
(7.2)
In Belgium, the market electricity price (Priceelec ) is assumed to be around 400 euros/MWh[Blo24a] and the market fuel price (Pricefuel ) around 100 euros/MWh[al22].
These prices are volatiles and depend a lot on the socio-economic state of the country
but still are useful to calculate the net present value or NPV.
It’s important to introduce the notion of NPV at this point which is an efficient tool
to compare benefits[Blo24a]. It is defined as:
NPV =
X
Ct
(1 + r)t
(7.3)
where Ct is the net revenue during year t and r the discount rate expected to be 10% in
this case to maximize the NPV. The costs linked to the infrastructure of the whole power
plant are out of the scope of this analysis
Assuming the power plant produces 1GW of electric power with a thermal efficiency
of 41.82%, the thermal power generated by the heating chamber is equal to 2.3912 GW
according to equation 4.13 thus the net revenues amount to 1,126.16 millions of euros
per year which can be used in equation 7.3 to determine the current value of the benefits
of the installation over t years.
18
7.2
Benefits of steam cycle with heat exchanger
Using the same methodology with a few different parameters, the same cost-benefit analysis can be made. First, the cost of the additional heat exchanger will be taken into
account in the calculation of the NPV. Second, the steam sent to the heat exchanger
won’t participate to the production of electricity which means it has to be removed from
the total energy production.
According to sources from Altex Industries, a company based in Canada leader in the
shell and tube heat exchanger business, the cost of adding a heat exchanger can be
significant, going up to tens of millions of euros[Alt24]. This cost depends on the size
and materials used for the heat exchanger but also the lost of eventual benefits during
the installation if the plant needs to be shut down. As this makes the analysis even more
complex, the operational disruption will be ignored.
As steam is bled from the turbine to generate heat, less electricity is produced and this
potential loss of benefit has to be taken into account. As the electric power produced is
defined by equation 4.14, the mass flow rate given before is determined and fixed knowing
the power plant produces 1GW of power. The work extracted by the turbine is reduced
and expressed via the enthalpy difference around the turbine which is set by the pressure
of the steam leaving the turbine. Depending on the temperature chosen, the pressure will
be set. In order to maximize the benefits meaning no electricity lost, it makes to replace
the condenser by the heat exchanger, having the pressure set at 0.1 bar according to the
chosen example which corresponds to a temperature of 46°C. On the other hand, if the
client wants the heat coming at higher temperature, steam will have to be bled earlier in
the process leading to less power thus less money and the installation will be costly too.
7.3
Cost-Benefit comparison via NPV
As the benefits from selling electricity are far more important than the installation of a heat
exchanger, the conclusion is replacing the condenser by a shell and tube heat exchanger
is advantageous in less than a year of activity and the benefits from selling heat were not
even taken into account here. This result may vary based on the operating conditions of
the power plant as well as the temperature of the steam bled but in the case studied, it
is very favourable.
19
8 Conclusion
In conclusion, understanding the limits in terms of efficiency via the Carnot cycle, the
thermodynamic analysis reveals a significant efficiency improvement with the addition of
the reheat cycle and feedwater heaters to the Rankine-Hirn cycle which is the foundation
of steam cycles.
Besides, using the NPV to compare scenarios with and without heat exchangers, a
deeper understanding of the economic aspect leads to the conclusion that the addition of
all these pieces of equipment are advantageous although the initial investment is huge.
The larger the power plant, the more a slight efficiency increase is beneficial from a
socio-economic and environmental point of view.
As a last note, existing power plants as well as new ones should incorporate a reheat
cycle, feedwater heaters and in most cases a heat exchanger instead of a condenser to
meet the growing energy demand in a more sustainable way.
20
9 Acknowledgments
I would like to express my deepest gratitude to Professor Julien Blondeau, whose insightful
guidance was crucial in the completion of this report. His expertise in thermodynamics
with the addition of reference books and his class on thermal power plants gave me the
foundation I needed for the writing of this report.
Special thanks to mechanical engineer and youtuber Adriaan Van Niekerk whose youtube
videos about steam cycles and the working of pyromat, a thermodynamic library on python,
were very useful in the writing of the code that can be found in the appendix.
Lastly, I am grateful to my family and friends for their continuous encouragement
throughout the course of this project.
21
10 Appendix
10.1
1
2
3
4
5
Basic Rankine-Hirn Cycle
import pyromat as pm #Library containing water properties
import matplotlib.pyplot as plt
import numpy as np
import pandas as panda
from pylab import *
6
7
8
9
water_states = pm.get("mp.H2O") #Shortcut to get water properties
#from the library
10
11
#Efficiency of the pump and the turbine
12
13
14
eta_pump = 0.9
eta_turbine = 0.9
15
16
#State 1 & 2 : Water around the pump going inside the boiler
17
18
19
20
21
22
p1 = 0.1 #Pressure 1 in Bar
T1 = float(water_states.Ts(p=p1)) #Temperature 1 in Kelvin
h1 = water_states.hs(p=p1)[0] #Enthalpy 1 in kJ/kg
s1 = float(water_states.ss(p=p1)[0]) #Entropy 1 in kJ/kgK
v1 = 1/water_states.ds(p=p1)[0] #Density in m^3/kg
23
24
p2 = 150 #Pressure 2 in Bar
25
26
27
28
29
w_pump = v1*(p2-p1)*100/eta_pump #Work done by the pump in kJ/kg
h2 = h1 + w_pump #Enthalpy 2 in kJ/kg
T2 = float(water_states.T(p=p2, s=s1)) #Temperarure 2 in Kelvin
s2 = float(water_states.s(p=p2,T=T2)) #Entropy 2 in kJ/kgK
30
31
32
33
#State 2l & 2v: Saturated liquid and vapor(resp) properties at
#pressure 2 inside the boiler, only necessary for the plot
34
35
36
37
p2l = p2 #Pressure 2 in bar
T2l = float(water_states.Ts(p=p2l)) #Temperature in Kelvin
s2l = float(water_states.ss(T=T2l)[0]) #Entropy in kJ/kgK
38
22
39
40
41
42
p2v = p2 #Pressure in bar
T2v = T2l #Temperature in Kelvin
s2v = float(water_states.ss(T=T2l)[1]) #Entropy in kJ/kgK
h2v = float(water_states.hs(T=T2l)[1]) #Enthalpy in kJ/kg
43
44
45
#State 3 : Steam coming out of the boiler going into the turbine
46
47
48
49
50
51
52
p3 = p2 #Pressure 3 in bar
T3 = 833 #Temperature 3 in K, above this temperature the material
#used for the canalizations (ferritic steel) will start melting
h3 = float(water_states.h(T=T3, p=p3)) #Enthalpy 3 in kJ/kg
s3 = float(water_states.s(T=T3, p=p3)) #Entropy 3 in kJ/kg
q_boiler = h3 - h2 #Heat transferred inside the boiler in kJ/kg
53
54
#State 4: Steam leaving the turbine at low pressure
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
p4 = p1 #Pressure 4 in bar
s4s = s3 #Entropy 4 in kJ/kgK following an isentropic expansion
T4s, x4s = water_states.T_s(p=p4, s=s4s, quality=True)
#Temperature in Kelvin and quality following an isentropic #expansion
if x4s == -1: #if statement in case the steam properties are
#outside the saturation curve
h4s = water_states.h(T=T4s,s=s4s) #Enthalpy in kJ/kg
#following an isentropic expansion
else:
h4s = water_states.h(p=p4, x=x4s) #Same as the above
w_turbine = (h3 - h4s)*eta_turbine #Work extracted by the
#turbine in kJ/kg
h4 = h3 - w_turbine #Real value of enthalpy 4 in kJ/kg
h4_l = float(water_states.hs(p=p4)[0]) #Saturated liquid value
#of enthalpy 4 in kJ/kg
h4_v = float(water_states.hs(p=p4)[1]) #Saturated vapour value
#of enthalpy 4 in kJ/kg
x4 = (h4 - h4_l)/(h4_v - h4_l) #Real quality 4 of the steam
s4l = float(water_states.ss(p=p4)[0]) #Saturated liquid value of
#entropy 4 in kJ/kgK
s4v = float(water_states.ss(p=p4)[1]) #Saturated liquid value of
#enthalpy 4 in kJ/kg
s4 = float(x4*s4v + (1 - x4)*s4l) #Real value of entropy 4 in
#kJ/kgK
T4 = float(water_states.T(p=p4, s=s4)) #Temperature 4 in Kelvin
81
82
#Energy extracted from the turbine
83
84
85
print(f"Total work extracted from the turbine:
{round(float(w_turbine),1)} kJ/kg")
23
86
87
88
#Thermal efficiency
89
90
91
eta_th = w_turbine/q_boiler
print(f"Thermal efficiency: {round(float(eta_th*100),2)}%")
92
93
#Useful tool to see the temperature and pressure at each stage
94
95
96
97
98
99
100
p=[p1,p2,p3,p4]
T=[T1,T2,T3,T4]
state=list(range(1,5))
data={'State':state,'p':p,'T':T}
df=panda.DataFrame(data)
print(df)
101
102
#Plot
103
104
105
106
107
108
# Setting fonts
font = {'family':'Times New Roman', 'size': 14}
figure(figsize=(7.20, 5.20))
title(' T-s Diagram of a real Rankine-Hirn cycle',color='b')
rc('font', **font)
109
110
# Drawing saturation curve
111
112
113
114
115
116
p=linspace(0.006117,220.64)
T=water_states.Ts(p=p)
s=water_states.ss(p=p)
plot(s[0],T,'b--',linewidth=2)
plot(s[1],T,'r--',linewidth=2)
117
118
119
120
121
122
# connecting all states with lines
se = [s1,s2,s2l,s2v,s3,s4,s1]
Te = [T1,T2,T2l,T2v,T3,T4,T1]
plot(se,Te,'k-',linewidth=3)
xlim(0,10)
123
124
125
126
127
128
129
130
131
132
text(s1-0.01,T1,'1')
text(s2-0.01,T2,'2')
text(s2l-0.2,T2l,'2l')
text(s2v+0.1,T2v,'2v')
text(s3-0.01,T3,'3')
text(s4,T4+2,'4')
xlabel('Entropy (kJ/kg-K)')
ylabel('Temperature (K)')
savefig("BasicRankineHirn.jpg")
24
133
show()
10.2
1
2
3
4
5
6
Steam cycle with reheat
function J = cost(theta)
import pyromat as pm #Library containing water properties
import matplotlib.pyplot as plt
import numpy as np
import pandas as panda
from pylab import *
7
8
9
10
water_states = pm.get("mp.H2O") #Shortcut to get water
#properties from the library
11
12
#Efficiency of the pump and the turbines
13
14
15
16
eta_pump = 0.9
eta_turbineLP = 0.9
eta_turbineHP = 0.9
17
18
#State 1 & 2 : Water around the pump going into the boiler
19
20
21
22
23
24
p1 = 0.1 #Pressure 1 in Bar
T1 = float(water_states.Ts(p=p1)) #Temperature 1 in Kelvin
h1 = water_states.hs(p=p1)[0] #Enthalpy 1 in kJ/kg
s1 = float(water_states.ss(p=p1)[0]) #Entropy 1 in kJ/kgK
v1 = 1/water_states.ds(p=p1)[0] #Density in m^3/kg
25
26
p2 = 150 #Pressure 2 in Bar
27
28
29
w_pump = v1*(p2-p1)*100/eta_pump #Work done by the pump in kJ/kg
h2 = h1 + w_pump #Enthalpy 2 in kJ/kg
30
31
32
T2 = float(water_states.T(p=p2, s=s1)) #Temperature 2 in Kelvin
s2 = float(water_states.s(p=p2,T=T2)) #Entropy 2 in kJ/kgK
33
34
35
36
#State 2l & 2v: Saturated liquid and vapor(resp) properties at
#pressure 2, only necessary for the plot
37
38
39
40
p2l = p2 #Pressure in Bar
T2l = float(water_states.Ts(p=p2l)) #Temperature in Kelvin
s2l = float(water_states.ss(T=T2l)[0]) #Entropy in kJ/kgK
41
42
43
p2v = p2 #Pressure in Bar
T2v = T2l #Temperature in Kelvin
25
44
45
s2v = float(water_states.ss(T=T2l)[1]) #Entropy in kJ/kgK
h2v = float(water_states.hs(T=T2l)[1]) #Enthalpy in kJ/kg
46
47
48
#State 3 : Steam coming out of the boiler
49
50
51
52
53
p3 = p2 #Pressure 3 in bar
T3 = 833 #Temperature 3 in Kelvin
h3 = float(water_states.h(T=T3, p=p3)) #Enthalpy 3 in kJ/kg
s3 = float(water_states.s(T=T3, p=p3)) #Entropy 3 in kJ/kg
54
55
56
57
#State 4: Steam coming out of the high pressure turbine (so
#lower pressure) going back into the heatign chamber to be
#reheated
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
p4 = 40 #Pressure 4 in bar
s4s = s3 #Entropy 4 in kJ/kgK
T4s, x4s = water_states.T_s(p=p4, s=s4s, quality=True)
#Temperature in Kelvin and quality following an isentropic expansion
if x4s == -1: #if statement in case the steam properties are
#outside the saturation curve
h4s = water_states.h(T=T4s, s=s4s) #Enthalpy in kJ/kg
#following an isentropic expansion
else:
h4s = water_states.h(p=p4, x=x4s) #Same as the above
w_HPturbine = (h3 - h4s)*eta_turbineHP #Work extracted by the
#high pressure turbine in kJ/kg
h4 = h3 - w_HPturbine #Real value of enthalpy 4 in kJ/kg
h4_l = float(water_states.hs(p=p4)[0]) #Saturated liquid value
#of enthalpy 4 in kJ/kg
h4_v = float(water_states.hs(p=p4)[1]) #Saturated vapour value
#of enthalpy 4 in kJ/kg
x4 = (h4 - h4_l)/(h4_v - h4_l) #Real quality 4 of the steam
s4l = float(water_states.ss(p=p4)[0]) #Saturated liquid value of
#entropy 4 in kJ/kgK
s4v = float(water_states.ss(p=p4)[1]) #Saturated liquid value of
#enthalpy 4 in kJ/kg
s4 = float(x4*s4v + (1 - x4)*s4l) #Real value of entropy 4 in
#kJ/kgK
T4 = float(water_states.T(p=p4, s=s4)) #Temperature 4 in Kelvin
84
85
86
87
#Reheat cycle
#State 5: Reheated steam (560°C) at low pressure (same as when
#it left turbine)
88
89
90
p5 = p4 #Pressure 5 in bar
T5 = T3 #Temperature 5 in K
26
91
92
h5 = float(water_states.h(p=p5, T=T5)) #Enthalpy 5 in kJ/kg
s5 = float(water_states.s(p=p5, T=T5)) #Entropy 5 in kJ/kg
93
94
95
#State 6: Steam coming out of the turbine at low pressure, p=p1
#if condenser is isobar s6=s1 if isentropic expansion
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
p6 = p1 #Pressure 6 in bar
s6s = s5 #Entropy 6 in kJ/kgK following an isentropic expansion
T6s, x6s = water_states.T_s(p=p6, s=s6s, quality=True)
#Temperature in Kelvin and quality following an isentropic #expansion
if x6s == -1:#if statement in case the steam properties are
#outside the saturation curve
h6s = water_states.h(T=T6s,s=s6s) #Enthalpy in kJ/kg
#following an isentropic expansion
else:
h6s = water_states.h(p=p6, x=x6s) #Same as the above
w_LPturbine = (h5 - h6s)*eta_turbineLP #Work extracted by the
#low pressure turbine in kJ/kg
h6 = h5 - w_LPturbine #Real value of enthalpy 6 in kJ/kg
h6_l = float(water_states.hs(p=p6)[0]) #Saturated liquid value
#of enthalpy 6 in kJ/kg
h6_v = float(water_states.hs(p=p6)[1]) #Saturated vapour value
#of enthalpy 6 in kJ/kg
x6 = (h6 - h6_l)/(h6_v - h6_l) #Real quality 6 of the steam
s6l = float(water_states.ss(p=p6)[0]) #Saturated liquid value of
#entropy 6 in kJ/kgK
s6v = float(water_states.ss(p=p6)[1]) #Saturated liquid value of
#enthalpy 6 in kJ/kg
s6 = float(x6*s6v + (1 - x6)*s6l) #Real value of entropy 6 in
#kJ/kgK
T6 = float(water_states.T(p=p6, s=s6)) #Temperature 6 in Kelvin
122
123
#Energy extracted from the turbines
124
125
w_turbines = w_HPturbine + w_LPturbine
126
127
#Heat given by the boiler with reheat
128
129
q_boiler_reheat = float((h3 - h2) + (h5 - h4))
130
131
#Thermal efficiency
132
133
eta_th_reheat = (w_HPturbine+w_LPturbine)/q_boiler_reheat
134
135
#Plot
136
137
# Setting fonts
27
138
139
140
141
font = {'family':'Times New Roman', 'size': 14}
figure(figsize=(7.20, 5.20))
title('Real Rankine Cycle of a thermodynamic steam cycle with reheat (
rc('font', **font)
142
143
# Drawing saturation curve
144
145
146
147
148
149
p=linspace(0.006117,220.64)
T=water_states.Ts(p=p)
s=water_states.ss(p=p)
plot(s[0],T,'b--',linewidth=2)
plot(s[1],T,'r--',linewidth=2)
150
151
152
153
154
155
156
# Connecting all states with lines
se = [s1,s2,s2l,s2v,s3,s4,s5,s6,s1]
Te = [T1,T2,T2l,T2v,T3,T4,T5,T6,T1]
plot(se,Te,'k-',linewidth=3)
#plot([s6,s1],[T6,T1],'r',linewidth=3)
xlim(0,10)
157
158
159
160
161
162
163
164
165
166
167
168
169
text(s1-0.01,T1,'1')
text(s2-0.01,T2,'2')
text(s2l-0.2,T2l,'2l')
text(s2v+0.1,T2v,'2v')
text(s3-0.01,T3,'3')
text(s4,T4+2,'4')
text(s5,T5,'5')
text(s6+0.01,T6,'6')
xlabel('Entropy (kJ/kg-K)')
ylabel('Temperature (K)')
savefig("Rankine.jpg")
show()
170
10.3
1
2
3
4
5
Steam cycle with FWH
import pyromat as pm #Library containing water properties
import matplotlib.pyplot as plt
import numpy as np
import pandas as panda
from pylab import *
6
7
8
9
water_states = pm.get("mp.H2O") #Shortcut to get water properties
#from the library
10
11
#Efficiency of the pumps and the turbines
28
12
13
14
15
16
eta_pumpLP = 0.9
eta_pumpHP = 0.9
eta_turbineLP = 0.9
eta_turbineHP = 0.9
17
18
#State 1 & 2 : Water around pump 1 : low pressure pump
19
20
21
22
23
24
p1 = 0.1 #Pressure 1 in Bar
T1 = float(water_states.Ts(p=p1)) #Temperature 1 in Kelvin
h1 = water_states.hs(p=p1)[0] #Enthalpy 1 in kJ/kg
s1 = float(water_states.ss(p=p1)[0]) #Entropy 1 in kJ/kgK
v1 = 1/water_states.ds(p=p1)[0] #Density in m^3/kg
25
26
27
28
p2 = 10 #Pressure 2 in Bar
w_pumpLP = v1*(p2-p1)*100/eta_pumpLP #Work done by the pump in kJ/kg
h2 = h1 + w_pumpLP #Enthalpy 2 in kJ/kg
29
30
31
s2 = float(water_states.s(p=p2,T=T1)) #Entropy 2 in kJ/kgK
T2 = float(water_states.T(p=p2, s=s2)) #Temperarure 2 in Kelvin
32
33
#State 3 : Saturated liquid water coming out of the FWH
34
35
36
37
38
39
p3 = p2 #Pressure 3 in bar
h3 = water_states.hs(p=p3)[0] #Enthalpy 3 in kJ/kg
T3 = float(water_states.Ts(p=p3)[0]) #Temperature 3 in Kelvin
s3 = float(water_states.ss(p=p3)[0]) #Entropy 3 in kJ/kgK
v3 = 1/water_states.ds(p=p3)[0] #Pressure 3 in Bar
40
41
42
43
44
45
46
47
#State 4 : Pressurized water going inside the boiler
p4 = 150 #Pressure 4 in Bar
w_pumpHP = v3*(p4-p3)*100/eta_pumpHP #Work done by the pump in kJ/kg
h4 = h3 + w_pumpHP #Enthalpy 4 in kJ/kg
print(h4)
T4 = float(water_states.T(p=p4, h=h4)) #Temperature 4 in Kelvin
s4 = float(water_states.s(p=p4,T=T4)) #Entropy 4 in kJ/kgK
48
49
50
#State 4l & 4v: Saturated liquid and vapor(resp) properties at
#pressure 4, only necessary for the plot
51
52
53
54
p4l = p4 #Pressure in Bar
T4l = float(water_states.Ts(p=p4l)) #Temperature in Kelvin
s4l = float(water_states.ss(T=T4l)[0]) #Entropy in kJ/kgK
55
56
57
58
p4v = p4 #Pressure in Bar
T4v = T4l #Temperature in Kelvin
s4v = float(water_states.ss(T=T4l)[1]) #Entropy in kJ/kgK
29
59
h4v = float(water_states.hs(T=T4l)[1]) #Enthalpy in kJ/kg
60
61
62
63
64
65
66
#State 5 : Steam coming out of the boiler going into the turbine
p5 = p4 #Pressure 5 in bar
T5 = 833 #Temperature 5 in K
h5 = float(water_states.h(T=T5, p=p5)) #Enthalpy 5 in kJ/kg
s5 = float(water_states.s(T=T5, p=p5)) #Entropy 5 in kJ/kg
67
68
69
#State 6 : State of the fraction y of the water coming out of the
{#turbines going into the FWH
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
p6 = p2 #Pressure 6 in bar
s6s = s5 #Entropy 6 in kJ/kgK following an isentropic expansion
T6, x6s = water_states.T_s(p=p6, s=s6s, quality=True)#Temperature in K
if x6s == -1:#if statement in case the steam properties are
#outside the saturation curve
h6s = water_states.h(T=T6,s=s6s) #Enthalpy in kJ/kg
#following an isentropic expansion
else:
h6s = water_states.h(p=p6, x=x6s) #Same as the above
w_HPturbine = (h5 - h6s)*eta_turbineHP #Work extracted by the
#high pressure turbine in kJ/kg
h6 = h5 - w_HPturbine #Real value of enthalpy 6 in kJ/kg
h6_l = float(water_states.hs(p=p6)[0]) #Saturated liquid value
#of enthalpy 6 in kJ/kg
h6_v = float(water_states.hs(p=p6)[1]) #Saturated vapour value
#of enthalpy 6 in kJ/kg
x6 = (h6 - h6_l)/(h6_v - h6_l) #Real quality 6 of the steam
s6l = float(water_states.ss(p=p6)[0]) #Saturated liquid value of
#entropy 6 in kJ/kgK
s6v = float(water_states.ss(p=p6)[1]) #Saturated liquid value of
#enthalpy 6 in kJ/kg
s6 = float(x6*s6v + (1 - x6)*s6l) #Real value of entropy 6 in
#kJ/kgK
T6 = float(water_states.T(p=p6, s=s6)) #Temperature 6 in Kelvin
95
96
97
98
99
100
101
102
103
104
105
#State 7 : State of the fraction 1-y of water coming out of the
#condenser
p7 = p1 #Pressure 7 in bar
s7s = s5 #Entropy 7 in kJ/kgK following an isentropic expansion
T7, x7s = water_states.T_s(p=p7, s=s7s, quality=True) #Temperature in
if x7s == -1:#if statement in case the steam properties are
#outside the saturation curve
h7s = water_states.h(T=T7,s=s7s) #Enthalpy in kJ/kg
else:
30
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
h7s = water_states.h(p=p7, x=x7s) #Same as the above
w_turbineLP = (h5 - h7s)*eta_turbineLP #Work extracted by the
#turbine in kJ/kg
h7 = h5 - w_turbineLP #Real value of enthalpy 7 in kJ/kg
h7_l = float(water_states.hs(p=p7)[0]) #Saturated liquid value
#of enthalpy 7 in kJ/kg
h7_v = float(water_states.hs(p=p7)[1]) #Saturated vapour value
#of enthalpy 7 in kJ/kg
x7 = (h7 - h7_l)/(h7_v - h7_l) #Real quality 7 of the steam
s7l = float(water_states.ss(p=p7)[0]) #Saturated liquid value of
#entropy 7 in kJ/kgK
s7v = float(water_states.ss(p=p7)[1]) #Saturated liquid value of
#enthalpy 7 in kJ/kg
s7 = float(x7*s7v + (1 - x7)*s7l) #Real value of entropy 7 in
#kJ/kgK
T7 = float(water_states.T(p=p7, s=s7)) #Temperature 7 in Kelvin
122
123
y = (h2 - h3)/(h2 - h6) #fraction of steam bled from the turbine
124
125
#Energy extracted by the turbine
126
127
w_turbine = h5 - y*h6 - (1-y)*h7
128
129
#Heat transferred to the steam by the boiler
130
131
q_boiler = h5 - h4
132
133
#Thermal efficiency
134
135
eta_th = w_turbine/q_boiler
136
137
#Efficiency as a function of the steam bled
138
139
140
141
p_list = list(range(1, 151)) # Range of pressures in bar studied
eta_list = [] #empty vector where the efficiencies will be stored
y_list = list(range(1,100)) #Range of the fraction of steam bled
142
143
144
145
146
147
148
149
150
151
152
for i in range(99):
p6_temp = 10 #Pressure in bar
T6s_temp, x6s_temp = water_states.T_s(p=p6_temp, s=s6s,
quality=True) #Temperature in Kelvin and quality following
#an isentropic expansion
if x6s_temp == -1: #if statement in case the steam properties are
#outside the saturation curve
h6s = water_states.h(T=T6_temp, s=s6s) #Enthalpy in kJ/kg
#following an isentropic expansion
else:
31
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
h6s = water_states.h(p=p6_temp, x=x6s_temp) #Same as the above
w_LPturbine_temp = (h5 - h6s) * eta_turbineLP #Work extracted by t
#turbine in kJ/kg
h6_temp = h5 - w_LPturbine_temp #Real enthalpy 6 in kJ/kg
y_temp = y_list[i] / 100 #fraction of steam bled, going from
#1 to 100%
w_turbine_temp = h5 - y_temp*h6_temp - (1-y_temp)*h7 #Work
#extracted from the turbine
h4_temp = y_temp*h6_temp + (1 - y_temp)*h2 +
1/water_states.ds(p=p6_temp)[0]*(p4-p6_temp)*100/eta_pumpHP
#Enthalpy 4 in kJ/kg based on new fraction y
q_boiler_temp = h5 - h4_temp #Heat transferred inside the
#boiler in kJ/kg
eta_list.append((w_turbine_temp - (1 - y_temp)*v1*(p6_tempp1)*100/eta_pumpLP - v3*(p4-p6_temp)*100/eta_pumpHP) /
q_boiler_temp) #Efficency values stored for all fractions of
#steam
170
171
172
173
174
175
176
p=[p1,p2,p3,p4,p5,p6,p7]
T=[T1,T2,T3,T4,T5,T6,T7]
stage=list(range(1,8))
data={'stage':stage,'p':p,'T':T}
df=panda.DataFrame(data)
print(df)
177
178
#Plots
179
180
#Efficiency curve
181
182
plot(y_list,eta_list,'b--',linewidth=2)
183
184
185
186
xlabel('Fraction of steam bled from the turbine [%]')
ylabel('Efficiency ')
title('Evolution of the cycle efficiency for different bleeding',color
187
188
show()
189
190
191
192
193
194
# Setting fonts
font = {'family':'Times New Roman', 'size': 14}
figure(figsize=(7.20, 5.20))
title('T-s Diagram of a steam cycle with a FWH',color='b')
rc('font', **font)
195
196
# Drawing saturation curve
197
198
199
p=linspace(0.006117,220.64)
T=water_states.Ts(p=p)
32
200
201
202
s=water_states.ss(p=p)
plot(s[0],T,'b--',linewidth=2)
plot(s[1],T,'r--',linewidth=2)
203
204
205
206
207
208
209
210
211
# connecting all states with lines
sel = [s1,s2,s3,s6,s7,s1]
Tel = [T1,T2,T3,T6,T7,T1]
set = [s3,s4,s4l,s4v,s5,s6,s3]
Tet = [T3,T4,T4l,T4v,T5,T6,T3]
plot(sel,Tel,'k-',linewidth=3)
plot(set,Tet,'k-',linewidth=3)
xlim(0,10)
212
213
214
215
216
217
218
219
220
221
222
223
text(s1-0.01,T1,'1')
text(s2-0.01,T2,'2')
text(s3-0.01,T3,'3')
text(s4,T4+2,'4')
text(s5,T5,'5')
text(s6+0.01,T6,'6')
text(s7+0.01,T7,'7')
xlabel('Entropy (kJ/kg-K)')
ylabel('Temperature (K)')
savefig("Rankine.jpg")
show()
33
Bibliography
[CF 86]
C.F. Beaton. "Heat Exchanger Design Handbook”. 1986. url: https://www.
thermopedia.com/content/1150/.
[al22]
Trinomics et al. Study on energy prices and costs Evaluating impacts on households and industry. 2023rd ed. EU, 2022.
[Yun23]
Michael A. Boles Yunus A. Çengel. Thermodynamics: An Engineering Approach, Chapter 10 Vapor and combined power cycles. 2023rd ed. Mcgraw
Hill Education, 2023.
[Alt24]
Altex. "Shell Tube Heat Exchangers”. 2024. url: https://www.altexinc.
com/shell-tube-heat-exchangers/.
[Blo24a] Julien Blondeau. ELEC-H508 Thermal Power Plants, Context. 2023rd ed. ULB,
2024.
[Blo24b] Julien Blondeau. ELEC-H508 Thermal Power Plants, Indirect Conversion. 2023rd ed.
ULB, 2024.
34
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )