tidy3d.rf.MicrowaveModeSpec#
- class MicrowaveModeSpec[source]#
Bases:
AbstractModeSpec,MicrowaveBaseModelSpecification for transmission line modes and microwave waveguides.
- Parameters:
num_modes (Union[PositiveInt, Literal['auto']] = 1) – Number of modes returned by mode solver. Use ‘auto’ to infer from impedance_specs length (if tuple) or detected from the number of isolated conductors assuming quasi-TEM modes (if AutoImpedanceSpec).
target_neff (Optional[PositiveFloat] = None) – Guess for effective index of the mode.
num_pml (tuple[NonNegativeInt, NonNegativeInt] = (0, 0)) – Number of standard pml layers to add in the two tangential axes.
filter_pol (Optional[Literal['te', 'tm']] = None) – The solver always computes the
num_modesmodes closest to the giventarget_neff. Iffilter_pol==None, they are simply sorted in order of decreasing effective index. If a polarization filter is selected, the modes are rearranged such that the firstn_polmodes in the list are the ones with the selected polarization fraction larger than or equal to 0.5, while the nextnum_modes - n_polmodes are the ones where it is smaller than 0.5 (i.e. the opposite polarization fraction is larger than 0.5). Within each polarization subset, the modes are still ordered by decreasing effective index.te-fraction is defined as the integrated intensity of the E-field component parallel to the first plane axis, normalized to the total in-plane E-field intensity. Conversely,tm-fraction uses the E field component parallel to the second plane axis.angle_theta (float = 0.0) – [units = rad]. Polar angle of the propagation axis from the injection axis.
angle_phi (float = 0.0) – [units = rad]. Azimuth angle of the propagation axis in the plane orthogonal to the injection axis.
precision (Literal['auto', 'single', 'double'] = double) – The solver will be faster and using less memory under single precision, but more accurate under double precision. Choose
'auto'to apply double precision if the simulation contains a good conductor, single precision otherwise.bend_radius (Optional[float] = None) – [units = um]. A curvature radius for simulation of waveguide bends. Can be negative, in which case the mode plane center has a smaller value than the curvature center along the tangential axis perpendicular to the bend axis.
bend_axis (Optional[Literal[0, 1]] = None) – Index into the two tangential axes defining the normal to the plane in which the bend lies. This must be provided if
bend_radiusis notNone. For example, for a ring in the global xy-plane, and a mode plane in either the xz or the yz plane, thebend_axisis always 1 (the global z axis).angle_rotation (bool = False) – Defines how modes are computed when
angle_thetais not zero. IfFalse, a coordinate transformation is applied through the permittivity and permeability tensors.IfTrue, the structures in the simulation are first rotated to compute a mode solution at a reference plane normal to the structure’s azimuthal direction. Then, the fields are rotated to align with the mode plane, using then_effcalculated at the reference plane. The second option can produce more accurate results, but more care must be taken, for example, in ensuring that the original mode plane intersects the correct geometries in the simulation with rotated structures. Note: currently only supported whenangle_phiis a multiple ofnp.pi.track_freq (Optional[Literal['central', 'lowest', 'highest']] = None) – Deprecated. Use ‘sort_spec.track_freq’ instead.
group_index_step (Union[PositiveFloat, bool] = False) – Control the computation of the group index alongside the effective index. If set to a positive value, it sets the fractional frequency step used in the numerical differentiation of the effective index to compute the group index. If set to True, the default of 0.005 is used.
sort_spec (
ModeSortSpec= ModeSortSpec()) – Defines how to filter and sort modes within each frequency. Iftrack_freqis notNone, the sorting is only exact at the specified frequency, while at other frequencies it can change depending on the mode tracking.interp_spec (Optional[
ModeInterpSpec] = None) – Specification for computing modes at a reduced set of frequencies and interpolating to obtain results at all requested frequencies. This can significantly reduce computational cost for broadband simulations where modes vary smoothly with frequency. Requires frequency tracking to be enabled (sort_spec.track_freqmust not beNone) to ensure consistent mode ordering across frequencies.impedance_specs (Union[Union[
AutoImpedanceSpec,CustomImpedanceSpec], tuple[Optional[Union[AutoImpedanceSpec,CustomImpedanceSpec]], …]] = AutoImpedanceSpec()) – Field controls how the impedance is calculated for each mode calculated by the mode solver. Can be a single impedance specification (which will be applied to all modes) or a tuple of specifications (one per mode). The number of impedance specifications should match the number of modes field. When an impedance specification ofNoneis used, the impedance calculation will be ignored for the associated mode.tem_polarization_threshold (float = 0.995) – Threshold for classifying modes as TEM, TE, or TM based on mean TE/TM fraction across frequencies. A mode is classified as TEM if both mean TE and TM fractions are greater than or equal to this threshold. Similarly, a mode is classified as TE (or TM) if the mean TE (or TM) fraction is greater than or equal to this threshold.
qtem_polarization_threshold (float = 0.95) – Threshold for classifying modes as quasi-TEM based on TE/TM fraction at the lowest frequency. A mode is classified as quasi-TEM if both TE and TM fractions at the lowest frequency are greater than or equal to this threshold.
Notes
The
MicrowaveModeSpecclass specifies how quantities related to transmission line modes and microwave waveguides are computed. For example, it defines the paths for line integrals, which are used to compute voltage, current, and characteristic impedance of the transmission line.Example
>>> import tidy3d as td >>> # Using automatic impedance calculation (single spec, will be duplicated for all modes) >>> mode_spec_auto = td.MicrowaveModeSpec( ... num_modes=2, ... impedance_specs=td.AutoImpedanceSpec() ... ) >>> # Using custom impedance specification for multiple modes >>> voltage_spec = td.AxisAlignedVoltageIntegralSpec( ... center=(0, 0, 0), size=(0, 0, 1), sign="+" ... ) >>> current_spec = td.AxisAlignedCurrentIntegralSpec( ... center=(0, 0, 0), size=(2, 1, 0), sign="+" ... ) >>> custom_impedance = td.CustomImpedanceSpec( ... voltage_spec=voltage_spec, current_spec=current_spec ... ) >>> mode_spec_custom = td.MicrowaveModeSpec( ... num_modes=1, ... impedance_specs=custom_impedance ... ) >>> # Using num_modes='auto' with a tuple of specs >>> mode_spec_auto_tuple = td.MicrowaveModeSpec( ... num_modes="auto", ... impedance_specs=(custom_impedance, custom_impedance) ... )
Attributes
target_neffnum_pmlfilter_polangle_thetaangle_phiprecisionbend_radiusbend_axisangle_rotationtrack_freqgroup_index_stepsort_specinterp_specMethods
Check impedance specs consistency with num_modes.
- num_modes#
- impedance_specs#
- tem_polarization_threshold#
- qtem_polarization_threshold#
- check_impedance_specs_consistent_with_num_modes()[source]#
Check impedance specs consistency with num_modes.
Validates that: 1. num_modes=’auto’ with tuple 2. num_modes=’auto’ with single spec: must be AutoImpedanceSpec 3. num_modes=int with tuple: length must match 4. num_modes=int with single spec: allowed (applied to all modes)