#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ inner-core-deforming.py ======================== Science Journaling Club -- Field Note companion calculation for: Vidale, J. E., Wang, W., Wang, R., Pang, G. & Koper, K. (2025). Annual-scale variability in both the rotation rate and near surface of Earth's inner core. Nature Geoscience 18, 267-272. doi:10.1038/s41561-025-01642-2 WHAT THIS IS, AND WHAT IT IS NOT -------------------------------- The paper is a seismic-waveform analysis: it does no arithmetic like the kind below at all. Everything here is the club's own illustrative arithmetic, built entirely from published constants -- the PREM and ak135 reference Earth models, NASA's lunar fact sheet, and the Tian & Wen (2017) mushy-zone thickness -- run through equations any reader can check by hand. Nothing here is a measurement, and nothing here should be attributed to Vidale et al. (2025) or to any of the papers it cites. Two things this script does NOT attempt: it does not fabricate a numeric rotation rate (degrees per year) for the inner core, because neither the 2025 paper's abstract nor its 2024 predecessor's abstract gives one in a form we could verify independently; and it does not claim the 4-8 km mushy zone from Tian & Wen (2017) is the thickness of whatever changed at the Yellowknife array between 2004 and 2008 -- that is a different, specific patch of the inner-core boundary, studied with a different method entirely. SOURCES FOR EVERY CONSTANT USED -------------------------------- - Inner-core radius, PREM model: 1221.5 km Dziewonski, A. M. & Anderson, D. L. (1981). Preliminary reference Earth model. Phys. Earth Planet. Inter. 25, 297-356. doi:10.1016/0031-9201(81)90046-7 - Inner-core radius, ak135 model: ~1217 km Kennett, B. L. N., Engdahl, E. R. & Buland, R. (1995). Constraints on seismic velocities in the Earth from traveltimes. Geophys. J. Int. 122, 108-124. doi:10.1111/j.1365-246X.1995.tb03540.x (This is the travel-time model cited in Vidale et al. 2025's own reference list, used here only for a sanity-check comparison.) - Moon volume (published): 2.1968e10 km^3 Moon volumetric mean radius: 1737.4 km NASA Goddard Space Flight Center, NSSDC (2024). Moon Fact Sheet. nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html - Localized mushy-zone thickness at the inner-core boundary: 4-8 km (a different location, southwest Okhotsk Sea, found by waveform modelling of boundary-reflected P-waves, not PKIKP doublets) Tian, D. & Wen, L. (2017). Seismological evidence for a localized mushy zone at the Earth's inner core boundary. Nat. Commun. 8, 165. doi:10.1038/s41467-017-00229-9 - Rotation-history timing (years only, no rate): Wang, W., Vidale, J. E., Pang, G., Koper, K. D. & Wang, R. (2024). Inner core backtracking by seismic waveform change reversals. Nature 631, 340-343. doi:10.1038/s41586-024-07536-4 -- super-rotation 2003 to 2008 (5 years) -- sub-rotation 2008 to 2023 (15 years), reported "two to three times more slowly" than the super-rotation phase. - Dataset size: 2024 paper: 121 earthquakes, 143 pairs, 16 multiplet families. 2025 paper: extends this with 7 more events and 25 more pairs (Vidale et al. 2025, "Additional information" / data note). ============================================================================= PART A -- SIZE: THE INNER CORE AGAINST THE MOON ============================================================================= """ import math PREM_RADIUS_KM = 1221.5 # Dziewonski & Anderson (1981) AK135_RADIUS_KM = 1217.0 # Kennett, Engdahl & Buland (1995), rounded MOON_VOLUME_KM3 = 2.1968e10 # NASA fact sheet, published figure MOON_RADIUS_KM = 1737.4 # NASA fact sheet, published figure MUSHY_MIN_KM = 4.0 # Tian & Wen (2017), a different ICB patch MUSHY_MAX_KM = 8.0 # Tian & Wen (2017) SUPER_ROTATION_YEARS = 2008 - 2003 # 5, from Wang et al. (2024) SUB_ROTATION_YEARS = 2023 - 2008 # 15, from Wang et al. (2024) EVENTS_2024, PAIRS_2024, MULTIPLETS_2024 = 121, 143, 16 NEW_EVENTS_2025, NEW_PAIRS_2025 = 7, 25 def sphere_volume(radius_km): return (4.0 / 3.0) * math.pi * radius_km ** 3 def part_a_size(): v_ic = sphere_volume(PREM_RADIUS_KM) ratio_moon = v_ic / MOON_VOLUME_KM3 radius_ratio = PREM_RADIUS_KM / MOON_RADIUS_KM print("PART A -- SIZE, AGAINST SOMETHING YOU CAN PICTURE") print("-" * 60) print(f" inner-core radius (PREM): {PREM_RADIUS_KM:.1f} km") print(f" inner-core radius (ak135): {AK135_RADIUS_KM:.1f} km") print(f" inner-core volume: {v_ic:.4e} km^3") print(f" Moon volume (NASA): {MOON_VOLUME_KM3:.4e} km^3") print(f" volume ratio, inner core/Moon: {ratio_moon * 100:.1f}%") print(f" radius ratio, inner core/Moon: {radius_ratio * 100:.1f}%") print() return v_ic, ratio_moon """ ============================================================================= PART B -- THINNESS: THE MUSHY ZONE AS A FRACTION OF THE RADIUS ============================================================================= Tian & Wen (2017) report a 4-8 km thick locally "mushy" zone at the inner-core boundary beneath the southwest Okhotsk Sea -- a real, published number, but for a different patch of the boundary than the one Vidale et al. (2025) study. We divide it by the PREM radius purely to get a feel for the order of magnitude a real, seismically detectable "soft" layer at this boundary can have. """ def part_b_thinness(): frac_min = MUSHY_MIN_KM / PREM_RADIUS_KM * 100 frac_max = MUSHY_MAX_KM / PREM_RADIUS_KM * 100 print("PART B -- THINNESS, AGAINST THE WHOLE RADIUS") print("-" * 60) print(f" mushy zone (Tian & Wen 2017): {MUSHY_MIN_KM:.0f}-{MUSHY_MAX_KM:.0f} km") print(f" as a fraction of PREM radius: {frac_min:.3f}% to {frac_max:.3f}%") print(f" i.e. roughly 1 part in {PREM_RADIUS_KM / MUSHY_MAX_KM:.0f}" f" to 1 part in {PREM_RADIUS_KM / MUSHY_MIN_KM:.0f} of the radius") print() return frac_min, frac_max """ ============================================================================= PART C -- SANITY-CHECKING THE ROTATION-REVERSAL TIMING ============================================================================= Wang et al. (2024) report that the inner core super-rotated 2003-2008 (5 years) and then sub-rotated 2008-2023 (15 years) "two to three times more slowly." If sub-rotation retraces the same rotational distance at 1/2 to 1/3 the rate, plain ratio arithmetic predicts how long that retracing should take -- and we can check it against the reported 15-year window. This is a consistency check on the abstract's own two headline numbers, not a new finding. """ def part_c_rotation_check(): predicted_low = SUPER_ROTATION_YEARS * 2 # "two times slower" predicted_high = SUPER_ROTATION_YEARS * 3 # "three times slower" implied_factor = SUB_ROTATION_YEARS / SUPER_ROTATION_YEARS print("PART C -- DOES THE ROTATION-REVERSAL TIMING ADD UP?") print("-" * 60) print(f" super-rotation window: 2003-2008 ({SUPER_ROTATION_YEARS} years)") print(f" sub-rotation window: 2008-2023 ({SUB_ROTATION_YEARS} years)") print(f" predicted retrace time at 2x-3x slower: " f"{predicted_low}-{predicted_high} years") print(f" reported retrace time: {SUB_ROTATION_YEARS} years") print(f" implied slowdown factor: {implied_factor:.2f}x") ok = predicted_low <= SUB_ROTATION_YEARS <= predicted_high print(f" falls inside the reported '2x-3x slower' range: {ok}") print() return implied_factor """ ============================================================================= PART D -- HOW MUCH BIGGER IS THE 2025 DATASET? ============================================================================= Plain bookkeeping on the two papers' own reported counts. """ def part_d_dataset_growth(): events_2025 = EVENTS_2024 + NEW_EVENTS_2025 pairs_2025 = PAIRS_2024 + NEW_PAIRS_2025 print("PART D -- DATASET GROWTH, 2024 PAPER TO 2025 PAPER") print("-" * 60) print(f" 2024 paper: {EVENTS_2024} events, {PAIRS_2024} pairs, " f"{MULTIPLETS_2024} multiplet families") print(f" 2025 paper: +{NEW_EVENTS_2025} events, +{NEW_PAIRS_2025} pairs") print(f" 2025 paper totals (informal): {events_2025} events, " f"{pairs_2025} pairs") print() return events_2025, pairs_2025 if __name__ == "__main__": print("=" * 60) print("Science Journaling Club -- club arithmetic for") print("'The Iron Ball at the Center of the Earth Keeps") print(" Changing Its Skin' (Vidale et al. 2025)") print("=" * 60) print() part_a_size() part_b_thinness() part_c_rotation_check() part_d_dataset_growth() print("Every number above is either a published constant (cited in the") print("field note's references) or plain arithmetic on those constants.") print("None of it is drawn from, or attributed to, Vidale et al. (2025).")