In der GEOTOOLKIT-Klasse gtTetraNetElement werden die Netzelemente der Tetraedernetze - also die enthaltenen Tetraeder mit ihren jeweiligen Nachbarschaftszeigern - modelliert. Da die Methoden der einzuführenden topologischen Komponente für Flächen und Volumina einen top-down-Ansatz verfolgen, bietet sich ein Entwurf auf dieser Ebene der Modellierung für viele Teile der Algorithmen an. Es sollen nun die wichtigsten Hilfsfunktionen angegeben werden, die hierzu innerhalb von gtTetraNetElement bereitgestellt wurden.
Die Bestimmung von topologischen Beziehungen von Volumina/Flächen (simpliziale Komplexe) erfolgt über den Zwischenschritt der enthaltenen Simplexe, welche zuerst auf ihre relative räumliche Lage hin untersucht werden. Dies geschieht mittels getPrimTopRel, welches die topologische Beziehung der beiden beteiligten Objekte als topFlag zurückliefert. In der Klasse gtTetraNetElement existieren hierzu die folgenden beiden Varianten, um sowohl zwei Tetraeder, als auch ein Tetraeder zu einem Dreieck in Bezug setzen zu können:
topFlag gtTetraNetElement::getPrimTopRel(const
gtTetraNetElement* pTetNE) const;
topFlag gtTetraNetElement::getPrimTopRel(const
gtTriangleNetElement* pTriNE) const;
Um überprüfen zu können, ob die topologische Beziehung der beiden
Simplexe auch auf dem Rand der zugrundeliegenden Netze gilt, können
die appliesOnSurface-Funktionen verwendet werden:
int gtTetraNetElement::appliesOnSurface(const gtTetraNetElement* pTetNE,
const topFlag flag) const;
int gtTetraNetElement::appliesOnSurface(const gtTriangleNetElement* pTriNE,
const topFlag flag) const;
Wenn im Volumen/Volumen-Fall ein covers_2D
bzw. covered_2D oder in der Volumen/Fläche-Konfiguration
ein covers_1D bzw. covered_1D bezüglich des
Volumenrandes festgestellt wurde, so kann es genau dann zu einem
overlap bzw. cross kommen, wenn der Nachbar
des bedeckten Simplexes ein touch_2D resp. ein
touch_1D zu dem aktuellen Simplex des anderen Netzes
aufweist (vgl. Abb. 6.1). Diese topologischen
Fälle können schließlich mit den folgenden Funktionen erkannt
werden:
int gtTetraNetElement::nextTwoTouch(const gtTetraNetElement* pTetNE,
const topFlag flag) const;
int gtTetraNetElement::nextOneTouch(const
gtTriangleNetElement* pTriNE) const;