stencil.apodized_focused_grating
apodized_focused_grating( teeth_gaps, teeth_widths, n_eff, n_sin, focal_length, width=None, angle=None, input_width=None,)Create an apodized focused grating.
The geometry is based on the work by F. Van Laere et al., “Compact Focusing Grating Couplers for Silicon-on-Insulator Integrated Circuits,” in IEEE Photonics Technology Letters, vol. 19, no. 23, pp. 1919-1921, Dec.1, 2007, doi: 10.1109/LPT.2007.908762.
Args
- teeth_gaps (float | Sequence[float]): Spacing between grating teeth edges.
- teeth_widths (float | Sequence[float]): Width of the grating teeth along the horizontal line from focal point. If value is negative, this teeth is not created.
- n_eff (float | Sequence[float]): Effective index of the cylindrical wave in the broad waveguide with the grating.
- n_sin (float): Product between the free-space index and the sine of the input wave angle measured from the grating surface normal (such that a value of 0 indicates normal grating illumination).
- focal_length (float): Distance between the focal point and the start of the grating.
- width (float | None): If set, a rectangular-shaped grating is created with the specified width. Only one of
widthandanglemust be set. - angle (float | None): If set, the grating is created with the shape of a circular section with the specified angle. Only one of
widthandanglemust be set. - input_width (float | None): If set, the input taper region is added to the grating terminating with this dimension.
Returns
list[Circle | Polygon]: Grating structures.
Note
Arguments teeth_gaps, teeth_widths, and n_eff can be a
single number or a sequence. The largest sequence among them will
define the number of teeth created. Smaller sequences will be
increased to the largest length by repeating their last element.
Example
>>> # Pie-slice with gaps and n_eff variations>>> grating1 = pf.stencil.apodized_focused_grating(... teeth_gaps=np.linspace(0.2, 0.4, 20),... teeth_widths=0.2,... n_eff=np.linspace(1.8, 1.6, 20),... n_sin=np.sin(np.pi / 18),... focal_length=12.5,... angle=60,... input_width=0.5,... )>>> # Rectangular-shaped with gaps and widths variations>>> grating2 = pf.stencil.apodized_focused_grating(... teeth_gaps=np.linspace(0.2, 0.4, 20),... teeth_widths=np.linspace(0.4, 0.2, 20),... n_eff=1.8,... n_sin=np.sin(np.pi / 18),... focal_length=12.5,... width=16,... input_width=0.5,... )>>> grating2 = [s.translate((30, 0)) for s in grating2]>>> component = pf.Component().add(*grating1, *grating2)