$$ \newcommand{\tp}{\thinspace .} $$




Mathematical model and solution method

We solve a one-dimensional, linear, constant-coefficient wave equation by an explicit finite difference method.

The wave equation problem

The standard, linear wave equation in a homogeneous one-dimensional medium reads $$ \begin{equation} \frac{\partial^2 u}{\partial t^2} = c^2 \frac{\partial^2 u}{\partial x^2}, \quad x\in (0,L),\ t\in (0,T]\tp \tag{1} \end{equation} $$ The unknown function \( u \) depends on space \( x \) and time \( t \): \( u=u(x,t) \).

The need for boundary conditions in the wave equation. Four initial and boundary conditions must be specified to have a unique solution:

Initial conditions

Most demonstrations will start with an initial profile of \( u \), $$ u(x,0) = I(x), $$ being at rest, i.e., $$ \frac{\partial}{\partial t}u(x,0) = 0\tp $$ Two initial profiles will be considered:

Figure 1: Examples on initial conditions.

Boundary conditions

Fixed \( u \)

At \( x=0 \) we will sometimes use the condition \( u=0 \), often known as a homogeneous Dirichlet condition. This condition will mirror the wave.

Reflecting condition

At \( x=0 \) and/or \( x=L \) we will apply a reflecting or no-flux condition: $$ \begin{equation} \frac{\partial u}{\partial x}=0\tp \tag{2} \end{equation} $$ This condition reflects the wave into the domain again, as a surface wave hits a vertical wave, runs up to the double amplitude, and propagates back into the domain again. This type of boundary condition is also referred to as a Neumann condition.

Feeding a wave from the boundary

We shall demonstrate the effect of moving \( u \) at the boundary \( x=0 \) to feed the domain with an incoming wave. The boundary condition then reads $$ u(0,t) = U_0(t),$$ for some given function \( U_0(t) \). A particular choice in a later demonstration is a sine function that is active in three different time intervals: $$ U_0 (t) = \left\lbrace\begin{array}{ll} \frac{1}{4}\sin(6\pi t),& t\in T_1\hbox{ or } t\in T_2\hbox{ or } t\in T_3\\ 0,& \hbox{otherwise} \end{array}\right. $$ where \( T_1=[0, \frac{1}{6}] \), \( T_2=[\frac{3}{4}, \frac{5}{6}] \), and \( T_3=[\frac{3}{2},\frac{11}{6}] \). The movement of \( u \) at the boundary will produce a wave that is by the PDE transported to the right into the domain.

Open boundary condition

Very often one wants to let a wave travel through the boundary without being disturbed. Such a condition is called an open boundary condition, or a radiation condition, or an artificial boundary condition: $$ \begin{align} \frac{\partial u}{\partial t} - c\frac{\partial u}{\partial x} &= 0,\quad x=0, \tag{3}\\ \frac{\partial u}{\partial t} + c\frac{\partial u}{\partial x} &= 0,\quad x=L\tp \tag{4} \end{align} $$ These conditions work exactly in 1D, but are challenging to generalize and implement in 2D and 3D.

Periodic boundary condition

When following a wave motion over large distances, it is desireable to let a wave travel out of the right domain and at the same time feed the wave back into the domain from the left. This approach avoids a very large domain where nothing happens in the majority of the domain. A periodic boundary condition at \( x=0 \) can be used to feed the signal traveling out at \( x=L \) into the domain: $$ \begin{equation} u(0,t) = u(L,t)\tp \tag{5} \end{equation} $$ The condition at \( x=L \) is then an open boundary condition (4).

Numerical solution method

The wave equation is solved by an explicit finite difference method, which is of second-order in space and time. A uniform mesh with spacing \( \Delta x \) and \( \Delta t \) is used in space and time, respectively. The no-flux or Neumann boundary conditions are implemented by modifying the computational stencil at the boundary. The open boundary conditions are implemented by forward in time, upstream in space finite differences, which exactly let the wave out of the boundary. More details are found in Appendix: Numerical solution method. Parts of the computer code are explained in Appendix: Computer code.