FanOut
Imports
from functools import partial
import gdsfactory as gf
from gdsfactory.gpdk import PDK
import doroutes as dr
PDK.activate()
import numpy as np
FanInOut Example
c = gf.Component()
ref = c << dr.pcells.fanout_frame2(transition=("e", "w"), add_frame=True)
c.add_ports(ref)
r = c << gf.components.mmi()
r.move((40, 120))
r = c << gf.components.mmi()
r.rotate(90)
r.move((60, 40))
straight = "straight"
bend = {"component": "bend_euler", "settings": {"radius": 5}}
spacing = 1.0
_starts, _legs1 = dr.add_fan_in(
component=c,
inputs=[p for p in c.ports if str(p.name).startswith("in")],
straight=straight,
bend=bend,
spacing=spacing,
)
_stops, _legs2 = dr.add_fan_in(
component=c,
inputs=[p for p in c.ports if str(p.name).startswith("out")],
straight=straight,
bend=bend,
spacing=spacing,
)
if len(_starts) != len(_stops):
msg = "number of start ports is different than number of end ports"
raise ValueError(msg)
dr.add_route_astar(
component=c,
start=(*np.mean(_starts, 0), "e"),
stop=(*np.mean(_stops, 0), "e"),
straight=partial(dr.pcells.straights, straight, len(_starts), spacing),
bend=partial(dr.pcells.bends, bend, straight, len(_starts), spacing),
layers=[(3, 0)],
grid_unit=800,
)
c.show()
dr.util.show_cell(c)
API key for organization 'GDSFactory' found.