This section describes Bloch Boundary Conditions (BC's), when they are required, and how they are different from periodic BC.

Bloch boundary conditions are used in a variety of situations, but the most common is in simulations of periodic structures that are illuminated with a plane wave source propagating at an angle (as shown in the screenshot below). If a BFAST plane wave is used, this Bloch BCs are automatically overridden by use of its own built in BCs.

## Periodic structures illuminated by the plane wave source

Bloch BC's are easiest to understand when compared with Periodic BC's for applications where a periodic structure is illuminated by a plane wave source, as shown in the above screenshot. Periodic BC's simply copy the fields at one edge of the simulation region and re-inject them at the other edge. Bloch BC's are very similar, but while copying the fields from one edge to the other they also apply a phase correction to the fields.

$$ \vec{E}_{x_{min}} = e^{-ia_{x} \vec {k}_{bloch} } \vec{E}_{x_{max}} $$

$$ \vec{E}_{x_{max}} = e^{-ia_{x} \vec {k}_{bloch} } \vec{E}_{x_{min}} $$

The need for this phase correction is easy to understand when considering a plane wave propagating at an angle as shown in the following movies. When the propagation is at an angle, the fields from one period to the next are not exactly periodic: They will be out of phase by some amount. The Bloch BC's correct for this factor.

### Movie of plane wave propagating at an angle

This simulation is setup correctly. A uniform wave front at an angle of 45 degrees is visible, as expected. Movie of Ex fields from a simulation of a plane wave propagating in the Z direction at a 45 degree angle of incidence in free space. Bloch BC's are used in the X direction.

INCORRECT! Same setup as above, but with periodic BC in the X direction. This is a common error. Periodic boundaries are not correct because kx of the plane wave is non-zero. A similar error will occur if the "set based on source angle" is not enabled. The error is visible in the scattering that occurs at the simulation boundary.

## Other uses, including bandstructure calculations

Bloch BC's are useful in other situations where setting the in-plane wavevector is important. For example, they are used extensively in Bandstructure calculations.

## Tips and additional information

### Can Bloch BC's be used for propagation at normal incidence

Bloch BC's can be understood as a more general form of Periodic BC's. Simulations that use Periodic BC's would continue to give correct results if the Periodic BC's were replaced with Bloch BC's. In such cases, the Bloch BC's will apply a phase correction of zero degree's, which is equivalent to simply copying the fields from one edge to the other. However, as described in the Computational cost section, using Bloch BC's requires more memory and time, compared to using Periodic BC's.

### Computational cost

Simulations that use Bloch BC's required up to 2x the memory and time compared to an equivalent simulation without Bloch BC's. This increase occurs because the simulation must use complex valued time domain fields, rather than the default choice of real valued time domain fields.

### Implications of using complex valued time domain fields

As stated in the Computational cost section, simulations using Bloch BC's used complex valued time domain fields. In addition to increasing the computational cost of the simulation, this can affect the type of data collected by some monitors:

- Index monitors: No change.
- Frequency domain field monitors: No change.
- Time domain field monitors: Recorded data will be complex, rather than real. In some situations, having complex valued data is helpful. In situations where it is not desired, simply take the real part of the monitor data.
- Time domain movie monitors: When the 'Intensity' option is selected, movies will look slightly different. Rather than seeing every oscillation of the fields, only the envelope function will be visible. This is easy to understand in the following example:

The blue line shows a sin wave modulated by a gaussian pulse. The green line shows |E|^2 of this signal (Ex1 in the following code). This is what you would see in an 'Intensity' movie from a simulation using real valued fields. The red line shows |E|^2 of the complex version of this signal (Ex2 in the following code). This is what you would see in an 'Intensity' movie from a simulation using complex valued fields. # Code to reproduce figure |

### Broadband injection for sources at an angle

As explained above, Bloch BC's apply a phase correction to the fields. This has important consequences for broadband simulations, as explained on the Plane waves - Angled injection page. Additional information can be found on the Bloch BCs in broadband sweeps over angle of incidence KX page. For broadband angled injection, the BFAST plane wave is recommended.

### Automatic calculation of the Bloch vector when using the plane wave source

When doing simulations that involve Bloch BC and plane waves at an angle, "set based on source angle" option should be enabled (it is by default), as shown in the following figure. This setting is only accessible when using Bloch BC. If you disable this option, you have to input kx, ky, and kz manually. Manually setting the bloch vector is important for bandstructure simulations.

[[Note]]: When using multiple plane wave sources and Bloch BC in the simulation, all sources should have the same bandwidth and angle. If not, a warning will be shown and the Bloch vector will be set to 0. |

### See also

Periodic boundary conditions, Plane waves - Angled injection, PML reflection at angles, Plane waves - Edge effects