How do I compute scattering matrix parameters for modeling my device?

How do I compute scattering matrix parameters for modeling my device?#



2023-12-20 16:57:31

Scattering Matrix

To compute scattering matrix parameters, you need to create a base tidy3d.Simulation (without the modal sources or monitors used to compute S-parameters) and include tidy3d.plugins.smatrix.Port objects. These ports will be converted into modal sources and monitors later, so they require a mode specification and a definition of the direction that points into the system. You should also give them names to refer to later. For example:

from tidy3d.plugins.smatrix.smatrix import Port

num_modes = 1

# Port definition.
port_right_top = Port(
  center=[-5, 3, 0],
  size=[0, 4, 2],

Next, add the base simulation and ports to the tidy3d.plugins.smatrix.ComponentModeler, along with the frequency of interest and a name for saving the batch of simulations that will get created later.

from tidy3d.plugins.smatrix.smatrix import ComponentModeler

modeler = ComponentModeler(


With the component modeler defined, you should call it’s .solve() method to run a batch of simulations to compute the S matrix. The tool will loop through each port and create one simulation per mode index (as defined by the mode specifications), where a unique modal source is injected. Each of the ports will also be converted to mode monitors to measure the mode amplitudes and normalization.

from tidy3d.plugins.smatrix.smatrix import Port

smatrix ="data")

The scattering matrix returned by the solve is an xr.DataArray relating the port names and mode indices. For example smatrix.loc[dict(port_in=name1, mode_index_in=mode_index1, port_out=name2, mode_index_out=mode_index_2)] gives the complex scattering matrix element.

See this tutorial for more details on computing the scattering matrix.