Regina Calculation Engine
Classes | Functions | Variables
Normal Surfaces

Normal surfaces in 3-manifold triangulations. More...

Classes

struct  regina::NDiscSpec
 Specifies a single normal disc in a normal surface. More...
class  regina::NDiscSetTet
 Represents a set of normal discs inside a single tetrahedron. More...
class  regina::NDiscSetTetData< T >
 Stores data of type T for every normal disc inside a single tetrahedron. More...
class  regina::NDiscSetSurface
 Represents the set of all normal discs forming a normal surface. More...
class  regina::NDiscSetSurfaceData< T >
 Stores data of type T for every normal disc within a particular normal surface. More...
class  regina::NDiscSpecIterator
 An iterator used for running through all normal discs in a normal surface. More...
struct  regina::NDiscType
 Identifies a single normal or almost normal disc type within a triangulation. More...
class  regina::NNormalSurfaceVector
 Stores the vector of a single normal surface in a 3-manifold. More...
class  regina::NNormalSurface
 Represents a single normal surface in a 3-manifold. More...
class  regina::NNormalSurfaceList
 A packet representing a collection of normal surfaces in a 3-manifold. More...
struct  regina::NPrismSpec
 Specifies a single triangular prism in a tetrahedron. More...
class  regina::NPrismSetSurface
 Represents the set of prisms defined by slicing along all the quads in a particular normal surface. More...
class  regina::NNormalSurfaceVectorANStandard
 An almost normal surface vector using standard triangle-quad-oct coordinates. More...
class  regina::NNormalSurfaceVectorMirrored
 A normal surface vector that is mirrored in another coordinate system to avoid frequent lengthy calculations. More...
class  regina::NNormalSurfaceVectorOriented
 A normal surface vector using transversely oriented standard (triangle-quad) coordinates. More...
class  regina::NNormalSurfaceVectorOrientedQuad
 A normal surface vector using transversely oriented quadrilateral coordinates. More...
class  regina::NNormalSurfaceVectorQuad
 A normal surface vector using quad coordinates. More...
class  regina::NNormalSurfaceVectorQuadOct
 An almost normal surface vector using quad-oct coordinates. More...
class  regina::NNormalSurfaceVectorStandard
 A normal surface vector using standard triangle-quad coordinates. More...
class  regina::NSurfaceFilter
 A packet that accepts or rejects normal surfaces. More...
class  regina::NSurfaceSet
 Represents a collection of normal surfaces in a 3-manifold. More...
class  regina::NSurfaceSubset
 Represents a subset of a normal surface set. More...
class  regina::NXMLFilterReader
 An XML element reader that reads the specific details of a normal surface filter. More...
class  regina::NXMLFilterPacketReader
 An XML packet reader that reads a single surface filter. More...
class  regina::NXMLNormalSurfaceReader
 An XML element reader that reads a single normal surface. More...
class  regina::NXMLNormalSurfaceListReader
 An XML packet reader that reads a single normal surface list. More...
class  regina::NSurfaceFilterCombination
 A normal surface filter that simply combines other filters. More...
class  regina::NSurfaceFilterProperties
 A normal surface filter that filters by basic properties of the normal surface. More...

Functions

REGINA_API std::ostream & regina::operator<< (std::ostream &out, const NDiscSpec &spec)
 Writes the given disc specifier to the given output stream.
REGINA_API bool regina::numberDiscsAwayFromVertex (int discType, int vertex)
 Determines whether or not normal discs of the given type are numbered away from the given vertex.
REGINA_API bool regina::discOrientationFollowsEdge (int discType, int vertex, int edgeStart, int edgeEnd)
 Determines whether or not the natural boundary orientation of a normal disc of the given type follows the given directed normal arc.
REGINA_API std::ostream & regina::operator<< (std::ostream &out, const NDiscType &type)
 Writes the given disc type to the given output stream.
REGINA_API NNormalSurfaceVector * regina::makeZeroVector (const NTriangulation *triangulation, int flavour)
 Returns a new normal surface vector of the appropriate length for the given triangulation and the given flavour of coordinate system.
REGINA_API NMatrixInt * regina::makeMatchingEquations (NTriangulation *triangulation, int flavour)
 Creates a new set of normal surface matching equations for the given triangulation using the given flavour of coordinate system.
REGINA_API NEnumConstraintList * regina::makeEmbeddedConstraints (NTriangulation *triangulation, int flavour)
 Creates a new set of validity constraints representing the condition that normal surfaces be embedded.
REGINA_API std::ostream & regina::operator<< (std::ostream &out, const NPrismSpec &spec)
 Writes the given prism specifier to the given output stream.

Variables

REGINA_API const int regina::vertexSplit [4][4]
 Lists which vertex splits separate which pairs of vertices.
REGINA_API const int regina::vertexSplitMeeting [4][4][2]
 Lists which vertex splits meet which edges.
REGINA_API const int regina::vertexSplitDefn [3][4]
 Lists the vertices which each vertex split splits.
REGINA_API const int regina::vertexSplitPartner [3][4]
 Lists the second vertex with which each vertex is paired under each vertex split.
REGINA_API const char regina::vertexSplitString [3][6]
 Contains strings describing which vertices each vertex split splits.
REGINA_API const NPerm4 regina::triDiscArcs [4][3]
 Lists in consecutive order the directed normal arcs that form the boundary of each type of triangular normal disc.
REGINA_API const NPerm4 regina::quadDiscArcs [3][4]
 Lists in consecutive order the directed normal arcs that form the boundary of each type of quadrilateral normal disc.
REGINA_API const NPerm4 regina::octDiscArcs [3][8]
 Lists in consecutive order the directed normal arcs that form the boundary of each type of octagonal normal disc.

Detailed Description

Normal surfaces in 3-manifold triangulations.


Function Documentation

REGINA_API bool regina::discOrientationFollowsEdge ( int  discType,
int  vertex,
int  edgeStart,
int  edgeEnd 
)

Determines whether or not the natural boundary orientation of a normal disc of the given type follows the given directed normal arc.

Natural boundary orientation is defined by arrays triDiscArcs, quadDiscArcs and octDiscArcs.

Precondition:
The given normal arc lies on a normal disc of the given type.
Parameters:
discTypethe normal disc type under consideration; this should be between 0 and 9 inclusive, as described by the NDiscSpec class notes.
vertexthe vertex about which the normal arc runs.
edgeStartthe start vertex of the edge to which the normal arc is parallel.
edgeEndthe end vertex of the edge to which the normal arc is parallel.
REGINA_API NEnumConstraintList* regina::makeEmbeddedConstraints ( NTriangulation *  triangulation,
int  flavour 
)

Creates a new set of validity constraints representing the condition that normal surfaces be embedded.

The validity constraints will be expressed relative to the given flavour of coordinate system.

Python:
Not present.
Parameters:
triangulationthe triangulation upon which these validity constraints will be based.
flavourthe flavour of coordinate system to be used; this must be one of the predefined coordinate system constants in NNormalSurfaceList.
Returns:
a newly allocated set of constraints.
REGINA_API NMatrixInt* regina::makeMatchingEquations ( NTriangulation *  triangulation,
int  flavour 
)

Creates a new set of normal surface matching equations for the given triangulation using the given flavour of coordinate system.

The returned matrix will be newly allocated and its destruction will be the responsibility of the caller of this routine.

Each equation will be represented as a row of the matrix. Each column of the matrix represents a coordinate in the given flavour of coordinate system.

Parameters:
triangulationthe triangulation upon which these matching equations will be based.
flavourthe flavour of coordinate system to be used; this must be one of the predefined coordinate system constants in NNormalSurfaceList.
Returns:
a newly allocated set of matching equations.
REGINA_API NNormalSurfaceVector* regina::makeZeroVector ( const NTriangulation *  triangulation,
int  flavour 
)

Returns a new normal surface vector of the appropriate length for the given triangulation and the given flavour of coordinate system.

All elements of this vector will be initialised to zero.

The new vector will be of the subclass of NNormalSurfaceVector corresponding to the given flavour of coordinate system. The caller of this routine is responsible for destroying the new vector.

Python:
Not present.
Parameters:
triangulationthe triangulation upon which the underlying coordinate system is based.
flavourthe flavour of coordinate system to be used; this must be one of the predefined coordinate system constants in NNormalSurfaceList.
Returns:
a new zero vector of the correct class and length.
REGINA_API bool regina::numberDiscsAwayFromVertex ( int  discType,
int  vertex 
)

Determines whether or not normal discs of the given type are numbered away from the given vertex.

Parameters:
discTypethe normal disc type under consideration; this should be between 0 and 9 inclusive, as described by the NDiscSpec class notes.
vertexthe vertex under consideration; this should be between 0 and 3 inclusive.
Returns:
true if normal discs of the given type are numbered away from the given vertex, or false if they are numbered towards the given vertex.
REGINA_API std::ostream& regina::operator<< ( std::ostream &  out,
const NPrismSpec &  spec 
)

Writes the given prism specifier to the given output stream.

The prism specifier will be written as a pair (tetIndex, edge).

Parameters:
outthe output stream to which to write.
specthe prism specifier to write.
Returns:
a reference to out.
REGINA_API std::ostream& regina::operator<< ( std::ostream &  out,
const NDiscSpec &  spec 
)

Writes the given disc specifier to the given output stream.

The disc specifier will be written as a triple (tetIndex, type, number).

Parameters:
outthe output stream to which to write.
specthe disc specifier to write.
Returns:
a reference to out.
std::ostream & regina::operator<< ( std::ostream &  out,
const NDiscType &  type 
) [inline]

Writes the given disc type to the given output stream.

The disc type will be written as a pair (tetIndex, type).

Parameters:
outthe output stream to which to write.
typethe disc type to write.
Returns:
a reference to the given output stream.

Variable Documentation

REGINA_API const NPerm4 regina::octDiscArcs[3][8]

Lists in consecutive order the directed normal arcs that form the boundary of each type of octagonal normal disc.

Each permutation p represents an arc about vertex p[0] parallel to the directed edge from p[1] to p[2].

Array octDiscArcs[i] lists the boundary arcs of the octagonal disc of type i. See NNormalSurface::getOctCoord() for further details.

Note that permutation octDiscArcs[i][j] will be even precisely when j is 0, 1, 4 or 5.

C++:
This array is replaced by a macro octDiscArcs(discType, arcIndex) that essentially looks up the corresponding array. This is necessary because of a bug in gcc 2.95.
REGINA_API const NPerm4 regina::quadDiscArcs[3][4]

Lists in consecutive order the directed normal arcs that form the boundary of each type of quadrilateral normal disc.

Each permutation p represents an arc about vertex p[0] parallel to the directed edge from p[1] to p[2].

Array quadDiscArcs[i] lists the boundary arcs of the quadrilateral disc of type i. See NNormalSurface::getQuadCoord() for further details.

Note that permutation quadDiscArcs[i][j] will be even precisely when j is even.

C++:
This array is replaced by a macro quadDiscArcs(discType, arcIndex) that essentially looks up the corresponding array. This is necessary because of a bug in gcc 2.95.
REGINA_API const NPerm4 regina::triDiscArcs[4][3]

Lists in consecutive order the directed normal arcs that form the boundary of each type of triangular normal disc.

Each permutation p represents an arc about vertex p[0] parallel to the directed edge from p[1] to p[2].

Array triDiscArcs[i] lists the boundary arcs of the triangular disc of type i. See NNormalSurface::getTriangleCoord() for further details.

Note that every permutation in this array is even.

C++:
This array is replaced by a macro triDiscArcs(discType, arcIndex) that essentially looks up the corresponding array. This is necessary because of a bug in gcc 2.95.

Lists which vertex splits separate which pairs of vertices.

There are three vertex splits, numbered 0,1,2. Each vertex split separates the four tetrahedron vertices 0,1,2,3 into two pairs. vertexSplit[i][j] is the number of the vertex split that keeps vertices i and j together.

It is guaranteed that vertex split i will keep the vertices of edge i together (and will therefore also keep the vertices of edge 5-i together).

Lists the vertices which each vertex split splits.

See vertexSplit for details on what a vertex split is. Vertex split number i splits the vertex pairs vertexSplitDefn[i][0,1] and vertexSplitDefn[i][2,3].

It is guaranteed that:

  • vertexSplitDefn[i][0] < vertexSplitDefn[i][1];
  • vertexSplitDefn[i][2] < vertexSplitDefn[i][3];
  • vertexSplitDefn[i][0] < vertexSplitDefn[i][2].

Lists which vertex splits meet which edges.

See vertexSplit for details on what a vertex split is. vertexSplitMeeting[i][j][0,1] are the numbers of the two vertex splits that meet the edge joining tetrahedron vertices i and j.

Lists the second vertex with which each vertex is paired under each vertex split.

See vertexSplit for details on what a vertex split is. Vertex split number i pairs vertex v with vertex vertexSplitPartner[i][v].

Contains strings describing which vertices each vertex split splits.

See vertexSplit for details on what a vertex split is. The string describing vertex split number i is vertexSplitString[i] and is of the form 02/13, which in this case is the vertex split that splits vertices 0,2 from vertices 1,3.


Copyright © 1999-2011, The Regina development team
This software is released under the GNU General Public License.
For further information, or to submit a bug or other problem, please contact Ben Burton (bab@debian.org).