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
4 Resolutions of Crystallographic Groups
3
4
5
4.1 Fundamental Domains
6
7
Let S be a crystallographic group. A Fundamental domain is a closed convex
8
set containing a system of representatives for the Orbits of S in its
9
natural action on euclidian space.
10
There are two algorithms for calculating fundamental domains in HAPcryst.
11
One uses the geometry and relies on having the standard rule for evaluating
12
the scalar product (i.e. the gramian matrix is the identity). The other one
13
is independent of the gramian matrix but does only work for Bieberbach
14
groups, while the first ("geometric") algorithm works for arbitrary
15
crystallographic groups given a point with trivial stabilizer.
16
17
4.1-1 FundamentalDomainStandardSpaceGroup
18
19
> FundamentalDomainStandardSpaceGroup( [v, ]G ) ______________________method
20
> FundamentalDomainStandardSpaceGroup( v, G ) ________________________method
21
Returns: a PolymakeObject
22
23
Let G be an AffineCrystGroupOnRight and v a vector. A fundamental domain
24
containing v is calculated and returned as a PolymakeObject. The vector v is
25
used as the starting point for a Dirichlet-Voronoi construction. If no v is
26
given, the origin is used as starting point if it has trivial stabiliser.
27
Otherwise an error is cast.
28
29
--------------------------- Example ----------------------------
30
gap> fd:=FundamentalDomainStandardSpaceGroup([1/2,0,1/5],SpaceGroup(3,9));
31
<polymake object>
32
gap> Polymake(fd,"N_VERTICES");
33
24
34
gap> fd:=FundamentalDomainStandardSpaceGroup(SpaceGroup(3,9));
35
<polymake object>
36
gap> Polymake(fd,"N_VERTICES");
37
8
38
------------------------------------------------------------------
39
40
4.1-2 FundamentalDomainBieberbachGroup
41
42
> FundamentalDomainBieberbachGroup( G ) ______________________________method
43
> FundamentalDomainBieberbachGroup( v, G[, gram] ) ___________________method
44
Returns: a PolymakeObject
45
46
Given a starting vector v and a Bieberbach group G in standard form, this
47
method calculates the Dirichlet domain with respect to v. If gram is not
48
supplied, the average gramian matrix is used (see
49
GramianOfAverageScalarProductFromFiniteMatrixGroup (2.3-1)). It is not
50
tested if gram is symmetric and positive definite. It is also not tested, if
51
the product defined by gram is invariant under the point group of G.
52
53
The behaviour of this function is influenced by the option ineqThreshold.
54
The algorithm calculates approximations to a fundamental domain by
55
iteratively adding inequalities. For an approximating polyhedron, every
56
vertex is tested to find new inequalities. When all vertices have been
57
considered or the number of new inequalities already found exceeds the value
58
of ineqThreshold, a new approximating polyhedron in calculated. The default
59
for ineqThreshold is 200. Roughly speaking, a large threshold means shifting
60
work from polymake to GAP, a small one means more calls of (and work for)
61
polymake.
62
63
If the value of InfoHAPcryst (1.3-1) is 2 or more, for each approximation
64
the number of vertices of the approximation, the number of vertices that
65
have to be considered during the calculation, the number of facets, and new
66
inequalities is shown.
67
68
Note that the algorithm chooses vertices in random order and also writes
69
inequalities for polymake in random order.
70
71
--------------------------- Example ----------------------------
72
gap> a0:=[[ 1, 0, 0, 0, 0, 0, 0 ], [ 0, -1, 0, 0, 0, 0, 0 ], 
73
> [ 0, 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0, 0 ], 
74
> [ 0, 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, -1, -1, 0 ],
75
> [ -1/2, 0, 0, 1/6, 0, 0, 1 ] 
76
> ];;
77
gap> a1:=[[ 0, -1, 0, 0, 0, 0, 0 ],[ 0, 0, -1, 0, 0, 0, 0 ],
78
> [ 1, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0, 0 ], 
79
> [ 0, 0, 0, 0, 1, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 0 ],
80
> [ 0, 0, 0, 0, 1/3, -1/3, 1 ] 
81
> ];;
82
gap> trans:=List(Group((1,2,3,4,5,6)),g->
83
> TranslationOnRightFromVector(Permuted([1,0,0,0,0,0],g)));;
84
gap> S:=AffineCrystGroupOnRight(Concatenation(trans,[a0,a1]));
85
<matrix group with 8 generators>
86
gap> SetInfoLevel(InfoHAPcryst,2);
87
gap> FundamentalDomainBieberbachGroup(S:ineqThreshold:=10);
88
#I v: 104/104 f:15
89
#I new: 201
90
#I v: 961/961 f:58
91
#I new: 20
92
#I v: 1143/805 f:69
93
#I new: 12
94
#I v: 1059/555 f:64
95
#I new: 15
96
#I v: 328/109 f:33
97
#I new: 12
98
#I v: 336/58 f:32
99
#I new: 0
100
<polymake object>
101
gap> FundamentalDomainBieberbachGroup(S:ineqThreshold:=1000);
102
#I v: 104/104 f:15
103
#I new: 149
104
#I v: 635/635 f:41
105
#I new: 115
106
#I v: 336/183 f:32
107
#I new: 0
108
#I out of inequalities
109
<polymake object>
110
------------------------------------------------------------------
111
112
4.1-3 FundamentalDomainFromGeneralPointAndOrbitPartGeometric
113
114
> FundamentalDomainFromGeneralPointAndOrbitPartGeometric( v, orbit ) _method
115
Returns: a PolymakeObject
116
117
This uses an alternative algorithm based on geometric considerations. It is
118
not used in any of the high-level methods. Let v be a vector and orbit a
119
sufficiently large part of the orbit of v under a crystallographic group
120
with standard- orthogonal point group (satisfying A^t=A^-1). A geometric
121
algorithm is then used to calculate the Dirichlet domain with respect to v.
122
This also works for crystallographic groups which are not Bieberbach. The
123
point v has to have trivial stabilizer.
124
The intersection of the full orbit with the unit cube around v is
125
sufficiently large.
126
127
--------------------------- Example ----------------------------
128
gap> G:=SpaceGroup(3,9);;
129
gap> v:=[0,0,0];
130
[ 0, 0, 0 ]
131
gap> orbit:=OrbitStabilizerInUnitCubeOnRight(G,v).orbit;
132
[ [ 0, 0, 0 ], [ 0, 0, 1/2 ] ]
133
gap> fd:=FundamentalDomainFromGeneralPointAndOrbitPartGeometric(v,orbit);
134
<polymake object>
135
gap> Polymake(fd,"N_VERTICES");
136
8
137
------------------------------------------------------------------
138
139
4.1-4 IsFundamentalDomainStandardSpaceGroup
140
141
> IsFundamentalDomainStandardSpaceGroup( poly, G ) ___________________method
142
Returns: true or false
143
144
This tests if a PolymakeObject poly is a fundamental domain for the affine
145
crystallographic group G in standard form.
146
The function tests the following: First, does the orbit of any vertex of
147
poly have a point inside poly (if this is the case, false is returned).
148
Second: Is every facet of poly the image of a different facet under a group
149
element which does not fix poly. If this is satisfied, true is returned.
150
151
4.1-5 IsFundamentalDomainBieberbachGroup
152
153
> IsFundamentalDomainBieberbachGroup( poly, G ) ______________________method
154
Returns: true, false or fail
155
156
This tests if a PolymakeObject poly is a fundamental domain for the affine
157
crystallographic group G in standard form and if this group is torsion free
158
(ie a Bieberbach group)
159
It returns true if G is torsion free and poly is a fundamental domain for G.
160
If poly is not a fundamental domain, false is returned regardless of the
161
structure of G. And if G is not torsion free, the method returns fail. If G
162
is polycyclic, torsion freeness is tested using a representation as pcp
163
group. Otherwise the stabilisers of the faces of the fundamental domain poly
164
are calculated (G is torsion free if and only if it all these stabilisers
165
are trivial).
166
167
168
4.2 Face Lattice and Resolution
169
170
For Bieberbach groups (torsion free crystallographic groups), the following
171
functions calcualte free resolutions. This calculation is done by finding a
172
fundamental domain for the group. For a description of the HapResolution
173
datatype, see the Hap data types documentation or the experimental datatypes
174
documentation HAPprog: Resolutions in Hap
175
176
4.2-1 ResolutionBieberbachGroup
177
178
> ResolutionBieberbachGroup( G[, v] ) ________________________________method
179
Returns: a HAPresolution
180
181
Let G be a Bieberbach group given as an AffineCrystGroupOnRight and v a
182
vector. Then a Dirichlet domain with respect to v is calculated using
183
FundamentalDomainBieberbachGroup (4.1-2). From this domain, a resolution is
184
calculated using FaceLatticeAndBoundaryBieberbachGroup (4.2-2) and
185
ResolutionFromFLandBoundary (4.2-3). If v is not given, the origin is used.
186
187
--------------------------- Example ----------------------------
188
gap> R:=ResolutionBieberbachGroup(SpaceGroup(3,9));
189
Resolution of length 3 in characteristic
190
0 for SpaceGroupOnRightBBNWZ( 3, 2, 2, 2, 2 ) .
191
No contracting homotopy available.
192

193
gap> List([0..3],Dimension(R));
194
[ 1, 3, 3, 1 ]
195
gap> R:=ResolutionBieberbachGroup(SpaceGroup(3,9),[1/2,0,0]);
196
Resolution of length 3 in characteristic
197
0 for SpaceGroupOnRightBBNWZ( 3, 2, 2, 2, 2 ) .
198
No contracting homotopy available.
199

200
gap> List([0..3],Dimension(R));
201
[ 6, 12, 7, 1 ]
202

203
------------------------------------------------------------------
204
205
4.2-2 FaceLatticeAndBoundaryBieberbachGroup
206
207
> FaceLatticeAndBoundaryBieberbachGroup( poly, group ) _______________method
208
Returns: Record with entries .hasse and .elts representing a part of the
209
hasse diagram and a lookup table of group elements
210
211
Let group be a torsion free AffineCrystGroupOnRight (that is, a Bieberbach
212
group). Given a PolymakeObject poly representing a fundamental domain for
213
group, this method uses polymaking to calculate the face lattice of poly.
214
From the set of faces, a system of representatives for group- orbits is
215
chosen. For each representative, the boundary is then calculated. The list
216
.elts contains elements of group (in fact, it is even a set). The structure
217
of the returned list .hasse is as follows:
218
219
-- The i-th entry contains a system of representatives for the i-1
220
dimensional faces of poly.
221
222
-- Each face is represented by a pair of lists [vertices,boundary]. The
223
list of integers vertices represents the vertices of poly which are
224
contained in this face. The enumeration is chosen such that an i in
225
the list represents the i-th entry of the list
226
Polymake(poly,"VERTICES");
227
228
-- The list boundary represents the boundary of the respective face. It
229
is a list of pairs of integers [j,g]. The first entry lies between -n
230
and n, where n is the number of faces of dimension i-1. This entry
231
represents a face of dimension i-1 (or its additive inverse as a
232
module generator). The second entry g is the position of the matrix in
233
.elts.
234
235
This representation is compatible with the representation of free Z G
236
modules in Hap and this method essentially calculates a free resolution of
237
group. If the value of InfoHAPcryst (1.3-1) is 2 or more, additional
238
information about the number of faces in every codimension, the number of
239
orbits of the group on the free module generated by those faces, and the
240
time it took to calculate the orbit decomposition is output.
241
242
--------------------------- Example ----------------------------
243
gap> SetInfoLevel(InfoHAPcryst,2);
244
gap> G:=SpaceGroup(3,165);
245
SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 )
246
gap> fd:=FundamentalDomainBieberbachGroup(G);
247
<polymake object>
248
gap> fl:=FaceLatticeAndBoundaryBieberbachGroup(fd,G);;
249
#I 1(4/8): 0:00:00.004
250
#I 2(5/18): 0:00:00.000
251
#I 3(2/12): 0:00:00.000
252
#I Face lattice done ( 0:00:00.004). Calculating boundary
253
#I done ( 0:00:00.004) Reformating...
254
gap> RecNames(fl);
255
[ "hasse", "elts", "groupring" ]
256
gap> fl.groupring;
257
<free left module over Integers, and ring-with-one, with 10 generators>
258
------------------------------------------------------------------
259
260
4.2-3 ResolutionFromFLandBoundary
261
262
> ResolutionFromFLandBoundary( fl, group ) ___________________________method
263
Returns: Free resolution
264
265
If fl is the record output by FaceLatticeAndBoundaryBieberbachGroup (4.2-2)
266
and group is the corresponding group, this function returns a HapResolution.
267
Of course, fl has to be generated from a fundamental domain for group
268
269
--------------------------- Example ----------------------------
270
gap> G:=SpaceGroup(3,165);
271
SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 )
272
gap> fd:=FundamentalDomainBieberbachGroup(G);
273
<polymake object>
274
gap> fl:=FaceLatticeAndBoundaryBieberbachGroup(fd,G);;
275
gap> ResolutionFromFLandBoundary(fl,G);
276
Resolution of length 3 in characteristic
277
0 for SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) .
278
No contracting homotopy available.
279

280
gap> ResolutionFromFLandBoundary(fl,G);
281
Resolution of length 3 in characteristic
282
0 for SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) .
283
No contracting homotopy available.
284

285
gap> List([0..4],Dimension(last));
286
[ 2, 5, 4, 1, 0 ]
287
------------------------------------------------------------------
288
289
290