tidy3d.PlaneWave#

class PlaneWave[source]#

Bases: AngledFieldSource, PlanarSource, BroadbandSource

Uniform current distribution on an infinite extent plane. One element of size must be zero.

Parameters:
  • name (Optional[str] = None) – Optional name for the source.

  • center (Optional[tuple[Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box]]] = None) – [units = um]. Center of object in x, y, and z.

  • size (tuple[Union[NonNegativeFloat, autograd.tracer.Box], Union[NonNegativeFloat, autograd.tracer.Box], Union[NonNegativeFloat, autograd.tracer.Box]]) – [units = um]. Size in x, y, and z directions.

  • source_time (Union[GaussianPulse, ContinuousWave, CustomSourceTime, BroadbandPulse, BasebandStep, BasebandGaussianPulse, BasebandRectangularPulse, BasebandCustomSourceTime]) – Specification of the source time-dependence.

  • num_freqs (int = 3) – Number of points used to approximate the frequency dependence of the injected field. Default is 3, which should cover even very broadband plane waves. For simulations which are not very broadband and the source is very large (e.g. metalens simulations), decreasing the value to 1 may lead to a speed up in the preprocessing.

  • broadband_method (Literal['chebyshev'] = chebyshev) – PlaneWave only supports the Chebyshev broadband method.

  • use_colocated_integration (bool = True) – If True (default), source power normalization uses fields interpolated to grid cell boundaries (colocated). If False, uses fields at native Yee grid positions (non-colocated). Should match the use_colocated_integration setting on monitors for consistent power normalization. Experimental feature that can give improved accuracy by avoiding interpolation of fields to Yee cell positions for integration.

  • direction (Literal['+', '-']) – Specifies propagation in the positive or negative direction of the injection 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.

  • pol_angle (float = 0) – [units = rad]. Specifies the angle between the electric field polarization of the source and the plane defined by the injection axis and the propagation axis (rad). pol_angle=0 (default) specifies P polarization, while pol_angle=np.pi/2 specifies S polarization. At normal incidence when S and P are undefined, pol_angle=0 defines: - Ey polarization for propagation along x.- Ex polarization for propagation along y.- Ex polarization for propagation along z.

  • angular_spec (Union[FixedInPlaneKSpec, FixedAngleSpec] = FixedInPlaneKSpec()) – Specification of plane wave propagation direction dependence on wavelength.

Notes

For oblique incidence, there are two possible settings: fixed in-plane k-vector and fixed-angle mode. The first requires Bloch periodic boundary conditions, and the incidence angle is exact only at the central wavelength. The latter requires periodic boundary conditions and maintains a constant propagation angle over a broadband spectrum. For more information and important notes, see this example: Broadband PlaneWave With Constant Oblique Incident Angle.

Example

>>> from tidy3d import GaussianPulse
>>> pulse = GaussianPulse(freq0=200e12, fwidth=20e12)
>>> pw_source = PlaneWave(size=(inf,0,inf), source_time=pulse, pol_angle=0.1, direction='+')

Attributes

frequency_grid

A Chebyshev grid used to approximate frequency dependence.

angular_spec

num_freqs

broadband_method

angle_theta

angle_phi

pol_angle

direction

use_colocated_integration

source_time

size

center

name

angular_spec#
num_freqs#
broadband_method#
property frequency_grid#

A Chebyshev grid used to approximate frequency dependence.