9.2. Refection and refraction
9.2.1. Refection and refraction at a surface
[1]:
from diffractio import np
from diffractio import degrees, um
from diffractio.scalar_sources_X import Scalar_source_X
from diffractio.scalar_masks_XZ import Scalar_mask_XZ
from diffractio.vector_fields_X import Vector_field_X
from diffractio.vector_fields_XZ import Vector_field_XZ
[2]:
from py_pol.jones_vector import Jones_vector
[3]:
x0 = np.linspace(-100*um, 100*um, 1024)
z0 = np.linspace(-100*um, 100*um, 1024)
wavelength = 5*um
u0 = Scalar_source_X(x=x0, wavelength=wavelength)
u0.gauss_beam(A=1, x0=0*um, w0=10*um, z0=0*um)
u_xz = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
u_xz.incident_field(u0)
u_xz.semi_plane(r0=(0*um, 0*um), refractive_index=1.5, angle=60*degrees)
u_xz.draw_refractive_index(scale='scaled')
[4]:
j0 = Jones_vector().general_azimuth_ellipticity(azimuth=0*degrees, ellipticity=0*degrees)
print(j0)
E =
[+1.000]
[+0.000]
[12]:
EH_xz = Vector_field_XZ(x0,z0, wavelength)
EH_xz.incident_field(u0=u0, j0=j0)
EH_xz.refractive_index_from_scalarXZ(u_xz)
[13]:
EH_xz.FP_WPM(has_edges=True, verbose=True)
Time = 1.24 s, time/loop = 1.211 ms
[14]:
EH_xz.draw('intensities', logarithm=1e1, draw_borders=True, scale='scaled')
[15]:
EH_xz.draw('EH', draw_z=True, draw_borders=True, scale='scaled', color='k.')
[17]:
P_vector = EH_xz.draw('poynting_vector_averaged', draw_borders=True,
scale='scaled', color='k.')
9.2.2. At a layer
[18]:
x0 = np.linspace(-150*um, 150*um, 1024)
z0 = np.linspace(0*um, 300*um, 1024)
wavelength = 5*um
u0 = Scalar_source_X(x=x0, wavelength=wavelength)
u0.gauss_beam(A=1, x0=0*um, w0=20*um, z0=100*um)
angle=25*degrees
refractive_index = 1/np.arctan(np.pi/2-angle)
print("n = {:2.2f}".format(refractive_index))
u_xz = Scalar_mask_XZ(x=x0, z=z0, wavelength=wavelength)
u_xz.incident_field(u0)
u_xz.square(r0=(0*um, 200), size=(75,500), refractive_index = refractive_index, angle=angle)
u_xz.draw_refractive_index(scale='scaled')
n = 1.18
[19]:
j0 = Jones_vector().general_azimuth_ellipticity(azimuth=0*degrees, ellipticity=0*degrees)
print(j0)
E =
[+1.000]
[+0.000]
[20]:
EH_xz = Vector_field_XZ(x0,z0, wavelength)
EH_xz.incident_field(u0=u0, j0=j0)
EH_xz.refractive_index_from_scalarXZ(u_xz)
[21]:
EH_xz.FP_WPM(has_edges=True)
[22]:
EH_xz.draw('intensities', scale='scaled', logarithm=1e1)
[24]:
EH_xz.draw('E2H2', logarithm=False, normalize= False, cut_value=None, draw_z=True, color='w.')
[25]:
P_vector = EH_xz.draw('poynting_vector_averaged', color='k.', scale='scaled')
[26]:
Irr= EH_xz.draw('irradiance', scale='scaled')