2. Vector Rayleigh-Sommerfeld method (VRS)

[1]:
from diffractio import np
from diffractio import um

from diffractio.vector_sources_XY import Vector_source_XY
from diffractio.scalar_masks_XY import Scalar_mask_XY
from diffractio.scalar_sources_XY import Scalar_source_XY

2.1. Radial polarized Gaussian beam through a circular aperture

[2]:
size = 6.4 * um
x0 = np.linspace(-size, size, 512)
y0 = np.linspace(-size, size, 512)
[3]:
wavelength = 0.640 * um

radius = 10 * wavelength / 2
z_obs = 10 * um
beam_width = 6 * um / (2 * np.sqrt(2))
[4]:
u0 = Scalar_source_XY(x0, y0, wavelength)
u0.gauss_beam(A=1, r0=(0 * um, 0 * um), z0=0, w0=beam_width)

t0 = Scalar_mask_XY(x0, y0, wavelength)
t0.circle(r0=(0 * um, 0 * um), radius=radius)

t = u0 * t0
[5]:
E0 = Vector_source_XY(x0, y0, wavelength)
E0.radial_wave(u=t, r0=(0 * um, 0 * um))
[6]:
E1 = E0.VRS(z=z_obs, n=1, new_field=True)
E1.draw("intensities", logarithm=1e2)
../../../_images/source_tutorial_vector_algorithms_VRS_7_0.png

2.2. Focusing with a lens a beam with a high \(E_z\) component

In Figures 4 and 5 a planar lens formed by rings is developed in order to obtain a high \(E_z\) component. The data of the radii are shown in Table 1.

[7]:
size = 30 * um
x0 = np.linspace(-size, size, 1024)
y0 = np.linspace(-size, size, 1024)
[8]:
wavelength = 0.6328 * um
focal = 10 * um
[9]:
u0 = Scalar_source_XY(x0, y0, wavelength)
u0.plane_wave(A=1)

t0 = Scalar_mask_XY(x0, y0, wavelength)
t0.lens(r0=(0 * um, 0 * um), focal=focal, radius=20 * um)

t1 = u0 * t0
[10]:
E0 = Vector_source_XY(x0, y0, wavelength)
E0.radial_wave(u=t1, r0=(0 * um, 0 * um))
[11]:
%%time
E1=E0.VRS(z=z_obs, n=1, new_field=True)
E1.cut_resample([-3, 3], [-3, 3], num_points=[512, 512])

CPU times: user 1.95 s, sys: 193 ms, total: 2.14 s
Wall time: 2.14 s
[12]:
E1.draw("intensities", logarithm=1e-2)
../../../_images/source_tutorial_vector_algorithms_VRS_14_0.png