phonopy
Run phonon calculations using Phonopy. Computes phonon band structures, density of states, thermal properties, and checks dynamical stability. Works with VASP, QE, ABINIT, and other DFT codes as the f
SKILL.md.claude/skills/phonopy/SKILL.md
GitHubPhonopy — Phonon Calculations
When to Use
- User needs phonon band structure or phonon DOS
- User wants to check dynamical stability (imaginary phonon modes)
- User needs thermodynamic properties (heat capacity, entropy, free energy) from phonons
- User wants to compute thermal expansion or Gruneisen parameters
- User has a relaxed structure and wants vibrational properties beyond the Gamma point
Prerequisites
- phonopy installed (
phonopy --version) - A DFT code (VASP, QE, ABINIT) for computing forces on displaced structures
- A fully relaxed structure (forces < 0.001 eV/Ang on all atoms)
- Tight SCF convergence in force calculations (EDIFF=1e-8 for VASP)
Workflow Overview
Phonopy uses the finite-displacement method:
- Generate supercells with displaced atoms
- Run DFT force calculations on each displaced supercell
- Collect forces and compute force constants
- Post-process: band structure, DOS, thermal properties
Workflow Steps
1. Create supercells with displacements
catgo_workflow_engine(action="add_task", params={
"workflow_id": "wf_xxx",
"task_type": "shell",
"name": "phonopy_displace",
"command": "phonopy -d --dim 2 2 2 -c POSCAR",
"input_files": {
"POSCAR": "<relaxed structure>"
},
"system_name": "phonon_setup"
})
This generates POSCAR-001, POSCAR-002, ..., phonopy_disp.yaml.
2. Run DFT on each displaced structure
For each displaced POSCAR, run a VASP single-point calculation:
catgo_workflow_engine(action="add_task", params={
"workflow_id": "wf_xxx",
"task_type": "shell",
"name": "phonon_forces_001",
"command": "cd disp-001 && vasp_std > vasp.out 2>&1",
"depends_on": ["phonopy_displace"],
"system_name": "phonon_disp_001"
})
VASP INCAR for force calculations:
PREC = Accurate
ENCUT = 520
EDIFF = 1e-8 # Must be tight for phonons
IBRION = -1
NSW = 0
ISMEAR = 0
SIGMA = 0.05
LREAL = .FALSE. # Must be FALSE for phonons
LWAVE = .FALSE.
LCHARG = .FALSE.
3. Collect forces and compute force constants
catgo_workflow_engine(action="add_task", params={
"workflow_id": "wf_xxx",
"task_type": "shell",
"name": "phonopy_forces",
"command": "phonopy -f disp-001/vasprun.xml disp-002/vasprun.xml ...",
"depends_on": ["phonon_forces_001", "phonon_forces_002"],
"system_name": "phonon_fc"
})
4. Compute phonon band structure
catgo_workflow_engine(action="add_task", params={
"workflow_id": "wf_xxx",
"task_type": "shell",
"name": "phonopy_band",
"command": "phonopy -p band.conf",
"input_files": {
"band.conf": "DIM = 2 2 2\nBAND = AUTO\nBAND_POINTS = 101\nBAND_LABELS = AUTO"
},
"depends_on": ["phonopy_forces"],
"system_name": "phonon_band"
})
Configuration Files
band.conf — Band structure
DIM = 2 2 2
BAND = AUTO
BAND_POINTS = 101
mesh.conf — DOS and thermal properties
DIM = 2 2 2
MP = 20 20 20
TPROP = .TRUE.
TMIN = 0
TMAX = 1000
TSTEP = 10
pdos.conf — Projected DOS
DIM = 2 2 2
MP = 20 20 20
PDOS = 1 2, 3 4 5 6
Atom indices are 1-based. Groups separated by commas.
Python API
import phonopy
from phonopy import Phonopy
ph = phonopy.load("phonopy_disp.yaml")
# Forces already set via phonopy -f
# Band structure
ph.auto_band_structure(plot=True)
ph.save("phonopy_results.yaml")
# Thermal properties
ph.run_mesh([20, 20, 20])
ph.run_thermal_properties(t_min=0, t_max=1000, t_step=10)
tp = ph.get_thermal_properties_dict()
# tp['temperatures'], tp['free_energy'], tp['entropy'], tp['heat_capacity']
Parameter Guidance
| Parameter | Typical value | Notes |
|---|---|---|
| DIM | 2 2 2 or 3 3 3 | Supercell size; larger = more accurate but more DFT calcs |
| MP | 20 20 20 | q-point mesh for DOS; denser = smoother DOS |
| BAND | AUTO | Auto high-symmetry path; or specify manually |
| displacement | 0.01 Ang | Default; increase for very stiff materials |
| TPROP | .TRUE. | Enable thermal property calculation |
Interpreting Results
- No imaginary modes — structure is dynamically stable
- Imaginary modes at Gamma — structure is unstable; re-optimize or try different cell
- Imaginary modes at zone boundary — possible CDW or structural phase transition
- Flat acoustic modes — check supercell size; may need larger DIM
Common Pitfalls
- Structure not fully relaxed — residual forces cause spurious imaginary modes. Relax to < 0.001 eV/Ang.
- LREAL=Auto in VASP — must use
LREAL = .FALSE.for phonon force calculations. Real-space projection introduces noise. - Supercell too small — DIM = 1 1 1 gives only Gamma phonons. Use at least 2 2 2 for bulk.
- SCF not converged — use EDIFF=1e-8 (not 1e-5). Loose SCF causes noisy force constants.
- Symmetry mismatch — phonopy uses symmetry to reduce displacements. Ensure the input structure has correct symmetry.
- Many displacements — low-symmetry structures can generate 100+ displaced supercells. Budget DFT time accordingly.
- Acoustic sum rule — slight violations are normal. Phonopy applies corrections automatically.