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

5.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 / (0.25 * mm)),
    Qx=(0, 0),
    a2=(0, 1e-13),
    a3=(0, 0),
    a4=(0, 0),
    depth=0.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, colorbar_kind="vertical"
)
../../../_images/source_tutorial_scalar_algorithms_BPM_5_0.png
[5]:
lens.incident_field(u0)
[6]:
%%time
lens.clear_field()
lens.BPM(verbose=False)
lens.normalize()

CPU times: user 1.31 s, sys: 167 ms, total: 1.48 s
Wall time: 1.48 s
[7]:
lens.draw(
    kind="intensity",
    logarithm=1e1,
    normalize=None,
    draw_borders=True,
    colorbar_kind="vertical",
)
../../../_images/source_tutorial_scalar_algorithms_BPM_8_0.png
[8]:
Intensity_BPM = lens.intensity()

Focusing area

[9]:
x_f_bpm, z_f_bpm = lens.search_focus()
x = -0.122 um, z = 752.076 um
[10]:
ylim_max = 20 * um
zlim_max = 100 * um
[11]:
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_scalar_algorithms_BPM_13_0.png
[12]:
lens.draw(kind="phase", colorbar_kind="horizontal", percentage_intensity=0.1)

plt.ylim(-ylim_max, ylim_max)
plt.xlim(z_f_bpm - zlim_max, z_f_bpm + zlim_max)
../../../_images/source_tutorial_scalar_algorithms_BPM_14_0.png