Source code for surfinpy.wulff
from surfinpy import p_vs_t as pt
from surfinpy import utils as ut
import numpy as np
from scipy.constants import codata
[docs]def temperature_correction(T, thermochem, adsorbant):
"""Make the energy of the adsorbing species a temperature
dependent term by scaling it with experimental data.
Parameters
----------
T : int
Temperature to scale the energy to
thermochem : array like
nist_janaf table
adsorbant : float
DFT energy of adsorbant
Returns
-------
adsorbant : float
Scaled energy of adsorbant
"""
temperature_range = np.arange(2, 1000)
shift = ut.fit(thermochem[:, 0], thermochem[:, 2], temperature_range)
shift = (T * (shift[(T - 1)] / 1000)) / 96.485
adsorbant = adsorbant - shift
return adsorbant
[docs]def calculate_surface_energy(stoich,
data,
SE,
adsorbant,
thermochem,
T,
P,
coverage=None):
"""Calculate the surface energy at a specific temperature
and pressure.
Parameters
----------
stoich : dictionary
information about the stoichiometric surface
data : list
list of dictionaries containing information on the "adsorbed" surfaces
SE : float
surface energy of the stoichiomteric surface
adsorbant : float
dft energy of adsorbing species
coverage : array like
Numpy array containing the different coverages of adsorbant.
thermochem : array like
Numpy array containing thermochemcial data downloaded from NIST_JANAF
for the adsorbing species.
T : float
Temperature to calculate surface energy
P : float
Pressure to calculate the surface energy
coverage : array like (default None)
Coverage of adsorbed specied on the surface.
Returns
-------
SEs : array like
surface energies for each surface at T/P
"""
if coverage is None:
coverage = ut.calculate_coverage(data)
R = codata.value('molar gas constant')
N_A = codata.value('Avogadro constant')
lnP = np.log(10 ** P)
AE = pt.adsorption_energy(data, stoich, adsorbant)
adsorbant = temperature_correction(T, thermochem, adsorbant)
SEs = np.array([SE])
for i in range(0, len(data)):
S = SE + (coverage[i] / N_A) * (AE[i] - (lnP * (T * R)))
SEs = np.append(SEs, S)
return SEs