Porting from Ipkiss 3.4 to Ipkiss 3.5

Replacing ExpandedWaveguide by TaperedWaveguide

As mentioned in the changelog, i3.TaperedWaveguide has been added to the product. The TaperedWaveguide will fully replace the ExpandedWaveguide. TaperedWaveguide is more flexible, and will also yield a valid result in situations where ExpandedWaveguide failed.

You can refactor your code to use TaperedWaveguide by replacing i3.ExpandedWaveguide by i3.TaperedWaveguide.

TaperedWaveguide expects two trace_templates, where straight_trace_template points to the straight sections and trace_template points to the start, end and bend sections. They are both required properties.

Example:
from technologies import silicon_photonics
import ipkiss3.all as i3
from picazzo3.traces.wire_wg import WireWaveguideTemplate

wg_tmpl = WireWaveguideTemplate()
wg_tmpl.Layout(core_width=0.45)

wg_tt = i3.ExpandedWaveguideTemplate(trace_template=wg_tmpl)
wg_tt.Layout(bend_radius=5.0,
             taper_length=10.0,
             expanded_width=1.6)

wg = i3.ExpandedWaveguide(trace_template=wg_tt)
lay = wg.Layout(shape=[(0, 0), (30, 0), (30, 30)])
lay.visualize()
lay.visualize_2d()

This now becomes:

from technologies import silicon_photonics
import ipkiss3.all as i3
from picazzo3.traces.wire_wg import WireWaveguideTemplate

wg_tmpl = WireWaveguideTemplate()
wg_tmpl.Layout(core_width=0.45)
wg_tmpl_wide = WireWaveguideTemplate()
wg_tmpl_wide.Layout(core_width=1.6)

wg = i3.TaperedWaveguide(trace_template=wg_tmpl, straight_trace_template=wg_tmpl_wide)
lay = wg.Layout(shape=[(0, 0), (30, 0), (30, 30)],
                bend_radius=5.0,
                taper_length=10.0)
lay.visualize()
lay.visualize_2d()

You can also define a TaperedWaveguideTemplate, see the example in the sample gallery: Spiral with Tapered Waveguides and Spline Bends.

IPKISS AWG Designer

Since the IPKISS 3.5.0 release, the IPKISS AWG Designer (previously known as Filter Toolbox - AWG Designer) is part of the ‘IPKISS Photonics Design Platform’. The AWG Designer benefits from many improvements, changes are documented in the main changelog. But this also means that some small changes need to be made to the user code.

For more information about backwards incompatibilities in IPKISS 3.5.0 see Known backwards incompatibilities 3.5.0.

The following will explain how to migrate from Filter Toolbox 1.2 to IPKISS AWG Designer 3.5.

Import statement

Because of the name change, the name of the module has also been changed from filter_tb to awg_designer. Instead of importing the module with import filter_tb.all as filters, we now import via import awg_designer.all as awg.

Apertures

Some older aperture classes are now legacy classes and we recommend to refrain from using them in the future. These legacy classes are:

  • awg_designer.slabsim_integration.legacy_aperture.OpenAperture

  • awg_designer.slabsim_integration.legacy_aperture.OpenTransitionAperture

  • awg_designer.slabsim_integration.legacy_aperture.OpenWireWgAperture

  • awg_designer.slabsim_integration.legacy_aperture.OpenRibWgAperture

  • awg_designer.slabsim_integration.legacy_aperture.OpenMMIAperture

  • awg_designer.slabsim_integration.legacy_aperture.MultiAperture

The aperture class that should be used is awg_designer.all.SingleAperture.

Star Couplers

Multiple functions were introduced to help compose star couplers. The steps to create a star coupler are now:

  1. Add dummy apertures (awg_designer.all.get_apertures_angles_with_dummies())

  2. Generate the aperture mounting, positioning the apertures in a Rowland or confocal configuration (awg_designer.all.get_star_coupler_apertures())

  3. Generate a contour drawing for the free propagation region (awg_designer.all.get_star_coupler_extended_contour())

  4. Compose the star coupler and inspect.

The multi-apertures needed to create a star coupler are calculated with awg_designer.all.get_star_coupler_apertures() given the lists of single apertures. The function also returns their transformations (the input side will be mirrored compared to the array side).

The last function (awg_designer.all.get_star_coupler_extended_contour()) is an improved version of the default function (get_hull_shape) to calculate the free propagation region contour shape which fits the slab area.

Arrayed Waveguide Gratings

A new class awg_designer.all.ArrayedWaveguideGrating for composing an AWG that consist of 2 star couplers and a waveguide array was introduced. The waveguide array can be made with, for instance, the new awg_designer.all.RectangularWaveguideArray or the new awg_designer.all.SWaveguideArray.

The old ArrayedWaveguideGrating is renamed to LegacyArrayedWaveguideGrating. The RectangularAWG and RectangularExpandedAWG inherit from LegacyArrayedWaveguideGrating.

If in the past you created your own AWG classes that inherit from the original ArrayedWaveguideGrating, you need to change this inheritance and inherit from awg_designer.all.LegacyArrayedWaveguideGrating.

More information on the use of the new ArrayedWaveguideGrating class:

CAMFR engine

Improvements in the CAMFR engine will affect the calculations of the aperture field profiles, for more information see Known backwards incompatibilities 3.5.0.

PDKs

PDKs will be supported on the latest AWG Designer.

Other

IPKISS 3.5 introduces a number of utilities to do post-layout manipulations, making it easier to make your designs DRC clean. See Layout operations.