1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013
|
<html><head><title>[cryst] 2 Affine crystallographic groups</title></head>
<body text="#000000" bgcolor="#ffffff">
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href = "theindex.htm">Index</a>]
<h1>2 Affine crystallographic groups</h1><p>
<P>
<H3>Sections</H3>
<oL>
<li> <A HREF="CHAP002.htm#SECT001">Construction</a>
<li> <A HREF="CHAP002.htm#SECT002">Point group</a>
<li> <A HREF="CHAP002.htm#SECT003">Translation lattice</a>
<li> <A HREF="CHAP002.htm#SECT004">Special methods</a>
<li> <A HREF="CHAP002.htm#SECT005">Maximal subgroups</a>
<li> <A HREF="CHAP002.htm#SECT006">Space groups with a given point group</a>
<li> <A HREF="CHAP002.htm#SECT007">Wyckoff positions</a>
<li> <A HREF="CHAP002.htm#SECT008">Normalizers</a>
<li> <A HREF="CHAP002.htm#SECT009">Color groups</a>
<li> <A HREF="CHAP002.htm#SECT010">Colored AffineCrystGroups</a>
<li> <A HREF="CHAP002.htm#SECT011">International Tables</a>
</ol><p>
<p>
An affine crystallographic group <var>G</var> is a subgroup of the group of all
Euclidean motions of <i>d</i>-dimensional space, with the property that its
subgroup <var>T</var> of all pure translations is a discrete normal subgroup of
finite index. If the rank of the translation subgroup <var>T</var> is <i>d</i>, <var>G</var>
is called a space group. The quotient <var>G</var>/<var>T</var> is called the point group
of <var>G</var>.
<p>
In this package, affine crystallographic groups are represented as
groups of augmented matrices of dimension <i>d</i>+1. Most functions assume
a group of rational matrices, but some may also work with cyclotomic
matrix groups. In particular, it is possible to compute the translation
basis of an affine crystallographic group given in a cyclotomic
representation, and to pass to a rational representation by conjugating
with that basis. Further functionality for cyclotomic crystallographic
groups is currently not guaranteed.
<p>
Augmented matrices can take one of two forms. Matrices of the form
<pre>
[ M 0 ]
[ t 1 ]
</pre>
act from the right on row vectors (<i>x</i>,1). Such a matrix is said to
be an affine matrix acting on the right. Since in <font face="Gill Sans,Helvetica,Arial">GAP</font> all groups
act from the right, this is the preferred representation of an affine
transformation.
<p>
The second representation of affine transformations is by augmented
matrices of the form
<pre>
[ M t ]
[ 0 1 ]
</pre>
which act from the left on column vectors (<i>x</i>,1). Such matrices are
said to be affine matrices acting on the left. This is the
representation usually adopted by crystallographers.
<p>
<font face="Gill Sans,Helvetica,Arial">Cryst</font> supports affine crystallographic groups in both
representations. Every affine crystallographic group is
constructed in one of these two representations.
<p>
Affine crystallographic groups in different representations should
never be mixed, however. It is recommended to adopt one of the two
representations, and then to stick to that decision. In order to
facilitate this, there is a global variable <code>CrystGroupDefaultAction</code>,
whose value is either <code>RightAction</code> or <code>LeftAction</code>. The initial value
is <code>RightAction</code>, but this can be changed with
<p>
<a name = ""></a>
<li><code>SetCrystGroupDefaultAction( </code><var>action</var><code> ) F</code>
<p>
where <var>action</var> must be either <code>RightAction</code> or <code>LeftAction</code>.
Constructor functions without explicit representation
qualifier then will construct an affine crystallographic group
in the representation specified by <code>CrystGroupDefaultAction</code>.
<p>
<p>
<h2><a name="SECT001">2.1 Construction</a></h2>
<p><p>
<a name = "I0"></a>
<a name = "SSEC001.1"></a>
<li><code>AffineCrystGroupOnRight( </code><var>gens</var><code> ) F</code>
<li><code>AffineCrystGroupOnRight( </code><var>genlist</var><code> ) F</code>
<li><code>AffineCrystGroupOnRight( </code><var>genlist</var><code>, </code><var>identity</var><code> ) F</code>
<p>
returns the matrix group generated by <var>gens</var> or <var>genlist</var>, which must
be affine matrices acting on the right, as affine crystallographic
group acting on the right. An already existing group <var>S</var> of affine
matrices acting on the right can be converted to an affine
crystallographic group acting on the right with
<p>
<a name = "SSEC001.2"></a>
<li><code>AsAffineCrystGroupOnRight( </code><var>S</var><code> ) F</code>
<p>
The property
<p>
<a name = "SSEC001.3"></a>
<li><code>IsAffineCrystGroupOnRight( </code><var>S</var><code> ) P</code>
<p>
is <code>true</code> exactly for those groups which have been constructed in the
above two ways.
<p>
<a name = "SSEC001.4"></a>
<li><code>AffineCrystGroupOnLeft( </code><var>gens</var><code> ) F</code>
<li><code>AffineCrystGroupOnLeft( </code><var>genlist</var><code> ) F</code>
<li><code>AffineCrystGroupOnLeft( </code><var>genlist</var><code>, </code><var>identity</var><code> ) F</code>
<p>
returns the matrix group generated by <var>gens</var> or <var>genlist</var>, which must
be affine matrices acting on the left, as affine crystallographic
group acting on the left. An already existing group <var>S</var> of affine
matrices acting on the left can be converted to an affine
crystallographic group acting on the left with
<p>
<a name = "SSEC001.5"></a>
<li><code>AsAffineCrystGroupOnLeft( </code><var>S</var><code> ) F</code>
<p>
The property
<p>
<a name = "SSEC001.6"></a>
<li><code>IsAffineCrystGroupOnLeft( </code><var>S</var><code> ) P</code>
<p>
is <code>true</code> exactly for those groups which have been constructed in the
above two ways.
<p>
It is recommended to adopt one representation for affine
crystallographic groups, and then to stick to it. To facilitate
this, routines are provided which assume a default representation.
<p>
<a name = "SSEC001.7"></a>
<li><code>AffineCrystGroup( </code><var>gens</var><code> ) F</code>
<li><code>AffineCrystGroup( </code><var>genlist</var><code> ) F</code>
<li><code>AffineCrystGroup( </code><var>genlist</var><code>, </code><var>identity</var><code> ) F</code>
<p>
calls <code>AffineCrystGroupOnRight</code> or <code>AffineCrystGroupOnLeft</code> with
the same arguments, depending on the value of <code>CrystGroupDefaultAction</code>.
<p>
<a name = "SSEC001.8"></a>
<li><code>AsAffineCrystGroup( </code><var>S</var><code> ) F</code>
<p>
calls <code>AsAffineCrystGroupOnRight</code> or <code>AsAffineCrystGroupOnLeft</code> with
the same argument, depending on the value of <code>CrystGroupDefaultAction</code>.
<p>
<a name = "SSEC001.9"></a>
<li><code>IsAffineCrystGroup( </code><var>S</var><code> ) F</code>
<p>
calls <code>IsAffineCrystGroupOnRight</code> or <code>IsAffineCrystGroupOnLeft</code> with
the same argument, depending on the value of <code>CrystGroupDefaultAction</code>.
<p>
<a name = "SSEC001.10"></a>
<li><code>TransposedMatrixGroup( </code><var>S</var><code> ) A</code>
<p>
returns the transpose of the affine crystallographic group <var>S</var>.
If <var>S</var> is acting on the right, its transpose is acting on the left,
and vice versa.
<p>
<p>
<h2><a name="SECT002">2.2 Point group</a></h2>
<p><p>
<a name = "I1"></a>
The point group <var>P</var> of an affine crystallographic group <var>S</var> is the
quotient <var>S</var>/<var>T</var>, where <var>T</var> is the normal subgroup of all pure
translations. <var>P</var> is isomorphic to the group generated by the
linear parts of all affine matrices contained in <var>S</var>. In <font face="Gill Sans,Helvetica,Arial">Cryst</font>
this latter group is identified with the point group of <var>S</var>.
<p>
<a name = "SSEC002.1"></a>
<li><code>PointGroup( </code><var>S</var><code> ) A</code>
<p>
returns the point group of <var>S</var>.
<p>
<a name = "SSEC002.2"></a>
<li><code>IsPointGroup( </code><var>P</var><code> ) P</code>
<p>
returns <code>true</code> if and only if <var>P</var> has been constructed as the
point group of an affine crystallographic group <var>S</var>.
<p>
<a name = "SSEC002.3"></a>
<li><code>AffineCrystGroupOfPointGroup( </code><var>P</var><code> ) A</code>
<p>
returns the affine crystallographic group <var>S</var>, from which <var>P</var> has
been constructed.
<p>
<a name = "SSEC002.4"></a>
<li><code>PointHomomorphism( </code><var>S</var><code> ) A</code>
<p>
returns a homomorphism from the affine crystallographic group to its
point group.
<p>
<a name = "SSEC002.5"></a>
<li><code>IsPointHomomorphism( </code><var>H</var><code> ) P</code>
<p>
returns <code>true</code> if and only if <var>H</var> has been constructed as the
<code>PointHomomorphism</code> of an affine crystallographic group.
<p>
<p>
<h2><a name="SECT003">2.3 Translation lattice</a></h2>
<p><p>
<a name = "I2"></a>
The vectors by which the pure translations in an affine
crystallographic group translate form a discrete lattice, <var>L</var>,
called the translation lattice of <var>S</var>.
<p>
<a name = "SSEC003.1"></a>
<li><code>TranslationBasis( </code><var>S</var><code> ) A</code>
<p>
returns a basis of the translation lattice of <var>S</var>. The basis returned
is unique for the translation lattice.
<p>
<a name = "SSEC003.2"></a>
<li><code>InternalBasis( </code><var>S</var><code> ) A</code>
<p>
returns a basis used internally for many computations. It consists
of the translation basis <var>B</var> of <var>S</var>, extended by further standard
basis vectors if <var>B</var> has not full rank.
<p>
If a generating set <var>B</var> of the translation lattice of <var>S</var> is known
from somewhere, this knowledge can be added to <var>S</var> with
<p>
<a name = "SSEC003.3"></a>
<li><code>AddTranslationBasis( </code><var>S</var><code>, </code><var>B</var><code> ) F</code>
<p>
This function must do further work, so that <code>SetTranslationBasis</code>
cannot be used for this purpose. If doubts arise about the
correctness of the translation basis that has been added by hand,
one can check the correctness of the stored value with
<p>
<a name = "SSEC003.4"></a>
<li><code>CheckTranslationBasis( </code><var>S</var><code> ) F</code>
<p>
An affine crystallographic group <var>S</var> acting on <i>d</i>-dimensional Euclidean
space is called a <strong>space group</strong> if its translation lattice has rank <i>d</i>.
<p>
<a name = "SSEC003.5"></a>
<li><code>IsSpaceGroup( </code><var>S</var><code> ) P</code>
<p>
tests if the affine crystallographic group <var>S</var> is a space group.
<p>
Since many computations are done internally in the <code>InternalBasis</code> of
<var>S</var>, we say that <var>S</var> is in standard form if the <code>InternalBasis</code> is the
standard basis of Euclidean row space or column space, respectively.
This means that the translation lattice is generated by the first <i>k</i>
standard basis vectors, where <i>k</i> is the rank of the translation lattice.
<p>
<a name = "SSEC003.6"></a>
<li><code>IsStandardAffineCrystGroup( </code><var>S</var><code> ) P</code>
<p>
checks if <var>S</var> is in standard form.
<p>
<a name = "SSEC003.7"></a>
<li><code>IsStandardSpaceGroup( </code><var>S</var><code> ) P</code>
<p>
checks if <var>S</var> is a space group in standard form.
<p>
<a name = "SSEC003.8"></a>
<li><code>StandardAffineCrystGroup( </code><var>S</var><code> ) F</code>
<p>
returns a conjugate of <var>S</var> which is in standard form.
<p>
If an space group is a semi-direct product of its point group with its
translation subgroup, <var>S</var> is said to be symmorphic.
<p>
<a name = "SSEC003.9"></a>
<li><code>IsSymmorphicSpaceGroup( </code><var>S</var><code> ) P</code>
<p>
checks if the space group <var>S</var> is symmorphic.
<p>
<p>
<h2><a name="SECT004">2.4 Special methods</a></h2>
<p><p>
<a name = "I3"></a>
In the representation by augmented matrices, affine crystallographic
groups are infinite matrix groups. Their infinity is relatively
trivial in the sense that they have an abelian normal subgroup of
finite index. Nevertheless, for many operations special methods
have to be installed that avoid to attempt algorithms that never
finish. These methods all make essential use of the exactness of the
sequence of homomorphism <code>0 -> </code><var>T</var><code> -> </code><var>S</var><code> -> </code><var>P</var><code> -> 1</code>, where
<var>T</var> is the translation subgroup of <var>S</var>, and <var>P</var> its point group.
<p>
All operations for general groups that make sense for affine
crystallographic groups should work also in that case. In
particular, there should be no restrictions for finite
<code>AffineCrystGroups</code>. For infinite groups, some restrictions
apply, however. For instance, algorithms from the orbit-stabilizer
family can work only if the orbits generated are finite. Note,
however, that <code>Normalizer</code>, <code>Centralizer</code> and <code>RepresentativeAction</code>
in an <code>AffineCrystGroup</code> work even if the corresponding orbit is
infinite.
<p>
Some methods installed for affine crystallographic groups have
a special behavior.
<p>
<a name = "I4"></a>
<a name = "SSEC004.1"></a>
<li><code>\^( </code><var>S</var><code>, </code><var>conj</var><code> )</code>
<p>
If <var>S</var> is an <code>AffineCrystGroupOnRight</code>, the group <var>conj^-1 <strong> S </strong> conj</var>
is returned. <var>conj</var> must be an affine matrix acting on the right.
If <var>S</var> is an <code>AffineCrystGroupOnLeft</code>, the group <var>conj <strong> S </strong> conj^-1</var>
is returned. <var>conj</var> must be an affine matrix acting on the left.
<p>
<a name = "SSEC004.2"></a>
<li><code>IsomorphismFpGroup( </code><var>P</var><code> ) A</code>
<p>
returns an isomorphism from the <code>PointGroup</code> <var>P</var> to an isomorphic
<code>FpGroup</code> <var>F</var>. If <var>P</var> is solvable, <var>F</var> is given in a
power-commutator presentation.
<p>
<a name = "SSEC004.3"></a>
<li><code>IsomorphismFpGroup( </code><var>S</var><code> ) A</code>
<p>
returns an isomorphism from the <code>AffineCrystGroup</code> <var>S</var> to an isomorphic
<code>FpGroup</code> <var>F</var>. If <var>S</var> is solvable, <var>F</var> is given in a power-commutator
presentation. The presentation of <var>F</var> is an extension of the presentation
of the point group <var>P</var> of <var>S</var> used in <code>IsomorphismFpGroup( </code><var>P</var><code> )</code>.
<p>
If the package polycyclic is installed, <font face="Gill Sans,Helvetica,Arial">Cryst</font> automatically loads
it, and then provides special methods for <code>IsomorphismPcpGroup</code>.
<p>
<a name = "SSEC004.4"></a>
<li><code>IsomorphismPcpGroup( </code><var>P</var><code> ) A</code>
<p>
with <var>P</var> a solvable <code>PointGroup</code>, returns an isomorphism from <var>P</var>
to an isomorphic <code>PcpGroup</code> <var>pcp</var>. For details about <code>PcpGroups</code>,
we refer to the documentation of the package polycyclic.
<p>
<a name = "SSEC004.5"></a>
<li><code>IsomorphismPcpGroup( </code><var>S</var><code> ) A</code>
<p>
with <var>S</var> a solvable <code>AffineCrystGroup</code> (i.e., one with a solvable
<code>PointGroup</code>), returns an isomorphism from <var>S</var> to an isomorphic
<code>PcpGroup</code> <var>pcp</var>. The presentation of <var>pcp</var> is an extension of the
presentation of the point group <var>P</var> of <var>S</var> used in
<code>IsomorphismPcpGroup( </code><var>P</var><code> )</code>.
<p>
<p>
<h2><a name="SECT005">2.5 Maximal subgroups</a></h2>
<p><p>
<a name = "I5"></a>
<a name = "I6"></a>
Since an <code>AffineCrystGroup</code> has infinitely many maximal subgroups in general,
in the computation of maximal subgroups it must be further specified which
maximal subgroups are desired. Recall that a maximal subgroup of an
<code>AffineCrystGroup</code> is either latticeequal or classequal. A latticeequal
subgroup has the same translation lattice as the parent, while a
classequal subgroup has the same point group as the parent. In the
classequal case a maximal subgroup always has prime-power index, whereas
in the latticeequal case this is so only in dimensions up to 3.
<p>
<a name = "SSEC005.1"></a>
<li><code>MaximalSubgroupClassReps( </code><var>S</var><code>, </code><var>flags</var><code> ) O</code>
<p>
returns a list of conjugacy class representatives of maximal subgroups
of the <code>AffineCrystGroup</code> <var>S</var>.
<p>
<a name = "SSEC005.2"></a>
<li><code>ConjugacyClassesMaximalSubgroups( </code><var>S</var><code>, </code><var>flags</var><code> ) O</code>
<p>
returns a list of conjugacy classes of maximal subgroups
of the <code>AffineCrystGroup</code> <var>S</var>.
<p>
In these two functions, the argument <var>flags</var> specifies which maximal
subgroups are computed. <var>flags</var> is a record which may have the following
components:
<p>
<p>
<dl compact>
<p>
<dt> <code>flags.primes := [p1 .. pr]</code> <dd>
only maximal subgroups of p-power index for the given primes p are
computed
<p>
<dt> <code>flags.latticeequal := true</code> <dd>
only latticeequal maximal subgroups are computed
<p>
<dt> <code>flags.classequal := true</code> <dd>
only classequal maximal subgroups are computed
<p>
</dl>
<p>
<code>flags.latticeequal</code> and <code>flags.classequal</code> must not both be bound
and <code>true</code>. <code>flags.primes</code> may be omitted only if <code>flags.latticeequal</code>
is bound and <code>true</code>.
<p>
<pre>
gap> S := SpaceGroupIT(3,222);
SpaceGroupOnRightIT(3,222,'2')
gap> L := MaximalSubgroupClassReps( S, rec( primes := [3,5] ) );;
gap> List( L, IndexInParent );
[ 3, 27, 125 ]
gap> L := MaximalSubgroupClassReps( S,
> rec( classequal := true, primes := [3,5] ) );;
gap> List( L, IndexInParent );
[ 27, 125 ]
gap> L := MaximalSubgroupClassReps( S,
> rec( latticeequal := true, primes := [3,5] ) );;
gap> List( L, IndexInParent );
[ 3 ]
gap> L := MaximalSubgroupClassReps( S, rec( latticeequal := true ) );;
gap> Length(L);
5
gap> List( L, IndexInParent );
[ 2, 2, 2, 3, 4 ]
</pre>
<p>
<p>
<h2><a name="SECT006">2.6 Space groups with a given point group</a></h2>
<p><p>
<a name = "I7"></a>
<a name = "SSEC006.1"></a>
<li><code>SpaceGroupsByPointGroupOnRight( </code><var>P</var><code> ) O</code>
<li><code>SpaceGroupsByPointGroupOnRight( </code><var>P</var><code>, </code><var>norm</var><code> ) O</code>
<li><code>SpaceGroupsByPointGroupOnRight( </code><var>P</var><code>, </code><var>norm</var><code>, </code><var>orbsflag</var><code> ) O</code>
<p>
where <var>P</var> is any finite subgroup of <i>GL</i>(<i>d</i>,<b>Z</b>), returns a list of
all space groups (acting on the right) with point group <var>P</var>, up to
conjugacy in the full translation group of Euclidean space. All
these space groups are returned as <code>AffineCrystGroupOnRight</code> in
standard representation. If a second argument is present, which must
be a list of elements of the normalizer of <var>P</var> in <i>GL</i>(<i>d</i>,<b>Z</b>), only
space groups inequivalent under conjugation with these elements are
returned. If these normalizer elements, together with <var>P</var>, generate
the full normalizer of <var>P</var> in <i>GL</i>(<i>d</i>,<b>Z</b>), then exactly one
representative of each space group type is obtained.
If the third argument <var>orbsflag</var>, which must be <code>false</code> or <code>true</code>,
is also present and <code>true</code>, all space groups up to conjugacy in
the full translation group are returned, but these space groups are
collected into orbits under the conjugation action with elements from
<var>norm</var>.
<p>
<pre>
gap> P := Group([ [ [ -1, 0 ], [ 0, -1 ] ], [ [ -1, 0 ], [ 0, 1 ] ] ]);
Group([ [ [ -1, 0 ], [ 0, -1 ] ], [ [ -1, 0 ], [ 0, 1 ] ] ])
gap> norm := GeneratorsOfGroup( NormalizerInGLnZ( P ) );
[ [ [ -1, 0 ], [ 0, -1 ] ], [ [ -1, 0 ], [ 0, 1 ] ], [ [ -1, 0 ], [ 0, -1 ] ],
[ [ 1, 0 ], [ 0, -1 ] ], [ [ 0, 1 ], [ 1, 0 ] ] ]
gap> SpaceGroupsByPointGroupOnRight( P );
[ <matrix group with 4 generators>, <matrix group with 4 generators>,
<matrix group with 4 generators>, <matrix group with 4 generators> ]
gap> SpaceGroupsByPointGroupOnRight( P, norm );
[ <matrix group with 4 generators>, <matrix group with 4 generators>,
<matrix group with 4 generators> ]
gap> SpaceGroupsByPointGroupOnRight( P, norm, true );
[ [ <matrix group with 4 generators> ],
[ <matrix group with 4 generators>, <matrix group with 4 generators> ],
[ <matrix group with 4 generators> ] ]
</pre>
<p>
<a name = "SSEC006.2"></a>
<li><code>SpaceGroupTypesByPointGroupOnRight( </code><var>P</var><code> ) O</code>
<li><code>SpaceGroupTypesByPointGroupOnRight( </code><var>P</var><code>, </code><var>orbsflag</var><code> ) O</code>
<p>
returns a list of space group type representatives (acting on the right)
of the point group <var>P</var>. As in the case of <code>SpaceGroupsByPointGroupOnRight</code>,
if the boolean argument <var>orbsflag</var> is present and <code>true</code>, not only space
group type representatives, but all space groups up to conjugacy in
the full translation group are returned. These are then collected
into lists of space groups of the same space group type.
<p>
<pre>
gap> SpaceGroupTypesByPointGroupOnRight( P );
[ <matrix group with 4 generators>, <matrix group with 4 generators>,
<matrix group with 4 generators> ]
gap> SpaceGroupTypesByPointGroupOnRight( P, true );
[ [ <matrix group with 4 generators> ],
[ <matrix group with 4 generators>, <matrix group with 4 generators> ],
[ <matrix group with 4 generators> ] ]
</pre>
<p>
<a name = "SSEC006.3"></a>
<li><code>SpaceGroupsByPointGroupOnLeft( </code><var>P</var><code> ) O</code>
<li><code>SpaceGroupsByPointGroupOnLeft( </code><var>P</var><code>, </code><var>norm</var><code> ) O</code>
<li><code>SpaceGroupsByPointGroupOnLeft( </code><var>P</var><code>, </code><var>norm</var><code>, </code><var>orbsflag</var><code> ) O</code>
<p>
works the same way as <code>SpaceGroupsByPointGroupOnRight</code>, except that
the space groups acting from the left are returned.
<p>
<a name = "SSEC006.6"></a>
<li><code>SpaceGroupTypesByPointGroupOnLeft( </code><var>P</var><code> ) O</code>
<li><code>SpaceGroupTypesByPointGroupOnLeft( </code><var>P</var><code>, </code><var>orbsflag</var><code> ) O</code>
<p>
works the same way as <code>SpaceGroupTypesByPointGroupOnRight</code>, except that
the space groups acting from the left are returned.
<p>
<a name = "SSEC006.5"></a>
<li><code>SpaceGroupsByPointGroup( </code><var>P</var><code> ) O</code>
<li><code>SpaceGroupsByPointGroup( </code><var>P</var><code>, </code><var>norm</var><code> ) O</code>
<li><code>SpaceGroupsByPointGroup( </code><var>P</var><code>, </code><var>norm</var><code>, </code><var>orbsflag</var><code> ) O</code>
<p>
calls <code>SpaceGroupByPointGroupOnRight</code> or <code>SpaceGroupByPointGroupOnLeft</code>
with the same arguments, depending on the value of <code>CrystGroupDefaultAction</code>.
<p>
<li><code>SpaceGroupTypesByPointGroupOnLeft( </code><var>P</var><code> ) O</code>
<li><code>SpaceGroupTypesByPointGroupOnLeft( </code><var>P</var><code>, </code><var>orbsflag</var><code> ) O</code>
<p>
calls either <code>SpaceGroupTypesByPointGroupOnRight</code> or
<code>SpaceGroupTypesByPointGroupOnLeft</code> with the same arguments, depending
on the variable <code>CrystGroupDefaultAction</code>.
<p>
<p>
<h2><a name="SECT007">2.7 Wyckoff positions</a></h2>
<p><p>
A Wyckoff position of a space group <var>S</var> is an equivalence class of
points in Euclidean space, having stabilizers which are conjugate
subgroups of <var>S</var>. Apart from a subset of lower dimension, which
contains points with even bigger stabilizers, a Wyckoff position
consists of an <var>S</var>-orbit of some affine subspace <var>A</var>. In <font face="Gill Sans,Helvetica,Arial">Cryst</font>,
a Wyckoff position <var>W</var> is specified by such a representative affine
subspace.
<p>
<a name = "SSEC007.1"></a>
<li><code>WyckoffPositions( </code><var>S</var><code> ) A</code>
<p>
returns the list of Wyckoff positions of the space group <var>S</var>.
<p>
<pre>
gap> S := SpaceGroupIT(2,14);
SpaceGroupOnRightIT(2,14,'1')
gap> W := WyckoffPositions(S);
[ < Wyckoff position, point group 1, translation := [ 0, 0 ],
basis := [ ] >
, < Wyckoff position, point group 1, translation := [ 1/3, 2/3 ],
basis := [ ] >
, < Wyckoff position, point group 1, translation := [ 2/3, 1/3 ],
basis := [ ] >
, < Wyckoff position, point group 2, translation := [ 0, 0 ],
basis := [ [ 1, -1 ] ] >
, < Wyckoff position, point group 3, translation := [ 0, 0 ],
basis := [ [ 1, 0 ], [ 0, 1 ] ] >
]
</pre>
<p>
In the previous example, <var>S</var> has three kinds of special points
(the basis is empty), whose representatives all have a stabilizer
with the a point group in the same conjugacy class (with label 1),
one kind of special line (the basis has length 1), and the general
position.
<p>
<a name = "SSEC007.2"></a>
<li><code>WyckoffPositionsByStabilizer( </code><var>S</var><code>, </code><var>sub</var><code> ) O</code>
<p>
where <var>S</var> is a space group and <var>sub</var> a subgroup of the point group or
a list of such subgroups, determines only the Wyckoff positions whose
representatives have a stabilizer with a point group conjugate to the
subgroup <var>sub</var> or to a subgroup contained in the list <var>sub</var>, respectively.
<p>
<pre>
gap> sub := Group([ [ [ 0, -1 ], [ -1, 0 ] ] ]);
Group([ [ [ 0, -1 ], [ -1, 0 ] ] ])
gap> IsSubgroup( PointGroup( S ), sub );
true
gap> WyckoffPositionsByStabilizer( S, sub );
[ < Wyckoff position, point group 1, translation := [ 0, 0 ],
basis := [ [ 1, -1 ] ] >
]
</pre>
<p>
<a name = "SSEC007.3"></a>
<li><code>IsWyckoffPosition( </code><var>obj</var><code> ) R</code>
<p>
checks whether <var>obj</var> is a Wyckoff position.
<p>
<pre>
gap> ForAll( W, IsWyckoffPosition );
true
</pre>
<p>
<a name = "SSEC007.4"></a>
<li><code>WyckoffBasis( </code><var>W</var><code> ) O</code>
<p>
returns a basis of the representative affine subspace of the Wyckoff
position <var>W</var>.
<p>
<pre>
gap> WyckoffBasis( W[4] );
[ [ 1, -1 ] ]
</pre>
<p>
<a name = "SSEC007.5"></a>
<li><code>WyckoffTranslation( </code><var>W</var><code> ) O</code>
<p>
returns a point of the representative affine subspace of the Wyckoff
position <var>W</var>.
<p>
<pre>
gap> WyckoffTranslation( W[3] );
[ 2/3, 1/3 ]
</pre>
<p>
<a name = "SSEC007.6"></a>
<li><code>WyckoffSpaceGroup( </code><var>W</var><code> ) O</code>
<p>
returns the space group of which <var>W</var> is a Wyckoff position.
<p>
<pre>
gap> WyckoffSpaceGroup( W[1] );
SpaceGroupOnRightIT(2,14,'1')
</pre>
<p>
<a name = "SSEC007.7"></a>
<li><code>WyckoffStabilizer( </code><var>W</var><code> ) O</code>
<p>
returns the stabilizer of the (generic) points in the representative
affine subspace of the Wyckoff position <var>W</var>. This stabilizer is a
subgroup of the space group of <var>W</var>, and thus an <code>AffineCrystGroup</code>.
<p>
<pre>
gap> stab := WyckoffStabilizer( W[4] );
Group([ [ [ 0, -1, 0 ], [ -1, 0, 0 ], [ 0, 0, 1 ] ] ])
gap> IsAffineCrystGroupOnRight( stab );
true
</pre>
<p>
<a name = "SSEC007.8"></a>
<li><code>WyckoffOrbit( </code><var>W</var><code> ) O</code>
<p>
determines the orbit of the representative affine subspace <var>A</var> of the
Wyckoff position <var>W</var> under the space group <var>S</var> of <var>W</var> (modulo lattice
translations). The affine subspaces in this orbit are then converted
into a list of Wyckoff positions, which is returned. The Wyckoff
positions in this list are just different representations of <var>W</var>.
Their <code>WyckoffBasis</code> and <code>WyckoffTranslation</code> are chosen such that
the induced parametrizations of their representative subspaces are
mapped onto each other under the space group operation.
<p>
<pre>
gap> orb := WyckoffOrbit( W[4] );
[ < Wyckoff position, point group 2, translation := [ 0, 0 ],
basis := [ [ -2, -1 ] ] >
, < Wyckoff position, point group 2, translation := [ 0, 0 ],
basis := [ [ 1, -1 ] ] >
, < Wyckoff position, point group 2, translation := [ 0, 0 ],
basis := [ [ 1, 2 ] ] >
]
gap> Set(orb);
[ < Wyckoff position, point group 2, translation := [ 0, 0 ],
basis := [ [ -2, -1 ] ] >
]
</pre>
<p>
<a name = "SSEC007.9"></a>
<li><code>WyckoffGraph( </code><var>W</var><code> [, def ] ) O</code>
<li><code>WyckoffGraph( </code><var>S</var><code> [, def ] ) O</code>
<p>
displays the incidence relations of a set of Wyckoff positions graphically.
This function is available only under <font face="Gill Sans,Helvetica,Arial">XGAP</font>. In the first form, <var>W</var> is
a list of Wyckoff positions, which must belong to the same space group.
In the second form, <var>S</var> is a space group; in this case, the function is
applied to the complete list of Wyckoff positions of <var>S</var>. In both forms,
a second argument, <var>def</var>, is possible, which is a record with optional
components <code>title</code>, <code>width</code> and <code>height</code>, specifying the title, width
and height of the graphic sheet on which the graph will be displayed.
<p>
Each vertex of the graph represents a Wyckoff position. Vertices are
arranged in horizontal layers, determined by the dimension <var>s</var> of the
Wyckoff position and the size <var>s</var> of its stabilizer. For each layer,
the list <var>[ d, s ]</var> is displayed at the right border of the graphic
sheet. The vertical positions of the layers are ordered according to
the dimension of the Wyckoff position (primary criterion, smaller
dimension above) and the size of the stabilizer (secondary criterion,
bigger stabilizer above). Two Wyckoff positions are connected if the
closure of the lower one contains the upper one. Two Wyckoff positions
are connected by a line only if there is no Wyckoff position in between.
The connection line is labelled with the number of affine subspaces
contained in the lower Wyckoff position that contain a fixed
representative affine subspace of the upper Wyckoff position.
For instance, if the lower Wyckoff position consists of a space
group orbit of lines (and thus the upper one of an orbit of points),
the label of the connection line is the number of lines in the orbit
which cross a fixed representative point of the upper Wyckoff position.
<p>
The initial layout of the graph is not always optimal. In particular,
several connection lines can be drawn on top of each other, so that
it is not easy to see who is connected with whom. With the left
mouse button, the graph can be rearranged, however. Just drag each
vertex to a more suitable place. Note, however, that a vertex can not
leave its layer. For more details, please consult the <font face="Gill Sans,Helvetica,Arial">XGAP</font> manual.
<p>
By right-clicking on a vertex, a popup menu with information on the
Wyckoff position of that vertex appears. It informs on the size of
the <code>WyckoffStabilizer</code>, the dimension of the Wyckoff position,
the length of the <code>WyckoffOrbit</code> (modulo lattice translations),
the translation and basis of a representative affine subspace, the
isomorphims type of the <code>WyckoffStabilizer</code>, and the ConjugacyClassInfo
of the point group <var>P</var> of the <code>WyckoffStabilizer</code>. The ConjugacyClassInfo
lists for each conjugacy class of elements of <var>P</var> the number of that
class, the order, trace and determinant of its elements, and the
size of the class. This information is useful to identify the
geometric operation of the stabilizer. The isomorphism type and
ConjugacyClassInfo may not be displayed initially. It this case,
they can be obtained by left-clicking on them, or by left-clicking
on the button labelled <var>all</var>. Unfortunately, the popup window
cannot be resized automatically, and since the ConjugacyClassInfo
needs several lines for the display, the information may be hidden
behind the border of the window. You will have to use the slider of
the popup window to make it visible, or resize the window with the
help of your window manager. Alternatively, you can right-click
again on the same vertex, in which case a new popup window of
sufficient size appears.
<p>
<p>
<h2><a name="SECT008">2.8 Normalizers</a></h2>
<p><p>
<a name = "I8"></a>
At present, most of the functions in this section require that the
<font face="Gill Sans,Helvetica,Arial">GAP</font> package <font face="Gill Sans,Helvetica,Arial">CaratInterface</font> is installed (and compiled). Otherwise,
they are available only for space groups from the crystallographic
groups catalogue or the International Tables (section <a href="CHAP002.htm#SECT011">International Tables</a>).
<p>
<a name = "SSEC008.1"></a>
<li><code>NormalizerPointGroupInGLnZ( </code><var>P</var><code> ) A</code>
<p>
returns the normalizer of the <code>PointGroup</code> <var>P</var> in the group of
all unimodular transformations of the lattice spanned by the
<code>InternalBasis</code> <var>B</var> of the <code>AffineCrystGroup</code> <var>S</var> of <var>P</var>.
If <var>S</var> is in standard representation, this is the same as
<code>Normalizer( GL(dim,Integers), P )</code>, otherwise it is
<code>Normalizer( GL(dim,Integers), P^(B^-1) )^B</code>. This notion
probably makes sense only if <var>S</var> is a space group. Note that
<var>P</var> must have elements with integer entries (which is the case
if <var>S</var> is a space group).
<p>
<a name = "SSEC008.2"></a>
<li><code>CentralizerPointGroupInGLnZ( </code><var>P</var><code> ) A</code>
<p>
returns the centralizer of the <code>PointGroup</code> <var>P</var> in the group of
all unimodular transformations of the lattice spanned by the
<code>InternalBasis</code> <var>B</var> of the <code>AffineCrystGroup</code> <var>S</var> of <var>P</var>.
If <var>S</var> is in standard representation, this is the same as
<code>Centralizer( GL(dim,Integers), P )</code>, otherwise it is
<code>Centralizer( GL(dim,Integers), P^(B^-1) )^B</code>. This notion
probably makes sense only if <var>S</var> is a space group. Note that
<var>P</var> must have elements with integer entries (which is the case
if <var>S</var> is a space group).
<p>
<a name = "I9"></a>
<a name = "SSEC008.3"></a>
<li><code>TranslationNormalizer( </code><var>S</var><code> ) F</code>
<p>
returns the normalizer of the space group <var>S</var> in the full translation
group. At present, this function is implemented only for space groups,
not for general <code>AffineCrystGroups</code>. The translation normalizer <var>TN</var>
of <var>S</var> may contain a continuous subgroup <var>C</var>. A basis of the space of
such continuous translations is bound in <code>TN!.continuousTranslations</code>.
Since this subgroup is not finitely generated, it is <strong>not</strong> contained
in the group generated by <code>GeneratorsOfGroup( </code><var>TN</var><code> )</code>. Properly speaking,
the translation normalizer is the span of <var>TN</var> and <var>C</var> together.
<p>
<a name = "I10"></a>
<a name = "SSEC008.4"></a>
<li><code>AffineNormalizer( </code><var>S</var><code> ) F</code>
<p>
returns the affine normalizer of the space group <var>S</var>. The affine
normalizer <var>AF</var> contains the translation normalizer as a subgroup.
Similarly as with <code>TranslationNormalizer</code>, the subgroup <var>C</var> of
continuous translations, which is not finitely generated, is not part
of the group that is returned. However, a basis of the space of
continuous translations is bound in the component
<code>AF!.continuousTranslations</code>.
<p>
<a name = "SSEC008.5"></a>
<li><code>AffineInequivalentSubgroups( </code><var>S</var><code>, </code><var>sub</var><code> ) F</code>
<p>
takes as input a space group <var>S</var> and list of subgroups of <var>S</var>,
and returns a sublist of affine inequivalent subgroups.
Note that the affine normalizer of <var>S</var> must be discrete in the
current implementation. If it is not, <code>fail</code> is returned.
<p>
For two space groups <var>S1</var> and <var>S2</var> of the same dimension (and
acting from the same side),
<p>
<a name = "SSEC008.6"></a>
<li><code>ConjugatorSpaceGroups( </code><var>S1</var><code>, </code><var>S2</var><code> ) F</code>
<p>
returns an affine matrix <var>m</var> such that <code>S1^m = S2</code>, of <code>fail</code>
if no such matrix exists, i.e., if the two space groups are not
equivalent. This function requires that the <font face="Gill Sans,Helvetica,Arial">GAP</font> package
<font face="Gill Sans,Helvetica,Arial">CaratInterface</font> is installed (and compiled).
<p>
<p>
<h2><a name="SECT009">2.9 Color groups</a></h2>
<p><p>
A color group <var>C</var> is a group whose elements are colored in the following
way. The elements having the same color as the identity element <code>One(C)</code>
form a subgroup <var>H</var> of finite index <var>n</var>. <var>H</var> is called the <code>ColorSubgroup</code>
of <var>C</var>. Elements of <var>C</var> have the same color if and only if they are
in the same right coset of <var>H</var> in <var>C</var>. The labelling of the colors,
which runs from 1 to <var>n</var>, is determined by a fixed labelling of the
right cosets of <var>H</var>. The list of right cosets of <var>H</var> is stored in
the attribute <code>ColorCosetList</code>. The color of the elements of a
coset corresponds to the position of the coset in that list. Elements
of <var>H</var> by definition have color 1, i.e., the coset with representative
<code>One(C)</code> is always the first element of the <code>ColorCosetList</code> of <var>C</var>.
Color groups which have a parent inherit their coloring from that parent,
including the labelling of the colors. As with other groups, color groups
having no parent are their own parent.
<p>
Right multiplication by a fixed element <var>g</var> of <var>C</var> induces a permutation
<var>p(g)</var> of the colors of the parent of <var>C</var>. This defines a natural
homomorphism of <var>C</var> into the symmetric group of degree <var>n</var>. The image
of this homomorphism is called the <code>ColorPermGroup</code> of <var>C</var>, and the
homomorphism to it is called the <code>ColorHomomorphism</code> of <var>C</var>.
<p>
<a name = "SSEC009.1"></a>
<li><code>ColorGroup( </code><var>G</var><code>, </code><var>H</var><code> ) F</code>
<p>
constructs a colored copy of <var>G</var>, with color subgroup <var>H</var> (which
should have finite index in <var>G</var>). Color groups constructed in this way
are always their own parent. It is not possible to set their
parent attribute to a different value.
<p>
Groups which may be colored include, in particular, <code>AffineCrystGroups</code>,
but coloring of any finite group should work as well.
<p>
<a name = "SSEC009.2"></a>
<li><code>IsColorGroup( </code><var>G</var><code> ) P</code>
<p>
checks whether <var>G</var> is a color group.
<p>
<a name = "SSEC009.3"></a>
<li><code>ColorSubgroup( </code><var>G</var><code> ) A</code>
<p>
returns the color subgroup of <var>G</var>.
<p>
<a name = "SSEC009.4"></a>
<li><code>ColorCosetList( </code><var>G</var><code> ) A</code>
<p>
returns the color labelling cosets of <var>G</var>.
<p>
<a name = "SSEC009.5"></a>
<li><code>ColorOfElement( </code><var>G</var><code>, </code><var>elem</var><code> ) F</code>
<p>
returns the color of an element of <var>G</var>.
<p>
<a name = "SSEC009.6"></a>
<li><code>ColorPermGroup( </code><var>G</var><code> ) A</code>
<p>
returns the ColorPermGroup of <var>G</var>, which is the permutation group
induced by <var>G</var> acting on the colors of the parent of <var>G</var>.
<p>
<a name = "SSEC009.7"></a>
<li><code>ColorHomomorphism( </code><var>G</var><code> ) A</code>
<p>
returns the homomomorphism from <var>G</var> to its <code>ColorPermGroup</code>.
<p>
<a name = "SSEC009.8"></a>
<li><code>Subgroup( </code><var>C</var><code>, </code><var>elems</var><code> ) O</code>
<p>
where <var>C</var> is a color group, returns the colored subgroup <var>U</var> of <var>C</var>
generated by <var>elems</var>. The parent of <var>U</var> is set to the parent of <var>C</var>,
from which the coloring of <var>U</var> is inherited.
<p>
<pre>
gap> G := Group( (1,2,3), (2,3,4) );
Group([ (1,2,3), (2,3,4) ])
gap> H := Group( (1,2,3) );
Group([ (1,2,3) ])
gap> C := ColorGroup( G, H );
Group([ (1,2,3), (2,3,4) ])
gap> ColorSubgroup( C ) = H;
true
gap> ColorCosetList( C );
[ RightCoset(Group( [ (1,2,3) ] ),()), RightCoset(Group( [ (1,2,3) ] ),(1,2)
(3,4)), RightCoset(Group( [ (1,2,3) ] ),(1,3)(2,4)),
RightCoset(Group( [ (1,2,3) ] ),(1,4)(2,3)) ]
gap> List( last, x -> ColorOfElement( C, Representative(x) ) );
[ 1, 2, 3, 4 ]
gap> U := Subgroup( C, [(1,3)(2,4)] );
Group([ (1,3)(2,4) ])
gap> IsColorGroup( U );
true
gap> ColorSubgroup( U );
Group(())
gap> ColorCosetList( U );
[ RightCoset(Group( () ),()), RightCoset(Group( () ),(1,3)(2,4)) ]
gap> List( last, x -> ColorOfElement( U, Representative(x) ) );
[ 1, 3 ]
</pre>
<p>
<p>
<h2><a name="SECT010">2.10 Colored AffineCrystGroups</a></h2>
<p><p>
If <var>C</var> is a colored <code>AffineCrystGroup</code> whose <code>ColorSubgroup</code> is
lattice-equal (translationengleich) with <var>C</var>, then the <code>PointGroup</code> of
<var>C</var> can consistently be colored. In that case,
<p>
<a name = "SSEC010.1"></a>
<li><code>PointGroup( C ) A</code>
<p>
returns a colored point group. Otherwise, the <code>PointGroup</code> of <var>C</var> is
an ordinary, uncolored group.
<p>
<pre>
gap> S := SpaceGroupIT( 2, 10 );
SpaceGroupOnRightIT(2,10,'1')
gap> m := MaximalSubgroupClassReps( S, rec( primes := [2] ) );
[ <matrix group with 4 generators>, <matrix group with 3 generators>,
<matrix group with 4 generators> ]
gap> List( last, x -> TranslationBasis(x) = TranslationBasis(S) );
[ false, true, false ]
gap> C := ColorGroup( S, m[1] );; IsColorGroup( PointGroup( C ) );
false
gap> C := ColorGroup( S, m[2] );; IsColorGroup( PointGroup( C ) );
true
</pre>
<p>
Two colorings of a <strong>space group</strong> <var>S</var> are <strong>equivalent</strong> if the two
<code>ColorSubgroups</code> are conjugate in the affine normalizer of <var>S</var>.
For instance, a list of inequivalent index-2 <code>ColorSubgroups</code> of
<var>S</var> can be obtained with the following code:
<p>
<a name = "I11"></a>
<pre>
gap> sub := MaximalSubgroupClassReps( S, rec( primes := [2] ) );
[ <matrix group with 4 generators>, <matrix group with 3 generators>,
<matrix group with 4 generators> ]
gap> List( sub, Size );
[ infinity, infinity, infinity ]
gap> sub := Filtered( sub, s -> IndexInParent( s ) = 2 );
[ <matrix group of size infinity with 4 generators>,
<matrix group of size infinity with 3 generators>,
<matrix group of size infinity with 4 generators> ]
gap> Length( AffineInequivalentSubgroups( S, sub ) );
2
</pre>
<p>
Note that <code>AffineInequivalentSubgroups</code> requires the <font face="Gill Sans,Helvetica,Arial">GAP</font> package
<font face="Gill Sans,Helvetica,Arial">CaratInterface</font> to be installed. Otherwise, this function is supported
only for <code>AffineCrystGroups</code> constructed from the crystallographic groups
catalog.
<p>
<p>
<h2><a name="SECT011">2.11 International Tables</a></h2>
<p><p>
For the user's convenience, a table with the 17 plane groups and the
230 space groups is included in <font face="Gill Sans,Helvetica,Arial">Cryst</font>. These groups are given in
exactly the same settings (i.e., choices of basis and origin) as in
the International Tables. Space groups with a centered lattice are
therefore given in the non-primitive basis crystallographers are
used to. This is in contrast to the crystallographic groups catalogue,
where always a primitive basis is used.
<p>
For some of the 3D space groups, two different settings are available.
The possible settings are labelled with the characters <code>'1'</code>,
<code>'2'</code>,<code>'b'</code>,<code>'c'</code>,<code>'h'</code> and <code>'r'</code>.
If only one setting is available, it is labelled <code>'1'</code>. For
some space groups there exists a point with higher symmetry than the
origin of the <code>'1'</code> setting. In such cases, a second setting
<code>'2'</code> is available, which has this high symmetry point as
origin. This second setting <code>'2'</code> then is the default setting.
Space groups which have a unique axis can have this axis in <var>b</var>
direction (setting<code>'b'</code>) or <var>c</var> direction (setting
<code>'c'</code>). <code>'b'</code> is the default setting. Rhombohedral
space groups are given in a hexagonal basis (setting <code>'h'</code>) and
in a rhombohedral basis (setting <code>'r'</code>). <code>'h'</code> is the
default setting.
<p>
<a name = "SSEC011.1"></a>
<li><code>SpaceGroupSettingsIT( </code><var>dim</var><code>, </code><var>nr</var><code> ) F</code>
<p>
returns a string, whose characters label the available settings of
the space group with number <var>nr</var> and dimension <var>dim</var>.
<p>
<a name = "SSEC011.2"></a>
<li><code>SpaceGroupOnRightIT( </code><var>dim</var><code>, </code><var>nr</var><code> ) F</code>
<li><code>SpaceGroupOnRightIT( </code><var>dim</var><code>, </code><var>nr</var><code>, </code><var>setting</var><code> ) F</code>
<p>
returns space group number <var>nr</var> in dimension <var>dim</var> in the
representation acting on the right. In the third argument,
the desired setting can be specified. Otherwise, the space
group is returned in the default setting for that space group.
<p>
<a name = "SSEC011.3"></a>
<li><code>SpaceGroupOnLeftIT( </code><var>dim</var><code>, </code><var>nr</var><code> ) F</code>
<li><code>SpaceGroupOnLeftIT( </code><var>dim</var><code>, </code><var>nr</var><code>, </code><var>setting</var><code> ) F</code>
<p>
returns space group number <var>nr</var> in dimension <var>dim</var> in the
representation acting on the left. In the third argument,
the desired setting can be specified. Otherwise, the space
group is returned in the default setting for that space group.
<p>
<a name = "SSEC011.4"></a>
<li><code>SpaceGroupIT( </code><var>dim</var><code>, </code><var>nr</var><code> ) F</code>
<li><code>SpaceGroupIT( </code><var>dim</var><code>, </code><var>nr</var><code>, </code><var>setting</var><code> ) F</code>
<p>
returns either <code>SpaceGroupOnRightIT</code> or <code>SpaceGroupOnLeftIT</code> with
the same arguments, depending on the value of <code>CrystGroupDefaultAction</code>.
<p>
<pre>
gap> SpaceGroupSettingsIT( 3, 146 );
"hr"
gap> SpaceGroupOnRightIT( 3, 146 );
SpaceGroupOnRightIT(3,146,'h')
gap> SpaceGroupOnRightIT( 3, 146, 'r' );
SpaceGroupOnRightIT(3,146,'r')
</pre>
<p>
<p>
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href = "theindex.htm">Index</a>]
<P>
<address>cryst manual<br>September 2025
</address></body></html>
|