Path: blob/main/latex-templates/templates/geophysics/plate_tectonics.tex
51 views
unlisted
\documentclass[a4paper, 11pt]{article}1\usepackage[utf8]{inputenc}2\usepackage[T1]{fontenc}3\usepackage{amsmath, amssymb, amsthm}4\usepackage{graphicx}5\usepackage{booktabs}6\usepackage{siunitx}7\usepackage{subcaption}8\usepackage[makestderr]{pythontex}910\newtheorem{definition}{Definition}11\newtheorem{theorem}{Theorem}12\newtheorem{example}{Example}13\newtheorem{remark}{Remark}1415\title{Plate Tectonics: Thermal Evolution, Plate Motion, and Mantle Convection}16\author{Computational Geophysics Laboratory}17\date{\today}1819\begin{document}20\maketitle2122\begin{abstract}23This technical report presents comprehensive computational analysis of plate tectonic processes including lithospheric cooling, seafloor subsidence, heat flow evolution, and plate kinematics. We implement the half-space and plate cooling models, analyze Euler pole rotation kinematics, and model mantle convection using Rayleigh-Benard theory. The analysis quantifies lithospheric thickness, thermal age relationships, and driving forces of plate motion.24\end{abstract}2526\section{Theoretical Framework}2728\begin{definition}[Thermal Diffusion]29Heat conduction in the lithosphere follows the diffusion equation:30\begin{equation}31\frac{\partial T}{\partial t} = \kappa \nabla^2 T32\end{equation}33where $\kappa = k/(\rho c_p)$ is thermal diffusivity ($\sim 10^{-6}$ m$^2$/s).34\end{definition}3536\begin{theorem}[Half-Space Cooling Model]37For lithosphere cooling from initial mantle temperature $T_m$, the temperature profile is:38\begin{equation}39T(z, t) = T_s + (T_m - T_s) \text{erf}\left(\frac{z}{2\sqrt{\kappa t}}\right)40\end{equation}41where $\text{erf}$ is the error function and $T_s$ is surface temperature.42\end{theorem}4344\subsection{Seafloor Subsidence}4546Thermal contraction causes seafloor deepening with age:47\begin{equation}48d(t) = d_r + \frac{2\rho_m \alpha_V (T_m - T_s)}{\rho_m - \rho_w} \sqrt{\frac{\kappa t}{\pi}}49\end{equation}5051where $d_r$ is ridge depth, $\alpha_V$ is volumetric thermal expansion, and $\rho_m$, $\rho_w$ are mantle and water densities.5253\begin{example}[Heat Flow]54Surface heat flow decreases with age:55\begin{equation}56q(t) = \frac{k(T_m - T_s)}{\sqrt{\pi \kappa t}}57\end{equation}58Typical values range from $>$200 mW/m$^2$ at ridges to $<$50 mW/m$^2$ on old oceanic crust.59\end{example}6061\subsection{Plate Kinematics}6263Plate motion on a sphere follows Euler's theorem---rotation about a fixed pole:64\begin{equation}65\mathbf{v} = \boldsymbol{\omega} \times \mathbf{r}66\end{equation}67where $\boldsymbol{\omega}$ is the angular velocity vector and $\mathbf{r}$ is the position vector.6869\section{Computational Analysis}7071\begin{pycode}72import numpy as np73from scipy.special import erf, erfc74import matplotlib.pyplot as plt75plt.rc('text', usetex=True)76plt.rc('font', family='serif', size=10)7778# Physical parameters79kappa = 1e-6 # Thermal diffusivity (m^2/s)80k = 3.3 # Thermal conductivity (W/m/K)81Tm = 1350 # Mantle temperature (C)82Ts = 0 # Surface temperature (C)83alpha_V = 3e-5 # Thermal expansion (1/K)84rho_m = 3300 # Mantle density (kg/m^3)85rho_w = 1030 # Seawater density (kg/m^3)86rho_a = 3200 # Asthenosphere density (kg/m^3)87dr = 2500 # Ridge depth (m)88g = 9.81 # Gravity (m/s^2)8990# Time conversion91Ma_to_s = 1e6 * 365.25 * 24 * 36009293# Age range94age_Ma = np.linspace(0.1, 200, 200)95age_s = age_Ma * Ma_to_s9697# Half-space cooling model98def halfspace_depth(age_s):99"""Seafloor depth from half-space model (m)."""100return dr + 2 * rho_m * alpha_V * (Tm - Ts) / (rho_m - rho_w) * np.sqrt(kappa * age_s / np.pi)101102def halfspace_heatflow(age_s):103"""Surface heat flow from half-space model (mW/m^2)."""104return k * (Tm - Ts) / np.sqrt(np.pi * kappa * age_s) * 1000105106def lithosphere_thickness(age_s, T_threshold=1100):107"""Thermal lithosphere thickness (m)."""108return 2.32 * np.sqrt(kappa * age_s) # Depth to T = 0.9*Tm109110# Plate model parameters111a_plate = 125000 # Plate thickness (m)112tau = a_plate**2 / (np.pi**2 * kappa) # Thermal time constant113114def plate_depth(age_s):115"""Seafloor depth from plate model (m)."""116d_inf = dr + rho_m * alpha_V * (Tm - Ts) * a_plate / (rho_m - rho_w)117return d_inf - (d_inf - dr) * (8/np.pi**2) * np.exp(-age_s/tau)118119# Temperature profiles at different ages120ages_profile = [10, 50, 100, 150] # Ma121z = np.linspace(0, 150000, 300) # Depth in m122123# Plate velocities (mm/yr) - major plates124plates = {125'Pacific': 75,126'Australian': 60,127'Nazca': 55,128'Cocos': 52,129'Philippine': 45,130'N American': 23,131'S American': 17,132'Eurasian': 21,133'African': 22,134'Antarctic': 17135}136137# Euler pole example (Pacific-North American)138euler_lat = 48.7139euler_lon = -78.2140omega = 0.78 # deg/Ma141142# Driving forces (relative magnitudes)143forces = {144'Ridge Push': 2.5,145'Slab Pull': 10,146'Basal Drag': 3,147'Mantle Suction': 1.5148}149150# Rayleigh number for mantle convection151Ra_crit = 1000 # Critical Rayleigh number152deltaT = 2500 # Temperature difference (K)153d_mantle = 2900e3 # Mantle thickness (m)154nu = 1e21 # Viscosity (Pa*s)155alpha = 3e-5 # Thermal expansion156157Ra = rho_m * g * alpha * deltaT * d_mantle**3 / (kappa * nu)158159# Calculate depths and heat flow160depth_halfspace = halfspace_depth(age_s)161depth_plate = plate_depth(age_s)162heatflow = halfspace_heatflow(age_s)163lith_thickness = lithosphere_thickness(age_s)164165# Subsidence rate166subsidence_rate = np.gradient(depth_halfspace, age_Ma) / 1000 # km/Ma167168# Create visualization169fig = plt.figure(figsize=(12, 10))170gs = fig.add_gridspec(3, 3, hspace=0.35, wspace=0.35)171172# Plot 1: Seafloor depth vs age173ax1 = fig.add_subplot(gs[0, 0])174ax1.plot(age_Ma, depth_halfspace/1000, 'b-', lw=2, label='Half-space')175ax1.plot(age_Ma, depth_plate/1000, 'r--', lw=2, label='Plate')176ax1.plot(np.sqrt(age_Ma), depth_halfspace/1000, 'g:', lw=1, alpha=0) # Hidden177ax1.set_xlabel('Age (Ma)')178ax1.set_ylabel('Depth (km)')179ax1.set_title('Seafloor Subsidence')180ax1.legend(fontsize=8)181ax1.invert_yaxis()182ax1.grid(True, alpha=0.3)183184# Plot 2: Heat flow vs age185ax2 = fig.add_subplot(gs[0, 1])186ax2.plot(age_Ma, heatflow, 'r-', lw=2)187ax2.axhline(y=65, color='gray', ls='--', alpha=0.5, label='Continental avg')188ax2.set_xlabel('Age (Ma)')189ax2.set_ylabel('Heat Flow (mW/m$^2$)')190ax2.set_title('Surface Heat Flow')191ax2.legend(fontsize=8)192ax2.grid(True, alpha=0.3)193ax2.set_ylim([0, 500])194195# Plot 3: Temperature profiles196ax3 = fig.add_subplot(gs[0, 2])197colors = plt.cm.viridis(np.linspace(0.2, 0.8, len(ages_profile)))198for age, color in zip(ages_profile, colors):199age_sec = age * Ma_to_s200T = Ts + (Tm - Ts) * erf(z / (2 * np.sqrt(kappa * age_sec)))201ax3.plot(T, z/1000, color=color, lw=2, label=f'{age} Ma')202203ax3.axhline(y=lith_thickness[np.argmin(np.abs(age_Ma - 100))]/1000,204color='gray', ls='--', alpha=0.5)205ax3.set_xlabel('Temperature ($^\\circ$C)')206ax3.set_ylabel('Depth (km)')207ax3.set_title('Geotherm Evolution')208ax3.legend(fontsize=7)209ax3.invert_yaxis()210ax3.grid(True, alpha=0.3)211ax3.set_xlim([0, 1400])212213# Plot 4: Lithosphere thickness214ax4 = fig.add_subplot(gs[1, 0])215ax4.plot(age_Ma, lith_thickness/1000, 'b-', lw=2)216ax4.plot(age_Ma, np.sqrt(age_Ma) * 10, 'r--', lw=1.5, alpha=0.7,217label='$\\propto \\sqrt{t}$')218ax4.set_xlabel('Age (Ma)')219ax4.set_ylabel('Thickness (km)')220ax4.set_title('Thermal Lithosphere Thickness')221ax4.legend(fontsize=8)222ax4.grid(True, alpha=0.3)223224# Plot 5: Plate velocities225ax5 = fig.add_subplot(gs[1, 1])226names = list(plates.keys())227velocities = list(plates.values())228colors = plt.cm.plasma(np.linspace(0.2, 0.8, len(plates)))229y_pos = range(len(names))230ax5.barh(y_pos, velocities, color=colors, alpha=0.8)231ax5.set_yticks(y_pos)232ax5.set_yticklabels(names, fontsize=8)233ax5.set_xlabel('Velocity (mm/yr)')234ax5.set_title('Major Plate Velocities')235ax5.grid(True, alpha=0.3, axis='x')236237# Plot 6: Depth vs sqrt(age)238ax6 = fig.add_subplot(gs[1, 2])239sqrt_age = np.sqrt(age_Ma)240ax6.plot(sqrt_age, depth_halfspace/1000, 'b-', lw=2)241# Linear fit242coeffs = np.polyfit(sqrt_age[10:], depth_halfspace[10:]/1000, 1)243ax6.plot(sqrt_age, np.polyval(coeffs, sqrt_age), 'r--', lw=1.5,244label=f'Slope = {coeffs[0]:.0f} m/Ma$^{{1/2}}$')245ax6.set_xlabel('$\\sqrt{\\mathrm{Age}}$ (Ma$^{1/2}$)')246ax6.set_ylabel('Depth (km)')247ax6.set_title('Depth vs $\\sqrt{t}$ (Parsons-Sclater)')248ax6.legend(fontsize=8)249ax6.invert_yaxis()250ax6.grid(True, alpha=0.3)251252# Plot 7: Driving forces253ax7 = fig.add_subplot(gs[2, 0])254force_names = list(forces.keys())255force_vals = list(forces.values())256colors = ['blue', 'red', 'green', 'orange']257ax7.bar(range(len(forces)), force_vals, color=colors, alpha=0.7)258ax7.set_xticks(range(len(forces)))259ax7.set_xticklabels(force_names, fontsize=8, rotation=15)260ax7.set_ylabel('Relative Magnitude')261ax7.set_title('Plate Driving Forces')262ax7.grid(True, alpha=0.3, axis='y')263264# Plot 8: Subsidence rate265ax8 = fig.add_subplot(gs[2, 1])266ax8.plot(age_Ma[1:], -subsidence_rate[1:] * 1000, 'purple', lw=2)267ax8.set_xlabel('Age (Ma)')268ax8.set_ylabel('Subsidence Rate (m/Ma)')269ax8.set_title('Subsidence Rate vs Age')270ax8.grid(True, alpha=0.3)271ax8.set_xlim([0, 200])272273# Plot 9: Rayleigh-Benard stability274ax9 = fig.add_subplot(gs[2, 2])275Ra_range = np.logspace(2, 8, 100)276Nu = np.ones_like(Ra_range)277Nu[Ra_range > Ra_crit] = 0.28 * Ra_range[Ra_range > Ra_crit]**0.21278279ax9.loglog(Ra_range, Nu, 'b-', lw=2)280ax9.axvline(x=Ra_crit, color='r', ls='--', label=f'Ra$_c$ = {Ra_crit}')281ax9.axvline(x=Ra, color='g', ls='--', alpha=0.7, label=f'Mantle Ra')282ax9.set_xlabel('Rayleigh Number')283ax9.set_ylabel('Nusselt Number')284ax9.set_title('Convection Heat Transfer')285ax9.legend(fontsize=8)286ax9.grid(True, alpha=0.3, which='both')287288plt.savefig('plate_tectonics_plot.pdf', bbox_inches='tight', dpi=150)289print(r'\begin{center}')290print(r'\includegraphics[width=\textwidth]{plate_tectonics_plot.pdf}')291print(r'\end{center}')292plt.close()293294# Summary calculations295depth_100Ma = halfspace_depth(100 * Ma_to_s)296heatflow_10Ma = halfspace_heatflow(10 * Ma_to_s)297lith_100Ma = lithosphere_thickness(100 * Ma_to_s)298max_velocity = max(velocities)299parsons_slope = coeffs[0]300\end{pycode}301302\section{Results and Analysis}303304\subsection{Thermal Evolution}305306\begin{pycode}307print(r'\begin{table}[htbp]')308print(r'\centering')309print(r'\caption{Oceanic Lithosphere Properties vs Age}')310print(r'\begin{tabular}{ccccc}')311print(r'\toprule')312print(r'Age (Ma) & Depth (km) & Heat Flow (mW/m$^2$) & Lith. Thick. (km) & Subsidence (m/Ma) \\')313print(r'\midrule')314315ages_table = [1, 10, 25, 50, 100, 150, 200]316for age in ages_table:317idx = np.argmin(np.abs(age_Ma - age))318d = depth_halfspace[idx]/1000319q = heatflow[idx]320l = lith_thickness[idx]/1000321s = -subsidence_rate[idx] * 1000 if idx > 0 else np.nan322s_str = f'{s:.0f}' if not np.isnan(s) else '--'323print(f'{age} & {d:.2f} & {q:.0f} & {l:.0f} & {s_str} \\\\')324325print(r'\bottomrule')326print(r'\end{tabular}')327print(r'\end{table}')328\end{pycode}329330\subsection{Model Comparison}331332The half-space and plate models diverge for old lithosphere:333\begin{itemize}334\item Half-space predicts continuous deepening: $d \propto \sqrt{t}$335\item Plate model predicts asymptotic depth for $t > \py{f"{tau/Ma_to_s:.0f}"}$ Ma336\item Observed data favor plate model for ages $>$ 80 Ma337\item Parsons-Sclater slope: \py{f"{parsons_slope:.0f}"} m/Ma$^{1/2}$338\end{itemize}339340\begin{remark}341The $\sqrt{t}$ dependence of seafloor depth is a diagnostic signature of conductive cooling. Deviations indicate convective or compositional effects.342\end{remark}343344\subsection{Plate Kinematics}345346\begin{pycode}347print(r'\begin{table}[htbp]')348print(r'\centering')349print(r'\caption{Plate Motion Statistics}')350print(r'\begin{tabular}{lcc}')351print(r'\toprule')352print(r'Statistic & Value & Units \\')353print(r'\midrule')354print(f'Maximum plate velocity & {max_velocity} & mm/yr \\\\')355print(f'Mean velocity & {np.mean(velocities):.1f} & mm/yr \\\\')356print(f'Fastest plate & Pacific & -- \\\\')357print(f'Slowest plate & Antarctic & -- \\\\')358print(f'Euler pole (Pac-NAm) & ({euler_lat}$^\\circ$N, {euler_lon}$^\\circ$E) & -- \\\\')359print(f'Angular velocity & {omega} & deg/Ma \\\\')360print(r'\bottomrule')361print(r'\end{tabular}')362print(r'\end{table}')363\end{pycode}364365\section{Physical Processes}366367\begin{example}[Ridge Push Force]368The elevation of mid-ocean ridges creates a gravitational driving force:369\begin{equation}370F_{RP} = g\rho_m \alpha_V (T_m - T_s) \kappa t \approx 2-3 \times 10^{12} \text{ N/m}371\end{equation}372This force acts throughout the lithosphere volume.373\end{example}374375\begin{example}[Slab Pull Force]376Subducting lithosphere is denser than surrounding mantle:377\begin{equation}378F_{SP} = \Delta\rho \cdot g \cdot L \cdot h \approx 10^{13} \text{ N/m}379\end{equation}380where $L$ is slab length and $h$ is thickness. This is the dominant driving force.381\end{example}382383\begin{theorem}[Mantle Convection]384Convection occurs when the Rayleigh number exceeds the critical value:385\begin{equation}386Ra = \frac{\rho g \alpha \Delta T d^3}{\kappa \nu} > Ra_c \approx 1000387\end{equation}388For Earth's mantle, $Ra \approx \py{f"{Ra:.1e}"}$, indicating vigorous convection.389\end{theorem}390391\section{Discussion}392393The analysis reveals several key features of plate tectonics:394395\begin{enumerate}396\item \textbf{Thermal control}: Lithospheric properties are primarily controlled by conductive cooling from the mantle.397\item \textbf{Depth-age relationship}: The $\sqrt{t}$ subsidence law holds for ages $<$ 80 Ma; older lithosphere approaches thermal equilibrium.398\item \textbf{Velocity distribution}: Oceanic plates with attached slabs move faster than continental plates.399\item \textbf{Force balance}: Slab pull dominates over ridge push by a factor of $\sim$4.400\item \textbf{Vigorous convection}: The mantle Rayleigh number far exceeds critical, enabling plate recycling.401\end{enumerate}402403\section{Conclusions}404405This computational analysis demonstrates:406\begin{itemize}407\item Seafloor depth at 100 Ma: \py{f"{depth_100Ma/1000:.2f}"} km408\item Heat flow at 10 Ma: \py{f"{heatflow_10Ma:.0f}"} mW/m$^2$409\item Lithosphere thickness at 100 Ma: \py{f"{lith_100Ma/1000:.0f}"} km410\item Maximum plate velocity: \py{f"{max_velocity}"} mm/yr (Pacific)411\item Mantle Rayleigh number: \py{f"{Ra:.1e}"}412\end{itemize}413414The thermal evolution of oceanic lithosphere provides fundamental constraints on mantle convection and the driving forces of plate tectonics.415416\section{Further Reading}417\begin{itemize}418\item Turcotte, D.L., Schubert, G., \textit{Geodynamics}, 3rd Edition, Cambridge University Press, 2014419\item Fowler, C.M.R., \textit{The Solid Earth}, 2nd Edition, Cambridge University Press, 2004420\item Parsons, B., Sclater, J.G., An analysis of the variation of ocean floor bathymetry and heat flow with age, \textit{J. Geophys. Res.}, 1977421\end{itemize}422423\end{document}424425426