Specifying a lattice Spacegroup

The symmetry information for a lattice can be specified by providing a string at construction which represents a Hall symbol or an International Tables spacegroup (typically in Hermann-Mauguin notation).

If this is undesirable for any reason, the generators of a Spacegroup can be provided after the lattice has been created. One must only specify the generators of the Spacegroup since they are a subset of the full group which can be combined to reproduce all group elements. If one prefers, the entire Spacegroup motions can be provided instead.

Sodium Chloride symmetry

The Hall symbol for cubic \(F m \bar{3} m\) is \(-F 4 2 3\). The Hall symbol is the encoded generators of the spacegroup, and can be used to define a HallSymbol which has the functionality to decode the generators. Those decoded generators can then be used to generate the full spacegroup:

hall_symbol = brille.HallSymbol('-F 4 2 3')
hall_gen = hall_symbol.generators
hall_sym = hall_gen.generate()

This spacegroup is comprised of \(192\) motions,

(show the 192 lines of motions)
motions = np.array([[[1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 0]],
                    [[-1, 0, 0], [0, -1, 0], [0, 0, -1], [0, 0, 0]],
                    [[0, -1, 0], [1, 0, 0], [0, 0, 1], [0, 0, 0]],
                    [[0, 1, 0], [-1, 0, 0], [0, 0, -1], [0, 0, 0]],
                    [[-1, 0, 0], [0, -1, 0], [0, 0, 1], [0, 0, 0]],
                    [[1, 0, 0], [0, 1, 0], [0, 0, -1], [0, 0, 0]],
                    [[0, 1, 0], [-1, 0, 0], [0, 0, 1], [0, 0, 0]],
                    [[0, -1, 0], [1, 0, 0], [0, 0, -1], [0, 0, 0]],
                    [[1, 0, 0], [0, -1, 0], [0, 0, -1], [0, 0, 0]],
                    [[-1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 0]],
                    [[0, -1, 0], [-1, 0, 0], [0, 0, -1], [0, 0, 0]],
                    [[0, 1, 0], [1, 0, 0], [0, 0, 1], [0, 0, 0]],
                    [[-1, 0, 0], [0, 1, 0], [0, 0, -1], [0, 0, 0]],
                    [[1, 0, 0], [0, -1, 0], [0, 0, 1], [0, 0, 0]],
                    [[0, 1, 0], [1, 0, 0], [0, 0, -1], [0, 0, 0]],
                    [[0, -1, 0], [-1, 0, 0], [0, 0, 1], [0, 0, 0]],
                    [[0, 0, 1], [1, 0, 0], [0, 1, 0], [0, 0, 0]],
                    [[0, 0, -1], [-1, 0, 0], [0, -1, 0], [0, 0, 0]],
                    [[0, 0, 1], [0, -1, 0], [1, 0, 0], [0, 0, 0]],
                    [[0, 0, -1], [0, 1, 0], [-1, 0, 0], [0, 0, 0]],
                    [[0, 0, 1], [-1, 0, 0], [0, -1, 0], [0, 0, 0]],
                    [[0, 0, -1], [1, 0, 0], [0, 1, 0], [0, 0, 0]],
                    [[0, 0, 1], [0, 1, 0], [-1, 0, 0], [0, 0, 0]],
                    [[0, 0, -1], [0, -1, 0], [1, 0, 0], [0, 0, 0]],
                    [[0, 0, -1], [1, 0, 0], [0, -1, 0], [0, 0, 0]],
                    [[0, 0, 1], [-1, 0, 0], [0, 1, 0], [0, 0, 0]],
                    [[0, 0, -1], [0, -1, 0], [-1, 0, 0], [0, 0, 0]],
                    [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 0, 0]],
                    [[0, 0, -1], [-1, 0, 0], [0, 1, 0], [0, 0, 0]],
                    [[0, 0, 1], [1, 0, 0], [0, -1, 0], [0, 0, 0]],
                    [[0, 0, -1], [0, 1, 0], [1, 0, 0], [0, 0, 0]],
                    [[0, 0, 1], [0, -1, 0], [-1, 0, 0], [0, 0, 0]],
                    [[0, 1, 0], [0, 0, 1], [1, 0, 0], [0, 0, 0]],
                    [[0, -1, 0], [0, 0, -1], [-1, 0, 0], [0, 0, 0]],
                    [[1, 0, 0], [0, 0, 1], [0, -1, 0], [0, 0, 0]],
                    [[-1, 0, 0], [0, 0, -1], [0, 1, 0], [0, 0, 0]],
                    [[0, -1, 0], [0, 0, 1], [-1, 0, 0], [0, 0, 0]],
                    [[0, 1, 0], [0, 0, -1], [1, 0, 0], [0, 0, 0]],
                    [[-1, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 0]],
                    [[1, 0, 0], [0, 0, -1], [0, -1, 0], [0, 0, 0]],
                    [[0, -1, 0], [0, 0, -1], [1, 0, 0], [0, 0, 0]],
                    [[0, 1, 0], [0, 0, 1], [-1, 0, 0], [0, 0, 0]],
                    [[-1, 0, 0], [0, 0, -1], [0, -1, 0], [0, 0, 0]],
                    [[1, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 0]],
                    [[0, 1, 0], [0, 0, -1], [-1, 0, 0], [0, 0, 0]],
                    [[0, -1, 0], [0, 0, 1], [1, 0, 0], [0, 0, 0]],
                    [[1, 0, 0], [0, 0, -1], [0, 1, 0], [0, 0, 0]],
                    [[-1, 0, 0], [0, 0, 1], [0, -1, 0], [0, 0, 0]],
                    [[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 0]],
                    [[-1, 0, 0], [0, -1, 0], [0, 0, -1], [1, 1, 0]],
                    [[0, -1, 0], [1, 0, 0], [0, 0, 1], [1, 1, 0]],
                    [[0, 1, 0], [-1, 0, 0], [0, 0, -1], [1, 1, 0]],
                    [[-1, 0, 0], [0, -1, 0], [0, 0, 1], [1, 1, 0]],
                    [[1, 0, 0], [0, 1, 0], [0, 0, -1], [1, 1, 0]],
                    [[0, 1, 0], [-1, 0, 0], [0, 0, 1], [1, 1, 0]],
                    [[0, -1, 0], [1, 0, 0], [0, 0, -1], [1, 1, 0]],
                    [[1, 0, 0], [0, -1, 0], [0, 0, -1], [1, 1, 0]],
                    [[-1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 0]],
                    [[0, -1, 0], [-1, 0, 0], [0, 0, -1], [1, 1, 0]],
                    [[0, 1, 0], [1, 0, 0], [0, 0, 1], [1, 1, 0]],
                    [[-1, 0, 0], [0, 1, 0], [0, 0, -1], [1, 1, 0]],
                    [[1, 0, 0], [0, -1, 0], [0, 0, 1], [1, 1, 0]],
                    [[0, 1, 0], [1, 0, 0], [0, 0, -1], [1, 1, 0]],
                    [[0, -1, 0], [-1, 0, 0], [0, 0, 1], [1, 1, 0]],
                    [[0, 0, 1], [1, 0, 0], [0, 1, 0], [1, 1, 0]],
                    [[0, 0, -1], [-1, 0, 0], [0, -1, 0], [1, 1, 0]],
                    [[0, 0, 1], [0, -1, 0], [1, 0, 0], [1, 1, 0]],
                    [[0, 0, -1], [0, 1, 0], [-1, 0, 0], [1, 1, 0]],
                    [[0, 0, 1], [-1, 0, 0], [0, -1, 0], [1, 1, 0]],
                    [[0, 0, -1], [1, 0, 0], [0, 1, 0], [1, 1, 0]],
                    [[0, 0, 1], [0, 1, 0], [-1, 0, 0], [1, 1, 0]],
                    [[0, 0, -1], [0, -1, 0], [1, 0, 0], [1, 1, 0]],
                    [[0, 0, -1], [1, 0, 0], [0, -1, 0], [1, 1, 0]],
                    [[0, 0, 1], [-1, 0, 0], [0, 1, 0], [1, 1, 0]],
                    [[0, 0, -1], [0, -1, 0], [-1, 0, 0], [1, 1, 0]],
                    [[0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 0]],
                    [[0, 0, -1], [-1, 0, 0], [0, 1, 0], [1, 1, 0]],
                    [[0, 0, 1], [1, 0, 0], [0, -1, 0], [1, 1, 0]],
                    [[0, 0, -1], [0, 1, 0], [1, 0, 0], [1, 1, 0]],
                    [[0, 0, 1], [0, -1, 0], [-1, 0, 0], [1, 1, 0]],
                    [[0, 1, 0], [0, 0, 1], [1, 0, 0], [1, 1, 0]],
                    [[0, -1, 0], [0, 0, -1], [-1, 0, 0], [1, 1, 0]],
                    [[1, 0, 0], [0, 0, 1], [0, -1, 0], [1, 1, 0]],
                    [[-1, 0, 0], [0, 0, -1], [0, 1, 0], [1, 1, 0]],
                    [[0, -1, 0], [0, 0, 1], [-1, 0, 0], [1, 1, 0]],
                    [[0, 1, 0], [0, 0, -1], [1, 0, 0], [1, 1, 0]],
                    [[-1, 0, 0], [0, 0, 1], [0, 1, 0], [1, 1, 0]],
                    [[1, 0, 0], [0, 0, -1], [0, -1, 0], [1, 1, 0]],
                    [[0, -1, 0], [0, 0, -1], [1, 0, 0], [1, 1, 0]],
                    [[0, 1, 0], [0, 0, 1], [-1, 0, 0], [1, 1, 0]],
                    [[-1, 0, 0], [0, 0, -1], [0, -1, 0], [1, 1, 0]],
                    [[1, 0, 0], [0, 0, 1], [0, 1, 0], [1, 1, 0]],
                    [[0, 1, 0], [0, 0, -1], [-1, 0, 0], [1, 1, 0]],
                    [[0, -1, 0], [0, 0, 1], [1, 0, 0], [1, 1, 0]],
                    [[1, 0, 0], [0, 0, -1], [0, 1, 0], [1, 1, 0]],
                    [[-1, 0, 0], [0, 0, 1], [0, -1, 0], [1, 1, 0]],
                    [[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 1]],
                    [[-1, 0, 0], [0, -1, 0], [0, 0, -1], [1, 0, 1]],
                    [[0, -1, 0], [1, 0, 0], [0, 0, 1], [1, 0, 1]],
                    [[0, 1, 0], [-1, 0, 0], [0, 0, -1], [1, 0, 1]],
                    [[-1, 0, 0], [0, -1, 0], [0, 0, 1], [1, 0, 1]],
                    [[1, 0, 0], [0, 1, 0], [0, 0, -1], [1, 0, 1]],
                    [[0, 1, 0], [-1, 0, 0], [0, 0, 1], [1, 0, 1]],
                    [[0, -1, 0], [1, 0, 0], [0, 0, -1], [1, 0, 1]],
                    [[1, 0, 0], [0, -1, 0], [0, 0, -1], [1, 0, 1]],
                    [[-1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 1]],
                    [[0, -1, 0], [-1, 0, 0], [0, 0, -1], [1, 0, 1]],
                    [[0, 1, 0], [1, 0, 0], [0, 0, 1], [1, 0, 1]],
                    [[-1, 0, 0], [0, 1, 0], [0, 0, -1], [1, 0, 1]],
                    [[1, 0, 0], [0, -1, 0], [0, 0, 1], [1, 0, 1]],
                    [[0, 1, 0], [1, 0, 0], [0, 0, -1], [1, 0, 1]],
                    [[0, -1, 0], [-1, 0, 0], [0, 0, 1], [1, 0, 1]],
                    [[0, 0, 1], [1, 0, 0], [0, 1, 0], [1, 0, 1]],
                    [[0, 0, -1], [-1, 0, 0], [0, -1, 0], [1, 0, 1]],
                    [[0, 0, 1], [0, -1, 0], [1, 0, 0], [1, 0, 1]],
                    [[0, 0, -1], [0, 1, 0], [-1, 0, 0], [1, 0, 1]],
                    [[0, 0, 1], [-1, 0, 0], [0, -1, 0], [1, 0, 1]],
                    [[0, 0, -1], [1, 0, 0], [0, 1, 0], [1, 0, 1]],
                    [[0, 0, 1], [0, 1, 0], [-1, 0, 0], [1, 0, 1]],
                    [[0, 0, -1], [0, -1, 0], [1, 0, 0], [1, 0, 1]],
                    [[0, 0, -1], [1, 0, 0], [0, -1, 0], [1, 0, 1]],
                    [[0, 0, 1], [-1, 0, 0], [0, 1, 0], [1, 0, 1]],
                    [[0, 0, -1], [0, -1, 0], [-1, 0, 0], [1, 0, 1]],
                    [[0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 0, 1]],
                    [[0, 0, -1], [-1, 0, 0], [0, 1, 0], [1, 0, 1]],
                    [[0, 0, 1], [1, 0, 0], [0, -1, 0], [1, 0, 1]],
                    [[0, 0, -1], [0, 1, 0], [1, 0, 0], [1, 0, 1]],
                    [[0, 0, 1], [0, -1, 0], [-1, 0, 0], [1, 0, 1]],
                    [[0, 1, 0], [0, 0, 1], [1, 0, 0], [1, 0, 1]],
                    [[0, -1, 0], [0, 0, -1], [-1, 0, 0], [1, 0, 1]],
                    [[1, 0, 0], [0, 0, 1], [0, -1, 0], [1, 0, 1]],
                    [[-1, 0, 0], [0, 0, -1], [0, 1, 0], [1, 0, 1]],
                    [[0, -1, 0], [0, 0, 1], [-1, 0, 0], [1, 0, 1]],
                    [[0, 1, 0], [0, 0, -1], [1, 0, 0], [1, 0, 1]],
                    [[-1, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 1]],
                    [[1, 0, 0], [0, 0, -1], [0, -1, 0], [1, 0, 1]],
                    [[0, -1, 0], [0, 0, -1], [1, 0, 0], [1, 0, 1]],
                    [[0, 1, 0], [0, 0, 1], [-1, 0, 0], [1, 0, 1]],
                    [[-1, 0, 0], [0, 0, -1], [0, -1, 0], [1, 0, 1]],
                    [[1, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 1]],
                    [[0, 1, 0], [0, 0, -1], [-1, 0, 0], [1, 0, 1]],
                    [[0, -1, 0], [0, 0, 1], [1, 0, 0], [1, 0, 1]],
                    [[1, 0, 0], [0, 0, -1], [0, 1, 0], [1, 0, 1]],
                    [[-1, 0, 0], [0, 0, 1], [0, -1, 0], [1, 0, 1]],
                    [[1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 1, 1]],
                    [[-1, 0, 0], [0, -1, 0], [0, 0, -1], [0, 1, 1]],
                    [[0, -1, 0], [1, 0, 0], [0, 0, 1], [0, 1, 1]],
                    [[0, 1, 0], [-1, 0, 0], [0, 0, -1], [0, 1, 1]],
                    [[-1, 0, 0], [0, -1, 0], [0, 0, 1], [0, 1, 1]],
                    [[1, 0, 0], [0, 1, 0], [0, 0, -1], [0, 1, 1]],
                    [[0, 1, 0], [-1, 0, 0], [0, 0, 1], [0, 1, 1]],
                    [[0, -1, 0], [1, 0, 0], [0, 0, -1], [0, 1, 1]],
                    [[1, 0, 0], [0, -1, 0], [0, 0, -1], [0, 1, 1]],
                    [[-1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 1, 1]],
                    [[0, -1, 0], [-1, 0, 0], [0, 0, -1], [0, 1, 1]],
                    [[0, 1, 0], [1, 0, 0], [0, 0, 1], [0, 1, 1]],
                    [[-1, 0, 0], [0, 1, 0], [0, 0, -1], [0, 1, 1]],
                    [[1, 0, 0], [0, -1, 0], [0, 0, 1], [0, 1, 1]],
                    [[0, 1, 0], [1, 0, 0], [0, 0, -1], [0, 1, 1]],
                    [[0, -1, 0], [-1, 0, 0], [0, 0, 1], [0, 1, 1]],
                    [[0, 0, 1], [1, 0, 0], [0, 1, 0], [0, 1, 1]],
                    [[0, 0, -1], [-1, 0, 0], [0, -1, 0], [0, 1, 1]],
                    [[0, 0, 1], [0, -1, 0], [1, 0, 0], [0, 1, 1]],
                    [[0, 0, -1], [0, 1, 0], [-1, 0, 0], [0, 1, 1]],
                    [[0, 0, 1], [-1, 0, 0], [0, -1, 0], [0, 1, 1]],
                    [[0, 0, -1], [1, 0, 0], [0, 1, 0], [0, 1, 1]],
                    [[0, 0, 1], [0, 1, 0], [-1, 0, 0], [0, 1, 1]],
                    [[0, 0, -1], [0, -1, 0], [1, 0, 0], [0, 1, 1]],
                    [[0, 0, -1], [1, 0, 0], [0, -1, 0], [0, 1, 1]],
                    [[0, 0, 1], [-1, 0, 0], [0, 1, 0], [0, 1, 1]],
                    [[0, 0, -1], [0, -1, 0], [-1, 0, 0], [0, 1, 1]],
                    [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1]],
                    [[0, 0, -1], [-1, 0, 0], [0, 1, 0], [0, 1, 1]],
                    [[0, 0, 1], [1, 0, 0], [0, -1, 0], [0, 1, 1]],
                    [[0, 0, -1], [0, 1, 0], [1, 0, 0], [0, 1, 1]],
                    [[0, 0, 1], [0, -1, 0], [-1, 0, 0], [0, 1, 1]],
                    [[0, 1, 0], [0, 0, 1], [1, 0, 0], [0, 1, 1]],
                    [[0, -1, 0], [0, 0, -1], [-1, 0, 0], [0, 1, 1]],
                    [[1, 0, 0], [0, 0, 1], [0, -1, 0], [0, 1, 1]],
                    [[-1, 0, 0], [0, 0, -1], [0, 1, 0], [0, 1, 1]],
                    [[0, -1, 0], [0, 0, 1], [-1, 0, 0], [0, 1, 1]],
                    [[0, 1, 0], [0, 0, -1], [1, 0, 0], [0, 1, 1]],
                    [[-1, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1]],
                    [[1, 0, 0], [0, 0, -1], [0, -1, 0], [0, 1, 1]],
                    [[0, -1, 0], [0, 0, -1], [1, 0, 0], [0, 1, 1]],
                    [[0, 1, 0], [0, 0, 1], [-1, 0, 0], [0, 1, 1]],
                    [[-1, 0, 0], [0, 0, -1], [0, -1, 0], [0, 1, 1]],
                    [[1, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1]],
                    [[0, 1, 0], [0, 0, -1], [-1, 0, 0], [0, 1, 1]],
                    [[0, -1, 0], [0, 0, 1], [1, 0, 0], [0, 1, 1]],
                    [[1, 0, 0], [0, 0, -1], [0, 1, 0], [0, 1, 1]],
                    [[-1, 0, 0], [0, 0, 1], [0, -1, 0], [0, 1, 1]]])

In this compact form each \(4 \times 3\) array is the \(3 \times 3\) rotation-like part of the motion while the remaining three values are twice the translation part of the motion. They can be separated and used to define a Symmetry object plus a set of generators for the group:

motions_W, motions_w = motions[:, :3, :], motions[:, 3, :] * 0.5

explicit_sym = brille.Symmetry(motions_W, motions_w)
explicit_gen = explicit_sym.generators()

The symmetry information for NaCl is available in a script which also contains different methods of constructing a real space lattice which contains the spacegroup symmetry information.

As a teaser, the two lattices lat0 and lat1 are identically the same:

a = 5.69  # angstrom, the approximate lattice constant for NaCl

lat0 = brille.Direct((a, a, a), (90, 90, 90), '-F 4 2 3')

lat1 = brille.Direct((a, a, a), (90, 90, 90))
lat1.spacegroup = brille.Symmetry('-F 4 2 3').generators