tidy3d.BlochBoundary#

class BlochBoundary[source]#

Bases: BoundaryEdge

Specifies a Bloch boundary condition along a single dimension.

Parameters:
  • name (Optional[str] = None) – Optional unique name for boundary.

  • bloch_vec (float) – Normalized component of the Bloch vector in units of 2 * pi / (size along dimension) in the background medium, along the dimension in which the boundary is specified.

Example

>>> bloch = BlochBoundary(bloch_vec=1)

Attributes

bloch_phase

Returns the forward phase factor associated with bloch_vec.

Methods

from_source(source, domain_size, axis[, medium])

Set the Bloch vector component based on a given angled source and its center frequency.

bloch_vec#
property bloch_phase#

Returns the forward phase factor associated with bloch_vec.

classmethod from_source(source, domain_size, axis, medium=None)[source]#
Set the Bloch vector component based on a given angled source and its center frequency.

Note that if a broadband angled source is used, only the frequency components near the center frequency will exhibit angled incidence at the expect angle. In this case, a narrowband source is recommended.

Parameters:
  • source (Union[GaussianBeam, ModeSource, PlaneWave]) – Angled source.

  • domain_size (float) – Size of the domain (micron) in the direction normal to the Bloch boundary.

  • axis (int) – Axis normal to the Bloch boundary.

  • medium (Medium) – Background medium associated with the Bloch vector. Default: free space.

Returns:

Bloch boundary condition with wave vector defined based on the source angles and center frequency.

Return type:

BlochBoundary

Example

>>> from tidy3d import GaussianPulse, PlaneWave, inf
>>> pulse = GaussianPulse(freq0=200e12, fwidth=20e12)
>>> pw_source = PlaneWave(
...     size=(inf,inf,0), source_time=pulse, direction='+', angle_theta=0.2, angle_phi=0.3)
>>> bloch = BlochBoundary.from_source(source=pw_source, domain_size=5, axis=0)
__hash__()#

Hash method.