Computational 2D Materials Database (C2DB)

This database contains calculated structural and electronic properties of a range of 2D materials. The database contains the results presented in 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

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.

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 Conduction band minimum vs vacuum (PBE) eV
cbm_gllbsc Conduction band minimum vs vacuum (GLLBSC) eV
cbm_gllbsc_nosoc Conduction band minimum vs vacuum (GLLBSC, no SOC) eV
cbm_gw Conduction band minimum vs vacuum (GW) eV
cbm_gw_nosoc Conduction band minimum vs vacuum (GW, no SOC) eV
cbm_hse Conduction band minimum vs vacuum (HSE) eV
cbm_hse_nosoc Conduction band minimum vs vacuum (HSE, no SOC) eV
cbm_nosoc Conduction band minimum 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
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}\)
dynamic_stability_level Dynamic stability  
e_distortion Distortion energy per atom eV
e_magnetic Energy change due to magnetic solution eV
ehull Energy above convex hull eV/atom
emass1 Electron 1 mass 1 \(m_e\)
emass1_nosoc Electron 1 mass 1 (no SOC) \(m_e\)
emass2 Electron 1 mass 2 \(m_e\)
emass2_nosoc Electron 1 mass 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
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\)
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 1 mass 1 \(m_e\)
hmass1_nosoc Hole 1 mass 1 (no SOC) \(m_e\)
hmass2 Hole 1 mass 2 \(m_e\)
hmass2_nosoc Hole 1 mass 2 (no SOC) \(m_e\)
hsocsplit Hole spin-orbit splitting meV
is_2d 2D  
is_dir_gap Direct gap (PBE)  
is_dir_gap_nosoc Direct gap (PBE, no SOC)  
is_magnetic Magnetic  
is_metallic Metallic (PBE)  
is_metallic_nosoc Metallic (PBE, no SOC)  
maganis_zx Magnetic anisotropy (xz-component) meV/formula unit
maganis_zy Magnetic anisotropy (yz-component) meV/formula unit
magstate Magnetic state  
minhessianeig Minimum eigenvalue of Hessian \(\text{eV/Ang}^2\)
monolayer_doi Manolayer-DOI  
nkinds Number of elements  
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  
q2d_macro_df_slope Slope of macroscopic 2D static dielectric function at q=0 ?
r_distortion Distortion distance change (max) Ang
spacegroup Space group  
speed_of_sound_x Speed of sound (x) m/s
speed_of_sound_y Speed of sound (y) m/s
thermodynamic_stability_level Thermodynamic stability  
uid Identifier  
vbm Valence band maximum vs vacuum (PBE) eV
vbm_gllbsc Valence band maximum vs vacuum (GLLBSC) eV
vbm_gllbsc_nosoc Valence band maximum vs vacuum (GLLBSC, no SOC) eV
vbm_gw Valence band maximum vs vacuum (GW) eV
vbm_gw_nosoc Valence band maximum vs vacuum (GW, no SOC) eV
vbm_hse Valence band maximum vs vacuum (HSE) eV
vbm_hse_nosoc Valence band maximum vs vacuum (HSE, no SOC) eV
vbm_nosoc Valence band maximum 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."""
from pathlib import Path
from myqueue.task import task

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

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

    tasks = [task('c2db.phonons@8:14h', deps='../c2db.relax'),
             task('', deps='../c2db.relax'),
             task('c2db.vacuumlevels@8:1h', deps=''),
             task('c2db.bandstructure@8:3h', deps=''),
             task('c2db.polarizability@24:10h', deps=''),
             task('c2db.plasmafrequency@8:4h', deps=''),
             task('c2db.hse@24:20h', deps=''),
             task('c2db.hseinterpol@8:10m', deps='c2db.hse'),
             task('c2db.ehmasses@8:3h', deps=''),
             task('c2db.em@8:10h', deps='c2db.ehmasses'),
             task('c2db.embzcut@8:10h', deps='c2db.em'),
             task('c2db.strains@8:6h', deps='c2db.ehmasses'),
             task('c2db.pdos@8:1h', deps='c2db.ehmasses'),
             task('c2db.emexciton@8:6h', deps='c2db.pdos'),
             task('c2db.fermi_surface@1:10m', deps='c2db.ehmasses')]

    if folder == 'nm':
        tasks.append(task('c2db.gllbsc@8:3h', deps='c2db.ehmasses'))
        tasks.append(task('c2db.anisotropy@1:1h', deps='c2db.ehmasses'))

    if 0:
        tasks.extend([task('', deps=''),
                      task('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 MoS2-CdI2/*m/ > collect.out
$ ase db c2db.db -M ~/cmr/c2db/ -w