Source code for tidy3d.plugins.smatrix.ports.base_terminal
"""Class and custom data array for representing a scattering-matrix port, which is defined by a pair of terminals."""fromabcimportABC,abstractmethodimportpydantic.v1aspdfrom....components.baseimportTidy3dBaseModel,cached_propertyfrom....components.data.data_arrayimportDataArray,FreqDataArrayfrom....components.data.sim_dataimportSimulationDatafrom....components.grid.gridimportGridfrom....components.monitorimportFieldMonitorfrom....components.source.baseimportSourcefrom....components.source.timeimportGaussianPulsefrom....components.typesimportFreqArray
[docs]classTerminalPortDataArray(DataArray):"""Port parameter matrix elements for terminal-based ports. Example ------- >>> import numpy as np >>> ports_in = ['port1', 'port2'] >>> ports_out = ['port1', 'port2'] >>> f = [2e14] >>> coords = dict( ... f=f, ... port_out=ports_out, ... port_in=ports_in, ... ) >>> fd = TerminalPortDataArray((1 + 1j) * np.random.random((1, 2, 2)), coords=coords) """__slots__=()_dims=("f","port_out","port_in")_data_attrs={"long_name":"terminal-based port matrix element"}
classAbstractTerminalPort(Tidy3dBaseModel,ABC):"""Class representing a single terminal-based port. All terminal ports must provide methods for computing voltage and current. These quantities represent the voltage between the terminals, and the current flowing from one terminal into the other. """name:str=pd.Field(...,title="Name",description="Unique name for the port.",min_length=1,)@cached_property@abstractmethoddefinjection_axis(self):"""Injection axis of the port."""@abstractmethoddefto_source(self,source_time:GaussianPulse,snap_center:float=None,grid:Grid=None)->Source:"""Create a current source from a terminal-based port."""@abstractmethoddefto_field_monitors(self,freqs:FreqArray,snap_center:float=None,grid:Grid=None)->list[FieldMonitor]:"""Field monitors to compute port voltage and current."""@abstractmethoddefcompute_voltage(self,sim_data:SimulationData)->FreqDataArray:"""Helper to compute voltage across the port."""@abstractmethoddefcompute_current(self,sim_data:SimulationData)->FreqDataArray:"""Helper to compute current flowing into the port."""