0000 PyXtal
0000 PyXtal
article info a b s t r a c t
Article history: We present PyXtal, a new package based on the Python programming language, used to generate
Received 26 November 2019 structures with specific symmetry and chemical compositions for both atomic and molecular systems.
Received in revised form 11 December 2020 This software provides support for various systems described by point, rod, layer, and space group
Accepted 17 December 2020
symmetries. With only the inputs of chemical composition and symmetry group information, PyXtal
Available online 31 December 2020
can automatically find a suitable combination of Wyckoff positions with a step-wise merging scheme.
Keywords: Further, when the molecular geometry is given, PyXtal can generate different dimensional organic
Symmetry crystals with molecules occupying both general and special Wyckoff positions. Optionally, PyXtal also
Crystallography accepts user-defined parameters (e.g., cell parameters, minimum distances and Wyckoff positions).
Structure prediction In general, PyXtal serves three purposes: (1) to generate custom structures, (2) to modulate the
Wyckoff sites
structure by symmetry relations, (3) to interface the existing structure prediction codes that require the
Global optimization
generation of random symmetric structures. In addition, we provide several utilities that facilitate the
Phase transition
analysis of structures, including symmetry analysis, geometry optimization, and simulations of powder
X-ray diffraction (XRD). Full documentation of PyXtal is available at https://pyxtal.readthedocs.io.
Program summary
Program Title: PyXtal
CPC Library link to program files: https://doi.org/10.17632/wfyxyhjzwx.1
Licensing provisions: MIT [1]
Programming language: Python 3
Nature of problem: Knowledge of structure at the atomic level is the key to understanding materials’
properties. Typically, the structure of a material can be determined either from experiment (such
as X-ray diffraction, spectroscopy, microscopy) or from theory (e.g., enhanced sampling, structure
prediction). In many cases, the structure needs to be solved iteratively by generating a number of
trial structure models satisfying some constraints (e.g., chemical composition, symmetry, and unit cell
parameters). Therefore, it is desirable to have a computational code that is able to generate such trial
structures in an automated manner.
Solution method: The PyXtal package is able to generate many possible random structures for both
atomic and molecular systems with all possible symmetries. To generate the trial structure, the
algorithm can either start with picking the symmetry sites randomly from high to low multiplicities,
or use sites that are predefined by the user. For molecules, the algorithm can automatically detect the
molecules’ symmetry and place them into special Wyckoff positions while satisfying their compatible
site symmetry. With the support of symmetry operations for point, rod, layer and space groups, PyXtal
is suitable for the computational modeling of systems from zero, one, two, and three dimensional bulk
crystals.
References:
[1] https://opensource.org/licenses/MIT
© 2021 Elsevier B.V. All rights reserved.
1. Introduction
✩ The review of this paper was arranged by Prof. D.P. Landau.
✩✩ This paper and its associated computer program are available via the
Knowing the atomic structure is the key to understanding
Computer Physics Communication homepage on ScienceDirect (http://www.
sciencedirect.com/science/journal/00104655).
the properties of materials. Ideally, the full atomic structure
∗ Corresponding author. can be experimentally determined through single crystal X-ray
E-mail address: [email protected] (Q. Zhu). diffraction. If a single crystal sample is not available, only partial
https://doi.org/10.1016/j.cpc.2020.107810
0010-4655/© 2021 Elsevier B.V. All rights reserved.
S. Fredericks, K. Parrish, D. Sayre et al. Computer Physics Communications 261 (2021) 107810
for the current step and try again until the maximum limit of degrees. Thus, only a random vector is needed to generate the
attempts is encountered. This ensures that the algorithm stops lattice constants.
in a reasonable amount of time while still giving each generated For low-dimensional systems, not all three unit cell axes are
parameter a chance for success. For certain inputs, structure periodic. Therefore, the algorithm must be altered slightly, as
generation may take many attempts or fail after the maximum described below.
number of attempts. Typically, these failures indicate that the For the 2D case, we chose c to be the non-periodic axis
input parameters are not likely to produce a realistic structure by default. For layer groups 3–7 (P112, P11m, P11a, P112/m,
without fine-tuning the atomic positions. In such cases, a larger P112/a), c is also the unique axis; for all other layer groups, a
unit cell volume or a smaller distance tolerance may prevent fail- is the unique axis. The length of c (the crystal’s ‘‘thickness") is
ure. Below we discuss the technical details implemented during an optional parameter which can be specified by the user. If no
structure generation. thickness is given, the algorithm will automatically compute a
random value based on a Gaussian distribution centered at the
2.1.1. Wyckoff compatibility checking cubic root of the estimated volume. In other words, c will have
Before generating a trial structure, PyXtal performs a WP the same length as the other axes on average.
compatibility check. Since WPs in different space groups have For the 1D case, c is the periodic axis by default. For rod groups
different multiplicities, this is a required step that ensures com- 3–7 (P221, Pm11, Pc11, P2/m11, P2/c11), a is the unique axis;
patibility between a stoichiometry and its assigned space group. for all other rod groups, c is the unique axis. Instead of choosing
For example, consider the space group Pn-3n (#222), which has a a value for the thickness, we constrain the unit cell based on
minimum WP of 2a, followed by 6b. To create a crystal structure the cross-sectional area of the a–b plane. This area can be either
with 4 atoms in the unit cell for this symmetry group, the com- specified by the user or generated randomly. As with the 2D
bination of Wyckoff positions must add up to 4. Here, this is not and 3D cases, there is no preference for any axis to be longer or
possible. The position 2a cannot be repeated, because it falls on shorter than the others unless specified by the user.
the exact coordinates (1/4, 1/4, 1/4) and (3/4, 3/4, 3/4). A second For 0D clusters, we constrain the atoms to lie within either a
set of atoms in the 2a position would overlap the atoms in the sphere or an ellipsoid, depending on the point group. For spher-
first position, which is physically impossible. ically or polyhedrally symmetric point groups (C1 , Ci , D2 , D2h , T ,
Thus, from our previous discussion, it is necessary to check the Th , O, Td , Oh , I, Ih ), we define a sphere centered on the origin. For
input stoichiometry against the WPs of the desired space group. all other point groups (which have a unique rotational axis), we
define an ellipsoid with its c-axis aligned with the rotational axis.
PyXtal implements this by iterating through all possible combina-
The a- and b-axes are always of equal length to ensure rotational
tions of WPs within the confinements of the given stoichiometry.
symmetry about the c-axis. The relative lengths for the ellipsoidal
As soon as a valid combination is found, the check returns True.
axes are chosen in the same way as for the 3D tetragonal case.
Otherwise, if no valid combination is found, the check returns
In order for the 0D case to be compatible with the 1D, 2D, and
False and the generation attempt raises a warning.
3D cases, we encode the spheres and ellipsoids as lattices (a
Some space groups allow valid combinations of WPs, but do
cubic lattice for a sphere, or tetragonal lattice for an ellipsoid).
not permit many (or any) positional degrees of freedom within
Then, when generating atomic coordinates, we check whether the
the structure. It may also be the case that the allowed com-
randomly chosen point lies within the sphere or ellipsoid. If not,
binations result in atoms that are too close together. In these
we simply retry until it does.
cases, PyXtal will attempt generation as usual: it will continue
to search for a compatible structure until the maximum limit is
2.1.3. Wyckoff position selection and merging
reached, or until a successful generation occurs. In the event that
The central building block for crystals in PyXtal is the WP.
structure generation repeatedly fails for a given combination of Once a space group and lattice are chosen, WPs are inserted
space group and stoichiometry, the user should make note and one at a time to add structure. In PyXtal, we closely follow the
avoid the combination going forward. algorithm provided in Ref. [9] to place the atoms in different WPs.
In general, PyXtal starts with the largest available WP, which is
2.1.2. Lattice generation the general position of the symmetry group. If the number of
The first step in PyXtal’s structure generation is the choice of atoms required is equal to or greater than the size of the general
unit cell. Depending on the symmetry group, a specific type of position, the algorithm proceeds. If fewer atoms are needed, the
lattice must be generated. For all crystals, the conventional cell next largest WP (or set of WPs) is chosen, in order of descending
choice is used to avoid ambiguity. Lattice information can be pre- multiplicity. This is done to ensure that larger positions are pre-
defined by the user in either vector form (a, b, c, α , β , γ ) or in ferred over smaller ones; this reflects the greater prevalence of
the form of a 3 × 3 matrix. If lattice information is not provided, larger multiplicities seen in nature.
PyXtal will attempt to estimate the volume based on the chemical Once a WP is chosen, a random 3-vector between (0, 0, 0) and
composition, resulting in the generation of a random unit cell (1, 1, 1) is created. We call this the generating point for the WP.
which satisfies the input constraints. Using the closest projection of this vector onto the WP (the WP
The most general case is the triclinic cell, from which other being a periodic set of points, lines, or planes), one obtains a set
cell types can be obtained by applying certain constraints. To of coordinates in real space (the atomic positions for that WP).
generate a triclinic cell, 3 real numbers are randomly chosen Then, the distances between these coordinates are checked. If the
(using a Gaussian distribution centered at 0) as the off-diagonal atom–atom distances are all greater than a pre-defined limit, the
values for a 3 × 3 shear matrix. By treating this shear matrix as WP is kept and the algorithm continues. If any of the distances are
a cell matrix, one obtains 3 lattice angles. For the lattice vector too small, it is an indication that the WP would not occur with the
lengths, a random 3-vector between (0, 0, 0) and (1, 1, 1) is chosen generating point. In this case, the coordinates are merged
chosen (using a Gaussian distribution centered at (0.5, 0.5, 0.5)). together into a smaller WP, if possible. This merging continues
The relative values of the x, y, and z coordinates are used for a, b, until the atoms are no longer too close together (see Fig. 2).
and c respectively and scaled based on the required volume. For To merge into a smaller position, the original generating point
other cell types, any free parameters are obtained using the same is projected into each of the remaining WPs. The WP with the
methods as for the triclinic case, and then constraints are applied. smallest translation between the original point and the trans-
In the tetragonal case, for example, all angles will be fixed to 90 formed point is chosen, provided that (1) the new WP is a subset
3
S. Fredericks, K. Parrish, D. Sayre et al. Computer Physics Communications 261 (2021) 107810
Fig. 3. Distorted Unit Cell. Due to the cell’s high level of distortion, the closest
neighbors for a single point lie more than two unit cells away. In this case,
the closest point to the central point is located two cells to the left and one
cell diagonal-up. To find this point using PyXtal’s distance checking method, a
5 × 5 × 5 unit cell will be created. For this reason, a limit is placed on the
distortion of randomly generated lattices.
For any two given points, PyXtal first considers only the sep-
aration vector which lies within the ‘‘central’’ unit cell spanning
Fig. 2. Wyckoff Position Merging Example. Shown are possible merging of the between (0, 0, 0) and (1, 1, 1). For example, if the original two
general position 8c of the 2D point group 4 mm. Moving from 8c to 4b (along (fractional) points are (−8.1, 5.2, −4.8) and (2.7, −7.4, 9.3), one
the solid arrows) requires a smaller translation than from 8c to 4a (along the can directly obtain the separation vector (−10.8, 12.6, −14.1).
dashed arrows). Thus, if the atoms in 8c were too close together, PyXtal would
merge them into 4b instead of 4a. The atoms could be further merged into
This vector lies outside of the central unit cell, so we translate by
position 1o by following the arrows shown in the bottom right image. the integer-valued vector (11.0, −12.0, 15.0) to obtain (0.2, 0.6,
0.9), which lies within the central unit cell. PyXtal also considers
those vectors lying within a 3 × 3 × 3 supercell centered on the
of the original one, and (2) the new points are not too close first vector. In this example, these would include (1.2, 1.6, 1.9),
to each other. If the atoms are still too close together after all (−0.8, −0.4, −0.1), (−0.8, 1.6, 0.9), etc. This gives a total of 27
possible mergings, the WP is discarded and another attempt is separation vectors to consider. After converting to absolute co-
made. ordinates (by dotting the fractional vectors with the cell matrix),
Once a WP is successfully filled, the inter-atomic distances one can calculate the Euclidean length of each of these vectors
between the current WP and the already-added WPs are checked. and thus find the shortest distance.
If all distances are acceptable, the algorithm continues. More WPs Note that this does not work for certain vectors within some
are then added as needed until the desired number of atoms is highly distorted lattices (see Fig. 3). Often, the shortest Euclidean
reached. At this point, either a satisfactory structure has been distance is accompanied by the shortest fractional distance, but
generated, or the generation has failed. If the generation fails, whether this is the case or not depends on how distorted the
then choosing either smaller distances tolerances or a larger lattice is. However, because randomly generated lattices in PyXtal
volume factor might increase the chances of success. However, are required to have no angles smaller than 30 degrees or larger
altering these quantities too drastically may result in less real- than 150 degrees, this is not an issue.
istic crystals. Common sense and system-specific considerations For two given sets of atoms (for example, when cross-checking
should be applied when adjusting these parameters. two WPs in the same crystal), one can calculate the shortest
inter-atomic distances by applying the above procedure for each
2.1.4. Distance checking unique pair of atoms. This only works if it has already been es-
To produce structures with realistic bonds and bond lengths, tablished that both sets on their own satisfy the needed distance
the generated atoms should not be too close together. In PyXtal, requirements.
this means that, by default, two atoms should be no closer than Thanks to symmetry, one needs not calculate every atomic
the covalent bond length between them. However, for a given pair between two WPs. For two WPs, A and B, it is only necessary
application, the user may decide that shorter or longer cutoff to calculate either (1) the separations between one atom in A
distances are appropriate. For this reason, PyXtal has a custom tol- and all atoms in B, or (2) one atom in B and all atoms in A. This
erance matrix class which allows the user to define the distances is because the symmetry operations which duplicate a point in
allowed between any two atomic species. There are also options a WP also duplicate the separation vectors associated with that
to use the metallic bond lengths, or to simply scale the allowed point. This is also true for a single WP; for example, in a Wyckoff
distances by some factor. position with 16 points, only 15 (the number of pairs involving
Because crystals have periodic symmetry, any point in a crystal one atom) distance calculations are needed, as opposed to 120
actually corresponds to an infinite lattice of points. Likewise, any (the total number of pairs). This can significantly speed up the
separation vector between two points actually corresponds to calculation for larger WPs.
an infinite number of separation vectors. For the purposes of For a single WP, it is necessary to calculate the distances for
distance checking, only the shortest of these vectors is relevant. each unique atom–atom pair after symmetry reduction, but also
When a lattice is non-Euclidean, the problem of finding shortest for the lattice vectors for each atom by itself. Since the lattice is
distances with periodic boundary conditions is non-trivial, and the same for all atoms in the crystal, this check only needs to be
the general solution can be computationally expensive [29]. So in- performed on a single atom of each species. For atomic crystals,
stead, PyXtal uses an approximate solution based on assumptions this just means ensuring that the generated lattice vectors are
about the lattice geometry: sufficiently long.
4
S. Fredericks, K. Parrish, D. Sayre et al. Computer Physics Communications 261 (2021) 107810
4. Example usages
# perturbation without changing the symmetry Finding the ground state of LJ clusters of given size is an
# C2 = C1.copy () established benchmark for global optimization methods [5]. Here,
# C2. apply_perturbation () it shows that local optimization, combined with randomly gener-
ated symmetric clusters, is sufficient to solve the problem with
# lower the symmetry from cubic to tetragonal
C2 = C1. subgroup_once (H =141) small sizes of LJ clusters. For the purposes of this benchmark,
we focus on three cluster sizes, namely 38, 55, and 75. For each
# Compute the XRD cluster size, 20,000 structures were generated: 10,000 with no
xrd1 = C1. get_XRD () pre-defined symmetry and 10,000 with symmetry chosen ran-
xrd2 = C2. get_XRD ()
domly from among PyXtal’s 56 built-in point groups. A potential
1
# Compare two structures by XRD of 4( r 12 − r16 ) was assigned to each atom–atom pair. Each struc-
p1 = xrd1. get_profile () ture was locally optimized using the conjugate gradient (CG)
p2 = xrd2. get_profile () method in SciPy’s optimize.minimize function [35]. As shown in
s = Similarity (p1 , p2 , x_range =[15 , 90]) Fig. 7, the ground state was found much more frequently when
s.show( filename =’xrd - comparison .png ’)
the initial structures possessed some point group symmetry. With
Listing 3: Example usages of PyXtal’s structural manipulation pre-symmetrization, the ground state was found 278 times for
and analysis utilities size 38 clusters, 73 times for size 55, and 1 time for size 75.
Without pre-symmetrization, the ground state was not found at
all. Though the numbers of hits on the ground states may change
4.3. Structure prediction
in another run, the statistical rule still holds. Second, while the
ground state is found more frequently with pre-symmetrization,
PyXtal allows the user to generate random crystal structures
the average energy is higher. This is because pre-symmetrization
with given symmetry constraints. There are several parameters
spans the possible structure space more effectively, while purely
which can be specified, but only a few are necessary. Below is
random structures are more clustered around a specific energy
an example script to generate 100 random clusters for 36 carbon
range.
atoms.
from pyxtal import pyxtal 5.2. Carbon and silicon crystals with ab-initio calculations
from random import choice
pgs = range (1, 33) We also combined PyXtal with ab-initio codes to search for
clusters = [] the elemental allotropes of carbon and silicon at 0 K and ambient
for i in range (100) : pressure. 1000 random structures each were generated for 2, 4, 6,
while True:
8, and 16 atoms in the primitive unit cell. A random space group
pg = choice (pgs)
cluster = pyxtal () between 2 and 230 was chosen for each structure. This gave a
cluster . from_random (0, pg , [’C’], [36] , total of 5000 structures for each element. Each structure was
force_pass =True) optimized using the PBE–GGA functional [42] as implemented in
if cluster . valid : the VASP code [43,44], following a multiple-step strategy from
clusters . append ( cluster )
break low, normal, to accurate precision. The final geometries were then
calculated with an energy cutoff of 600 eV and 0.15 K-spacing. For
Listing 4: A Python script to generate 100 random C36 clusters carbon, the expected structures of diamond and graphite were
found frequently in each run, as well as londsdaelite, sp3 carbon
With the generated structures, one can perform further anal-
with various ring topologies, and various multi-layer graphite-
ysis such as geometry optimization and powder X-ray diffrac-
like structures. Similarly, our simulation on silicon yielded the
tion pattern simulation. PyXtal also provides the preliminary
modules for such tasks. Alternatively, the trial structures can be ground state of cubic diamond structures for each of the runs with
easily adapted to the structural objects for other libraries, such different numbers of atoms per primitive unit cell, demonstrating
as ASE [39] or Pymatgen [30], or be dumped to text files in cif, that adding symmetry constraints is beneficial to quickly identify
xyz, or POSCAR format. More examples can be found in the online the low-energy structures with high symmetry. Moreover, it is
documentation https://pyxtal.readthedocs.io. again interesting to analyze the energy distribution of the ran-
domly generated structures as shown in Fig. 8. For both carbon
5. Applications and silicon, the energy landscape appears to be narrower for size-
2 primitive cells. It appears that beyond about 4, the number
Our primary purpose for developing PyXtal is to provide more of atoms in the primitive cell has little influence on the energy
likely trial structures to solve the structural determination prob- distribution. This again suggests that pre-symmetrization is an ef-
lem. It can be useful for at least two cases. First, one can generate fective means to prevent the clustering of glassy structures found
7
S. Fredericks, K. Parrish, D. Sayre et al. Computer Physics Communications 261 (2021) 107810
Acknowledgments
References
[1] A.R. Oganov, Modern Methods of Crystal Structure Prediction, John Wiley
& Sons, 2011, http://dx.doi.org/10.1002/9783527632831.
[2] A.R. Oganov, C.J. Pickard, Q. Zhu, R.J. Needs, Nat. Rev. Mater. 4 (2019)
331–348, http://dx.doi.org/10.1038/s41578-019-0101-8.
[3] C.J. Pickard, R. Needs, J. Phys. Condens. Matter 23 (5) (2011) 053201,
http://dx.doi.org/10.1088/0953-8984/23/5/053201.
[4] R. Martoňák, A. Laio, M. Parrinello, Phys. Rev. Lett. 90 (7) (2003) 075503,
http://dx.doi.org/10.1103/PhysRevLett.90.075503.
[5] D.J. Wales, J.P.K. Doye, J. Phys. Chem. A 101 (28) (1997) 5111–5116,
http://dx.doi.org/10.1021/jp970984n.
[6] A.R. Oganov, C.W. Glass, J. Chem. Phys. 124 (24) (2006) 244704, http:
Fig. 8. The box and whisker plots for the energy distribution of the randomly //dx.doi.org/10.1063/1.2210932.
generated (a) carbon and (b) silicon crystals with 2, 4, 6, 8, 16 atoms per [7] D.C. Lonie, E. Zurek, Comput. Phys. Comm. 182 (2) (2011) 372–387, http:
primitive unit cell. //dx.doi.org/10.1016/j.cpc.2010.07.048.
[8] Y. Wang, J. Lv, L. Zhu, Y. Ma, Phys. Rev. B 82 (9) (2010) 094116, http:
//dx.doi.org/10.1103/PhysRevB.82.094116.
[9] A.O. Lyakhov, A.R. Oganov, H.T. Stokes, Q. Zhu, Comput. Phys. Comm. 184
in pure random generations for large systems [9]. Therefore, (4) (2013) 1172–1182, http://dx.doi.org/10.1016/j.cpc.2012.12.009.
pre-symmetrization provides a better choice for global energy [10] Y. Wang, J. Lv, L. Zhu, Y. Ma, Comput. Phys. Comm. 183 (10) (2012)
2063–2070, http://dx.doi.org/10.1016/j.cpc.2012.05.008.
optimization. In addition, pre-symmetrization can provide a more [11] H. Wondratschek, M.I. Aroyo, Int. Tables Crystallogr. A (2016) 12–21.
diverse dataset for training machine learning force fields [45,46]. [12] P. Avery, E. Zurek, Comput. Phys. Comm. 213 (2017) 208–216, http://dx.
doi.org/10.1016/j.cpc.2016.12.005.
6. Conclusion [13] R. Domingos, K.M. Shaik, B. Militzer, Phys. Rev. B 98 (2018) 174107,
http://dx.doi.org/10.1103/PhysRevB.98.174107.
8
S. Fredericks, K. Parrish, D. Sayre et al. Computer Physics Communications 261 (2021) 107810
[14] Q. Zhu, A. Oganov, C. Glass, H.T. Stokes, Acta Crystallogr. Sect. B 68 (2012) [30] S.P. Ong, W.D. Richards, A. Jain, G. Hautier, M. Kocher, S. Cholia, D.
215–26, http://dx.doi.org/10.1107/S0108768112017466. Gunter, V.L. Chevrier, K.A. Persson, G. Ceder, Comput. Mater. Sci. 68 (2013)
[15] A.M. Reilly, R.I. Cooper, C.S. Adjiman, S. Bhattacharya, A.D. Boese, J.G. 314–319, http://dx.doi.org/10.1016/j.commatsci.2012.10.028.
Brandenburg, P.J. Bygrave, R. Bylsma, J.E. Campbell, R. Car, D.H. Case, R. [31] I.-H. Suh, K.H. Park, W.P. Jensen, D.E. Lewis, J. Chem. Educ. 74 (7) (1997)
Chadha, J.C. Cole, K. Cosburn, H.M. Cuppen, F. Curtis, G.M. Day, R.A. DiStasio 800, http://dx.doi.org/10.1021/ed074p800.
Jr, A. Dzyabchenko, B.P. van Eijck, D.M. Elking, J.A. van den Ende, J.C. Facelli, [32] H. Wondratschek, U. Müller, Int. Union. Crystallogr. (2006) http://dx.doi.
M.B. Ferraro, L. Fusti-Molnar, C.-A. Gatsiou, T.S. Gee, R. de Gelder, L.M. org/10.1107/97809553602060000110.
Ghiringhelli, H. Goto, S. Grimme, R. Guo, D.W.M. Hofmann, J. Hoja, R.K.
[33] M.I. Aroyo, J.M. Perez-Mato, C. Capillas, E. Kroumova, S. Ivantchev, G.
Hylton, L. Iuzzolino, W. Jankiewicz, D.T. de Jong, J. Kendrick, N.J.J. de Klerk,
Madariaga, A. Kirov, H. Wondratschek, Z. Kristallogr. Cryst. Mater. 221 (1)
H.-Y. Ko, L.N. Kuleshova, X. Li, S. Lohani, F.J.J. Leusen, A.M. Lund, J. Lv, Y.
(2006) 15–27, http://dx.doi.org/10.1524/zkri.2006.221.1.15.
Ma, N. Marom, A.E. Masunov, P. McCabe, D.P. McMahon, H. Meekes, M.P.
[34] T.E. Oliphant, A Guide To NumPy, 1, Trelgol Publishing, USA, 2006.
Metz, A.J. Misquitta, S. Mohamed, B. Monserrat, R.J. Needs, M.A. Neumann,
J. Nyman, S. Obata, H. Oberhofer, A.R. Oganov, A.M. Orendt, G.I. Pagola, C.C. [35] P. Virtanen, R. Gommers, T.E. Oliphant, M. Haberl and, T. Reddy, D.
Pantelides, C.J. Pickard, R. Podeszwa, L.S. Price, S.L. Price, A. Pulido, M.G. Cournapeau, E. Burovski, P. Peterson, W. Weckesser, J. Bright, S.J. van der
Read, K. Reuter, E. Schneider, C. Schober, G.P. Shields, P. Singh, I.J. Sugden, Walt, M. Brett, J. Wilson, K. Jarrod Millman, N. Mayorov, A.R.J. Nelson, E.
K. Szalewicz, C.R. Taylor, A. Tkatchenko, M.E. Tuckerman, F. Vacarro, M. Jones, R. Kern, E. Larson, C. Carey, İ. Polat, Y. Feng, E.W. Moore, J. Vand
Vasileiadis, A. Vazquez-Mayagoitia, L. Vogt, Y. Wang, R.E. Watson, G.A. erPlas, D. Laxalde, J. Perktold, R. Cimrman, I. Henriksen, E.A. Quintero, C.R.
de Wijs, J. Yang, Q. Zhu, C.R. Groom, Acta Crystallogr. Sect. B 72 (4) (2016) Harris, A.M. Archibald, A.H. Ribeiro, F. Pedregosa, P. van Mulbregt, SciPy
439–459, http://dx.doi.org/10.1107/S2052520616007447. 1.0–Fundamental Algorithms for Scientific Computing in Python, ArXiv
[16] W.H. Baur, D. Kassner, Acta Crystallogr. Sect. B 48 (4) (1992) 356–369, E-Prints, S... Contributors, 2019, arXiv:1907.10121.
http://dx.doi.org/10.1107/S0108768191014726. [36] W. McKinney, Data structures for statistical computing in python, in: S.
[17] B.P. van Eijck, J. Kroon, J. Comput. Chem. 20 (8) (1999) 799–812, http://dx. van der Walt, J. Millman (Eds.), Proceedings of the 9th Python in Science
doi.org/10.1002/(SICI)1096-987X(199906)20:8<799::AID-JCC6>3.0.CO;2-Z. Conference, 2010, pp. 51–56.
[18] J.R. Holden, Z. Du, H.L. Ammon, J. Comput. Chem. 14 (4) (1993) 422–437, [37] A. Togo, I. Tanaka, Spglib: A Software Library for Crystal Symmetry
http://dx.doi.org/10.1002/jcc.540140406. Search, 2018, arXiv:1808.01590.
[19] D.H. Case, J.E. Campbell, P.J. Bygrave, G.M. Day, J. Chem. Theory Comput.
[38] R. Guha, M.T. Howard, G.R. Hutchison, P. Murray-Rust, H. Rzepa, C.
12 (2) (2016) 910–924, http://dx.doi.org/10.1021/acs.jctc.5b01112.
Steinbeck, J.K. Wegner, E. Willighagen, J. Chem. Inf. Model. 46 (2006) 991,
[20] M.A. Neumann, F.J. Leusen, J. Kendrick, Angew. Chem. Int. Ed. 120 (13)
http://dx.doi.org/10.1021/ci050400b.
(2008) 2461–2464, http://dx.doi.org/10.1002/anie.200704247.
[39] A.H. Larsen, J.J. Mortensen, J. Blomqvist, I.E. Castelli, R. Christensen, M.
[21] F. Curtis, X. Li, T. Rose, Á. Vázquez-Mayagoitia, S. Bhattacharya, L.M.
Ghiringhelli, N. Marom, J. Chem. Theory Comput. 14 (4) (2018) 2246–2264, Dułak, J. Friis, M.N. Groves, B. Hammer, C. Hargus, E.D. Hermes, P.C.
http://dx.doi.org/10.1021/acs.jctc.7b01152. Jennings, P.B. Jensen, J. Kermode, J.R. Kitchin, E.L. Kolsbjerg, J. Kubal, K.
[22] R. Tom, T. Rose, I. Bier, H. O’Brien, A. Vazquez-Mayagoitia, N. Marom, Kaasbjerg, S. Lysgaard, J.B. Maronsson, T. Maxson, T. Olsen, L. Pastewka,
Comput. Phys. Comm. 250 (2020) 107170, http://dx.doi.org/10.1016/j.cpc. A. Peterson, C. Rostgaard, J. Schiøtz, O. Schütt, M. Strange, K.S. Thygesen,
2020.107170. T. Vegge, L. Vilhelmsen, M. Walter, Z. Zeng, K.W. Jacobsen, J. Phys.
[23] A.G. Shtukenberg, C.T. Hu, Q. Zhu, M.U. Schmidt, W. Xu, M. Tan, B. Kahr, Conden. Matter 29 (27) (2017) 273002, http://dx.doi.org/10.1088/1361-
Cryst. Growth Des. 17 (6) (2017) 3562–3566, http://dx.doi.org/10.1021/acs. 648x/aa680e.
cgd.7b00673. [40] R. de Gelder, R. Wehrens, J.A. Hageman, J. Comput. Chem. 22 (3)
[24] Q. Zhu, A.G. Shtukenberg, D.J. Carter, T.-Q. Yu, J. Yang, M. Chen, P. Raiteri, (2001) 273–289, http://dx.doi.org/10.1002/1096-987X(200102)22:3<273::
A.R. Oganov, B. Pokroy, I. Polishchuk, P.J. Bygrave, G.M. Day, A.L. Rohl, AID-JCC1001>3.0.CO;2-0.
M.E. Tuckerman, B. Kahr, J. Am. Chem. Soc. 138 (14) (2016) 4881–4889, [41] S. Habermehl, P. Mörschel, P. Eisenbrandt, S.M. Hammer, M.U. Schmidt,
http://dx.doi.org/10.1021/jacs.6b01120. Crystal Engineering and Materials 70 (2) (2014) 347–359, http://dx.doi.
[25] A.G. Shtukenberg, Q. Zhu, D.J. Carter, L. Vogt, J. Hoja, E. Schneider, H. Song, org/10.1107/S2052520613033994.
B. Pokroy, I. Polishchuk, A. Tkatchenko, et al., Chem. Sci. 8 (7) (2017) [42] J.P. Perdew, K. Burke, M. Ernzerhof, Phys. Rev. Lett. 77 (1996) 3865–3868,
4926–4940, http://dx.doi.org/10.1039/C7SC00168A.
http://dx.doi.org/10.1103/PhysRevLett.77.3865.
[26] W. Xu, Q. Zhu, C.T. Hu, Angew. Chem. Int. Ed. 129 (8) (2017) 2062–2066,
[43] G. Kresse, J. Furthmüller, Comput. Mater. Sci. 6 (1996) 15–50, http://dx.
http://dx.doi.org/10.1002/ange.201610977.
doi.org/10.1016/0927-0256(96)00008-0.
[27] J. Yang, C.T. Hu, X. Zhu, Q. Zhu, M.D. Ward, B. Kahr, Angew. Chem. Int. Ed.
56 (34) (2017) 10165–10169, http://dx.doi.org/10.1002/anie.201703028. [44] G. Kresse, J. Furthmüller, Phys. Rev. B 54 (1996) 11169–11186, http:
[28] M. Tan, A. Shtukenberg, S. Zhu, W. Xu, E. Dooryhee, S.M. Nichols, M.D. //dx.doi.org/10.1103/PhysRevB.54.11169.
Ward, B. Kahr, Q. Zhu, Roy revisited, again: The eighth solved structure, [45] V.L. Deringer, C.J. Pickard, G. Csányi, Phys. Rev. Lett. 120 (2018) 156001,
Faraday Discuss, http://dx.doi.org/10.1039/C8FD00039E. http://dx.doi.org/10.1103/PhysRevLett.120.156001.
[29] L. Babai, Combinatorica 6 (1) (1986) 1–13, http://dx.doi.org/10.1007/ [46] E.V. Podryabinkin, E.V. Tikhonov, A.V. Shapeev, A.R. Oganov, Phys. Rev. B
BF02579403. 99 (2019) 064114, http://dx.doi.org/10.1103/PhysRevB.99.064114.