Layout changes 3.2.0

There are two small layout bugfixes in IPKISS 3.2, which can have an impact on your existing layouts. You can check out the two cases below:

ShapeArc

In ShapeArc, the angle_step is adjusted a bit so the full arc is covered. However, if end_angle < start_angle, and the angle difference is not a multiple of angle_step, the angle_step was not adjusted properly, and this may cause the arc not to stop exactly at end_angle.

The following code would yield the wrong result in ipkiss 3.1.3, but this has been fixed in ipkiss 3.2.0:

import ipkiss3.all as i3

i3.LayoutCell().Layout(
    elements=[
        i3.SRef(
            reference=i3.Waveguide().Layout(
                shape=i3.ShapeArc(radius=10, start_angle=274, start_face_angle=180,
                                  end_angle=0, end_face_angle=90, angle_step=5)
            ).cell
        ),
        i3.SRef(
            reference=i3.Waveguide().Layout(shape=[(10, 0), (10, 5)]).cell
        )
    ]
).visualize()
Bugfix in shapearc explained.

ShapeArc bugfix explained in the figure above.

route_to_parallel_line

The function route_to_parallel_line is used to route an S-shape bend between two parallel lines. The parameter max_s_bend_angle is used to define the maximum angle of the S-bend. It may be 90 degrees, in which case manhattan routing is performed.

In IPKISS 3.1.3 there was a small bug: if the maximum s-bend angle (max_s_bend_angle) could be used to route between two parallel lines, instead a slightly smaller value was used. The bugfix results in a slightly different calculation of S-bend routes.

The following code would yield slightly wrong result in ipkiss 3.1.3, but this has been fixed in ipkiss 3.2.0:

from technologies import silicon_photonics
from ipkiss3 import all as i3

wg = i3.Waveguide()
wg_lay = wg.Layout()

from picazzo3.container.fanout_ports import FanoutPorts

my_wg_fanout = FanoutPorts(contents=wg,
                           port_labels=["in"]
                           )

lay = my_wg_fanout.Layout(flatten_contents=False,
                          area_layer_on=False,          # if True, adds area layer on the bundle
                          output_direction=i3.WEST,
                          spacing=20.0,                # spacing between outputs
                          reference_coordinate=-12.5,  # y-coordinate (or x for NORTH and SOUTH) of first waveguide
                          target_coordinate=20.0,      # x-coordinate (or y for NORTH and SOUTH) of output port
                          max_s_bend_angle=90.0,       # maximum angle of S-bend
                          bend_radius=4.5              # bend radius of waveguides
                          )
lay.visualize()
Bug in route_to_parallel_line explained.

route_to_parallel_line bug explained.