Source code for ubcpdk.cells.heaters
"""Heater components."""
import gdsfactory as gf
from gdsfactory.typings import ComponentSpec, CrossSectionSpec, LayerSpec
[docs]
@gf.cell
def straight_heater_metal(
length: float = 320.0,
length_undercut_spacing: float = 6.0,
length_undercut: float = 30.0,
length_straight: float = 0.1,
length_straight_input: float = 15.0,
with_undercut: bool = False,
port_orientation1: int | None = None,
port_orientation2: int | None = None,
cross_section: CrossSectionSpec = "strip",
) -> gf.Component:
"""Returns a thermal phase shifter.
dimensions from https://doi.org/10.1364/OE.27.010456
Args:
length: phase shifter length.
length_undercut_spacing: spacing between the waveguide and the undercut.
length_undercut: undercut length.
length_straight: straight length.
length_straight_input: straight length input.
with_undercut: isolation trenches for higher efficiency.
port_orientation1: orientation of the first port. None for all orientations.
port_orientation2: orientation of the second port. None for all orientations.
cross_section: for waveguide.
"""
return gf.c.straight_heater_metal_undercut(
length=length,
length_undercut_spacing=length_undercut_spacing,
length_undercut=length_undercut,
length_straight=length_straight,
length_straight_input=length_straight_input,
with_undercut=with_undercut,
port_orientation1=port_orientation1,
port_orientation2=port_orientation2,
via_stack="via_stack_heater_mtop",
heater_taper_length=5.0,
ohms_per_square=None,
cross_section=cross_section,
)
[docs]
@gf.cell
def straight_heater_meander(
length: float = 320.0,
heater_width: float = 2.5,
spacing: float = 2,
cross_section: CrossSectionSpec = "strip",
layer_heater: LayerSpec = "M1_HEATER",
via_stack: ComponentSpec | None = "via_stack_heater_mtop",
n: int | None = 3,
port_orientation1: float | None = None,
port_orientation2: float | None = None,
radius: float | None = None,
) -> gf.Component:
"""Returns a meander based heater.
based on SungWon Chung, Makoto Nakai, and Hossein Hashemi,
Low-power thermo-optic silicon modulator for large-scale photonic integrated systems
Opt. Express 27, 13430-13459 (2019)
https://www.osapublishing.org/oe/abstract.cfm?URI=oe-27-9-13430
Args:
length: phase shifter length.
heater_width: width of the heater.
spacing: waveguide spacing (center to center).
cross_section: for waveguide.
layer_heater: for top heater, if None, it does not add a heater.
via_stack: for the heater to via_stack metal.
n: number of meanders.
port_orientation1: orientation of the first port. None for all orientations.
port_orientation2: orientation of the second port. None for all orientations.
radius: radius of the meander.
"""
return gf.c.straight_heater_meander(
spacing=spacing,
cross_section=cross_section,
layer_heater=layer_heater,
via_stack=via_stack,
length=length,
heater_width=heater_width,
extension_length=15.0,
port_orientation1=port_orientation1,
port_orientation2=port_orientation2,
heater_taper_length=10.0,
straight_widths=None,
taper_length=10.0,
n=n,
radius=radius,
)
if __name__ == "__main__":
from ubcpdk import PDK
PDK.activate()
c = straight_heater_meander()
c.pprint_ports()
c.show()