9.4. Focusing light with a lens: vector approach
In this example, we will use the vectorial approach to calculate the electric field of a plane wave focused by a lens. We will use the XZ scheme, where the wave propagates in the X direction and the lens is in the XZ plane. The lens is a semi-cylinder with refractive index \(n\)=2.5 for a near focusing.
[1]:
from diffractio import np
from diffractio import degrees, um
[2]:
from diffractio.vector_fields_X import Vector_field_X
from diffractio.scalar_sources_X import Scalar_source_X
from diffractio.vector_fields_XZ import Vector_field_XZ
from diffractio.scalar_masks_XZ import Scalar_mask_XZ
[3]:
from py_pol.jones_vector import Jones_vector
9.4.1. Scalar definition in XZ scheme
[4]:
size=50* um
x0 = np.linspace(-size/2 , size/2, 2048)
z0 = np.linspace(0*um, 1.25*size, 2048)
wavelength = 2*um
u0 = Scalar_source_X(x=x0, wavelength=wavelength)
u0.plane_wave()
u_xz = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
u_xz.incident_field(u0)
u_xz.semi_cylinder(r0=(0*um, size/2 + 5*um),
radius = 22*um,
angle = 180*degrees,
refractive_index = 2.5)
u_xz.draw_refractive_index(scale='scaled', colorbar_kind='vertical')
9.4.1.1. Scalar calculation in XZ scheme
[5]:
u_xz.WPM(verbose=False, has_edges=30*um)
[6]:
u_xz.draw(logarithm=1, scale='scaled', colorbar_kind='vertical', draw_borders=True)
u_xz.draw('phase', scale='scaled', colorbar_kind='vertical', draw_borders=True, percentage_intensity=0.001)
9.4.1.2. Vectorial calculation in XZ scheme
[7]:
# definition of polarization
j0 = Jones_vector().general_azimuth_ellipticity(azimuth=45*degrees, ellipticity=0*degrees)
print(j0)
E =
[+0.707]
[+0.707]
[8]:
# add vector incident field and refractive index to Vector_field_XZ
EH_xz = Vector_field_XZ(x0,z0, wavelength)
EH_xz.incident_field(u0=u0, j0=j0)
EH_xz.refractive_index_from_scalarXZ(u_xz)
[9]:
# Computation
EH_xz.FP_WPM(has_edges=30*um, verbose=False)
9.4.1.3. Drawings
[10]:
EH_xz.draw('intensity', logarithm=1, draw_borders=True, scale='scaled')
<Figure size 480x360 with 0 Axes>
[11]:
EH_xz.draw('intensities', logarithm=1, draw_borders=True, scale='scaled')
[12]:
EH_xz.draw('phases', percentage_intensity=0.001, draw_borders=True, scale='scaled')
[13]:
EH_xz.draw('EH', scale='scaled', color='k.', ms=0.05)
[14]:
EH_xz.draw('poynting_vector', logarithm=1e2, scale='scaled', color='k.', ms=0.05)
[15]:
EH_xz.draw('irradiance', logarithm=1e2, scale='scaled')
[16]:
EH_xz.draw('energy_density', logarithm=1e0, scale='scaled')
[17]:
EH_xz.draw('poynting_vector_averaged', logarithm=1e0, scale='scaled', color='k.')
9.4.2. Focusing light with a lens: inverted semi-cylinder
9.4.2.1. Scalar definition in XZ scheme
[18]:
size=50* um
x0 = np.linspace(-size/2 , size/2, 2048)
z0 = np.linspace(0*um, 1.25*size, 2048)
wavelength = 2*um
u0 = Scalar_source_X(x=x0, wavelength=wavelength)
u0.plane_wave()
u_xz = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
u_xz.incident_field(u0)
u_xz.semi_cylinder(r0=(0*um, 10*um),
radius=22*um,
angle=0*degrees,
refractive_index=2.5)
u_xz.draw_refractive_index(scale='scaled', colorbar_kind='vertical')
9.4.2.2. Scalar calculation in XZ scheme
[19]:
u_xz.WPM(verbose=False, has_edges=10*um)
u_xz.draw(logarithm=False, scale='scaled', colorbar_kind='vertical', draw_borders=True)
u_xz.draw('phase', scale='scaled', colorbar_kind='vertical', draw_borders=True, percentage_intensity=0.001)
9.4.2.3. Vectorial calculation in XZ scheme
[20]:
# definition of polarization
j0 = Jones_vector().general_azimuth_ellipticity(azimuth=45*degrees, ellipticity=0*degrees)
print(j0)
E =
[+0.707]
[+0.707]
[21]:
# add vector incident field and refractive index to Vector_field_XZ
EH_xz = Vector_field_XZ(x0,z0, wavelength)
EH_xz.incident_field(u0=u0, j0=j0)
EH_xz.refractive_index_from_scalarXZ(u_xz)
[22]:
# Computation
EH_xz.FP_WPM(has_edges=10*um, verbose=False)
9.4.2.4. Drawings
[23]:
EH_xz.draw('EH', logarithm=1, draw_borders=True, color='k.', scale='scaled')
[24]:
EH_xz.draw('phases', percentage_intensity=0.001, draw_borders=True, scale='scaled')
[25]:
EH_xz.draw('E2H2', draw_borders=True, scale='scaled', color='w.', ms=0.05, logarithm=1e1)
[34]:
EH_xz.draw('irradiance', logarithm=1e1, scale='scaled')
[33]:
EH_xz.draw('energy_density', logarithm=1e1, scale='scaled')
[30]:
EH_xz.draw('poynting_vector_averaged', logarithm=1e1, scale='scaled', color='k.')