casm powered utility to create gamma surfaces, UBER curves, and twisted bilayers along crystal planes.

View the Project on GitHub goirijo/multishifter

\( $$\newcommand{\AA}{\unicode{x212B}} \AA$$ \)

What is multishifter for?

A common technique for investigating dislocations, stacking faults, and slip planes in crystals involves the calculation of \(\gamma\)-surface energies. The software provided in the multishifter toolbox facilitate the creation of crystal structures for calculations of UBER curves and surface energies along arbitrary slip planes. The multishifter libraries also have tools that aid in the construction of twisted bilayers to create periodic Moiré structures.

Basic usage

The multishift executable is a suite of command line tools that can manipulate and create crystal structures for slab model calculations. Each tool is specialized to complete a particular task, and accepts arguments directly from the command line. Input and output files of crystal structures use the VASP format.

Starting from a primitive structure, several steps must be taken to create the slab models, each accomplished using a multishifter tool. A typical workflow looks like

  1. Slice the primitive structure to expose the desired surface plane (slice).
  2. Specify the thickness of the slabs (stack).
  3. Rigidly translate the basis of the slab, to expose the desired atomic layer/center the rotation axis (translate)
  4. Generate a set of shifted slab structures with shift (\(\gamma\)-surface), cleave the structure at different intervals with cleave (UBER), or create commensurate structures that have been rotated with twist (Moiré/twisted layers).

Each of these commands takes the form

multishift <command> --args

All available tools and a list on their input parameters can be found with

multishift --help
multhishift <command> --help

Feature overview

multishift comes as a collection of tools, each meant to manipulate crystal structures a particular way.


multishift slice will create a supercell of a primitive cell that exposes a particular slip or surface plane.



multishift stack will concatenate a list of structures together. The stack is created by fusing unit cells together along the \(ab\) facet.



multishift translate will rigidly translate all the basis atoms of the given structure.



multishift align will apply a rigid rotation to the structure, aligning the $a$ vector along the $x$ direction, and restricting the $b$ vector to the $xy$-plane.



multishift mutate will alter the \(c\) vector of the lattice, while retaining all Cartesian values of the basis. Useful for individual stacking fault and surface energy calculations.



multishift cleave will generate a series of slab structures with a specified amount of vacuum between their periodic images. Useful for Universal Binding Energy Relation (UBER) calculations.



multishift shift will generate a series of slab structures that have been shifted relative to each other along the \(ab\)-plane. Useful for \(\gamma\)-surface calculations.



multishift chain combines the shift and chain commands. For each perturbed slab generated by shift, all the values of cleave are applied to it. Useful for \(\gamma\)-surface calculations.



multishift fourier reads DFT or UBER parameters that you’ve assigned to each gridpoint from a chain or shift command, and returns an analytical expression for your surface. The expression is printed as python code.



multishift twist creates twisted commensurate supercells that can be combined to create Moiré patterns when stacked together.



Follow this series of tutorials to acquaint yourself with all of the available features. Each tutorial focuses on one or two of the available tools, and build on each other as they progress.

Tutorial I: Slicing a structure
Tutorial II: Stacking structures
Tutorial III: Stacking faults and surfaces
Tutorial IV: Cleaving for UBER
Tutorial V: Shifting for \(\gamma\)-surfaces
Tutorial VI: Chaining shifting and cleaving
Tutorial VII: Fourier interpolation
Tutorial VIII: Do the twist
Tutorial IX: What’s in a record.json?


Initial development of this software package was possible thanks to the financial support from NSF DMREF program under grant DMR-1534264. Subsequent development was made possible by additional grants. The scientific work was supported by the National Science Foundation DMREF grant: DMR-1729166 “DMREF/GOALI: Integrated ComputationalFramework for Designing Dynamically Controlled Alloy-Oxide Heterostructures”. Software development was supported by the National Science Foundation, Grant No. OAC-1642433.