# Release notes IPKISS 3.1.3¶

IPKISS 3.1.3 provides a new compact model framework. In addition, it contains several bugfixes and small improvements. Please check the changelog for the full list of changes.

The highlights are shown below:

## New compact model framework¶

### Redesigned model syntax¶

We redesigned the syntax to define compact models, to make it simpler to define, and more reliable to use. In addition, the definition of the compact model has been separated from the PCell, allowing better reuse, better performance and better scaling. The framework is backward compatible, allowing people to gradually convert to the new framework.

We did many changes in the backend to increases the robustness, performance, and stability of our compact models.

Here’s a peek preview on how a waveguide model looks like in the new syntax:

import ipkiss3.all as i3

class WaveguideModel(i3.CompactModel):
"""First-order dispersion waveguide model."""

parameters = [
'n_g',
'n_eff',
'center_wavelength',
'loss_dB_m',
'length',
]

terms = [
i3.OpticalTerm(name='in'),
i3.OpticalTerm(name='out'),
]

def calculate_smatrix(parameters, env, S):
dneff = -(parameters.n_g - parameters.n_eff) / parameters.center_wavelength
neff_total = parameters.n_eff + (env.wavelength - parameters.center_wavelength) * dneff
loss = 10 ** (-parameters.loss_dB_m * parameters.length * 1e-6  / 20.0)
S['in', 'out'] = S['out', 'in'] = exp(1j * 2 * pi / env.wavelength * neff_total * parameters.length) * loss


### Adding circuit models to libraries and PDKs¶

With IPKISS 3.1.3, it now becomes easier to augment a PDK or library with your own compact models (or reuse existing ones). They can be defined in a separate file and linked through the new CircuitModelView of a PCell.

Demolib has been upgraded to explain how models can be added. We also have a dedicated circuit model tutorial to help device engineers get started building their own models.

### Time-domain API¶

There is now a simple time-domain API to set up test benches and run transient simulations. See the tutorial to learn how to define time-domain models and how to run time-domain simulations.

### Overall improvements on the simulation side¶

Besides the improved syntax, there are several other improvements

• Model compilation is now much faster and robust, and supports more of the Python language features,
• models can be easily debugged interactively,
• better exception handling,
• models that are converted to the new syntax on average run faster. For example, on the filter toolbox, a speed improvement of ~ 25% is measured for running frequency-sweep simulations.

## Bundled editor¶

In our continuous effort to make IPKISS easier to use, PyCharm IDE now becomes our default editor of choice. For users unfamiliar with PyCharm IDE: PyCharm is an Python editor with several important features that are useful for designing with IPKISS: powerful code completion, debugging tools, project management etc. Because of this, it fits well with our vision that photonics designers can build up their core IP as a set of modules and reuse throughout multiple projects.

By opening PyCharm from our Luceda Control Center, you have immediate access to all the code samples, and you can start new projects which are automatically set up to use the IPKISS interpreter:

By default, samples are now installed in the user home folder, under <USER_HOME>/luceda/samples. When you create a new project in PyCharm, the default suggested location is <USER_HOME>/luceda/projects/project_name.

## Custom routing in IPKISS.eda¶

PDK developers now have complete control over the way waveguides are generated inside their PDK when used in IPKISS.eda (i.e., triggered when pressing the ‘generate all waveguides’ macro). Different routing strategies can be defined and encoded in the PDK. See the changelog for more information on how to use it.