2.2.7 Klein-Gordon equation

This example solves the Klein-Gordon equation in one dimension, showing the effect of the mass term on wave propagation. With mass=0 the equation reduces to the standard wave equation; increasing the mass introduces dispersion.

klein gordon
  0%|          | 0/50.0 [00:00<?, ?it/s]
Initializing:   0%|          | 0/50.0 [00:00<?, ?it/s]
  0%|          | 0/50.0 [00:02<?, ?it/s]
  0%|          | 0.01/50.0 [00:02<3:59:54, 287.95s/it]
  1%|          | 0.41/50.0 [00:02<05:48,  7.02s/it]
 60%|█████▉    | 29.84/50.0 [00:02<00:01, 10.35it/s]
 60%|█████▉    | 29.84/50.0 [00:02<00:01, 10.35it/s]
100%|██████████| 50.0/50.0 [00:02<00:00, 17.34it/s]
100%|██████████| 50.0/50.0 [00:02<00:00, 17.34it/s]

from pde import KleinGordonPDE, ScalarField, UnitGrid

grid = UnitGrid([128])  # generate grid
u = ScalarField.from_expression(grid, "exp(-((x - 32) / 5) ** 2)")

eq = KleinGordonPDE(speed=1, mass=0.5)  # define the pde
state = eq.get_initial_condition(u)
result = eq.solve(state, t_range=50, dt=0.01)
result[0].plot()

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