Source code for gyroid.space_group

# -*- coding: utf-8 -*-
"""
gyroid.space_group
===============

:copyright: (c) 2012 by Yi-Xin Liu
:license: BSD, see LICENSE for more details.

"""

import numpy as np
from numpy.linalg import inv

from .symmetry import Symmetry

__all__ = ["symmetry_generator1",
           "symmetry_generator2",
           "symmetry_generator3"
          ]

[docs]def symmetry_generator1(ITA_number,b,h): I = np.eye(1) t0 = np.zeros(1) sI = Symmetry(1,b,h,I,t0) if ITA_number == 1: return [sI] elif ITA_number == 2: return [sI, Symmetry(1,b,h,-1.0*I,t0) ] else: raise ValueError("ITA number is not 1D.")
[docs]def symmetry_generator2(ITA_number,b,h): I = np.eye(2) t0 = np.zeros(2) sI = Symmetry(2,b,h,I,t0) R300 = np.array([[0.0,-1.0],[1.0,-1.0]]) R200 = np.array([[-1.0,0.0],[0.0,-1.0]]) Rmxx = np.array([[0.0,-1.0],[-1.0,0.0]]) if ITA_number == 17: # "P6mm 2D" return [sI, Symmetry(2,b,h,R300,t0), Symmetry(2,b,h,R200,t0), Symmetry(2,b,h,Rmxx,t0) ] else: raise ValueError("ITA number not supported.")
[docs]def symmetry_generator3(ITA_number,b,h): I = np.eye(3) t0 = np.zeros(3) sI = Symmetry(3,b,h,I,t0) # q = 1/4, r = 3/4, s= 1/2, o = 1/8 # Rotation R300z = np.array([[0.0,-1.0,0.0],[1.0,-1.0,0.0],[0.0,0.0,1.0]]) R200z = np.array([[-1.0,0.0,0.0],[0.0,-1.0,0.0],[0.0,0.0,1.0]]) Rmxxz = np.array([[0.0,-1.0,0.0],[-1.0,0.0,0.0],[0.0,0.0,1.0]]) R2q0z = np.array([[-1.0,0.0,0.0],[0.0,-1.0,0.0],[0.0,0.0,1.0]]) R20yq = np.array([[-1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,-1.0]]) R3xxx = np.array([[0.0,0.0,1.0],[1.0,0.0,0.0],[0.0,1.0,0.0]]) R2xxo = np.array([[0.0,1.0,0.0],[1.0,0.0,0.0],[0.0,0.0,-1.0]]) R1000 = np.array([[-1.0,0.0,0.0],[0.0,-1.0,0.0],[0.0,0.0,-1.0]]) # Translation Ts0s = np.array([0.5,0.0,0.5]) T0ss = np.array([0.0,0.5,0.5]) Trqq = np.array([0.75,0.25,0.25]) Tsss = np.array([0.5,0.5,0.5]) if ITA_number == 183: # "P6mm 3D" return [sI, Symmetry(3,b,h,R300z,t0), Symmetry(3,b,h,R200z,t0), Symmetry(3,b,h,Rmxxz,t0) ] if ITA_number == 230: # "Ia-3d 3D" return [sI, Symmetry(3,b,h,R2q0z,Ts0s), Symmetry(3,b,h,R20yq,T0ss), Symmetry(3,b,h,R3xxx,t0), Symmetry(3,b,h,R2xxo,Trqq), Symmetry(3,b,h,R1000,t0), Symmetry(3,b,h,I,Tsss) ] else: raise ValueError("ITA number not supported.")