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 2000 two-dimensional materials distributed over more than 30 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.


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.


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


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 ='gap>0', prototype='MoS2', sort='gap')

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

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), np.array(vbms) - emin, bottom=emin), -np.array(cbms), bottom=cbms)
ax.set_xlim(0, len(labels))
ax.set_ylim(emin, 0)
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)

This produces the figure


Tools for creating the “Computational 2D materials” database



Clone the code from and tell Python where to find it:

$ cd ~
$ git clone


The workflow for each material is described in the 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('', deps='c2db.duplicate'),
             rtask('c2db.densk@8:3h', deps=''),
             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',
             rtask('c2db.plasmafrequency@8:4h', deps='c2db.anisotropy'),
             rtask('c2db.hse@24:20h', deps='c2db.anisotropy',
             rtask('c2db.hseinterpol@8:10m', deps='c2db.hse'),
             rtask('', deps='c2db.anisotropy'),
             rtask('c2db.deformation_potentials@8:6h', deps=''),
             rtask('c2db.em@8:10h', deps=''),
             rtask('c2db.embzcut@8:10h', deps='c2db.em'),
             rtask('c2db.pdos@8:1h', deps=''),
             rtask('c2db.emexciton@8:6h', deps='c2db.pdos'),
             rtask('c2db.fermi_surface@1:10m', deps='')]

    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('', deps=''),
                          rtask('c2db.gwinterpol@8:10m', deps='')])

    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 import mx2
>>> a = mx2('MoS2', '1T', a=3.20, thickness=3.17, vacuum=7.5)
>>> a.write('MoS2-CdI2/start.traj')

Run the relax step:

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


$ mq workflow ~/cmr/c2db/ MoS2-CdI2/


The \(mq\) tool is described here

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

$ mq workflow ~/cmr/c2db/ 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/ -w

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


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