$$ \newcommand{\half}{\frac{1}{2}} \newcommand{\halfi}{{1/2}} \newcommand{\tp}{\thinspace .} \newcommand{\uex}{{u_{\small\mbox{e}}}} \newcommand{\xpoint}{\boldsymbol{x}} \newcommand{\normalvec}{\boldsymbol{n}} \newcommand{\Oof}[1]{\mathcal{O}(#1)} \renewcommand{\u}{\boldsymbol{u}} \newcommand{\f}{\boldsymbol{f}} \newcommand{\stress}{\boldsymbol{\sigma}} \newcommand{\I}{\boldsymbol{I}} \newcommand{\T}{\boldsymbol{T}} \newcommand{\ii}{\boldsymbol{i}} \newcommand{\jj}{\boldsymbol{j}} \newcommand{\kk}{\boldsymbol{k}} \newcommand{\Ix}{\mathcal{I}_x} \newcommand{\Iy}{\mathcal{I}_y} \newcommand{\Iz}{\mathcal{I}_z} \newcommand{\It}{\mathcal{I}_t} \newcommand{\setb}[1]{#1^0} % set begin \newcommand{\sete}[1]{#1^{-1}} % set end \newcommand{\setl}[1]{#1^-} \newcommand{\setr}[1]{#1^+} \newcommand{\seti}[1]{#1^i} \newcommand{\Real}{\mathbb{R}} \newcommand{\Integer}{\mathbb{Z}} $$

Finite difference methods for wave equations

Hans Petter Langtangen [1, 2]
Svein Linge [3, 1]

[1] Center for Biomedical Computing, Simula Research Laboratory
[2] Department of Informatics, University of Oslo
[3] Department of Process, Energy and Environmental Technology, University College of Southeast Norway

Jul 14, 2016


Table of contents

Simulation of waves on a string
      Discretizing the domain
      The discrete solution
      Fulfilling the equation at the mesh points
      Replacing derivatives by finite differences
      Formulating a recursive algorithm
      Sketch of an implementation
Verification
      A slightly generalized model problem
      Using an analytical solution of physical significance
      Manufactured solution and estimation of convergence rates
      Constructing an exact solution of the discrete equations
Implementation
      Callback function for user-specific actions
      The solver function
      Verification: exact quadratic solution
      Verification: convergence rates
      Visualization: animating the solution
      Running a case
      Working with a scaled PDE model
Vectorization
      Operations on slices of arrays
      Finite difference schemes expressed as slices
      Verification
      Efficiency measurements
      Remark on the updating of arrays
Exercises
      Exercise 1: Simulate a standing wave
      Exercise 2: Add storage of solution in a user action function
      Exercise 3: Use a class for the user action function
      Exercise 4: Compare several Courant numbers in one movie
      Exercise 5: Implementing the solver function as a generator
      Project 6: Calculus with 1D mesh functions
Generalization: reflecting boundaries
      Neumann boundary condition
      Discretization of derivatives at the boundary
      Implementation of Neumann conditions
      Index set notation
      Verifying the implementation of Neumann conditions
      Alternative implementation via ghost cells
Generalization: variable wave velocity
      The model PDE with a variable coefficient
      Discretizing the variable coefficient
      Computing the coefficient between mesh points
      How a variable coefficient affects the stability
      Neumann condition and a variable coefficient
      Implementation of variable coefficients
      A more general PDE model with variable coefficients
      Generalization: damping
Building a general 1D wave equation solver
      User action function as a class
      Pulse propagation in two media
Exercises
      Exercise 7: Find the analytical solution to a damped wave equation
      Problem 8: Explore symmetry boundary conditions
      Exercise 9: Send pulse waves through a layered medium
      Exercise 10: Explain why numerical noise occurs
      Exercise 11: Investigate harmonic averaging in a 1D model
      Problem 12: Implement open boundary conditions
      Exercise 13: Implement periodic boundary conditions
      Exercise 14: Compare discretizations of a Neumann condition
      Exercise 15: Verification by a cubic polynomial in space
Analysis of the difference equations
      Properties of the solution of the wave equation
      More precise definition of Fourier representations
      Stability
      Numerical dispersion relation
      Extending the analysis to 2D and 3D
Finite difference methods for 2D and 3D wave equations
      Multi-dimensional wave equations
      Mesh
      Discretization
Implementation
      Scalar computations
      Vectorized computations
      Verification
Exercises
      Exercise 16: Check that a solution fulfills the discrete model
      Project 17: Calculus with 2D mesh functions
      Exercise 18: Implement Neumann conditions in 2D
      Exercise 19: Test the efficiency of compiled loops in 3D
Applications of wave equations
      Waves on a string
      Elastic waves in a rod
      Waves on a membrane
      The acoustic model for seismic waves
      Sound waves in liquids and gases
      Spherical waves
      The linear shallow water equations
      Waves in blood vessels
      Electromagnetic waves
Exercises
      Exercise 20: Simulate waves on a non-homogeneous string
      Exercise 21: Simulate damped waves on a string
      Exercise 22: Simulate elastic waves in a rod
      Exercise 23: Simulate spherical waves
      Problem 24: Earthquake-generated tsunami over a subsea hill
      Problem 25: Earthquake-generated tsunami over a 3D hill
      Problem 26: Investigate Matplotlib for visualization
      Problem 27: Investigate visualization packages
      Problem 28: Implement loops in compiled languages
      Exercise 29: Simulate seismic waves in 2D
      Project 30: Model 3D acoustic waves in a room
      Project 31: Solve a 1D transport equation
      Problem 32: General analytical solution of a 1D damped wave equation
      Problem 33: General analytical solution of a 2D damped wave equation
References

© 2016, Hans Petter Langtangen, Svein Linge. Released under CC Attribution 4.0 license