7. Vector Rayleigh-Sommerfeld method (VRS)

[1]:
from diffractio import np, sp, plt
from diffractio import nm, um, mm, degrees
from matplotlib import cm

from diffractio.vector_sources_XY import Vector_source_XY
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

from diffractio.vector_fields_XY import Vector_field_XY

7.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 = .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, 0), z0=0, w0=beam_width)

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

t = u0 * t0

[5]:
E0 = Vector_source_XY(x0, y0, wavelength)
E0.radial_wave(u=t, r0=(0, 0))

[6]:
E1 = E0.VRS(z=z_obs, n=1, new_field=True)
E1.draw('intensities', logarithm=1e2)

../../../_images/source_tutorial_algorithms_VRS_7_0.png

7.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 = .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, 0), focal=focal, radius=20 * um)

t1 = u0 * t0

[11]:
E0 = Vector_source_XY(x0, y0, wavelength)
E0.radial_wave(u=t1, r0=(0, 0))

[12]:
%%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 5.57 s, sys: 336 ms, total: 5.91 s
Wall time: 5.91 s
[13]:
E1.draw('intensities', logarithm=1e-1)
../../../_images/source_tutorial_algorithms_VRS_14_0.png