Wave Equation FDTD Hz

This section explains the equations and implementation of the 2D Wave Equation FDTD TEz FDTD (Hz) (with Berenger PML ABC) algorithm.

For more info on the 2D wave equation FDTD using (Ex,Ey) see:

It is possible to use the FDTD method using the second-order wave equation version of Maxwell equations, instead of the usual first order curl equations (The standard Yee algorithm).

FDTD using the wave equation was first described in Aoyagi1993. This article builds upon the previous work of Aoyagi etal (Aoyagi1993) and includes a “wave equation” version of Berenger’s PML ABC. It is also adapted from the earlier standard 2-D Curl Equation code of Dr. Susan C. Hagness (See Taflove2000). And also builds upon the previous Wave Equation 2-D TEz FDTD (Ex,Ey) program Wave2d.c (Ex,Ey)

The FDTD wave equation formulation probably has no practical value, as implementing the wave equation version of the PML is much more memory intensive and compute intensive than the standard Yee algorithm.

The point of the wave equation is to “decouple” the H and E fields, but the penalty is that it is then necessary to keep around an old value of Hz for every point on the grid.

The program is more or less a “novelty” and is provided as an existence proof. Implementing the PML as a wave equation can be done. (But you probably wouldn’t want to.)


The 2-D TEz Wave Equation FDTD Algorithm

The FDTD Wave Equation algorithm solves for electric and magnetic fields using the uncoupled (E, H are uncoupled) second order wave equations. (As opposed to solving for both the electric or magnetic field using the first order coupled Maxwell’s curl equations)

For the 2D wave equation the components of E (Ex,Ey) are uncoupled from the components of H (Hz).

The wave equation algorithm uses the same Yee grid as the standard curl equation algorithm:


Close-up view of the Yee Grid for the 2-D TEz (transverse electric mode)

Generating the FDTD Wave Equation algorithm

It may be easier to derive the wave equation by starting with the difference equations for the standard curl equations algorithm. The following starts from the split-field equations for the standard Berenger PML (2-D TEz).

Berenger Perfectly Matched Layer (PML) Absorbing Boundary Conditions (ABCs)

Starting with the split-field difference equations for the standard curl equations algorithm:


caex[i][j] = (1.0 - temporaryX) / (1.0 + temporaryX)
cbex[i][j] = (dt / (permittivity0 * dx)) / (1.0 + temporaryX)
caey[i][j] = (1.0 - temporaryY) / (1.0 + temporaryY)
cbey[i][j] = (dt / (permittivity0 * dx)) / (1.0 + temporaryY)

dahzx[i+.5][j+.5] = (1.0 - temporaryZx) / (1.0 + temporaryZx)
dbhzx[i+.5][j+.5] = (dt / (permeability0 * dx)  / (1.0 + temporaryZx)
dahzy[i+.5][j+.5] = (1.0 - temporaryZy) / (1.0 + temporaryZy)
dbhzy[i+.5][j+.5] = (dt / (permeability0 * dx)  / (1.0 + temporaryZy)


temporaryX  = dt * conductivityY[i][j] / (2.0 * permittivity0 )
temporaryY  = dt * conductivityX[i][j] / (2.0 * permittivity0 )
temporaryZx  = dt * magneticResistivityX[i+.5][j+.5] / (2.0 * permeability0)
temporaryZy  = dt * magneticResistivityY[i+.5][j+.5] / (2.0 * permeability0)

from Taflove1995 p.183

In the 2-D TEz FDTD split-field PML curl equations, only Hz is split (Hzx, Hzy).
For the Wave Equation, it was found that the following Hz split-fields correctly modeled the Berenger PML:

09951839160781c0024783bc23db69ff.png Eqn:5.6
baf47764b27b36a4469954aadc412823.png Eqn:5.7
7c4dcedc8857743f2ae95feadef83146.png Eqn:5.8


610119cd0a7d1724a0564e73eaf01261.png Eqn:5.9

Example: Generating the PML FDTD Wave Equation for Hzxa

Starting from Equation 5.5, the equation for hzxa(i+.5,j+.5,n-.5) is:

Likewise from Equation 5.2, the equation for ey(i,j,n) is:

Now multiply Equation 5.10 by caey(i,j), to get:

Now subtract Equation 5.12 from Equation 5.5, to get:

Now, substituting Equation 5.11 into Equation 5.13 and rearranging gives:

Where Equation 5.14 is the split-field PML equation for hzxa. By a similar procedure, equations for hzxb, hzya, hzyb can be obtained.

The actual equations are shown below:

hzxaNew[i][j] = (caey[i][j] + dahzx[i][j])   * hzxa[i][j]  
              - (caey[i][j] * dahzx[i][j])   * hzxaOld[i][j]
              + (cbey[i][j] * dbhzx[i][j])     * (hz[i-1][j]  - hz[i][j]);
hzxbNew[i][j] = (caey[i+1][j] + dahzx[i][j]) * hzxb[i][j]  
              - (caey[i+1][j] * dahzx[i][j]) * hzxbOld[i][j]
              - (cbey[i+1][j] * dbhzx[i][j])   * (hz[i][j]    - hz[i+1][j]);
hzyaNew[i][j] = (caex[i][j+1] + dahzy[i][j]) * hzya[i][j]  
              - (caex[i][j+1] * dahzy[i][j]) * hzyaOld[i][j]
              + (cbex[i][j+1] * dbhzy[i][j])   * (hz[i][j+1]  - hz[i][j]);
hzybNew[i][j] = (caex[i][j] + dahzy[i][j])   * hzyb[i][j]  
              - (caex[i][j] * dahzy[i][j])   * hzybOld[i][j]
              - (cbex[i][j] * dbhzy[i][j])     * (hz[i][j]    - hz[i][j-1]);

As can be seen, the wave equation version of the PML is much more memory and compute intensive compared to the standard Berenger PML curl equations.

It should be noted that the coefficients caex, cbex, caey, cbey, dahzx, dbhzx, dahzy, dbhzy are exactly the same as in the standard Berenger PML curl equations. The wave equation uses the same PML gradient as the curl equations. So the gradient code can be shared between programs.

FDTD Source Code and Results

  • Wave2d.c .c file (FDTD code)
  • Results (Display Hz vs time) Note: Displays Hz in main grid and pml

See Also


  • Aoyagi, Lee, Mittra; “A Hybrid Yee Algorithm/Scalar-Wave Equation Approach”; IEEE Transactions on Microwave Theory and Techniques, vol. 41, no. 9, September 1993

External Links

Personal tools