Release Notes IPKISS Photonics Design Platform 3.6

The IPKISS Photonics Design Platform 3.6 features a new integration with the Eigenmode Expansion (EME) solver of Ansys Lumerical MODE. A lot of improvements and bugfixes were implemented also in IPKISS itself, the Caphe circuit simulator, IPKISS AWG Designer, and the IPKISS Link for Siemens EDA. Highlights are shown below, followed by the full changelog.

  1. Device simulation (IPKISS Link for Ansys Lumerical)
  2. Layout improvements
  3. AWG Designer
  4. Caphe
  5. IPKISS Link for Siemens EDA
  6. Full list of improvements and bugfixes

1. Device simulation (IPKISS Link for Ansys Lumerical)

With this release, designers can now use the EME solver of Lumerical MODE to simulate and extract an S-Matrix directly from an IPKISS layout (i3.device_sim.LumericalEMESimulation).

With our device simulation links for Dassault Systèmes Simulia (CST Studio Suite) and Ansys Lumerical, designers can take any device from one of the supported foundries (IPKISS PDKs) or from custom technologies, have them virtually fabricated by IPKISS, define the simulation recipe directly within IPKISS and then run the simulation in one of the supported simulation tools. Simulation results are stored in Touchstone format and can be imported back into the IPKISS framework to build compact models, which can then be used to build circuits consisting of multiple building blocks and run circuit simulations using IPKISS Caphe.

Several macros have been added to the product that allow to finetune your simulation recipes. For example, placing field monitors for visualizing the fields after the simulation (in the CAD tool itself), extracting neff from a mode, and adjusting various simulation settings in EME (link).

The tutorial to get started with physical simulations (Physical device simulation) has been revised and streamlined.

2. Layout improvements

The placement engine (i3.place_insts) allows to place instances based on electrical ports identifiers. This makes it easier to solve a certain class of placement and routing problems with electrical devices.

For the designers that always wondered where their layout labels were, want to get rid of even more of those pesky DRC errors, and get frustrated at hard-to-control tapered waveguides, we have several bug fixes and improvements for you. See the changelog for a complete list.

3. AWG Designer

Two drawing improvements have been implemented to ensure DRC-clean AWGs in several technologies:

  • Improvements in the star coupler contour
  • Improvements in the fanout section from the star coupler

4. Caphe

Users can now run both a time and frequency domain simulation from the same Python process.

5. IPKISS Link for Siemens EDA

We have significantly improved the error reporting when a library cannot be loaded, which helps to quickly identify the source.

6. Full list of improvements and bugfixes


  • Improvement: ipkiss3.all.place_insts() now supports placement and alignment of electrical ports.
  • Improvement: the flattening of contents of the splitter/combiner in MZIWaveguides can now be disabled by setting flatten_contents=False as a Layout parameter. This is useful if you’re using devices from a foundry PDK which should not be flattened.
  • New Feature: ipkiss3.all.RouteManhattan now has an optional control_points property to force the route to pass through these points
  • Improvement: Layout.visualize() now annotates labels (‘i3.Label’) by default. Added ‘labels’ parameter to enable/disable label visualization using True/False.
  • Bugfix: ipkiss3.all.get_stub_elements() now limits the length of side of the stub to half of the smallest side, instead of half of the longest side, when limit_stub_length=True.
  • Improvement: NumpyArrayProperty also accepts instances of collections.Sequence such as list, tuple and range objects, which are then automatically converted to a numpy array.
  • Bugfix: ipkiss3.all.Shape.area() now correctly calculates the area of the shape if the shape is not symmetric around (0, 0).
  • Improvement: function shapely_geom_to_shape has moved to ipkiss3.algorithms.shapely_geom_to_shape().
  • Improvements in ipkiss3.all.GDSCell:
    • Now throws an exception if the GDSII file contains multiple top-level cells but the cell_name parameter was not provided.
    • When name is provided but not cell_name and the GDSII file contains 1 top-level cell, that top-level cell will be loaded and (re)named as specified, even if the original name in the GDSII is different.
  • Bugfix: i3.route_to_parallel_line miscalculated some routes where the input and output angle deviated with minute amounts. This method is used in i3.RouteToLine.
  • New Feature: The py:class: i3.Connector <ipkiss3.all.Connector> base class can be used to create your own connectors. Connectors are used to connect two optical ports with a waveguide using a predefined algorithm.
  • Bugfix: The taper_lengths property has been moved from _TaperedWaveguide.Layout to TaperedWaveguide.Layout. TaperedWaveguideBundle.Layout now doesn’t allow setting the taper_lengths property anymore, as it should be.
  • Bugfix: i3.TaperedWaveguide and its helper functions now allow setting min_straight_section_length to 0.
  • Bugfix: The angle_step property of ipkiss3.all.TaperedWaveguide is now correctly taken into account.
  • Bugfix: Facet angles of a bend section in ipkiss3.all.TaperedWaveguide are now correctly set.
  • Bugfix: When a hierarchical cell is flattened labels are properly transformed.


  • Bugfix: Fixed the model cache to pick up the correct models according to the simulation type. Running frequency and time domain simulations in the same script will now give correct results.


  • Improvement: the contour calculated by get_star_coupler_extended_contour now also includes the outermost points of the star couplers’ multi apertures on all layers. This will result in changes to the layout of your star couplers.
  • Bugfix: get_layout_params_1xM_demux now correctly prints ‘Effective # channels’ when the verbose argument is set to True and unit is set to ‘wavelength’.
  • Bugfix: Straight sections are added to both sides of the fanout in every waveguide array to circumvent snapping issues. The lengths of those sections are technology dependent and by default are set to TECH.WG.SHORT_STRAIGHT. This behavior is more in line to how the AWGs were drawn in IPKISS < 3.5, but will result in changes to the layout of your AWGs.
  • Improvement: For each waveguide array fanout route properties can be controlled with the fanout_route_properties parameter in its LayoutView.

Starting from our extensive validated component library, we can assist you in the creation and validation of new model libraries