Crystal Symmetries edit page

Crystal symmetries are sets of rotations and mirroring operations that leave the lattice of a crystal invariant. They form the so called "groups" since the concatenation of two symmetry operations is again a symmetry operation.

Depending which symmetry operations are considered, the symmetry groups are categorized either into 230 space groups, 32 point groups or 11 Laue groups.

Purely enantiomorphic (rotational) symmetry groups

There exist exactly 11 symmetry groups consisting of proper rotations only, namely, 1, 2, 222, 3, 23, 4, 422, 6, 622, 32, 432. These are the so called enantiomorphic groups. All the groups can be defined in MTEX either by its international notation

cs = crystalSymmetry('432')
cs = crystalSymmetry (⊙c→a)
 
  symmetry: 432    
  elements: 24     
  a, b, c : 1, 1, 1

or by the Schoenflies notation

cs = crystalSymmetry('O')

plot(cs)
cs = crystalSymmetry (⊙c→a)
 
  symmetry: 432    
  elements: 24     
  a, b, c : 1, 1, 1

Laue groups

For any symmetry group we obtain the corresponding Laue group by adding the inversion as an additional symmetry element.

csLaue = union(cs,rotation.inversion)

plot(csLaue)
csLaue = crystalSymmetry (⊙c→a)
 
  symmetry: m3̅m   
  elements: 48     
  a, b, c : 1, 1, 1

More directly, the Laue group corresponding to an arbitrary point group can be defined by the command

cs.Laue
ans = crystalSymmetry (⊙c→a)
 
  symmetry: m3̅m   
  elements: 48     
  a, b, c : 1, 1, 1

Since all Laue groups can be derived from the 11 enantiomorphic groups there are also 11 Laue groups, namely -1, 2/m, mmm, -3, -3m, -4/m, 4/mmm, 6/m, 6/mmm, m-3, m-3m.

The Laue groups have always exactly twice as many symmetry elements as the corresponding enantiomorphic group. As the following example illustrates, each symmetry element from the enantiomorphic group occurs twice - with and without inversion - in the corresponding Laue group.

cs = crystalSymmetry('222');
rotation(cs)
rotation(cs.Laue)
ans = rotation
  size: 2 x 2
 
  Bunge Euler angles in degree
  phi1  Phi phi2
     0    0    0
     0  180    0
   180    0    0
     0  180  180
 
 
ans = rotation
  size: 4 x 2
 
  Bunge Euler angles in degree
  phi1  Phi phi2 Inv.
     0    0    0    0
     0  180    0    0
   180    0    0    0
     0  180  180    0
     0    0    0    1
     0  180    0    1
   180    0    0    1
     0  180  180    1

Point groups

While the enantiomorphic groups contain exclusively proper rotations and Laue groups contain a proper and an improper version of each rotation, there are also symmetry groups with improper rotations that do not contain the inversion, e.g. the point group mm2

cs = crystalSymmetry('mm2')
rotation(cs)
plot(cs)
cs = crystalSymmetry (⊙c→a)
 
  symmetry: mm2    
  elements: 4      
  a, b, c : 1, 1, 1
 
 
ans = rotation
  size: 2 x 2
 
  Bunge Euler angles in degree
  phi1  Phi phi2 Inv.
     0    0    0    0
     0  180    0    1
   180    0    0    0
     0  180  180    1

We observe that mm2 has exactly the same rotations as 222 with the only difference that half of them are improper. In fact, we can derive all remaining 10 point groups by replacing half of the rotations of a enantiomorphic group by its improper version. This way the following point groups can be constructed: m, mm2, 3m, -4, 4m2, -42m, -6, 6mm, -6m2, -43m. In total this gives us 11 enantiomorphic + 11 Laue + 10 mixed = 32 point groups.

In MTEX we may use the following commands to find the corresponding enantiomorphic group and the corresponding Laue group to any mixed group

cs = crystalSymmetry('-4m2')

mtexFigure('layout',[1 3]);
plot(cs)
mtexTitle(char(cs,'LaTex'))
nextAxis
plot(cs.properGroup)
mtexTitle(char(cs.properGroup,'LaTex'))
nextAxis
plot(cs.Laue)
mtexTitle(char(cs.Laue,'LaTex'))
cs = crystalSymmetry (⊙c→a)
 
  symmetry: 4̅m2   
  elements: 8      
  a, b, c : 1, 1, 1

The Subgroup of proper rotations

The enantiomorphic group of a given point group is in general not an subgroup, i.e., it does contain symmetry elements that do not belong to the original point group. If one is interested in the subgroup of proper rotations of a given point group the following command comes into help

plot(cs.properSubGroup)
mtexTitle(char(cs.properSubGroup,'LaTex'))

Alignment of the symmetry operations

Although in general only 32 point groups are distinguished, some of them allow for different alignments of the symmetry operations with respect to the crystal axes. The following plots show three different alignments of the point group 2mm. Note that the a-axis points in all three case towards south.

mtexFigure('layout',[1 3]);
cs = crystalSymmetry('2mm');
plot(cs)
mtexTitle(char(cs,'LaTex'))
annotate(cs.aAxis,'labeled')

nextAxis
cs = crystalSymmetry('m2m');
plot(cs)
mtexTitle(char(cs,'LaTex'))
annotate(cs.aAxis,'labeled')

nextAxis
cs = crystalSymmetry('mm2');
plot(cs)
mtexTitle(char(cs,'LaTex'))
annotate(cs.aAxis,'labeled')

Similarly as with mm2, there are different alignments for the point groups 112, 121, 211, 11m, 1m1, m11, 321, 312, 3m1, 31m, etc.

Space groups

If additionally to the proper and improper rotations also translations are considered as symmetry operations the number of different symmetry groups increases to 230. Those are exhaustively described in the international table of crystallography.

MTEX currently does not support space groups. If the name of a space group is passed to the command crystalSymmetry, MTEX automatically determines the corresponding point group and assigns it to the variable.

cs = crystalSymmetry('Td');
plot(cs)

Computations with symmetries

Using the commands union and disjoint new symmetries can be computed from two given ones

union(crystalSymmetry('23'),crystalSymmetry('4'))

disjoint(crystalSymmetry('432'),crystalSymmetry('622'))
ans = crystalSymmetry (⊙c→a)
 
  symmetry: 432    
  elements: 24     
  a, b, c : 1, 1, 1
 
 
ans = crystalSymmetry (⊙c→a)
 
  symmetry: 222    
  elements: 4      
  a, b, c : 1, 1, 1

Import from CIF and PHL files

MTEX allows to define a crystal symmetry by importing a crystallographic information file (*.cif)

cs = crystalSymmetry.load('quartz')
cs = crystalSymmetry (⊙c→a)
 
  mineral        : Quartz           
  symmetry       : 321              
  elements       : 6                
  a, b, c        : 4.9, 4.9, 5.4    
  reference frame: X||a*, Y||b, Z||c

or a Bruker .phl file. As a .phl file contains usually many phases the output is a list of crystal symmetries

% import a list of crystal symmetries
cs_list = crystalSymmetry.load('crystal.phl');

% access the first symmetry in list
cs_list{1}
ans = crystalSymmetry (⊙c→a)
 
  mineral : Magnetite    
  symmetry: m3̅m         
  elements: 48           
  a, b, c : 8.4, 8.4, 8.4