Source code for gdsfactory.components.coupler90bend

from __future__ import annotations

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


[docs] @gf.cell def coupler90bend( radius: float = 10.0, gap: float = 0.2, bend: ComponentSpec = bend_euler, cross_section_inner: CrossSectionSpec = "xs_sc", cross_section_outer: CrossSectionSpec = "xs_sc", ) -> Component: r"""Returns 2 coupled bends. Args: radius: um. gap: um. bend: for bend. cross_section_inner: spec inner bend. cross_section_outer: spec outer bend. .. code:: r 3 4 | | | | / / | / / 2____/ / 1_____/ """ c = Component() xi = gf.get_cross_section(cross_section_inner) xo = gf.get_cross_section(cross_section_outer) width = xo.width / 2 + xi.width / 2 spacing = gap + width bend90_inner = gf.get_component( bend, radius=radius, cross_section=cross_section_inner ) bend90_outer = gf.get_component( bend, radius=radius + spacing, cross_section=cross_section_outer ) bend_inner_ref = c << bend90_inner bend_outer_ref = c << bend90_outer pbw = bend_inner_ref.ports["o1"] bend_inner_ref.movey(pbw.center[1] + spacing) # This component is a leaf cell => using absorb c.absorb(bend_outer_ref) c.absorb(bend_inner_ref) c.add_port("o1", port=bend_outer_ref.ports["o1"]) c.add_port("o2", port=bend_inner_ref.ports["o1"]) c.add_port("o3", port=bend_inner_ref.ports["o2"]) c.add_port("o4", port=bend_outer_ref.ports["o2"]) return c
if __name__ == "__main__": c = coupler90bend(radius=3) c.show(show_ports=True)