Computational 2D Materials Database (C2DB)

If you are using data from this database in your research, please cite the following paper:

The Computational 2D Materials Database: High-Throughput Modeling and Discovery of Atomically Thin Crystals

Sten Haastrup, Mikkel Strange, Mohnish Pandey, Thorsten Deilmann, Per S. Schmidt, Nicki F. Hinsche, Morten N. Gjerding, Daniele Torelli, Peter M. Larsen, Anders C. Riis-Jensen, Jakob Gath, Karsten W. Jacobsen, Jens Jørgen Mortensen, Thomas Olsen, Kristian S. Thygesen

2D Materials 5, 042002 (2018)

The data can be downloaded or browsed online:

Brief description

The database contains structural, thermodynamic, elastic, electronic, magnetic, and optical properties of around 4000 two-dimensional materials distributed over more than 50 different crystal structures. The properties are calculated by DFT and many-body perturbation theory (G0W0 and the Bethe- Salpeter Equation for around 200 materials) using the GPAW code and a semi- automated ASE based workflow. The workflow and a table with the numerical settings employed for the calculation of the different properties is provided below.

../_images/workflow.png

Overview of methods and parameters used

If a parameter is not specified at a given step, its value equals that of the last step where it was specified:

Workflow step(s)

Parameters

Structure and energetics(*) (1-4)

vacuum = 15 Å; \(k\)-point density = 6.0/Å\(^{-1}\); Fermi smearing = 0.05 eV; PW cutoff = 800 eV; xc functional = PBE; maximum force = 0.01 eV/Å; maximum stress = 0.002 eV/Å\(^3\); phonon displacement = 0.01Å

Elastic constants (5)

\(k\)-point density = \(12.0/\mathrm{Å}^{-1}\); strain = \(\pm\)1%

Magnetic anisotropy (6)

\(k\)-point density = \(20.0/\mathrm{Å}^{-1}\); spin-orbit coupling = True

PBE electronic properties (7-10 and 12)

\(k\)-point density = \(12.0/\mathrm{Å}^{-1}\) (\(36.0/\mathrm{Å}^{-1}\) for DOS)

Effective masses (11)

\(k\)-point density = \(45.0/\mathrm{Å}^{-1}\); finite difference

Deformation potential (13)

\(k\)-point density = 12.0/Å\(^{-1}\); strain = \(\pm\)1%

Plasma frequency (14)

\(k\)-point density = 20.0/Å\(^{-1}\); tetrahedral interpolation

HSE band structure (8-12)

HSE06@PBE; \(k\)-point density = 12.0/Å\(^{-1}\)

\(G_0W_0\) band structure (8, 9)

\(G_0W_0\)@PBE; \(k\)-point density = \(5.0/\mathrm{Å}^{-1}\); PW cutoff = \(\infty\) (extrapolated from 170, 185 and 200 eV); full frequency integration; analytical treatment of \(W({q})\) for small \(q\); truncated Coulomb interaction

RPA polarisability (15)

RPA@PBE; \(k\)-point density = \(20.0/\mathrm{Å}^{-1}\); PW cutoff = 50 eV; truncated Coulomb interaction; tetrahedral interpolation

BSE absorbance (16)

BSE@PBE with \(G_0W_0\) scissors operator; \(k\)-point density = \(20.0/\mathrm{Å}^{-1}\); PW cutoff = 50 eV; truncated Coulomb interaction; at least 4 occupied and 4 empty bands

(*) For the cases with convergence issues, we set a (k)-point density of 9.0 and a smearing of 0.02 eV.

Versions

Version

rows

comment

2018-06-01

1888

Initial release

2018-08-01

2391

Two new prototypes added

2018-09-25

3084

New prototypes

2018-12-10

3331

Some BSE spectra recalculated due to small bug affecting absorption strength of materials with large spin-orbit couplings

Key-value pairs

key

description

unit

COD_id

COD id of parent bulk structure

D_cbm

Deformation potential at CBM (PBE)

eV

D_cbm_nosoc

Deformation potential at CBM (PBE, no SOC)

eV

D_vbm

Deformation potential at VBM (PBE)

eV

D_vbm_nosoc

Deformation potential at VBM (PBE, no SOC)

eV

ICSD_id

ICSD id of parent bulk structure

alphax

Static polarizability (x-direction)

Ang

alphay

Static polarizability (y-direction)

Ang

alphaz

Static polarizability (z-direction)

Ang

bse_binding

Exciton binding energy (BSE)

eV

c_11

Elastic tensor (xx-component)

N/m

c_12

Elastic tensor (xy-component)

N/m

c_22

Elastic tensor (yy-component)

N/m

cbm

CBM vs. vacuum (PBE)

eV

cbm_gllbsc

CBM vs. vacuum (GLLBSC)

eV

cbm_gllbsc_nosoc

CBM vs. vacuum (GLLBSC, no SOC)

eV

cbm_gw

CBM vs. vacuum (GW)

eV

cbm_gw_nosoc

CBM vs. vacuum (GW, no SOC)

eV

cbm_hse

CBM vs. vacuum (HSE)

eV

cbm_hse_nosoc

CBM vs. vacuum (HSE, no SOC)

eV

cbm_nosoc

CBM vs. vacuum (PBE, no SOC)

eV

cell_area

Area of unit-cell

Ang^2

class

Class of material

dE_NM

Energy relative to the NM state

meV/atom

deltaxc_gllbsc_nosoc

Derivative discontinuity (GLLBSC, no SOC)

eV

dipz

Dipole moment

|e|Ang

dir_gap

Direct band gap (PBE)

eV

dir_gap_gllbsc

Direct band gap (GLLBSC)

eV

dir_gap_gllbsc_nosoc

Direct band gap (GLLBSC, no SOC)

eV

dir_gap_gw

Direct band gap (GW)

eV

dir_gap_gw_nosoc

Direct band gap (GW, no SOC)

eV

dir_gap_hse

Direct band gap (HSE)

eV

dir_gap_hse_nosoc

Direct band gap (HSE, no SOC)

eV

dir_gap_nosoc

Direct band gap (PBE, no SOC)

eV

dosef_nosoc

Density of states at Fermi level

\(\text{eV}^{-1}\)

dosef_soc

Density of states at Fermi level

\(\text{eV}^{-1}\)

dynamic_stability_level

Dynamic stability

efermi_gw

Fermi level (GW)

eV

efermi_hse

Fermi level (HSE)

eV

efermi_hse_nosoc

Fermi level (HSE, no SOC)

eV

ehull

Energy above convex hull

eV/atom

emass1

Electron mass 1, direction 1

\(m_e\)

emass1_nosoc

Electron mass 1, direction 1 (no SOC)

\(m_e\)

emass2

Electron mass 1, direction 2

\(m_e\)

emass2_nosoc

Electron mass 1, direction 2 (no SOC)

\(m_e\)

esocsplit

Electron spin-orbit splitting

meV

evac

Vacuum level (no dipole corr) (PBE)

eV

evac_gllbsc

Vacuum level (no dipole corr) (GLLBSC)

eV

evac_gllbsc_nosoc

Vacuum level (no dipole corr) (GLLBSC, no SOC)

eV

evacdiff

Vacuum level difference (PBE)

eV

evacmean

Mean vacuum level (PBE)

eV

excitonmass1

Direct exciton mass 1 (PBE)

\(m_e\)

excitonmass2

Direct exciton mass 2 (PBE)

\(m_e\)

folder

Folder name

gap

Band gap (PBE)

eV

gap_gllbsc

Band gap (GLLBSC)

eV

gap_gllbsc_nosoc

Band gap (GLLBSC, no SOC)

eV

gap_gw

Band gap (GW)

eV

gap_gw_nosoc

Band gap (GW, no SOC)

eV

gap_hse

Band gap (HSE)

eV

gap_hse_nosoc

Band gap (HSE, no SOC)

eV

gap_nosoc

Band gap (PBE, no SOC)

eV

has_invsymm

Inversion symmetry

hform

Heat of formation

eV/atom

hmass1

Hole mass 1, direction 1

\(m_e\)

hmass1_nosoc

Hole mass 1, direction 1 (no SOC)

\(m_e\)

hmass2

Hole mass 1, direction 2

\(m_e\)

hmass2_nosoc

Hole mass 1, direction 2 (no SOC)

\(m_e\)

hsocsplit

Hole spin-orbit splitting

meV

is_2d

Materials is 2D

is_dir_gap

Material has direct gap (PBE)

is_dir_gap_nosoc

Material has direct gap (PBE, no SOC)

is_magnetic

Material is magnetic

is_metallic

Material is metallic

is_metallic_nosoc

Material is metallic (no SOC)

maganis_zx

Magnetic anisotropy energy (xz-component)

meV/formula unit

maganis_zy

Magnetic anisotropy energy (yz-component)

meV/formula unit

magstate

Magnetic state

minhessianeig

Minimum eigenvalue of Hessian

\(\text{eV/Ang}^2\)

monolayer_doi

Exp. monolayer reference DOI

nkinds

Number of elements

pbc

Periodic boundary conditions

plasmafrequency_x

Plasma frequency (x-direction)

\(\text{eV} \text{Ang}^{0.5}\)

plasmafrequency_y

Plasma frequency (y-direction)

\(\text{eV} \text{Ang}^{0.5}\)

prototype

Structure prototype

smaxinplane

Maximum stress in plane

\(\text{eV/Ang}^3\)

spacegroup

Space group

speed_of_sound_x

Speed of sound (x)

m/s

speed_of_sound_y

Speed of sound (y)

m/s

spin_orientation

Magnetic easy crystallographic axis

stoichiometry

Stoichiometry

thermodynamic_stability_level

Thermodynamic stability

uid

Identifier

vbm

VBM vs. vacuum (PBE)

eV

vbm_gllbsc

VBM vs. vacuum (GLLBSC)

eV

vbm_gllbsc_nosoc

VBM vs. vacuum (GLLBSC, no SOC)

eV

vbm_gw

VBM vs. vacuum (GW)

eV

vbm_gw_nosoc

VBM vs. vacuum (GW, no SOC)

eV

vbm_hse

VBM vs. vacuum (HSE)

eV

vbm_hse_nosoc

VBM vs. vacuum (HSE, no SOC)

eV

vbm_nosoc

VBM vs. vacuum (PBE, no SOC)

eV

work_function

Work function

eV

work_function_nosoc

Work function (no SOC)

eV

Example

The following python script shows how to plot the positions of the VBM and CBM.

# creates: band-alignment.png
from math import floor
import numpy as np
import matplotlib.pyplot as plt
import ase.db

# Connect to database
db = ase.db.connect('c2db.db')

rows = db.select('gap>0', prototype='MoS2', sort='gap')

labels = []
vbms = []
cbms = []
for row in rows:
    M, X = row.symbols[:2]
    label = M + X + '$_2$'
    labels.append(label)
    vbms.append(row.vbm)
    cbms.append(row.cbm)

x = np.arange(len(vbms)) + 0.5
emin = floor(min(vbms)) - 1.0

# With and height in pixels
ppi = 100
figw = 800
figh = 400

fig = plt.figure(figsize=(figw / ppi, figh / ppi), dpi=ppi)
ax = fig.add_subplot(1, 1, 1)
ax.bar(x, np.array(vbms) - emin, bottom=emin)
ax.bar(x, -np.array(cbms), bottom=cbms)
ax.set_xlim(0, len(labels))
ax.set_ylim(emin, 0)
ax.set_xticks(x)
ax.set_xticklabels(labels, rotation=90, fontsize=10)

plt.title("2H-TMD's: Positions of VBM and CBM (PBE+SOC)", fontsize=12)
plt.ylabel('Energy relative to vacuum [eV]', fontsize=10)
plt.tight_layout()
plt.savefig('band-alignment.png')

This produces the figure

../_images/band-alignment.png

Tools for creating the “Computational 2D materials” database

Requirements

Installation

Clone the code from https://gitlab.com/camd/cmr and tell Python where to find it:

$ cd ~
$ git clone git@gitlab.com:camd/cmr
$ export PYTHONPATH=~/cmr:$PYTHONPATH

Workflow

The workflow for each material is described in the submit.py file:

"""Workflow for C2DB project."""
import functools
from pathlib import Path
from myqueue.task import task

# Double cores/time at most 4 times for out of memory/time tasks:
rtask = functools.partial(task, restart=4)


def create_tasks():
    folder = Path.cwd().name
    if folder not in ['nm', 'fm', 'afm']:
        return [rtask('c2db.relax@8:1d')]

    if Path('duplicate').is_file() or Path('stop').is_file():
        return []

    tasks = [rtask('c2db.duplicate@1:15m', deps='../c2db.relax'),
             rtask('c2db.gs@8:1h', deps='c2db.duplicate'),
             rtask('c2db.densk@8:3h', deps='c2db.gs'),
             rtask('c2db.stiffness@8:6h', deps='c2db.densk'),
             rtask('c2db.phonons@8:14h', deps='c2db.stiffness'),
             rtask('c2db.stop@1:15m', deps='c2db.phonons'),
             rtask('c2db.anisotropy@1:1h', deps='c2db.stop'),
             rtask('c2db.vacuumlevels@8:1h', deps='c2db.anisotropy'),
             rtask('c2db.bandstructure@8:3h', deps='c2db.anisotropy'),
             rtask('c2db.polarizability@24:10h', deps='c2db.stop',
                   diskspace=2),
             rtask('c2db.plasmafrequency@8:4h', deps='c2db.anisotropy'),
             rtask('c2db.hse@24:20h', deps='c2db.anisotropy',
                   diskspace=1),
             rtask('c2db.hseinterpol@8:10m', deps='c2db.hse'),
             rtask('c2db.gap@8:3h', deps='c2db.anisotropy'),
             rtask('c2db.deformation_potentials@8:6h', deps='c2db.gap'),
             rtask('c2db.em@8:10h', deps='c2db.gap'),
             rtask('c2db.embzcut@8:10h', deps='c2db.em'),
             rtask('c2db.pdos@8:1h', deps='c2db.gap'),
             rtask('c2db.emexciton@8:6h', deps='c2db.pdos'),
             rtask('c2db.fermi_surface@1:10m', deps='c2db.gap')]

    if folder == 'nm':
        tasks.append(rtask('c2db.gllbsc@8:3h', deps='c2db.densk'))

    if 0:
        import numpy as np
        pbe_gap = np.load('gap_soc.npz')['gap']
        if pbe_gap > 0.3:
            tasks.extend([rtask('c2db.gw@192:xeon24:2d', deps='c2db.gs'),
                          rtask('c2db.gwinterpol@8:10m', deps='c2db.gw')])

    return tasks

As an example, let’s do MoS\(_2\) in the CdI2 prototype (T-phase). Create a main folder and a subfolder:

$ mkdir TMD
$ cd TMD
$ mkdir MoS2-CdI2

Create a start.traj file containing something close to the groundstate structure:

$ python3
>>> from ase.build import mx2
>>> a = mx2('MoS2', '1T', a=3.20, thickness=3.17, vacuum=7.5)
>>> a.write('MoS2-CdI2/start.traj')

Run the relax.py step:

$ mq submit c2db.relax -R 8x12h MoS2-CdI2/

or:

$ mq workflow ~/cmr/c2db/submit.py MoS2-CdI2/

Note

The \(mq\) tool is described here

Once the relax.py task has finished, one or more folders will appear (nm/, fm/, afm/) and you can run the whole workflow:

$ mq workflow ~/cmr/c2db/submit.py MoS2-CdI2/*m/

When everything is ready you can collect the results in a database file and inspect the results in a web-browser:

$ python3 -m c2db.collect -r oqmd12.db MoS2-CdI2/*m/ > collect.out
$ ase db c2db.db -M ~/cmr/c2db/custom.py -w

where oqmd12.db is the database of 1- and 2-component reference systems.

Dependencies

List of tasks, dependencies and files created (temporary files in parenthesis):

task

dependency

created files

relax

nm, fm, afm, relax-nm.traj, relax-fm.traj, relax-afm.traj

duplicate

relax

duplicate

gs

duplicate

gs.gpw

densk

gs

densk.gpw

stiffness

densk

strain_quantities.npz

phonons

stiffness

phonon.*.pckl

stop

phonons

stop

anisotropy

stop

anisotropy_zy.npz

vacuumlevels

anisotropy

vacuumlevels.gpw, vacuumlevels.npz

bandstructure

anisotropy

bs.gpw, eigs_spinorbit.npz

polarizability

stop

polarizability.npz, polarizability_tetra.npz, (es.gpw), (chi_tetra+0+0+0.pckl), (chi+0+0+0.pckl)

plasmafrequency

anisotropy

plasmafreq_tetra.npz, plasmafreq.npz, (es_plasma.gpw)

hse

anisotropy

hse_nowfs.gpw, hse_eigenvalues.npz, hse_eigenvalues_soc.npz, (hse.gpw)

hseinterpol

hse

hse_bandstructure.npz, hse_bandstructure3.npz

gap

anisotropy

gap.npz, gap_soc.npz

deformation_potentials

gap

em

gap

em_circle_cb_nosoc.gpw, em_circle_cb_soc.gpw, em_circle_vb_nosoc.gpw, em_circle_vb_soc.gpw, em_circle_cb_nosoc.npz, em_circle_cb_soc.npz, em_circle_vb_nosoc.npz, em_circle_vb_soc.npz

embzcut

em

em_bs_spin={}_band={}_bt={}_soc={}.gpw

pdos

gap

pdos.gpw, pdos.json, pdos_soc.json

emexciton

pdos

em_exciton_soc.npz, em_exciton_soc.gpw

fermi_surface

gap

fermi_surface_soc.npz, fermi_surface.npz

gllbsc

densk

gllbsc.json, gllbsc.gpw

gw

gs

gs_gw_nowfs.gpw, g0w0_results.pckl, g0w0_results_GW.pckl, (gs_gw.gpw), (g0w0.tmp)

gwinterpol

gw

gw.npz, gw_extra.npz