OpenWireWgAperture

class awg_designer.all.OpenWireWgAperture

An aperture tapering from a wire waveguide to the Slab opening.

Uses the standard picazzo WireWaveguideTemplate.

Parameters:
slab_template: PCell and SlabTemplate, required

template for free propagation region

transition: PCell
field_ports:

list of regular ports that have field ports

trace_template: PCell and _TraceTemplate

template of the start waveguide

name: String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters

The unique name of the pcell

Other Parameters:
aperture_trace_template: PCell and _TraceTemplate, locked

template of the aperture cross-section

Views

class Layout
Parameters:
aperture_edge_width: float and number > 0

width of the cladding edges at the opening of the aperture

aperture_core_width: float and number > 0

width of the waveguide core at the opening of the aperture

transition_parameters:

dict of parameters for the aperture transition

fpr_depth: float and number > 0

depth of the virtual free propagation region

width: float and number > 0

width of the aperture

transition_length: float and number > 0

transition length

center: Coord2

center coordinate

front_shape: Shape

Shape of the ‘front’ of the aperture, where the light comes out

view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters:
slab_layers: locked

list of layers that should be drawn as exclusion zone

Examples

import si_fab.all as pdk  # noqa: F401
from awg_designer import all as filters
import ipkiss3.all as i3
import numpy as np

slab_soi = filters.SlabTemplate(name="SOI_Template")
slab_soi.Layout(slab_layers=[i3.PPLayer(i3.TECH.PROCESS.WG, i3.TECH.PURPOSE.DF_AREA)])
slab_soi.SlabModes(
    modes=[
        filters.InterpolatedSlabMode(
            name="TE0",
            wavelengths=np.linspace(1.2, 1.6, 5),
            n_effs=np.array([3.0568, 2.9866, 2.9223, 2.8617, 2.8042]),
            polarization="TE",
        )
    ]
)
w_ap = 2.0
ap_wire = filters.OpenWireWgAperture(slab_template=slab_soi)
ap_wire_lo = ap_wire.Layout(aperture_core_width=w_ap, transition_length=8.0)
ap_wire_lo.visualize(annotate=True)
../../../../../_images/awg_designer-all-OpenWireWgAperture-1.png
class FieldModelFromFunction

This FieldModel retrieves the field from a given function. The aperture transmission is 1, and reflection is 0. This can be overridden by defining your own CircuitModelView on the aperture.

For more information about field models see the Apertures doc.

Parameters:
field_width: float and number > 0

Extent of the field to consider (two-sided).

field_function:

Callable f(x, center) that returns an array of field values,given the 1 dimensional coordinates x along the aperture facet, centered around center.

positions: Shape

coordinates, in the local reference frame of the aperture, of the fields

netlist_view: NetlistView
layout_view: _LayoutView
n_o_passes: int and number > 0

number of simulation passes

space: _SlabPropagationEngine.Space

Space with all the elements representing the PCell

engine: _SlabPropagationEngine

Slab simulation engine

slab_modes: SlabModeDict

dict of Slab Modes

view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

See also

gaussian_field

Function to define a gaussian field.

OpenTransitionAperture.FieldModelFromCamfr

Will automatically run camfr simulations to calculate the mode profile.

Examples

import si_fab.all as pdk  # noqa: F401
from awg_designer import all as filters
from functools import partial
from pysics.basics.environment import Environment
import ipkiss3.all as i3
import numpy as np

slab_soi = filters.SlabTemplate(name="SOI_Template")
slab_soi.Layout(slab_layers=[i3.PPLayer(i3.TECH.PROCESS.WG, i3.TECH.PURPOSE.DF_AREA)])
slab_soi.SlabModes(
    modes=[
        filters.InterpolatedSlabMode(
            name="TE0",
            wavelengths=np.linspace(1.2, 1.6, 5),
            n_effs=np.array([3.0568, 2.9866, 2.9223, 2.8617, 2.8042]),
            polarization="TE",
        )
    ]
)
w_ap = 2.0
ap_wire = filters.OpenWireWgAperture(slab_template=slab_soi)
ap_wire.Layout(aperture_core_width=w_ap, transition_length=8.0)

gaussian = partial(filters.gaussian_field, waist=1.1)
ap_wire_sm = ap_wire.FieldModelFromFunction(field_function=gaussian)
environment = Environment(wavelength=1.55)
ff = ap_wire_sm.get_far_field(environment=environment)
ff.visualize()
# alpha: spreading angle of the aperture, typically taken
# somewhere 1.4 - 1.7 x the divergence angle of the mode.
alpha = 1.4 * ff.divergence_angle()  # noqa:F841
../../../../../_images/awg_designer-all-OpenWireWgAperture-2.png
class FieldModelFromCamfr

Field model calculating the output fields as a CAMFR simulation progating from the input port to the field port. The aperture transmission and reflection values are calculated from a CAMFR eigenmode propagation simulation.

For more information about field models see the Apertures doc.

Parameters:
material_stack_to_material_map: ( dict ), *None allowed*

Effective materials for each stack used in the virtual fabrication.

process_flow: VFabricationProcessFlow

Virtual fabrication process flow to use.

core_z_window: tuple2 and Tuple of <class ‘float’>

Window which describes the z-range of the core layer.

simulation_window: SizeInfo

SizeInfo which describes the region of the layout to simulate.

positions: Shape

coordinates, in the local reference frame of the aperture, of the fields

netlist_view: NetlistView
layout_view: _LayoutView
n_o_passes: int and number > 0

number of simulation passes

space: _SlabPropagationEngine.Space

Space with all the elements representing the PCell

engine: _SlabPropagationEngine

Slab simulation engine

slab_modes: SlabModeDict

dict of Slab Modes

view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Examples

import si_fab.all as pdk  # noqa: F401
from awg_designer import all as filters
from pysics.basics.environment import Environment
import ipkiss3.all as i3
import numpy as np

slab_soi = filters.SlabTemplate(name="SOI_Template")
slab_soi.Layout(slab_layers=[i3.PPLayer(i3.TECH.PROCESS.WG, i3.TECH.PURPOSE.DF_AREA)])
slab_soi.SlabModes(
    modes=[
        filters.InterpolatedSlabMode(
            name="TE0",
            wavelengths=np.linspace(1.2, 1.6, 5),
            n_effs=np.array([3.0568, 2.9866, 2.9223, 2.8617, 2.8042]),
            polarization="TE",
        )
    ]
)
w_ap = 2.0
ap_wire = filters.OpenWireWgAperture(slab_template=slab_soi)
ap_wire.Layout(aperture_core_width=w_ap, transition_length=8.0)
ap_wire_sm = ap_wire.FieldModelFromCamfr()
environment = Environment(wavelength=1.55)
ff = ap_wire_sm.get_far_field(environment=environment)
ff.visualize()
# alpha: spreading angle of the aperture, typically taken
# somewhere 1.4 - 1.7 x the divergence angle of the mode.
alpha = 1.4 * ff.divergence_angle()  # noqa: F841
../../../../../_images/awg_designer-all-OpenWireWgAperture-3.png
class CircuitModel
Parameters:
slabfield_view: _SlabFieldModelView
simulation_wavelengths: ( list<Real, number and number > 0> ), *None allowed*

Wavelengths for which to simulate the underlying physical model.Defaults to None, in which case a physical simulation will be done for each requested wavelength.If a single wavelength is specified, the model will be wavelength independent.If multiple wavelengths are given, only these wavelengths are valid.

reflection: Number, number, complex

Complex reflection of the aperture

layout_view: ( _LayoutView ), *None allowed*
netlist_view: ( NetlistView ), *None allowed*
view_name: String that contains only alphanumeric characters from the ASCII set or contains _$. ASCII set is extended on PY3.

The name of the view

Other Parameters:
solver: str and String that contains only ISO/IEC 8859-1 (extended ASCII py3) or pure ASCII (py2) characters, locked

circuit solver to use