Cells Si SOI 500nm#

array#

cspdk.si500.cells.array(component='pad', spacing: tuple[float, float] = (150.0, 150.0), columns: int = 6, rows: int = 1, add_ports: bool = True, size=None, centered: bool = False) Component[source]#

An array of components.

Parameters:
  • component – the component of which to create an array

  • spacing – the x and y spacing by which to place the component

  • columns – the number of components to place in the x-direction

  • rows – the number of components to place in the y-direction

  • add_ports – add ports to the component

  • size – Optional x, y size. Overrides columns and rows.

  • centered – center the array around the origin.

import cspdk

c = cspdk.si500.cells.array(component='pad', spacing=(150.0, 150.0), columns=6, rows=1, add_ports=True, centered=False)
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-1.png

bend_euler#

cspdk.si500.cells.bend_euler(radius: float | None = None, angle: float = 90.0, p: float = 0.5, width: float | None = None, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component[source]#

An euler bend.

Parameters:
  • radius – the effective radius of the bend.

  • angle – the angle of the bend (usually 90 degrees).

  • p – the fraction of the bend that’s represented by a polar bend.

  • width – the width of the waveguide forming the bend.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.bend_euler(angle=90.0, p=0.5, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-2.png

bend_euler_rc#

cspdk.si500.cells.bend_euler_rc(radius: float | None = None, angle: float = 90.0, p: float = 0.5, width: float | None = None, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component#

An euler bend.

Parameters:
  • radius – the effective radius of the bend.

  • angle – the angle of the bend (usually 90 degrees).

  • p – the fraction of the bend that’s represented by a polar bend.

  • width – the width of the waveguide forming the bend.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.bend_euler_rc(angle=90.0, p=0.5, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-3.png

bend_euler_ro#

cspdk.si500.cells.bend_euler_ro(radius: float | None = None, angle: float = 90.0, p: float = 0.5, width: float | None = None, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_ro') Component#

An euler bend.

Parameters:
  • radius – the effective radius of the bend.

  • angle – the angle of the bend (usually 90 degrees).

  • p – the fraction of the bend that’s represented by a polar bend.

  • width – the width of the waveguide forming the bend.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.bend_euler_ro(angle=90.0, p=0.5, cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-4.png

bend_s#

cspdk.si500.cells.bend_s(size: tuple[float, float] = (20.0, 1.8), cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component[source]#

An S-bend.

Parameters:
  • size – the width and height of the s-bend.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.bend_s(size=(20.0, 1.8), cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-5.png

coupler#

cspdk.si500.cells.coupler(gap: float = 0.236, length: float = 20.0, dy: float = 4.0, dx: float = 15.0, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component[source]#

A coupler.

a coupler is a 2x2 splitter

Parameters:
  • gap – the gap between the waveguides forming the straight part of the coupler.

  • length – the length of the coupler.

  • dy – the height of the s-bend.

  • dx – the length of the s-bend.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.coupler(gap=0.236, length=20.0, dy=4.0, dx=15.0, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-6.png

coupler_rc#

cspdk.si500.cells.coupler_rc(gap: float = 0.236, length: float = 20.0, dy: float = 4.0, dx: float = 15.0, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component#

A coupler.

a coupler is a 2x2 splitter

Parameters:
  • gap – the gap between the waveguides forming the straight part of the coupler.

  • length – the length of the coupler.

  • dy – the height of the s-bend.

  • dx – the length of the s-bend.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.coupler_rc(gap=0.236, length=20.0, dy=4.0, dx=15.0, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-7.png

coupler_ro#

cspdk.si500.cells.coupler_ro(gap: float = 0.236, length: float = 20.0, dy: float = 4.0, dx: float = 15.0, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_ro') Component#

A coupler.

a coupler is a 2x2 splitter

Parameters:
  • gap – the gap between the waveguides forming the straight part of the coupler.

  • length – the length of the coupler.

  • dy – the height of the s-bend.

  • dx – the length of the s-bend.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.coupler_ro(gap=0.236, length=20.0, dy=4.0, dx=15.0, cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-8.png

coupler_straight#

cspdk.si500.cells.coupler_straight(length: float = 20.0, gap: float = 0.236, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component[source]#

The straight part of a coupler.

Parameters:
  • length – the length of the straight part of the coupler.

  • gap – the gap between the waveguides forming the straight part of the coupler.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.coupler_straight(length=20.0, gap=0.236, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-9.png

coupler_symmetric#

cspdk.si500.cells.coupler_symmetric(gap: float = 0.236, dy: float = 4.0, dx: float = 15.0, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component[source]#

The part of the coupler that diverges away from each other with s-bends.

Parameters:
  • gap – the gap between the s-bends when closest together.

  • dy – the height of the s-bend.

  • dx – the length of the s-bend.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.coupler_symmetric(gap=0.236, dy=4.0, dx=15.0, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-10.png

die#

cspdk.si500.cells.die(cross_section='xs_rc') Component[source]#

A die template.

Parameters:

cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.die(cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-11.png

die_rc#

cspdk.si500.cells.die_rc(*, cross_section='xs_rc') Component#

A die template.

Parameters:

cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.die_rc(cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-12.png

die_ro#

cspdk.si500.cells.die_ro(*, cross_section='xs_ro') Component#

A die template.

Parameters:

cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.die_ro(cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-13.png

grating_coupler_array#

cspdk.si500.cells.grating_coupler_array(pitch: float = 127.0, n: int = 6, cross_section='xs_rc', centered=True, grating_coupler=None, port_name='o1', with_loopback=False, rotation=-90, straight_to_grating_spacing=10.0) Component[source]#

An array of grating couplers.

Parameters:
  • pitch – the pitch of the grating couplers

  • n – the number of grating couplers

  • centered – if True, centers the array around the origin.

  • grating_coupler – the name of the grating coupler to use in the array.

  • port_name – port name

  • with_loopback – if True, adds a loopback between edge GCs. Only works for rotation = 90 for now.

  • rotation – rotation angle for each reference.

  • straight_to_grating_spacing – spacing between the last grating coupler and the loopback.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.grating_coupler_array(pitch=127.0, n=6, cross_section='xs_rc', centered=True, port_name='o1', with_loopback=False, rotation=-90, straight_to_grating_spacing=10.0)
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-14.png

grating_coupler_elliptical#

cspdk.si500.cells.grating_coupler_elliptical(wavelength: float = 1.55, grating_line_width=0.315, cross_section='xs_rc') Component[source]#

A grating coupler with curved but parallel teeth.

Parameters:
  • wavelength – the center wavelength for which the grating is designed.

  • grating_line_width – the line width of the grating.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.grating_coupler_elliptical(wavelength=1.55, grating_line_width=0.315, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-15.png

grating_coupler_elliptical_rc#

cspdk.si500.cells.grating_coupler_elliptical_rc(*, wavelength: float = 1.55, grating_line_width=0.315, cross_section='xs_rc') Component#

A grating coupler with curved but parallel teeth.

Parameters:
  • wavelength – the center wavelength for which the grating is designed.

  • grating_line_width – the line width of the grating.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.grating_coupler_elliptical_rc(wavelength=1.55, grating_line_width=0.315, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-16.png

grating_coupler_elliptical_ro#

cspdk.si500.cells.grating_coupler_elliptical_ro(*, wavelength: float = 1.31, grating_line_width=0.25, cross_section='xs_ro') Component#

A grating coupler with curved but parallel teeth.

Parameters:
  • wavelength – the center wavelength for which the grating is designed.

  • grating_line_width – the line width of the grating.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.grating_coupler_elliptical_ro(wavelength=1.31, grating_line_width=0.25, cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-17.png

grating_coupler_rectangular#

cspdk.si500.cells.grating_coupler_rectangular(period=0.57, n_periods: int = 60, length_taper: float = 350.0, wavelength: float = 1.55, cross_section='xs_rc') Component[source]#

A grating coupler with straight and parallel teeth.

Parameters:
  • period – the period of the grating.

  • n_periods – the number of grating teeth.

  • length_taper – the length of the taper tapering up to the grating.

  • wavelength – the center wavelength for which the grating is designed.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.grating_coupler_rectangular(period=0.57, n_periods=60, length_taper=350.0, wavelength=1.55, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-18.png

grating_coupler_rectangular_rc#

cspdk.si500.cells.grating_coupler_rectangular_rc(period=0.57, n_periods: int = 60, length_taper: float = 350.0, wavelength: float = 1.55, *, cross_section='xs_rc') Component#

A grating coupler with straight and parallel teeth.

Parameters:
  • period – the period of the grating.

  • n_periods – the number of grating teeth.

  • length_taper – the length of the taper tapering up to the grating.

  • wavelength – the center wavelength for which the grating is designed.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.grating_coupler_rectangular_rc(period=0.57, n_periods=60, length_taper=350.0, wavelength=1.55, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-19.png

grating_coupler_rectangular_ro#

cspdk.si500.cells.grating_coupler_rectangular_ro(period=0.57, n_periods: int = 60, length_taper: float = 350.0, wavelength: float = 1.55, *, cross_section='xs_ro') Component#

A grating coupler with straight and parallel teeth.

Parameters:
  • period – the period of the grating.

  • n_periods – the number of grating teeth.

  • length_taper – the length of the taper tapering up to the grating.

  • wavelength – the center wavelength for which the grating is designed.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.grating_coupler_rectangular_ro(period=0.57, n_periods=60, length_taper=350.0, wavelength=1.55, cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-20.png

mmi1x2#

cspdk.si500.cells.mmi1x2(width: float | None = None, width_taper=1.5, length_taper=20.0, length_mmi: float = 37.5, width_mmi=6.0, gap_mmi: float = 1.47, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component[source]#

An mmi1x2.

An mmi1x2 is a splitter that splits a single input to two outputs

Parameters:
  • width – the width of the waveguides connecting at the mmi ports.

  • width_taper – the width at the base of the mmi body.

  • length_taper – the length of the tapers going towards the mmi body.

  • length_mmi – the length of the mmi body.

  • width_mmi – the width of the mmi body.

  • gap_mmi – the gap between the tapers at the mmi body.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.mmi1x2(width_taper=1.5, length_taper=20.0, length_mmi=37.5, width_mmi=6.0, gap_mmi=1.47, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-21.png

mmi1x2_rc#

cspdk.si500.cells.mmi1x2_rc(width: float | None = None, width_taper=1.5, length_taper=20.0, length_mmi: float = 37.5, width_mmi=6.0, gap_mmi: float = 1.47, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component#

An mmi1x2.

An mmi1x2 is a splitter that splits a single input to two outputs

Parameters:
  • width – the width of the waveguides connecting at the mmi ports.

  • width_taper – the width at the base of the mmi body.

  • length_taper – the length of the tapers going towards the mmi body.

  • length_mmi – the length of the mmi body.

  • width_mmi – the width of the mmi body.

  • gap_mmi – the gap between the tapers at the mmi body.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.mmi1x2_rc(width_taper=1.5, length_taper=20.0, length_mmi=37.5, width_mmi=6.0, gap_mmi=1.47, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-22.png

mmi1x2_ro#

cspdk.si500.cells.mmi1x2_ro(width: float | None = None, width_taper=1.5, length_taper=20.0, length_mmi: float = 37.5, width_mmi=6.0, gap_mmi: float = 1.47, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_ro') Component#

An mmi1x2.

An mmi1x2 is a splitter that splits a single input to two outputs

Parameters:
  • width – the width of the waveguides connecting at the mmi ports.

  • width_taper – the width at the base of the mmi body.

  • length_taper – the length of the tapers going towards the mmi body.

  • length_mmi – the length of the mmi body.

  • width_mmi – the width of the mmi body.

  • gap_mmi – the gap between the tapers at the mmi body.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.mmi1x2_ro(width_taper=1.5, length_taper=20.0, length_mmi=37.5, width_mmi=6.0, gap_mmi=1.47, cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-23.png

mmi2x2#

cspdk.si500.cells.mmi2x2(width: float | None = None, width_taper: float = 1.5, length_taper: float = 50.2, length_mmi: float = 5.5, width_mmi: float = 6.0, gap_mmi: float = 0.4, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component[source]#

An mmi2x2.

An mmi2x2 is a 2x2 splitter

Parameters:
  • width – the width of the waveguides connecting at the mmi ports.

  • width_taper – the width at the base of the mmi body.

  • length_taper – the length of the tapers going towards the mmi body.

  • length_mmi – the length of the mmi body.

  • width_mmi – the width of the mmi body.

  • gap_mmi – the gap between the tapers at the mmi body.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.mmi2x2(width_taper=1.5, length_taper=50.2, length_mmi=5.5, width_mmi=6.0, gap_mmi=0.4, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-24.png

mmi2x2_rc#

cspdk.si500.cells.mmi2x2_rc(width: float | None = None, width_taper: float = 1.5, length_taper: float = 50.2, length_mmi: float = 5.5, width_mmi: float = 6.0, gap_mmi: float = 0.4, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component#

An mmi2x2.

An mmi2x2 is a 2x2 splitter

Parameters:
  • width – the width of the waveguides connecting at the mmi ports.

  • width_taper – the width at the base of the mmi body.

  • length_taper – the length of the tapers going towards the mmi body.

  • length_mmi – the length of the mmi body.

  • width_mmi – the width of the mmi body.

  • gap_mmi – the gap between the tapers at the mmi body.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.mmi2x2_rc(width_taper=1.5, length_taper=50.2, length_mmi=5.5, width_mmi=6.0, gap_mmi=0.4, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-25.png

mmi2x2_ro#

cspdk.si500.cells.mmi2x2_ro(width: float | None = None, width_taper: float = 1.5, length_taper: float = 50.2, length_mmi: float = 5.5, width_mmi: float = 6.0, gap_mmi: float = 0.4, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_ro') Component#

An mmi2x2.

An mmi2x2 is a 2x2 splitter

Parameters:
  • width – the width of the waveguides connecting at the mmi ports.

  • width_taper – the width at the base of the mmi body.

  • length_taper – the length of the tapers going towards the mmi body.

  • length_mmi – the length of the mmi body.

  • width_mmi – the width of the mmi body.

  • gap_mmi – the gap between the tapers at the mmi body.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.mmi2x2_ro(width_taper=1.5, length_taper=50.2, length_mmi=5.5, width_mmi=6.0, gap_mmi=0.4, cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-26.png

mzi#

cspdk.si500.cells.mzi(delta_length: float = 10.0, bend='bend_euler_rc', straight='straight_rc', splitter='mmi1x2_rc', combiner='mmi2x2_rc', cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component[source]#

A Mach-Zehnder Interferometer.

Parameters:
  • delta_length – the difference in length between the upper and lower arms of the mzi.

  • bend – the name of the default bend of the mzi.

  • straight – the name of the default straight of the mzi.

  • splitter – the name of the default splitter of the mzi.

  • combiner – the name of the default combiner of the mzi.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.mzi(delta_length=10.0, bend='bend_euler_rc', straight='straight_rc', splitter='mmi1x2_rc', combiner='mmi2x2_rc', cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-27.png

mzi_rc#

cspdk.si500.cells.mzi_rc(delta_length: float = 10.0, *, bend='bend_euler_rc', straight='straight_rc', splitter='mmi1x2_rc', combiner='mmi2x2_rc', cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component#

A Mach-Zehnder Interferometer.

Parameters:
  • delta_length – the difference in length between the upper and lower arms of the mzi.

  • bend – the name of the default bend of the mzi.

  • straight – the name of the default straight of the mzi.

  • splitter – the name of the default splitter of the mzi.

  • combiner – the name of the default combiner of the mzi.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.mzi_rc(delta_length=10.0, bend='bend_euler_rc', straight='straight_rc', splitter='mmi1x2_rc', combiner='mmi2x2_rc', cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-28.png

mzi_ro#

cspdk.si500.cells.mzi_ro(delta_length: float = 10.0, *, bend='bend_euler_ro', straight='straight_ro', splitter='mmi1x2_ro', combiner='mmi2x2_ro', cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_ro') Component#

A Mach-Zehnder Interferometer.

Parameters:
  • delta_length – the difference in length between the upper and lower arms of the mzi.

  • bend – the name of the default bend of the mzi.

  • straight – the name of the default straight of the mzi.

  • splitter – the name of the default splitter of the mzi.

  • combiner – the name of the default combiner of the mzi.

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.mzi_ro(delta_length=10.0, bend='bend_euler_ro', straight='straight_ro', splitter='mmi1x2_ro', combiner='mmi2x2_ro', cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-29.png

pad#

cspdk.si500.cells.pad() Component[source]#

An electrical pad.

import cspdk

c = cspdk.si500.cells.pad()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-30.png

rectangle#

cspdk.si500.cells.rectangle(**kwargs) Component[source]#

A rectangle.

import cspdk

c = cspdk.si500.cells.rectangle()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-31.png

straight#

cspdk.si500.cells.straight(length: float = 10.0, width: float | None = None, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc', **kwargs) Component[source]#

A straight waveguide.

Parameters:
  • length – the length of the waveguide.

  • width – the width of the waveguide.

  • cross_section – a cross section or its name or a function generating a cross section.

  • kwargs – additional arguments to pass to the straight function.

import cspdk

c = cspdk.si500.cells.straight(length=10.0, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-32.png

straight_rc#

cspdk.si500.cells.straight_rc(length: float = 10.0, width: float | None = None, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc', **kwargs) Component#

A straight waveguide.

Parameters:
  • length – the length of the waveguide.

  • width – the width of the waveguide.

  • cross_section – a cross section or its name or a function generating a cross section.

  • kwargs – additional arguments to pass to the straight function.

import cspdk

c = cspdk.si500.cells.straight_rc(length=10.0, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-33.png

straight_ro#

cspdk.si500.cells.straight_ro(length: float = 10.0, width: float | None = None, *, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_ro', **kwargs) Component#

A straight waveguide.

Parameters:
  • length – the length of the waveguide.

  • width – the width of the waveguide.

  • cross_section – a cross section or its name or a function generating a cross section.

  • kwargs – additional arguments to pass to the straight function.

import cspdk

c = cspdk.si500.cells.straight_ro(length=10.0, cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-34.png

taper#

cspdk.si500.cells.taper(length: float = 10.0, width1: float = 0.45, width2: float | None = None, port: Port | None = None, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component[source]#

A taper.

A taper is a transition between two waveguide widths

Parameters:
  • length – the length of the taper.

  • width1 – the input width of the taper.

  • width2 – the output width of the taper (if not given, use port).

  • port – the port (with certain width) to taper towards (if not given, use width2).

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.taper(length=10.0, width1=0.45, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-35.png

taper_rc#

cspdk.si500.cells.taper_rc(*, length: float = 10.0, width1: float = 0.45, width2: float | None = None, port: Port | None = None, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_rc') Component#

A taper.

A taper is a transition between two waveguide widths

Parameters:
  • length – the length of the taper.

  • width1 – the input width of the taper.

  • width2 – the output width of the taper (if not given, use port).

  • port – the port (with certain width) to taper towards (if not given, use width2).

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.taper_rc(length=10.0, width1=0.45, cross_section='xs_rc')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-36.png

taper_ro#

cspdk.si500.cells.taper_ro(*, length: float = 10.0, width1: float = 0.4, width2: float | None = None, port: Port | None = None, cross_section: Callable[[...], CrossSection] | CrossSection | dict[str, Any] | str | Transition = 'xs_ro') Component#

A taper.

A taper is a transition between two waveguide widths

Parameters:
  • length – the length of the taper.

  • width1 – the input width of the taper.

  • width2 – the output width of the taper (if not given, use port).

  • port – the port (with certain width) to taper towards (if not given, use width2).

  • cross_section – a cross section or its name or a function generating a cross section.

import cspdk

c = cspdk.si500.cells.taper_ro(length=10.0, width1=0.4, cross_section='xs_ro')
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-37.png

wire_corner#

cspdk.si500.cells.wire_corner() Component[source]#

A wire corner.

A wire corner is a bend for electrical routes.

import cspdk

c = cspdk.si500.cells.wire_corner()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells_si500-38.png