<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Where the ground goes — Andrew Silvestri</title>
<meta name="description" content="Plate interiors hold their shape to about half a millimetre a year, and nobody can tell you where they will be. Computed from {{n_all}} GNSS stations, eight published reconstructions and four published futures.">
<link rel="icon" href="favicon.svg" type="image/svg+xml">
<link rel="alternate icon" href="favicon.png">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<meta name="theme-color" content="#F2F0EF">
<link rel="canonical" href="https://andrewsilvestri.com/continents.html">
<script>try{document.documentElement.dataset.motion=matchMedia('(prefers-reduced-motion: reduce)').matches?'off':'on';}catch(e){document.documentElement.dataset.motion='on';}</script>
<link rel="stylesheet" href="style.css">
</head><body>
{{nav}}
<main class="notes">
<h1>Where the ground goes</h1>
<p class="dim">The ground under Denver moves {{denver_speed}} millimetres a year, and the plate it rides holds its shape to {{band_far}} of a millimetre a year. Nobody can tell you where it will be. Those two facts are not in tension, and the distance between them is this page.</p>

<aside class="marginalia" style="grid-row: span {{span}}" aria-label="On this page">
<p class="lab">On this page</p>
<ul>
<li><b>Stations</b><span class="v">{{n_all}}</span></li>
<li><b>Interiors hold to</b><span class="v">{{band_far}} mm/yr</span></li>
<li><b>Boundaries miss by</b><span class="v">{{band_near}} mm/yr</span></li>
<li><b>Plates fitted</b><span class="v">{{n_plates}}</span></li>
<li><b>Reconstructions</b><span class="v">{{n_models}}</span></li>
</ul>
</aside>
<aside class="marginalia right" style="grid-row: span {{span}}">
<ul>
<li><b>Futures compared</b><span class="v">4</span></li>
<li><b>They agree for</b><span class="v">{{agree_until}} Myr</span></li>
<li><b>Then differ over</b><span class="v">{{future_max}}%</span></li>
<li><b>Of the surface</b><span class="v">land is {{land_today}}%</span></li>
<li><b>Build gates</b><span class="v">{{n_gates}}</span></li>
</ul>
</aside>

<p>A tectonic plate is a rigid body, and it is rigid to an almost absurd degree. Fit a single rotation to every GNSS station more than {{far_km}} kilometres from a plate boundary and the stations sit on it to a median of {{band_far}} millimetres a year, across thousands of kilometres of continent. Within {{near_km}} kilometres of a boundary the same fit misses by {{band_near}}. Almost the whole surface of the Earth is a few rafts that do not deform, and everything that happens to them happens in belts a few hundred kilometres wide.</p>

<p>That is the best-known thing on this page, and it buys less than it appears to. Run it forward and you get arithmetic, not a forecast: the rotations do not hold, and the page shows one measured case where a boundary has changed speed inside the last few million years. Run it backward and eight published reconstructions of the same past agree to a few hundred kilometres at {{past_near_age}} million years and disagree by {{past_far_km}} at {{past_far_age}}. Run it forward far enough and there are four published futures that agree with each other for {{agree_until}} million years and then disagree about the land-or-ocean status of {{future_max}} per cent of the Earth's surface.</p>

<div class="card">
<div class="tag">Try it</div>
<h3 style="margin-top:4px">Watch the reconstructions come apart</h3>
<p>Pick a place, drag back through {{past_oldest}} million years, and watch the continents move. The coastlines are reconstructed by the model you choose, not modern outlines dragged around, and switching that model moves the land: the same disagreement the dots show, drawn as continents. The dots are where each of the {{n_models}} published models puts the ground under your place. They agree for a while. Then they stop, and some of them stop placing any ground there at all.</p>
<p><a class="btn" href="continents-app.html" target="_blank" rel="noopener">Open the reconstruction viewer</a>
<a class="btn ghost" href="downloads/continents-code.zip">Download code and data</a></p>
</div>

<picture>
<source media="(max-width:760px)" srcset="assets/continents_fig1_futures-phone.png">
<img class="fig wide" src="assets/continents_fig1_futures.png" loading="lazy" width="1" height="1" alt="Four world maps of the same moment, {{common_age}} million years from now, drawn on an equal-area projection. Pangaea Ultima, Novopangaea, Aurica and Amasia each show a different arrangement of land. Amasia gathers almost all of it around the north pole; Aurica gathers it around the equator.">
</picture>
<p class="small">Four published futures, all at {{common_age}} million years from now, the one age all four reach. Equal Earth, which is equal-area, so an area on one panel means the same as the same area on another. All four geometries come from a single 2018 paper by one three-author group, built in a deliberately standardised way, and that paper calls them "end-members of a spectrum of possibilities" rather than predictions. Novopangaea has no peer-reviewed primary source at all: it was devised for a television series and reached print in a trade book. The grids are a digitisation of maps that were drawn, not the output of a plate model, which the deposit's own read-me says in as many words. At {{common_age}} million years these four disagree about the land-or-ocean status of {{future_max}} per cent of the Earth's surface, and land is only {{land_today}} per cent of it. The two degrees at each pole are an artificial mask the authors added for numerical convergence and are not drawn. Grids CC0.</p>

<h2>The measured present</h2>

<p>{{n_all}} stations carry a MIDAS velocity. Keeping those with at least {{min_years}} years of record and an uncertainty under {{max_sigma}} millimetres a year on both horizontal components leaves {{n_after_cuts}}, of which {{n_with_plate}} carry a plate assignment. Nine plates have enough stations far enough from a boundary to fit.</p>

<img class="fig wide" src="assets/continents_fig2_belts.png" loading="lazy" width="1" height="1" alt="An equal-area world map shaded by distance to the nearest plate boundary, with the boundaries drawn as dark lines and nine plates labelled with their measured speed. The shading is dark in narrow belts along the boundaries and pale across the interiors.">
<p class="small">Shaded by distance to the nearest plate boundary on a uniform lattice, with the boundaries of Bird's PB2002 model over it and nine plates labelled with the speed their fitted rotation gives at that point. The shading is a computed field, not a map of the stations: North America has {{n_na}} stations and Africa has {{n_af}}, so a map of receivers would say more about where geodesy happens than about the Earth. The speeds are a fitted model; how well it fits is the next figure.</p>

<img class="fig wide" src="assets/continents_fig3_rigidity.png" loading="lazy" width="1" height="1" alt="A log-log scatter of {{n_plotted}} GNSS stations. Distance to the nearest plate boundary on the horizontal axis, and how far each station misses its plate's rigid rotation on the vertical. The cloud collapses onto a floor below one millimetre a year beyond about five hundred kilometres. A separate group of points sits high and far right, labelled as Hawaii.">
<p class="small">Every station's miss against its own plate's rotation, against how far it sits from a plate boundary. The fit is made on interior stations only and then applied everywhere, so the near-boundary points are a prediction being tested rather than a fit being reported. Beyond {{far_km}} kilometres the cloud collapses onto a floor. The group at the top right is Hawaii, {{big_island_n}} stations on the Big Island: they sit further from a plate boundary than almost anything else on Earth and miss by up to {{hawaii_max}} millimetres a year, because Kīlauea's south flank moves for reasons that have nothing to do with the Pacific plate.</p>

<table>
<thead><tr><th>Distance to the nearest boundary</th><th class="n">Stations</th><th class="n">Median miss</th><th class="n">90th percentile</th></tr></thead>
<tbody>{{band_rows}}</tbody>
</table>

<p>The Pacific is the plate that shows why this needs guarding. Fitted on all {{pa_before_n}} of its far-field stations it misses by {{pa_before_rms}} millimetres a year and its rotation sits {{pa_before_itrf}} away from the international model's. Nearly all of that is {{big_island_n}} stations on one volcano, four stations in western Alaska that the source file lists under the Pacific plate but which sit on the Bering block, and one station on Salas y Gómez that is filed under the Pacific and is actually on Nazca, {{ilsg_resid}} millimetres a year out. A stated rule — fit, drop anything past {{mad_k}} median absolute deviations, refit, repeat — removes {{pa_dropped}} of the {{pa_before_n}} and the plate comes back to {{pa_after_rms}}. The rule is on the page rather than a list of station names, because a list of names is a hardcoded answer to today's contamination.</p>

<h2>It does not hold</h2>

<p>Plate motion is not a constant, and that is measured rather than argued. NNR-MORVEL56 averages sea-floor spreading over the last {{morvel_interval}} million years; ITRF2020-PMM averages space geodesy over decades. Where those disagree, either a boundary has changed speed or one of the models is wrong.</p>

<img class="fig wide" src="assets/continents_fig4_slowdown.png" loading="lazy" width="1" height="1" alt="Seven plate boundaries as rows. Each row joins an open circle for the geologically averaged rate to a filled circle for the geodetic rate. Three continental collisions show large gaps; four ridges and a rift show small ones.">
<p class="small">Motion of the first plate relative to the second, at a point on the boundary named. Comparisons are on relative motion between pairs only, because the two models sit in different reference frames and only relative motion is frame-independent. The {{n_slower}} that have slowed by more than five millimetres a year are all continental collisions; the rest are mid-ocean ridges and a rift, and one of those, the {{sped_up}}, has gone {{sped_up_by}} millimetres a year <em>faster</em>. MORVEL's averaging interval is not one number — {{morvel_interval_detail}}. MORVEL is not openly licensed: its authors reserve commercial rights.</p>

<p>India against Eurasia is the case to hold on to. Its geological average is {{ie_morvel}} millimetres a year and its geodetic rate is {{ie_itrf}}: {{ie_gap}} slower now than over the last few million years. Arabia against Eurasia has slowed by {{ar_gap}} and Nazca against South America by {{nz_gap}}, while the mid-Atlantic and the East African rift agree to about two. That is the argument against extrapolation, and it is better than any amount of saying that a hundred million years is a long time: the poles measured today were measurably different three million years ago.</p>

<h2>The reconstructed past</h2>

<p>Going backwards, the question stops being how precisely anything is measured and becomes how much published models of the same past disagree. {{n_models}} global plate models were asked where {{n_places}} present-day places were, every {{age_step}} million years to {{past_oldest}}. Each model is named in every request, because the service's default model is documented as liable to change and named models' rotation files have been updated in place as recently as last year.</p>

<img class="fig wide" src="assets/continents_fig5_past.png" loading="lazy" width="1" height="1" alt="Six small panels, one per city, each showing eight lines of reconstructed latitude against age from zero to five hundred million years. The lines sit together near the present and fan apart going back. Several lines end early where a model's coverage stops, and some break in the middle where a model places no crust.">
<p class="small">Reconstructed latitude, not position. That is the honest quantity: palaeomagnetism determines how far from the equator a rock formed and cannot determine its longitude at all, so a fan of latitudes is the measurement and a map of positions is the measurement plus each model's own assumption about east and west. Lines end where a model's coverage ends. Lines that break in the middle are models that place no crust at that place and age. The models share ancestry, so the true spread of admissible reconstructions is wider than the spread between them, not narrower.</p>

<p>{{sydney_line}}</p>

<h2>The three regimes</h2>

<img class="fig wide" src="assets/continents_fig6_regimes.png" loading="lazy" width="1" height="1" alt="A log chart of how far apart independent answers are, in kilometres, against millions of years from now in either direction. A dashed ray shows today's measured miss accumulated forward. A solid line shows the disagreement between published reconstructions of the past. A dotted line with open squares shows a proxy for the spread between the four futures. A horizontal rule marks the furthest two points on Earth can be.">
<p class="small">Three quantities that are not the same quantity, on one pair of axes, which is the point. The solid line is measured: the largest distance between any two of the {{n_models}} reconstructions of the same place and age. The dashed ray is today's measured miss run forward at {{band_far}} millimetres a year, which is {{band_far}} kilometres per million years — the extrapolation this page argues against, drawn so it can be compared. The dotted line is a <em>proxy</em>: the separation between the four futures' land centroids. A centroid averages a whole configuration, so two arrangements that barely overlap can have close centroids and two that overlap can have distant ones; the comparison with the measured line above it is <em>assumed</em>, and the direction of its bias is not known. The number the future can be held to in its own units is the one annotated on it. The ceiling is the antipodal distance, {{antipodal}} kilometres.</p>

<h2>What would have made this page wrong</h2>

<p>Two of the inputs contain a trap that produces a confident, plausible, wrong number rather than an error. Each is a check that runs before the number it guards exists, and a failure means there is no page rather than a warning in a log.</p>

<p>The four future scenarios are not on a common longitude convention: two declare −180 to 180 and two declare 0 to 360. Read as they come, two of the four sit half a world out, and the four present-day grids — which are four copies of the same map of today — appear to disagree about {{naive_pct}} per cent of the planet instead of {{t0_pct}}. That {{naive_pct}} would have been this page's headline number, computed from real files, with nothing anywhere downstream to give it away.</p>

<p>The obvious guard is that the four should agree at the present day. That guard is <em>not sufficient</em>, and the distinction is the reason this section exists: all four are read by the same code, so any mistake common to all four leaves them agreeing perfectly while every map here is wrong. The checks that can catch such a mistake are the ones whose answer comes from outside the data — {{n_probes}} named points whose land-or-sea answer comes from an ordinary world map, and the Earth's own land fraction.</p>

<table>
<thead><tr><th>Check</th><th>Threshold</th><th class="n">Measured</th></tr></thead>
<tbody>{{anchor_rows}}</tbody>
</table>

<p>Two of those are negative controls, and they are there because a check that has never been seen to fail is not known to work. If a future release of the scenario grids quietly harmonises the longitude conventions, or a future release of the velocity file reassigns the Hawaiian stations, the guarded numbers would still be produced and this page's account of why they are guarded would become false. So the build also requires the failures to still be reproducible, and stops if they are not.</p>

<h2>Method</h2>

<p>Velocities are MIDAS estimates of GNSS station motion, in IGS20, which is the IGS realisation of ITRF2020 — that is what makes the comparison with ITRF2020-PMM a comparison of models rather than of reference frames, and the build asserts it. A plate's rotation is fitted by weighted least squares on <em>v</em> = <b>ω</b> × <b>r</b>, the form in equation 1 of Altamimi and colleagues 2017; neither MORVEL nor the NNR-MORVEL56 paper states it.</p>

<p>Checking a fitted rotation against a published one at that plate's own stations is not enough to pin it, and this was measured rather than assumed. The stations of a plate cover a patch, and there is a direction in rotation space along which the rotation can be moved a long way while barely changing any velocity inside that patch. For South America the rotation can be moved {{break_deg}} degrees per million years — {{break_pct}} per cent of the plate's own rate — while the difference at its own stations stays inside the {{b1c_tol}} millimetre a year check. So the rotation vectors are compared directly, in degrees per million years, and that check is the one that pins the plate. The station-level check is kept beside it, because it is the right check for a contaminated station, which is a different failure.</p>

<p>The NNR-MORVEL56 table is extracted from Table 1 of the paper itself and cross-checked against an independent transcription of the same table. The authors' own copy is a JPEG on a host that no longer answers, and the page's argument against extrapolation rests on those numbers.</p>

<p>Distance to a plate boundary is to the nearest PB2002 <em>vertex</em>, not to the nearest point on the segment, which slightly overestimates distance where a segment is sparsely sampled. The cuts, the {{far_km}} kilometre threshold, the exclusion rule and the {{polar_cut}}-degree polar mask are all <em>assumed</em> and all stated where they are used.</p>

<h2>Limits</h2>

<p>No reconstruction here carries a formal uncertainty, because none is published: the field's own review names uncertainty quantification as an open problem, and inventing an error bar would be worse than not having one. The six places in the fan are not a global grid. The future grids carry no plate identities, so this page can say that a scenario puts land in the south polar region but cannot say that the land is Antarctica.</p>

<p>Nothing here says where any named place will be. Not at any confidence, not for any of the four futures, and the four are not ranked — the paper that built all of them ranks none above the others. The last age shown is {{past_oldest}} million years, where {{n_models_500}} of the {{n_models}} models still reach.</p>

<hr>

<h2>The code</h2>
<p><code>fetch_ngl.py</code>, <code>fetch_static.py</code>, <code>fetch_osf.py</code> and <code>fetch_gplates.py</code> get the data and pin it; <code>otis_grid.py</code> and <code>plates.py</code> hold the readers and the gates; <code>break_b1.py</code> is the experiment that broke the first version of one of them; <code>build_continents.py</code> computes and gates everything and writes the payload; <code>fig_continents.py</code> draws the six figures; <code>test_continents.py</code> checks the failure modes.</p>
<p>The archive is larger than the others on this site, and deliberately so. Most of it is three files: the {{stations_mb}} station table, the {{land_mb}} of reconstructed coastlines the viewer draws, and {{masks_kb}} of packed scenario masks. With those a reader rebuilds everything here without re-fetching seven megabytes of velocities, nearly five hundred reconstructed frames, or a scenario archive that unpacks to about four hundred megabytes. That is the difference between an archive that documents the build and one that reproduces it.</p>
<p><a class="btn" href="downloads/continents-code.zip">Download source and data</a>
<a class="btn ghost" href="code.html">All code</a></p>

<footer>Andrew Silvestri · energy systems modelling · <a href="mailto:dasilvestri@utexas.edu">dasilvestri@utexas.edu</a></footer>
</main>
<script src="assets/motion.js"></script>
<script src="assets/lightbox.js"></script>
</body></html>
