Bloch BCs in broadband sweeps over angle of incidence

When using Bloch boundary conditions with a broadband plane wave source, the angle of incidence changes as a function of frequency, as described in the Bloch BCs in broadband simulations section. This makes broadband parameter sweeps of the source angle of incidence difficult because each simulation will return data at a different set of incident angles for each frequency.


The technique in this example has the obvious benefit of making your simulations faster, by allowing you to run broadband simulations. However, it also adds a significant amount of complexity to your simulations. For your initial simulations, it may be easier to simply run the full 2D sweep rather than try to use this technique.

Associated files

usr_bloch_angle_sweep.fsp (15.9 KB)
usr_bloch_angle_sweep.lsf (6.5 KB)

See also

Bloch boundary conditions
Plane waves - Angled injection
PML reflection at angles

Imagine that we want to calculate the transmission of a structure for wavelengths between 300-600 THz (0.5-1um) with a source angle of incidence between 10-45 degrees. One option is to do a series of single frequency simulations. The problem with this solution is the large number of simulations that will be required, since it will require a 2D parameter sweep (wavelength and source angle). An alternative solution is to do a series of broadband simulations. The advantage here is that we only need a 1D parameter sweep (source angle), since each simulation will return broadband data. The complication is that the source angle of incidence will be different at each frequency. Therefore, an extra step will be required to interpolate the data onto a common source angle vector.

In the associated example, we calculate the broadband (300-600 THz) transmission of a structure for plane waves incident at 10-45 degrees. The script will run a 1D parameter sweep over a range of incidence angles. The following figure shows the locations of the data returned by the parameter sweep.


Each line of data is from a single simulation. As you can see, the effective source angle theta changes as a function of frequency within each simulation. This makes further analysis and plotting very difficult. The solution is to interpolate this data onto a uniform grid, as shown in the next figure. The data is interpolated to the uniform grid through a series of 1D interpolations (one for each frequency).


The final result, power transmission vs wavelength and angle of incidence is shown below. The locations of the original data have been superimposed on the image.

This simulation simply calculates the power transmission through an interface. Using Snell’s law, we calculate the critical angle for a 2:1 dielectric interface to be 30 degrees. There should be no wavelength dependence. The above figure suggests this result, although there is some noise because of the resolution of the sweep. The above results could be made smoother by increasing the number of points in the sweep.

Note, for this example, some incidence angles are larger than the critical angle, BFAST cannot be used. If the incidence is in the opposite direction, users can use BFAST and no need to sweep.


  • Simulation bandwidth: In most cases, the simulation bandwidth is inherited from the source frequency range. The simulation bandwidth affects the simulation in many ways, including the mesh size, material fits, etc. In this case, we want these aspects of the simulation setup to be the same for each point in the sweep, even though the source range is changing. For this reason, the script manually sets the simulation bandwidth (in the FDTD region - advanced tab properties), rather than allowing it to be inherited from the source.

  • The monitors in this example always collect data over the full wavelength range (300-600THz), even though the source range is much smaller in some situations. This makes the data analysis easier, but it can lead to some incorrect results for data collected outside the range of frequencies injected by the source (if the source doesn’t inject any power at some frequency, the results at that frequency can’t be accurate). For the most part, this is not a problem, since those data points are outside the range of interest. However, it can cause some small problems near the boundaries of the data. In this particular example, you will see some errors in the above results near theta=10, f=360THz due to this problem. This problem can be minimized by increasing the number of points in the sweep. It can also be completely avoided by slightly increasing the source angle range to slightly more than the actual range of interest.