3. Plane wave decomposition (PWD)
Fertig, «Vector Wave Propagation Method», Thesis, Mannheim, 2011. Chapter: 2.9 “Plane wave decomposition” pag. 41
3.1. XZ frame
[12]:
from diffractio import np, um
from diffractio.scalar_fields_XZ import Scalar_field_XZ
from diffractio.scalar_masks_X import Scalar_mask_X
from diffractio.scalar_sources_X import Scalar_source_X
[13]:
x0=np.linspace(-20,20,512)
z0=np.linspace(0, 40,500)
wavelength=1*um
[14]:
u0=Scalar_source_X(x0,wavelength)
u0.gauss_beam(x0=0, z0=0, w0=20*um)
[15]:
t0=Scalar_mask_X(x0,wavelength)
t0.slit(x0=0, size=20*um);
[16]:
t1=t0*u0
t1.draw()
[17]:
u_xz=Scalar_field_XZ(x0,z0,wavelength,n_background=1)
[18]:
u_xz.incident_field(t1)
[19]:
u_xz.PWD(verbose=False)
[20]:
u_xz.draw()
[21]:
u_x=u_xz.profile_transversal(z0=30*um)
[22]:
u_x=u_xz.profile_longitudinal(x0=0*um)
3.2. XYZ frame
[23]:
from diffractio import np, um, degrees
from diffractio.scalar_fields_XYZ import Scalar_field_XYZ
from diffractio.scalar_masks_XY import Scalar_mask_XY
from diffractio.scalar_sources_XY import Scalar_source_XY
[24]:
x0=np.linspace(-20,20,256)
y0=np.linspace(-20,20,256)
z0=np.linspace(0, 200,256)
wavelength=.4*um
[25]:
u0=Scalar_source_XY(x0,y0,wavelength)
u0.plane_wave()
[26]:
t0=Scalar_mask_XY(x0,y0,wavelength)
t0.circle(r0=(0,0), radius=(10,10), angle=0*degrees);
[27]:
t1=t0*u0
t1.draw()
[28]:
u_xyz=Scalar_field_XYZ(x0,y0,z0,wavelength,n_background=1)
[29]:
u_xyz.incident_field(t1)
[30]:
%%time
u_xyz.PWD()
CPU times: user 2.98 s, sys: 130 ms, total: 3.11 s
Wall time: 3.1 s
[31]:
u_xyz.draw_XY(z0=40*um)
[32]:
u_xyz.draw_XZ(y0=0)
<Figure size 432x288 with 0 Axes>