Photonic Polygons

A PhotonicPolygon is a dataclass object that is meant to work as a subdomain for a PhotonicDevice, meaning that it should hold all the information about a single part of your photonic device. In particular it should hold the information about:

  • The geometry of the polygon, which need not be a rectangle.

  • The material properties of the polygon, including the optical and the RF relative electrical permitivity;

  • The various mesh settings for optical, RF, charge transport and electro-optical calculations;

  • Additional charge transport and optical simulator arguments.

This is a list of the PhotonicPolygon classes available in the imodulator package.

class imodulator.PhotonicPolygon.SemiconductorPolygon(polygon, name=<factory>, optical_material=(1+0j), rf_eps=1, electro_optic_module=None, electro_optic_module_kwargs=<factory>, calculate_current=False, d_buffer_current=0.1, charge_mesh_settings=<factory>, eo_mesh_settings=<factory>, rf_mesh_settings=<factory>, optical_mesh_settings=<factory>, charge_transport_simulator_kwargs=<factory>, has_charge_transport_data=False)

Base class for a polygon with semiconductor properties.

polygon

The polygon geometry. It must be a shapely object, either a Polygon or a MultiPolygon.

Type:

Polygon | Multipolygon

name

The name of the polygon. If not provided, a unique ID will be generated.

Type:

str | None

optical_material

The optical material properties of the polygon. This will be deprecated in the future.

Type:

str | complex

rf_eps

The relative permittivity of the polygon. Material information for RF simulations if charge transport simulation. Internally, it will be converted to a callable function of the type f(omega). If you input a float, then it is constant for all frequencies, and if you give it a np.array of shape (2,N) then it will interpolate to give a callable of the same signature. Note that the charge transport data will only be used to retrieve the conductivity values. You must always insert the real part of the permitivity. Otherwise it will consider it 1.

Type:

float | complex | int | np.ndarray | list

electro_optic_module

The electro-optic module associated with the polygon. This is the model that will later be used by ElectroOpticalSimulator to calculate the electro-optic effect.

Type:

None | ElectroOpticalModel

electro_optic_module_kwargs

The keyword arguments for the electro-optic module.

Type:

dict

calculate_current

A flag to indicate whether to calculate current.

Type:

bool

d_buffer_current

The buffer distance for current calculation. The current is calculated with a line integral around the object. This parameter sets the distance from the object where the line integral is calculated. The default value is 0.1 micrometers.

Type:

bool

eo_mesh_settings

The mesh settings for electro-optic simulations. It is a dictionary with the following keys:

  • SizeMax (float): the maximum size of the mesh at a distance from the object;

  • resolution (float): the maximum size of the mesh inside the polygon;

  • distance (float): the distance from the object where the mesh size is SizeMax;

  • distance_junction (float): If there is a boundary of the type Semiconductor-Semiconductor, Semiconductor-Insulator a new polygon can be automatically inserted that captures the junction. This new polygon is inserted only in the direction of the semiconductor. distance_junction controls how deep into the semiconductor it goes;

  • resolution_junction (float): the maximum size of the mesh inside the junction;

Warning

The algorithm to search for junctions is not active at the moment. It is a feature that will be implemented in the future.

Type:

dict[str, float]

rf_mesh_settings

The mesh settings for RF simulations. It is a dictionary with the same keys as eo_mesh_settings.

Type:

dict[str, float]

optical_mesh_settings

The mesh settings for optical simulations. It is a dictionary with the same keys as eo_mesh_settings.

Type:

dict[str, float]

charge_transport_simulator_kwargs

Additional keyword arguments for the charge transport simulator. charge_transport_simulator_kwargs;

“material_definition”:None, If not defined, default is “Ga(x)In(1-x)As(y)P(1-y)” should be available in Nextnano “doping_conc”: None, “doping_type”: None, “alloy_y”: None, “alloy_x”:None,

Type:

dict | None

class imodulator.PhotonicPolygon.MetalPolygon(polygon, name=None, optical_material=(1+0j), calculate_current=True, d_buffer_current=0.1, rf_eps=1, charge_mesh_settings=<factory>, eo_mesh_settings=<factory>, rf_mesh_settings=<factory>, optical_mesh_settings=<factory>)

Initialize a MetalPolygon object with the specified parameters. All the input spatial dimensions are assumed to be in micrometers, and the frequencies are in GHz.

polygon

The polygon geometry. It must be a shapely object, either a Polygon or a MultiPolygon.

Type:

Polygon | MultiPolygon

name

The name of the polygon. If not provided, a unique ID will be generated.

Type:

str, optional

optical_material

The optical material properties of the polygon. This will be deprecated in the future.

Type:

str or complex

rf_eps

The relative permittivity of the polygon. Material information for RF simulations if charge transport simulation. Internally, it will be converted to a callable function of the type f(omega). If you input a float, then it is constant for all frequencies, and if you give it a np.array of shape (2,N) then it will interpolate to give a callable of the same signature.

Type:

float, complex, int, or np.ndarray

calculate_current

A flag to indicate whether to calculate current.

Type:

bool

d_buffer_current

The buffer distance for current calculation. The current is calculated with a line integral around the object. This parameter sets the distance from the object where the line integral is calculated.

Type:

float

eo_mesh_settings

The mesh settings for electro-optic simulations. It is a dictionary with the following keys:

  • SizeMax (float): the maximum size of the mesh at a distance from the object;

  • resolution (float): the maximum size of the mesh inside the polygon;

  • distance (float): the distance from the object where the mesh size is SizeMax;

  • distance_junction (float): If there is a boundary of the type Semiconductor-Semiconductor, Semiconductor-Insulator a new polygon can be automatically inserted that captures the junction. This new polygon is inserted only in the direction of the semiconductor. distance_junction controls how deep into the semiconductor it goes;

  • resolution_junction (float): the maximum size of the mesh inside the junction;

Warning

The algorithm to search for junctions is not active at the moment. It is a feature that will be implemented in the future.

Type:

dict[str, float]

rf_mesh_settings

The mesh settings for RF simulations. It is a dictionary with the same keys as eo_mesh_settings.

Type:

dict[str, float]

optical_mesh_settings

The mesh settings for optical simulations. It is a dictionary with the same keys as eo_mesh_settings.

Type:

dict[str, float]

charge_transport_simulator_kwargs

You don’t input metals into charge transport simulation; the simulation line defines the boundaries.

Type:

dict, optional

class imodulator.PhotonicPolygon.InsulatorPolygon(polygon, name=<factory>, optical_material=(1+0j), rf_eps=1, electro_optic_module=None, charge_mesh_settings=<factory>, eo_mesh_settings=<factory>, rf_mesh_settings=<factory>, optical_mesh_settings=<factory>, charge_transport_simulator_kwargs=None, calculate_current=False, d_buffer_current=False)

Initialize an InsulatorPolygon object with the specified parameters. All the input spatial dimensions are assumed to be in micrometers, and the frequencies are in GHz.

polygon

The polygon geometry. It must be a shapely object, either a Polygon or a MultiPolygon.

Type:

Polygon | MultiPolygon

name

The name of the polygon. If not provided, a unique ID will be generated.

Type:

str, optional

optical_material

The optical material properties of the polygon. This will be deprecated in the future.

Type:

str or complex

rf_eps

The relative permittivity of the polygon. Material information for RF simulations if charge transport simulation. Internally, it will be converted to a callable function of the type f(omega). If you input a float, then it is constant for all frequencies, and if you give it a np.array of shape (2,N) then it will interpolate to give a callable of the same signature.

Type:

float, complex, int, or np.ndarray

electro_optic_module

The electro-optic module associated with the polygon.

Type:

None

eo_mesh_settings

The mesh settings for electro-optic simulations. It is a dictionary with the following keys:

  • SizeMax (float): the maximum size of the mesh at a distance from the object;

  • resolution (float): the maximum size of the mesh inside the polygon;

  • distance (float): the distance from the object where the mesh size is SizeMax;

  • distance_junction (float): If there is a boundary of the type Semiconductor-Semiconductor, Semiconductor-Insulator a new polygon can be automatically inserted that captures the junction. This new polygon is inserted only in the direction of the semiconductor. distance_junction controls how deep into the semiconductor it goes;

  • resolution_junction (float): the maximum size of the mesh inside the junction;

Warning

The algorithm to search for junctions is not active at the moment. It is a feature that will be implemented in the future.

Type:

dict[str, float]

rf_mesh_settings

The mesh settings for RF simulations. It is a dictionary with the same keys as eo_mesh_settings.

Type:

dict[str, float]

optical_mesh_settings

The mesh settings for optical simulations. It is a dictionary with the same keys as eo_mesh_settings.

Type:

dict[str, float]

charge_transport_simulator_kwargs

Additional keyword arguments for the charge transport simulator.

Type:

dict, optional

calculate_current

Flag to indicate whether to calculate current.

Type:

bool

d_buffer_current

Buffer distance for current calculation.

Type:

bool