CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

Views: 418346
1
2
3 Algorithms of Orbit-Stabilizer Type
3
4
We introduce a way to calculate a sufficient part of an orbit and the
5
stabilizer of a point.
6
7
8
3.1 Orbit Stabilizer for Crystallographic Groups
9
10
3.1-1 OrbitStabilizerInUnitCubeOnRight
11
12
> OrbitStabilizerInUnitCubeOnRight( group, x ) _______________________method
13
Returns: A record containing
14
15
-- .stabilizer: the stabilizer of x.
16
17
-- .orbit set of vectors from [0,1)^n which represents the
18
orbit.
19
20
Let x be a rational vector from [0,1)^n and group a space group in standard
21
form. The function then calculates the part of the orbit which lies inside
22
the cube [0,1)^n and the stabilizer of x. Observe that every element of the
23
full orbit differs from a point in the returned orbit only by a pure
24
translation.
25
26
Note that the restriction to points from [0,1)^n makes sense if orbits
27
should be compared and the vector passed to OrbitStabilizerInUnitCubeOnRight
28
should be an element of the returned orbit (part).
29
30
--------------------------- Example ----------------------------
31
 
32
gap> S:=SpaceGroup(3,5);;
33
gap> OrbitStabilizerInUnitCubeOnRight(S,[1/2,0,9/11]); 
34
rec( orbit := [ [ 0, 1/2, 2/11 ], [ 1/2, 0, 9/11 ] ], 
35
 stabilizer := Group([ [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], 
36
 [ 0, 0, 0, 1 ] ] ]) )
37
gap> OrbitStabilizerInUnitCubeOnRight(S,[0,0,0]); 
38
rec( orbit := [ [ 0, 0, 0 ] ], stabilizer := <matrix group with 2 generators> )
39

40
------------------------------------------------------------------
41
42
If you are interested in other parts of the orbit, you can use VectorModOne
43
(2.1-2) for the base point and the functions ShiftedOrbitPart (3.1-9),
44
TranslationsToOneCubeAroundCenter (3.1-10) and TranslationsToBox (3.1-11)
45
for the resulting orbit
46
Suppose we want to calculate the part of the orbit of [4/3,5/3,7/3] in the
47
cube of sidelength 1 around this point:
48
49
--------------------------- Example ----------------------------
50
gap> S:=SpaceGroup(3,5);;
51
gap> p:=[4/3,5/3,7/3];;
52
gap> o:=OrbitStabilizerInUnitCubeOnRight(S,VectorModOne(p)).orbit;
53
[ [ 1/3, 2/3, 1/3 ], [ 1/3, 2/3, 2/3 ] ]
54
gap> box:=p+[[-1,1],[-1,1],[-1,1]];
55
[ [ 1/3, 8/3, 7/3 ], [ 1/3, 8/3, 7/3 ], [ 1/3, 8/3, 7/3 ] ]
56
gap> o2:=Concatenation(List(o,i->i+TranslationsToBox(i,box)));;
57
gap> # This is what we looked for. But it is somewhat large:
58
gap> Size(o2);
59
54
60
------------------------------------------------------------------
61
62
3.1-2 OrbitStabilizerInUnitCubeOnRightOnSets
63
64
> OrbitStabilizerInUnitCubeOnRightOnSets( group, set ) _______________method
65
Returns: A record containing
66
67
-- .stabilizer: the stabilizer of set.
68
69
-- .orbit set of sets of vectors from [0,1)^n which represents
70
the orbit.
71
72
Calculates orbit and stabilizer of a set of vectors. Just as
73
OrbitStabilizerInUnitCubeOnRight (3.1-1), it needs input from [0,1)^n. The
74
returned orbit part .orbit is a set of sets such that every element of
75
.orbit has a non-trivial intersection with the cube [0,1)^n. In general,
76
these sets will not lie inside [0,1)^n completely.
77
78
--------------------------- Example ----------------------------
79
gap> S:=SpaceGroup(3,5);;
80
gap> OrbitStabilizerInUnitCubeOnRightOnSets(S,[[0,0,0],[0,1/2,0]]);
81
rec( orbit := [ [ [ -1/2, 0, 0 ], [ 0, 0, 0 ] ], 
82
 [ [ 0, 0, 0 ], [ 0, 1/2, 0 ] ],
83
 [ [ 1/2, 0, 0 ], [ 1, 0, 0 ] ] ],
84
 stabilizer := Group([ [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], 
85
 [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] ]) )
86
------------------------------------------------------------------
87
88
3.1-3 OrbitPartInVertexSetsStandardSpaceGroup
89
90
> OrbitPartInVertexSetsStandardSpaceGroup( group, vertexset, allvertices ) method
91
Returns: Set of subsets of allvertices.
92
93
If allvertices is a set of vectors and vertexset is a subset thereof, then
94
OrbitPartInVertexSetsStandardSpaceGroup returns that part of the orbit of
95
vertexset which consists entirely of subsets of allvertices. Note
96
that,unlike the other OrbitStabilizer algorithms, this does not require the
97
input to lie in some particular part of the space.
98
99
--------------------------- Example ----------------------------
100
gap> S:=SpaceGroup(3,5);;
101
gap> OrbitPartInVertexSetsStandardSpaceGroup(S,[[0,1,5],[1,2,0]],
102
> Set([[1,2,0],[2,3,1],[1,2,6],[1,1,0],[0,1,5],[3/5,7,12],[1/17,6,1/2]]));
103
[ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [ [ 1, 2, 6 ], [ 2, 3, 1 ] ] ]
104
gap> OrbitPartInVertexSetsStandardSpaceGroup(S, [[1,2,0]],
105
> Set([[1,2,0],[2,3,1],[1,2,6],[1,1,0],[0,1,5],[3/5,7,12],[1/17,6,1/2]]));
106
[ [ [ 0, 1, 5 ] ], [ [ 1, 1, 0 ] ], [ [ 1, 2, 0 ] ], [ [ 1, 2, 6 ] ], [ [ 2, 3, 1 ] ] ]
107
------------------------------------------------------------------
108
109
3.1-4 OrbitPartInFacesStandardSpaceGroup
110
111
> OrbitPartInFacesStandardSpaceGroup( group, vertexset, faceset ) ____method
112
Returns: Set of subsets of faceset.
113
114
This calculates the orbit of a space group on sets restricted to a set of
115
faces.
116
If faceset is a set of sets of vectors and vertexset is an element of
117
faceset, then OrbitPartInFacesStandardSpaceGroup returns that part of the
118
orbit of vertexset which consists entirely of elements of faceset.
119
Note that,unlike the other OrbitStabilizer algorithms, this does not require
120
the input to lie in some particular part of the space.
121
122
3.1-5 OrbitPartAndRepresentativesInFacesStandardSpaceGroup
123
124
> OrbitPartAndRepresentativesInFacesStandardSpaceGroup( group, vertexset, faceset ) method
125
Returns: A set of face-matrix pairs .
126
127
This is a slight variation of OrbitPartInFacesStandardSpaceGroup (3.1-4)
128
that also returns a representative for every orbit element.
129
130
--------------------------- Example ----------------------------
131
gap> S:=SpaceGroup(3,5);;
132
gap> OrbitPartInVertexSetsStandardSpaceGroup(S,[[0,1,5],[1,2,0]],
133
> Set([[1,2,0],[2,3,1],[1,2,6],[1,1,0],[0,1,5],[3/5,7,12],[1/17,6,1/2]]));
134
[ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [ [ 1, 2, 6 ], [ 2, 3, 1 ] ] ]
135
gap> OrbitPartInFacesStandardSpaceGroup(S,[[0,1,5],[1,2,0]],
136
> Set( [ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [[1/17,6,1/2],[1,2,7]]]));
137
[ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ] ]
138
gap> OrbitPartAndRepresentativesInFacesStandardSpaceGroup(S,[[0,1,5],[1,2,0]],
139
> Set( [ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [[1/17,6,1/2],[1,2,7]]]));
140
[ [ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ],
141
 [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] ] ]
142
------------------------------------------------------------------
143
144
3.1-6 StabilizerOnSetsStandardSpaceGroup
145
146
> StabilizerOnSetsStandardSpaceGroup( group, set ) ___________________method
147
Returns: finite group of affine matrices (OnRight)
148
149
Given a set set of vectors and a space group group in standard form, this
150
method calculates the stabilizer of that set in the full crystallographic
151
group.
152
153
--------------------------- Example ----------------------------
154

155
gap> G:=SpaceGroup(3,12);;
156
gap> v:=[ 0, 0,0 ];;
157
gap> s:=StabilizerOnSetsStandardSpaceGroup(G,[v]);
158
<matrix group with 2 generators>
159
gap> s2:=OrbitStabilizerInUnitCubeOnRight(G,v).stabilizer;
160
<matrix group with 2 generators>
161
gap> s2=s;
162
true
163

164
------------------------------------------------------------------
165
166
3.1-7 RepresentativeActionOnRightOnSets
167
168
> RepresentativeActionOnRightOnSets( group, set, imageset ) __________method
169
Returns: Affine matrix.
170
171
Returns an element of the space group S which takes the set set to the set
172
imageset. The group must be in standard form and act on the right.
173
174
--------------------------- Example ----------------------------
175
gap> S:=SpaceGroup(3,5);;
176
gap> RepresentativeActionOnRightOnSets(G, [[0,0,0],[0,1/2,0]],
177
> [ [ 0, 1/2, 0 ], [ 0, 1, 0 ] ]);
178
[ [ 0, -1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, -1, 0 ], [ 0, 1, 0, 1 ] ]
179
------------------------------------------------------------------
180
181
182
3.1-8 Getting other orbit parts
183
184
HAPcryst does not calculate the full orbit but only the part of it having
185
coefficients between -1/2 and 1/2. The other parts of the orbit can be
186
calculated using the following functions.
187
188
3.1-9 ShiftedOrbitPart
189
190
> ShiftedOrbitPart( point, orbitpart ) _______________________________method
191
Returns: Set of vectors
192
193
Takes each vector in orbitpart to the cube unit cube centered in point.
194
195
--------------------------- Example ----------------------------
196
gap> ShiftedOrbitPart([0,0,0],[[1/2,1/2,1/3],-[1/2,1/2,1/2],[19,3,1]]);
197
[ [ 1/2, 1/2, 1/3 ], [ 1/2, 1/2, 1/2 ], [ 0, 0, 0 ] ]
198
gap> ShiftedOrbitPart([1,1,1],[[1/2,1/2,1/2],-[1/2,1/2,1/2]]);
199
[ [ 3/2, 3/2, 3/2 ] ]
200
------------------------------------------------------------------
201
202
3.1-10 TranslationsToOneCubeAroundCenter
203
204
> TranslationsToOneCubeAroundCenter( point, center ) _________________method
205
Returns: List of integer vectors
206
207
This method returns the list of all integer vectors which translate point
208
into the box center+[-1/2,1/2]^n
209
210
--------------------------- Example ----------------------------
211
gap> TranslationsToOneCubeAroundCenter([1/2,1/2,1/3],[0,0,0]);
212
[ [ 0, 0, 0 ], [ 0, -1, 0 ], [ -1, 0, 0 ], [ -1, -1, 0 ] ]
213
gap> TranslationsToOneCubeAroundCenter([1,0,1],[0,0,0]);
214
[ [ -1, 0, -1 ] ]
215
------------------------------------------------------------------
216
217
3.1-11 TranslationsToBox
218
219
> TranslationsToBox( point, box ) ____________________________________method
220
Returns: An iterator of integer vectors or the empty iterator
221
222
Given a vector v and a list of pairs, this function returns the translation
223
vectors (integer vectors) which take v into the box box. The box box has to
224
be given as a list of pairs.
225
226
--------------------------- Example ----------------------------
227
gap> TranslationsToBox([0,0],[[1/2,2/3],[1/2,2/3]]);
228
[ ]
229
gap> TranslationsToBox([0,0],[[-3/2,1/2],[1,4/3]]);
230
[ [ -1, 1 ], [ 0, 1 ] ]
231
gap> TranslationsToBox([0,0],[[-3/2,1/2],[2,1]]);
232
Error, Box must not be empty called from
233
...
234
------------------------------------------------------------------
235
236
237