Wave Ports
WavePort represents a modal
source port for RF and microwave simulations. The port mode is first solved in a
2D mode solver with characteristic impedance calculation, then injected into the
3D simulation. The port is automatically terminated with a modal absorbing
boundary for the outgoing mode.
Basic Usage
Section titled “Basic Usage”from flex_rf.tidy3d import AutoImpedanceSpec, MicrowaveModeSpec, WavePort
my_wave_port_1 = WavePort( center=(0, 0, 0), size=(port_width, port_height, 0), name="My Wave Port 1", direction="+", mode_spec=MicrowaveModeSpec( num_modes=1, target_neff=1.5, impedance_specs=AutoImpedanceSpec(), ),)mode_spec controls the mode solver settings and impedance calculation. Use
AutoImpedanceSpec for
automatic voltage and current path setup, or
CustomImpedanceSpec
for manual control.
Multimode Ports
Section titled “Multimode Ports”Wave ports can solve and inject multiple modes, which is useful for multimode waveguides and transmission lines.
from flex_rf.tidy3d import AutoImpedanceSpec, MicrowaveModeSpec, WavePort
multimode_port = WavePort( center=(0, 0, 0), size=(4, 4, 0), direction="+", mode_spec=MicrowaveModeSpec( num_modes=3, impedance_specs=AutoImpedanceSpec(), ), name="multimode_port",)When creating sources from a multimode port, specify the mode index.
from flex_rf.tidy3d import GaussianPulse
source_time = GaussianPulse(freq0=10e9, fwidth=1e9)
source_mode0 = multimode_port.to_source(source_time, mode_index=0)source_mode1 = multimode_port.to_source(source_time, mode_index=1)source_mode2 = multimode_port.to_source(source_time, mode_index=2)You can also provide different impedance calculations for each mode.
from flex_rf.tidy3d import AutoImpedanceSpec, CustomImpedanceSpec, MicrowaveModeSpec
mode_spec = MicrowaveModeSpec( num_modes=2, impedance_specs=( CustomImpedanceSpec(...), AutoImpedanceSpec(), ),)Standalone Mode Solver
Section titled “Standalone Mode Solver”Use to_mode_solver() to solve the 2D port mode without a full 3D simulation.
from flex_rf import web
my_mode_solver = my_wave_port_1.to_mode_solver( simulation=base_sim, freqs=my_frequencies,)
my_mode_data = web.run(my_mode_solver, task_name="mode solver")The result is
MicrowaveModeSolverData
with mode fields and transmission-line parameters.
Transmission-Line Data
Section titled “Transmission-Line Data”After running a component model with a wave port, access characteristic impedance and voltage/current coefficients from the mode data.
mode_data = tcm_data.data["port1"]["mode_monitor"]
z0_mode0 = mode_data.transmission_line_data.Z0.sel(mode_index=0)voltage_coeff = mode_data.transmission_line_data.voltage_coeffs.sel(mode_index=0)current_coeff = mode_data.transmission_line_data.current_coeffs.sel(mode_index=0)You can also use the port helper.
z0 = my_wave_port_1.get_port_impedance(mode_data, mode_index=0)Terminal Wave Ports
Section titled “Terminal Wave Ports”TerminalWavePort is a
terminal-driven wave port that supports single-ended and differential terminal
excitations.
from flex_rf.tidy3d import TerminalWavePort
my_terminal_wave_port = TerminalWavePort( center=(0, 0, 0), size=(4, 4, 0), name="My Terminal Wave Port", direction="+", differential_pairs=(("T0", "T1"),),)Related Pages
Section titled “Related Pages”| Page | Why open it |
|---|---|
| RF Mode Analysis | Configure microwave mode specs and impedance extraction. |
| Path Integrals | Define manual voltage and current paths. |
| Terminal Component Modeler | Use wave ports in multiport component workflows. |