3. Beam Propagation Method (BPM)

[1]:
from diffractio import sp, nm, plt, np, mm, degrees, um
from diffractio.scalar_sources_X import Scalar_source_X
from diffractio.scalar_fields_XZ import Scalar_field_XZ
from diffractio.scalar_masks_XZ import Scalar_mask_XZ
from diffractio.scalar_masks_X import Scalar_mask_X

import matplotlib.cm as cm

3.1. XZ scheme

[2]:
x0 = np.linspace(-500 * um, 500 * um, 1024 * 4)
z0 = np.linspace(-0.1 * mm, 1.25 * mm, 1024 * 2)
wavelength = 5 * um

[3]:
u0 = Scalar_source_X(x0, wavelength)
u0.plane_wave(A=1, theta=0 * degrees)

[4]:
lens = Scalar_mask_XZ(x0, z0, wavelength, n_background=1, info='')
ipasa, conds = lens.aspheric_lens(r0=(0 * mm, 0 * mm),
                                  angle=(0 * degrees, (0 * mm, 0 * mm)),
                                  refractive_index=1.5,
                                  cx=(1 / (1 * mm), -1 / (.25 * mm)),
                                  Qx=(0, 0),
                                  a2=(0, 1e-13),
                                  a3=(0, 0),
                                  a4=(0, 0),
                                  depth=.4 * mm,
                                  size=0.8 * mm)

lens.slit(r0=(0, 100 * um),
          aperture=800 * um,
          depth=75 * um,
          refractive_index=1 + 2j)

lens.draw_refractive_index(draw_borders=True,
                           min_incr=0.01,
                           colormap_kind=cm.Blues,
                           colorbar_kind='vertical')

[ ]:
lens.smooth_refractive_index(type_filter=2, pixels_filtering=25)

[ ]:
lens.incident_field(u0)

[ ]:
%%time
lens.clear_field()
lens.BPM(verbose=False)
lens.normalize()

CPU times: user 1.48 s, sys: 186 ms, total: 1.66 s
Wall time: 1.66 s
[ ]:
lens.draw(kind='intensity',
          logarithm=1e1,
          normalize=None,
          draw_borders=True,
          colorbar_kind='vertical')

../../../_images/source_tutorial_algorithms_BPM_9_0.png
[ ]:
Intensity_BPM = lens.intensity()

Focusing area

[ ]:
x_f_bpm, z_f_bpm = lens.search_focus()

x = -0.122 um, z = 758.671 um
[ ]:
ylim_max = 20 * um
zlim_max = 100 * um

[ ]:
lens.draw(kind='intensity', colorbar_kind='horizontal')

plt.ylim(-ylim_max, ylim_max)
plt.xlim(z_f_bpm - zlim_max, z_f_bpm + zlim_max)

../../../_images/source_tutorial_algorithms_BPM_14_0.png
[ ]:
lens.draw(kind='phase', colorbar_kind='horizontal', percentage_intensity=0.05)

plt.ylim(-ylim_max, ylim_max)
plt.xlim(z_f_bpm - zlim_max, z_f_bpm + zlim_max)

../../../_images/source_tutorial_algorithms_BPM_15_0.png