0% found this document useful (0 votes)
58 views9 pages

0000 PyXtal

PyXtal is a Python library designed for generating crystal structures with specific symmetries and chemical compositions for atomic and molecular systems. It automates the generation of trial structures based on user-defined inputs such as chemical composition and symmetry group, and includes features for symmetry analysis and geometry optimization. The library supports various symmetry operations and is suitable for modeling zero to three-dimensional crystals, with full documentation available online.

Uploaded by

sougatp
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
58 views9 pages

0000 PyXtal

PyXtal is a Python library designed for generating crystal structures with specific symmetries and chemical compositions for atomic and molecular systems. It automates the generation of trial structures based on user-defined inputs such as chemical composition and symmetry group, and includes features for symmetry analysis and geometry optimization. The library supports various symmetry operations and is suitable for modeling zero to three-dimensional crystals, with full documentation available online.

Uploaded by

sougatp
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Computer Physics Communications 261 (2021) 107810

Contents lists available at ScienceDirect

Computer Physics Communications


journal homepage: www.elsevier.com/locate/cpc

PyXtal: A Python library for crystal structure generation and symmetry


analysis✩ , ✩✩

Scott Fredericks, Kevin Parrish, Dean Sayre, Qiang Zhu
Department of Physics and Astronomy, University of Nevada Las Vegas, Las Vegas, NV 89154, USA

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

structural information can be extracted from various charac-


terizations, such as powder X-ray diffraction/absorption, Raman
spectroscopy, nuclear magnetic resonance, and electron
microscopy. Based on this partial structural information (e.g.,
symmetry, unit cell), a number of trial structures are constructed
and optimized at their corresponding thermodynamic condi-
tions. The simulated pattern for each relaxed structure is then
compared with the observed one. By doing this iteratively, the
structure can be finally resolved. It has been previously demon-
strated that structures can be predicted computationally using
first-principles [1,2]. The basic idea of computational structure
prediction is to guess the correct crystal structure under spe-
cific conditions by computationally sampling a wide range of
possible structures via different global optimization techniques
(e.g., random search [3], metadynamics [4], basin hopping [5],
evolutionary algorithms [6,7], particle swarm optimization [8]).
After many attempts, the most energetically stable structure
found is the one most likely to exist.
For structure determination from either partial experimental
information or pure computation, a number of trial structures are Fig. 1. PyXtal structure generation flowchart. Generation is based on inputs from
needed. It is generally believed that by beginning with already- the user.
symmetric structures, fewer attempts are needed to find the
global energy minimum [3,9]. For inorganic crystals, symmetry
constraints have been encoded in many computational structure of Z ′ (meaning molecules can occupy special WPs). So far, there
prediction codes such as AIRSS [3], USPEX [9], CALYPSO [10] is no single code which enables the generation of molecular
and XtalOpt [7]. For a given crystal with symmetry, the atomic crystals with arbitrary Z ′ , varying from fractional to multiple
positions are classified by Wyckoff positions (WP) [11]. Two integers. While 90% of organic crystals in the Cambridge Struc-
approaches are used to place the atoms into the Wyckoff sites ture Database (CSD) have Z ′ =1, recent advances in experimental
so that the structure satisfies the desired symmetry. One is to polymorph searching and crystal engineering highlight the rich
pre-generate a set of WPs and then add atoms to these sites [10, variety of multi-component crystals (co-crystals, salts, solvates,
12,13]. The other is to place atoms to the most general WPs and etc.) as well as crystal structures with multiple molecules in
then merge them to the special sites if there exist close atomic the asymmetric unit. For instance, many well-studied molecules,
pairs [9,14]. This will be repeated until the desired stoichiometry including aspirin [23], resorcinol [24], coumarin [25], glycine [26],
is achieved. The development of new computational tools has DDT [27], and ROY [28], were found to adopt crystal structures
allowed the structures of many new and increasingly complex with Z ′ > 1. Lastly, neither Randspg nor Genarris supports
materials to be anticipated [2]. the generation of low dimensional crystals, which require ex-
For the prediction of organic crystals, the role of symmetry is plicit consideration of layer/rod/point-group (instead of space-
even more pronounced. In the periodically conducted Blind Tests group) symmetry operations. Collectively, these cases motivated
of organic crystal structure prediction organized by the Cam- us to develop a standalone Python program called PyXtal which
bridge Crystallographic Data Centre [15], most research groups can be used for customized structure generation for different-
attempted to reduce the structure generation to a limited range dimensional systems, including atomic clusters and 1D/2D/3D
of space group choices with one molecule in the asymmetric atomic/molecular crystals. In Sections 2 and 3 , we will detail the
unit (Z ′ ). This is based on a statistical analysis that most or- algorithms and the software dependencies. The basic usages of
ganic crystals tend to crystallize in only a few space groups PyXtal will be introduced in Section 4, followed by two example
with Z ′ = 1 [16]. Currently, there exist a few free packages [17, studies using PyXtal in the context of structure prediction in Sec-
18] which allow the generation of random molecular crystals tion 5. Finally, we summarize the features of PyXtal and conclude
with Z ′ = 1. Combined with modern structure search algorithms the manuscript in Section 6.
(including quasi-random [19], parallel tempering [20], genetic
algorithms [21], and evolutionary methods [14]), one can perform 2. Algorithms
an extensive search for the plausible structures. Their energies
can then be evaluated with different energy models from the The core algorithms in PyXtal involve (1) generation of random
empirical to ab-initio level. A recent blind test [15] has shown symmetric crystals and (2) modulation of structures according to
that the combination of effective structure generation and an the symmetry relation.
energy ranking scheme can predict not only the structure of sim-
ple rigid molecules, but also the molecules representing real-life 2.1. Structure generation
challenges.
Despite the fact that many programs have their own built- PyXtal adopts the following algorithm to generate a trial struc-
in functions to generate crystals with specific space groups or ture. First, the user inputs their choice of dimension (0, 1, 2, or
clusters with specific point groups, most of these functions are 3), symmetry group, stoichiometry, and relative volume of the
implemented in the main packages and cannot work in a stan- unit cell. Optionally, additional parameters may be chosen that
dalone manner. To our knowledge, there is only one open source constrain the unit cell and maximum inter-atomic distance toler-
code Randspg [12] that provides the interface to generate 3D ances. Next, PyXtal checks if the stoichiometry is compatible with
atomic crystal structures. Similarly, most molecular crystal gen- the choice of symmetry group. If the check passes, trial structure
erators only support molecules occupying the general WPs with generation begins. Fig. 1 shows a flowchart of the algorithm.
Z ′ = 1, except for the recent development of Genarris 2.0 [22] Each step has a maximum number of attempts. If the genera-
which is able to deal with structures having a non-integer value tion attempt fails at any point, the algorithm will revert progress
2
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

that inversional symmetry does not add any constraints, since


the inversion center is always located at the molecule’s center
of mass.
3. Choose up to two non-collinear axes from the site sym-
metry and calculate the angle between them. Find all conjugate
operation pairs (with the same order and type) in the molecular
point symmetry with the same angle between the axes, and
store the rotation which maps the pairs of axes onto each other.
For example, if the site symmetry were mmm, then we could
choose two reflectional axes, say the x- and y-axes or the y-
and z-axes. Then, we would look for two reflection operations in
the molecular symmetry group. If the angle between these two
Fig. 4. Dependence of shortest distances on molecular orientation. Rotation operation axes is also 90 degrees, we would store the rotation
of the molecules about the a or b (but not the c) axis would cause the that maps the two molecular axes onto the Wyckoff axes. We
benzene molecules to overlap. PyXtal checks for overlap whenever a molecular
would also do this for every other pair of reflections with 90
orientation is altered.
degrees separating them.
4. For a given pair of axes, there are two rotations which can
map one onto the other. There is one rotation which maps the
For molecules, the process is slightly more complicated. De-
first axis directly onto the second and another rotation which
pending on the molecule’s orientation within the lattice, the
maps the first axis onto the opposite of the second axis. Depend-
inter-atomic distances can change. Additionally, one must cal-
ing on the molecular symmetry, the two resulting orientations
culate the distances not just between molecular centers, but
may or may not be symmetrically equivalent. So, using the list
between every unique atom–atom pair. This increases the num-
of rotations calculated in step 3, remove redundant orientations
ber of needed calculations in rough proportion to the square of
which are equivalent to each other.
size of the molecules. As a result, this is typically the largest time
5. For each found orientation, check that the rotated molecule
cost for generation of molecular crystals. The issue of checking
is symmetric under the Wyckoff site symmetry. To do this, simply
the lattice is also dependent on molecular orientation. Thus,
check the site symmetry operations one at a time by applying
the lattice must be checked for every molecular orientation in
each operation to the molecule and checking for equivalence with
the crystal. To do this, the atoms in the original molecule are
the untransformed molecule.
checked against the atoms in periodically translated copies of the
6. For the remaining valid orientations, store the rotation ma-
molecule. Here, standard atom–atom distance checking is used.
trix and the number of degrees of freedom. If two axes were used
While several approximate methods for inter-molecular distance
checking exist, their performance is highly dependent on the to constrain the molecule, then there are no degrees of freedom. If
molecular shape and number of atoms. The simplest method one axis is used, then there is one rotational degree of freedom,
is to model the molecule as a sphere, in which case only the and we store the axis about which the molecule may rotate. If
center–center distances are needed. This works well for certain no axes are used (because there are only point operations in the
molecules, like buckminsterfullerene, which have a large number site symmetry), then there are three (stored internally as two)
of atoms and are approximately spherical in shape. But a spherical degrees of freedom, meaning the molecule can be rotated freely
model works poorly for irregularly shaped molecules like ben- in 3 dimensions.
zene (see Fig. 4), which may have short separations along the PyXtal performs these steps for every WP in the symmetry
perpendicular axis, but must be further apart along the planar group and stores the nested list of valid orientations. When a
axes. We provide spherical distance checking as an option for the molecule must be inserted into a WP, an allowed orientation is
user, but direct atom–atom distance checking is used by default. randomly chosen from this list. This forces the overall symmetry
group to be preserved since symmetry-breaking WPs do not
2.1.5. Molecular orientations have any valid orientations to choose from. The above algorithm
In crystallography, atoms are typically assumed to be spheri- is particularly useful to generate molecular crystals with non-
cally symmetric point particles with no well-defined orientation. integer number of molecules in the asymmetric unit, which occur
Since the object occupying a crystallographic WP is usually an frequently for molecules with high point group symmetry.
atom, it is further assumed that the object’s symmetry group One important consideration is whether a symmetry group
contains the WP’s site symmetry as a subgroup. If this is the will produce inverted copies of the constituent molecules. In
case, the only remaining condition for occupation of a WP is the many cases, a chiral molecule’s mirror image will possess dif-
location within the unit cell. However, if the object is instead ferent chemical or biological properties [31]. For pharmaceutical
a molecule, then the WP compatibility is also determined by applications in particular, one may not want to consider crystals
orientation and shape. containing mirror molecules. By default, PyXtal does not generate
To handle the general case, one must ensure that the object is crystals with mirror copies of chiral molecules. The user can
(1) sufficiently symmetric, and is (2) oriented such that its sym- choose to allow inversion if desired.
metry operations are aligned with the Wyckoff site symmetry.
The result is that objects with different point group symmetries 2.2. Structure modulation
are only compatible with certain WPs. For a given molecule and
WP, one can find all valid orientations as follows: In many applications, it is often necessary to derive a new
1. Determine the molecule’s point group and point group structure from the parent structure models. The main concept
operations. This is currently handled by Pymatgen’s built-in Point- is to start from a simple, highly symmetrical crystal structure
GroupAnalyzer class [30], which produces a list of symmetry op- and to derive more complicated structures by applying a fairly
erations for the molecule. small distortion or chemical substitution. Noticeable examples
2. Associate an axis to every symmetry operation. For a ro- include non-reconstructive phase transitions and catalogue of
tation or improper rotation, we use the rotational axis. For a structural prototype. In structure prediction methods such as
mirror plane, we use an axis perpendicular to the plane. Note simulated annealing and evolutionary algorithms, the generation
5
S. Fredericks, K. Parrish, D. Sayre et al. Computer Physics Communications 261 (2021) 107810

4. Example usages

PyXtal can be either used as a binary executable or stand-alone


library for use in Python scripts. Below we introduce the basic
usages in brief.

4.1. Command line utilities

Currently, several utilities are available to access the different


functionality of PyXtal. They include:
Fig. 5. A schematic example to illustrate group–subgroup transition from Fd-3m
(8a) to I41 /amd (4a). 1. pyxtal_symmetry.py
2. pyxtal_main.py
3. pyxtal_test.py
of new structures are usually obtained by applying a random First, the users are advised to run the pyxtal_test.py to quickly
perturbation on both lattice vectors and atomic coordinates. In test if all modules are working correctly after the installation. The
this context, the introduction of symmetry relation can reduce rest of the utilities are designed for different analysis purposes.
the search space greatly. PyXtal provides two ways of structure The pyxtal_symmetry.py utility allows one to easily access the
manipulation based on the symmetry constraints. symmetry information for a given symmetry group using either
the group name or international number.
2.2.1. Perturbation on asymmetric unit
$ pyxtal_symmetry .py -s 64
The most straightforward way to preserve the crystal sym- -- Spacegroup --# 64 (Cmce)--
metry is to perturb only the atoms in the asymmetric unit. For 16 gsite symm: 1
atomic crystals, we only apply a random perturbation to each 8fsite symm: m..
Wyckoff site if it has free coordinates. For molecular crystals, the 8esite symm: .2.
whole molecule can be reoriented along the allowed rotational 8dsite symm: 2..
8csite symm: -1
axes. If the molecule has flexible rotors, additional perturbation 4bsite symm: 2/m..
on these dihedral angles can be applied as well. Optionally, the 4asite symm: 2/m..
cell parameters can be changed as well based on the symmetry
constraints. Applying the symmetry-preserved mutation can be Listing 1: Example usage of the pyxtal_symmetry.py utility.
used to effectively search for molecular crystals in a constrained
The pyxtal_main.py can be used to directly generate one trial
space group symmetry.
structure based on the given symmetry group and chemical com-
position. Below, we give the example scripts to generate different
2.2.2. Group–subgroup transition
types of symmetric objects, including
When one crystal is converted to another by a phase transi-
tion, the symmetries of the crystal structures are usually related. 1. a random C60 cluster with Ih point group symmetry;
The so called group–subgroup has been well discussed mathe- 2. a trial diamond structure with Fd-3m space group symme-
matically. It is possible to list all possible subgroup types for every try;
space-group type and to specify the subgroups in a general way 3. a crystal of two C60 molecules per primitive unit cell with
by formulae. The international crystallography volume [32], as Cmc21 symmetry
well as the online Bilbao Crystallographic Server [33], have pro-
vided the symmetry relations between a given space group G and $ pyxtal_main .py -e C -n 60 -d 0 -s Ih
$ pyxtal_main .py -e C -n 2 -s 227
its possible maximal translationengleiche (t) and klassengleiche
$ pyxtal_main .py -m -e C60 -n 4 -s 36
(k) subgroups H. Ideally, to complete the transition from G to H,
one needs to know the cell transformation matrix, as well as the Listing 2: Example usages of the pyxtal_main utility.
Wyckoff splitting scheme. For a given crystal structure, PyXtal
allows to either systematically extract all possible transformation The generated structures will be saved to text files in cif format
(subject to a cutoff index of symmetry reduction), or randomly for crystals and xyz format for clusters.
pick one possible transformation path between G and H. Fig. 5
shows an example to illustrate the transition from a structure 4.2. Structure modulation and analysis
occupying 8a in Fd-3m to another structure occupying 4a in
I41 /amd symmetry. In addition to structure generation and manipulation, PyXtal
also provides several other utilities, such as XRD analysis. Below,
3. Dependencies we give the example scripts to (1) generate a cubic crystal, (2)
perturb the structure to lower the crystal symmetry by following
All of the code is written in Python 3. Like many other Python the group–subgroup relation, and (3) compare two PXRD between
packages, it relies on several external libraries. NumPy [34], two structures. Finally, Fig. 6 displays the simulated XRDs be-
SciPy [35] and Pandas [36] are required for the general purposes tween two structures, where the similarity between two XRDs
of scientific computing and data processing. In addition, two are also given according to the correlation function as suggested
materials science libraries, Pymatgen [30] and Spglib [37], were previously [40,41]. Note the split of XRD peaks.
used to facilitate the symmetry analysis. Optionally, the code from pyxtal import pyxtal
provides an interface with Openbabel [38] if the users wants from pyxtal .XRD import Similarity
to import the molecules from additional file formats other than
# generate a random crystal
the plain xyz format. An ASE [39] interface is also enabled if C1 = pyxtal ()
the user wants to do further structure analysis such as structure C1. from_random (3, 227, [’C’], [8])
manipulation or geometry optimization based on ASE.
6
S. Fredericks, K. Parrish, D. Sayre et al. Computer Physics Communications 261 (2021) 107810

the trial structures based on the partial information determined


from experiment (e.g., unit cell, symmetry, composition). Sec-
ondly, it can be used to determine the ground state structure in a
first-principle manner based on global optimization. It has been
shown [6,10,12] that by beginning with already-symmetric struc-
tures, fewer attempts are needed to find the global energy mini-
mum. To demonstrate the general utility of pre-symmetrization,
we performed a number of benchmarks for different systems.
Below we give two examples for the global structural search
on the low-energy Lennard-Jones (LJ) clusters and carbon/silicon
Fig. 6. The comparison of simulated X-ray diffraction patterns between the allotropes.
original structure and the perturbed structure from the group–subgroup relation.
5.1. Clusters with empirical Lennard-Jones potential

# 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

documentation available online.1 In PyXtal, the symmetry con-


straints are further refined in three ways. The first is a merging
algorithm [14] which controls the distribution of WPs through
statistical means. The second is a new algorithm for placing
molecules into special WPs. Last is the structure modulation by
the observation of the symmetry relation. This allows for more
realistic and complex structures to be generated by keeping the
symmetry as high as possible. PyXtal is not a complete structure
prediction package; it only generates the trial structures with a
given symmetry group. Other tools exist that perform structure
generation and other steps in the CSP process [3,7,9,10]. The
main goals in developing PyXtal are as follows: (1) to develop
a free, open-source Python package for the materials science
community, (2) to handle the generation of symmetric structures
described by different symmetry groups from 0D to 3D, (3) to
handle molecular WPs in a generalized manner, (4) to provide
a tool to analyze the symmetry relation. We also demonstrated
that using the pre-symmetrized structures as the starting seeding
structures can effectively improve the success rate of finding
the low energy configuration. As such, PyXtal can be interfaced
with other structure prediction codes that require the generation
of trial structures. Access to the source code and development
information are available on the GitHub page at https://github.
com/qzhu2017/PyXtal. The code is currently under version 0.1.7
at the time of writing. It is expected to update frequently. Further
development and application of the mathematical background
should enable more complex structure types to be studied in the
Fig. 7. Energy distribution for Lennard Jones clusters with the sizes of (a) 38, future.
(b) 55 and (c) 75. The insets are the corresponding ground state geometries.

Declaration of competing interest

The authors declare that they have no known competing finan-


cial interests or personal relationships that could have appeared
to influence the work reported in this paper.

Acknowledgments

We acknowledge the NSF, USA (I-DIRSE-IL: 1940272) and


NASA, USA (80NSSC19M0152) for their financial supports. The
computing resources are provided by XSEDE (TG-DMR180040).

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.

In this manuscript, we present a software package PyXtal.


The core features of PyXtal have been highlighted, with further 1 https://pyxtal.readthedocs.io.

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.

You might also like