Note
Go to the end to download the full example code.
Debye-Waller and generalized phonon DOS
This example shows how to plot the generalized phonon DOS with the mean square displacement tensor in cartesian coords and how to calculate Debye Waller factors as a function of temperature.
See [Lee1995] for the further details about the internal implementation and [Trueblood1996] for the different conventions used by crystallographers.
Creating temporary file: /tmp/tmpiqnuck5xmp-7000_DDB
/usr/share/miniconda/envs/abipy/lib/python3.11/site-packages/spglib/spglib.py:115: DeprecationWarning:
dict interface (SpglibDataset['equivalent_atoms']) is deprecated.Use attribute interface ({self.__class__.__name__}.{key}) instead
/usr/share/miniconda/envs/abipy/lib/python3.11/site-packages/spglib/spglib.py:115: DeprecationWarning:
dict interface (SpglibDataset['wyckoffs']) is deprecated.Use attribute interface ({self.__class__.__name__}.{key}) instead
/usr/share/miniconda/envs/abipy/lib/python3.11/site-packages/spglib/spglib.py:115: DeprecationWarning:
dict interface (SpglibDataset['equivalent_atoms']) is deprecated.Use attribute interface ({self.__class__.__name__}.{key}) instead
/usr/share/miniconda/envs/abipy/lib/python3.11/site-packages/spglib/spglib.py:115: DeprecationWarning:
dict interface (SpglibDataset['wyckoffs']) is deprecated.Use attribute interface ({self.__class__.__name__}.{key}) instead
/usr/share/miniconda/envs/abipy/lib/python3.11/site-packages/spglib/spglib.py:115: DeprecationWarning:
dict interface (SpglibDataset['equivalent_atoms']) is deprecated.Use attribute interface ({self.__class__.__name__}.{key}) instead
/usr/share/miniconda/envs/abipy/lib/python3.11/site-packages/spglib/spglib.py:115: DeprecationWarning:
dict interface (SpglibDataset['wyckoffs']) is deprecated.Use attribute interface ({self.__class__.__name__}.{key}) instead
import os
import abipy.data as abidata
from abipy import abilab
# Open DDB file for alpha-SiO2 taken from https://materialsproject.org/materials/mp-7000/
filepath = os.path.join(abidata.dirpath, "refs", "mp-7000_DDB.bz2")
ddb = abilab.abiopen(filepath)
# Invoke anaddb to compute phonon bands and dos.
#dos_method = "gaussian"
dos_method = "tetra"
phbst_file, phdos_file = ddb.anaget_phbst_and_phdos_files(nqsmall=4, dos_method=dos_method,
ndivsm=1, mpi_procs=2)
# Extract msqd_dos
msqd_dos = phdos_file.msqd_dos
#print(msqd_dos)
#for fmt in ("cartesian", "cif", "ustar", "beta", "B"):
for fmt in ("cartesian", "cif"):
df = msqd_dos.get_dataframe(temp=300, view="all", fmt=fmt)
abilab.print_dataframe(df, title="Format: %s" % fmt)
# Plot generalized phonon DOS for each inequivalent atom in the unit cell.
msqd_dos.plot()
# Plot tensor(T) for each inequivalent atom.
msqd_dos.plot_tensor()
msqd_dos.plot_uiso()
# To save the structure and the U tensor at T=300K in CIF format, use:
#msqd_dos.write_cif_file("DW.cif", temp=300)
# To visualize the thermal ellipsoids with Vesta, use:
#msqd_dos.vesta_open(temp=300)
# Remember to close the files.
phbst_file.close()
phdos_file.close()
ddb.close()
Total running time of the script: (0 minutes 6.064 seconds)