
                              Xwaves

                          Michael Creutz   
                          creutz@bnl.gov 

This program illustrates the behaviors of three common wave equations,
differing in the relation between the frequency w and the wave number
k.  First is the simple wave equation with w proportional to k; this
is the equation is obeyed by free photons.  Second is the Klein-Gordon
equation with w proportional to the sqrt(k^2+m^2) with m a constant
representing a particle mass, say that of the electron or a pion.
Finally is the equation for long wavelength water waves, which obey w
proportional to sqrt(k).

This should run on any X platform.  To compile, try the xtoys
Makefile.  Otherwise try

cc -O -o xwaves xwaves.c -lm -lX11

If this does not work immediately, try adding -I and -L flags to
directories where the X includes and libraries are located.  For
example, on a Sun try

cc -O -I/usr/openwin/include -L/usr/openwin/lib -o xwaves xwaves.c -lm -lX11

The program starts with wave packets cycling around the periodic
boundary conditions.  The equation is that for light, and the wave
packets move with the same velocity as the short waves of which they
are composed.

If you now click on the "mesons" button, the mass term of the
Klein-Gordon equation is turned on.  Note how the short components now
move faster than the packets.  This illustrates how the group velocity
of a wave equation can differ from the phase velocity.  For the
Klein-Gordon equation, the phase velocity exceeds the speed of light,
but this is not a problem because information is carried only by wave
packets, which move at the group velocity.  The latter is always less
than the speed of light.

Selecting the water button shows a similar effect.  In this case the
group velocity is exactly one half the phase velocity.  This follows
from the frequency going as the square root of the wavelength.  This
is my favorite example of an interesting result following from
dimensional analysis.

Mathematically, the phase velocity v_p of a wave equation is given by
the relation

v_p=w/k

while the group velocity v_g is

v_g=dw/dk

Only for the simple wave equation are these equal.

The program has a variety of other buttons to play with.  The
``quit,'' ``pause,'' and ``slow'' buttons do the obvious things.  A
mouse click in the wave portion of the window will insert a
disturbance, much like throwing a rock into a pond.  The ``damp''
button slowly damps out any waves present, while ``vacuum'' settles
the system immediately.  The ``reverse'' button reverses the motion of
all waves.  The ``right'' button eliminates all left moving waves.
Pressing ``packet'' restores the initial two packet state.

The ``blob'' gadget changes the display so the waves run around a
spherical blob rather than along the periodic line.  The ``drift''
button lets that blob drift around and bounce off the window walls.
It has no effect when not in the blob display mode.  A highly excited
drifting blob with the slow button seems like a blend of Matisse with
a lava lamp.

For each one of the three equations, try calming the state with the
vacuum button and then exciting a pulse with a mouse click.  Observe
how the light equation gives a pulse dividing into oppositely moving
pieces that move without changing shape.  With the meson equation, an
oscillating central region emits at first short wavelengths followed
by longer ones.  With water, the long waves are the first to leave the
excitation region.

Some technical details: The waves are displayed using the Xlib routine
XPolyFill() with 256 points on the wave surface.  To avoid
discretization errors, the evolution is calculated in momentum space
and then a fast Fourier transform gives the position space
coordinates.  You can easily obtain other wave equations by modifying
the routine makedispersion().

