School of Electrical Engineering and Computer Science

Washington State University

Washington State University

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. - 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.

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 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

Animation (courtesy of John Coady) - 3.7 Snapshots of the Field
- 3.8 Additive Source
- 3.9 Terminating the Grid
- 3.10 Total-Field/Scattered-Field Boundary

Animation (courtesy of John Coady) - 3.11 Inhomogeneities

Animation (courtesy of John Coady) - 3.12 Lossy Material

Animation (courtesy of John Coady)

- 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 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 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 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: TM
^{z}Polarization - 8.4 TM
^{z}Example

Animation (courtesy of John Coady) - 8.5 The TFSF Boundary for TM
^{z}Polarization - 8.6 TM
^{z}TFSF Boundary Example - 8.7 TE
^{z}Polarization - 8.8 PEC’s in TE
^{z}and TM^{z}Simulations - 8.9 TE
^{z}Example

- 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 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 Gemoetric 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
- 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