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. [1] 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 [1].

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
$$F_i=F_0-R(x_{i-1}-x_0 ), \quad Λ_i=λ_c/(a+F_i b).$$

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!

Simulation Files

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

[1] 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