This work centres around the development and use of the computer program SnappyD. As such, this thesis should come with an attached CD, or other accessible data-file, containing the computer program itself along with several variants and a number of support files.
This section briefly covers the execution of the SnappyD program and the contents of the support files.
B.1
SnappyD
SnappyD is a computer program developed for the construction and investigation of fundamental domains in reference to hyperbolic3-orbifolds. It is named in reference to the Dirichlet subroutines of Jeffrey Week’s SnapPea program, [59], upon which it is solidly based.
Where other work seems to focus on expanding the accuracy of SnapPea’s overall computations, with a focus on the accurate triangulation of link complements, or providing domain construction routines for a narrow class of highly accurate groups; SnappyD follows the construction of Dirichlet domains within the accuracy of double- precision arithmetic, and allows for the successful construction of domains that would be otherwise unacceptable within the confines of the common linear representation of hyperbolic polyhedrons.
SnapPea and SnappyD are covered in Chapters 3 and 4, respectively.
B.1.1 Using the Program
To facilitate fast use of the program, SnappyD works as a simple executable file, reading from two input files and writing to a single output file. These three files are all of notepad (.txt) format and are summarised:
• The input file “snappyD_input.txt” provides a list of parameter sets, and several other settings for each individual construction to be based upon. Each line in the file is of the form:
n EV p q RE(γ) IM(γ)
– n is an integer reference number for tracking the results of an individual group or set of groups.
– EV ∈[3,15]is an integer, setting vertex epsilonεV = 10−EV; and – (p, q, γ)is the computational parameter set of interest;
The input file can contain any number of groups, but each must be given on a separate line, with no additional formatting.
• The input file “snappyD_print_defaults.txt” contains only one meaningful line of data; an array of 1’s and 0’s that are used to indicate the form and complexity of output desired.
This array comprises the first line in the file and is the only line read by SnappyD; the remainder of the file providing a description of the various options. This file is not necessary for the success of the program, but without it the output will only be given in its simplest form.
• The output file is titled “snappyD_OUTPUT_XX.txt”, where XX is a series of letters to describe the particular variant of SnappyD used, see Section B.1.2 below. The output file is re-generated each time (the specific variant of) the program is used. Originally we had considered designing a simple user interface window. But both building it, and using it, seemed unnecessarily time consuming.
To use the program, all that is strictly needed is the executable file and a “snappyD_input.txt” file. As mentioned the output file is reconstructed each ex- ecution, and will over-write any file with the same name; if you wish to save the output, then relabeling it is highly encouraged.
B.1.2 Variants
There are a number of variants to the SnappyD program. The core version we use is
SnappyD_CPT.exe, which attempts to construct a polyhedron as outlined in Sections 4.3 and 4.4. Additionally there are:
1. SnappyD_CPT_NM.exe- which does not maximise the injectivity radius;
2. SnappyD_nCPT.exe- which does not attempt to “compute products twice” before leaving while-loop two (see Section 4.3.2);
3. SnappyD_nCPT_NM.exe- which combines the alterations of the two previous vari- ants; and
4. SnappyD_CPe_NM.exe- which does not maximise the injectivity radius, but will attempt to sequentially compute more products in while-loop two, up to an internally set limit (currently5).
The core, SnappyD_CPT.exe, version of SnappyD is the one we have used for the majority of our work, with the other variants existing mostly for comparison. The support files only include actual executables for variants3and4above; though code is provided for the others variants.
B.2. Progress Tracking and Output 121
As outlined in Section 4.3.2, SnappyD_CPe_NM.exe can take considerably longer to progress constructions than the other variants. For this reason we have purposely removed its access to the basepoint manipulation routines; and we suggest running it only on small data sets and moderate precision settings (εV = 10−7). We note that un-
like the other variants,SnappyD_CPe_NM.exewill exit while-loop2if the identification is confirmed on the constructed polyhedron.
We also provide the executable Snappy.exe, which reads from the input file “snappy_input.txt”. The input file is identical to the SnappyD input, except that it does not take an EV input, instead running at with defaultεV = 10−7. This is a
simple “wrapper” of the original Dirichlet subroutines as found in SnapPea, the only alteration that has been made is capping while-loop two after50iterations. This pro- gram writes to the file “snappy_output.txt”; and there are no output options for this program - it simply lists the parameter set and either the constructions volume or “FAIL”.
B.2
Progress Tracking and Output
The output for SnappyD is written into the file “snappyD_OUTPUT_XX.txt”, where “XX” denotes the variant used. The exact details written in the output can vary dramatically, depending on the “snappyD_print_defaults.txt” settings: from a simple statement of the parameters with a volume if successful, or “FAILS” otherwise; to a full step- by-step description of the entire process - detailing the separate functions entered, the group elements being generated, and each attempt at classifying and verifying the polyhedron.
The only output that can never be turned off is the announcement of fatal errors in the construction process.
This output runs off a comprehensive and descriptive progress tracking system that we have built into the code. Progress through the construction is tracked by a series of Boolean values - allowing successes and errors to be announced when they occur; along with optional tracking of individual construction processes, right down to detailing the flow through the individual routines.
As noted earlier, this program is quite fast, and a simple output selection is ideal for streaming through large lists of generator inputs.
A full description of the various output options would take considerable space, so we instead refer the reader to the “snappyD_print_defaults.txt” file; and suggest attempting to use the program to complete constructions across various “print” settings - using a single parameter set.
B.3
Reference Information
In addition to the program, the support files include a variety of files relevant to the information given in this thesis.
Reference Data
The data-files, both input and output, for all tables seen in this thesis are given in the support files. These have been given in a simple output style focusing on the interests displayed here.
Files for generating the individual tables should also be available, in.txt,.pdfand
.texformats.
Reference Code
Along with the executables, the support files should also include the code used to generate the core program and its variants. Like SnapPea they are all written in the
Cprogramming language.
For additional reference we also provide the base code for the SnapPea kernel (code), both in a readable.pdfand a usable.c(and.h) formats.