Source code for pymatgen.analysis.defects.surf_error

"""
DFT Surface Energy Error Correction for LDA and GGA exchange-correlation
Functionals. Ref: Phys. Rev. B 73, 195123, 2006.
"""

from __future__ import division, unicode_literals

__author__ = "Bharat Medasani"
__version__ = "0.1"
__maintainer__ = "Bharat Medasani"
__email__ = "mbkumar@gmail.com"
__status__ = "Alpha"
__date__ = "10/5/2014"

import math

ergpercmsq_to_evperangsq = 6.24150934e-5

unit_surf_energy_error = {
        "LDA":{"A":448.454, "B":-55.845}, 
        "PW91":{"A":1577.2, "B":-231.29}, 
        "PBE":{"A":1193.7, "B":-174.37}}
bohr_rad = 5.2917721092e-1

[docs]def surf_energy_error(xc_func, atom_no, valence, volume): """ Computes the Unit Surface Energy Error for given functional and atom. Args: xc_func: Exchange Correlation Functional. Options are "LDA", "PBE", "PW91" atom_no: Number of atoms in cell valence: Valence of each atom in cell Volume: Volume of the cell Returns: Unit Surface Energy Error in eV/Ang^2 """ if xc_func not in unit_surf_energy_error.keys(): raise ValueError("Surface energy error for functional not defined.") blk_electron_den = valence*atom_no/volume rs = (3/(4*math.pi*blk_electron_den))**(1/3.0) rs = rs/bohr_rad rspa = rs**(-5.0/2) rspb = rs**(-3.0/2) a = unit_surf_energy_error[functional]['A'] b = unit_surf_energy_error[functional]['B'] corr = (a*rspa + b*rspb) corr = corr * ergpercmsq_to_evperangsq return corr