The Casimir energy grows weaker as plates separate#

Hendrik Casimir showed in 1948 that two uncharged, perfectly conducting parallel plates in vacuum should attract each other: only electromagnetic vacuum modes that fit an integer number of wavelengths between the plates are allowed there, so the confined zero-point energy is slightly lower than in the unbounded vacuum outside, producing a net inward force. This is a simplified, standard textbook treatment – a 1D scalar field confined between two “plates” a distance \(d\) apart, not a full 3D electromagnetic calculation. casimir_mode_frequencies() builds the resulting discrete standing-wave spectrum,

\[\omega_n = \frac{n\pi c}{d}, \qquad n = 1, 2, 3, \dots,\]

in place of the continuum of frequencies allowed in unbounded vacuum. The bare zero-point sum \(\tfrac12\sum_n \omega_n\) diverges, so casimir_energy_1d() regularizes it with an exponential (Abel-summation) cutoff, subtracts the same divergent piece a plate-free continuum calculation would produce under the same regulator, and takes the cutoff to zero, leaving the finite, physical remainder

\[E(d) \to -\frac{\pi c}{24 d},\]

the standard 1D massless-field Casimir energy – reproducing the qualitative Casimir signature (an attractive, separation-dependent zero-point energy) directly.

import matplotlib.pyplot as plt
import numpy as np

from physicskit.fields import animate_casimir_modes, casimir_energy_1d, casimir_mode_frequencies

Sweep the plate separation and animate the mode spectrum and energy#

d_values = np.linspace(1.0, 6.0, 40)

anim = animate_casimir_modes(d_values)
plt.show()

To save the animation to a file instead of (or in addition to) displaying it interactively, use e.g.:

anim.save("casimir_effect.gif", writer="pillow", fps=12)

The discrete spectrum grows denser (approaching the continuum) as the plates separate, and the regularized zero-point energy is negative (attractive) everywhere, growing less negative – weaker confinement of vacuum energy – as the separation grows.

energies = np.array([casimir_energy_1d(d) for d in d_values])
modes_at_small_d = casimir_mode_frequencies(d_values[0], n_max=5)
modes_at_large_d = casimir_mode_frequencies(d_values[-1], n_max=5)

print(f"first 5 mode frequencies at d={d_values[0]:.2f}: {np.round(modes_at_small_d, 3)}")
print(f"first 5 mode frequencies at d={d_values[-1]:.2f}: {np.round(modes_at_large_d, 3)} (denser -> continuum)")
print(f"Casimir energy: E(d={d_values[0]:.2f})={energies[0]:.4f}, E(d={d_values[-1]:.2f})={energies[-1]:.4f}")
print(f"force is attractive everywhere (energy increases monotonically with d): {bool(np.all(np.diff(energies) > 0))}")
first 5 mode frequencies at d=1.00: [ 3.142  6.283  9.425 12.566 15.708]
first 5 mode frequencies at d=6.00: [0.524 1.047 1.571 2.094 2.618] (denser -> continuum)
Casimir energy: E(d=1.00)=-0.1309, E(d=6.00)=-0.0218
force is attractive everywhere (energy increases monotonically with d): True

Total running time of the script: (0 minutes 2.746 seconds)

Gallery generated by Sphinx-Gallery