siepic#

SiEPIC models compatible with SAX circuits.

This package contains parameterized models of PIC components from the SiEPIC Electron Beam Lithography Process Development Kit (PDK) from the University of British Columbia (UBC), which is licensed under the terms of the MIT License.

See their repository for more details ( https://github.com/SiEPIC/SiEPIC_EBeam_PDK).

Usage:

from simphony.libraries import siepic

wg = siepic.waveguide()
bidirectional_coupler(wl: Union[float, jax.Array, numpy.ndarray, numpy.bool_, numpy.number, bool, int, complex] = 1.55, thickness: float = 220, width: float = 500) Dict[Tuple[str, str], jaxtyping.Complex[Array, '...']][source]

SiEPIC EBeam PDK bidirectional coupler model.

A bidirectional coupler optimized for TE polarized light at 1550nm.

The bidirectional coupler has 4 ports, labeled as pictured. Its efficiently splits light that is input from one port into the two outputs on the opposite side (with a corresponding pi/2 phase shift). Additionally, it efficiently interferes lights from two adjacent inputs, efficiently splitting the interfered signal between the two ports on the opposing side.

ebeam_bdc_te1550.png
Parameters
  • thickness (float, optional) – Waveguide thickness, in nanometers (default 220). Valid values are 210, 220, or 230 nanometers.

  • width (float, optional) – Waveguide width, in nanometers (default 500). Valid values are 480, 500, or 520 nanometers.

Notes

See also the PDK documentation: https://github.com/SiEPIC/SiEPIC_EBeam_PDK/blob/master/Documentation/SiEPIC_EBeam_PDK%20-%20Components%20with%20Models.docx

directional_coupler(wl: Union[float, jax.Array, numpy.ndarray, numpy.bool_, numpy.number, bool, int, complex] = 1.55, gap: float = 200, coupling_length: float = 10.0) Dict[Tuple[str, str], jaxtyping.Complex[Array, '...']][source]

A directional coupler optimized for TE polarized light at 1550nm.

The directional coupler has 4 ports, labeled as pictured. Its efficiently splits light that is input from one port into the two outputs on the opposite side (with a corresponding pi/2 phase shift). Additionally, it efficiently interferes lights from two adjacent inputs, efficiently splitting the interfered signal between the two ports on the opposing side.

ebeam_bdc_te1550.png
Parameters
  • gap (float, optional) – Coupling gap distance, in nanometers (default 200).

  • coupling_length (float, optional) – Length of coupler, in microns (default 10).

Notes

Sorted matrix of valid parameter combinations for directional couplers:

gap

coupling_length

200

0

200

2.5

200

5

200

7.5

200

10

200

12.5

200

15

200

17.5

200

20

200

22.5

200

25

200

27.5

200

30

200

32.5

200

35

200

37.5

200

40

200

42.5

200

45

200

47.5

grating_coupler(wl: Union[float, jax.Array] = 1.55, pol: Literal['te', 'tm'] = 'te', thickness: float = 220.0, dwidth: float = 0) Dict[Tuple[str, str], jaxtyping.Complex[Array, '...']][source]

SiEPIC EBeam PDK grating coupler optimized for TE polarizations at 1550nm.

The grating coupler efficiently couples light from a fiber array positioned above the chip into the circuit. For the TE mode, the angle is -25 degrees [needs citation].

ebeam_bdc_te1550.png
Parameters
  • wl (float or Array) – The wavelengths to evaluate at in microns.

  • pol ({"te", "tm"}) – Polarization of the input/output modes.

  • thickness ({210.0, 220.0, 230.0}) – Thickness of the grating coupler silicon in nm. Useful for simulating manufacturing variability.

  • dwidth ({-20.0, 0.0, 20.0}) – Change in width from nominal of the gratings. Representative of manufacturing variability. Must be one of -20, 0, or 20.

Raises
  • ValueError – If pol is not ‘te’ or ‘tm’.

  • ValueError – If thickness is not one of 210, 220, or 230.

  • ValueError – If dwidth is not one of -20, 0, or 20.

Notes

See also the PDK documentation: https://github.com/SiEPIC/SiEPIC_EBeam_PDK/blob/master/Documentation/SiEPIC_EBeam_PDK%20-%20Components%20with%20Models.docx

half_ring(wl: Union[float, jax.Array, numpy.ndarray, numpy.bool_, numpy.number, bool, int, complex] = 1.55, pol: Literal['te', 'tm'] = 'te', gap: float = 50, radius: float = 5, width: float = 500, thickness: float = 220, coupling_length: float = 0) Dict[Tuple[str, str], jaxtyping.Complex[Array, '...']][source]

A half-ring resonator optimized for TE polarized light at 1550nm.

The halfring has 4 ports, labeled as pictured.

halfring.png
Parameters
  • pol (str, optional) – Polarization of the halfring. Must be either ‘te’ (default) or ‘tm’.

  • gap (float, optional) – Coupling distance between ring and straight waveguide in nanometers (default 50).

  • radius (float, optional) – Ring radius in microns (default 5).

  • width (float, optional) – Waveguide width in nanometers (default 500).

  • thickness (float, optional) – Waveguide thickness in nanometers (default 220).

  • coupling_length (float, optional) – Length of the straight segment of the directional coupling edge, turns ring into a racetrack resonator, in microns (default 0).

Notes

Sorted matrix of valid parameter combinations for half rings:

pol

coupling_length

width

thickness

radius

gap

te

0

480

210

3

70

te

0

480

210

3

80

te

0

480

210

3

100

te

0

480

210

3

120

te

0

480

210

5

70

te

0

480

210

5

80

te

0

480

210

5

120

te

0

480

210

10

120

te

0

480

210

10

170

te

0

480

230

3

70

te

0

480

230

3

80

te

0

480

230

3

100

te

0

480

230

3

120

te

0

480

230

5

70

te

0

480

230

5

80

te

0

480

230

5

120

te

0

480

230

10

120

te

0

480

230

10

170

te

0

500

220

3

50

te

0

500

220

3

60

te

0

500

220

3

80

te

0

500

220

3

100

te

0

500

220

5

50

te

0

500

220

5

60

te

0

500

220

5

100

te

0

500

220

10

100

te

0

500

220

10

150

te

0

500

220

18

200

te

0

520

210

3

30

te

0

520

210

3

40

te

0

520

210

3

60

te

0

520

210

3

80

te

0

520

210

5

30

te

0

520

210

5

40

te

0

520

210

5

80

te

0

520

210

10

80

te

0

520

210

10

130

te

0

520

230

3

30

te

0

520

230

3

40

te

0

520

230

3

60

te

0

520

230

3

80

te

0

520

230

5

30

te

0

520

230

5

40

te

0

520

230

5

80

te

0

520

230

10

80

te

0

520

230

10

130

te

4

500

220

10

200

tm

0

480

210

5

320

tm

0

480

230

5

320

tm

0

500

220

5

300

tm

0

520

210

5

280

tm

0

520

230

5

280

taper(wl: Union[float, jax.Array, numpy.ndarray, numpy.bool_, numpy.number, bool, int, complex] = 1.55, w1: float = 0.5, w2: float = 1.0, length: float = 10.0) Dict[Tuple[str, str], jaxtyping.Complex[Array, '...']][source]

A taper component that adiabatically transitions between two waveguide widths.

This taper is simulated for TE operation at 1550 nanometers.

ebeam_taper_te1550.png
Parameters
  • w1 (float, optional) – Width of the input waveguide in microns (default 0.5).

  • w2 (float, optional) – Width of the output waveguide in microns (default 1).

  • length (float, optional) – Length of the taper in microns (default 10).

Notes

Sorted matrix of valid parameter combinations for adiabatic tapers:

w1

w2

length

0.4

1

1

0.4

1

2

0.4

1

3

0.4

1

4

0.4

1

5

0.4

1

6

0.4

1

7

0.4

1

8

0.4

1

9

0.4

1

10

0.4

1

11

0.4

1

12

0.4

1

13

0.4

1

14

0.4

1

15

0.4

1

16

0.4

1

17

0.4

1

18

0.4

1

19

0.4

1

20

0.4

2

1

0.4

2

2

0.4

2

3

0.4

2

4

0.4

2

5

0.4

2

6

0.4

2

7

0.4

2

8

0.4

2

9

0.4

2

10

0.4

2

11

0.4

2

12

0.4

2

13

0.4

2

14

0.4

2

15

0.4

2

16

0.4

2

17

0.4

2

18

0.4

2

19

0.4

2

20

0.4

3

1

0.4

3

2

0.4

3

3

0.4

3

4

0.4

3

5

0.4

3

6

0.4

3

7

0.4

3

8

0.4

3

9

0.4

3

10

0.4

3

11

0.4

3

12

0.4

3

13

0.4

3

14

0.4

3

15

0.4

3

16

0.4

3

17

0.4

3

18

0.4

3

19

0.4

3

20

0.5

1

1

0.5

1

2

0.5

1

3

0.5

1

4

0.5

1

5

0.5

1

6

0.5

1

7

0.5

1

8

0.5

1

9

0.5

1

10

0.5

1

11

0.5

1

12

0.5

1

13

0.5

1

14

0.5

1

15

0.5

1

16

0.5

1

17

0.5

1

18

0.5

1

19

0.5

1

20

0.5

2

1

0.5

2

2

0.5

2

3

0.5

2

4

0.5

2

5

0.5

2

6

0.5

2

7

0.5

2

8

0.5

2

9

0.5

2

10

0.5

2

11

0.5

2

12

0.5

2

13

0.5

2

14

0.5

2

15

0.5

2

16

0.5

2

17

0.5

2

18

0.5

2

19

0.5

2

20

0.5

3

1

0.5

3

2

0.5

3

3

0.5

3

4

0.5

3

5

0.5

3

6

0.5

3

7

0.5

3

8

0.5

3

9

0.5

3

10

0.5

3

11

0.5

3

12

0.5

3

13

0.5

3

14

0.5

3

15

0.5

3

16

0.5

3

17

0.5

3

18

0.5

3

19

0.5

3

20

0.6

1

1

0.6

1

2

0.6

1

3

0.6

1

4

0.6

1

5

0.6

1

6

0.6

1

7

0.6

1

8

0.6

1

9

0.6

1

10

0.6

1

11

0.6

1

12

0.6

1

13

0.6

1

14

0.6

1

15

0.6

1

16

0.6

1

17

0.6

1

18

0.6

1

19

0.6

1

20

0.6

2

1

0.6

2

2

0.6

2

3

0.6

2

4

0.6

2

5

0.6

2

6

0.6

2

7

0.6

2

8

0.6

2

9

0.6

2

10

0.6

2

11

0.6

2

12

0.6

2

13

0.6

2

14

0.6

2

15

0.6

2

16

0.6

2

17

0.6

2

18

0.6

2

19

0.6

2

20

0.6

3

1

0.6

3

2

0.6

3

3

0.6

3

4

0.6

3

5

0.6

3

6

0.6

3

7

0.6

3

8

0.6

3

9

0.6

3

10

0.6

3

11

0.6

3

12

0.6

3

13

0.6

3

14

0.6

3

15

0.6

3

16

0.6

3

17

0.6

3

18

0.6

3

19

0.6

3

20

terminator(wl: Union[float, jax.Array, numpy.ndarray, numpy.bool_, numpy.number, bool, int, complex] = 1.55, pol: Literal['te', 'tm'] = 'te') Dict[Tuple[str, str], jaxtyping.Complex[Array, '...']][source]

A terminator component that dissipates light into free space optimized for TE polarized light at 1550 nanometers.

The terminator dissipates excess light into free space. If you have a path where the light doesn’t need to be measured but you don’t want it reflecting back into the circuit, you can use a terminator to release it from the circuit.

ebeam_bdc_te1550.png
Parameters

pol (str, optional) – Polarization of the grating coupler. Must be either ‘te’ (default) or ‘tm’.

waveguide(wl: Union[float, jax.Array] = 1.55, pol: Literal['te', 'tm'] = 'te', length: float = 0.0, width: float = 500.0, height: float = 220.0, loss: float = 0.0) Dict[Tuple[str, str], jaxtyping.Complex[Array, '...']][source]

Model for an waveguide optimized for TE polarized light at 1550 nanometers.

A waveguide easily connects other optical components within a circuit.

ebeam_bdc_te1550.png
Parameters
  • pol (str, optional) – Polarization of the grating coupler. Must be either ‘te’ (default) or ‘tm’.

  • length (float, optional) – Waveguide length in microns (default 0).

  • width (float, optional) – Waveguide width in nanometers (default 500).

  • height (float, optional) – Waveguide height in nanometers (default 220).

  • loss (float, optional) – Loss of the waveguide in dB/cm (default 0).

  • sigma_ne (float, optional) – Standard deviation of the effective index for monte carlo simulations (default 0.05).

  • sigma_ng (float, optional) – Standard deviation of the group velocity for monte carlo simulations (default 0.05).

  • sigma_nd (float, optional) – Standard deviation of the group dispersion for monte carlo simulations (default 0.0001).

Notes

The sigma_ values in the parameters are used for monte carlo simulations.

Sorted matrix of valid parameter combinations for waveguides:

height

width

210

400

210

420

210

440

210

460

210

480

210

500

210

520

210

540

210

560

210

580

210

600

210

640

210

680

210

720

210

760

210

800

210

840

210

880

210

920

210

960

210

1000

210

1040

210

1080

210

1120

210

1160

210

1200

210

1240

210

1280

210

1320

210

1360

210

1400

210

1500

210

1600

210

1700

210

1800

210

1900

210

2000

210

2100

210

2200

210

2300

210

2400

210

2500

210

2600

210

2700

210

2800

210

2900

210

3000

210

3100

210

3200

210

3300

210

3400

210

3500

220

400

220

420

220

440

220

460

220

480

220

500

220

520

220

540

220

560

220

580

220

600

220

640

220

680

220

720

220

760

220

800

220

840

220

880

220

920

220

960

220

1000

220

1040

220

1080

220

1120

220

1160

220

1200

220

1240

220

1280

220

1320

220

1360

220

1400

220

1500

220

1600

220

1700

220

1800

220

1900

220

2000

220

2100

220

2200

220

2300

220

2400

220

2500

220

2600

220

2700

220

2800

220

2900

220

3000

220

3100

220

3200

220

3300

220

3400

220

3500

230

400

230

420

230

440

230

460

230

480

230

500

230

520

230

540

230

560

230

580

230

600

230

640

230

680

230

720

230

760

230

800

230

840

230

880

230

920

230

960

230

1000

230

1040

230

1080

230

1120

230

1160

230

1200

230

1240

230

1280

230

1320

230

1360

230

1400

230

1500

230

1600

230

1700

230

1800

230

1900

230

2000

230

2100

230

2200

230

2300

230

2400

230

2500

230

2600

230

2700

230

2800

230

2900

230

3000

230

3100

230

3200

230

3300

230

3400

230

3500

y_branch(wl: Union[float, jax.Array] = 1.55, pol: Literal['te', 'tm'] = 'te', thickness: float = 220.0, width: float = 500.0) Dict[Tuple[str, str], jaxtyping.Complex[Array, '...']][source]

SiEPIC EBeam PDK Y-branch model.

A y-branch efficiently splits the input 50/50 between the two outputs. It can also be used as a combiner if used in the opposite direction, combining and interfering the light from two inputs into the one output.

ebeam_bdc_te1550.png
Parameters
  • pol (str, optional) – Polarization of the y-branch. Must be either ‘te’ (default) or ‘tm’.

  • thickness (float, optional) – Waveguide thickness, in nanometers (default 220). Valid values are 210, 220, or 230 nanometers. Useful for simulating manufacturing variability.

  • width (float, optional) – Waveguide width, in nanometers (default 500 nanometers). Valid values are 480, 500, or 520 nanometers.

Notes

See also the PDK documentation: https://github.com/SiEPIC/SiEPIC_EBeam_PDK/blob/master/Documentation/SiEPIC_EBeam_PDK%20-%20Components%20with%20Models.docx