  # Inverse design of an efficient narrow-band grating coupler

In this example, we use the inverse design toolbox lumopt to design an efficent narrow-band grating coupler which can be manufactured using advanced optical lithography. To accomplish this, we will use a three-step approach:

# Step #1: Finding a good starting point

For a given center wavelength λc and a given etch depth e, we can follow Ref.  to design an optimized apodized grating based on physical arguments. Here, we only briefly sketch the derivation, for more details and precise definitions of the variables, see .

The main idea is to use the local effective index of an apodized grating. Specifically, for each unit cell, the effective index is approximated using linear interpolation as n_{eff}=F n_O+(1-F) n_E where F is the filling fraction. nO and nE denote the effective indices of a mode propagating in a waveguide with the full height and with the height of the partially etched structure, respectively. To determine those effective indices, we run a quick 1D MODE calculation for a silicon waveguide with height h=220nm with refractive indices nSi=3.48 and nbg=1.44 for silicon and the background:

Relative etch depth Absolute Si height n_E
90% 22nm 1.50006
80% 44nm 1.67249
70% 66nm 1.87997
60% 88nm 2.08504
50% 110nm 2.26951
40% 132nm 2.42835
30% 154nm 2.56257
20% 176nm 2.67485
10% 198nm 2.76888
0% 220nm 2.84825

We can then write the Bragg condition for a grating with periodicity Λ as
\Lambda=\frac{\lambda_c}{n_{eff} - n_{bg} \sin \theta}
Here, θ is the angle of the incoming beam (approximated as a plane wave). For a linearly apodized grating, the filling factor varies with the position x along the waveguide as
F(x)=F_0 - R \cdot x
where R is the (unknown) apodization factor and F0 is the initial filling fraction. In the ideal, continuous case, this should be 1 because we start with a solid waveguide but to avoid extremely small trenches, we will use F0=0.95 in this example.

Inserting the linear apodization into the equation for the interpolated effective index
n_{eff} (x)=F(x) n_{O}+(1-F(x)) n_{E}=n_{E}+F(x) \Delta n
which then leads to a spatially varying distance between the teeth.
Λ(x) = \frac{λ_c}{ (n_E- n_{bg} \sin\theta)+F(x)\Delta n }

To find a good initial condition, we discretize the filling fraction Fi and the pitch Λi for each period of the grating. In the above equations, we only have a single unknown, the factor R.

However, for a slightly more efficient optimization, we can include a total of 4 optimization parameters
p=[x_0,R,a,b] which lead to the following filling fractions and spacings

This approach is implemented in the script grating_coupler_2D_apodized.py where we run the optimization for an etch depth of e=80nm and a fiber angle θ=5°. The starting values of the four parameters are listed below:

Parameter Initial value
x0 -2.5
R 0.03
a 2.4
b 0.5369

The optimization will run for 10 iterations and converges on a grating with approximately 62.2% efficiency (-2.05dB loss).

The main issue with the resulting structure is that the first few trenches are very narrow; making them a challenge to manufacture, especially with optical lithography.

# Step #2: Further improving the efficiency

Before we address the issues of manufacturability, we first want to check if we can improve the efficiency further by running a comprehensive optimization where we use the x-coordinate of each wall position as a free parameter. In our example with 25 teeth, this leads to an optimization with 50 parameters.

To extract the wall positions from the previous results, we run a brief script extract_grating_parameters_from_poly.lsf which should print the following numbers:

initial_params = [-2.54403, 0.02892, 0.54957, 0.04342, 0.53651, 0.05802, 0.52336, 0.072742, 0.510108, 0.08756,
0.49675, 0.10250, 0.48329, 0.11756, 0.46973, 0.13273, 0.45607, 0.148019, 0.442304, 0.16342,
0.42842, 0.17895, 0.41444, 0.19459, 0.40035, 0.21036, 0.38614, 0.226264, 0.371826, 0.24228,
0.35739, 0.25843, 0.34284, 0.27471, 0.32818, 0.29113, 0.31339, 0.307678, 0.298494, 0.32436,
0.28346, 0.34118, 0.26831, 0.35813, 0.25304, 0.37523, 0.23764, 0.392482, 0.222109, 0.40987]


The output of that script is then used as initial conditions in the script grating_coupler_2D_1etch.py. Running the optimization takes about 60 iterations and yields a relatively small improvement to 63.6% (-1.97dB loss).

Interestingly, the optimizer has increased the size of all the small features, making this structure more efficient and easier to manufacture.

# Step #3: Including manufacturing constraints

In this last step, we simply re-run the optimization script grating_coupler_2D_1etch.py but we now use the results of the previous, full optimization as a starting point. In addition, we enable the minimal feature size constraint by setting the parameter min_feature_size = 0.1 which ensures that no trench is less than 100nm wide.

We find that the introduction of the constraints initially reduces the efficiency to around 57% but within 10 iterations, the optimizer improves this to around 62% again. The final result is 62.2% (-2.05dB loss) which is almost identical to the result of the semi-analytic approach used in Step #1; however, all features are now larger than 100nm and therefore more easily fabricated!

## grating_coupler_2D_TE_base.fsp (1.9 MB)grating_coupler_2D_TE_base.lsf (1.7 KB)grating_coupler_2D_apodized.py (4.2 KB)extract_grating_parameters_from_poly.lsf (109 Bytes)grating_coupler_2D_1etch.py (6.1 KB) References

 R. Marchetti et al., “High-efficiency grating-couplers: demonstration of a new design strategy”, Scientific Reports 7, 16670 (2017), https://www.nature.com/articles/s41598-017-16505-z

1 Like