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. 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=220nm with refractive indices n_{Si}=3.48 and n_{bg}=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 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) \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 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 ), \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 |
---|---|
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 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