1. Vector Fast Fourier Transform (VFFT)

The incident field is an vector field (Ex, Ey) and it is propagated and converted to (Ex,Ey,Ez)

[1]:
from diffractio import np
from diffractio import um, degrees
[2]:
from diffractio.scalar_masks_XY import Scalar_mask_XY
from diffractio.scalar_fields_XY import Scalar_field_XY
from diffractio.scalar_sources_XY import Scalar_source_XY
[3]:
from diffractio.vector_fields_XY import Vector_field_XY
from diffractio.vector_sources_XY import Vector_source_XY
from diffractio.vector_masks_XY import Vector_mask_XY

1.1. XY scheme

[4]:
size = 64 * um
x0 = np.linspace(-size / 2, size / 2, 1024)
y0 = np.linspace(-size / 2, size / 2, 1024)

wavelength = 0.6328 * um
[5]:
u0 = Scalar_source_XY(x0, y0, wavelength)
u0.gauss_beam(
    r0=(0 * um, 0 * um),
    w0=(16 * um, 16 * um),
    z0=0 * um,
    A=1,
    theta=0 * degrees,
    phi=0 * degrees,
)

u0.draw()
../../../_images/source_tutorial_vector_algorithms_VFFT_7_0.png
[6]:
radius = 8 * um
t = Scalar_mask_XY(x0, y0, wavelength)
t.circle(r0=(0 * um, 0 * um), radius=radius)
[7]:
u1 = t * u0

EM1 = Vector_source_XY(x0, y0, wavelength)
EM1.constant_polarization(u=u1, v=(1, 0))
[8]:
EM1.draw(
    kind="ellipses",
    amplification=0.5,
    color_line="k",
    line_width=0.75,
    num_ellipses=(21, 21),
)
../../../_images/source_tutorial_vector_algorithms_VFFT_10_0.png
[9]:
EM2 = EM1.VFFT(
    radius=64 * um, focal=10 * um, remove0=False, n=1, new_field=True, has_draw=False
)
[10]:
x_resample = 8
EM2.cut_resample(
    [-x_resample, x_resample], [-x_resample, x_resample], num_points=(1024, 1024)
)
[11]:
EM2.draw("intensities", logarithm=1e-1)
../../../_images/source_tutorial_vector_algorithms_VFFT_13_0.png
[12]:
EM2.draw("intensity", logarithm=1e-1)
../../../_images/source_tutorial_vector_algorithms_VFFT_14_0.png

This result can be compared to the scalar FFT result.

[13]:
u_fft = u1.fft(z=15 * um, new_field=True, remove0=False)
u_fft.cut_resample(
    x_limits=(-x_resample, x_resample), y_limits=(-x_resample, x_resample)
)
u_fft.draw(logarithm=1e-2, has_colorbar="horizontal")
../../../_images/source_tutorial_vector_algorithms_VFFT_16_0.png