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