Home Examples Screenshots User manual Bluesky logo YouTube
OghmaNano Multiphysics simulation platform for optoelectronic devices and photonic systems DOWNLOAD Quick Start guide

Anti-Reflective Coating Simulation (FDTD): 1D Thin-Film Tutorial

1. Introduction

Conceptual diagram showing how an anti-reflective coating suppresses reflection using destructive interference
A single-layer anti-reflective coating reduces reflection by causing the two reflected waves to cancel one another.
Photographic comparison showing untreated glass and glass with an anti-reflective coating
In practice, anti-reflective coatings make glass look more transparent by reducing surface glare.

Whenever light encounters a boundary between two materials with different refractive indices, some of the light is transmitted and some is reflected. This is why bare glass surfaces often appear shiny, even when the glass itself is transparent. An anti-reflective (AR) coating is a thin optical film designed to reduce this unwanted reflection and thereby increase the transmitted light.

The basic idea is shown in ??. Rather than trying to eliminate reflection at a single interface, we add a thin intermediate layer between air and the substrate. Light now reflects from two places: the air–film interface and the film–substrate interface. If the film is chosen correctly, these two reflected waves have similar amplitudes but opposite phase, so they interfere destructively. The result is that the net reflected field is strongly reduced.

Phase matching: To cancel reflection, the two reflected waves must return half a wavelength out of step (a phase difference of \(\pi\)). We usually design this for light incident normal to the surface, even though ?? shows the geometry at an angle for clarity.

The first reflection occurs at the air–film surface. The second reflection comes from the film–substrate interface, but this wave has travelled down through the film and back again. If the film thickness is \(d\), this extra distance is \(2d\).

Inside the film, light travels more slowly, so the wavelength is reduced by the refractive index \(n_f\). This means the extra optical path length is \(2n_f d\). For destructive interference, this must equal half a wavelength:

\(2n_f d = \dfrac{\lambda_0}{2}\)

which gives

\(d = \dfrac{\lambda_0}{4n_f}\)

So the coating thickness \(d\) is chosen to be one quarter of the wavelength (inside the film), ensuring the lower reflected wave returns half a wavelength out of phase with the upper one and cancels it.

Amplitude matching: Phase cancellation alone is not sufficient; the two reflected waves must also have similar amplitudes. For a non-absorbing single-layer coating at normal incidence, this is achieved when the coating refractive index is approximately

\(n_f \approx \sqrt{n_0 n_s}\)

where \(n_0\) is the refractive index of the incident medium and \(n_s\) is that of the substrate. For air on glass, this gives an ideal index around 1.2–1.3, which is lower than most practical materials. As a result, real coatings are typically approximate, or use multi-layer designs to improve performance.

The practical effect is shown in ??: the reflected glare is reduced and the substrate appears more transparent. This principle is widely used in solar cells, lenses, and optical coatings.

In this tutorial, we use the Finite-Difference Time-Domain (FDTD) method to simulate a simple 1D anti-reflective coating. By running the model, you will see how the coating modifies reflection and transmission, and how the film thickness sets the wavelength at which reflection is minimised.

2. Making a new simulation

Open the New simulation window and select the FDTD examples category (??). Then choose the Anti-reflective coating (think film interference) example (??). This loads the main interface shown in ??.

OghmaNano New simulation window showing categories including an FDTD examples option.
The New simulation window. Open FDTD examples.
FDTD example list including the anti-reflective coating example.
FDTD examples list. Select Anti-reflective coating.
Main OghmaNano window showing a one-dimensional anti-reflective coating geometry with source, thin film, substrate, detectors, and absorbing boundaries.
The main OghmaNano interface after loading the anti-reflective coating example.

The structure is displayed in the 3D view within the Device structure tab. This view shows all the key components of the anti-reflective coating simulation. On the left, the green arrows represent the FDTD source, where the optical pulse is injected. The thin purple line running through the structure is the FDTD grid. In this example, the simulation is effectively one-dimensional, so the grid appears as a single line passing through the coating and substrate.

Just to the right of the source, the purple plane represents a detector, which records the incident and reflected fields. It does not influence the simulation, but simply samples the electromagnetic field across the grid. Further to the right is the thin anti-reflective coating deposited on the substrate. The light blue region corresponds to this coating layer, while the much thicker region represents the gallium arsenide (GaAs) substrate. In this example, we use GaAs rather than glass, as this type of coating is commonly applied to devices such as photodetectors to improve light coupling.

Terminal tab showing the anti-reflective coating FDTD simulation starting, including timestep, wavelength information, and backend selection.
The Terminal tab during an FDTD run.
Output tab listing files produced by the anti-reflective coating simulation including detector outputs and snapshots directory.
The Output tab after the run.

3. Running the simulation

Once you have saved the simulation and had a look around the structure, click the Run (▶) button to start the calculation. As the simulation runs, you can monitor its progress in the Terminal tab, shown in ??. This displays information such as the timestep, wavelength range, and backend being used. Near the start of the run you will see a line saying Searching for OpenCL devices. These are hardware acceleration devices that can be used to speed up the simulation. If a suitable OpenCL device is found, as in the example shown in the figure, OghmaNano will use it automatically and run the simulation on the GPU rather than the CPU.

When the simulation has finished, switch to the Output tab, shown in ??. Here you will find the data generated during the run. The key outputs for this tutorial are detector_0 and detector_1, which contain the signals recorded by the two detectors. You can also open device to view the 3D geometry, and the snapshots/ directory to see how the electromagnetic fields evolve over time. You should notice that this simulation runs very quickly. Because it is a 1D problem, typical run times are only a few seconds. If the simulation is taking significantly longer than this, refer to the note above about saving the simulation on a fast local drive.

5. Viewing electric field snapshots

Open the snapshots/ output directory (from the Output tab) and double-click to launch the snapshot viewer. This allows you to view the simulation results as a function of time. Click the + button once to add a dataset, then select Ey. In this simulation the field is excited in the y-direction, so this component gives the most direct view of the wave propagation. You can then use the slider bar to step through time and observe how the field evolves. Three representative snapshots are shown in ????.

At early times (left panel, ??), you can see the initial broadband pulse travelling toward the coated surface. The field is still spatially localised, with a sharp leading edge corresponding to the injected excitation.

As time progresses (middle panel, ??), the pulse reaches the thin film and substrate. Part of the wave is reflected while part is transmitted. The field near the interface shows small oscillations due to partial reflection and the broadband nature of the pulse, rather than a single-frequency interference pattern.

At later times (right panel, ??), the forward-propagating transmitted wave dominates inside the substrate, while a weaker reflected component travels back toward the source. In a well-designed anti-reflective structure, this reflected component is smaller than it would be for an uncoated interface. This reduction does not arise because reflection disappears at each interface individually, but because the reflected contributions combine destructively.

Early-time electric field showing the injected pulse approaching the anti-reflective coating.
Early time: the injected pulse is travelling toward the coated interface.
Intermediate electric field showing partial reflection and transmission at the coated interface.
Intermediate time: partial reflection and transmission at the coated surface.
Late-time electric field showing reduced reflection and dominant transmission into the substrate.
Later time: reduced reflection and dominant transmission into the substrate.

6. Viewing detector outputs

Returning to the Output tab (see ??), you will see a folder labelled Detector0. In this example, only a single detector is used, positioned on the source side of the structure to measure the incoming and reflected light. Open Detector0 and locate the file lam_E.csv. This file contains the frequency-domain response of the electric field at the detector. Double-click it to plot the spectrum, as shown in ??.

You should observe a strong peak centred near the main wavelength of the source (around 400 nm). The magnitude of this peak is relatively small (of order \(10^{-3}\)–\(10^{-2}\)), indicating that only a limited fraction of the light is being reflected back toward the detector. This is the effect of the anti-reflective coating. To confirm this, return to the Device structure tab and move the coating out of the optical path. As shown in ??, click on the coating and drag it away from the main propagation direction using the left mouse button. If the object becomes difficult to move due to overlap, use the arrow keys (with Shift) to reposition it slightly until it is free.

Once the coating has been removed from the path, rerun the simulation. Then return to Detector0 and open lam_E.csv again. The result is shown in ??. You should now observe a much larger peak at the source wavelength. This indicates that a significantly greater fraction of the light is being reflected at the interface when the coating is absent.

It is important to note that this detector primarily measures light passing through it from the source direction. When the coating is present, destructive interference reduces the reflected component, so the detected signal is relatively small. When the coating is removed, reflection increases, and more light is redirected back toward the detector, leading to the larger peak.

This comparison clearly demonstrates the function of the anti-reflective coating: it reduces the reflected light at the design wavelength, allowing more of the incident light to enter the substrate.

Detector spectrum with anti-reflective coating showing reduced reflected signal.
With coating: reduced reflected signal at the detector.
Device structure showing the anti-reflective coating being moved out of the optical path.
Move the coating out of the optical path.
Detector spectrum without coating showing increased reflected signal.
Without coating: increased reflected signal.

7. Comparing spectra with and without the anti-reflective coating (optional)

In FDTD simulations, it is often very useful to compare results before and after making a change to the structure. In this case, we compare the response of the device with and without the anti-reflective coating. This step is not required to complete the tutorial, but if you have access to a tool such as MATLAB or Octave, it provides a much clearer view of the coating performance.

The reason for doing this comparison is that the raw detector signal is strongly influenced by the spectral shape of the source. By comparing two simulations with the same source, this influence largely cancels out, allowing you to isolate the effect of the coating itself. First, run the simulation without the coating (as described in the previous section). Then open the Detector0 folder and copy the file lam_E.csv to a new file, for example without.csv.

Next, return to the device structure, move the coating back into the optical path, and rerun the simulation. Once the run is complete, again copy lam_E.csv, this time saving it as with.csv. You now have two datasets: one for the uncoated structure and one for the coated structure. These can be compared directly using MATLAB or Octave with the following script:


with_data    = load('with.csv');
without_data = load('without.csv');

lam_m = without_data(:,1);          % wavelength in meters
lam   = lam_m * 1e9;               % convert to nanometers

ref0 = without_data(:,2);
ref1 = interp1(with_data(:,1), with_data(:,2), lam_m, 'linear');

ratio = ref1 ./ ref0;

plot(lam, ratio, 'k', 'linewidth', 2);
xlabel('Wavelength (nm)');
ylabel('Relative reflection');
title('Anti-reflective coating response');
grid on;
ylim([0 1.2]);
Relative reflection spectrum showing a dip around 400 nm due to the anti-reflective coating.
Relative reflection spectrum comparing the coated and uncoated structures. A clear minimum is observed near 400 nm, corresponding to the design wavelength of the anti-reflective coating.

The resulting plot is shown in ??. You should observe a clear dip in the relative reflection around 400 nm. This dip corresponds to the design wavelength of the anti-reflective coating. At this wavelength, the reflected waves from the two interfaces cancel, reducing the net reflected light. Away from this wavelength, the phase condition is no longer satisfied, and the reflection gradually increases again. This comparison provides a clear, quantitative demonstration of how the coating modifies the optical response, and is often the easiest way to evaluate thin-film designs in practice.

7. Experimenting with the coating dimensions

To explore how the anti-reflective behaviour depends on the structure, right-click on the coating and select Edit object. This opens the object editor, where the geometry and material parameters of the coating can be controlled, as shown in ??. In this simulation, the coating is represented as a thin layer on the front surface of the substrate. The key quantity is the film thickness, because this controls the phase delay acquired by light that reflects from the lower interface.

Object editor showing thickness and material settings for the anti-reflective coating.
The object editor for the anti-reflective coating layer.
Material or object settings showing a substrate such as GaAs used in the anti-reflective coating tutorial.
You can also experiment with the substrate and material system.
Output spectrum showing a reflection minimum shifted after changing coating thickness.
Changing the coating thickness shifts the wavelength of minimum reflection.

For a single-layer AR coating, the design wavelength is linked to the thickness by \[ d = \frac{\lambda_0}{4n_f}. \] Rearranging this gives \[ \lambda_0 = 4n_f d. \] This means the wavelength at which reflection is minimised scales approximately linearly with thickness.

As an example, if the coating refractive index is \(n_f = 1.5\) and the thickness is \(d = 80\) nm, then the quarter-wave design wavelength is \[ \lambda_0 \approx 4 \times 1.5 \times 80 = 480\ \text{nm}. \] If you increase the thickness to \(d = 100\) nm, the minimum shifts to \[ \lambda_0 \approx 4 \times 1.5 \times 100 = 600\ \text{nm}. \] This is the main trend you should look for when modifying the coating.

Now rerun the simulation and inspect the detector outputs. You should observe that the wavelength of minimum reflection moves as the film thickness changes. If the thickness is too small, the reflection minimum appears at shorter wavelengths; if the thickness is too large, it moves to longer wavelengths.

The refractive index also matters. A quarter-wave film with the wrong refractive index can still introduce the correct phase shift, but the two reflected waves will not have matching amplitudes, so cancellation will be incomplete. This is why the index condition \[ n_f \approx \sqrt{n_0 n_s} \] is so important. For real materials, the optimal index may not be available, and the coating becomes a compromise.