Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 5e1854624d3bc613bdd0dd13d1ef9ac7 > files > 401

gap-system-4.4.12-5mdv2010.0.i586.rpm

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (HAPcryst) - Chapter 3: Algorithms of Orbit-Stabilizer Type</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
</head>
<body>


<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

<div class="chlinkprevnexttop">&nbsp;<a href="chap0.html">Top of Book</a>&nbsp;  &nbsp;<a href="chap2.html">Previous Chapter</a>&nbsp;  &nbsp;<a href="chap4.html">Next Chapter</a>&nbsp;  </div>

<p><a id="X7F6789767FB36E74" name="X7F6789767FB36E74"></a></p>
<div class="ChapSects"><a href="chap3.html#X7F6789767FB36E74">3. <span class="Heading">Algorithms of Orbit-Stabilizer Type</span></a>
<div class="ContSect"><span class="nocss">&nbsp;</span><a href="chap3.html#X85CAB2EB85A6E17A">3.1 <span class="Heading">Orbit Stabilizer for Crystallographic Groups</span></a>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X7BED233684B2F811">3.1-1 OrbitStabilizerInUnitCubeOnRight</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X82BD20307A67C119">3.1-2 OrbitStabilizerInUnitCubeOnRightOnSets</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X82CCCD597C86A08A">3.1-3 OrbitPartInVertexSetsStandardSpaceGroup</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X8022CD75819DE536">3.1-4 OrbitPartInFacesStandardSpaceGroup</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X86A80FA17A4D6664">3.1-5 OrbitPartAndRepresentativesInFacesStandardSpaceGroup</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X81DE08687F0DBCC6">3.1-6 StabilizerOnSetsStandardSpaceGroup</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X83C6448679A54F9D">3.1-7 RepresentativeActionOnRightOnSets</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X8002407080DB3EA2">3.1-8 <span class="Heading">Getting other orbit parts</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X8751429287034F4A">3.1-9 ShiftedOrbitPart</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X82656DE584E8DC5D">3.1-10 TranslationsToOneCubeAroundCenter</a></span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap3.html#X858C787E83A902AB">3.1-11 TranslationsToBox</a></span>
</div>
</div>

<h3>3. <span class="Heading">Algorithms of Orbit-Stabilizer Type</span></h3>

<p>We introduce a way to calculate a sufficient part of an orbit and the stabilizer of a point.</p>

<p><a id="X85CAB2EB85A6E17A" name="X85CAB2EB85A6E17A"></a></p>

<h4>3.1 <span class="Heading">Orbit Stabilizer for Crystallographic Groups</span></h4>

<p><a id="X7BED233684B2F811" name="X7BED233684B2F811"></a></p>

<h5>3.1-1 OrbitStabilizerInUnitCubeOnRight</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; OrbitStabilizerInUnitCubeOnRight</code>( <var class="Arg">group, x</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>A record containing</p>


<ul>
<li><p><code class="keyw">.stabilizer</code>: the stabilizer of <var class="Arg">x</var>.</p>

</li>
<li><p><code class="keyw">.orbit</code> set of vectors from [0,1)^n which represents the orbit.</p>

</li>
</ul>
<p>Let <var class="Arg">x</var> be a rational vector from [0,1)^n and <var class="Arg">group</var> a space group in standard form. The function then calculates the part of the orbit which lies inside the cube [0,1)^n and the stabilizer of <var class="Arg">x</var>. Observe that every element of the full orbit differs from a point in the returned orbit only by a pure translation.</p>

<p>Note that the restriction to points from [0,1)^n makes sense if orbits should be compared and the vector passed to <code class="code">OrbitStabilizerInUnitCubeOnRight</code> should be an element of the returned orbit (part).</p>


<table class="example">
<tr><td><pre>
   
gap&gt; S:=SpaceGroup(3,5);;
gap&gt; OrbitStabilizerInUnitCubeOnRight(S,[1/2,0,9/11]);   
rec( orbit := [ [ 0, 1/2, 2/11 ], [ 1/2, 0, 9/11 ] ], 
  stabilizer := Group([ [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], 
          [ 0, 0, 0, 1 ] ] ]) )
gap&gt; OrbitStabilizerInUnitCubeOnRight(S,[0,0,0]);     
rec( orbit := [ [ 0, 0, 0 ] ], stabilizer := &lt;matrix group with 2 generators&gt; )

</pre></td></tr></table>

<p>If you are interested in other parts of the orbit, you can use <code class="func">VectorModOne</code> (<a href="chap2.html#X7C0552BA873515B9"><b>2.1-2</b></a>) for the base point and the functions <code class="func">ShiftedOrbitPart</code> (<a href="chap3.html#X8751429287034F4A"><b>3.1-9</b></a>), <code class="func">TranslationsToOneCubeAroundCenter</code> (<a href="chap3.html#X82656DE584E8DC5D"><b>3.1-10</b></a>) and <code class="func">TranslationsToBox</code> (<a href="chap3.html#X858C787E83A902AB"><b>3.1-11</b></a>) for the resulting orbit<br /> Suppose we want to calculate the part of the orbit of <code class="code">[4/3,5/3,7/3]</code> in the cube of sidelength <code class="code">1</code> around this point:</p>


<table class="example">
<tr><td><pre>
gap&gt; S:=SpaceGroup(3,5);;
gap&gt; p:=[4/3,5/3,7/3];;
gap&gt; o:=OrbitStabilizerInUnitCubeOnRight(S,VectorModOne(p)).orbit;
[ [ 1/3, 2/3, 1/3 ], [ 1/3, 2/3, 2/3 ] ]
gap&gt; box:=p+[[-1,1],[-1,1],[-1,1]];
[ [ 1/3, 8/3, 7/3 ], [ 1/3, 8/3, 7/3 ], [ 1/3, 8/3, 7/3 ] ]
gap&gt; o2:=Concatenation(List(o,i-&gt;i+TranslationsToBox(i,box)));;
gap&gt; # This is what we looked for. But it is somewhat large:
gap&gt; Size(o2);
54
</pre></td></tr></table>

<p><a id="X82BD20307A67C119" name="X82BD20307A67C119"></a></p>

<h5>3.1-2 OrbitStabilizerInUnitCubeOnRightOnSets</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; OrbitStabilizerInUnitCubeOnRightOnSets</code>( <var class="Arg">group, set</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>A record containing</p>


<ul>
<li><p><code class="keyw">.stabilizer</code>: the stabilizer of <var class="Arg">set</var>.</p>

</li>
<li><p><code class="keyw">.orbit</code> set of sets of vectors from [0,1)^n which represents the orbit.</p>

</li>
</ul>
<p>Calculates orbit and stabilizer of a set of vectors. Just as <code class="func">OrbitStabilizerInUnitCubeOnRight</code> (<a href="chap3.html#X7BED233684B2F811"><b>3.1-1</b></a>), it needs input from [0,1)^n. The returned orbit part <code class="keyw">.orbit</code> is a set of sets such that every element of <code class="keyw">.orbit</code> has a non-trivial intersection with the cube [0,1)^n. In general, these sets will not lie inside [0,1)^n completely.</p>


<table class="example">
<tr><td><pre>
gap&gt; S:=SpaceGroup(3,5);;
gap&gt; OrbitStabilizerInUnitCubeOnRightOnSets(S,[[0,0,0],[0,1/2,0]]);
rec( orbit := [ [ [ -1/2, 0, 0 ], [ 0, 0, 0 ] ], 
                [ [ 0, 0, 0 ], [ 0, 1/2, 0 ] ],
                [ [ 1/2, 0, 0 ], [ 1, 0, 0 ] ] ],
  stabilizer := Group([ [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], 
                        [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] ]) )
</pre></td></tr></table>

<p><a id="X82CCCD597C86A08A" name="X82CCCD597C86A08A"></a></p>

<h5>3.1-3 OrbitPartInVertexSetsStandardSpaceGroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; OrbitPartInVertexSetsStandardSpaceGroup</code>( <var class="Arg">group, vertexset, allvertices</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>Set of subsets of <var class="Arg">allvertices</var>.</p>

<p>If <var class="Arg">allvertices</var> is a set of vectors and <var class="Arg">vertexset</var> is a subset thereof, then <code class="func">OrbitPartInVertexSetsStandardSpaceGroup</code> returns that part of the orbit of <var class="Arg">vertexset</var> which consists entirely of subsets of <var class="Arg">allvertices</var>. Note that,unlike the other <code class="code">OrbitStabilizer</code> algorithms, this does not require the input to lie in some particular part of the space.</p>


<table class="example">
<tr><td><pre>
gap&gt; S:=SpaceGroup(3,5);;
gap&gt; OrbitPartInVertexSetsStandardSpaceGroup(S,[[0,1,5],[1,2,0]],
&gt; 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]]));
[ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [ [ 1, 2, 6 ], [ 2, 3, 1 ] ] ]
gap&gt; OrbitPartInVertexSetsStandardSpaceGroup(S, [[1,2,0]],
&gt; 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]]));
[ [ [ 0, 1, 5 ] ], [ [ 1, 1, 0 ] ], [ [ 1, 2, 0 ] ], [ [ 1, 2, 6 ] ], [ [ 2, 3, 1 ] ] ]
</pre></td></tr></table>

<p><a id="X8022CD75819DE536" name="X8022CD75819DE536"></a></p>

<h5>3.1-4 OrbitPartInFacesStandardSpaceGroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; OrbitPartInFacesStandardSpaceGroup</code>( <var class="Arg">group, vertexset, faceset</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>Set of subsets of <var class="Arg">faceset</var>.</p>

<p>This calculates the orbit of a space group on sets restricted to a set of faces.<br /> If <var class="Arg">faceset</var> is a set of sets of vectors and <var class="Arg">vertexset</var> is an element of <var class="Arg">faceset</var>, then <code class="func">OrbitPartInFacesStandardSpaceGroup</code> returns that part of the orbit of <var class="Arg">vertexset</var> which consists entirely of elements of <var class="Arg">faceset</var>.<br /> Note that,unlike the other <code class="code">OrbitStabilizer</code> algorithms, this does not require the input to lie in some particular part of the space.</p>

<p><a id="X86A80FA17A4D6664" name="X86A80FA17A4D6664"></a></p>

<h5>3.1-5 OrbitPartAndRepresentativesInFacesStandardSpaceGroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; OrbitPartAndRepresentativesInFacesStandardSpaceGroup</code>( <var class="Arg">group, vertexset, faceset</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>A set of face-matrix pairs .</p>

<p>This is a slight variation of <code class="func">OrbitPartInFacesStandardSpaceGroup</code> (<a href="chap3.html#X8022CD75819DE536"><b>3.1-4</b></a>) that also returns a representative for every orbit element.</p>


<table class="example">
<tr><td><pre>
gap&gt; S:=SpaceGroup(3,5);;
gap&gt; OrbitPartInVertexSetsStandardSpaceGroup(S,[[0,1,5],[1,2,0]],
&gt; 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]]));
[ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [ [ 1, 2, 6 ], [ 2, 3, 1 ] ] ]
gap&gt; OrbitPartInFacesStandardSpaceGroup(S,[[0,1,5],[1,2,0]],
&gt; Set( [ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [[1/17,6,1/2],[1,2,7]]]));
[ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ] ]
gap&gt; OrbitPartAndRepresentativesInFacesStandardSpaceGroup(S,[[0,1,5],[1,2,0]],
&gt; Set( [ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [[1/17,6,1/2],[1,2,7]]]));
[ [ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ],
      [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] ] ]
</pre></td></tr></table>

<p><a id="X81DE08687F0DBCC6" name="X81DE08687F0DBCC6"></a></p>

<h5>3.1-6 StabilizerOnSetsStandardSpaceGroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; StabilizerOnSetsStandardSpaceGroup</code>( <var class="Arg">group, set</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>finite group of affine matrices (OnRight)</p>

<p>Given a set <var class="Arg">set</var> of vectors and a space group <var class="Arg">group</var> in standard form, this method calculates the stabilizer of that set in the full crystallographic group.<br /></p>


<table class="example">
<tr><td><pre> 

gap&gt; G:=SpaceGroup(3,12);;
gap&gt; v:=[ 0, 0,0 ];;
gap&gt; s:=StabilizerOnSetsStandardSpaceGroup(G,[v]);
&lt;matrix group with 2 generators&gt;
gap&gt; s2:=OrbitStabilizerInUnitCubeOnRight(G,v).stabilizer;
&lt;matrix group with 2 generators&gt;
gap&gt; s2=s;
true

</pre></td></tr></table>

<p><a id="X83C6448679A54F9D" name="X83C6448679A54F9D"></a></p>

<h5>3.1-7 RepresentativeActionOnRightOnSets</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; RepresentativeActionOnRightOnSets</code>( <var class="Arg">group, set, imageset</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>Affine matrix.</p>

<p>Returns an element of the space group S which takes the set <var class="Arg">set</var> to the set <var class="Arg">imageset</var>. The group must be in standard form and act on the right.</p>


<table class="example">
<tr><td><pre>
gap&gt; S:=SpaceGroup(3,5);;
gap&gt; RepresentativeActionOnRightOnSets(G, [[0,0,0],[0,1/2,0]],
&gt;        [ [ 0, 1/2, 0 ], [ 0, 1, 0 ] ]);
[ [ 0, -1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, -1, 0 ], [ 0, 1, 0, 1 ] ]
</pre></td></tr></table>

<p><a id="X8002407080DB3EA2" name="X8002407080DB3EA2"></a></p>

<h5>3.1-8 <span class="Heading">Getting other orbit parts</span></h5>

<p><strong class="pkg">HAPcryst</strong> does not calculate the full orbit but only the part of it having coefficients between -1/2 and 1/2. The other parts of the orbit can be calculated using the following functions.</p>

<p><a id="X8751429287034F4A" name="X8751429287034F4A"></a></p>

<h5>3.1-9 ShiftedOrbitPart</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; ShiftedOrbitPart</code>( <var class="Arg">point, orbitpart</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>Set of vectors</p>

<p>Takes each vector in <var class="Arg">orbitpart</var> to the cube unit cube centered in <var class="Arg">point</var>.</p>


<table class="example">
<tr><td><pre>
gap&gt; ShiftedOrbitPart([0,0,0],[[1/2,1/2,1/3],-[1/2,1/2,1/2],[19,3,1]]);
[ [ 1/2, 1/2, 1/3 ], [ 1/2, 1/2, 1/2 ], [ 0, 0, 0 ] ]
gap&gt; ShiftedOrbitPart([1,1,1],[[1/2,1/2,1/2],-[1/2,1/2,1/2]]);
[ [ 3/2, 3/2, 3/2 ] ]
</pre></td></tr></table>

<p><a id="X82656DE584E8DC5D" name="X82656DE584E8DC5D"></a></p>

<h5>3.1-10 TranslationsToOneCubeAroundCenter</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; TranslationsToOneCubeAroundCenter</code>( <var class="Arg">point, center</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>List of integer vectors</p>

<p>This method returns the list of all integer vectors which translate <var class="Arg">point</var> into the box <var class="Arg">center</var>+[-1/2,1/2]^n</p>


<table class="example">
<tr><td><pre>
gap&gt; TranslationsToOneCubeAroundCenter([1/2,1/2,1/3],[0,0,0]);
[ [ 0, 0, 0 ], [ 0, -1, 0 ], [ -1, 0, 0 ], [ -1, -1, 0 ] ]
gap&gt; TranslationsToOneCubeAroundCenter([1,0,1],[0,0,0]);
[ [ -1, 0, -1 ] ]
</pre></td></tr></table>

<p><a id="X858C787E83A902AB" name="X858C787E83A902AB"></a></p>

<h5>3.1-11 TranslationsToBox</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&gt; TranslationsToBox</code>( <var class="Arg">point, box</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p><b>Returns: </b>An iterator of integer vectors or the empty iterator</p>

<p>Given a vector v and a list of pairs, this function returns the translation vectors (integer vectors) which take v into the box <var class="Arg">box</var>. The box <var class="Arg">box</var> has to be given as a list of pairs.</p>


<table class="example">
<tr><td><pre>
gap&gt; TranslationsToBox([0,0],[[1/2,2/3],[1/2,2/3]]);
[  ]
gap&gt; TranslationsToBox([0,0],[[-3/2,1/2],[1,4/3]]);
[ [ -1, 1 ], [ 0, 1 ] ]
gap&gt; TranslationsToBox([0,0],[[-3/2,1/2],[2,1]]);
Error, Box must not be empty called from
...
</pre></td></tr></table>


<div class="chlinkprevnextbot">&nbsp;<a href="chap0.html">Top of Book</a>&nbsp;  &nbsp;<a href="chap2.html">Previous Chapter</a>&nbsp;  &nbsp;<a href="chap4.html">Next Chapter</a>&nbsp;  </div>


<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

<hr />
<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>