9.5. Vector Rayleigh-Sommerfeld method

Here we analyze how to obtain the results at the article: H. Ye, C.-W. Qiu, K. Huang, J. Teng, B. Luk’yanchuk, y S. P. Yeo, «Creation of a longitudinally polarized subwavelength hotspot with an ultra-thin planar lens: vectorial Rayleigh–Sommerfeld method», Laser Phys. Lett., vol. 10, n.º 6, p. 065004, jun. 2013.

DOI: 10.1088/1612-2011/10/6/065004 (http://stacks.iop.org/1612-202X/10/i=6/a=065004?key=crossref.890761f053b56d7a9eeb8fc6da4d9b4e).

In this development notebook, we develope Vector Rayleigh-Sommerfeld method. The incident field is an vector field (Ex, Ey) and it is propagated and converted to (Ex,Ey,Ez)

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

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

from matplotlib import cm

9.5.1. Diffraction by a hole

In Figure 2, a simulation of the electric fields at z=6.5 um from a circular aperture of diameter 5\(\lambda\) is obtained when \(\lambda\) = 0.648 \(\mu\)m.

[2]:
size = 5*um
x0 = np.linspace(-size, size, 256)
y0 = np.linspace(-size, size, 256)
wavelength = .640*um
radius = 5 * wavelength/2
[3]:
t = Scalar_mask_XY(x0, y0, wavelength)
t.circle(r0=(0*um, 0*um), radius=radius)
[4]:
E0 = Vector_source_XY(x0, y0, wavelength)
E0.constant_polarization(u=t, v=(1, 0))
[5]:
%%time
E1=E0.VRS(z=6.5*um, n=1, new_field=True, verbose=False, amplification=(1,1))
E1.cut_resample([-1.5,1.5], [-1.5,1.5])
CPU times: user 72.2 ms, sys: 12.6 ms, total: 84.8 ms
Wall time: 84.2 ms
[6]:
E1.draw(kind='intensities_rz', logarithm=False)

../../_images/source_examples_vector_VRS_paper_8_0.png

9.5.2. Radial polarized Gaussian beam through a circular aperture

In Figure 3, the propagation of a radially polarized Gaussian beam is performed. The diameter of teh circular aperture is D = 10\(\lambda\), and the beam is FWHM = 6 \(\mu\)m.

[7]:
size = 6.4*um
x0 = np.linspace(-size, size, 512)
y0 = np.linspace(-size, size, 512)

[8]:
wavelength = .640*um

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

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

t = u0 * t0
[10]:
E0 = Vector_source_XY(x0, y0, wavelength)
E0.radial_wave(u=t, r0=(0*um, 0*um))
[11]:
E1 = E0.VRS(z=z_obs, n=1, new_field=True)
E1.cut_resample([-3, 3], [-3, 3])
[12]:
E1.draw('intensities_rz')
../../_images/source_examples_vector_VRS_paper_15_0.png

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

[13]:
size = 30*um
x0 = np.linspace(-size, size, 1024)
y0 = np.linspace(-size, size, 1024)

[14]:
wavelength = .6328*um
z_obs = 10.32*um

[15]:
inner_radius = np.array([
    0.15, 1.3, 2.45, 3.3, 4.25, 5.35, 6.2, 7, 8.35, 9.65, 10.55, 11.9, 13.2,
    14.15, 15.25, 16.2, 17.6, 19.05, 19.8, 21.15, 22, 23.05, 24, 24.95, 26,
    26.8, 27.55, 28.25, 29.05
])

outer_radius = np.array([
    0.5, 1.95, 3.1, 3.95, 4.9, 6, 6.85, 7.65, 9, 10.3, 11.2, 12.55, 13.85,
    14.8, 15.9, 16.85, 18.25, 19.7, 20.45, 21.8, 22.65, 23.7, 24.65, 25.6,
    26.65, 27.45, 28.2, 28.9, 29.7
])

[16]:
u0 = Scalar_source_XY(x0, y0, wavelength)
u0.plane_wave(A=1)

t0 = Scalar_mask_XY(x0, y0, wavelength)
t0.rings(r0=(0*um, 0*um), inner_radius=inner_radius, outer_radius=outer_radius)
t0.pupil()

t = u0 * t0

[17]:
t0.draw()
../../_images/source_examples_vector_VRS_paper_21_0.png
[18]:
E0 = Vector_source_XY(x0, y0, wavelength)
E0.radial_wave(u=t, r0=(0*um, 0*um))

[19]:
E1 = E0.VRS(z=z_obs, n=1, new_field=True)
E1.cut_resample([-5, 5], [-5, 5], num_points=[512, 512])

[20]:
E1.draw('intensities_rz', logarithm=False)

../../_images/source_examples_vector_VRS_paper_24_0.png
[21]:
Exm, Eym, Ezm = E1.get('E', is_matrix=False)

Iz = np.abs(Ezm)**2
Ir = np.abs(Exm)**2 + np.abs(Eym)**2

I_total = Iz + Ir

Ex = Scalar_field_XY(E1.x, E1.y, E1.wavelength)
Ey = Scalar_field_XY(E1.x, E1.y, E1.wavelength)

Ex.u = np.sqrt(Ir)
Ey.u = np.sqrt(Iz)

z, I_r, _, _ = Ex.profile([-3, 0], [3, 0], order=2)
z, I_z, _, _ = Ey.profile([-3, 0], [3, 0], order=2)

I_total = I_r + I_z

[26]:
plt.figure()
plt.plot(z, I_r, 'c', label='Ir')
plt.plot(z, I_z, 'r', label='Iz')
plt.plot(z, I_total, 'g', label='$I_{total}$')
plt.legend()

plt.xlim(0, wavelength)
plt.ylim(ymin=0, ymax=10)

../../_images/source_examples_vector_VRS_paper_26_0.png
[23]:
Ey.u = Ey.u / Ey.u.max()
[24]:
Ey.cut_resample([-wavelength, wavelength], [-wavelength, wavelength],
                num_points=[256, 256])

[25]:
width, _, _, _ = Ey.beam_width_4s()
print("width = {:2.2f} lambda".format(width / (2 * np.sqrt(2))))
width = 0.42 lambda
../../_images/source_examples_vector_VRS_paper_29_1.png