6.1 Pmapaths: geometric method for predicting solid-solid phase transition mechanisms

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.