stencil.focused_grating
focused_grating( wavelength, period, n_sin, focal_length, length, width=None, angle=None, input_width=None, fill_factor=0.5,)Create a 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
- wavelength (float): Central wavelength for the grating design.
- period (float): Grating period (distance between adjacent teeth centers).
- 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.
- length (float): Length of the grating, proportional to the number of teeth.
- 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.
- fill_factor (float | str | Expression): Ratio between the grating teeth and the grating period. An string parametrized by
"u"or an expression of a single parameter (varied from 0 to 1) can be used to vary the fill factor along the grating.
Returns
list[Circle | Polygon]: Grating structures.
Example
>>> # Pie-slice, apodized grating>>> grating1 = pf.stencil.focused_grating(... wavelength=1.55,... period=0.6,... n_sin=np.sin(np.pi / 18),... focal_length=12.5,... length=10,... angle=60,... input_width=0.5,... fill_factor="0.8 - 0.3 * u^0.5",... )>>> # Rectangular-shaped grating>>> grating2 = pf.stencil.focused_grating(... wavelength=1.55,... period=0.6,... n_sin=np.sin(np.pi / 18),... focal_length=12.5,... length=12,... width=16,... input_width=0.5,... fill_factor=0.6,... )>>> grating2 = [s.translate((30, 0)) for s in grating2]>>> component = pf.Component().add(*grating1, *grating2)