> ^ From:

> ^ Subject:

Der GAPers,

I have been trying to do some space group computations with GAP,

and ran into what seems to be a bug (gap3r3p0 on IBM RS/6000).

Since infinite matrix groups are not supported, the only way to

deal with space groups seemed to be to represent them as finitely

presented groups. I was interested in the subgroup structure of

some 6D space group, whose point group is isomorphic to A5.

In order to make the problem simpler, I have divided all groups

by a translation sublattice common to all space groups I wanted

to consider. Here is the session:

gap> f := FreeGroup("A","B","t1","t2","t3","t4","t5","t6");; gap> gap> A :=f.1;; B := f.2;; gap> t1:=f.3;; t2:=f.4;; t3:=f.5;; t4:=f.6;; t5:=f.7;; t6:=f.8;; gap> gap> # relators between rotations gap> gap> rel:=[ A^5, B^3, (A*B)^2 ];; gap> gap> # add relators between translations gap> gap> Append(rel, > [(t1*t2)/(t2*t1), (t1*t3)/(t3*t1), (t1*t4)/(t4*t1), > (t1*t5)/(t5*t1), (t1*t6)/(t6*t1), > (t2*t3)/(t3*t2), (t2*t4)/(t4*t2), > (t2*t5)/(t5*t2), (t2*t6)/(t6*t2), > (t3*t4)/(t4*t3), (t3*t5)/(t5*t3), (t3*t6)/(t6*t3), > (t4*t5)/(t5*t4), (t4*t6)/(t6*t4), (t5*t6)/(t6*t5)]);; gap> gap> # add relators beween rotations and translations gap> gap> Append(rel, > [(A*t1)/(t1*A), (A*t2)/(t3*A), (A*t3)/(t4*A), > (A*t4)/(t5*A), (A*t5)/(t6*A), (A*t6)/(t2*A), > (B*t1)/(t2*B), (B*t2)/(t3*B), (B*t3)/(t1*B), > (B*t4)/(t6*B), (t4*B*t5)/(B), (t5*B*t6)/(B)]);; gap> gap> # divide by sublattice gap> gap> Append(rel, > [t2*t3*t4*t5*t6, (t1*t3*t6)/(t4*t5), (t1*t4*t2)/(t5*t6), > (t1*t5*t3)/(t6*t2), (t1*t6*t4)/(t2*t3), (t1*t2*t5)/(t3*t4)]);; gap> gap> # define the big, symmorphic space group gap> gap> spg:=f/rel;; gap> gap> A :=spg.1;; B :=spg.2;; gap> t1:=spg.3;; t2:=spg.4;; t3:=spg.5;; t4:=spg.6;; t5:=spg.7;; t6:=spg.8;; gap> gap> # here are some (sub-) space groups having the translation sublattice gap> # divided out above gap> gap> ug0:=Subgroup(spg, [A, B]);; gap> ug1:=Subgroup(spg, [t1*t3^-1*t5*A, B]);; gap> ug2:=Subgroup(spg, [t1^2*t3^-2*t5^2*A, B]);; gap> ug3:=Subgroup(spg, [t1^3*t3^-3*t5^3*A, B]);; gap> ug4:=Subgroup(spg, [t1^4*t3^-4*t5^4*A, B]);; gap> gap> # all these subgroups have index 125 in spg gap> gap> Index(spg, ug0); 125 gap> gap> # are there any groups between spg and ug0 ? gap> gap> lst:=LowIndexSubgroupsFpGroup(spg, ug0, 25); [ Subgroup( Group( A, B, t1, t2, t3, t4, t5, t6 ), [ A, t1 ] ) ] gap> gap> # this is wrong, as is the following result! gap> gap> List(lst,h->Index(spg,h)); [ 1 ] gap> gap> # correct is: gap> gap> Index(spg, Subgroup(spg, [ A, t1 ]) ); 300 gap> gap> Size(spg); Size(ug0); Size( Subgroup(spg, [ A, t1 ])); 7500 60 25

Anyone know what's going on here? I had been asking for subgroups

of index (at most) 25 in spg, not of order 25!

How do other people deal with space groups? Finitely presented

groups do not seem to be ideal. When I do something like

LowIndexSubgroupsFpGroup(spg, TrivialSubgroup(spg), 125);

it takes ages (after some 30 hours (on an IBM RS/6000) it was still

not finished, so I stopped it).

Another option would be to represent space group elements by

augmented matrices. The problem of infinite matrix groups could

be circumvented by dividing out a suitable sublattice. The

translation part of augmented matrices then would have to

be taken modulo a lattice. If matrices are expressed with respect

to a lattice basis of that lattice, the translation components

had to be taken modulo 1, at least when comparing matrices,

possibly also in matrix multiplication, in order to prevent

elements from growing indefinitely.

Perhaps even better would be to set up a group of translations as

Z^n modulo some sublattice L of Z^n (possibly with L=m*Z^n).

If representatives of such equivalence classes could be represented

as integral vectors modulo L, one would have a natural action

of a matrix point group on such translation vectors. One could then

build a semi-direct product of a finite matrix (point) group with

such a finite translation group, and consider suitable subgroups

thereof.

What would be involved in using such a scheme? Implementation of

a new domain of 'augmented matrices modulo a lattice', or a new

domain of translations in 'Z^n modulo L'? Would this be feasible?

How could this be implemented? And would it be efficient?

Thanks for any suggestions.

Best regards, Franz Gaehler

> < [top]