Discrepancy between (Substrate) Elastic Energy on MP

Hello, I have been working on trying to replicate the substrate film matching process implemented on MP as given by Ding et al.. Following previous forum guidelines and implementation in calculating the elastic properties as implemented in atomate2, I have been able to succesfully reproduce the results exhibited on MP. After having done this though, I did seem to notice a discrepancy in the elastic energy reported under Suggested Substrates and that reported in the original paper.
Mainly, one can see that the magnitude of elastic energy for substrates the paper suggest for VO2 is in the range of 5 meV/atom, while these same substrates are on the order of <0.1 meV on MP. If possible, I was wondering if anyone would be able to elaborate the units on these elastic energy calculations given on MP, which I have been unable to determine from atomate2 workflows thus far, and the large discrepancy in magnitude between MP and that given by Ding et al… Thanks!

Looking further into this topic, I have verified that the origin of my problem is not my elastic tensor calculations. I have verified that the elastic tensor I derive is consistent with the elastic tensor given for mp-12083 on the Material Project
As such I will use the elastic tensor given on Material Project from here on out to justify differences in calculated elastic energies do not originate from this.

First off, in trying to troubleshoot my calculated elastic energies, I have noticed a discrepancy between the legacy Material Project data on elastic energies for suggested substrates and the new Material Project website. For example, for the pairing of mp-12083 with mp-390, it is observed that the elastic energy is given as

, while the elastic energy for this same orientation on the new Material Project is given as

While this elastic energy is too small to be shown in the units given for the new MP, querying for this value with the API provides the value is 0.000158. If the legacy API units are taken to be true, this would suggest that the new Material Project reports values in meV, but displays the units in eV.

While the link between discrepancies between the new and legacy data seems apparent, I am still unable to derive reported elastic energies when using the Material Project data. Following the workflow given in pymatgen’s interface test file, it would be expected that the elastic energy should be derived as follows

with MPRester(API_KEY) as mpr:
                struc1 = mpr.get_structure_by_material_id('mp-390')
                substrate = SpacegroupAnalyzer(struc1).get_conventional_standard_structure()
                struc2 = mpr.get_structure_by_material_id('mp-12083')
                film = SpacegroupAnalyzer(struc2).get_conventional_standard_structure()
film_elac = ElasticTensor.from_voigt(
        [521, 200, 200, 0.0, 0.0, 0.0],
        [200, 521, 200, 0.0, 0.0, 0.0],
        [200, 200, 521, 0.0, 0.0, 0.0],
        [0.0, 0.0, 0.0, 259, 0.0, 0.0],
        [0.0, 0.0, 0.0, 0.0, 259, 0.0],
        [0.0, 0.0, 0.0, 0.0, 0.0, 259]])

s = SubstrateAnalyzer()

matches = list(s.calculate(film, substrate, film_elac,lowest=True))[0]

Using a legacy API key, it can be ensured that the structures and elastic tensor match those given by the legacy API, and thus it should be expected that the observed elastic energies are also consistent with values given in the legacy MP. The resulting output can be shown to be

SubstrateMatch(film_sl_vectors=array([[3.82535000e+00, 0.00000000e+00, 2.34235132e-16],
       [6.15163198e-16, 3.82535000e+00, 2.34235132e-16]]), substrate_sl_vectors=array([[3.80271000e+00, 0.00000000e+00, 2.32848831e-16],        
       [6.11522408e-16, 3.80271000e+00, 2.32848831e-16]]), film_vectors=(array([3.82535000e+00, 0.00000000e+00, 2.34235132e-16]), array([6.15163198e-16, 3.82535000e+00, 2.34235132e-16])), substrate_vectors=(array([3.80271000e+00, 0.00000000e+00, 2.32848831e-16]), array([6.11522408e-16, 3.80271000e+00, 2.32848831e-16])), film_transformation=array([[1., 0.],
       [0., 1.]]), substrate_transformation=array([[1., 0.],
       [0., 1.]]), film_miller=(1, 0, 0), substrate_miller=(0, 0, 1), strain=Strain([[-5.90089889e-03 -2.21248271e-35  7.07779255e-33]
 [-2.21248271e-35 -5.90089889e-03  2.88889492e-34]
 [ 7.07779255e-33  2.88889492e-34  4.42496542e-35]]), von_mises_strain=0.003933932593235674, ground_state_energy=0, elastic_energy=0.0021928794472695426)

Importantly, the elastic energy for the same film and substrate orientation as given on MP is shown to be 0.00219 eV/atom, were the unit of eV/atom can be shown to be the expected unit by looking at the documentation for SubstrateAnalyzer.calculate(). The question then becomes, what is different between this calculation and the values given on MP as there is now only a 10x magnitude difference between values. While the order of magnitude of this value is consistent with what is observed in the original paper, so is the reported value on MP if the units are taken to be meV/atom, meaning that the MP elastic energy would be 0.128 meV/atom. Any guidance or explanations for how the MP elastic energies are determined would be appreciated. I have tried accounting for several factors such as dividing/multiplying values by the number of atoms in the substrate and film to see if MP values are accidentally in eV/(atom*atom) to get numbers relatively similar in magnitude, but no exact 1:1 values. Additionally, I should note that the Voigt notation that one finds for querying for mp-12083’s elastic tensor with the API is

[[148.0, 51.0, 1.0, 0.0, 0.0, -0.0], 
[51.0, 148.0, 1.0, 0.0, 0.0, -0.0], 
[1.0, 1.0, 2.0, 0.0, 0.0, -0.0], 
[0.0, 0.0, 0.0, 2.0, -0.0, 0.0], 
[0.0, 0.0, 0.0, -0.0, 2.0, 0.0], 
[-0.0, -0.0, -0.0, 0.0, 0.0, 48.0]]

which doesn’t appear to be in units of GPa or eV/Angstrom^3. If elastic energy values were calculated from this, this may explain discrepancies but I have found no indication as to what units this tensor is in for API queries. Thanks!

Thread closed due to inactivity, please open a new thread to address related issues.