SBendDirectionalCoupler¶
-
class
picazzo3.wg.dircoup.cell.
SBendDirectionalCoupler
(*args, **kwargs)¶ A directional coupler consisting of 2 parallel (horizontal) waveguides with S-shaped bends at the start and end.
Parameters: trace_template1: PCell and _WaveguideTemplate, optional
waveguide template used by the south arm of the directional coupler
trace_template2: PCell and _WaveguideTemplate, optional
waveguide template used by the north arm of the directional coupler. If not set, it defaults to the template of the south arm
wg1a: PCell, optional
South-west waveguide
wg1b: PCell, optional
South-east waveguide
wg2a: PCell, optional
North-west waveguide
wg2b: PCell, optional
North-east waveguide
coupler_length: float and Real, number and number >= 0, optional
length of the directional coupler
cell_instances: _PCellInstanceDict, optional
name: optional
The unique name of the pcell
n_inputs: int and number > 0, locked
Number of input channels.
n_outputs: int and number > 0, locked
Number of output channels.
Views
-
Layout
¶ Parameters: angle_step: float and number > 0, optional
angle step for rounding
manhattan: optional
adds rectangular blocks in the bends to avoid as much as possible non-manhattan angles
sbend_straight: float and Real, number and number >= 0, optional
length of the straight section in the S-bend
view_name: str, optional
The name of the view
bend_angle: float, optional
angle at which the directional coupler is bent
bend_angles1: tuple2, optional
Input and output angle of the bends of arm 1. Defaults to bend_angle. If set, bend_angle will be ignored.
bend_angles2: tuple2, optional
Input and output angle of the bends of arm 2. Defaults to bend_angle. If set, bend_angle will be ignored.
rounding_algorithm: optional
rounding algorithm used to generate the bends. Can be circular, spline, …
straight_after_bend: float and Real, number and number >= 0, optional
length of the straight waveguide after the bend
reverse_bends: optional
If True, all bends will be reversed. This has only an effect on assymetric bends, such as splines
reverse_individual_bends1a: List with type restriction, allowed types: <type ‘bool’>, optional
List of booleans to indicate whether the individual bends in arm1 should be reversed
reverse_individual_bends1b: List with type restriction, allowed types: <type ‘bool’>, optional
List of booleans to indicate whether the individual bends in arm1 should be reversed
reverse_individual_bends2a: List with type restriction, allowed types: <type ‘bool’>, optional
List of booleans to indicate whether the individual bends in arm2 should be reversed
reverse_individual_bends2b: List with type restriction, allowed types: <type ‘bool’>, optional
List of booleans to indicate whether the individual bends in arm2 should be reversed
coupler_spacing: float, optional
Spacing between the two waveguide centerlines.
wg1a_shape: Shape, optional
Shape for the south-west part of the waveguide
wg1b_shape: Shape, optional
Shape for the south-east part of the waveguide
wg2a_shape: Shape, optional
Shape for the north-west part of the waveguide
wg2b_shape: Shape, optional
Shape for the north-east part of the waveguide
bend_radius: float and number > 0, optional
bend radius for the auto-generated bends
grid: float and number > 0, locked
design grid. Extracted by default from TECH.METRICS.GRID
grids_per_unit: locked
Number of grid cells per design unit
units_per_grid: locked
Ratio of grid cell and design unit
unit: float and number > 0, locked
design unit. Extracted by default from TECH.METRICS.UNIT
Examples
""" A more complicated example using asymmetric spline bends and different waveguide definition in the two arms. """ from technologies import silicon_photonics 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()
from technologies import silicon_photonics 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()
-