GAP provides a library of crystallographic groups of dimensions 2, 3, and 4 which covers many of the data that have been listed in the book ``Crystallographic groups of four-dimensional space'' BBNWZ78. It has been brought into GAP format by Volkmar Felsch.
How to access the data of the book
Among others, the library offers functions which provide access to the
data listed in the Tables 1, 5, and 6 of BBNWZ78:
item The information on the crystal families listed in Table 1 can be
reproduced using the DisplayCrystalFamily
function.
item Similarly, the DisplayCrystalSystem
function can be used to
reproduce the information on the crystal systems provided in Table
1.
item The information given in the Q-class headlines of Table 1 can
be displayed by the DisplayQClass
function, whereas the
FpGroupQClass
function can be used to reproduce the presentations
that are listed in Table 1 for the Q-class representatives.
item The information given in the Z-class headlines of Table 1 will
be covered by the results of the DisplayZClass
function, and the
matrix generators of the Z-class representatives can be
constructed by calling the MatGroupZClass
function.
item The DisplaySpaceGroupType
and the DisplaySpaceGroupGenerators
functions can be used to reproduce all of the information on the
space-group types that is provided in Table 1.
item The normalizers listed in Table 5 can be reproduced by calling the
NormalizerZClass
function.
item Finally, the CharTableQClass
function will compute the character
tables listed in Table 6, whereas the isomorphism types given in
Table 6 may be obtained by calling the DisplayQClass
function.
vspace-2mm
The display functions mentioned in the above list print their output with
different indentation. So, calling them in a suitably nested loop, you
may produce a listing in which the information about the objects of
different type will be properly indented as has been done in Table 1 of
BBNWZ78.
Representation of space groups in GAP
Probably the most important function in the library is the SpaceGroup
function which provides representatives of the affine classes of space
groups. A space group of dimension n is represented by an
(n+1)-dimensional rational matrix group as follows.
If S is an n-dimensional space group, then each element alpha in S is an affine mapping alpha!: V rightarrow V of an n-dimensional R-vector space V onto itself. Hence alpha can be written as the sum of an appropriate invertible linear mapping varphi!: V rightarrow V and a translation by some translation vector t in V such that, if we write mappings from the left, we have alpha(v) = varphi(v) + t for all v in V.
If we fix a basis of V and then replace each v in V by the column vector of its coefficients with respect to that basis (and hence V by the isomorphic column vector space R^{n times 1}), we can describe the linear mapping varphi involved in alpha by an n times n matrix M_varphi in GL_n(R) which acts by multiplication from the left on the column vectors in R^{n times 1}. Hence, if we identify V with R^{n times 1}, we have alpha(v) = M_varphi cdot v + t for all v in R^{n times 1}.
Moreover, if we extend each column vector v in R^{n times 1} to a column left[ ! ! catcode`|=12 begin{tabular}{c} catcode`|=13 v \ 1 end{tabular} ! ! right] of length n+1 by adding an entry 1 in the last position and if we define an (n+1) times (n+1) matrix M_alpha = left[ catcode`|=12 begin{tabular}{c|c} catcode`|=13 M_varphi & t \ hline 0 & 1 end{tabular} right], we have left[ ! ! catcode`|=12 begin{tabular}{c} catcode`|=13 alpha(v) \ 1 for all v in R^n times 1. This means that we can represent the space group S by the isomorphic group M(S) = { M_alpha mid alpha in S }. The submatrices M_varphi occurring in the elements of M(S) form an n times n matrix group P(S), the ``point group'' of M(S). In fact, we can choose the basis of R^n times 1 such that M_varphi in GL_n(Z) and t in Q^n times 1 for all M_alpha in M(S). In particular, the space group representatives that are normally used by the crystallographers are of this form, and the book BBNWZ78 uses the same convention.
Before we describe all available library functions in detail, we have to add three remarks.
Remark 1
The concepts used in this section are defined in chapter 1 (Basic definitions) of BBNWZ78. However, note that the definition of the concept of a crystal system given on page 16 of that book relies on the following statement about Q-classes: item[] For a Q-class C there is a unique holohedry H such that each f.,u. group in C is a subgroup of some f.,u. group in H, but is not a subgroup of any f.,u. group belonging to a holohedry of smaller order. vspace-2mm This statement is correct for dimensions 1, 2, 3, and 4, and hence the definition of ``crystal system'' given on page 16 of BBNWZ78 is known to be unambiguous for these dimensions. However, there is a counterexample to this statement in seven-dimensional space so that the definition breaks down for some higher dimensions.
Therefore, the authors of the book have since proposed to replace this definition of ``crystal system'' by the following much simpler one, which has been discussed in more detail in NPW81. To formulate it, we use the intersections of Q-classes and Bravais flocks as introduced on page 17 of BBNWZ78, and we define the classification of the set of all Z-classes into crystal systems as follows: item[] Definition: A crystal system (introduced as an equivalence class of Z-classes) consists of full geometric crystal classes. The Z-classes of two (geometric) crystal classes belong to the same crystal system if and only if these geometric crystal classes intersect the same set of Bravais flocks of Z-classes. vspace-2mm From this definition of a crystal system of Z-classes one then obtains crystal systems of f.,u. groups, of space-group types, and of space groups in the same manner as with the preceding definitions in the book.
The new definition is unambiguous for all dimensions. Moreover, it can be checked from the tables in the book that it defines the same classification as the old one for dimensions 1, 2, 3, and 4.
It should be noted that the concept of crystal family is well-defined independently of the dimension if one uses the ``more natural'' second definition of it at the end of page 17. Moreover, the first definition of crystal family on page 17 defines the same concept as the second one if the now proposed definition of crystal system is used.
Remark 2
The second remark just concerns a different terminology in the tables of BBNWZ78 and in the current library. In group theory, the number of elements of a finite group usually is called the ``order'' of the group. This notation has been used throughout in the book. Here, however, we will follow the GAP conventions and use the term ``size'' instead.
Remark 3
The third remark concerns a problem in the use of the space groups that should be well understood.
There is an alternative to the representation of the space group elements by matrices of the form left[ catcode`|=12 begin{tabular}{c|c} catcode`|=13 M_varphi & t \ hline 0 & 1 end{tabular} right] as described above. Instead of considering the coefficient vectors as columns we may consider them as rows. Then we can associate to each affine mapping alpha in S an (n+1) times (n+1) matrix overline{M}_alpha = left[ catcode`|=12 begin{tabular}{c|c} catcode`|=13 overlineM_overlinevarphi & 0 \ hline overlinet & 1 end{tabular} right] with overline{M}_{overline{varphi}} in GL_n(R) and overline{t} in R^{1 times n} such that [alpha(overline{v}),1] = [overline{v},1] cdot overline{M}_alpha for all overline{v} in R^{1 times n}, and we may represent S by the matrix group overline{M}(S) = { overline{M}_alpha mid alpha in S }. Again, we can choose the basis of R^{1 times n} such that overline{M}_{overline{varphi}} in GL_n(Z) and overline{t} in Q^{1 times n} for all overline{M}_alpha in overline{M}(S).
From the mathematical point of view, both approaches are equivalent. In particular, M(S) and overline{M}(S) are isomorphic, for instance via the isomorphism tau mapping M_alpha in M(S) to (M_alpha^{rm tr})^{-1}. Unfortunately, however, neither of the two is a good choice for our GAP library.
The first convention, using matrices which act on column vectors from the left, is not consistent with the fact that actions in GAP are usually from the right.
On the other hand, if we choose the second convention, we run into a problem with the names of the space groups as introduced in BBNWZ78. Any such name does not just describe the abstract isomorphism type of the respective space group S, but reflects properties of the matrix group M(S). In particular, it contains as a leading part the name of the Z-class of the associated point group P(S). Since the classification of space groups by affine equivalence is tantamount to their classification by abstract isomorphism, overline{M}(S) lies in the same affine class as M(S) and hence should get the same name as M(S). But the point group P(S) that occurs in that name is not always Z-equivalent to the point group overline{P}(S) of overline{M}(S). For example, the isomorphism tau!!: M(S) rightarrow overline{M}(S) defined above maps the Z-class representative with the parameters [3,7,3,2] (in the notation described below) to the Z-class representative with the parameters [3,7,3,3]. In other words: The space group names introduced for the groups M(S) in BBNWZ78 lead to confusing inconsistencies if assigned to the groups overline{M}(S).
In order to avoid this confusion we decided that the first convention is
the lesser evil. So the GAP library follows the book, and if you call
the SpaceGroup
function you will get the same space group
representatives as given there. This does not cause any problems as long
as you do calculations within these groups treating them just as matrix
groups of certain isomorphism types. However, if it is necesary to
consider the action of a space group as affine mappings on the natural
lattice, you need to use the transposed representation of the space
group. For this purpose the library offers the TransposedSpaceGroup
function which not only transposes the matrices, but also adapts
appropriately the associated group presentation.
Both these functions are described in detail in the following.
The library functions
NrCrystalFamilies( dim )
NrCrystalFamilies
returns the number of crystal families in case of
dimension dim. It can be used to formulate loops over the crystal
families.
There are 4, 6, and 23 crystal families of dimension 2, 3, and 4, respectively.
gap> n := NrCrystalFamilies( 4 ); 23
DisplayCrystalFamily( dim, family )
DisplayCrystalFamily
displays for the specified crystal family
essentially the same information as is provided for that family in Table
1 of BBNWZ78, namely
item the family name,
vspace-2mm
item the number of parameters,
vspace-2mm
item the common rational decomposition pattern,
vspace-2mm
item the common real decomposition pattern,
vspace-2mm
item the number of crystal systems in the family, and
vspace-2mm
item the number of Bravais flocks in the family.
vspace-2mm
For details see BBNWZ78.
gap> DisplayCrystalFamily( 4, 17 ); #I Family XVII: cubic orthogonal; 2 free parameters; #I Q-decomposition pattern 1+3; R-decomposition pattern 1+3; #I 2 crystal systems; 6 Bravais flocks gap> DisplayCrystalFamily( 4, 18 ); #I Family XVIII: octagonal; 2 free parameters; #I Q-irreducible; R-decomposition pattern 2+2; #I 1 crystal system; 1 Bravais flock gap> DisplayCrystalFamily( 4, 21 ); #I Family XXI: di-isohexagonal orthogonal; 1 free parameter; #I R-irreducible; 2 crystal systems; 2 Bravais flocks
NrCrystalSystems( dim )
NrCrystalSystems
returns the number of crystal systems in case of
dimension dim. It can be used to formulate loops over the crystal
systems.
There are 4, 7, and 33 crystal systems of dimension 2, 3, and 4, respectively.
gap> n := NrCrystalSystems( 2 ); 4
The following two functions are functions of crystal systems.
Each crystal system is characterized by a pair (dim,,system)
where
dim is the associated dimension, and system is the number of the
crystal system.
DisplayCrystalSystem( dim, system )
DisplayCrystalSystem
displays for the specified crystal system
essentially the same information as is provided for that system in Table
1 of BBNWZ78, namely
item the number of Q-classes in the crystal system and
vspace-2mm
item the identification number, i.,e., the tripel
(dim,,system,,q-class)
described below, of the Q-class
that is the holohedry of the crystal system.
vspace-2mm
For details see BBNWZ78.
gap> for sys in [ 1 .. 4 ] do DisplayCrystalSystem( 2, sys ); od; #I Crystal system 1: 2 Q-classes; holohedry (2,1,2) #I Crystal system 2: 2 Q-classes; holohedry (2,2,2) #I Crystal system 3: 2 Q-classes; holohedry (2,3,2) #I Crystal system 4: 4 Q-classes; holohedry (2,4,4)
NrQClassesCrystalSystem( dim, system )
NrQClassesCrystalSystem
returns the number of Q-classes within the
given crystal system. It can be used to formulate loops over the
Q-classes.
The following five functions are functions of Q-classes.
In general, the parameters characterizing a Q-class will form a
triple (dim,,system,,q-class)
where dim is the associated
dimension, system is the number of the associated crystal system, and
q-class is the number of the Q-class within the crystal system.
However, in case of dimensions 2 or 3, a Q-class may also be
characterized by a pair (dim, IT-number)
where IT-number is the
number in the International Tables for Crystallography Hah83 of
any space-group type lying in (a Z-class of) that Q-class, or
just by the Hermann-Mauguin symbol of any space-group type lying in (a
Z-class of) that Q-class.
The Hermann-Mauguin symbols indexHermann-Mauguin symbol which we use
in GAP are the short Hermann-Mauguin symbols defined in the 1983
edition of the International Tables Hah83, but any occurring
indices are expressed by ordinary integers, and bars are replaced by
minus signs. For example, the Hermann-Mauguin symbol
Poverline{4}2_1m will be represented by the string "P-421m"
.
DisplayQClass( dim, system, q-class )
DisplayQClass( dim, IT-number )
DisplayQClass( Hermann-Mauguin-symbol )
DisplayQClass
displays for the specified Q-class essentially the
same information as is provided for that Q-class in Table 1 of
BBNWZ78 (except for the defining relations given there), namely
item the size of the groups in the Q-class,
vspace-2mm
item the isomorphism type of the groups in the Q-class,
vspace-2mm
item the Hurley pattern,
vspace-2mm
item the rational constituents,
vspace-2mm
item the number of Z-classes in the Q-class, and
vspace-2mm
item the number of space-group types in the Q-class.
vspace-2mm
For details see BBNWZ78.
gap> DisplayQClass( "p2" ); #I Q-class H (2,1,2): size 2; isomorphism type 2.1 = C2; #I Q-constituents 2*(2,1,2); cc; 1 Z-class; 1 space group gap> DisplayQClass( "R-3" ); #I Q-class (3,5,2): size 6; isomorphism type 6.1 = C6; #I Q-constituents (3,1,2)+(3,4,3); ncc; 2 Z-classes; 2 space grps gap> DisplayQClass( 3, 195 ); #I Q-class (3,7,1): size 12; isomorphism type 12.5 = A4; #I C-irreducible; 3 Z-classes; 5 space grps gap> DisplayQClass( 4, 27, 4 ); #I Q-class H (4,27,4): size 20; isomorphism type 20.3 = D10xC2; #I Q-irreducible; 1 Z-class; 1 space group gap> DisplayQClass( 4, 29, 1 ); #I *Q-class (4,29,1): size 18; isomorphism type 18.3 = D6xC3; #I R-irreducible; 3 Z-classes; 5 space grps
Note in the preceding examples that, as pointed out above, the term ``size'' denotes the order of a representative group of the specified Q-class and, of course, not the (infinite) class length.
FpGroupQClass( dim, system, q-class )
FpGroupQClass( dim, IT-number )
FpGroupQClass( Hermann-Mauguin-symbol )
FpGroupQClass
returns a finitely presented group F, say, which is
isomorphic to the groups in the specified Q-class.
The presentation of that group is the same as the corresponding
presentation given in Table 1 of BBNWZ78 except for the fact that
its generators are listed in reverse order. The reason for this change
is that, whenever the group in question is solvable, the resulting
generators form an AG system (as defined in GAP) if they are numbered
``from the top to the bottom'', and the presentation is a polycyclic
power commutator presentation. The AgGroupQClass
function described
next will make use of this fact in order to construct an ag group
isomorphic to F.
Note that, for any Z-class in the specified Q-class, the matrix
group returned by the MatGroupZClass
function (see below) not only is
isomorphic to F, but also its generators satisfy the defining relators
of F.
Besides of the usual components, the group record of F will have an
additional component F.crQClass
which saves a list of the parameters
that specify the given Q-class.
gap> F := FpGroupQClass( 4, 20, 3 ); FpGroupQClass( 4, 20, 3 ) gap> F.generators; [ f.1, f.2 ] gap> F.relators; [ f.1^2*f.2^-3, f.2^6, f.2^-1*f.1^-1*f.2*f.1*f.2^-4 ] gap> F.size; 12 gap> F.crQClass; [ 4, 20, 3 ]
AgGroupQClass( dim, system, q-class )
AgGroupQClass( dim, IT-number )
AgGroupQClass( Hermann-Mauguin-symbol )
AgGroupQClass
returns an ag group A, say, isomorphic to the groups in
the specified Q-class, if these groups are solvable, or the value
false
(together with an appropriate warning), otherwise.
A is constructed by first establishing a finitely presented group (as
it would be returned by the FpGroupQClass
function described above) and
then constructing from it an isomorphic ag group. If the underlying
AG system is not yet a PAG system (see sections More about Ag Words and
More about Ag Groups), it will be refined appropriately (and a warning
will be displayed).
Besides of the usual components, the group record of A will have an
additional component A.crQClass
which saves a list of the parameters
that specify the given Q-class.
gap> A := AgGroupQClass( 4, 31, 3 ); #I Warning: a non-solvable group can't be represented as an ag group false gap> A := AgGroupQClass( 4, 20, 3 ); #I Warning: the presentation has been extended to get a PAG system AgGroupQClass( 4, 20, 3 ) gap> A.generators; [ f.1, f.21, f.22 ] gap> A.size; 12 gap> A.crQClass; [ 4, 20, 3 ]
CharTableQClass( dim, system, q-class )
CharTableQClass( dim, IT-number )
CharTableQClass( Hermann-Mauguin-symbol )
CharTableQClass
returns the character table T, say, of a
representative group of (a Z-class of) the specified Q-class.
Although the set of characters can be considered as an invariant of the specified Q-class, the resulting table will depend on the order in which GAP sorts the conjugacy classes of elements and the irreducible characters and hence, in general, will not coincide with the corresponding table presented in BBNWZ78.
CharTableQClass
proceeds as follows. If the groups in the given
Q-class are solvable, then it first calls the AgGroupQClass
and
RefinedAgSeries
functions to get an isomorphic ag group with a
PAG system, and then it calls the CharTable
function to compute the
character table of that ag group. In the case of one of the five
Q-classes of dimension 4 whose groups are not solvable, it first calls
the FpGroupQClass
function to get an isomorphic finitely presented
group, then it constructs a specially chosen faithful permutation
representation of low degree for that group, and finally it determines
the character table of the resulting permutation group again by calling
the CharTable
function.
In general, the above strategy will be much more efficient than the
alternative possibilities of calling the CharTable
function for a
finitely presented group provided by the FpGroupQClass
function or for
a matrix group provided by the MatGroupZClass
function.
gap> T := CharTableQClass( 4, 20, 3 );; gap> DisplayCharTable( T ); CharTableQClass( 4, 20, 3 )2 2 1 1 2 2 2 3 1 1 1 1 . .
1a 3a 6a 2a 4a 4b 2P 1a 3a 3a 1a 2a 2a 3P 1a 1a 2a 2a 4b 4a 5P 1a 3a 6a 2a 4a 4b
X.1 1 1 1 1 1 1 X.2 1 1 1 1 -1 -1 X.3 1 1 -1 -1 A -A X.4 1 1 -1 -1 -A A X.5 2 -1 1 -2 . . X.6 2 -1 -1 2 . .
A = E(4) = ER(-1) = i
NrZClassesQClass( dim, system, q-class )
NrZClassesQClass( dim, IT-number )
NrZClassesQClass( Hermann-Mauguin-symbol )
NrZClassesQClass
returns the number of Z-classes within the given
Q-class. It can be used to formulate loops over the Z-classes.
The following functions are functions of Z-classes.
In general, the parameters characterizing a Z-class will form a
quadruple (dim,,system, mboxq-class,,z-class)
where dim
is the associated dimension, system is the number of the associated
crystal system, q-class is the number of the associated Q-class
within the crystal system, and z-class is the number of the Z-class
within the Q-class. However, in case of dimensions 2 or 3, a
Z-class may also be characterized by a pair (dim, IT-number)
where IT-number is the number in the International Tables Hah83
of any space-group type lying in that Z-class, or just by the
Hermann-Mauguin symbol of any space-group type lying in that Z-class.
DisplayZClass( dim, system, q-class, z-class )
DisplayZClass( dim, IT-number )
DisplayZClass( Hermann-Mauguin-symbol )
DisplayZClass
displays for the specified Z-class essentially the
same information as is provided for that Z-class in Table 1 of
BBNWZ78 (except for the generating matrices of a class
representative group given there), namely
item for dimensions 2 and 3, the Hermann-Mauguin symbol of a
representative space-group type which belongs to that Z-class,
vspace-2mm
item the Bravais type,
vspace-2mm
item some decomposability information,
vspace-2mm
item the number of space-group types belonging to the Z-class,
vspace-2mm
item the size of the associated cohomology group.
vspace-2mm
For details see BBNWZ78.
gap> DisplayZClass( 2, 3 ); #I Z-class (2,2,1,1) = Z(pm): Bravais type II/I; fully Z-reducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( "F-43m" ); #I Z-class (3,7,4,2) = Z(F-43m): Bravais type VI/II; Z-irreducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( 4, 2, 3, 2 ); #I Z-class B (4,2,3,2): Bravais type II/II; Z-decomposable; #I 2 space groups; cohomology group size 4 gap> DisplayZClass( 4, 21, 3, 1 ); #I *Z-class (4,21,3,1): Bravais type XVI/I; Z-reducible; #I 1 space group; cohomology group size 1
MatGroupZClass( dim, system, q-class, z-class )
MatGroupZClass( dim, IT-number )
MatGroupZClass( Hermann-Mauguin-symbol )
MatGroupZClass
returns a dim times dim matrix group M, say, which
is a representative of the specified Z-class. Its generators satisfy
the defining relators of the finitely presented group which may be
computed by calling the FpGroupQClass
function (see above) for the
Q-class which contains the given Z-class.
The generators of M are the same matrices as those given in Table 1 of
BBNWZ78. Note, however, that they will be listed in reverse order
to keep them in parallel to the abstract generators provided by the
FpGroupQClass
function (see above).
Besides of the usual components, the group record of M will have an
additional component M.crZClass
which saves a list of the parameters
that specify the given Z-class. (In fact, in order to make the
resulting group record consistent with those returned by the
NormalizerZClass
or ZClassRepsDadeGroup
functions described below, it
also will have an additional component M.crConjugator
containing just
the identity element of M.)
gap> M := MatGroupZClass( 4, 20, 3, 1 ); MatGroupZClass( 4, 20, 3, 1 ) gap> for g in M.generators do > Print( "\n" ); PrintArray( g ); od; Print( "\n" );[ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 0, 1 ] ]
[ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ]
gap> M.size; 12 gap> M.crZClass; [ 4, 20, 3, 1 ]
NormalizerZClass( dim, system, q-class, z-class )
NormalizerZClass( dim, IT-number )
NormalizerZClass( Hermann-Mauguin-symbol )
NormalizerZClass
returns the normalizer N, say, in GL(dim,Z) of
the representative dim times dim matrix group which is constructed by
the MatGroupZClass
function (see above).
If the size of N is finite, then N again lies in some Z-class. In
this case, the group record of N will contain two additional components
N.crZClass
and N.crConjugator
which provide the parameters of
that Z-class and a matrix g in GL(dim,Z), respectively, such
that N = g^{-1} R g, where R is the representative group of that
Z-class.
gap> N := NormalizerZClass( 4, 20, 3, 1 ); NormalizerZClass( 4, 20, 3, 1 ) gap> for g in N.generators do > Print( "\n" ); PrintArray( g ); od; Print( "\n" );[ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, -1, -1 ] ]
[ [ 1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ]
[ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ]
[ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, 0 ], [ 0, 0, 0, -1 ] ]
gap> N.size; 96 gap> N.crZClass; [ 4, 20, 22, 1 ] gap> N.crConjugator = N.identity; true
gap> L := NormalizerZClass( 3, 42 ); NormalizerZClass( 3, 3, 2, 4 ) gap> L.size; 16 gap> L.crZClass; [ 3, 4, 7, 2 ] gap> L.crConjugator; [ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, -1 ] ] gap> M := NormalizerZClass( "C2/m" ); Group( [ [ -1, 0, 0 ], [ 0, -1, 0 ], [ 0, 0, -1 ] ], [ [ 0, -1, 0 ], [ -1, 0, 0 ], [ 0, 0, -1 ] ], [ [ 1, 0, 1 ], [ 0, 1, 1 ], [ 0, 0, 1 ] ], [ [ -1, 0, 0 ], [ 0, -1, 0 ], [ -1, -1, 1 ] ], [ [ 0, 1, -1 ], [ 1, 0, -1 ], [ 0, 0, -1 ] ] ) gap> M.size; "infinity" gap> IsBound( M.crZClass ); false
NrSpaceGroupTypesZClass( dim, system, q-class, z-class )
NrSpaceGroupTypesZClass( dim, IT-number )
NrSpaceGroupTypesZClass( Hermann-Mauguin-symbol )
NrSpaceGroupTypes
returns the number of space-group types within the
given Z-class. It can be used to formulate loops over the space-group
types.
gap> N := NrSpaceGroupTypesZClass( 4, 4, 1, 1 ); 13
Some of the Z-classes of dimension d, say, are ``maximal'' in the sense that the groups in these classes are maximal finite subgroups of GL(d,Z). Generalizing a term which is being used for dimension 4, we call the representatives of these maximal Z-classes the ``Dade groups'' of dimension d.
NrDadeGroups( dim )
NrDadeGroups
returns the number of Dade groups of dimension dim. It
can be used to formulate loops over the Dade groups.
There are 2, 4, and 9 Dade groups of dimension 2, 3, and 4, respectively.
gap> NrDadeGroups( 4 ); 9
DadeGroup( dim, n )
DadeGroup
returns the nth Dade group of dimension dim.
gap> D := DadeGroup( 4, 7 ); MatGroupZClass( 4, 31, 7, 2 )
DadeGroupNumbersZClass( dim, system, q-class, z-class )
DadeGroupNumbersZClass( dim, IT-number )
DadeGroupNumbersZClass( Hermann-Mauguin-symbol )
DadeGroupNumbersZClass
returns the set of all those integers n_i for
which the n_ith Dade group of dimension dim contains a subgroup
which, in GL(dim,Z), is conjugate to the representative group of the
given Z-class.
gap> dadeNums := DadeGroupNumbersZClass( 4, 4, 1, 2 ); [ 1, 5, 8 ] gap> for d in dadeNums do > D := DadeGroup( 4, d ); > Print( D, " of size ", Size( D ), "\n" ); > od; MatGroupZClass( 4, 20, 22, 1 ) of size 96 MatGroupZClass( 4, 30, 13, 1 ) of size 288 MatGroupZClass( 4, 32, 21, 1 ) of size 384
ZClassRepsDadeGroup( dim, system, q-class, z-class, n )
ZClassRepsDadeGroup( dim, IT-number, n )
ZClassRepsDadeGroup( Hermann-Mauguin-symbol, n )
ZClassRepsDadeGroup
determines in the nth Dade group of dimension
dim all those conjugacy classes whose groups are, in GL(dim,Z),
conjugate to the Z-class representative group R, say, of the given
Z-class. It returns a list of representative groups of these
conjugacy classes.
Let M be any group in the resulting list. Then the group record of M
provides two components M.crZClass
and M.crConjugator
which
contain the list of Z-class parameters of R and a suitable matrix
g from GL(dim,Z), respectively, such that M equals g^{-1} R g.
gap> DadeGroupNumbersZClass( 2, 2, 1, 2 ); [ 1, 2 ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 1 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 0, 1 ], [ -1, 0 ] ] ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 2 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, -1 ], [ 0, -1 ] ], MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, 0 ], [ -1, 1 ] ] ] gap> R := last[2];; gap> R.crZClass; [ 2, 2, 1, 2 ] gap> R.crConjugator; [ [ 1, 0 ], [ -1, 1 ] ]
The following functions are functions of space-group types.
In general, the parameters characterizing a space-group type will form a
quintuple (dim, system,,q-class,,z-class,,sg-type)
where
dim is the associated dimension, system is the number of the
associated crystal system, q-class is the number of the associated
Q-class within the crystal system, z-class is the number of the
Z-class within the Q-class, and sg-type is the space-group type
within the Z-class. However, in case of dimensions 2 or 3, you may
instead specify a Z-class by a pair (dim, IT-number)
or by its
Hermann-Mauguin symbol (as described above). Then the function will
handle the first space-group type within that Z-class, i.,e.,
sg-type = 1, that is, the corresponding symmorphic space group (split
extension).
DisplaySpaceGroupType( dim, system, q-class, z-class, sg-type
)
DisplaySpaceGroupType( dim, IT-number )
DisplaySpaceGroupType( Hermann-Mauguin-symbol )
DisplaySpaceGroupType
displays for the specified space-group type some
of the information which is provided for that space-group type in Table 1
of BBNWZ78, namely
item the orbit size associated with that space-group type and,
vspace-2mm
item for dimensions 2 and 3, the IT-number and the Hermann-Mauguin
symbol.
vspace-2mm
For details see BBNWZ78.
gap> DisplaySpaceGroupType( 2, 17 ); #I Space-group type (2,4,4,1,1); IT(17) = p6mm; orbit size 1 gap> DisplaySpaceGroupType( "Pm-3" ); #I Space-group type (3,7,2,1,1); IT(200) = Pm-3; orbit size 1 gap> DisplaySpaceGroupType( 4, 32, 10, 2, 4 ); #I *Space-group type (4,32,10,2,4); orbit size 18 gap> DisplaySpaceGroupType( 3, 6, 1, 1, 4 ); #I *Space-group type (3,6,1,1,4); IT(169) = P61, IT(170) = P65; #I orbit size 2; fp-free
DisplaySpaceGroupGenerators( dim, system, q-class, z-class,
sg-type )
DisplaySpaceGroupGenerators( dim, IT-number )
DisplaySpaceGroupGenerators( Hermann-Mauguin-symbol )
DisplaySpaceGroupGenerators
displays the non-translation generators of
a representative space group of the specified space-group type without
actually constructing that matrix group.
In more details: Let n = dim be the given dimension, and let M_1,
ldots, M_r be the generators of the representative n times n matrix
group of the given Z-class (this is the group which you will get if
you call the MatGroupZClass
function (see above) for that Z-class).
Then, for the given space-group type, the SpaceGroup
function described
below will construct as representative of that space-group type an (n+1)
times (n+1) matrix group which is generated by the n translations
which are induced by the (standard) basis vectors of the n-dimensional
Euclidian space, and r additional matrices S_1, ldots, S_r of the
form S_i = left[ catcode`|=12 begin{tabular}{c|c} catcode`|=13
M_i & t_i \ hline 0 & 1 end{tabular} right], where the n times
n submatrices M_i are as defined above, and the t_i are n-columns
with rational entries. The DisplaySpaceGroupGenerators
function saves
time by not constructing the group, but just displaying the r matrices
S_1,
ldots, S_r.
gap> DisplaySpaceGroupGenerators( "P61" ); #I The non-translation generators of SpaceGroup( 3, 6, 1, 1, 4 ) are[ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ]
[ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ]
SpaceGroup( dim, system, q-class, z-class, sg-type )
SpaceGroup( dim, IT-number )
SpaceGroup( Hermann-Mauguin-symbol )
SpaceGroup
returns a (dim+1) times (dim+1 ) matrix group S, say,
which is a representative of the given space-group type (see also the
description of the DisplaySpaceGroupGenerators
function above).
gap> S := SpaceGroup( "P61" ); SpaceGroup( 3, 6, 1, 1, 4 ) gap> for s in S.generators do > Print( "\n" ); PrintArray( s ); od; Print( "\n" );[ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ]
[ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ]
[ [ 1, 0, 0, 1 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ]
[ [ 1, 0, 0, 0 ], [ 0, 1, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ]
[ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 1 ], [ 0, 0, 0, 1 ] ]
gap> S.crSpaceGroupType; [ 3, 6, 1, 1, 4 ]
Besides of the usual components, the resulting group record of S
contains an additional component S.crSpaceGroupType
which saves a
list of the parameters that specify the given space-group type.
Moreover, it contains, in form of a finitely presented group, a presentation of S which is satisfied by the matrix generators. If the factor group of S by its translation normal subgroup is solvable then this presentation is chosen such that it is a polycyclic power commutator presentation. The proper way to access this presentation is to call the following function.
FpGroup( S )
FpGroup
returns a finitely presented group G, say, which is
isomorphic to S, where S is expected to be a space group. It is
chosen such that there is an isomrphism from G to S which maps each
generator of G onto the corresponding generator of S. This means, in
particular, that the matrix generators of S satisfy the relators of
G.
gap> G := FpGroup( S ); Group( g1, g2, g3, g4, g5 ) gap> for rel in G.relators do Print( rel, "\n" ); od; g1^2*g5^-1 g2^3*g5^-1 g2^-1*g1^-1*g2*g1 g3^-1*g1^-1*g3*g1*g3^2 g3^-1*g2^-1*g3*g2*g4*g3^2 g4^-1*g1^-1*g4*g1*g4^2 g4^-1*g2^-1*g4*g2*g4*g3^-1 g4^-1*g3^-1*g4*g3 g5^-1*g1^-1*g5*g1 g5^-1*g2^-1*g5*g2 g5^-1*g3^-1*g5*g3 g5^-1*g4^-1*g5*g4 gap> # Verify that the matrix generators of S satisfy the relators of G. gap> ForAll( G.relators, > rel -> MappedWord( rel, G.generators, S.generators ) = S.identity ); true
TransposedSpaceGroup( dim, system, q-class, z-class, sg-type )
TransposedSpaceGroup( dim, IT-number )
TransposedSpaceGroup( Hermann-Mauguin-symbol )
TransposedSpaceGroup( S )
TransposedSpaceGroup
returns a matrix group T, say, whose generators
are just the transposed generators (in the same order) of the
corresponding space group S specified by the arguments. As for S, you
may get a finite presentation for T via the FpGroup
function.
The purpose of this function is explicitly discussed in the introduction to this section.
gap> T := TransposedSpaceGroup( S ); TransposedSpaceGroup( 3, 6, 1, 1, 4 ) gap> for m in T.generators do > Print( "\n" ); PrintArray( m ); od; Print( "\n" ); [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/2, 1 ] ] [ [ 0, 1, 0, 0 ], [ -1, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/3, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 1, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1, 1 ] ]
GAP 3.4.4