New Light Harvesting Materials

Electronic bandgap calculations are presented for 2400 experimentally known materials from the Materials Project database and the bandgaps, obtained with different types of functionals within density functional theory and (partial) self-consistent GW approximation, are compared for 20 randomly chosen compounds forming an unconventional set of ternary and quaternary 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

project

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', r'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, r'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(r'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')