New Light Harvesting Materials

Ivano E. Castelli, Falco Hüser, Mohnish Pandey, Hong Li, Kristian S. Thygesen, Brian Seger, Anubhav Jain, Kristin Persson, Gerbrand Ceder, and Karsten W. Jacobsen

New Light Harvesting Materials Using Accurate and Efficient Bandgap Calculations

Advanced Energy Materials, Juli 22, 2014

Key-value pairs

key description unit
g0w0_gap \(G_0W_0\) gap at \(\Gamma\) eV
gllbsc_dir_gap Direct bandgap calculated with GLLB-SC. eV
gllbsc_disc Derivative discontinuity calculated with GLLB-SC. eV
gllbsc_gap GLLBSC gap at \(\Gamma\) eV
gllbsc_ind_gap Indirect bandgap calculated with GLLB-SC. eV
gw0_gap \(GW_0\) gap at \(\Gamma\) eV
gw_gap \(GW\) gap at \(\Gamma\) eV
hse06_gap HSE06 gap at \(\Gamma\) eV
icsd_id ID of materials in ICSD  
lda_gap LDA gap at \(\Gamma\) eV
mpid ID of materials in Materials project  

Band gaps

Here, we calculated the errors in the band gaps at \(\Gamma\) for a set of 20 ternary and quaternary materials releative to self-consitent GW:

import numpy as np
import ase.db

con = ase.db.connect('mp_gllbsc.db')

data = []
for row in con.select('g0w0_gap'):
    ref = row.gw_gap
    data.append([row.gw0_gap - ref,
                 row.g0w0_gap - ref,
                 row.lda_gap - ref,
                 row.gllbsc_gap - ref,
                 row.gllbsc_gap - row.gllbsc_disc - ref,
                 row.hse06_gap - ref])
errors = np.array(data).T

labels = ['`GW_0`', '`G_0W_0`', 'LDA', 'GLLB-SC - `\Delta_{xc}`',
          'GLLB-SC - KS', 'HSE06']
f = open('gaps.csv', 'w')
print('Material, Mean error [eV], Mean absolute error [eV]', file=f)
for label, e in zip(labels, errors):
    print('{}, {:.2f}, {:.2f}'.format(label, e.mean(), abs(e).mean()), file=f)
Material Mean error [eV] Mean absolute error [eV]
\(GW_0\) -0.48 0.48
\(G_0W_0\) -0.79 0.79
LDA -2.34 2.34
GLLB-SC - \(\Delta_{xc}\) -0.08 0.62
GLLB-SC - KS -1.23 1.23
HSE06 -0.88 0.94
../_images/gaps2.svg

Here is how to make the plot:

# creates: gaps.svg
"""Plot the GLLB-SC, HSE06, GW approximations bandgaps for a
set of 20 ternary and quaternary materials"""

import re
import numpy as np
import matplotlib.pyplot as plt
import ase.db

# Connect to database:
con = ase.db.connect('mp_gllbsc.db')

# Extract gaps data:
data = []
for row in con.select('g0w0_gap', sort='gw_gap'):
    data.append([row.formula,
                 row.gw_gap,
                 row.gw0_gap,
                 row.g0w0_gap,
                 row.lda_gap,
                 row.gllbsc_gap,
                 row.gllbsc_gap - row.gllbsc_disc,
                 row.hse06_gap])

# Make a bar-chart:
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(1, 1, 1)

w = 0.25  # width of bars
x = np.arange(len(data))
i = 1
for color, shift, label in [('y', 0, 'GW'),
                            ('m', 0, 'GW$_0$'),
                            ('r', 0, 'G$_0$W$_0$'),
                            ('k', 0, 'LDA'),
                            ('b', w, 'GLLB-SC - $\Delta_{xc}$'),
                            ('c', w, 'GLLB-SC - KS'),
                            ('g', 2 * w, 'HSE06')]:
    rects = ax.bar(x + shift, [gaps[i] for gaps in data], w,
                   color=color, label=label)
    i += 1

plt.legend(loc=2)
ax.set_ylabel('Bandgap at $\Gamma$ [eV]')
ax.set_xticks(x + w)
names = [re.sub(r'(\d+)', r'$_\1$', gaps[0]) for gaps in data]
ax.set_xticklabels(names, rotation=60)
plt.tight_layout()
plt.savefig('gaps.svg')