diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet.svg new file mode 100644 index 000000000..60d602300 --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet.svg @@ -0,0 +1,1748 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + + diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_darkmode.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_darkmode.svg new file mode 100644 index 000000000..50d2e3af4 --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_darkmode.svg @@ -0,0 +1,1748 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + + diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p1.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p1.svg new file mode 100644 index 000000000..fcea5812c --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p1.svg @@ -0,0 +1,1739 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p1_darkmode.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p1_darkmode.svg new file mode 100644 index 000000000..dd2b8507f --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p1_darkmode.svg @@ -0,0 +1,1739 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p2.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p2.svg new file mode 100644 index 000000000..a8888cb4e --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p2.svg @@ -0,0 +1,1739 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p2_darkmode.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p2_darkmode.svg new file mode 100644 index 000000000..10c8c7d02 --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p2_darkmode.svg @@ -0,0 +1,1739 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p3.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p3.svg new file mode 100644 index 000000000..fe00dff6d --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p3.svg @@ -0,0 +1,1748 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + + diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p3_darkmode.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p3_darkmode.svg new file mode 100644 index 000000000..537bde925 --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_p3_darkmode.svg @@ -0,0 +1,1748 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + + diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_steps.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_steps.svg new file mode 100644 index 000000000..604a6650e --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_steps.svg @@ -0,0 +1,1816 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + + + + 1 + 2 + 3 + 4 + + diff --git a/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_steps_darkmode.svg b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_steps_darkmode.svg new file mode 100644 index 000000000..e42a7ff53 --- /dev/null +++ b/docs/_static/images/tutorials/hrsg_steam_supply/flowsheet_steps_darkmode.svg @@ -0,0 +1,1816 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + condenser + process steam + condensatereturn + makeupwater + preheater + LP drum + HP drum + HP EC 2 + HP EC 3 + HP EV + HP S 1 + HP S 2 + HP COND + LP EV + HP EC 1 + condensingturbine + extractionturbine + 1 + 2 + 4 + 5 + 6 + 3 + 11 + 10 + 12 + 15 + 16 + 17 + 23 + 21 + 18 + 22 + 19 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 20 + 14 + 13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + 8 + 9 + 24 + 28 + 25 + 26 + 27 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 50 + + + + + 1 + 2 + 3 + 4 + + diff --git a/docs/tutorials.rst b/docs/tutorials.rst index 503f4950a..393b3df1c 100644 --- a/docs/tutorials.rst +++ b/docs/tutorials.rst @@ -85,10 +85,15 @@ out to us. We are looking forward to hearing from you! .. image:: /_static/images/tutorials/pygmo_optimization/pygmo_optimization_darkmode.svg :class: only-dark - .. grid-item-card:: Gas Turbine with Heat Recovery Steam Generator + .. grid-item-card:: Heat Recovery Steam Generator for Power and Process Heat Production + :link: tespy_tutorial_hrsg_label + :link-type: ref - Coming soon! + .. image:: /_static/images/tutorials/hrsg_steam_supply/flowsheet.svg + :class: only-light + .. image:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_darkmode.svg + :class: only-dark .. toctree:: :maxdepth: 1 @@ -99,3 +104,4 @@ out to us. We are looking forward to hearing from you! tutorials/starting_values.rst tutorials/heat_pump_exergy.rst tutorials/pygmo_optimization.rst + tutorials/hrsg_process_steam.rst diff --git a/docs/tutorials/hrsg_process_steam.rst b/docs/tutorials/hrsg_process_steam.rst new file mode 100644 index 000000000..04e20f471 --- /dev/null +++ b/docs/tutorials/hrsg_process_steam.rst @@ -0,0 +1,205 @@ +.. _tespy_tutorial_hrsg_label: + +Heat Recovery Steam Generator for Process Steam Supply +------------------------------------------------------ + +We provide the full script presented in this tutorial here: +:download:`stepwise.py ` + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_steps.svg + :align: center + :alt: Topology of the heat recovery steam generator + :figclass: only-light + + Figure: Topology of the heat recovery steam generator + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_steps_darkmode.svg + :align: center + :alt: Topology of the heat recovery steam generator + :figclass: only-dark + + Figure: Topology of the heat recovery steam generator + +Overview +^^^^^^^^ +In this tutorial we will build a combined heat and power plant utilizing flue +gas (e.g. from a gas turbine) to generate process steam and electricity. The +figure above shows the structure of the system and the 4 steps we take to build +the system. The challenge here lies in the complexity of the system. With a +well-structured approach the problem can be tackled. + +It is a simplified version of an actual plant with some unique features: + +- The economizer bypass (connection 28) actually represents a performance + downgrade for the boiler. The technical reason is to allow it to produce less + than 30 % of the nominal steam mass flow. With this measure the CHP plant + can produce almost any steam flow between 40 t/h and 210 t/h, which is a + unusual wide range. +- The real economizer has eight stages. To simplify, we only model there here. +- Interestingly, the boiler is operated with what could be called a "negative + approach" (the temperature coming out of the economizer was higher than that + of the HP drum). This issue is managed by increasing the economizer pressure. + Although this solution is inefficient from an energy standpoint, it was + chosen for operational safety, likely to reduce the risk of economizer + steaming. +- The sweetwater condenser is a solution for HP steam desuperheating. + +The table below indicate the most important boundary conditions. + ++---------------------+---------------+-------+------+ +| Location | Parameter | Value | Unit | ++=====================+===============+=======+======+ +| process steam | :code:`m` | 160 | t/h | ++ +---------------+-------+------+ +| | :code:`Td_bp` | 10 | °C | ++ +---------------+-------+------+ +| | :code:`p` | 13 | bar | ++---------------------+---------------+-------+------+ +| live steam | :code:`T` | 480 | °C | ++ +---------------+-------+------+ +| | :code:`p` | 88.5 | bar | ++---------------------+---------------+-------+------+ +| gas turbine exhaust | :code:`T` | 720 | °C | ++---------------------+---------------+-------+------+ + +And the most important component parameters: + ++----------------------+---------------+-------+------+ +| Component | Parameter | Value | Unit | ++======================+===============+=======+======+ +| turbines | :code:`eta_s` | 90 | % | ++----------------------+---------------+-------+------+ +| pumps | :code:`eta_s` | 70 | % | ++----------------------+---------------+-------+------+ +| heat exchangers | :code:`pr` | 100 | % | ++----------------------+---------------+-------+------+ +| feed water preheater | :code:`pr` | 90 | % | ++----------------------+---------------+-------+------+ + +Steam supply and turbine section +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_p1.svg + :align: center + :alt: First part of the system + :figclass: only-light + + Figure: First part of the system + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_p1_darkmode.svg + :align: center + :alt: First part of the system + :figclass: only-dark + + Figure: First part of the system + +In the first part we will model the steam supply part and the turbine. We start +by importing the :code:`Network` class and creating an instance of it. + +.. literalinclude:: /../tutorial/advanced/hrsg.py + :language: python + :start-after: [sec_1] + :end-before: [sec_2] + +Components and Connections +++++++++++++++++++++++++++ + +For the components, we need to import the respective classes as shown in this +part of the flowsheet and create the respective instances. + +.. literalinclude:: /../tutorial/advanced/hrsg.py + :language: python + :start-after: [sec_2] + :end-before: [sec_3] + +The same applies for the connections. The extraction steam turbine is connected +to the live steam source. At a later stage, this connection will be replaced by +one that directly links the high pressure superheater 2. Similarly, the +connection 15 connects to a sink, which will be replaced by the low pressure +feed pump later. + +.. literalinclude:: /../tutorial/advanced/hrsg.py + :language: python + :start-after: [sec_3] + :end-before: [sec_4] + +Parametrization & solving ++++++++++++++++++++++++++ + +For the live steam at the turbine inlet we have to assume a steam mass flow. In +the completed model it will be governed from the flue gas mass flow. On top of +that, we need temperature and pressure information. For the steam supply a +pressure of 13 bar and 10 °C of superheating is required. There also is a +specific mass flow to be provided, which however cannot be directly as this +specification would cause convergence issues. Instead, massflow 3 is fixed +initially. The outlet of the condenser is saturated liquid at a temperature of +35 °C. The condensate pump pumps the pressure back to ambient pressure. It is +assumed that 75 % of the process steam leaving the plant returns in the form of +condensate. The remaining mass flow is replaced by the makeup water. + +.. literalinclude:: /../tutorial/advanced/hrsg.py + :language: python + :start-after: [sec_4] + :end-before: [sec_5] + +For the components we can specify the isentropic efficiencies of the turbines +and the pumps as well as the pressure ratio of the condensing turbine inlet +valve as well as the condenser pressure loss. Then we solve the system and +with the first solution, the extraction mass flow can be unset and instead, the +actual process steam mass flow is specified. + +.. literalinclude:: /../tutorial/advanced/hrsg.py + :language: python + :start-after: [sec_5] + :end-before: [sec_6] + +Low pressure preheating and high pressure economizer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_p2.svg + :align: center + :alt: Second part of the system + :figclass: only-light + + Figure: Second part of the system + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_p2_darkmode.svg + :align: center + :alt: Second part of the system + :figclass: only-dark + + Figure: Second part of the system + +Completing the Rankine cycle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_p3.svg + :align: center + :alt: Third part of the system + :figclass: only-light + + Figure: Third part of the system + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_p3_darkmode.svg + :align: center + :alt: Third part of the system + :figclass: only-dark + + Figure: Third part of the system + +Adding the exhaust gas +^^^^^^^^^^^^^^^^^^^^^^ + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet.svg + :align: center + :alt: Complete system + :figclass: only-light + + Figure: Complete system + +.. figure:: /_static/images/tutorials/hrsg_steam_supply/flowsheet_darkmode.svg + :align: center + :alt: First part of the system + :figclass: only-dark + + Figure: Complete system diff --git a/tutorial/advanced/hrsg.py b/tutorial/advanced/hrsg.py new file mode 100644 index 000000000..3fbd13b9d --- /dev/null +++ b/tutorial/advanced/hrsg.py @@ -0,0 +1,311 @@ +# %%[sec_1] +from tespy.networks import Network + +nw = Network( + T_unit="C", p_unit="bar", h_unit="kJ / kg", m_unit="t / h" +) +# %%[sec_2] +from tespy.components import Merge +from tespy.components import Pump +from tespy.components import SimpleHeatExchanger +from tespy.components import Sink +from tespy.components import Source +from tespy.components import Splitter +from tespy.components import Turbine +from tespy.components import Valve + +# sources & sinks +live_steam = Source("live steam") +makeup_water = Source("makeup water") +process_steam = Sink("process steam") +process_condensate = Source("process condensate") +pre_feed_water = Sink("pre_feed_water") + +# other components +extraction_turbine = Turbine("extraction turbine") +condensing_turbine = Turbine("condensing turbine") +condenser = SimpleHeatExchanger("condenser") +steam_cond_pump = Pump("steam conditioner pump") +condensate_pump = Pump("condensate pump") + +merge_1 = Merge("merge 1") +merge_2 = Merge("merge 2", num_in=3) +conditioning_valve = Valve("conditioning valve") +splitter_1 = Splitter("steam extraction") +splitter_2 = Splitter("condensate split") +# %%[sec_3] +from tespy.connections import Connection + + +c1 = Connection(live_steam, "out1", extraction_turbine, "in1", label="1") +c2 = Connection(extraction_turbine, "out1", splitter_1, "in1", label="2") +c3 = Connection(splitter_1, "out2", merge_1, "in2", label="3") + +c4 = Connection(splitter_1, "out1", conditioning_valve, "in1", label="4") +c5 = Connection(conditioning_valve, "out1", condensing_turbine, "in1", label="5") +c6 = Connection(condensing_turbine, "out1", condenser, "in1", label="6") +c7 = Connection(condenser, "out1", splitter_2, "in1", label="7") +c8 = Connection(splitter_2, "out1", condensate_pump, "in1", label="8") + +c9 = Connection(splitter_2, "out2", steam_cond_pump, "in1", label="9") +c10 = Connection(steam_cond_pump,"out1", merge_1,"in1", label="10") +c11 = Connection(merge_1, "out1",process_steam,"in1", label="11") + +c12 = Connection(condensate_pump,"out1", merge_2, "in1", label="12") +c13 = Connection(process_condensate, "out1", merge_2, "in2", label="13") +c14 = Connection(makeup_water,"out1", merge_2, "in3", label="14") +c15 = Connection(merge_2, "out1", pre_feed_water, "in1", label="15") + +nw.add_conns(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15) +# %%[sec_4] +from tespy.connections import Ref + + +Tamb = 15 +pamb = 1.013 + +c1.set_attr(fluid={"water": 1}, T=480, p=88.5, m=200) + +extraction_mass_flow = 160 # t/h +c3.set_attr(m=extraction_mass_flow) +c7.set_attr(x=0, T=Tamb + 18) + +process_steam_pressure = 13 +process_steam_superheating = 10 +c11.set_attr(Td_bp=process_steam_superheating, p=process_steam_pressure) +c12.set_attr(p=pamb) + +condensate_return_fraction = 0.75 +c13.set_attr(fluid={"water": 1}, x=0, m=Ref(c11, condensate_return_fraction, 0)) +c14.set_attr(fluid={"water": 1}, T=Tamb) +c15.set_attr(m=200) +# %%[sec_5] +extraction_turbine.set_attr(eta_s=0.9) +condensing_turbine.set_attr(eta_s=0.9) + +condenser.set_attr(pr=1) +conditioning_valve.set_attr(pr=0.85) +condensate_pump.set_attr(eta_s=0.7) +steam_cond_pump.set_attr(eta_s=0.7) + +nw.solve("design") + +c3.set_attr(m=None) +c11.set_attr(m=extraction_mass_flow) + +nw.solve("design") + +nw.print_results() +# %%[sec_6] +from tespy.components import Drum +from tespy.components import HeatExchanger + + +nw.del_conns(c15) + +steam_deaeration = Sink("steam deaeration") +to_hp_cond = Sink("to hp condenser") + +lp_feed_pump = Pump("lp feed pump") +hp_feed_pump = Pump("hp feed pump") + +lp_drum = Drum("low pressure drum") +splitter_3 = Splitter("splitter 3") +splitter_4 = Splitter("splitter 4") +merge_3 = Merge("merge 3") + +lp_evaporator = SimpleHeatExchanger("low pressure evaporator") +feed_water_preheater = HeatExchanger("feed water preheater") +hp_eco_1 = SimpleHeatExchanger("high pressure economizer 1") +hp_eco_2 = SimpleHeatExchanger("high pressure economizer 2") + +c15 = Connection(merge_2, "out1", lp_feed_pump, "in1", label="15") +c16 = Connection(lp_feed_pump, "out1", feed_water_preheater, "in2", label="16") +c17 = Connection(feed_water_preheater, "out2", lp_drum, "in1", label="17") +c18 = Connection(lp_drum, "out1", splitter_3, "in1", label="18") + +c19 = Connection(splitter_3, "out1", lp_evaporator, "in1", label="19") +c20 = Connection(lp_evaporator, "out1", lp_drum, "in2", label="20") +c21 = Connection(lp_drum, "out2", steam_deaeration, "in1", label="21") + +c22 = Connection(splitter_3, "out2", feed_water_preheater, "in1", label="22") +c23 = Connection(feed_water_preheater, "out1", hp_feed_pump, "in1", label="23") +c24 = Connection(hp_feed_pump, "out1", splitter_4, "in1", label="24") + +c25 = Connection(splitter_4, "out1", hp_eco_1, "in1", label="25") +c26 = Connection(hp_eco_1, "out1", hp_eco_2, "in1", label="26") +c27 = Connection(hp_eco_2, "out1", merge_3, "in1", label="27") + +c28 = Connection(splitter_4, "out2", merge_3, "in2", label="28") +c29 = Connection(merge_3, "out1", to_hp_cond, "in1", label="29") + +nw.add_conns(c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29) +# %%[sec_7] +c16.set_attr(p=2.3, T=55) +c17.set_attr(T=100, p0=2.3) +c20.set_attr(x=.05) +c21.set_attr(m=0.1) + +c24.set_attr(p=88.5) +c26.set_attr(T=116, p0=88.5) +c27.set_attr(T=231, p0=88.5) +c28.set_attr(m=0) + +lp_feed_pump.set_attr(eta_s=0.7) +hp_feed_pump.set_attr(eta_s=0.7) + +feed_water_preheater.set_attr(pr1=0.9, pr2=0.9) + +hp_eco_2.set_attr(pr=1) + +nw.solve("design") +nw.print_results() +# %%[sec_8] +nw.del_conns(c29, c1) + +hp_blowdown = Sink("hp blowdown") + +hp_drum = Drum("high pressure drum") +splitter_5 = Splitter("splitter 5") +splitter_6 = Splitter("splitter 6") +merge_4 = Merge("merge 4") + +hp_condenser = HeatExchanger("hp condenser") +hp_eco_3 = SimpleHeatExchanger("high pressure economizer 3") +hp_evaporator = SimpleHeatExchanger("high pressure evaporator") +hp_s_1 = SimpleHeatExchanger("high pressure superheater 1") +hp_s_2 = SimpleHeatExchanger("high pressure superheater 2") + +c29 = Connection(merge_3, "out1", hp_condenser, "in2", label="29") +c30 = Connection(hp_condenser, "out2", hp_eco_3, "in1", label="30") +c31 = Connection(hp_eco_3, "out1", hp_drum, "in1", label="31") +c32 = Connection(hp_drum, "out1", splitter_5, "in1", label="32") + +c33 = Connection(splitter_5, "out1", hp_blowdown, "in1", label="33") + +c34 = Connection(splitter_5, "out2", hp_evaporator, "in1", label="34") +c35 = Connection(hp_evaporator, "out1", hp_drum, "in2", label="35") + +c36 = Connection(hp_drum, "out2", splitter_6, "in1", label="36") + +c37 = Connection(splitter_6, "out1", hp_condenser, "in1", label="37") +c38 = Connection(hp_condenser, "out1", merge_4, "in1", label="38") + +c39 = Connection(splitter_6, "out2", hp_s_1, "in1", label="39") +c40 = Connection(hp_s_1, "out1", merge_4, "in2", label="40") +c41 = Connection(merge_4, "out1", hp_s_2, "in1", label="41") + +c42 = Connection(hp_s_2, "out1", extraction_turbine, "in1", label="42") + +nw.add_conns(c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42) +# %%[sec_9] +from tespy.connections import Bus + + +c31.set_attr(T=290, p0=88.5) +c33.set_attr(m=2) +c35.set_attr(x=0.05) +c38.set_attr(x=0) +c40.set_attr(T=529) +c41.set_attr(T=429) +c42.set_attr(fluid={"water": 1}, T=480) + +hp_condenser.set_attr(pr1=1, pr2=1) +hp_eco_3.set_attr(pr=1) +hp_s_2.set_attr(pr=1) + +power_output = Bus("power output") +power_output.add_comps( + {"comp": extraction_turbine, "base": "component", "char": 0.97}, + {"comp": condensing_turbine, "base": "component", "char": 0.97}, + {"comp": condensate_pump, "base": "bus", "char": 0.97}, + {"comp": steam_cond_pump, "base": "bus", "char": 0.97}, + {"comp": lp_feed_pump, "base": "bus", "char": 0.97}, + {"comp": hp_feed_pump, "base": "bus", "char": 0.97} +) +nw.add_busses(power_output) + +nw.solve("design") +nw.print_results() +# %% [sec_10] +nw.del_conns(c19, c20, c25, c26, c27, c30, c31, c34, c35, c39, c40, c41, c42) + +lp_evaporator = HeatExchanger("low pressure evaporator") +hp_eco_1 = HeatExchanger("high pressure economizer 1") +hp_eco_2 = HeatExchanger("high pressure economizer 2") +hp_eco_3 = HeatExchanger("high pressure economizer 3") +hp_evaporator = HeatExchanger("high pressure evaporator") +hp_s_1 = HeatExchanger("high pressure superheater 1") +hp_s_2 = HeatExchanger("high pressure superheater 2") + +c19 = Connection(splitter_3, "out1", lp_evaporator, "in2", label="19") +c20 = Connection(lp_evaporator, "out2", lp_drum, "in2", label="20") + +c25 = Connection(splitter_4, "out1", hp_eco_1, "in2", label="25") +c26 = Connection(hp_eco_1, "out2", hp_eco_2, "in2", label="26") +c27 = Connection(hp_eco_2, "out2", merge_3, "in1", label="27") + +c30 = Connection(hp_condenser, "out2", hp_eco_3, "in2", label="30") +c31 = Connection(hp_eco_3, "out2", hp_drum, "in1", label="31") + +c34 = Connection(splitter_5, "out2", hp_evaporator, "in2", label="34") +c35 = Connection(hp_evaporator, "out2", hp_drum, "in2", label="35") + +c39 = Connection(splitter_6, "out2", hp_s_1, "in2", label="39") +c40 = Connection(hp_s_1, "out2", merge_4, "in2", label="40") +c41 = Connection(merge_4, "out1", hp_s_2, "in2", label="41") + +c42 = Connection(hp_s_2, "out2", extraction_turbine, "in1", label="42") +nw.add_conns(c19, c20, c25, c26, c27, c30, c31, c34, c35, c39, c40, c41, c42) + +c20.set_attr(x=.05) +c26.set_attr(T=116) +c27.set_attr(T=231, p0=88.5) +c31.set_attr(T=290, p0=88.5) +c33.set_attr(m=2) +c35.set_attr(x=0.05) +c38.set_attr(x=0) +c40.set_attr(T=529) +c41.set_attr(T=429) +c42.set_attr(fluid={"water": 1}, T=480) + +gt_exhaust = Source("gas turbine exhaust") +chimney = Sink("chimney") + +c43 = Connection(gt_exhaust, "out1", hp_s_2, "in1", label="43") +c44 = Connection(hp_s_2, "out1", hp_s_1, "in1", label="44") +c45 = Connection(hp_s_1, "out1", hp_evaporator, "in1", label="45") +c46 = Connection(hp_evaporator, "out1", hp_eco_3, "in1", label="46") +c47 = Connection(hp_eco_3, "out1", hp_eco_2, "in1", label="47") +c48 = Connection(hp_eco_2, "out1", lp_evaporator, "in1", label="48") +c49 = Connection(lp_evaporator, "out1", hp_eco_1, "in1", label="49") +c50 = Connection(hp_eco_1, "out1", chimney, "in1", label="50") +nw.add_conns(c43, c44, c45, c46, c47, c48, c49, c50) + +x_gh_CO2 = 0.061 +x_gh_H2O = 0.07768 +x_gh_N2 = 0.7364 +x_gh_O2 = 0.1126 +x_gh_Ar = 1 - x_gh_CO2 - x_gh_H2O - x_gh_N2 - x_gh_O2 + +T_gh = 713 +G_gh = 4 * 482 +c43.set_attr( + fluid={"O2": x_gh_O2, "N2": x_gh_N2, "CO2": x_gh_CO2, "water": x_gh_H2O, "Ar": x_gh_Ar}, + m=G_gh, + T=T_gh, + p=pamb, +) + +lp_evaporator.set_attr(pr1=1) +hp_eco_1.set_attr(pr1=1) +hp_eco_2.set_attr(pr1=1, pr2=1) +hp_eco_3.set_attr(pr1=1, pr2=1) + +hp_evaporator.set_attr(pr1=1) +hp_s_1.set_attr(pr1=1) +hp_s_2.set_attr(pr1=1, pr2=1) + +nw.solve("design") +nw.print_results() +# %% [sec_11]