SBendDirectionalCoupler

class picazzo3.wg.dircoup.cell.SBendDirectionalCoupler

A directional coupler consisting of 2 parallel (horizontal) waveguides with S-shaped bends at the start and end.

Parameters:
wg2b: PCell

North-east waveguide

wg2a: PCell

North-west waveguide

wg1b: PCell

South-east waveguide

wg1a: PCell

South-west waveguide

trace_template2: PCell and _WaveguideTemplate

waveguide template used by the north arm of the directional coupler. If not set, it defaults to the template of the south arm

trace_template1: PCell and _WaveguideTemplate

waveguide template used by the south arm of the directional coupler

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

length of the directional coupler

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

The unique name of the pcell

Other Parameters:
n_inputs: int and number > 0, locked

Number of input channels.

n_outputs: int and number > 0, locked

Number of output channels.

Views

class Layout
Parameters:
sbend_straight: float and Real, number and number >= 0

length of the straight section in the S-bend

bend_angles2: tuple2

Input and output angle of the bends of arm 2. Defaults to bend_angle. If set, bend_angle will be ignored.

bend_angles1: tuple2

Input and output angle of the bends of arm 1. Defaults to bend_angle. If set, bend_angle will be ignored.

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

length of the straight waveguide after the bend

bend_angle: float

angle at which the directional coupler is bent

reverse_individual_bends2b: List with type restriction, allowed types: <class ‘bool’>

List of booleans to indicate whether the individual bends in arm2 should be reversed

reverse_individual_bends1b: List with type restriction, allowed types: <class ‘bool’>

List of booleans to indicate whether the individual bends in arm1 should be reversed

reverse_individual_bends2a: List with type restriction, allowed types: <class ‘bool’>

List of booleans to indicate whether the individual bends in arm2 should be reversed

reverse_individual_bends1a: List with type restriction, allowed types: <class ‘bool’>

List of booleans to indicate whether the individual bends in arm1 should be reversed

reverse_bends: ( bool, bool_ or int )

If True, all bends will be reversed. This has only an effect on asymmetric bends, such as splines

wg2b_shape: Shape

Shape for the north-east part of the waveguide

wg2a_shape: Shape

Shape for the north-west part of the waveguide

wg1b_shape: Shape

Shape for the south-east part of the waveguide

wg1a_shape: Shape

Shape for the south-west part of the waveguide

coupler_spacing: float

Spacing between the two waveguide centerlines.

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

manhattan: ( bool, bool_ or int )

Adds rectangular blocks in the bends to avoid as much as possible non-manhattan angles.

angle_step: float and number > 0

Angle step for rounding.

rounding_algorithm:

Rounding algorithm used to generate the bends. Can be circular, spline, ….

bend_radius: float and number > 0

Bend radius for the auto-generated bends.

Examples

import si_fab.all as pdk  # noqa: F401
from picazzo3.wg.dircoup import SBendDirectionalCoupler
from picazzo3.traces.wire_wg.trace import WireWaveguideTemplate
import ipkiss3.all as i3

wg_t = WireWaveguideTemplate()
wg_t.Layout(core_width=0.500, cladding_width=i3.TECH.WG.CLADDING_WIDTH, core_process=i3.TECH.PROCESS.WG)

C = SBendDirectionalCoupler(name="my_sbenddircoup3", trace_template1=wg_t, coupler_length=6.0)
layout = C.Layout(coupler_spacing=0.7, straight_after_bend=6.0, bend_angle=30.0)
layout.visualize(annotate=True)
../../../../../_images/picazzo3-wg-dircoup-cell-SBendDirectionalCoupler-1.png
"""A more complicated example using asymmetric spline bends and different
waveguide definition in the two arms.
"""
import si_fab.all as pdk  # noqa: F401
from picazzo3.wg.dircoup import SBendDirectionalCoupler
from picazzo3.traces.wire_wg.trace import WireWaveguideTemplate
from ipkiss3.all import SplineRoundingAlgorithm
import ipkiss3.all as i3

wg_t = WireWaveguideTemplate(name="my_wg_template4")
wg_t.Layout(core_width=0.500, cladding_width=i3.TECH.WG.CLADDING_WIDTH, core_process=i3.TECH.PROCESS.WG)

wg_t2 = WireWaveguideTemplate(name="my_wg_template5")
wg_t2.Layout(
    core_width=0.600, cladding_width=i3.TECH.WG.CLADDING_WIDTH, core_process=i3.TECH.PROCESS.WG
)

ra = SplineRoundingAlgorithm(adiabatic_angles=(30.0, 0))  # asymmetric

C = SBendDirectionalCoupler(
    name="my_sbenddircoup_4", trace_template1=wg_t, trace_template2=wg_t2, coupler_length=6.0
)

layout = C.Layout(
    coupler_spacing=0.7,
    bend_radius=5.0,
    manhattan=True,
    straight_after_bend=6.0,
    sbend_straight=1.0,
    bend_angle=30.0,
    rounding_algorithm=ra,
)
layout.visualize(annotate=True)
../../../../../_images/picazzo3-wg-dircoup-cell-SBendDirectionalCoupler-2.png