NANO106 - Symmetry Computations on $m\overline{3}m$ ($O_h$) Point Group

by Shyue Ping Ong

This notebook demonstrates the computation of orbits in the $m\overline{3}m$ ($O_h$) point group (more complex than the simple mmm example). It is part of course material for UCSD's NANO106 - Crystallography of Materials.

Initializing the $m\overline{3}m$ point group.

Let's start by importing the numpy, sympy and other packages we need. Instead of going through all the steps one by one, we will use the symmetry.point_groups written by Prof Ong, which basically consolidates the information for all point groups in a single module.


In [1]:
import numpy as np
from sympy import symbols, Mod
from symmetry.groups import PointGroup

#Create the point group.
oh = PointGroup("m-3m")

print "The generators for this point group are:"
for m in oh.generators:
    print m
print "The order of the point group is %d." % len(oh.symmetry_ops)


The generators for this point group are:
[[0, 0, 1], [1, 0, 0], [0, 1, 0]]
[[0, -1, 0], [1, 0, 0], [0, 0, 1]]
[[-1, 0, 0], [0, -1, 0], [0, 0, -1]]
[[0, 1, 0], [1, 0, 0], [0, 0, 1]]
The order of the point group is 48.

Computing Orbits

Using sympy, we specify the symbolic symbols x, y, z to represent position coordinates. We also define a function to generate the orbit given a set of symmetry operations and a point p.


In [2]:
x, y, z = symbols("x y z")

def pt_2_str(pt):
    return str([i.args[0] if isinstance(i, Mod) else i for i in pt])

Orbit for General Position


In [3]:
p = np.array([x, y, z])
orb = oh.get_orbit(p, tol=0)
print "For the general position %s on the two-fold axis, the orbit comprise %d points:" % (str(p), len(orb))
for o in orb:
    print pt_2_str(o),


For the general position [x y z] on the two-fold axis, the orbit comprise 48 points:
[z, x, y] [-y, x, z] [-x, -y, -z] [y, x, z] [y, z, x] [z, -y, x] [-z, -x, -y] [z, y, x] [-x, z, y] [-x, -y, z] [y, -x, -z] [-x, y, z] [x, y, z] [-y, -x, -z] [x, z, y] [x, -y, z] [x, z, -y] [-y, -z, -x] [z, y, -x] [-y, z, -x] [-x, -z, y] [y, z, -x] [-x, -z, -y] [-y, z, x] [y, -x, z] [z, -x, -y] [-z, y, -x] [z, -x, y] [x, -z, y] [-y, x, -z] [y, -z, -x] [-z, x, y] [z, -y, -x] [-z, x, -y] [y, -z, x] [-z, -y, -x] [-z, -x, y] [z, x, -y] [-z, y, x] [x, -z, -y] [-x, z, -y] [x, y, -z] [-y, -x, z] [-y, -z, x] [-z, -y, x] [y, x, -z] [x, -y, -z] [-x, y, -z]

Orbit for Special Position on four-fold rotation axis


In [4]:
p = np.array([0, 0, z])
orb = oh.get_orbit(p, tol=0)

print "For the special position %s on the two-fold axis, the orbit comprise %d points:" % (str(p), len(orb))
for o in orb:
    print pt_2_str(o),


For the special position [0 0 z] on the two-fold axis, the orbit comprise 6 points:
[z, 0, 0] [0, 0, z] [0, 0, -z] [0, z, 0] [-z, 0, 0] [0, -z, 0]

The orbit is similar for the other two-fold axes on the a and b axes are similar.

Orbit for Special Position on three-fold rotation axis

The three-fold rotation axis are given by (x, x, x)


In [5]:
p = np.array([x, x, x])
orb = oh.get_orbit(p, tol=0)
print "For the special position %s on the two-fold axis, the orbit comprise %d points:" % (str(p), len(orb))
for o in orb:
    print pt_2_str(o),


For the special position [x x x] on the two-fold axis, the orbit comprise 8 points:
[x, x, x] [-x, x, x] [-x, -x, -x] [x, -x, x] [-x, -x, x] [x, -x, -x] [x, x, -x] [-x, x, -x]

Orbit for Special Position on two-fold rotation axis

The two-fold rotation axis are given by (x, x, 0).


In [6]:
p = np.array([x, x, 0])
orb = oh.get_orbit(p, tol=0)
print "For the special position %s on the two-fold axis, the orbit comprise %d points:" % (str(p), len(orb))
for o in orb:
    print pt_2_str(o),


For the special position [x x 0] on the two-fold axis, the orbit comprise 12 points:
[0, x, x] [-x, x, 0] [-x, -x, 0] [x, x, 0] [x, 0, x] [0, -x, x] [0, -x, -x] [-x, 0, x] [x, -x, 0] [x, 0, -x] [-x, 0, -x] [0, x, -x]

Orbit for Special Position on mirror planes

Positions on the mirror on the a-b plane have coordinates (x, y, 0).


In [7]:
p = np.array([x, y, 0])
orb = oh.get_orbit(p, tol=0)
print "For the special position %s on the two-fold axis, the orbit comprise %d points:" % (str(p), len(orb))
for o in orb:
    print pt_2_str(o),


For the special position [x y 0] on the two-fold axis, the orbit comprise 24 points:
[0, x, y] [-y, x, 0] [-x, -y, 0] [y, x, 0] [y, 0, x] [0, -y, x] [0, -x, -y] [0, y, x] [-x, 0, y] [y, -x, 0] [-x, y, 0] [x, y, 0] [-y, -x, 0] [x, 0, y] [x, -y, 0] [x, 0, -y] [-y, 0, -x] [0, y, -x] [y, 0, -x] [-x, 0, -y] [-y, 0, x] [0, -x, y] [0, -y, -x] [0, x, -y]

The orbit is similar for the other mirror planes on the a-c and b-c planes are similar.