Home/Technical Information/Technical Notes

Technical Notes

Bloch Boundary Conditions in Lumerical FDTD and MODE: Principle, Settings and Computational Cost

Bloch boundary conditions in Lumerical FDTD and MODE: how they differ from periodic boundaries, the phase correction for oblique incidence, and the cost of complex-valued fields (twice the memory and twice the time). Also covers when to use BFAST instead and the Source Angle setting that prevents boundary scattering.

What Bloch boundary conditions do: phase correction at oblique incidence

Lumerical FDTDandLumerical MODE, when to use Bloch boundary conditions, and how they differ from periodic boundary conditions.

Bloch boundary conditions are used in a range of situations, but the most common is a simulation in which a plane-wave source illuminates a periodic structure at an angle.

BFAST plane wave is used, Bloch boundary conditions are ignored automatically and the boundary conditions built into BFAST are used instead.

The physical difference between periodic and Bloch boundary conditions

Bloch boundary conditions are easiest to understand alongside periodic boundary conditions, in an application where a periodic structure is illuminated by a plane-wave source, as in the screenshot above. A periodic boundary condition copies the field at one edge of the simulation region to the opposite edge. A Bloch boundary condition is very similar, except that it copies the field from one edge to the opposite edge with a phase correction applied.

Why that phase correction is needed is easiest to see by considering a plane wave propagating at an angle, as in the video below. When propagation is at an angle, the field is no longer perfectly periodic from one period to the next: it is shifted in phase by a certain amount. The Bloch boundary condition corrects for that phase difference.

Verification: suppressing boundary scattering and keeping phase continuous at oblique incidence (with video)

The electric field Ex of a plane wave propagating in free space along Z at 45 degrees

This simulation is set up correctly. A uniform wavefront at 45 degrees is observed as expected. Bloch boundary conditions are used in the X direction.

Identical to the above except that periodic boundary conditions are used in the X direction. This is a common mistake, because kx of the plane wave is not zero. The same mistake occurs when “set based on source angle” is not used. You can recognise it as scattering at the simulation boundary.

Setting the wavevector (k vector) in band structure calculations for photonic crystals and similar

Bloch boundary conditions are also useful whenever the in-plane wavevector setting matters. Band structure calculations, for instance, use Bloch boundary conditions widely.

Computational cost: memory load from complex-valued fields, and changes to monitor data

Can Bloch boundary conditions be used for propagation at normal incidence?

Bloch boundary conditions can be understood as a general form of periodic boundary conditions. A simulation that uses periodic boundary conditions still gives correct results if those boundaries are replaced with Bloch boundary conditions. After such a swap, the Bloch boundary condition applies a phase correction of zero degrees, which is equivalent to simply copying the field at one edge to the opposite edge. As the section on computational cost explains, however, using Bloch boundary conditions requires extra memory and time compared with periodic boundary conditions.

Computational cost

A simulation using Bloch boundary conditions needs twice the memory and twice the time of the same simulation without them. The increase is because a simulation with Bloch boundary conditions uses complex-valued time-domain fields rather than the default real-valued ones.

Effects of using complex-valued time-domain fields

  • As noted in the “computational cost” section, a simulation using Bloch boundary conditions uses complex-valued time-domain fields. Besides the increase in computational cost, this also affects the data type collected by monitors.
  • Index monitors: no change
  • Frequency domain field monitors: no change
  • Time domain field monitors: the recorded data is complex-valued rather than real-valued. In some situations the complex-valued data is useful. If you do not need the imaginary part, simply take the real part of the monitor data.
  • Time domain movie monitors: when the ‘Intensity’ option is selected, the movie looks somewhat different. Instead of seeing each oscillation of the field, you see only the envelope. The following example should make this clear.

The blue line represents a sine wave modulated by a Gaussian pulse.

The green line represents the square of the absolute value of that signal, |E|^2 (Ex1 in the code below). This is what you see in the ‘Intensity’ movie of a simulation using real-valued fields.

The red line represents |E|^2 for the complex-valued version of the signal (Ex2 in the code below). This is what you see in the ‘Intensity’ movie of a simulation using complex-valued fields.

# Code to reproduce figure
t=linspace(0,20,1000);
w=10;
Ex1=sin(wt)exp(-(t-10)^2/5);
Ex2=exp(1iwt)*exp(-(t-10)^2/5);
plot(t,real(Ex1),abs(Ex1)^2,abs(Ex2)^2);
legend(“Real Ex”,”|Ex_real_field|^2″,”|Ex_complex_field|^2″);

Broadband sources at an angle of incidence

As explained above, Bloch boundary conditions apply a phase correction to the field. As explained on the Plane waves – Angled injection page, this has an important consequence for broadband simulations.
For broadband simulations at an angle of incidence we recommend BFAST plane wave.

Automatic calculation of the Bloch vector when a plane-wave source is used

When running a simulation that involves Bloch boundary conditions and a plane wave at an angle, use the “set based on source angle” option shown in the figure below. This setting is only available when Bloch boundary conditions are in use. Without it, you must set kx, ky and kz manually.
Setting the Bloch vector manually becomes important in band structure simulations.

Note: when a simulation uses several plane-wave sources together with Bloch boundary conditions, all sources must have the same bandwidth and angle. Otherwise a warning is shown and the Bloch vector is set to zero.

Talk to us about applying this to your own design

From confirming that the settings in this article are sound, through to applying them to a problem of your own.