[Dune] Referenztopologien
Robert Kloefkorn
robertk at mathematik.uni-freiburg.de
Wed Jan 26 17:30:28 CET 2005
Oliver Sander wrote:
> Hallo Leute!
> Ich habe mal ein bischen über die Implementierung der Referenz-
> topologien nachgedacht. Dabei ist mir erstmal aufgefallen, daß
> es eine Klasse ReferenceTopology schon gibt. (in grid.hh)
> Diese Klasse wirkt etwas unfertig, und gibt auch nur geometrische
> Informationen -- wie etwa den Elementmittelpunkt -- zurück.
> Darum schlage ich vor, daß wir entweder die Klasse in
> ReferenceGeometry umbenennen, oder sie mit meiner neuen 'richtigen'
> Topologieimplementierung verschmelzen.
>
> Für diese Implementierungen sind mir spontan drei unterschiedliche
> Ansätze eingefallen, die alle ihre Vor- und Nachteile haben.
>
> - Die schönste Variante wäre es, wenn es für jeden Elementtyp eine
> Singletonklasse gäbe. Unter Angabe des Elementtyps bekäme man
> die Klasse und diese hätte dann die Topologie als statische
> Tabellen gespeichert. Nachteil: man braucht virtuelle Funktionen.
>
> - Oder man nimmt eine einzige statische Methode, die den Elementtyp
> als Parameter bekommt. Intern würde man eine switch auf den Typ
> machen, um die korrekten Werte zurückzugeben. Das ist nicht so
> hübsch, und statt der virtuellen Funktion hat man jetzt den switch,
> aber man kann den Aufruf inlinen.
>
> - Oder man führt zwischen den einzelnen Tabellen in der Klasse
> soviel Padding ein, daß die Topologie für jedes Element gleich groß
> wird. Dann kann man auf den switch verzichten und mit
> (int)ElementType * Tabellengröße zu den richtigen Daten kommen.
> Das ist nicht schön, und schlecht zu warten, aber es ist die
> schnellste Variante und verschwindet hinter der Schnittstelle.
:)
Oder wir machen es wie bisher. Man kann die ReferenceGeometry genau wie
bisher das ReferenceElement auf der entsprechenden ElementKlasse
abfragen. Dafür muss eine Schnittstelle festgelegt sein, die ähnlich wie
beim coount und entity der Entityklasse immer Zugriff und maximale
Zugriffsadresse angibt oder man könnte dies auch über Iteratoren
realisieren.
Für Gitter mit unterschiedlichen Element Typen in eimem Gitter müsste
man natürlich immer noch ein switch-case machen, bei Gittern mit nur
einem Element Typ jedoch nicht.
Virtuelle Methode wären hier nicht notwendig. Die bedeutet, das jedes
Gitter eine Implementierung der Referencetopologie zur Verfügung stellt,
die aber als typedef die Standard Dune Implementierung sein kann.
Der Vorteil wäre bei diesem Vorschlag, dass man sowohl Schnittstelle als
auch Effizienz vereinen kann und die nötige Allgemeinheit behält.
Ich hoffe mal es ist ungefähr klar geworden was ich meine.
Grüssle
R
--
Robert Klöfkorn <robertk at mathematik.uni-freiburg.de>
Mathematisches Institut Tel: +49 (0) 761 203 5631
Abt. für Angewandte Mathematik Fax: +49 (0) 761 203 5632
Universität Freiburg
Hermann-Herder-Str. 10
79104 Freiburg
http://www.mathematik.uni-freiburg.de/IAM/homepages/robertk
More information about the Dune
mailing list