Spiral with Expanded Waveguides and Spline Bends

If you want to reduce losses you can use spline bends and expanded waveguides in your spirals.

# Importing demolib and IPKISS

import demolib.all as pdk
from ipkiss3 import all as i3
from picazzo3.wg.spirals import FixedLengthSpiral

Defining the Spline Rounding Algorithm

In order to create a custom rounding algorithm we need to inherit from spline import ShapeRoundAdiabaticSpline and override the defaults of the bend radius and the adiabatic angles.

class RA(i3.ShapeRoundAdiabaticSpline):

    def _default_radius(self):
        return 5.0

    def _default_adiabatic_angles(self):
        return (45.0, 45.0)

Defining the trace template

We take the basic template from the PDK and derive an ExpandedWaveguideTemplate version of it, which does two things:

  • flaring out to a different width, with a specified taper length and minimum lengths for the narrow and wider waveguides.
  • creating bends using a given rounding algorithm
wg_tmpl = pdk.SWG450()
expanded_wg_tmpl = i3.ExpandedWaveguideTemplate(name="expanded_wg_tmpl",
                                                trace_template=wg_tmpl)
expanded_wg_tmpl.Layout(bend_radius=5.0, # shortest radius of curvature in the bend
                        rounding_algorithm=RA, # use splines instead of circular arcs: smoother transition
                        taper_length=10.0, # length of the taper between the regular waveguide and the expanded waveguide
                        min_wire_length=1.0,  # minimum length of the regular waveguide section")
                        expanded_width=2.0,
                        min_expanded_length=1.0, # minimum length of the expanded section. If shorter, don't expand
                        )

Defining a spiral

spiral = FixedLengthSpiral(total_length=4000.0,
                           n_o_loops=4,
                           trace_template=expanded_wg_tmpl)
spiral_lo = spiral.Layout(incoupling_length=10.0,
                          spacing=4,
                          stub_direction="V",  # either H or V
                          growth_direction="V",
                          )

spiral_lo.visualize(annotate=True)
print "The length of the spiral is {} um".format(spiral_lo.trace_length())
../_images/sphx_glr_plot_expanded_spiral_001.png

Out:

The length of the spiral is 4000.0 um