Frozen Phonons

# %matplotlib widget

import abtem
import ase
import numpy as np
import matplotlib.pyplot as plt

abtem.config.set({"dask.lazy":False});
srtio3_unit_cell = ase.io.read("data/SrTiO3.cif")
srtio3 = srtio3_unit_cell*(4,4,48)
frozen_phonons = abtem.FrozenPhonons(srtio3, num_configs=8, sigmas=0.1, seed=2025)
atoms_configuration = next(iter(frozen_phonons))

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
abtem.show_atoms(atoms_configuration, scale=0.4, ax=ax1, title="Beam view")
abtem.show_atoms(
    atoms_configuration,
    scale=0.4,
    plane="xz",
    legend=True,
    ax=ax2,
    title="Side view",
    linewidth=0.0,
);
<Figure size 1000x400 with 2 Axes>
potential_static = abtem.Potential(srtio3, gpts=384, slice_thickness=2)
potential_phonon = abtem.Potential(frozen_phonons, gpts=384, slice_thickness=2)
initial_waves = abtem.PlaneWave(energy=200e3)

exit_waves_static = initial_waves.multislice(potential_static)
exit_waves_phonon = initial_waves.multislice(potential_phonon)
stacked = abtem.stack(
    [exit_waves_phonon[0].intensity(), exit_waves_phonon.intensity().mean(0)],
    ("single configuration", "thermal average"),
)

stacked.show(explode=True, figsize=(10, 4.5), common_color_scale=True);
<Figure size 1000x450 with 2 Axes>
diffraction_patterns_static = exit_waves_static.diffraction_patterns(
    max_angle="valid", block_direct=True
)
diffraction_patterns_phonons = exit_waves_phonon.diffraction_patterns(
    max_angle="valid", block_direct=True
).mean(0)

diffraction_patterns = abtem.stack(
    [
        diffraction_patterns_static,
        diffraction_patterns_phonons,
    ],
    ("static diffraction patterns", "frozen phonons diffraction patterns"),
)

diffraction_patterns.show(
    explode=True,
    power=0.25,
    units="mrad",
    figsize=(10, 4.5),
    cmap='magma',
    common_color_scale=True,
);
<Figure size 1000x450 with 2 Axes>
Colin Ophus Lab | StanfordColin Ophus Lab | Stanford
Understanding materials, atom by atom — Colin Ophus Lab
Lab Group Website by Curvenote