Phonon Calculations¶
Harmonic approximation¶
Within the harmonic approximation, the total potential energy of a periodic solid is expanded to second order in atomic displacements \(\{u_{a,i}\}\) about the equilibrium configuration:
The interatomic force constants (IFCs) are defined as:
where \(a,b\) index atoms and \(i,j \in \{x,y,z\}\) label Cartesian directions.
Dynamical matrix and normal modes¶
The dynamical matrix at wavevector \(\mathbf{q}\) is:
Diagonalizing \(D(\mathbf{q})\) gives \(3N\) phonon branches with frequencies \(\omega_{k}(\mathbf{q})\) and normalized polarization vectors \(\mathbf{e}_{k}(\mathbf{q})\):
For point-defect lineshape calculations, DefectPL uses only Gamma-point (\(\mathbf{q}=0\)) phonons of a large defect supercell, so the \(\mathbf{q}\) index is dropped throughout.
Eigenvector normalization¶
Polarization vectors returned by phonopy satisfy:
DefectPL stores them in the shape (nmodes, natoms, 3), consistent with what read_band_yaml
returns.
Phonon Inverse Participation Ratio¶
The phonon IPR quantifies how spatially confined a vibrational mode is [Alkauskas et al., New J. Phys. 16, 073026 (2014)]. The per-atom weight of mode \(k\) on atom \(a\) is:
and the IPR is:
| IPR | Mode character |
|---|---|
| \(1/N\) | Perfectly delocalized over \(N\) atoms (acoustic/bulk-like) |
| \(1\) | Fully localized on a single atom (local vibrational mode) |
The localization ratio \(\beta_k = N \cdot \text{IPR}_k\) provides an atom-count-normalized index: \(\beta = 1\) for a bulk mode; \(\beta = N\) for a fully localized mode.
Historical note
In the NV center in diamond, the dominant 65 meV mode that couples strongly to the optical transition shows \(\beta \approx 11\) in a 512-atom supercell, indicating it is a quasi-local resonance (partially confined) rather than a true local mode (\(\beta \to \infty\)).
Frequency unit conversion¶
phonopy outputs frequencies in THz. DefectPL converts to eV using:
(from the constant THZ2EV in defectpl.constants).
Required VASP settings¶
DFPT method (recommended for LDA/GGA):
Finite-displacement method (required for hybrid functionals):
Use phonopy to generate displaced supercells, run each with IBRION = -1; NSW = 0, collect
forces, then build force constants with phonopy --force-sets.
DefectPL workflow¶
from defectpl.phonon import (
create_force_constants_from_vasprun,
calculate_gamma_phonon_to_band_yaml,
read_band_yaml,
extract_gamma_phonon_data,
)
# 1. Extract IFCs from DFPT output
create_force_constants_from_vasprun("vasprun.xml")
# 2. Compute Gamma-point band.yaml
calculate_gamma_phonon_to_band_yaml(
unitcell_filename="POSCAR",
force_constants_filename="FORCE_CONSTANTS",
dimension="2 2 2",
output_filename="band.yaml",
)
# 3a. Low-level: returns (frequencies, eigenvectors, masses) arrays
frequencies, eigenvectors, masses = read_band_yaml("band.yaml")
# 3b. High-level: returns a GammaPhononData object with .as_dict() support
phonon_data = extract_gamma_phonon_data("band.yaml")
CLI equivalents: