Inverse design of Y splitter with taper + arms parametric optimization


This posts presents simulation files of a Y splitter example shown in Inverse Design webinar from February 19

The example expands the existing Y branch Inverse design example by optimizing not only the splitter taper, but also the arms of the splitter. This allows us to achieve smaller footprint while maintaining very low insertion loss.

Both 2D and 3D base simulation and optimization files are included.

Simulation steps

Step 1: Define base simulation parameters

The goal for this initial step is to define the basic parameters of the FDTD simulation that will be used for the adjoint optimization. Key simulation settings for the input/output waveguides, monitors for field gradient and figure of merit (FOM) calculations, source and mesh are parametrized for ease of running optimization routine. It is required that the base simulation setup is fully scripted in lumerical script (.lsf format). The script is later used as an input into the optimization routine.

Step 2: Define the optimizable geometry

The second step is to define a parametrized polygon geometry that will represent the body of the Y branch connecting the input and output waveguide (the optimized geometry). This is defined as a python function that accepts a set of optimization parameters and generates corresponding polygon geometry in the base FDTD simulation geometry defined in step 1. Initial parameter values and their limits will also get defined in this step.

Step 3: Run the parametric optimization in 2D

Run the optimization python script with the base simulation script and parametrized polygon object as an input. This will be a 2D simulation for fast delivery of a near optimal design which can be used as the initial guess for the 3D optimization in the next step. To find the best set of parameters that define the optimal Y branch shape, the optimization routine will use the specified field monitors to calculate:

•the field gradients: the gradients of the field due to perturbation of permittivity resulting from slight changes in geometry of the optimized region

•the gradient of the figure of merit (FOM): the gradient of the mode overlap to the fundamental TE mode of the waveguides as a result of the shape changes

After optimization, the optimized Y branch component shape will be exported into GDS II format which can be used for further simulation and/or fabrication (mask design).

Step 4: Run the parametric optimization in 3D [optional]

As an optional step, the best solution found by the 2D optimization can be used as an initial guess for a 3D optimization for a more realistic simulation and to further improve the performance of the design.

Simulation files:

splitter_with_arms.lsf (1.6 KB) (4.6 KB)
splitter_with_arms_3D.lsf (1.9 KB) (4.7 KB)

1 Like


I tried to run the provided script ( in 2019b r6, but it doesn’t work, and seems that they are not compatible with this latest version of the Lumerical.

Most obviously, in line 68, there is unexpected argument “wavelengths” defined in the “ModeMatch” class.

Also, It seems to me that the target “target T forward”, which should have been defined as 0.5 in the “fom” object, has not been defined in the script.

Also, some other sytax errors like indentationrrrors also exist in the script.

Could you please check and fix them and so that these scripts could work in the current version of Lumerical?


Hello @rcheng1,

Please see our AppGallery for maintained examples.

Since the lumopt and the python API are getting updated constantly we cannot maintain all examples. It should be clear by following the maintained workflows on how to update the script. And should come down to how and where these arguments are passed. Feel free to post an update or if you have any specific questions.