3. Computing Fundamental Domains
3.1 SnapPea
SnapPea is a computer program designed for the study of hyperbolic 3-manifold and knot theory. The primary developer is J. Weeks, who created the first ver- sion as part of his doctoral thesis. When we refer to this program we are referring to the modern kernel of the program - that is, the current computational core of the program, not the user interface or any other satellite parts of the program. SnapPea can be downloaded via [59].
The overall focus of this program is on the triangulation of manifolds (orb- ifolds), and from them the purposeful derivation of information relevant to the classification of groups and manifolds. It performs several main computations: taking a knot, or representative file, as an input; constructing a triangulation of the knot complement, describing the manifold as a gluing of tetrahedra; and determining the fundamental group and other manifold properties. From there it can be used to perform Dehn surgeries on the knot complement or use the
fundamental group to construct a fundamental domain in hyperbolic 3-space,
representative of the manifold or orbifold.
In this way the main focus of SnapPea revolves around computations on, and manipulations of, a triangulation data structure.
SnapPea is often considered to be comprised of two main parts: the routines relating to the determination of an ideal triangulation for a hyperbolic knot complement; and those relating to the computation of the canonical decompo- sition of this complement. However, for our purposes we consider the SnapPea
Fig. 3.1: Flow chart of the SnapPea program.
kernel to be divided into two different sections, those parts dealing with this triangulation and decomposition of a knot complement, and those dealing with the construction of a fundamental domain; the later of which we refer to collec-
tively as Dirichlet_ subroutines. These subroutines, which we detail below,
are concerned with the construction of Dirichlet domains as we have described in Section 2.5.3.
3.1.1 TheDirichlet_subroutines
As stated, our interest is in SnapPea’s computational processes that focus on the construction of fundamental domains in hyperbolic space.
These processes are a centralized group of programs written across several files, each possessing a different component of the computational process for the con- struction of a fundamental polyhedron. We note these files below.
• Dirichlet.c provides overall structure to the general construction pro- cesses; giving global organization, formatting input generators for the main construction procedure, accessing the routines for finalising the do- mains, and providing access to the core Dirichlet domain construction routines.
• Dirichlet_basepoint.c provides the routines for moving the basepoint of the Dirichlet domain in an attempt to maximise its injectivity radius.
• Dirichlet_construction.ccontains the two main construction routines, the functions for cutting the domain representation, and the preliminary finalisation routines for confirming the resultant construction as a funda- mental polyhedron.
• Dirichlet_extras.c provides the functions for adding all the “bells and whistles” to the Dirichlet domain once it has been computed. These de- termine the edge classes and calculate the hyperbolic volume of the fun- damental polyhedron, Euler characteristic and other constants; and, in doing so, confirm the fundamental polyhedron.
3.1. SnapPea 37
• Dirichlet_precision.c provides some access to the standard error re- ducing functions of SnapPea for use in these subroutines.
The actual construction procedure is detailed below in Section 3.3.
Fig. 3.2: Interaction of theDirichlet_subroutines.
There are two additional Dirichlet_ files that, while a part of the gen-
eral Dirichlet_ subroutines (by name), are not among those under our
consideration, these are: Dirichlet_rotate.c, which helps the SnapPea
user interface to keep track of the visual representation of a domain; and
Dirichlet_conversion.c, which converts the Dirichlet domain back into a triangulation for use inline with the majority of SnapPea’s functions.
In addition to the files given above, the Dirichlet_ subroutines run off the
routines and data structures provided by a number of other files; such as the
matrix algebra and kernel files of SnapPea; and the file winged_edge.h, which
provides the overall data structure for representing the polyhedron data. For our purposes we consider these additional files to be part of the greater, overall
Dirichlet_subroutines.
Note that all the files mentioned above are freely available for download as part of the SnapPea kernel [59], and have been provided in PDF form in the SnappyD support files.
3.1.2 SnapPea as a Template
The code of the SnapPea kernel is freely available for use as a template for build- ing programs upon. The most notable example of a program based on SnapPea
is probably the program Snap, [17]. A program providing an updated, object orientated, code that integrates the computational methods of SnapPea with the highly accurate computational techniques of the number theory program Pari, [53]. Snap maintains a similar triangulation focus to SnapPea, and it is worth noting that its developers encouraged the depth of development seen in parts of the modern SnapPea program.
Given the similar ideas, but greater accuracy of Snap, it is worth addressing the idea that using it as a basis over SnapPea would seem the wiser choice. Indeed, brief communication with one of the developers did indicate that Snap should also have infinite precision Dirichlet domain construction routines. However, the code has scarce documentation, especially when compared to the incredibly well documented SnapPea, while still maintaining a triangulation specific focus, so we felt working from SnapPea would be the wiser initial choice. As we discuss in Chapter 6, increasing the precision of these routines is an option for a later discussion.
Our choice of SnapPea was also encouraged by its noted successes, its construc- tion procedures are even used in Snap as a double check. Additionally, the program has been used in other related research, see [62], and a goal at the on- set of this project was determining why certain attempts to construct Dirichlet
domains, using a program based on theDirichlet_ subroutines, were failing.
This last issue is dealt with in Chapter 5.
3.1.3 Groups of Interest
It is our intention to modify theDirichlet_subroutines to prevent the failure of the program in a variety of situations; we discuss these changes and issues in Chapter 4. Specifically, we will expand the routines to construct domains for both finite and non-finite constructions, directly from a modified parame- ter set (p, q, γ); while providing information on the construction process and structure of the fundamental polyhedron, providing a core upon which future investigations and adaptation may be based.
The triangulation process of SnapPea ensures that any group for which a do- main construction attempt is made, will be both (approximately) discrete and have finite covolume. We are interested in the arithmetic, disc-covering and “free boundary” related groups as discussed in Section 2.4. In the case of arith- metic data we know that the group is discrete; but for other points, especially the exclusion points of the disc-covering, this is not necessarily the case. For investigative purposes, we require the program to be able to attempt domain constructions for both sets of groups.