.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "api/gallery/seismology/plot_10_lehmann_inner_core.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_seismology_plot_10_lehmann_inner_core.py: Lehmann's inner core (1936) =========================== Inge Lehmann noticed weak P arrivals inside the core shadow zone. She explained them with an inner core faster than the outer core: rays meeting it beyond the critical angle are totally reflected and emerge in the shadow. In this straight-ray toy Earth (mantle 13 km/s, outer core 8 km/s, inner core 11 km/s, inner-core radius 1220 km) the post-critical reflections fill the shadow zone of the 1914 example. .. GENERATED FROM PYTHON SOURCE LINES 12-40 .. image-sg:: /api/gallery/seismology/images/sphx_glr_plot_10_lehmann_inner_core_001.png :alt: Inner-core reflections reach the shadow :srcset: /api/gallery/seismology/images/sphx_glr_plot_10_lehmann_inner_core_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none critical angle 46.7 deg; total reflections from 87 to 170 deg | .. code-block:: Python import matplotlib.pyplot as plt import numpy as np from earthsciencekit.seismology import critical_angle, ray_parameter R, rc, ri = 6371e3, 3480e3, 1220e3 vm, vc, vi = 13e3, 8e3, 11e3 shadow = (np.degrees(2 * np.arccos(rc / R)), 143.1) p = ray_parameter(R, vm, np.linspace(1e-4, np.arcsin(rc / R) - 1e-6, 4000)) b_mantle, b_core = p * vm, p * vc hits = b_core < ri b_mantle, b_core = b_mantle[hits], b_core[hits] distance = 2 * (np.arccos(b_mantle / R) - np.arccos(b_mantle / rc)) + 2 * (np.arccos(b_core / rc) - np.arccos(b_core / ri)) incidence = np.arcsin(b_core / ri) total = incidence >= critical_angle(vc, vi) lit = np.degrees(distance[total]) assert lit.min() < shadow[0] and lit.max() > shadow[1] print(f"critical angle {np.degrees(critical_angle(vc, vi)):.1f} deg; total reflections from {lit.min():.0f} to {lit.max():.0f} deg") fig, ax = plt.subplots() ax.plot(np.degrees(incidence), np.degrees(distance)) ax.axvline(np.degrees(critical_angle(vc, vi)), color="k", ls=":", label="critical angle") ax.axhspan(*shadow, color="0.85", label="shadow zone") ax.set(xlabel="incidence on the inner core [deg]", ylabel="epicentral distance [deg]", title="Inner-core reflections reach the shadow") ax.legend() plt.show() .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.085 seconds) .. _sphx_glr_download_api_gallery_seismology_plot_10_lehmann_inner_core.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/seismology/plot_10_lehmann_inner_core.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_10_lehmann_inner_core.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_10_lehmann_inner_core.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_10_lehmann_inner_core.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_