Disorder-MC: extraction and analysis of distribution of structural disorder in crystalline materials reported in the ICSD
50% of entries in the inorganic crystal structure database (ICSD) have structural disorder (defined as the presence of partial occupancies). Disorder brings many complications. Characterization (for example, ICSD contains only spatially average structures, so partial structural information), modeling (supercells, averaging over replicas, temperature dependence of disorder, etc.), and structure prediction (non-existent for disordered materials) are often a challenge. However, it also brings opportunities to tune the material properties.
In this work, we aimed to analyze the content of the ICSD database. This database contains experimental data on structures of inorganic compounds determined with X-ray and neutron scattering. These methods show only spatially averaged disorder. To perform analysis, we introduced a classification of different types of disorders and introduced features to describe them. I also suggested including disorder information in the description of structure types.
The main motivation behind this work was to develop a way to describe disordered compounds and use available experimental data in the area of materials discovery.
This repository describes the correct model and code for the paper [citation is at the bottom]. There are 2 main differences between the versions of the paper: (1) Disorder classification is different. In this paper, the classification of compounds is based on the classification of crystallographic orbits. The following classes of orbits are distinguished:
- ordered (O);
- substitutionally disordered (S);
- vacancies (V);
- combination of substitutional disorder and vacancies (SV);
- combination of vacancies and positional disorder (VP): these are cases when there are two sites of one or several orbits which are too close to each other to be occupied simultaniously, and both of them have partial occupancies;
- combination of substitutional disorder, vacancies, and positional disorder (SVP): the situation here is the same as in (VP) but the sites are occupied by more than 1 type of species.
(2) Calculation of configurational entropy is different. It plays the role for positionally disordered orbits (VP and SVP). Here, it is estimated with the Monte Carlo method.
To use the code:
(1) clone repositiory using your favourite method
(2) create anacoda environment with all nessecary packages:
conda env create -f env.yml
- Tools:
- disorder.cifreader.Read_CIF
- disorder.disorder.Disorder
- disorder.entropy.Entropy
- Jupyter notebooks/ python scripts:
- disorder_examples.ipynb
- data_extraction.py
- analysis.ipynb
- Data files:
- Disorder labels for all compounds [link]
- Disorder Wyckoff sequences, entropies, fractions of disordered sites for all compounds [link]
disorder.cifreader.Read_CIF(file: str, occ_tol: float = 1.05): the reader of crystallographic structures from CIFs. The main difference of this tool compared to analogious tool from pymatgen and ASE is that it distinguishes ordered orbits occupied by the same element as different orbits (it makes sence as different orbits represent geometrically different sets of points). For example, in Hg2 Na2 Se6 Sn2 (ICSD col code 013796) there are two orbits occupied by Se: ocupies two orbits 16l, and 8h. Atoms on those two orbits will be assigned different orbit labels by Read_CIF in contrast to pymatgen and ASE readers.
from disorder.cifreader import Read_CIF
file=Read_CIF(file)
formula=file.read_formula
ID=file.read_id
Z=file.z
cell=file.cell
space_group=file.space_group
# Reading all symmetry operations from CIF, output is a list
symmetry_operations=file.symmetry()
# Reading all orbit infromation, output is a dataframe
orbits=file.orbits()
# Generating positions for all atoms, with proper orbit labels.
# Output is whether dataframe, or dataframe and pymatgen Structure object
positions=file.positions(orbits, symmetry_operations, pystruct=False)
disorder.disorder.Disorder(file, radius_file='data/all_radii.csv'): Disorder class aims to assign disorder labels to each orbit in the structure spacified by the input CIF
from disorder.disorder import Disorder
disorder=Disorder(CIF_file, radius_file='data/all_radii.csv')
# making classification
output = disorder.classify()
disorder.disorder.Entropy(file, radius_file='data/all_radii.csv'): class to calculate mixing and configurational entropy from the input CIF
from disorder.entropy import Entropy
entropy=Entropy(CIF_file, radius_file='data/all_radii.csv')
configurational_entropy=entropy.calculate_entropy()
Configurational entropy is calculated analytically for S, V, SV orbits, and Monte Carlo is used to estimate the reduction in entropy due to site intersection for VP and SVP orbits.
disorder_examples.ipynb : this notebook demonstrates classification of examples from the paper
data_extraction.py: the notebook contains a script to extract disorder data from the database of CIFs, compounds containing H are discarded
analysis.ipynb: script allowing to reproduce graphics from the paper
StructureTypes.ipynb: calculation of Wyckoff disorder sequences, and fractions of sites wth each disorder type
Authors thank the Leverhulme Trust for funding through the Leverhulme Research Centre for Functional Materials Design (RC-2015-036).
I am the ex-first author of this work, and I produced all the results, the code, and co-wrote the paper. I withdrew my authorship over disagreement about the model and the conflict with the management. Unfortunately, due to the actions of the University of Liverpool on behalf of one of my previous co-authors, I can't share the full version of the correct paper for the interested readers to make their own judgment, and have the full picture. Science should be open, but it is not.
The paper which was published in Journal of Applied Crystallography:
@article{patyukova2024disorder,
title={Classification and statistical analysis of structural disorder in crystalline materials},
author={Dmytro Antypov, Chris M. Collins, Matthew S. Dyer,b John B. Claridgeb and Matthew J. Rosseinsky},
year={2025},
journal={J. Appl. Cryst.},
pages={659-677},
issue={58},
doi={https://doi.org/10.1107/S1600576725003000}
}
