class picazzo3.fibcoup.curved.cell.FiberCouplerCurvedGratingGeneric

Class allowing the creating of generic fiber curved grating coupler. This class allows you to define each grating line individually as long as the grating lines themselves are ellipses.

grating: PCell

grating of this fiber coupler

inclination: float

out-of-plane angle of the grating coupler

start_trace_template: PCell and _WaveguideTemplate

start waveguide for the socket waveguide (narrow side)

wide_trace_template: PCell and _WaveguideTemplate

end waveguide for the socket waveguide (broad side)

socket: PCell and WgSocket

socket of the fiber coupler

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell


class Layout

When using this class you have to specify centers, ellipse_radii_x, ellipse_radii_y, start_angles, end_angles, line_widths as a list of numbers. A fiber grating coupler composed of ellipses using those parameters will be constructed on a LinearTransitionSocket.

It is advised (but not strictly required) to place the intended location of the fiber in the origin of your component. To make sure that this the case you can use socket_transformation and grating_transformation to independently transform both the socket and the grating.

You can also add extensions to your socket by using the property socket_straight_extension.

centers: list and List with type restriction, allowed types: <class ‘ipkiss.geometry.coord.Coord2’>

List of centers for the ellipses. By default [i3.Coord2(0, 0)] * TECH.IO.FIBCOUP.CURVED.GRATING.N_O_LINES

ellipse_radii_x: list

List of x radii of the ellipses. By default a list of radii matching the number of center and a period of TECH.IO.FIBCOUP.CURVED.GRATING.PERIOD

ellipse_radii_y: list

List of y radii of the ellipses. By default identical to ellipse_radii_y

grating_transformation: GenericNoDistortTransform
process: ProcessLayer

default process used for the grating

spread_angle: float

Angle in degrees of the far field radiation field of the socket.By default this is set to be equal to the angle of the taper that is set by its length and the width of the core of input and output waveguides.

end_angles: list

List of the end angle for each ellipse. By default 360 - start_angles

line_widths: list

List of the linewidth of the trench of each ellipse. By default TECH.IO.FIBCOUP.CURVED.GRATING.PERIOD / 2.0 for all lines

start_angles: list

List of the start angle in degrees for each ellipse. By default 180 - TECH.FIBCOUP.DEFAULT_ANGLE_SPAN / 2.0 for all lines

socket_extension: float and Real, number and number >= 0

extension of the wide side of the socket, asymmetric with respect to the specified center

socket_straight_extension: Coord2 and number >= 0

tuple: straight extension at start and end of socket

socket_length: float and number > 0

length of the straight waveguide socket

socket_transformation: GenericNoDistortTransform
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters
n_o_lines: int and number > 0, locked

Number of trenches.


from technologies import silicon_photonics  # noqa: F401
from ipkiss3 import all as i3

from picazzo3.fibcoup.curved import FiberCouplerCurvedGratingGeneric
from picazzo3.traces.wire_wg import WireWaveguideTemplate

# Creating the wire templates for the socket.
start_wg_tmpl = WireWaveguideTemplate()
start_wg_tmpl.Layout(core_width=0.5, cladding_width=2 * i3.TECH.WG.TRENCH_WIDTH + 0.5)
end_wg_tmpl = WireWaveguideTemplate()
end_wg_tmpl.Layout(core_width=17.0, cladding_width=2 * i3.TECH.WG.TRENCH_WIDTH + 17.0)

fc_cell = FiberCouplerCurvedGratingGeneric(
    start_trace_template=start_wg_tmpl, wide_trace_template=end_wg_tmpl

fc_layout = fc_cell.Layout(
    centers=[i3.Coord2(0, 0) for _ in range(30)],
    ellipse_radii_x=[i + 1 for i in range(30)],
    ellipse_radii_y=[i + 0.9 for i in range(30)],
    start_angles=[180.0 - 15 for _ in range(30)],
    end_angles=[180.0 + 15 for _ in range(30)],
    line_widths=[0.2 for _ in range(30)],
    socket_transformation=i3.Translation(translation=(-10.0, 0.0)),
    grating_transformation=i3.Translation(translation=(20, 0)),
    socket_straight_extension=(10.0, 5.0),