This tool, written by V. Stevanovic, P. Graf and F. Therrien, and modified for our purposes by A. Samtsevich, solves the hard problem of finding the most conservative mapping between two given crystal structures. This intuitively corresponds to the easiest phase transformation mechanism(s). Pmpaths enumerates and ranks different pathways connecting two user-provided crystal structures. These pathways will then need to be optimized by the VCNEB method (described in the next section).
This algorithm first searches for mapping of the unit cells, by optimizing the "overlap" of the cell, and permuting the unit cell vectors so the coordinate system in the rotated frame that gives best overlap are as closely aligned as possible. This is the starting point for determining the best mappings between atomic positions in the two crystal structures, and subsequent analysis.
The code relies on some libraries:
munkres
scikit_learn
spglib
cython
All of them can be installed with pip
To run the code, try, for example
python3 run_pmpaths.py -t 4 -z traj_A2B -n 20 -A POSCAR_A -B POSCAR_B -b 3.6 --numtraj=5
A help menu is built in:
Usage: run_pmpaths.py [options]
Options:
-h, --help show this help message and exit
-A A, --A=A poscar 1
-B B, --B=B poscar 2
-t OUTPUT_TILES, --tiles=OUTPUT_TILES
how many cells to tile in output
-H, --hlst perform HLST fitting
-v VERBOSE, --verbose=VERBOSE
verbosity
-z TRAJDIR, --trajdir=TRAJDIR
where to dump trajectory files
-c MIN_CLUSTER_SIZE, --min_cluster_size=MIN_CLUSTER_SIZE
minimum size of atom clusters
-s SHIFTING, --shifting=SHIFTING
control shift of inequiv atoms to origin (0:none,
1:one of each inequivalent subgroup,2:all)
-b BOND_LEN, --bond_len=BOND_LEN
bond length
-n FRAMES, --frames=FRAMES
how many frames in trajectory
-y, --nocheck_syms don't check syms
-u, --nocheck_ucells don't check more than one unit cell pairing, but DO do
gruberization
-w, --use_given_ucells
use given unit cells as is, no gruberization
-d, --noucell-dist don't include unit cell vector movement in distance
measure
-f, --get-fast use bonding to specifically search for FAST
-e TOL, --tol=TOL tolerance for coordination calcs
--numtraj=N , where N is the number of pathways that will be in the output
The output of run_pmpaths.py (besides all it writes to stdout) is a directory ("traj_A2B") that contains n frames ("images") along the path. Remember that this is a purely geometric, and therefore simplistic, solution of the (very hard) problem of finding the lowest-energy transformation pathway. We recommend looking not only at the geometrically best pathway, but at N ( 5-10) geometrically best pathways. Remember also that these pathways only give a linear interpolation between the two crystal structures, which needs to be locally optimized. This should be done using the VCNEB method, discussed in the next section. Our VCNEB code can directly use output of pmpaths utility.