Analysis#

Methods for analyzing VASP calculation results.

Reading Output Files#

DOSCAR#

dos_data = calc.read_doscar()

energy = dos_data['energy']
total_dos = dos_data['total_dos']
fermi = dos_data['fermi']
projected = dos_data.get('projected')  # If LORBIT=11

EIGENVAL#

eigen_data = calc.read_eigenval()

eigenvalues = eigen_data['eigenvalues']
kpoints = eigen_data['kpoints']
weights = eigen_data['weights']

PROCAR#

procar_data = calc.read_procar()

# Orbital projections for band structure coloring

LOCPOT#

# Work function from electrostatic potential
work_function = calc.get_work_function()

Band Gap Analysis#

# From DOSCAR
band_gap = calc.get_band_gap_from_doscar(tol=0.1)

# From EIGENVAL
eigenvalues = calc.read_eigenval()['eigenvalues']
fermi = calc.results['fermi_level']

occupied = eigenvalues[eigenvalues < fermi]
unoccupied = eigenvalues[eigenvalues > fermi]
vbm = occupied.max()
cbm = unoccupied.min()
gap = cbm - vbm

Magnetic Moments#

# Total magnetic moment
total_mag = calc.results.get('magnetic_moment')

# Per-atom moments (with LORBIT=11)
atom_mags = calc.results.get('magnetic_moments')

Surface Analysis#

from vasp.recipes.slabs import calculate_surface_energy

# Calculate surface energy
e_surf = calculate_surface_energy(slab_result, bulk_energy_per_atom)

Equation of State#

from ase.eos import EquationOfState

volumes = [...]
energies = [...]

eos = EquationOfState(volumes, energies, eos='birchmurnaghan')
v0, e0, B = eos.fit()

print(f"Equilibrium volume: {v0:.2f} ų")
print(f"Bulk modulus: {B * 160.2:.1f} GPa")