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

gllbsc_dir_gap

Direct bandgap GLLB-SC.

eV

gllbsc_ind_gap

Indirect bandgap GLLB-SC.

eV

gllbsc_disc

Derivative discontinuity GLLB-SC.

eV

mpid

ID of materials in Materials project

icsd_id

ID of materials in ICSD

g0w0_gap

G0W0 gap at Gamma

eV

gw0_gap

GW0 gap at Gamma

eV

gw_gap

GW gap at Gamma

eV

hse06_gap

HSE06 gap at Gamma

eV

lda_gap

LDA gap at Gamma

eV

gllbsc_gap

GLLBSC gap at Gamma

eV

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')