WSU logo
School of Electrical Engineering and Computer Science
Washington State University
WSU logo

Understanding the FDTD Method

Jump to section:
   Chapter 1
   Chapter 2
   Chapter 3
   Chapter 4
   Chapter 5
   Chapter 6
   Chapter 7
   Chapter 8
   Chapter 9
   Chapter 10
   Chapter 11
   Chapter 12
   Chapter 13
   Chapter 14
   Appendices
   Bibliography
I once considered publishing a book on the finite-difference time-domain (FDTD) method based on notes I wrote for a course I taught.  But, why go through the hassle of publishing through a publisher when you can give away something for free?  (Okay, I can think of several reasons, but I’m going to ignore them.)

So, here is what I have written.  In addition to my students, several people who have stumbled across these notes via a search engine have told me this material has been quite helpful to them.  Hopefully if you read through this you’ll find it helpful too.  But, here are a few things to note:

  • This material is presented “as is.”  One of the reasons I’m not trying to publish this via the traditional route is that I lack the time to put all the finishing touches on this material (such as adding proper citations to previous work).
  • Despite the previous statement, I sincerely welcome any and all suggestion to improve this material.  If you catch a typo or think there is some weakness in this material, please let me know (by sending me email).
  • If you find this material useful and see an opportunity to cite it in one of your publications, I would be ever so appreciative of the citation.  Please cite this work as: Understanding the Finite-Difference Time-Domain Method, John B. Schneider, www.eecs.wsu.edu/~schneidj/ufdtd, 2010.
  • Although there isn't a hardcopy available for purchase in English, there is is one available in Chinese! You can find that here: 时域有限差分方法及编程技巧. (I get no proceeds from this. I said to the gentleman interested in doing the translation that if I were sent five copies of the translation, they could do what they want with it.)
  • The first two chapters are weak (and have very little to do with FDTD). The third chapter is where the FDTD material really starts and I believe (and hope you agree) that things are pretty decent beginning from there.
  • Understanding the FDTD Method by John B. Schneider is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

    Creative
										 Commons License
  • All the material that went into the book is available at GitHub but that material is out of date with what exists here now (I'll have to synchronize things at some point):
    https://github.com/john-b-schneider/uFDTD.git.

ENTIRE BOOK [PDF, lettersize paper]:  Understanding the FDTD Method by John B. Schneider.
Individual chapters:
  • Chapter 1:  Numeric Artifacts.
    A simple overview of some of the errors inherent in digital computation.

    Chapter 1 contents:

    • 1.1 Introduction
    • 1.2 Finite Precision
    • 1.3 Symbolic Manipulation

    Chapter 1 code:

  • Chapter 2:  Brief Review of Electromagnetics.
    This book isn’t the place to learn about the fundamentals of electromagnetics, but it was necessary to include some background material.

    Chapter 2 contents:

    • 2.1 Introduction
    • 2.2 Coulomb’s Law and Electric Field
    • 2.3 Electric Flux Density
    • 2.4 Static Electric Fields
    • 2.5 Gradient, Divergence, and Curl
    • 2.6 Laplacian
    • 2.7 Gauss’s and Stokes’ Theorems
    • 2.8 Electric Field Boundary Conditions
    • 2.9 Conductivity and Perfect Electric Conductors
    • 2.10 Magnetic Fields
    • 2.11 Magnetic Field Boundary Conditions
    • 2.12 Summary of Static Fields
    • 2.13 Time Varying Fields
    • 2.14 Summary of Time-Varying Fields
    • 2.15 Wave Equation in a Source-Free Region
    • 2.16 One-Dimensional Solutions to the Wave Equation
  • Chapter 3:  Introduction to the Finite-Difference Time-Domain Method:  FDTD in 1D.
    This is where things really start.  You can skip the previous two chapters, but not this one!

    Chapter 3 contents:

    • 3.1 Introduction
    • 3.2 The Yee Algorithm
    • 3.3 Update Equations in 1D
    • 3.4 Computer Implementation of a One-Dimensional FDTD Simulation
    • 3.5 Bare-Bones Simulation
    • 3.6 PMC Boundary in One Dimension
    • 3.7 Snapshots of the Field
    • 3.8 Additive Source
    • 3.9 Terminating the Grid
    • 3.10 Total-Field/Scattered-Field Boundary
    • 3.11 Inhomogeneities
    • 3.12 Lossy Material

    Chapter 3 code:

  • Chapter 4:  Improving the FDTD Code.
    The goal of this book is to enable you to write fast, efficient FDTD code in the C language.  The material in this chapter discusses a way to "modularize" the code using structures.  (Although it isn’t necessarily pretty, the FDTD code in this book is much, much faster than MATLAB-based code!)

    Chapter 4 contents:

    • 4.1 Introduction
    • 4.2 Arrays and Dynamic Memory Allocation
    • 4.3 Macros
    • 4.4 Structures
    • 4.5 Improvement Number One
    • 4.6 Modular Design and Initialization Functions
    • 4.7 Improvement Number Two
    • 4.8 Compiling Modular Code
    • 4.9 Improvement Number Three

    Chapter 4 code:

  • Chapter 5:  Scaling FDTD Simulations to Any Frequency.
    So many people talk about a particular frequency when performing an FDTD simulation.  Generally there is no need to do that.  (Granted, sometimes one is interested in a particular frequency, but I find is most convenient to think dimensionlessly, where the points per wavelength in the primary metric describing a simulation.)

    Chapter 5 contents:

    • 5.1 Introduction
    • 5.2 Sources
      • 5.2.1 Gaussian Pulse
      • 5.2.2 Harmonic Sources
      • 5.2.3 The Ricker Wavelet
    • 5.3 Mapping Frequencies to Discrete Fourier Transforms
    • 5.4 Running Discrete Fourier Transform (DFT)
    • 5.5 Real Signals and DFT’s
    • 5.6 Amplitude and Phase from Two Time-Domain Samples
    • 5.7 Conductivity
    • 5.8 Transmission Coefficient for a Planar Interface
      • 5.8.1 Transmission through Planar Interface
      • 5.8.2 Measuring the Transmission Coefficient Using FDTD

    Chapter 5 code:

  • Chapter 6:  Differential-Equation Based Absorbing Boundary Conditions.
    The absorbing boundary conditions (ABC’s) described here are decidedly old-fashioned.  Still, there is some useful information here and the operator notation that is developed comes in handy at various times.

    Chapter 6 contents:

    • 6.1 Introduction
    • 6.2 The Advection Equation
    • 6.3 Terminating the Grid
    • 6.4 Implementation of a First-Order ABC
    • 6.5 ABC Expressed Using Operator Notation
    • 6.6 Second-Order ABC
    • 6.7 Implementation of a Second-Order ABC

    Chapter 6 code:

  • Chapter 7:  Dispersion, Impedance, Reflection, and Transmission.
    This chapter is something of a grab-bag analysis of the FDTD method and the ways in which it differs from the continuous world.

    Chapter 7 contents:

    • 7.1 Introduction
    • 7.2 Dispersion in the Continuous World
    • 7.3 Harmonic Representation of the FDTD Method
    • 7.4 Dispersion in the FDTD Grid
    • 7.5 Numeric Impedance
    • 7.6 Analytic FDTD Reflection and Transmission Coefficients
    • 7.7 Reflection from a PEC
    • 7.8 Interface Aligned with an Electric-Field Node
  • Chapter 8:  Two-Dimensional FDTD Simulations.
    Finally we get beyond 1D!

    Chapter 8 contents:

    • 8.1 Introduction
    • 8.2 Multidimensional Arrays
    • 8.3 Two Dimensions:  TMz Polarization
    • 8.4 TMz Example
    • 8.5 The TFSF Boundary for TMz Polarization
    • 8.6 TMz TFSF Boundary Example
    • 8.7 TEz Polarization
    • 8.8 PEC’s in TEz and TMz Simulations
    • 8.9 TEz Example

    Chapter 8 code:

  • Chapter 9:  Three-Dimensional FDTD.
    If you understood FDTD in 1D, then making the transition to 2D and 3D is truly simple.

    Chapter 9 contents:

    • 9.1 Introduction
    • 9.2 3D Arrays in C
    • 9.3 Governing Equations and the 3D Grid
    • 9.4 3D Example
    • 9.5 TFSF Boundary
    • 9.6 TFSF Demonstration
    • 9.7 Unequal Spatial Steps

    Chapter 9 code:

  • Chapter 10:  Dispersive Material.
    Yes, the FDTD grid is itself dispersive, but here we are trying to model media that are dispersive in the continuous world.

    Chapter 10 contents:

    • 10.1 Introduction
    • 10.2 Constitutive Relations and Dispersive Media
      • 10.2.1 Drude Materials
      • 10.2.2 Lorentz Material
      • 10.2.3 Debye Material
    • 10.3 Debye Materials Using the ADE Method
    • 10.4 Drude Materials Using the ADE Method
    • 10.5 Magnetically Dispersive Material
    • 10.6 Piecewise Linear Recursive Convolution
    • 10.7 PLRC for Debye Material
  • Chapter 11:  Perfectly Matched Layer.
    Now we’re ready to tackle a perfectly matched layer (PML) which is arguably the current state-of-the-art when it comes to ABC’s.

    Chapter 11 contents:

    • 11.1 Introduction
    • 11.2 Lossy Layer, 1D
    • 11.3 Lossy Layer, 2D
    • 11.4 Split-Field Perfectly Matched Layer
    • 11.5 Un-Split PML
    • 11.6 FDTD Implementation of Un-Split PML
  • Chapter 12:  Acoustic FDTD Simulations.
    FDTD can be used for more than just Maxwell’s equations.  This chapter gives a brief overview of the application of the FDTD method to small-signal linear acoustics.

    Chapter 12 contents:

    • 12.1 Introduction
    • 12.2 Governing FDTD Equations
    • 12.3 Two-Dimensional Implementation
  • Chapter 13:  Parallel Processing.
    The FDTD method is a computational hog.  To help handle that, one can parallelize the algorithm (the FDTD method is said to be "trivially parallelizable").  This chapter provides a brief discussion of threading and the Message Passing Interface (MPI) as means of parallelizing code.

    Chapter 13 contents:

    • 13.1 Threads
    • 13.2 Thread Examples
    • 13.3 Message Passing Interface
    • 13.4 Open MPI Basics
    • 13.5 Rank and Size
    • 13.6 Communicating Between Processes
  • Chapter 14:  Near-to-Far-Field Transformation.
    Discussion of how one can use the fields in the FDTD grid to determine the fields at any "distant" point.

    Chapter 14 contents:

    • 14.1 Introduction
    • 14.2 The Equivalence Principle
    • 14.3 Vector Potentials
    • 14.4 Electric Field in the Far-Field
    • 14.5 Simpson’s Composite Integration
    • 14.6 Collocating the Electric and Magnetic Fields:  The Geometric Mean
    • 14.7 NTFF Transformations Using the Geometric Mean
      • 14.7.1 Double-Slit Radiation
      • 14.7.2 Scattering from a Circular Cylinder
      • 14.7.3 Scattering from a Strongly Forward-Scattering Sphere
  • Appendices
    Miscellaneous material including a PostScript primer that has very little to do with FDTD, but I have found it useful at times to have my code directly draw output in PostScript so that I can visualize what is happening in the grid.

    Appendices:

    • A Construction of Fourth-Order Central Differences
    • B Generating a Waterfall Plot and Animation

      Appendix B code:

    • Generating an Animation of 1D Snapshots Contained in a Single File
    • C Rendering and Animating Two-Dimensional Data
    • D Notation
    • E PostScript Primer
      • E.1 Introduction
      • E.2 The PostScript File
      • E.3 PostScript Basic Commands
  • Bibliography
    Citations in this work are sadly lacking, but here is the bibliography such as it is.