Source code for gdsfactory.components.mmi2x2_with_sbend
import numpy as np
import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.components.bend_s import bend_s
from gdsfactory.typings import ComponentFactory, CrossSectionSpec
[docs]
@gf.cell
def mmi2x2_with_sbend(
with_sbend: bool = True,
s_bend: ComponentFactory = bend_s,
cross_section: CrossSectionSpec = "xs_sc",
) -> Component:
"""Returns mmi2x2 for Cband.
C_band 2x2MMI in 220nm thick silicon
https://opg.optica.org/oe/fulltext.cfm?uri=oe-25-23-28957&id=376719
Args:
with_sbend: add sbend.
s_bend: S-bend function.
cross_section: spec.
"""
def mmi_widths(t):
return np.array([2 * 0.7 + 0.2, 1.48, 1.48, 1.48, 1.6])
c = gf.Component()
P = gf.path.straight(length=2 * 2.4 + 2 * 1.6, npoints=5)
xs = gf.get_cross_section(cross_section)
xs0 = xs.copy(width_function=mmi_widths)
ref = c << gf.path.extrude(P, cross_section=xs0)
# Add input and output tapers
taper = gf.components.taper(
length=1,
width1=0.5,
width2=0.7,
cross_section=cross_section,
)
topl_taper = c << taper
topl_taper.move((-1, 0.45))
botl_taper = c << taper
botl_taper.move((-1, -0.45))
topr_taper = c << taper
topr_taper.mirror()
topr_taper.move((9, 0.45))
botr_taper = c << taper
botr_taper.mirror()
botr_taper.move((9, -0.45))
if with_sbend:
sbend = s_bend(cross_section=cross_section)
topl_sbend = c << sbend
topl_sbend.mirror([0, 1])
botl_sbend = c << sbend
topr_sbend = c << sbend
botr_sbend = c << sbend
botr_sbend.mirror([0, 1])
topl_sbend.connect("o1", destination=topl_taper.ports["o1"])
botl_sbend.connect("o1", destination=botl_taper.ports["o1"])
topr_sbend.connect("o1", destination=topr_taper.ports["o1"])
botr_sbend.connect("o1", destination=botr_taper.ports["o1"])
c.add_port("o1", port=botl_sbend.ports["o2"])
c.add_port("o2", port=topl_sbend.ports["o2"])
c.add_port("o3", port=topr_sbend.ports["o2"])
c.add_port("o4", port=botr_sbend.ports["o2"])
c.absorb(topr_sbend)
c.absorb(topl_sbend)
c.absorb(botr_sbend)
c.absorb(botl_sbend)
else:
c.add_port("o2", port=topl_taper.ports["o1"])
c.add_port("o1", port=botl_taper.ports["o1"])
c.add_port("o3", port=topr_taper.ports["o1"])
c.add_port("o4", port=botr_taper.ports["o1"])
c.absorb(ref)
c.absorb(topr_taper)
c.absorb(topl_taper)
c.absorb(botr_taper)
c.absorb(botl_taper)
return c
if __name__ == "__main__":
# c = mmi2x2_with_sbend(
# with_sbend=True,
# cross_section=dict(cross_section="xs_sc", settings=dict(layer=(2, 0))),
# )
c = mmi2x2_with_sbend()
c.show(show_ports=True)