EME: MZI Filter and Thermo-Optic Switch

A Mach-Zehnder interferometer (MZI) splits light into two arms and brings it back together, so what leaves each output depends on the phase difference between the arms. Here two 2x2 MMIs in 1000 x 220 nm Si wires at 1550 nm frame two arms of different length. The difference makes the MZI a filter whose two outputs alternate with wavelength, and a Pt heater above the shorter arm turns it into a thermo-optic switch.

Highlighted features: connect_ports to wire a circuit with two arms that meet again, check_layout() to confirm they meet, plot(view='schematic') before anything is solved, the interpolated wavelength sweep, heat() on an arm’s profile fed into that arm’s section, and plot(view='layout') of the whole circuit and of one section. Circuit views shows the three views of a circuit and how to walk it section by section.

Each MMI is three straight sections: two access waveguides side by side, the MMI body and two access waveguides again. A window around each access waveguide gives it its own port (a and b), and each arm is wired to one of them. The MMI length is the one with the most even split, found by sweeping the first MMI on its own around half its beat length, which reuses the solved modes. The 2x2 design follows the EME: MMI example.

The shorter arm is a straight guide at x = -750 nm. The longer arm leaves from x = +750 nm and turns by a quarter circle of 20 um radius four times (out, back, back and out), so it spans the same 80 um along the chip and is 2 \(\pi\) R long. check_layout() confirms the two arms meet the second MMI where its ports are, since a loop that does not close is refused. The path length difference \(\Delta L\) sets the free spectral range \(\lambda^2 / (n_g \Delta L)\), and the spacing of the peaks in the computed spectrum agrees with it.

The spectrum comes from sweep(method='interpolated'): the circuit is refined once, its cross-sections are solved at ten wavelengths, and the S-matrix at each of the 300 wavelengths is rebuilt from them.

The heater is a heat_only shape in the stack of every profile, with a substrate below, as in the Heater example. Until it carries a current it changes nothing. For each heater current the example solves the heat in a 10 um thermal window, labels the heated arm as its own profile and moves the straight arm’s section onto it with straight_section(name='short_arm', profile='hot_arm'), then solves the circuit again. FDM folds the temperature into the permittivity through each material’s dn/dT. The power that moves the light from the cross output to the bar output agrees with the one estimated from the arm’s index change at a single current, as the Heater example computes it.

Only the straight arm’s cross-section is heated, so the heat that reaches the longer arm, which turns away from the heater within a few micrometers of each MMI, is left out. The window has metal walls and boundary_condition='00': the heater sits above the core, so the heated arm has no symmetry to fold.

This code example is licensed under the BSD 3-Clause License.

  • Python
import sys
import numpy as np
import emodeconnection as emc
from emodeconnection import Port, Bounds
from matplotlib import pyplot as plt

## An unbalanced Mach-Zehnder interferometer in 1000 x 220 nm Si wires: a
## 2x2 MMI splits the light, the two arms differ in length, and a second
## 2x2 MMI recombines it. The longer arm turns out and back, so both arms
## start and end at the same place, and the shorter arm is a straight guide
## with a Pt heater above it, which makes the filter a thermo-optic switch.

## Set simulation parameters
wavelength = 1550  # [nm] wavelength
dx, dy = 25, 25  # [nm] resolution
h_core = 220  # [nm] silicon thickness
h_box, h_tclad = 1000, 1030  # [nm] SiO2 below and above the core
window_height = h_box + h_core + h_tclad  # [nm] a multiple of 50 nm, so meshed as given
w_wg = 1000  # [nm] width of the arms and of the MMIs' access waveguides
pitch = 1500  # [nm] center-to-center spacing of the access waveguides
d = pitch / 2  # [nm] each access waveguide's distance from the center
w_mmi = 4500  # [nm] 2x2 MMI width, its ports at +/- w_mmi / 6
access_length = 2000  # [nm] access sections on each side of an MMI
num_modes = 40  # [-] number of modes in the MMIs and their access sections
num_arm_modes = 4  # [-] number of modes in each arm
radius = 20e3  # [nm] bend radius of the longer arm

## The heater and the thermal domain, as in the Heater example
w_pt, h_pt = 1000, 140  # [nm] Pt heater above the shorter arm
h_substrate, w_substrate = 10e3, 10e3  # [nm] Si substrate (thermal domain only)
h_air = 500  # [nm] air above the heater in the thermal domain
heat_width, heat_height = w_substrate, h_substrate + window_height + h_air

## The longer arm turns by a quarter circle out, two back and one out again,
## so it is 2 pi R long and spans 4 R along the chip, as the shorter arm does
straight_length = 4 * radius  # [nm]
delta_L = 2 * np.pi * radius - straight_length  # [nm] path length difference

em = emc.EMode(emode_cmd=sys.argv[1:], simulation_name='mzi')

em.settings(
    wavelength=wavelength, x_resolution=dx, y_resolution=dy,
    window_width=w_mmi + 2000, window_height=window_height,
    num_modes=num_modes, boundary_condition='00',
    background_material='SiO2')

## The layer stack. The substrate and the heater are heat_only: the optical
## mesh leaves them out, and only the heat solve sees them. Until the heater
## carries a current, it changes nothing.
em.shape(name='substrate', material='Si', height=h_substrate, fem_resolution=200, heat_only=True)
em.shape(name='BOX', material='SiO2', height=h_box, fem_resolution=200)
em.shape(name='core', material='Si', fill_material='SiO2', height=h_core, etch_depth=h_core,
         mask=w_mmi, fem_resolution=50)
em.shape(name='tclad', material='SiO2', height=h_tclad, fem_resolution=200)
em.shape(name='heater', material='Pt', width=w_pt, height=h_pt, fem_resolution=50,
         heat_only=True)

## The MMI body. Its two lowest modes give the beat length L_pi.
em.FDM()
n_eff = np.real(np.asarray(em.get('effective_index')))
beat_length = wavelength / (2 * (n_eff[0] - n_eff[1]))
print(f'MMI beat length L_pi: {beat_length:.0f} nm')
em.label_profile(name='mmi')

## The two access waveguides beside each other
em.shape(name='core', mask=[w_wg, w_wg], mask_offset=[-d, d])
em.label_profile(name='pair')

## Each arm is one waveguide in a window as wide as the access pitch
em.settings(window_width=pitch, num_modes=num_arm_modes)
em.shape(name='core', mask=w_wg, mask_offset=0)
em.FDM()
n_g = float(np.real(np.asarray(em.group_index())[0]))
print(f'arm group index: {n_g:.4f}')
em.label_profile(name='arm')

## The first MMI alone. A window around each access waveguide gives it its
## own port. Inputs a third of the way from the axis to each edge image in
## pairs, so a 50/50 split forms near L_pi / 2. That estimate uses only the
## two lowest modes, so the length is swept around it, which reuses the
## solved modes and solves nothing.
window = lambda x: Bounds(window_width=pitch, window_height=window_height, offset=(x, 0.0))
arms = lambda side: [Port(name='a', side=side, window=window(-d)),
                     Port(name='b', side=side, window=window(d))]
em.straight_section(name='in_1', profile='pair', length=access_length, ports=arms('left'))
em.straight_section(name='mmi_1', profile='mmi', length=beat_length / 2)
em.straight_section(name='out_1', profile='pair', length=access_length, ports=arms('right'))

lengths = beat_length / 2 * np.arange(0.92, 1.04, 0.004)  # [nm]
data = em.sweep(key='section, mmi_1, length', values=lengths, result='S_matrix')
imbalance = [np.abs(np.abs(S.block('out_1.a', 'in_1.a')[0, 0]) ** 2
                    - np.abs(S.block('out_1.b', 'in_1.a')[0, 0]) ** 2) for S in data['S_matrix']]
mmi_length = lengths[np.argmin(imbalance)]
print(f'MMI length with the most even split: {mmi_length:.0f} nm')
em.straight_section(name='mmi_1', length=mmi_length)

## The arms: a straight one at x = -d, under the heater, and four quarter
## circles from x = +d
em.straight_section(name='short_arm', profile='arm', length=straight_length)
for k, turn in enumerate((1, -1, -1, 1)):
    em.bend_section(name=f'bend_{k + 1}', profile='arm', radius=radius,
                    sweep_angle=turn * np.pi / 2)

## The second MMI, the same as the first
em.straight_section(name='in_2', profile='pair', length=access_length, ports=arms('left'))
em.straight_section(name='mmi_2', profile='mmi', length=mmi_length)
em.straight_section(name='out_2', profile='pair', length=access_length, ports=arms('right'))

em.connect_ports(pairs=[
    ('in_1.right', 'mmi_1.left'), ('mmi_1.right', 'out_1.left'),
    ('out_1.a', 'short_arm.left'), ('out_1.b', 'bend_1.left'),
    ('bend_1.right', 'bend_2.left'), ('bend_2.right', 'bend_3.left'),
    ('bend_3.right', 'bend_4.left'),
    ('short_arm.right', 'in_2.a'), ('bend_4.right', 'in_2.b'),
    ('in_2.right', 'mmi_2.left'), ('mmi_2.right', 'out_2.left')])

## The circuit as a block diagram, drawn before anything is solved, and a
## check that the two arms meet again where the second MMI starts
em.plot(view='schematic', port='in_1.a', file_name='mzi_schematic', file_type='png')
distance, angle = em.check_layout().max_closure()
print(f'the arms meet to {distance:.1e} nm and {angle:.1e} rad')
print(f'path length difference: {delta_L:.0f} nm')


def outputs(S):
    """Power in the fundamental mode of each output for light into input a."""
    bar = np.abs(S.block('out_2.a', 'in_1.a')[0, 0]) ** 2
    cross = np.abs(S.block('out_2.b', 'in_1.a')[0, 0]) ** 2
    return bar, cross


## The spectrum of both outputs over 30 nm. The circuit is refined once, its
## cross-sections are solved at a few wavelengths, and the S-matrix at every
## wavelength below is rebuilt from them.
em.EME()
wavelengths = np.arange(1535.0, 1565.0, 0.1)  # [nm]
data = em.sweep(key='wavelength', values=wavelengths, result='S_matrix',
                method='interpolated', num_nodes=10,
                wavelength_range=(wavelengths[0], wavelengths[-1]))
bar, cross = np.array([outputs(S) for S in data['S_matrix']]).T

## The free spectral range between the cross port's peaks, against the
## one the arms' group index and path length difference predict
peaks = np.where((cross[1:-1] > cross[:-2]) & (cross[1:-1] > cross[2:]) & (cross[1:-1] > 0.5))[0] + 1
fsr = np.mean(np.diff(wavelengths[peaks]))
print(f'free spectral range: {fsr:.2f} nm')
print(f'free spectral range from the group index, lambda^2 / (n_g delta_L): '
      f'{wavelength ** 2 / (n_g * delta_L):.2f} nm')
dips = np.where((cross[1:-1] < cross[:-2]) & (cross[1:-1] < cross[2:]))[0] + 1
print(f'cross port: insertion loss at its peaks {-10 * np.log10(np.max(cross[peaks])):.2f} dB, '
      f'extinction {10 * np.log10(np.max(cross[peaks]) / np.max(cross[dips])):.1f} dB')

## The switch works at the cross port's peak nearest 1550 nm. The sections
## are built on the labeled profiles, so the wavelength is set on each.
switch_wavelength = wavelengths[peaks[np.argmin(np.abs(wavelengths[peaks] - wavelength))]]
print(f'switch wavelength: {switch_wavelength:.2f} nm')
for name in ('_default', 'mmi', 'pair', 'arm'):
    em.settings(profile=name, wavelength=switch_wavelength)

## The heater's power for a current I is I^2 times its resistance
rho = em.get('Pt')['resistivity'] * 1e-9  # [Ohm*nm] -> [Ohm*m]
resistance = rho * straight_length * 1e-9 / (w_pt * h_pt * 1e-18)  # [Ohm]


def heated(current):
    """Solve the heat for `current` and run the short arm on the heated profile."""
    em.shape(name='heater', current=current)
    em.settings(window_width=heat_width, window_height=heat_height)
    em.heat(boundary_temperature=298, boundaries=['bottom'])
    ## The heated mode is solved in the arm's own window. FDM folds the
    ## temperature into the permittivity through each material's dn/dT.
    em.settings(window_width=pitch, window_height=window_height)
    em.label_profile(name='hot_arm')
    em.straight_section(name='short_arm', profile='hot_arm')
    em.EME()
    return outputs(em.get('S_matrix'))


## The power for a pi phase shift, estimated as in the Heater example from
## the index change at one current. The default profile is the arm, and
## after a heat solve it is the heated arm.
em.FDM()
n_cold = em.get('effective_index')[0]
test_current = 10e-3  # [A]
heated(test_current)
em.FDM()
dn = em.get('effective_index')[0] - n_cold
P_pi_estimate = test_current ** 2 * resistance * switch_wavelength / (2 * dn * straight_length)
print(f'effective index shift at {test_current * 1e3:.0f} mA: {dn:.2e}')
print(f'power for a pi phase shift from that shift: {P_pi_estimate * 1e3:.1f} mW')

## The switch: both outputs against the heater's power
powers = P_pi_estimate * np.linspace(0, 1.25, 11)  # [W]
P_bar, P_cross = np.array([heated(np.sqrt(P / resistance)) for P in powers]).T
for P, b, c in zip(powers, P_bar, P_cross):
    print(f'heater {P * 1e3:5.1f} mW: bar {b:.4f}, cross {c:.4f}')
fine = np.linspace(powers[0], powers[-1], 1001)
P_pi = fine[np.argmin(np.interp(fine, powers, P_cross))]
print(f'power that switches the light to the bar port: {P_pi * 1e3:.1f} mW')

## The field on the layout with the heater at that power, and the second MMI
## on its own, where the light leaves through the bar port
heated(np.sqrt(P_pi / resistance))
em.plot(component='Ex', plot_function='abs', plane='z-x', view='layout',
        file_name='mzi_field', file_type='png')
em.plot(component='Ex', plot_function='abs', plane='z-x', view='layout', section='mmi_2',
        file_name='mzi_field_mmi_2', file_type='png')
em.close()

fig, ax = plt.subplots(2, 1, figsize=(6, 6))
ax[0].plot(wavelengths, 10 * np.log10(bar), label='bar')
ax[0].plot(wavelengths, 10 * np.log10(cross), label='cross')
ax[0].set_xlabel('Wavelength (nm)')
ax[0].set_ylabel('Transmission (dB)')
ax[0].set_ylim(-40, 1)
ax[0].legend()
ax[1].plot(powers * 1e3, P_bar, marker='o', ms=3, label='bar')
ax[1].plot(powers * 1e3, P_cross, marker='o', ms=3, label='cross')
ax[1].set_xlabel('Heater power (mW)')
ax[1].set_ylabel(f'Transmission at {switch_wavelength:.2f} nm')
ax[1].legend()
for a in ax:
    a.grid(True, alpha=0.3)
fig.tight_layout()
fig.savefig('mzi_spectrum_switch.png', dpi=300, bbox_inches='tight')

Console output:

EMode3D 1.0.8 - email
Meshing completed in 0.0 sec
Solving modes completed in 1.7 sec
MMI beat length L_pi: 49898 nm
Meshing completed in 0.0 sec
Solving modes completed in 0.1 sec
arm group index: 3.8277

Sweeping section parameter 'length'...
Solving EME: length = 25847.183889215175... completed in 4.3 sec
Solving EME: length = 25747.38781242284... completed in 0.6 sec
Solving EME: length = 25647.5917356305... completed in 0.6 sec
Solving EME: length = 25547.795658838164... completed in 0.6 sec
Solving EME: length = 25447.999582045828... completed in 0.6 sec
Solving EME: length = 25348.203505253492... completed in 0.6 sec
Solving EME: length = 25248.407428461156... completed in 0.6 sec
Solving EME: length = 25148.611351668816... completed in 0.6 sec
Solving EME: length = 25048.81527487648... completed in 0.6 sec
Solving EME: length = 24949.019198084145... completed in 0.6 sec
Solving EME: length = 24849.223121291812... completed in 0.6 sec
Solving EME: length = 24749.427044499473... completed in 0.6 sec
Solving EME: length = 24649.630967707137... completed in 0.6 sec
Solving EME: length = 24549.8348909148... completed in 0.6 sec
Solving EME: length = 24450.038814122465... completed in 0.6 sec
Solving EME: length = 24350.24273733013... completed in 0.6 sec
Solving EME: length = 24250.44666053779... completed in 0.6 sec
Solving EME: length = 24150.650583745453... completed in 0.6 sec
Solving EME: length = 24050.854506953117... completed in 0.6 sec
Solving EME: length = 23951.05843016078... completed in 0.6 sec
Solving EME: length = 23851.262353368445... completed in 0.6 sec
Solving EME: length = 23751.466276576106... completed in 0.6 sec
Solving EME: length = 23651.67019978377... completed in 0.7 sec
Solving EME: length = 23551.874122991434... completed in 0.6 sec
Solving EME: length = 23452.078046199098... completed in 0.6 sec
Solving EME: length = 23352.281969406762... completed in 0.6 sec
Solving EME: length = 23252.485892614422... completed in 0.7 sec
Solving EME: length = 23152.689815822087... completed in 0.6 sec
Solving EME: length = 23052.89373902975... completed in 0.6 sec
Solving EME: length = 22953.097662237415... completed in 0.6 sec
 completed in 21.5 sec
MMI length with the most even split: 23951 nm
the arms meet to 3.6e-12 nm and 0.0e+00 rad
path length difference: 45664 nm

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.6 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.3 sec
free spectral range: 13.75 nm
free spectral range from the group index, lambda^2 / (n_g delta_L): 13.75 nm
cross port: insertion loss at its peaks 0.67 dB, extinction 30.6 dB
switch wavelength: 1549.80 nm
Meshing completed in 0.0 sec
Solving modes completed in 0.1 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 5.6 sec
Meshing completed in 0.0 sec
Solving modes completed in 0.2 sec
effective index shift at 10 mA: 2.63e-03
power for a pi phase shift from that shift: 22.1 mW
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.6 sec
heater   0.0 mW: bar 0.0005, cross 0.8570
heater   2.8 mW: bar 0.0397, cross 0.8196
heater   5.5 mW: bar 0.1362, cross 0.7223
heater   8.3 mW: bar 0.2760, cross 0.5802
heater  11.0 mW: bar 0.4380, cross 0.4148
heater  13.8 mW: bar 0.5980, cross 0.2514
heater  16.6 mW: bar 0.7315, cross 0.1153
heater  19.3 mW: bar 0.8179, cross 0.0274
heater  22.1 mW: bar 0.8442, cross 0.0011
heater  24.9 mW: bar 0.8063, cross 0.0404
heater  27.6 mW: bar 0.7102, cross 0.1391
power that switches the light to the bar port: 22.1 mW
Solving heat completed in 0.1 sec

Solving S-matrices...
Solving section: in_1... completed in 0.0 sec
Solving section: mmi_1... completed in 0.0 sec
Solving section: out_1... completed in 0.0 sec
Solving section: short_arm... completed in 0.0 sec
Solving section: bend_1... completed in 0.0 sec
Solving section: bend_2... completed in 0.0 sec
Solving section: bend_3... completed in 0.0 sec
Solving section: bend_4... completed in 0.0 sec
Solving section: in_2... completed in 0.0 sec
Solving section: mmi_2... completed in 0.0 sec
Solving section: out_2... completed in 0.0 sec
 completed in 1.5 sec
Exited EMode

Figures:

../_images/mzi_schematic.png
../_images/mzi_spectrum_switch.png
../_images/mzi_field.png
../_images/mzi_field_mmi_2.png