.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "api/gallery/materials/composites/plot_01_voigt_reuss_bounds.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_materials_composites_plot_01_voigt_reuss_bounds.py: Voigt and Reuss: bounds on a composite's stiffness (1889-1929) ============================================================== How stiff is a mixture of two phases? Woldemar Voigt (1889) averaged the elastic constants of the crystals in a polycrystal on the assumption that all of them strain alike; Adolf Reuss (1929) averaged the compliances on the assumption that all carry the same stress. For a fibre composite the two assumptions are exact along and across the fibres (:func:`~engineeringkit.materials.rule_of_mixtures_E_longitudinal`, :func:`~engineeringkit.materials.rule_of_mixtures_E_transverse`), and Hill (1952) proved that every other arrangement lies between them. The example builds both from springs and checks a glass-epoxy laminate. .. GENERATED FROM PYTHON SOURCE LINES 17-22 .. code-block:: Python import matplotlib.pyplot as plt import numpy as np from engineeringkit.materials import density_rule_of_mixtures, rule_of_mixtures_E_longitudinal, rule_of_mixtures_E_transverse .. GENERATED FROM PYTHON SOURCE LINES 23-30 Springs in parallel and in series --------------------------------- A unit cube with a fibre fraction :math:`V_f` is a slab of fibre and a slab of matrix. Loaded along the slabs, they are springs in parallel with stiffnesses :math:`E_f V_f` and :math:`E_m(1 - V_f)`; loaded across them, springs in series with :math:`E_f/V_f` and :math:`E_m/(1 - V_f)`. .. GENERATED FROM PYTHON SOURCE LINES 30-39 .. code-block:: Python Ef, Em, Vf = 72e9, 3.5e9, 0.55 parallel = Ef * Vf + Em * (1 - Vf) series = 1 / (1 / (Ef / Vf) + 1 / (Em / (1 - Vf))) E1, E2 = rule_of_mixtures_E_longitudinal(Ef, Em, Vf), rule_of_mixtures_E_transverse(Ef, Em, Vf) rho = density_rule_of_mixtures(2540.0, 1200.0, Vf) print(f"glass-epoxy at Vf = {Vf}: E1 = {E1 / 1e9:.1f} GPa, E2 = {E2 / 1e9:.2f} GPa, density {rho:.0f} kg/m^3") assert np.isclose(E1, parallel) and np.isclose(E2, series) .. rst-class:: sphx-glr-script-out .. code-block:: none glass-epoxy at Vf = 0.55: E1 = 41.2 GPa, E2 = 7.34 GPa, density 1937 kg/m^3 .. GENERATED FROM PYTHON SOURCE LINES 40-46 The bounds and the gap between them ----------------------------------- Any microstructure, particles, random fibres or foam, has a modulus in the shaded band. The band is wide when the phases differ a lot: at :math:`V_f = 0.5` the bounds differ by a factor of about 6. .. GENERATED FROM PYTHON SOURCE LINES 46-64 .. code-block:: Python fractions = np.linspace(0, 1, 201) voigt = rule_of_mixtures_E_longitudinal(Ef, Em, fractions) reuss = rule_of_mixtures_E_transverse(Ef, Em, fractions) hill = (voigt + reuss) / 2 assert np.all(reuss <= hill) and np.all(hill <= voigt) and np.all(np.diff(voigt) > 0) print(f"Voigt / Reuss at Vf = 0.5: {voigt[100] / reuss[100]:.1f}") fig, ax = plt.subplots(figsize=(6, 3.8)) ax.fill_between(fractions, reuss / 1e9, voigt / 1e9, alpha=0.2, label="attainable") ax.plot(fractions, voigt / 1e9, label="Voigt (equal strain)") ax.plot(fractions, reuss / 1e9, label="Reuss (equal stress)") ax.plot(fractions, hill / 1e9, "k--", lw=1, label="Hill average") ax.set(xlabel="fibre volume fraction", ylabel="modulus [GPa]", title="Glass fibre in epoxy") ax.legend() fig.tight_layout() plt.show() .. image-sg:: /api/gallery/materials/composites/images/sphx_glr_plot_01_voigt_reuss_bounds_001.png :alt: Glass fibre in epoxy :srcset: /api/gallery/materials/composites/images/sphx_glr_plot_01_voigt_reuss_bounds_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none Voigt / Reuss at Vf = 0.5: 5.7 .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.031 seconds) .. _sphx_glr_download_api_gallery_materials_composites_plot_01_voigt_reuss_bounds.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/materials/composites/plot_01_voigt_reuss_bounds.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_01_voigt_reuss_bounds.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_01_voigt_reuss_bounds.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_01_voigt_reuss_bounds.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_