.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "api/gallery/structure/ring_strain/plot_01_baeyer_angle_strain.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. .. rst-class:: sphx-glr-example-title .. _sphx_glr_api_gallery_structure_ring_strain_plot_01_baeyer_angle_strain.py: Baeyer's strain theory: angle strain in planar cycloalkane rings ================================================================ Adolf von Baeyer (1885) combined van't Hoff's tetrahedral carbon with the assumption that rings are flat. A planar ring of :math:`n` carbons has interior angles :math:`180^\circ(n-2)/n`, so each bond must bend away from the tetrahedral 109.47 degrees by .. math:: \delta(n) = \tfrac{1}{2}\left[109.47^\circ - \frac{180^\circ\,(n-2)}{n}\right]. The theory correctly explains why three- and four-membered rings are strained and five- and six-membered rings are common. It wrongly predicts growing strain for larger rings: real rings pucker. This example computes Baeyer's :math:`\delta(n)` with :func:`~chemistrykit.structure.systems.ring_strain.baeyer_angle_strain`, compares it with measured strain energies, and builds a chair cyclohexane whose angles are exactly tetrahedral. .. GENERATED FROM PYTHON SOURCE LINES 24-42 .. code-block:: Python import matplotlib.pyplot as plt import numpy as np from chemistrykit.structure.core.base_system import Molecule, angle_between from chemistrykit.structure.systems.ring_strain import TETRAHEDRAL_ANGLE, baeyer_angle_strain, chair_cyclohexane_coordinates, planar_ring_angle from chemistrykit.structure.visualizers.structure_plots import plot_molecule_3d sizes = np.arange(3, 9) # Total ring strain energies of the cycloalkanes (CH2)n from heats of # combustion, kJ/mol (standard textbook values). measured_strain = {3: 115.0, 4: 110.0, 5: 26.0, 6: 0.0, 7: 26.0, 8: 40.0} for n in sizes: d = baeyer_angle_strain(int(n)) angle = planar_ring_angle(int(n)) strain = measured_strain[int(n)] print(f"C{n}H{2 * n}: planar angle {angle:6.2f} deg, Baeyer strain {d:+6.2f} deg/bond, measured ring strain {strain:5.0f} kJ/mol") .. rst-class:: sphx-glr-script-out .. code-block:: none C3H6: planar angle 60.00 deg, Baeyer strain +24.74 deg/bond, measured ring strain 115 kJ/mol C4H8: planar angle 90.00 deg, Baeyer strain +9.74 deg/bond, measured ring strain 110 kJ/mol C5H10: planar angle 108.00 deg, Baeyer strain +0.74 deg/bond, measured ring strain 26 kJ/mol C6H12: planar angle 120.00 deg, Baeyer strain -5.26 deg/bond, measured ring strain 0 kJ/mol C7H14: planar angle 128.57 deg, Baeyer strain -9.55 deg/bond, measured ring strain 26 kJ/mol C8H16: planar angle 135.00 deg, Baeyer strain -12.76 deg/bond, measured ring strain 40 kJ/mol .. GENERATED FROM PYTHON SOURCE LINES 43-46 Baeyer's cyclohexane, if planar, would have 120 degree angles and a strain of -5.26 degrees per bond. The chair form removes it entirely: every C-C-C angle is tetrahedral. .. GENERATED FROM PYTHON SOURCE LINES 46-52 .. code-block:: Python chair = chair_cyclohexane_coordinates(bond_length=1.54) angles = [angle_between(chair[k - 1] - chair[k], chair[(k + 1) % 6] - chair[k]) for k in range(6)] print(f"\nchair cyclohexane C-C-C angles: {np.round(angles, 4)} (tetrahedral = {TETRAHEDRAL_ANGLE:.4f})") assert np.allclose(angles, TETRAHEDRAL_ANGLE) .. rst-class:: sphx-glr-script-out .. code-block:: none chair cyclohexane C-C-C angles: [109.4712 109.4712 109.4712 109.4712 109.4712 109.4712] (tetrahedral = 109.4712) .. GENERATED FROM PYTHON SOURCE LINES 53-70 .. code-block:: Python fig = plt.figure(figsize=(12, 4.5)) ax1 = fig.add_subplot(1, 2, 1) ax1.bar(sizes - 0.2, [baeyer_angle_strain(int(n)) for n in sizes], width=0.4, color="C0", label="Baeyer angle strain (deg/bond)") ax1.axhline(0.0, color="gray", linewidth=0.8) ax1.set_xlabel("ring size n") ax1.set_ylabel("Baeyer strain (degrees per bond)", color="C0") ax1b = ax1.twinx() ax1b.bar(sizes + 0.2, [measured_strain[int(n)] for n in sizes], width=0.4, color="C1", label="measured strain energy") ax1b.set_ylabel("measured ring strain (kJ/mol)", color="C1") ax1.set_title("Baeyer's planar-ring prediction vs experiment") ax2 = fig.add_subplot(1, 2, 2, projection="3d") ring = Molecule(symbols=["C"] * 6, coordinates=chair, bonds=[(k, (k + 1) % 6) for k in range(6)]) plot_molecule_3d(ring, ax=ax2) ax2.set_title("Chair cyclohexane: puckered, no angle strain") fig.tight_layout() plt.show() .. image-sg:: /api/gallery/structure/ring_strain/images/sphx_glr_plot_01_baeyer_angle_strain_001.png :alt: Baeyer's planar-ring prediction vs experiment, Chair cyclohexane: puckered, no angle strain :srcset: /api/gallery/structure/ring_strain/images/sphx_glr_plot_01_baeyer_angle_strain_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.096 seconds) .. _sphx_glr_download_api_gallery_structure_ring_strain_plot_01_baeyer_angle_strain.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_01_baeyer_angle_strain.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_01_baeyer_angle_strain.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_01_baeyer_angle_strain.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_