Let S be a crystallographic group. A Fundamental domain is a closed convex set containing a system of representatives for the Orbits of S in its natural action on euclidian space.
There are two algorithms for calculating fundamental domains in HAPcryst. One uses the geometry and relies on having the standard rule for evaluating the scalar product (i.e. the gramian matrix is the identity). The other one is independent of the gramian matrix but does only work for Bieberbach groups, while the first ("geometric") algorithm works for arbitrary crystallographic groups given a point with trivial stabilizer.
> FundamentalDomainStandardSpaceGroup ( [v][,]G ) | ( method ) |
> FundamentalDomainStandardSpaceGroup ( v, G ) | ( method ) |
Returns: a PolymakeObject
Let G be an AffineCrystGroupOnRight
and v a vector. A fundamental domain containing v is calculated and returned as a PolymakeObject
. The vector v is used as the starting point for a Dirichlet-Voronoi construction. If no v is given and G is a Bieberbach group, the origin in used as starting point.
The method for this calculation is chosen automatically depending on the group. The Gram-independent algorithm (see FundamentalDomainBieberbachGroup
(4.1-2)) is used whenever possible.
gap> fd:=FundamentalDomainStandardSpaceGroup([1/2,0,1/5],SpaceGroup(3,9)); <polymake object> gap> Polymake(fd,"N_VERTICES"); 24 gap> fd:=FundamentalDomainStandardSpaceGroup(SpaceGroup(3,9)); <polymake object> gap> Polymake(fd,"N_VERTICES"); 8 |
> FundamentalDomainBieberbachGroup ( G ) | ( method ) |
> FundamentalDomainBieberbachGroup ( v, G[, gram] ) | ( method ) |
Returns: a PolymakeObject
Given a starting vector v and a Bieberbach group G in standard form, this method calculates the Dirichlet domain with respect to v. If gram is not supplied, the average gramian matrix is used (see GramianOfAverageScalarProductFromFiniteMatrixGroup
(2.3-1)). It is not tested if gram is symmetric and positive definite. It is also not tested, if the product defined by gram is invariant under the point group of G.
> FundamentalDomainFromGeneralPointAndOrbitPartGeometric ( v, orbit ) | ( method ) |
Returns: a PolyamkeObject
Let v be a vector and orbit a sufficiently large part of the orbit of v under a crystallographic group with standard- orthogonal point group (satisfying A^t=A^-1). A geometric algorithm is then used to calculate the Dirichlet domain with respect to v. This also works for crystallographic groups which are not Bieberbach. The point v has to have trivial stabilizer.
gap> G:=SpaceGroup(3,9);; gap> v:=[0,0,0]; [ 0, 0, 0 ] gap> orbit:=OrbitStabilizerInUnitCubeOnRight(G,v).orbit; [ [ 0, 0, 0 ], [ 0, 0, 1/2 ] ] gap> fd:=FundamentalDomainFromGeneralPointAndOrbitPartGeometric(v,orbit); <polymake object> gap> Polymake(fd,"N_VERTICES"); 8 |
> IsFundamentalDomainStandardSpaceGroup ( poly, G ) | ( method ) |
Returns: true or false
This tests if a PolymakeObject
poly is a fundamental domain for the affine crystallographic group G in standard form.
The function tests the following: First, does the orbit of any vertex of poly have a point inside poly (if this is the case, false
is returned). Second: Is every facet of poly the image of a different facet under a group element which does not fix poly. If this is satisfied, true
is returned.
For Bieberbach groups (torsion free crystallographic groups), the following functions calcualte free resolutions. This calculation is done by finding a fundamental domain for the group.
> ResolutionBieberbachGroup ( G[, v] ) | ( method ) |
Returns: a HAPresolution
Let G be a Bieberbach group given as an AffineCrystGroupOnRight
and v a vector. Then a Dirichlet domain with respect to v is calculated using FundamentalDomainBieberbachGroup
(4.1-2). From this domain, a resolution is calculated using FaceLatticeAndBoundaryBieberbachGroup
(4.2-2) and ResolutionFromFLandBoundary
(4.2-3). If v is not given, the origin is used.
gap> R:=ResolutionBieberbachGroup(SpaceGroup(3,9)); Resolution of length 3 in characteristic 0 for SpaceGroupOnRightBBNWZ( 3, 2, 2, 2, 2 ) . No contracting homotopy available. gap> List([0..3],Dimension(R)); [ 1, 3, 3, 1 ] gap> R:=ResolutionBieberbachGroup(SpaceGroup(3,9),[1/2,0,0]); Resolution of length 3 in characteristic 0 for SpaceGroupOnRightBBNWZ( 3, 2, 2, 2, 2 ) . No contracting homotopy available. gap> List([0..3],Dimension(R)); [ 6, 12, 7, 1 ] |
> FaceLatticeAndBoundaryBieberbachGroup ( poly, group ) | ( method ) |
Returns: Record with entries .hasse
and .elts
representing a part of the hasse diagram and a lookup table of group elements
Let group be a torsion free AffineCrystGroupOnRight
(that is, a Bieberbach group). Given a PolymakeObject
poly representing a fundamental domain for group, this method uses polymake to calculate the face lattice of poly. From the set of faces, a system of representatives for group- orbits is chosen. For each representative, the boundary is then calculated. The list .elts
contains elements of group (in fact, it is even a set). The structure of the returned list .hasse
is as follows:
The i-th entry contains a system of representatives for the i-1 dimensional faces of poly.
Each face is represented by a pair of lists [vertices,boundary]
. The list of integers vertices
represents the vertices of poly which are contained in this face. The enumeration is chosen such that an i
in the list represents the i-th entry of the list Polymake(poly,"VERTICES");
The list boundary
represents the boundary of the respective face. It is a list of pairs of integers [j,g]
. The first entry lies between -n and n, where n is the number of faces of dimension i-1. This entry represents a face of dimension i-1 (or its additive inverse as a module generator). The second entry g
is the position of the matrix in .elts
.
This representation is compatible with the representation of free Z G modules in Hap and this method essentially calculates a free resolution of group.
> ResolutionFromFLandBoundary ( fl, group ) | ( method ) |
Returns: Free resolution
If fl is the record output by FaceLatticeAndBoundaryBieberbachGroup
(4.2-2) and group is the corresponding group, this function returns a HapResolution
(???). Of course, fl has to be generated from a fundamental domain for group
gap> G:=SpaceGroup(3,165); SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) gap> fd:=FundamentalDomainBieberbachGroup(G); <polymake object> gap> fl:=FaceLatticeAndBoundaryBieberbachGroup(fd,G);; gap> ResolutionFromFLandBoundary(fl,G); Resolution of length 3 in characteristic 0 for SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) . No contracting homotopy available. gap> ResolutionFromFLandBoundary(fl,G); Resolution of length 3 in characteristic 0 for SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) . No contracting homotopy available. gap> List([0..4],Dimension(last)); [ 2, 5, 4, 1, 0 ] |
generated by GAPDoc2HTML