Wave equation: absorbing boundary conditions (ABC)

delay it

There are three simple boundary conditions for wave equations:
  1. Periodic (corresponding to the gl.REPEAT texture wrap mode).
  2. The Dirichlet boundary condition
        u(x) = c,
    we use usually fixed c = 0 boundary values.
  3. The Neumann boundary condition
        u' = c.
    For c = 0 it corresponds to the gl.CLAMP_TO_EDGE mode.
We can rewrite the wave equation
    tt u - ∂xx u = 0,
    (∂t + ∂x )(∂t - ∂x )u = 0.
Any functions f(x - t), g(x + t) satisfy the equations
    (∂t + ∂x )f(x - t) = 0,     (∂t - ∂x )g(x + t) = 0
and therefore are solutions of the wave equation and correspond to two waves moving in opposite directions. To fulfill the second condition for a moving packet (e.g. to the right on the Fig.1) one can send "negative" packet in the opposite direction. Then we get u = 0 in the middle between them. In a similar way we fulfill the third condition x u = 0 if we send identical fictitious packet (see Fig.2).

ABC for waves

If we set at the right border point
    (∂t + ∂x )u = 0,
then we get only outgoing 1D waves at the boundary (one should use careful discretization to get stable algorithm).

Surprisingly very simple (but efficient) Liao's second-order ABC is given as:
    ux+1, t+1 = 2 ux, t - ux-1, t-1 .
They are used in the script above and in the One slit diffraction.

Electromagnetic wave simulation
updated 4 Mar 2014