Source code for gdsfactory.components.coupler_asymmetric

from __future__ import annotations

import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.components.bend_s import bend_s
from gdsfactory.components.straight import straight
from gdsfactory.typings import ComponentSpec, CrossSectionSpec


[docs] @gf.cell def coupler_asymmetric( bend: ComponentSpec = bend_s, gap: float = 0.234, dy: float = 2.5, dx: float = 10.0, cross_section: CrossSectionSpec = "xs_sc", ) -> Component: """Bend coupled to straight waveguide. Args: bend: spec. gap: um. dy: port to port vertical spacing. dx: bend length in x direction. cross_section: spec. .. code:: dx |-----| _____ o2 / | _____/ | gap o1____________ | dy o3 """ x = gf.get_cross_section(cross_section) width = x.width bend_component = ( bend(size=(dx, dy - gap - width), cross_section=cross_section) if callable(bend) else bend ) wg = straight(cross_section=cross_section) w = bend_component.ports["o1"].width y = (w + gap) / 2 c = Component() wg = wg.ref(position=(0, y), port_id="o1") bottom_bend = bend_component.ref(position=(0, -y), port_id="o1", v_mirror=True) c.add(wg) c.add(bottom_bend) c.absorb(wg) c.absorb(bottom_bend) port_width = 2 * w + gap c.add_port( name="o1", center=(0, 0), width=port_width, orientation=180, cross_section=x ) c.add_port(name="o3", port=bottom_bend.ports["o2"]) c.add_port(name="o2", port=wg.ports["o2"]) return c
if __name__ == "__main__": c = coupler_asymmetric() c.show(show_ports=False)