In this example, we use the inverse design toolbox lumopt to design an efficient 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. \(n_O\) and \(n_E\) 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=220\mathrm{ nm}\) with refractive indices \(n_{Si}=3.48\) and \(n_{bg}=1.44\) for silicon and the background:
Relative etch depth | Absolute Si height (nm) | \(n_E\) |
---|---|---|
90% | 22 | 1.50006 |
80% | 44 | 1.67249 |
70% | 66 | 1.87997 |
60% | 88 | 2.08504 |
50% | 110 | 2.26951 |
40% | 132 | 2.42835 |
30% | 154 | 2.56257 |
20% | 176 | 2.67485 |
10% | 198 | 2.76888 |
0% | 220 | 2.84825 |
We can then write the Bragg condition for a grating with periodicity Λ as
\[Λ = λ_c n_{eff} − n_{bg} sin(θ)\]
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 ⋅ x$$
where R is the (unknown) apodization factor and \(F_0\) 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 \(F_0=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) Δn$$
which then leads to a spatially varying distance between the teeth.
$$Λ(x) = λ_c (n_E − n_{bg} \sin(θ)) + F(x) Δn$$
To find a good initial condition, we discretize the filling fraction \(F_i\) 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 ) , Λ 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=80 \mathrm{ nm}\) and a fiber angle \(θ=5°\). The starting values of the four parameters are listed below:
Parameter | Initial value |
\(x_0\) | -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 100 nm 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 100 nm and therefore more easily fabricated!
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 8