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

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.

../_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

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
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  
e_distortion Distortion energy per atom eV
e_magnetic Energy change due to magnetic solution eV
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 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
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\)
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 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  
q2d_macro_df_slope Slope of macroscopic 2D static dielectric function at q=0 ?
r_distortion Distortion distance change (max) Ang
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
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

rtask = functools.partial(task, restart=True)


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'),
             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('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:
        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 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 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 MoS2-CdI2/*m/ > collect.out
$ ase db c2db.db -M ~/cmr/c2db/custom.py -w