tidy3d.TFSF#

class TFSF[source]#

Bases: AngledFieldSource, VolumeSource, BroadbandSource

Total-field scattered-field (TFSF) source that can inject a plane wave in a finite region.

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

  • center (tuple[Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box]] = (0.0, 0.0, 0.0)) – [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 = 1) – Number of points used to approximate the frequency dependence of the injected field. A Chebyshev interpolation is used, thus, only a small number of points is typically sufficient to obtain converged results.

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

  • 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 the TFSF plane-wave propagation-direction dependence on wavelength.

  • injection_axis (Literal[0, 1, 2]) – Specifies the injection axis. The plane of incidence is defined via this injection_axis and the direction. The popagation axis is defined with respect to the injection_axis by angle_theta and angle_phi.

  • 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.

Notes

The TFSF source injects \(1 W\) of power per \(\mu m^2\) of source area along the injection_axis. Hence, the normalization for the incident field is \(|E_0|^2 = \frac{2}{c\epsilon_0}\), for any source size. Note that in the case of angled incidence, the same power is injected along the source’s injection_axis, and not the propagation direction. This allows computing scattering and absorption cross-sections without the need for additional normalization.

The TFSF source allows specifying a box region into which a plane wave is injected. Fields inside this region can be interpreted as the superposition of the incident field and the scattered field due to any scatterers present in the simulation domain. The fields at the edges of the TFSF box are modified at each time step such that the incident field is cancelled out, so that all fields outside the TFSF box are scattered fields only. This is useful in scenarios where one is interested in computing scattered fields only, for example when computing scattered cross-sections of various objects.

It is important to note that when a non-uniform grid is used in the directions transverse to the injection_axis of the TFSF source, the suppression of the incident field outside the TFSF box may not be as close to zero as in the case of a uniform grid. Because of this, a warning may be issued when nonuniform grid TFSF setup is detected. In some cases, however, the accuracy may be only weakly affected, and the warnings can be ignored.

For best cancellation, the grid should also be uniform across the TFSF box faces — not only inside the box. A common pitfall is to use a MeshOverrideStructure whose boundary coincides with the TFSF box, which places a grid-resolution transition exactly at the source plane (and, for angled incidence, at the side faces, which also inject the wave). This can introduce a smooth frequency-dependent amplitude error in the cancellation, larger at shorter wavelengths. To avoid it, extend the override box (or any other source of grid non-uniformity) a few cells beyond the TFSF box in all directions; for oblique incidence the recommendation applies to all three axes, since the side faces also contribute to the injection.

For oblique incidence, two angular specifications are available, mirroring PlaneWave: FixedInPlaneKSpec (default; in-plane wavevector held fixed across the source bandwidth, propagation direction is frequency-dependent and Bloch boundaries are required tangentially) and FixedAngleSpec (propagation direction held fixed across the source bandwidth; the TFSF case forbids BlochBoundary and Periodic transverse boundaries).

See also

Notebooks:

Attributes

injection_plane_center

Center of the injection plane.

angular_spec

num_freqs

broadband_method

injection_axis

use_colocated_integration

angle_theta

angle_phi

pol_angle

direction

source_time

size

center

name

Methods

plot([x, y, z, ax])

Plot this source.

angular_spec#
num_freqs#
broadband_method#
injection_axis#
use_colocated_integration#
property injection_plane_center#

Center of the injection plane.

plot(x=None, y=None, z=None, ax=None, **patch_kwargs)[source]#

Plot this source.