Classical Stark Effect

Coulomb + Constant Field — 3D Orbital Dynamics

Physics Background

Introduction

The classical Stark effect describes the motion of a charged particle subject to both an attractive inverse-square (Coulomb) force and a constant uniform external field. This scenario arises naturally in two physical contexts: the hydrogen atom in an external electric field, and a rocket moving in a gravitational field while exerting constant thrust.

In atomic units ($\mu = 1$, $|e|=1$, $4\pi\epsilon_0=1$, $\hbar=1$), the dynamics reduce to a single particle in the combined potential. The classical trajectories range from quasi-periodic bound orbits to ionizing (escaping) trajectories, depending on the field strength relative to the binding energy.

Equations of Motion

The relative-coordinate equation of motion in atomic units is:

$$\mu\,\ddot{\mathbf{r}} = -\frac{\mathbf{r}}{r^3} + \mathbf{F}$$

where $\mathbf{r}$ is the electron-proton separation, $r = |\mathbf{r}|$, and $\mathbf{F}$ is the constant external force. The Hamiltonian for the internal motion is:

$$H = \frac{\mathbf{p}^2}{2} - \frac{1}{r} - \mathbf{F}\cdot\mathbf{r}$$

The total force is $\mathbf{F}^{\text{tot}} = -\nabla V = -\mathbf{r}/r^3 + \mathbf{F}$, combining the Coulomb attraction with the constant applied field.

Conserved Quantities

The total energy $E = \tfrac{1}{2}\dot{r}^2 + V(r)$ is conserved because the potential is time-independent.

In the absence of the external field, all three components of orbital angular momentum $\mathbf{L} = \mathbf{r}\times\dot{\mathbf{r}}$ are conserved. When $\mathbf{F}\neq 0$, only the component along $\mathbf{F}$ is conserved:

$$L_F = \mathbf{L}\cdot\hat{\mathbf{F}} = \text{const.}$$

Additionally, a generalized Runge-Lenz invariant $\mathbf{C}\cdot\mathbf{F}$ is conserved, where $\mathbf{C} = \mathbf{A} + [(\mathbf{r}\times\mathbf{F})\times\mathbf{r}]/2$ and $\mathbf{A} = \hat{\mathbf{r}} + \mathbf{L}\times\mathbf{p}$ is the standard Runge-Lenz vector (Redmond, 1964).

Ionization Threshold

Taking $\mathbf{F} = F\hat{z}$ with $F > 0$, the potential on the positive $z$-axis is $V(z) = -1/z - Fz$. The saddle point occurs at:

$$z^* = \frac{1}{\sqrt{F}}$$

with saddle-point energy:

$$V_{\text{saddle}} = -2\sqrt{F}$$

Orbits with total energy $E > V_{\text{saddle}}$ can escape over the barrier. For a bound state with initial energy $E_0 < 0$, the critical field for ionization is:

$$F_{\text{crit}} = \frac{E_0^2}{4}$$

Bohr Index and Orbital Scaling

The Bohr index $n_0$ is a continuous generalization of the principal quantum number from the Bohr model of hydrogen. In the Bohr model, the electron orbits at discrete radii $a_n = n^2 a_0$ (where $a_0$ is the Bohr radius, equal to 1 in atomic units) with energies $E_n = -1/(2n^2)$. In this classical simulation, $n_0$ need not be an integer — it simply sets the semi-major axis $a = n_0^2$ and hence the initial binding energy $E_0 = -1/(2n_0^2)$.

Larger $n_0$ means a larger, more loosely bound orbit that is easier to ionize. At $n_0 = 1$, the orbit corresponds to the ground-state Bohr radius. At $n_0 = 2$, the orbit is four times larger with one-quarter the binding energy, and the critical field for ionization drops by a factor of 16. The slider lets you explore this $n_0^{-4}$ scaling of $F_{\text{crit}} = E_0^2/4 = 1/(16\,n_0^4)$ continuously.

Kepler Reference Orbit

For $\mathbf{F}=0$, the motion follows a closed Kepler ellipse with energy $E = -1/(2a)$ where $a$ is the semi-major axis. For a Bohr-like orbit of principal quantum number $n_0$, we have $a = n_0^2$. Key relations:

$$r_p = a(1-\epsilon), \quad h = \sqrt{a(1-\epsilon^2)}$$

$$v_p = h/r_p, \quad T = 2\pi\, a^{3/2}$$

where $r_p$ is the periapsis distance, $h$ the angular momentum, $v_p$ the periapsis velocity, and $T$ the orbital period.

Based on a MATLAB Live Script by D. Carlsmith, University of Wisconsin-Madison.

Technology Stack

HTML5, CSS3, and JavaScript

This application is a static HTML5 page — three files (index.html, style.css, app.js) served without any backend server or build step. The HTML5 document provides the semantic structure: header, sliders (<input type="range">), buttons, the plot container, and the physics exposition below. CSS3 handles the dark scientific theme, responsive grid layout (single-column on mobile, two-column on desktop), custom slider styling via pseudo-elements, and the sticky controls panel. All physics computation runs client-side in JavaScript (ES6+): the RK4 integrator, the Coulomb+Stark ODE, Kepler's equation solver, ionization detection, and diagnostic calculations execute in the browser's main thread with periodic requestAnimationFrame yields to keep the UI responsive during long integrations.

Plotly.js — Visualization

Plotly.js renders the 3D orbit plot. It uses the browser's WebGL API (<canvas>.getContext("webgl")) to draw the trajectories, markers, and axes on the GPU, providing hardware-accelerated rotation, zoom, and pan. If WebGL is unavailable — typically because Chrome's hardware acceleration is disabled — the app falls back to a 2D projection using Plotly's SVG-based scatter trace, which requires no GPU support. A projection-plane selector (x–y, x–z, y–z) lets you view the orbit from different angles in the fallback mode.

MathJax 3 — Equation Rendering

MathJax 3 typesets the LaTeX equations in the physics sections. It parses inline ($...$) and display ($$...$$) math delimiters, then renders them as scalable HTML/CSS glyphs. No GPU or special browser support is required — MathJax works everywhere.

Google Fonts

Google Fonts provides the two typefaces: Inter for body text and UI labels, and JetBrains Mono for numeric readouts and code-like values. Both are loaded via a single stylesheet request with font-display: swap to avoid blocking the initial render.