.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "api/gallery/thermodynamics/cycles/plot_08_rankine_reheat_regeneration.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code or to run this example in your browser via JupyterLite. .. rst-class:: sphx-glr-example-title .. _sphx_glr_api_gallery_thermodynamics_cycles_plot_08_rankine_reheat_regeneration.py: Rankine's cycle with reheat and feedwater heating (1859) ======================================================== Rankine's pump, boiler, engine and condenser became the modern power station by three changes that raise the mean temperature at which heat is added. Superheating heats the steam beyond saturation. Reheating returns it to the boiler halfway through the expansion. Feedwater heating preheats the boiler water with steam bled from the turbine. Each also keeps the turbine exhaust dry. :func:`~engineeringkit.thermodynamics.rankine_cycle` analyses the plant state by state with IAPWS-IF97. The example reproduces Çengel and Boles's three textbook plants at 15 MPa, 600 °C and 10 kPa. .. GENERATED FROM PYTHON SOURCE LINES 16-21 .. code-block:: Python import matplotlib.pyplot as plt import numpy as np from engineeringkit.thermodynamics import carnot_efficiency, rankine_cycle, saturation_temperature .. GENERATED FROM PYTHON SOURCE LINES 22-24 Simple, reheat and regenerative plants -------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 24-41 .. code-block:: Python plants = { "simple": rankine_cycle(15e6, 10e3, 873.15), "reheat at 4 MPa": rankine_cycle(15e6, 10e3, 873.15, reheat_pressure=4e6, T_reheat=873.15), "open heater at 1.2 MPa": rankine_cycle(15e6, 10e3, 873.15, feedwater_pressure=1.2e6), "both": rankine_cycle(15e6, 10e3, 873.15, reheat_pressure=4e6, T_reheat=873.15, feedwater_pressure=1.2e6), } for name, res in plants.items(): s = res.summary() quality, bleed = s["turbine_exit_quality"], s["bleed_fraction"] print(f"{name:24s} η = {s['efficiency']:.3f}, exit quality {quality:.3f}, bleed {bleed:.3f}, net {s['net_work'] / 1e3:.0f} kJ/kg") # Çengel and Boles, Examples 10-3, 10-4 and 10-5: 43.0%, 45.0% and 46.3% assert [round(plants[k].efficiency, 3) for k in ("simple", "reheat at 4 MPa", "open heater at 1.2 MPa")] == [0.430, 0.450, 0.463] fig, ax = plants["both"].plot() ax.set(xlim=(0, 9)) .. image-sg:: /api/gallery/thermodynamics/cycles/images/sphx_glr_plot_08_rankine_reheat_regeneration_001.png :alt: Rankine cycle, η = 47.7% :srcset: /api/gallery/thermodynamics/cycles/images/sphx_glr_plot_08_rankine_reheat_regeneration_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none simple η = 0.430, exit quality 0.804, bleed 0.000, net 1453 kJ/kg reheat at 4 MPa η = 0.450, exit quality 0.896, bleed 0.000, net 1753 kJ/kg open heater at 1.2 MPa η = 0.463, exit quality 0.804, bleed 0.227, net 1283 kJ/kg both η = 0.477, exit quality 0.896, bleed 0.198, net 1570 kJ/kg [(0.0, 9.0)] .. GENERATED FROM PYTHON SOURCE LINES 42-48 Real turbines and pumps ----------------------- With 87% efficient turbines and 85% efficient pumps the same plant loses several points. Its efficiency is still well under the Carnot bound between the 600 °C steam and the condenser. .. GENERATED FROM PYTHON SOURCE LINES 48-65 .. code-block:: Python real = rankine_cycle( 15e6, 10e3, 873.15, reheat_pressure=4e6, T_reheat=873.15, feedwater_pressure=1.2e6, turbine_efficiency=0.87, pump_efficiency=0.85 ) carnot = carnot_efficiency(873.15, float(saturation_temperature(10e3))) print(f"real plant η = {real.efficiency:.3f}; Carnot between 600 °C and the condenser {carnot:.3f}") assert real.efficiency < plants["both"].efficiency < carnot bleeds = np.linspace(0.2e6, 3.5e6, 15) fig, ax = plt.subplots(figsize=(6, 3.5)) ax.plot(bleeds / 1e6, [rankine_cycle(15e6, 10e3, 873.15, feedwater_pressure=p).efficiency for p in bleeds]) ax.axhline(plants["simple"].efficiency, color="gray", ls=":", label="no feedwater heater") ax.set(xlabel="feedwater heater pressure [MPa]", ylabel="efficiency", title="One open feedwater heater") ax.legend() fig.tight_layout() plt.show() .. image-sg:: /api/gallery/thermodynamics/cycles/images/sphx_glr_plot_08_rankine_reheat_regeneration_002.png :alt: One open feedwater heater :srcset: /api/gallery/thermodynamics/cycles/images/sphx_glr_plot_08_rankine_reheat_regeneration_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none real plant η = 0.428; Carnot between 600 °C and the condenser 0.635 .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.517 seconds) .. _sphx_glr_download_api_gallery_thermodynamics_cycles_plot_08_rankine_reheat_regeneration.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: lite-badge .. image:: images/jupyterlite_badge_logo.svg :target: ../../../../lite/lab/index.html?path=api/gallery/thermodynamics/cycles/plot_08_rankine_reheat_regeneration.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_08_rankine_reheat_regeneration.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_08_rankine_reheat_regeneration.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_08_rankine_reheat_regeneration.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_