Neural Network Based Models

These are various applications of Neural Networks and Linear Regressions we’ve trained to estimate effective indices.

Straight Waveguide Model

Straight Waveguide Effective Index

SiPANN.nn.straightWaveguide(wavelength, width, thickness, sw_angle=90, derivative=None)

Calculates the first effective index value of the TE mode. Can also calculate derivatives with respect to any of the inputs. This is especially useful for calculating the group index, or running gradient based optimization routines.

Each of the inputs can either be a one dimensional numpy array or a scalar. This is especially useful if you want to sweep over multiple parameters and include all of the possible permutations of the sweeps.

The output is a multidimensional array. The size of each dimension corresponds with the size of each of the inputs, such that DIM1 = size(wavelength) DIM2 = size(width) DIM3 = size(thickness) DIM4 = size(sw_angle)

So if I swept 100 wavelength points, 1 width, 10 possible thicknesses, and 2 sw_angles, then the dimension of each output effective index (or higher order derivative) would be: (100,1,10,2).

Parameters:
  • wavelength (float or ndarray (W1,)) – Wavelength points to evaluate
  • width (float or ndarray (W2,)) – Width of the waveguides in microns
  • thickness (float or ndarray (T,)) – Thickness of the waveguides in microns
  • sw_angle (float or ndarray (A,)) – Sidewall angle from horizontal in degrees, ie 90 makes a square. Defaults to 90.
  • derivative (int) – Order of the derivative to take. Defaults to None.
Returns:

TE0 – First TE effective index with size (W1,W2,T,A,), or if derivative’s are included (W1,W2,T,A,4,)

Return type:

ndarray

Straight Waveguide Scattering Parameters

SiPANN.nn.straightWaveguide_S(wavelength, width, thickness, length, sw_angle=90)

Calculates the analytic scattering matrix of a simple straight waveguide with length L.

Parameters:
  • wavelength (ndarray (N,)) – Wavelength points to evaluate
  • width (float) – Width of the waveguides in microns
  • thickness (float) – Thickness of the waveguides in microns
  • sw_angle (float) – Sidewall angle from horizontal in degrees, ie 90 makes a square. Defaults to 90.
  • L (float) – Length of the waveguide in microns
Returns:

S – Scattering matrix for each wavelength

Return type:

ndarray (N,2,2)

Bent Waveguide Model

Bent Waveguide Effective Index

SiPANN.nn.bentWaveguide(wavelength, width, thickness, radius, sw_angle=90, derivative=None)

Calculates the first effective index value of the TE mode of a bent waveguide. Can also calculate derivatives with respect to any of the inputs. This is especially useful for calculating the group index, or running gradient based optimization routines.

Each of the inputs can either be a one dimensional numpy array or a scalar. This is especially useful if you want to sweep over multiple parameters and include all of the possible permutations of the sweeps.

The output is a multidimensional array. The size of each dimension corresponds with the size of each of the inputs, such that DIM1 = size(wavelength) DIM2 = size(width) DIM3 = size(thickness) DIM4 = size(radius) DIM5 = size(sw_angle)

So if I swept 100 wavelength points, 1 width, 10 possible thicknesses, 5 radii, and 2 sw_angles, then the dimension of each output effective index (or higher order derivative) would be: (100,1,10,5,2).

Parameters:
  • wavelength (float or ndarray (W1,)) – Wavelength points to evaluate
  • width (float or ndarray (W2,)) – Width of the waveguides in microns
  • thickness (float or ndarray (T,)) – Thickness of the waveguides in microns
  • radius (float or ndarray (R,)) – Radius of waveguide in microns.
  • sw_angle (float or ndarray (A,)) – Sidewall angle from horizontal in degrees, ie 90 makes a square. Defaults to 90.
  • derivative (int) – Order of the derivative to take. Defaults to None.
Returns:

TE0 – First TE effective index with size (W1,W2,T,R,A,), or if derivative’s are included (W1,W2,T,R,A,5,)

Return type:

ndarray

Bent Waveguide Scattering Parameters

SiPANN.nn.bentWaveguide_S(wavelength, width, thickness, radius, angle, sw_angle=90)

Calculates the analytic scattering matrix of bent waveguide with specific radius and circle length.

Parameters:
  • wavelength (ndarray (N,)) – Wavelength points to evaluate
  • width (float) – Width of the waveguides in microns
  • thickness (float) – Thickness of the waveguides in microns
  • radius (float) – Radius of waveguide in microns.
  • angle (float) – Number of radians of circle that bent waveguide transverses
  • sw_angle (float) – Sidewall angle from horizontal in degrees, ie 90 makes a square. Defaults to 90.
Returns:

S – Scattering matrix for each wavelength

Return type:

ndarray (N,2,2)

Evanescent Waveguide Coupler Model

Evanescent Waveguide Coupler Effective Indices

SiPANN.nn.evWGcoupler(wavelength, width, thickness, gap, sw_angle=90, derivative=None)

Calculates the even and odd effective indice values of the TE mode of parallel waveguides. Can also calculate derivatives with respect to any of the inputs. This is especially useful for calculating the group index, or running gradient based optimization routines.

Each of the inputs can either be a one dimensional numpy array or a scalar. This is especially useful if you want to sweep over multiple parameters and include all of the possible permutations of the sweeps.

The output is a multidimensional array. The size of each dimension corresponds with the size of each of the inputs, such that DIM1 = size(wavelength) DIM2 = size(width) DIM3 = size(thickness) DIM4 = size(gap) DIM5 = size(sw_angle)

So if I swept 100 wavelength points, 1 width, 10 possible thicknesses, 5 radii, and 2 sw_angles, then the dimension of each output effective index (or higher order derivative) would be: (100,1,10,5,2).

Parameters:
  • wavelength (float or ndarray (W1,)) – Wavelength points to evaluate
  • width (float or ndarray (W2,)) – Width of the waveguides in microns
  • thickness (float or ndarray (T,)) – Thickness of the waveguides in microns
  • gap (float or ndarray (G,)) – Gap distance between waveguides
  • sw_angle (float or ndarray (A,)) – Sidewall angle from horizontal in degrees, ie 90 makes a square. Defaults to 90.
  • derivative (int) – Order of the derivative to take. Defaults to None.
Returns:

TE0 – First TE effective index with size (W1,W2,T,G,A,), or if derivative’s are included (W1,W2,T,G,A,5,)

Return type:

ndarray

Evanescent Waveguide Coupler Scattering Parameters

SiPANN.nn.evWGcoupler_S(wavelength, width, thickness, gap, couplerLength, sw_angle=90)

Calculates the analytic scattering matrix of a simple, parallel waveguide directional coupler using the ANN.

Parameters:
  • wavelength (ndarray (N,)) – Wavelength points to evaluate
  • width (float) – Width of the waveguides in microns
  • thickness (float) – Thickness of the waveguides in microns
  • gap (float) – gap in the coupler region in microns
  • couplerLength (float) – Length of the coupling region in microns
Returns:

S – Scattering matrix

Return type:

ndarray (N,4,4)

Racetrack Resonator Models

Racetrack Resonator Model 1

SiPANN.nn.racetrack_AP_RR(wavelength, radius=5, couplerLength=5, gap=0.2, width=0.5, thickness=0.2)

This particular transfer function assumes that the coupling sides of the ring resonator are straight, and the other two sides are curved. Therefore, the roundtrip length of the RR is 2*pi*radius + 2*couplerLength.

We assume that the round parts of the ring have negligble coupling compared to the straight sections.

Parameters:
  • wavelength (ndarray (N,)) – Wavelength points to evaluate
  • radius (float) – Radius of the sides in microns
  • couplerLength (float) – Length of the coupling region in microns
  • gap (float) – Gap in the coupler region in microns
  • width (float) – Width of the waveguides in microns
  • thickness (float) – Thickness of the waveguides in microns
Returns:

S – Scattering matrix

Return type:

ndarray (N,4,4)

Racetrack Resonator Model 2

SiPANN.nn.racetrack_AP_RR_TF(wavelength, sw_angle=90, radius=12, couplerLength=4.5, gap=0.2, width=0.5, thickness=0.2, widthCoupler=0.5, loss=[0.99], coupling=[0])

This particular transfer function assumes that the coupling sides of the ring resonator are straight, and the other two sides are curved. Therefore, the roundtrip length of the RR is 2*pi*radius + 2*couplerLength. This model also includes loss. (??? Need Verification on last line)

We assume that the round parts of the ring have negligble coupling compared to the straight sections.

Parameters:
  • wavelength (ndarray (N,)) – Wavelength points to evaluate
  • radius (float) – Radius of the sides in microns
  • couplerLength (float) – Length of the coupling region in microns
  • gap (float) – Gap in the coupler region in microns
  • width (float) – Width of the waveguides in microns
  • thickness (float) – Thickness of the waveguides in microns
Returns:

  • E (ndarray) – Complex array of size (N,)
  • alpha (ndarray) – Array of size (N,)
  • t (ndarray) – Array of size (N,)
  • alpha_s (ndarray) – Array of size (N,)
  • phi (ndarray) – Array of size (N,)

Racetrack Resonator Model 3

SiPANN.nn.rectangularRR(wavelength, radius=5, couplerLength=5, sideLength=5, gap=0.2, width=0.5, thickness=0.2)

This particular transfer function assumes that all four sides of the ring resonator are straight and that the corners are rounded. Therefore, the roundtrip length of the RR is 2*pi*radius + 2*couplerLength + 2*sideLength.

We assume that the round parts of the ring have negligble coupling compared to the straight sections.

Parameters:
  • wavelength (ndarray (N,)) – Wavelength points to evaluate
  • radius (float) – Radius of the sides in microns
  • couplerLength (float) – Length of the coupling region in microns
  • sideLength (float) – Length of each side not coupling in microns
  • gap (float) – Gap in the coupler region in microns
  • width (float) – Width of the waveguides in microns
  • thickness (float) – Thickness of the waveguides in microns
Returns:

S – Scattering matrix

Return type:

ndarray (N,4,4)