This tutorial introduces new users to passive photonic integrated circuit (PIC) component simulation with Lumerical FDTD. This tutorial consists of three parts:
- Part 1 will cover creating and running simulations with the Lumerical FDTD graphical user interface (GUI).
- Part 2 will cover creating and running the same simulation with Lumerical’s scripting language.
- Part 3 will cover creating parameterized simulations and running parametric analysis.
An example simulation will be used to aid in this introduction to Lumerical FDTD. The example will calculate the transmission through a silicon photonics 90 degree circular waveguide bend with the following specifications:
- Width: 0.5 um
- Height: 0.22 um
- Bend radius: 3 um
- Mode: Fundamental TE
- Wavelengths: 1.5-1.6 um
This tutorial will introduce concepts related to Lumerical FDTD then illustrate those concepts by applying them to the waveguide bend example in the sections with titles beginning with “Example Steps”. Follow along with these steps in a single simulation file to build the example simulation. The complete simulation file waveguide_bend.fsp can be downloaded from the link at the top right of this page.
The design of waveguide bends will not be discussed in detail in this tutorial. This device is simply being used to illustrate the functionality of FDTD. For more information on simulating waveguide bends, see Bent waveguide analysis.
Many advanced features will not be covered in this tutorial. A more complete introduction to Lumerical FDTD can be found in the online Lumerical FDTD course.
Lumerical FDTD Simulations
A Lumerical FDTD simulation consists of a collection of simulation objects, like sources, monitors, and geometry objects, in a hierarchical Objects Tree, along with global settings and material models in the Material Library. Creating a Lumerical FDTD simulation mainly consists of adding objects to the simulation and modifying their properties.
Objects can be added to the simulation by clicking on the buttons in the main toolbar found at the top of the Lumerical FDTD graphical interface.
As objects are added to the simulation, they will appear in the hierarchical Objects Tree in the graphical interface:
Objects are added to the simulation with default values for their properties. They are added below the “model” Analysis Group in the Objects Tree (the “model” Analysis Group will be discussed in Part 3 of this tutorial).
After adding an object, it can be modified by right clicking on it in the Objects Tree and selecting Edit object in the context menu. This will open a dialog window where the object properties can be modified.
Building the Geometry
The first step in creating an FDTD simulation is building the device geometry. There are several ways to build geometries in Lumerical FDTD, including:
- Building from scratch using basic parameterized geometry objects
- Importing GDS layout files
- Creating layered geometries with the Layer Builder
- Direct links to external layout tools like Synopsys OptoCompiler
This example will use basic parameterized geometry objects to create the device geometry. Lumerical FDTD includes parameterized geometry objects like Rectangles, Circles, Waveguides, and Polygons. This example will use the Rectangle and Ring objects to build a waveguide bend.
More complex parameterized geometries can be built by placing these basic geometric objects inside Structure Groups, which set the properties of these basic geometry objects using Lumerical’s scripting language. This tutorial will discuss using Structure Groups to build parameterized geometries in Part 3.
Example Steps: Building the bent waveguide geometry
The example waveguide bend geometry will consist of two Rectangles for the input and output waveguides and a Ring object for the circular bend. The light will be input in the +x direction and output in the -y direction. To create the bend geometry:
-
Add a Ring object to the simulation by pressing the Add ring button in the Design tab of the toolbar.
-
Right click the Ring in the Object Tree and select Edit object to edit its properties. Set the following property values in the Geometry tab of the Edit ring dialog window:
- “name” = “waveguide bend”
- “z span” = 0.22 um
- “outer radius” = 3.25 um
- “inner radius” = 2.75 um
- “theta start” = 0 degrees
- “theta stop” = 90 degrees
-
In the Material tab of the Edit ring dialog window set the following property values:
- “material” = “Si (Silicon) – Palik”
- Click OK to accept the new property values.
Next add the input and output waveguide Rectangle objects.
-
Add a Rectangle object to the simulation by pressing the Add rectangle button in the Design tab of the toolbar.
-
Right click the Rectangle in the Object Tree and select Edit object to edit its properties. Set the following property values in the Geometry tab of the Edit rectangle dialog window:
- “name” = “input waveguide”
- “x” = -1 um
- “x span” = 2 um
- “y” = 3 um
- “y span” = 0.5 um
- “z span” = 0.22 um
-
In the Material tab of the Edit rectangle dialog window set the following property values:
- “material” = “Si (Silicon) – Palik”
- Click OK to accept the new property values.
-
Add another Rectangle object to the simulation and set its properties to the following values:
- “name” = “output waveguide”
- “x” = 3 um
- “x span” = 0.5 um
- “y” = -1 um
- “y span” = 2 um
- “z span” = 0.22 um
- “material” = “Si (Silicon) – Palik”
- Click OK to accept the new property values.
Note that the span of a Rectangle solver object can be set either using “x” and “x span”, or “x min” and “x max”, whichever is more convenient. The other pair of properties will be automatically adjusted to match the properties defined by the user.
The waveguide bend geometry is now complete:
FDTD Solver Object
The next step is setting up the FDTD Solver object. The FDTD Solver object defines many important simulation settings, including the simulation volume, boundary conditions (BCs), FDTD mesh, simulation time, and background material.
Simulation Volume
The FDTD Solver object defines the span of the rectangular simulation volume where the electric and magnetic fields will be calculated in the simulation. Any monitors and sources outside the span of the FDTD Solver object will not be included in the simulation. If a monitor or source are partially inside the FDTD Solver object, the sections of the monitor/source outside the FDTD Solver object will be ignored.
Boundary Conditions
Because the FDTD simulation volume is finite, the user must define BCs for the edges of the simulation volume. The most common BCs for PIC component simulations are perfectly matched layer (PML) and symmetry boundaries.
PML boundaries add a layer of artificial absorbing material to the outside of the simulation. The material is designed to have minimal reflection at the interface between the simulation medium and the PML. The PMLs act as absorbing BCs, absorbing almost all the light incident on them. Physically the PMLs model “open” BCs, where the structure surrounding the device (cladding, substrate, input/output waveguides) extend to infinity, not reflecting any light back into the device.
The span of the simulation region should be defined such that evanescent fields don’t interact too much with the PMLs. In the case of PIC components, this is relevant for PMLs parallel with waveguiding structures, where the waveguide modes have evanescent tails. These PMLs should be placed at least half a wavelength away from the edges of the waveguiding structure normal to the direction of propagation.
Any input/output waveguides should pass through the PMLs in the direction of propagation to ensure the fields propagating through them are fully absorbed, modelling waveguides that continue to infinity. Substrate and cladding objects should also pass through the PMLs. See Always extend structures through PML boundary conditions for more information on extending structures through the PML boundaries.
When both the geometry and sources are symmetric, symmetry BCs can be used. Symmetry boundary conditions reduce the size of the simulation region, speeding up the simulation and reducing memory requirements. You can read more on the settings and behavior of symmetry BCs here: Symmetric and anti-symmetric BCs in FDTD and MODE – Ansys Optics.
FDTD Mesh
The FDTD method discretizes the simulation volume on a rectilinear mesh, solving for the electric and magnetic fields at one point in each mesh cell. The size and density of these mesh cells can affect the simulation results, so careful attention is needed to achieve a proper simulation.
Lumerical FDTD has an automatic meshing algorithm that targets a certain number of mesh cells per wavelength (taking into account the local refractive index). The number of mesh cells per wavelength is set with the mesh accuracy property of the FDTD Solver object. A mesh accuracy of “1” targets 6 mesh cells per wavelength, and each further increment in mesh accuracy increases the target mesh cells per wavelength by 4.
Increasing the mesh density increases the accuracy of the simulation but also increases the required memory and time to run the simulation.
Additionally, a mesh override object can be used to specify mesh spacing in certain regions of the simulation. This should be used in regions where the geometry has fine features , for example, the gap between waveguides in a directional coupler.
Simulation Time and Auto shutoff Level
A Lumerical FDTD simulation will run until either the “simulation time” or the “auto shutoff min” is reached. Both are properties of the FDTD solver object. The simulation time is the maximum in-simulation time (not the wall clock time). The auto shutoff level is an approximate measure of the energy left in the simulation region compared to the energy that was injected into the simulation region. If the auto shutoff level reaches the auto shutoff min, the simulation stops. Whichever condition is triggered first, the simulation time or the auto shutoff level, can give some information about the simulation itself.
Typically, frequency domain results are used when simulating PIC components. These frequency domain results are calculated by taking the Fourier transform of the time domain fields calculated by FDTD. To get accurate frequency domain results, the entire time-domain signal needs to be captured, and by extension, the simulation should be run until almost all the energy has left the simulation region. Therefore, the designer should ensure that the end of the simulation is triggered by reaching the auto shutoff level, not the simulation time.
One way to determine what triggered the simulation to end after running is to observe the ‘status’ result in the Results View window. A status of ‘1’ means that the simulation ended due to the total simulation time being reached, while a status of ‘2’ means that the auto-shutoff level was reached. More information about running the simulation and the Results View window will be shared later in this tutorial.
In most cases, the default auto shutoff min value of 1e-5 provides a good balance between accuracy and the time required for simulation. Occasionally, the simulation time will need to be increased to make sure it is not reached before the auto shutoff min.
Background Material
The FDTD object has a “background material” property that can be used to set the material for anywhere in the simulation region that is not inside a geometry object.
Example Steps: Adding the FDTD Solver object
Continuing the bent waveguide example, next the FDTD solver region will be added to the simulation.
PML boundaries will be placed 2 um from the edges of the waveguides normal to the propagation direction. Symmetric BCs will be used for the z min BC since the structure and sources are symmetric in this direction. A short length of input and output waveguides will be included in the simulation region for injecting and measuring the waveguide modes at the input and output of the bend. The input and output waveguides will pass all the way through the PML boundaries.
-
Press the FDTD button in the Solvers section of the Design tab to add an FDTD solver object to the simulation.
-
Right click on the FDTD solver object in the Objects Tree and select Edit object. Set the following properties:
- “background material” = “SiO2 (Glass) – Palik”
- “x min” = -1 um, “x max” = 5.25 um
- “y min” = -1 um, “y span” = 5.25 um
- “z” = 0, “z span” = 4.22 um
- “z min bc” = “Symmetric”
- Click OK to accept the new property values.
The FDTD object properties are now set. Note how the span of the FDTD object was specified such that the ends of the input and output waveguides pass through the PMLs, but the edges of the waveguides are more than a half wavelength from the PMLs:
After an FDTD object is added to the simulation, an FDTD tab will appear in the toolbar with buttons that have functions specific to the FDTD solver.
From this tab, we can add FDTD specific simulation objects like sources and monitors.
Sources and Monitors
Source objects are used to introduce light into Lumerical FDTD simulations. Simulation results are recorded by monitor objects.
In Lumerical FDTD, most sources and monitors are independent simulation objects. However, in PIC component simulations Port objects are often used, which act as both sources and monitors.
Port objects
Ports inject light into waveguide mode and record the field results and expand them into the waveguide mode fields to calculate the device S-parameters.
The ports should be placed at the input and output waveguides of the device. The span of the ports should be large enough such that the mode fields reach small amplitudes of at least 1e-4 at the edges of the port region, so the fields aren’t truncated. You can verify this by clicking the Visualize Mode Data button in the Modal Properties tab of the Edit port window to plot the mode profile in the Visualizer.
Plot the mode profile in log scale with a minimum color bar value of 1e-4 by pressing the Show/hide settings button, selecting log scaling, and setting the color bar min to 1e-4 to see where the mode amplitude reaches 1e-4.
The modes used by the port can be selected with the mode selection property of the port.
The direction property of the port indicates whether the input direction of the port into the device is in the positive (Forward) or negative (Backward) direction of the injection axis.
Because mode fields are frequency dependent, the mode fields can be calculated at multiple points across the frequency spectrum for more accurate results. The number of field profile samples property of the port object is used to determine how many frequency profiles should be calculated across the source spectrum. Typically, only a small number of profiles (3-5) are needed, depending on the size of the spectrum and how dispersive the mode profiles are.
All ports are placed inside the ports group in the Objects Tree, which is under the FDTD object in the tree hierarchy. The ports group properties control which port is used as the source in the simulation as well as the bandwidth properties of the ports.
Global Source and Monitor Properties
Lumerical FDTD has global source and monitor properties which apply to all sources and monitors in the simulation, though individual sources and monitors can override the global properties. These can be viewed by pressing the Global Source and Global Monitor buttons in the toolbar:
By default, the monitors will use the bandwidth of the sources in the simulation to determine the wavelengths for recording data. The source bandwidth should be set equal to the frequency range where results need to be calculated.
The material fits and meshing algorithm will also use the source bandwidths by default. In practice, this means the bandwidth of the simulation is set by the source bandwidths.
Note that most sources override the global source settings by default, though this does not apply to ports.
Monitors that record a lot of data (like field profile monitors) should only record at a small number of frequencies across the spectrum to avoid requiring a large amount of memory. Monitors that only record a small amount of data per frequency point, like ports, can record at many frequency points to get higher resolution in the results.
Example Steps: Adding ports
Two ports will be added to this simulation, one on the input waveguide and one on the output waveguide. The fundamental TE mode will be used for this simulation. The ports will record results at 100 points between wavelengths of 1.5 and 1.6 um.
The ports are centered on the waveguides. There is a 2 um buffer between the edges of the waveguide core and the boundary of the port to allow enough room for the mode profile to reach close to zero at the boundary. 2 um is more than the half wavelength minimum distance, however a larger distance is better and this is a small simulation so it runs quickly enough that the larger simulation region does not make the simulation too long.
-
Add a port to the simulation by clicking the Port button in the toolbar.
-
Set the port object properties as follows:
- “x” = -0.5 um
- “y” = 3 um, “y span” = 4.5 um
- “z” = 0, “z span” = 4.22 um
- “number of field profile samples” = 3
- Click OK to accept the new property values.
-
Add another port to the simulation and set its properties as follows:
- “injection axis” = “y-axis”
- “x” = 3 um, “x span” = 4.5 um
- “y” = -0.5 um
- “z” = 0, “z span” = 4.22 um
- “number of field profile samples” = 3
- Click OK to accept the new property values.
-
Edit the port group properties by right clicking the ports group in the Objects Tree and selecting Edit object, and set:
- “frequency points” = 100
-
Click Set global source settings in the Edit port group window and set the following bandwidth:
- “wavelength start” = 1.5 um
- “wavelength stop” = 1.6 um
- Click OK to accept the new global source properties.
- Click OK to accept the new port group property values.
The ports are now placed on the input and output waveguides:
Port 1 is placed on the input waveguide and port 2 is placed on the output waveguide. The purple arrow on port 1 indicates it is being used as the source in the simulation.
Materials
Material models and data used by the FDTD simulation are contained in the Material Database. A large number of common materials are included in the Material Library by default.
Material Models
Many material models can be used by Lumerical FDTD, however most FDTD simulations will use the Sample 3D Data model. With this model, sampled permittivity/index data is fit with a dispersive material model.
The sampled data can’t be used directly in the FDTD simulation because the data is in the frequency domain and FDTD is a time domain method. Lumerical’s Multi-Coefficient material model is used to convert the frequency domain material data into a time domain model that can be used by the FDTD algorithm.
Users can create custom materials by importing the sampled permittivity/index data into a new 3D Sampled Data material.
Adjusting Material Fits in the Material Explorer
The material fits used in the simulation can be viewed by opening the Material Explorer window accessible from the Design tab in the toolbar, selecting the material, and pressing Fit and plot. The material fits can be adjusted by setting the “fit Tolerance” and “max coefficients” in this window.
Click Fit and plot after adjusting these parameters to generate a new fit. The fitting algorithm will create a fit that uses the fewest number of coefficients with a standard RMS error that is less than the “fit Tolerance”. Click Save fit parameters to save the new fit. See Tips for improving the quality of optical material fits for more information on adjusting material fits.
Dispersive material fits reduce the speed of the simulation and can lead to convergence problems when used with PMLs. For this reason, it is best to use non-dispersive materials if possible.
Whether a material fit is dispersive can be seen in the Material Explorer. If the number of coefficients in the Fit analysis is greater than zero, the material fit is dispersive. If it is zero it is non-dispersive.
Example Steps: Defining material fits
This example uses the built-in Silicon and SiO2 material models. The fits for these materials can be viewed using the Material Explorer.
-
Open the Material Explorer by pressing the Material Explorer button in the Design tab.
- Select “Si (Silicon) – Palik” from the Material dropdown list.
-
Click Fit and plot to view the fit for Silicon.
A plot of the material fit and the material data points will appear in the Material Explorer. From the plotted fit, we can see that the fitting algorithm has created a non-dispersive material fit for this simulation. This is because the error is within the “fit Tolerance” for this material, as can be seen in the Fit analysis section of the Material Explorer.
A closer fit to the material data can be achieved by lowering the fit tolerance to make the fit dispersive, however this will slow down the simulation and possibly lead to convergence issues. Over the selected wavelength range the index material data varies by about 0.01. In this example, we will consider this an acceptable level of error for the material fit and leave the fit as it is.
The SiO2 material is less dispersive than Silicon in this wavelength range, so it is also fit with a non-dispersive material. We will leave this fit as the default as well.
Running FDTD Simulations
Lumerical FDTD simulations can be run on a broad range of computing platforms. FDTD simulations can be run on CPUs or GPUs, distributed between multiple processes or threads, as well as distributed across multiple nodes on a cluster. This example will demonstrate how to run simulations on a single local CPU or GPU.
Resource Configuration
The resources for running Lumerical FDTD simulations are set up through the Resource Configuration window.
When running on CPUs, an FDTD simulation can used multiple CPU cores by increasing the number of Processes or Threads in the Resource Configuration. In general, running an FDTD simulation with multiple cores will increase the speed of the simulation, though eventually adding more cores gives diminishing returns.
Multiple FDTD simulations can also be run at the same time on a given CPU resource by increasing the Capacity of the resource.
Finding the optimal resource configuration for a given simulation and resource can take some experimentation. For running a single simulation at a time, as in this example, a good default approach is to set the Processes equal to whichever is smaller between the total number of physical cores on the CPU and the number of cores allowable by your Lumerical FDTD licenses.
When running on GPUs, a single simulation will run on the entire GPU. Running multiple simulations concurrently on a single GPU is not supported.
The CPU is still used for certain operations like meshing and executing script commands when running on GPU. The Threads property of the GPU resource determines the number of threads used for these CPU operations. Because the meshing algorithm benefits from multithreading, it should be set equal to the smaller number between the number of logical cores and the number of cores permitted by your licenses.
Simulation and Memory Report
Lumerical FDTD has a Simulation and Memory Report that provides information on various aspects of the simulation and memory usage specific to the open simulation file.
The estimated total memory requirements given in this report can be used to verify that the hardware resources available have enough memory to run the simulation. The GPU Simulation and Memory Report will also check that the features used in the simulation are supported on GPU.
Running Simulations
Once the resources have been configured with the Resource Configuration window, Lumerical FDTD simulations are run by selecting the CPU/GPU toggle, selecting the resource from the dropdown list, and pressing the Run button.
Once the simulation is running, the Job Manager window will appear.
This window provides the current status of the running simulation(s). The Max time remaining is calculated based on the simulation time property of the FDTD object. As mentioned above, it is best if the simulation ends by reaching the auto shutoff min level, not the simulation time, so the simulation should take less time than the max time remaining.
The Job Manager also displays the current Autoshutoff level of the simulation. You may see this number periodically increase slightly or go above 1. The autoshutoff level is only an approximate measure of the energy in the simulation so this doesn’t necessarily indicate the energy in the simulation is increasing and should not be a concern.
If the autoshutoff level increases significantly, the simulation is likely diverging. See Troubleshooting diverging simulations in FDTD for more information on troubleshooting diverging simulations.
Example Steps: Running the simulation
- Open the Resource Configuration by pressing the Resources button in the File tab of the toolbar.
- If running on CPU, set “Processes” to the smaller number between # of physical cores and # of cores permitted by licenses. Leave “Threads” as 1. If running on GPU, set Threads to the smaller number between # of logical cores and # of cores permitted by licenses.
-
Save the simulation file by clicking the Save button in the File tab of the toolbar.
- Select the CPU or GPU toggle in the FDTD tab of the toolbar.
- Select the resource to run the simulation in the dropdown list.
-
Click the Run button to run the simulation.
Analyzing Results
Once the simulation has run, the simulation objects will be populated with the simulation results. You can tell which objects have results by the red box on their icons in the Objects Tree.
The results for the selected object can be seen in the Result View.
Results can be visualized by right clicking on the result in the Result View and selecting Visualize > New Visualizer. This will open the result in a plot the Visualizer tool.
Data Types
Data in Lumerical FDTD comes in various data types. The data type of a result is indicated by its icon in the Result View.
The most common data types for results are matrices and datasets
. Matrices are ordered groups of numbers indexed by one or more numbers, similar to the mathematical concept of matrices. Individual numbers are considered matrices.
Datasets are multiple matrices grouped together as attributes and parameters. They are used when one value is a function of other values, for example an S parameter as a function of frequency. Attributes are dependent variables and parameters are independent variables. Rectilinear datasets are special datasets that have attributes that are a function of positions, with x, y, and z vectors as parameters.
Layout and Analysis Mode
When setting up a simulation, Lumerical FDTD is in Layout mode. After running a simulation, Lumerical FDTD will be in Analysis mode. Object properties cannot be modified in Analysis mode, except for ‘Analysis Group’ analysis properties (see part 3). To switch back to Layout mode to modify object properties and run more simulations, click the Layout button.
Example Steps: Visualizing S-Parameter Results
The power transmission through the waveguide bend is equal to the magnitude squared of the S21 result. To plot this result:
- Select “port 2” in the Objects Tree.
-
Right click on the “S” result in the Result View and select Visualize > New Visualizer to open this result in the Visualizer tool.
- In the Attributes editor section of the Visualizer, set the Scalar operation for the port 2:S attribute to Abs^2 to plot |S21|^2.
The Visualizer displays the value of |S21|^2 on the y axis of the plot as a function of the wavelength. From these results we can see that the calculated transmission of the waveguide bend varies from around 0.992 to 0.99555 in the simulation bandwidth.
This part of the tutorial is now complete. The next part of the tutorial can be found on this page: Getting Started with Lumerical FDTD for Photonic Integrated Circuits - Part 2.