# 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.


```python
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.


```python
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


```python
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


```python
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)


```python
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).


```python
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).


```python
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.

8cee2197794375de7036ad5583fed58c7f9a20fa
ipynb
Jupyter Notebook
lectures/lecture_4_point_group_symmetry/Symmetry Computations on m-3m (O_h) Point Group.ipynb
ksyang2013/nano106
222f2c6142f43fc4395d9f9ee833ec88c5106e8d
BSD-3-Clause
2015-04-19T23:24:25.000Z
2022-02-10T15:21:12.000Z
lectures/lecture_4_point_group_symmetry/Symmetry Computations on m-3m (O_h) Point Group.ipynb
materialsvirtuallab/nano106
222f2c6142f43fc4395d9f9ee833ec88c5106e8d
BSD-3-Clause
lectures/lecture_4_point_group_symmetry/Symmetry Computations on m-3m (O_h) Point Group.ipynb
materialsvirtuallab/nano106
222f2c6142f43fc4395d9f9ee833ec88c5106e8d
BSD-3-Clause
2016-06-30T21:37:14.000Z
2021-02-15T16:36:41.000Z
Qwen/Qwen-72B
1. YES
2. YES