pwtools.symmetry.spglib_get_primitive

pwtools.symmetry.spglib_get_primitive(struct, **kwds)[source]

Find primitive structure for given Structure.

If struct is irreducible (is already a primitive cell), we return None, else a Structure.

Uses spglib.

Parameters:
  • struct (Structure)

  • **kwds (keywords) – passed to spglib.find_primitive(), e.g. symprec and angle_tolerance last time I checked

Return type:

Structure or None

Notes

spglib used to return (None,None,None) if no primitive cell can be found, i.e. the given input Structure cannot be reduced, which can occur if (a) a given Structure is already a primitive cell or (b) any other reason like a too small value of symprec. Now [py]spglib >= 1.8.x seems to always return data instead. We use is_same_struct() to determine if the struct is irreducible. In that case we return None in order to keep the API unchanged.

Also note that a primitive cell (e.g. with 2 atoms) can have a number of different realizations. Therefore, you may not always get the primitive cell which you would expect or get from other tools like Wien2K’s sgroup. Only things like natoms and the spacegroup can be safely compared.