Emmanuel Lambert, Martin Fiers, Diedrik Vermeulen, Wim Bogaerts, Peter Bienstman Photonics Research Group, Ghent University - IMEC, Department of Information Technology (INTEC), Sint-Pietersnieuwstraat 41, 9000 Gent, Belgium
We present a Python framework for advanced research on photonic integrated circuits. A powerful component and circuit layout design library was developed in-house using pure Python and integrated with complex simulation capabilities from external software packages using Numpy and SWIG.
Photonic integrated circuits are currently subject of intensive research and are an emerging technology in industrial applications. The Photonics Research Group at Ghent University in Belgium is one of the foremost groups in Europe in this field, especially in complex circuits based on silicon photonics technology. However, this advanced technology needs to be complemented with matching software tools for design and simulation. For this, we developed a range of tools which we use in combination with third-party software. The most prominent tool is the Ipkiss mask design library, which is a scripting API to flexibly design layouts of (photonic) circuits.
In the field of photonics, the tools for design and simulation are rather fragmented: for example, a researcher needs to define a component in a specific simulation engine (using the tool’s script or GUI). Subsequently, for fabrication a mask layout needs to be written or drawn for the same component. Researchers thus spend considerable time on repetitive tasks that do not add value to their results, and might even introduce errors. That's why we built a Python-based software stack, allowing uniform scripting and reuse over different tools. This framework is component-centric: the researcher then defines a (parametric) component only once in the Ipkiss library, and reuses that definition throughout the framework.
For simulation, we can make use of many available tools. We wrote a Python wrapper for the popular open source FDTD simulator Meep (developed by MIT). Using SWIG, we expose the C++ core of Meep to Python. Python tools like pickle allow for easy persistence of simulation definitions, which can then be executed in batch on the University supercomputer. The wide range of functions in SciPy and Numpy support the post-processing of simulation results. This Python-Meep wrapper was released as open source under the GPL2 license.
In the next phase, Python-Meep was interfaced to our component-centric framework. The framework is not tied to a specific simulation engine, but allows multiple engines to be plugged in and even used together. This allows to evaluate results from different engines in a flexible way, starting from a single problem definition. The conversion of the component definition (which is typically described by a mask layout for fabrication) is done by a virtual fabrication routine implemented in Python with Numpy, which automatically derives the physical geometry of the component from its definition in Ipkiss/Picazzo and then passes it on to the simulation engine. Currently, we primarily use the electromagnetic simulation engines CAMFR and Meep, but the framework is fully open to multiphysics modeling. Visualisation libraries such a Matplotlib and PIL also proved to be indispensible for our framework.
With this first version of our integrated Python software stack, we already see improved productivity amongst the researchers : they can focus better on their core job, which is photonics research, and re-use their knowledge of the Python platform over a wide range of tasks. We are now further extending this framework to include additional simulation engines, interfaces to electronics design tools, physical device characterization, fabrication and sample tracking and data persistence.