Database of ABSe3 materials

Peter Bjørn Jørgensen, Estefanía Garijo del Río, Mikkel N. Schmidt and Karsten Wedel Jacobsen

Materials property prediction using symmetry-labeled graphs as atomic position independent descriptors

Phys. Rev. B. 100, 104114 - Published 26 September 2019

The data

Brief description

This database contains the relaxed structures of 5976 ternary selenides.

All entries have the stoichiometry ABSe3, where A and B are transition metals. We have substituted the A and B metals by all the most common transition metals in a systematic way. For simplicity, the following elements: Cr, Mn, Fe and Co, have been avoided.

The prototypes used as initial templates are: hexagonal P63/mmc structure of BaNiO3, orthorhombic Pnma structure of NH4CdCl3/Sn2S3, monoclinic C2/m FePS3, monoclinic Pc structure of PbPS3, trigonal R3 structureof MnPSe3 and hexagonal P61 structure of Al2S3.

The structures have been relaxed using PBEsol, and both the PBE and PBEsol ground state energies are provided.

Key-value pairs





Identifier of the structure: distinguishes the ABSe3 from the BASe3 structure. The combination of prototype and name form a unique identifier.


Heat of formation obtained with PBEOQMD unaries and binaries have been used as a reference



PBE total energy



Prototype indicating the original structure used in the atomic substitutions


Space group as obtained with spglib


Band gaps of TeHfS3 calculated in the different phases:

# creates: abse3_heatmap.svg
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from ase.db import connect


# Atoms names:
elements = ['Cs', 'Rb', 'K', 'Na', 'Li', 'Ba', 'Sr', 'Ca',
            'Y', 'Sc', 'La', 'Zr', 'Hf', 'Ti',
            'Nb', 'Ta', 'V', 'Mo', 'W', 'Re',  # 'Mn', 'Fe',
            'Os', 'Ru',  # 'Co',
            'Ir', 'Rh',
            'Ni', 'Pt', 'Pd', 'Au', 'Ag', 'Cu', 'Mg', 'Hg', 'Cd', 'Zn',
            'Be', 'Tl', 'In', 'Al',
            'Ga', 'Pb', 'Sn', 'Ge', 'Si', 'B', 'Bi', 'Sb', 'As', 'P', 'Te']

# Define the prototypes and assign them a color code
prototypes = ['NH4CdCl3', 'PbPS3', 'MnPSe3', 'BaNiO3', 'Al2S3', 'FePS3']
colors = {'NH4CdCl3': 1,
          'PbPS3': 2,
          'MnPSe3': 3,
          'BaNiO3': 4,
          'Al2S3': 5,
          'FePS3': 6}

# Get data for the plot
db = connect('abse3.db')

data = np.zeros((len(elements), len(elements)))
for i, A in enumerate(elements):
    for j, B in enumerate(elements):
        name = f'{A}{B}Se3'
        de_min = 100000
        if db.count('name=' + name) == 0:
        for row in'name=' + name):
            if row.pbe_hof < de_min:
                de_min = row.pbe_hof
                prototype = row.prototype

        data[i, j] = colors[prototype]

# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(10, 7.5))

# Generate a custom diverging colormap
cmap = ['white', '#3F3075',
        'tab:orange', 'tab:olive',
        'tab:blue', 'tab:purple', 'tab:pink']

# Draw the heatmap with the mask and correct aspect ratio
p = sns.heatmap(data, cmap=cmap, square=True, linewidths=.5, cbar=False)

# Place the plot ticks correctly
x = [i + 0.5 for i in range(49)]
plt.xticks(x, elements, rotation='vertical')
plt.yticks(x, elements, rotation='horizontal')

# Add labels
plt.xlabel('B atom')
plt.ylabel('A atom')

# Handle the legend
handles = []
for prototype in prototypes:
    i = colors[prototype]
    handles.append(mpatches.Patch(color=cmap[i], label=prototype))

plt.legend(handles=handles, bbox_to_anchor=(1.05, 1), loc=2)

# Save the figure