Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
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
Project: cocalc-sagemath-dev-slelievre
Views: 418346<Section><Heading>Fundamental Domains</Heading>12Let <M>S</M> be a crystallographic group. A Fundamental domain is a closed3convex set containing a system of representatives for the Orbits of <M>S</M> in4its natural action on euclidian space.<Br/>56There are two algorithms for calculating fundamental domains in7<Package>HAPcryst</Package>. One uses the geometry and relies on having the8standard rule for evaluating the scalar product (i.e. the gramian matrix is the9identity). The other one is independent of the gramian matrix but does only10work for Bieberbach groups, while the first ("geometric") algorithm works for11arbitrary crystallographic groups given a point with trivial stabilizer.1213<ManSection>14<Meth Name="FundamentalDomainStandardSpaceGroup" Arg="[v], G" />15<Meth Name="FundamentalDomainStandardSpaceGroup" Arg="v, G" />16<Returns>a <K>PolymakeObject</K></Returns>17<Description>18Let <A>G</A> be an <K>AffineCrystGroupOnRight</K> and <A>v</A> a vector. A19fundamental domain containing <A>v</A> is calculated and returned as a20<K>PolymakeObject</K>. The vector <A>v</A> is used as the starting point for21a Dirichlet-Voronoi construction. If no <A>v</A> is given, the origin is22used as starting point if it has trivial stabiliser. Otherwise an error is23cast. <Br />24</Description>25</ManSection>2627<Example><![CDATA[28gap> fd:=FundamentalDomainStandardSpaceGroup([1/2,0,1/5],SpaceGroup(3,9));29<polymake object>30gap> Polymake(fd,"N_VERTICES");312432gap> fd:=FundamentalDomainStandardSpaceGroup(SpaceGroup(3,9));33<polymake object>34gap> Polymake(fd,"N_VERTICES");35836]]></Example>3738<ManSection>39<Meth Name="FundamentalDomainBieberbachGroup" Arg="G"/>40<Meth Name="FundamentalDomainBieberbachGroup" Arg="v G [gram]"/>41<Returns>a <K>PolymakeObject</K></Returns>42<Description>43Given a starting vector <A>v</A> and a Bieberbach group <A>G</A> in44standard form, this method calculates the Dirichlet domain with45respect to <A>v</A>. If <A>gram</A> is not supplied, the average46gramian matrix is used (see47<Ref Meth="GramianOfAverageScalarProductFromFiniteMatrixGroup"/>).48It is not tested if <A>gram</A> is symmetric and positive49definite. It is also not tested, if the product defined50by <A>gram</A> is invariant under the point group of <A>G</A>.51<P/>5253The behaviour of this function is influenced by the option54<K>ineqThreshold</K><Label55Name="ineqThreshold"/><Index>ineqThreshold</Index>.56The algorithm calculates57approximations to a fundamental domain by iteratively adding inequalities.58For an approximating polyhedron, every vertex is tested to find new59inequalities. When all vertices have been considered or the number of new60inequalities already found exceeds61the value of <K>ineqThreshold</K>, a new approximating polyhedron in62calculated. The default for <K>ineqThreshold</K> is 200. Roughly speaking,63a large threshold means shifting work from <K>polymake</K> to &GAP;, a small64one means more calls of (and work for) <K>polymake</K>.65<P/>66If the value of <Ref InfoClass="InfoHAPcryst"/> is 2 or more, for each67approximation the number of vertices of the approximation, the number of68vertices that have to be considered during the calculation, the number of69facets, and new inequalities is shown.70<P/>7172Note that the algorithm chooses vertices in random order and also writes73inequalities for <K>polymake</K> in random order.74</Description>75</ManSection>767778<Example><![CDATA[79gap> a0:=[[ 1, 0, 0, 0, 0, 0, 0 ], [ 0, -1, 0, 0, 0, 0, 0 ],80> [ 0, 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0, 0 ],81> [ 0, 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, -1, -1, 0 ],82> [ -1/2, 0, 0, 1/6, 0, 0, 1 ]83> ];;84gap> a1:=[[ 0, -1, 0, 0, 0, 0, 0 ],[ 0, 0, -1, 0, 0, 0, 0 ],85> [ 1, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0, 0 ],86> [ 0, 0, 0, 0, 1, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 0 ],87> [ 0, 0, 0, 0, 1/3, -1/3, 1 ]88> ];;89gap> trans:=List(Group((1,2,3,4,5,6)),g->90> TranslationOnRightFromVector(Permuted([1,0,0,0,0,0],g)));;91gap> S:=AffineCrystGroupOnRight(Concatenation(trans,[a0,a1]));92<matrix group with 8 generators>93gap> SetInfoLevel(InfoHAPcryst,2);94gap> FundamentalDomainBieberbachGroup(S:ineqThreshold:=10);95#I v: 104/104 f:1596#I new: 20197#I v: 961/961 f:5898#I new: 2099#I v: 1143/805 f:69100#I new: 12101#I v: 1059/555 f:64102#I new: 15103#I v: 328/109 f:33104#I new: 12105#I v: 336/58 f:32106#I new: 0107<polymake object>108gap> FundamentalDomainBieberbachGroup(S:ineqThreshold:=1000);109#I v: 104/104 f:15110#I new: 149111#I v: 635/635 f:41112#I new: 115113#I v: 336/183 f:32114#I new: 0115#I out of inequalities116<polymake object>]]>117</Example>118119<ManSection>120<Meth Name="FundamentalDomainFromGeneralPointAndOrbitPartGeometric" Arg="v121orbit"/>122<Returns>a <K>PolymakeObject</K></Returns>123<Description>124This uses an alternative algorithm based on geometric considerations. It is125not used in any of the high-level methods.126Let <A>v</A> be a vector and <A>orbit</A> a sufficiently large part of the127orbit of <A>v</A> under a crystallographic group with standard- orthogonal128point group (satisfying <M>A^t=A^-1</M>). A geometric algorithm is then used129to calculate the Dirichlet domain with respect to <A>v</A>. This also works130for crystallographic groups which are not Bieberbach. The point <A>v</A> has131to have trivial stabilizer.<Br/>132133The intersection of the full orbit with the unit cube around <A>v</A> is134sufficiently large.135</Description>136</ManSection>137138<Example><![CDATA[139gap> G:=SpaceGroup(3,9);;140gap> v:=[0,0,0];141[ 0, 0, 0 ]142gap> orbit:=OrbitStabilizerInUnitCubeOnRight(G,v).orbit;143[ [ 0, 0, 0 ], [ 0, 0, 1/2 ] ]144gap> fd:=FundamentalDomainFromGeneralPointAndOrbitPartGeometric(v,orbit);145<polymake object>146gap> Polymake(fd,"N_VERTICES");1478148]]></Example>149150151<ManSection>152<Meth Name="IsFundamentalDomainStandardSpaceGroup"153Arg="poly G"/>154<Returns>155true or false156</Returns>157<Description>158This tests if a <K>PolymakeObject</K> <A>poly</A> is a fundamental domain159for the affine crystallographic group <A>G</A> in standard form.<Br/>160161The function tests the following: First, does the orbit of any vertex162of <A>poly</A> have a point inside <A>poly</A> (if this is the163case, <C>false</C> is returned). Second: Is every facet164of <A>poly</A> the image of a different facet under a group element165which does not fix <A>poly</A>. If this is satisfied,166<C>true</C> is returned.167</Description>168</ManSection>169170171<ManSection>172<Meth Name="IsFundamentalDomainBieberbachGroup"173Arg="poly G"/>174<Returns>175true, false or fail176</Returns>177<Description>178This tests if a <K>PolymakeObject</K> <A>poly</A> is a fundamental domain179for the affine crystallographic group <A>G</A> in standard form and if this180group is torsion free (ie a Bieberbach group)<Br />181182It returns <K>true</K> if <A>G</A> is torsion free and <A>poly</A> is a183fundamental domain for <A>G</A>. If <A>poly</A> is not a fundamental domain,184<K>false</K> is returned regardless of the structure of <A>G</A>. And if185<A>G</A> is not torsion free, the method returns <K>fail</K>.186187If <A>G</A> is polycyclic, torsion freeness is tested using a representation188as pcp group. Otherwise the stabilisers of the faces of the fundamental189domain <A>poly</A> are calculated (<A>G</A> is torsion free if and only190if it all these stabilisers are trivial).191</Description>192</ManSection>193194195196197</Section>198199200