ElectroOpticalSimulator

The ElectroOpticalSimulator is meant to be some sort of calculator that makes our life easy when considering overlap integrals. The current implementation is meant to replicate the coupled mode theory as in [1]. For a given electrical field of the form:

\[\textbf{E}(\textbf{r}) = \sum_\nu A_\nu (z) \mathbf{\hat{\mathcal{E}}}(x,y) e^{i\beta_\nu z}\]

we now consider a perturbation in the permitivity tensor of, \(\Delta \bar{\mathbf{\epsilon}} (V,x,y)\). We can then formulate a set of coupled mode equations of the form:

\[\pm \frac{d A(z)}{dz} = \sum_\mu i \kappa _{\nu \mu}A_\mu e^{i(\beta_\mu - \beta_\nu)}\]

where:

\[\kappa_{\nu \mu} (V) = \omega \int_{-\infty}^{+\infty} \int_{-\infty}^{+\infty} \hat{\mathcal{E}}_\nu^* \cdot \Delta \bar{\mathbf{\epsilon}} (V,x,y) \cdot \hat{\mathcal{E}}_\mu dxdy\]

With this \(\kappa_{\nu \mu}\) we can now retrieve not only the self mode coupling, which translates into a phase and/or amplitude modulation (\(\Delta \beta_\nu = \kappa_{\nu\nu}\)), but we can also study off diagonal contributions of optical modes that are not purely TE and TM. In fact, we can go a step further and just rotate our permitivity tensor so as to study the influence on the performance of the device by simply considering:

\[\Delta \bar{\mathbf{\epsilon}} (V,x,y) \to R^{-1}(\theta_x, \theta_y, \theta_z)\Delta \bar{\mathbf{\epsilon}} (V,x,y)R(\theta_x, \theta_y, \theta_z)\]

where \(R^{-1}(\theta_x, \theta_y, \theta_z)\) is a generic cartesian rotation matrix.

Note

This package follows the theory of [1] which will be useful for the majority of the cases. However, we do wonder about the limitations of the treatment there. Could you help us? In particular we are left with the questions:

  1. The theoretical treatment assumes that the mode fields can be normalized by following an orthonormality relation:
    \[\iint_{-\infty}^{\infty} \left( \hat{\mathcal{E}}_{\nu} \times \hat{\mathcal{H}}_{\mu}^* + \hat{\mathcal{E}}_{\mu}^* \times \hat{\mathcal{H}}_{\nu} \right) \cdot \hat{z}\, dx\, dy = \pm \delta_{\nu\mu},\]

    Will this hold for waveguides with loss as is the general case for doped semiconductor structures?

  2. The coupled mode theory above does not account for lossy modes. Would that change the \(\kappa_{\nu \mu}\) calculation?

  3. In a lossless waveguide and in the absence of electro-absorption we will have \(\Delta \epsilon_{ij}=\Delta \epsilon_{ji}^*\). This is hardly the case in semiconductor structures. Will this jeopardize our calculations? How can we fix this?

class imodulator.ElectroOpticalSimulator.ElectroOpticalSimulator(device, simulation_window=None)
__init__(device, simulation_window=None)

Initializes the ElectroOpticalSimulator with a PhotonicDevice and an optional simulation window.

The simulation windows will define the electro optical simulation region.

Parameters:
  • device (PhotonicDevice) – The photonic device to simulate.

  • simulation_window (Polygon, optional) – The polygon defining the simulation region. If None, the entire device is used.

calculate_EO_response(voltage_idx, rot_x=0, rot_y=0, rot_z=0, base_epsilon_voltage_idx=0, optical_mode_a='TE', optical_mode_b='TM', wavelength=1.55)

This function calculates the electro optical response of the device. It calculates the change in propagation constant due to the electro optical effects.

Mathematically, it follows the integrand used for two-mode coupling:

\[\begin{split}\pm \frac{d}{dz} \begin{pmatrix} A \\[4pt] B \end{pmatrix} = i \begin{pmatrix} \kappa_{aa} & \kappa_{ab} e^{i(\beta_b - \beta_a)z} \\[6pt] \kappa_{ba} e^{i(\beta_a - \beta_b)z} & \kappa_{bb} \end{pmatrix} \begin{pmatrix} A \\[4pt] B \end{pmatrix}\end{split}\]

It returns \(\kappa_{ab}(V)\) for all the electro optical effects present in the device.

The output will follow the same structure as the epsilon_optical dictionary, that is:

results = {
    ElectroOpticalModelName: {
        'results': np.zeros((N_effects), dtype=np.complex128),
        'labels': [label1, label2, ...]
    },
    ElectroOpticalModelName2: {
        'results': np.zeros((N_effects), dtype=np.complex128),
        'labels': [label1, label2, ...]
    }
}
Parameters:
  • voltage_idx (int) – The index of the voltage to use for the electro optical effects.

  • rot_x (float) – The rotation around the x-axis in radians.

  • rot_y (float) – The rotation around the y-axis in radians.

  • rot_z (float) – The rotation around the z-axis in radians.

  • base_epsilon_voltage_idx (int) – The index of the voltage to use as the base epsilon optical.

  • optical_mode_a (str) – The optical mode to use for the electro optical effects. Default is ‘TE’.

  • optical_mode_b (str) – The optical mode to use for the electro optical effects. Default is ‘TE’.

  • wavelength (float) – The wavelength of the optical mode in micrometers. Default is 1.55 micrometers.

Returns:

A dictionary containing the results of the electro optical effects. The keys are the names of the electro optical models and the values are dictionaries with the results and labels.

Return type:

dict

get_epsilon_optical()

This function will calculate the CHANGE in epsilon optical due to the electro optical effects.

By default, it will return all the contributors for the change in refractive index and corresponding labels. The output will follow this structure:

epsilon_optical = {
ElectroOpticalModelName: {

‘dperms’: np.zeros((3, 3, self.mesh.nvertices, N_bias_points, n_effects), dtype=np.complex128), ‘labels’: [label1, label2, …]

},

ElectroOpticalModelName2: {

‘dperms’: np.zeros((3, 3, self.mesh.nvertices, N_bias_points, n_effects), dtype=np.complex128), ‘labels’: [label1, label2, …]

}

Parameters:

None

Returns:

None

make_mesh(default_resolution_min=1e-12, default_resolution_max=100, filename=None, gmsh_algorithm=5, global_quad=False, verbose=False, mesh_scaling_factor=1.0)

Returns a gmsh msh with physicals corresponding to the self.entities

plot_mesh(plot_polygons=True)

Plots the mesh

plot_polygons(color_polygon='black', color_line='green', color_junctions='blue', fig=None, ax=None)

plots all the polygons and boundaries

References

[1] (1,2)

Jia-ming Liu. Photonic Devices. Cambridge University Press, Cambridge, 2009. ISBN 978-0-511-08152-1. OCLC: 936894045.