[Dune] Re: Frage Grid Interface.

Robert Kloefkorn robertk at mathematik.uni-freiburg.de
Mon Mar 24 14:17:16 CET 2003


Peter Bastian wrote:
> Hallo Robert,
> 
> Du hast vollkommen Recht. Genau dieses ist mir beim implementieren von
> sgrid auch klar geworden. Man kann die Schnittstelle nicht
> anhand einer Pilotimplementierung dokumentieren, da dort
> Schnittstelle (was ist ein Grid) und Implementierung (spezielle
> Methoden und Klassen, die ich für SGrid brauche) miteineander
> verwoben sind. 
> 
> Es muss doch etwas wie eine Basisklasse im Barton Nackman geben.
> Man wird diese zwar nicht in den generischen Algorithmen verwenden,
> aber um sicherzustellen, dass alle Methoden im mit den richtigen
> Typen implementiert sind ist das praktisch.
> 
> Ich habe auch schon eine Idee wie das implementiert werden kann.
> Ich habe nämlich gefunden, dass man templates als template-Parameter
> übergeben kann (stroustrup C.13.3). Hier ein Beispiel wie Grid aussehen
> könnte:
> 
> template<int dim, int dimworld, template<int,int> class GridEngine>
> class Grid {
> public:
> 	int maxlevel() { return gref.maxlevel; }
> 	... hier würde man alle Methoden von Grid aufführen ...
> 	GridIF (GridEngine<dim,dimworld>& g) : gref(g) {}
> private:
> 	GridEngine<dim,dimworld>& gref;
> };
> 
> Der dritte Parameter von Grid ist ein Klassentemplate mit
> zwei int Parametern (das wäre zB SGrid). Die Methoden von
> Grid sind nun mittels member function forwarding auf
> die Engine implementiert.
> 
> verwenden würde man das dann so:
> 
> template<class T>
> void test (T& t)
> {
> 	cout << t.maxlevel(); << endl;
> }
> 
> SGrid<2,2> sgrid( Tupel<int,2>(1,1) , Tupel<double,2>(1.0,1.0) , 2 );
> Grid<2,2,SGrid> grid = sgrid;
> test(grid);
> 
> Man kann natürlich Grid als Basisklasse für SGrid verwenden und
> dann wie im Barton-Nackman verfahren.
> 
> Mein nächstes Ziel wäre nun ein grid.hh, das genau die Schnittstelle
> auf diese Weise beschreibt und dokumentiert. in dune/grid/common
> könnte man dann noch Testfunktionen unterbriengen. Denn es muss
> jede Methode einer Template-Klasse auch einmal aufgerufen werden damit
> auch der Code wirklich übersetzt wird.
> 
> Wie findest Du das?

Hört sich super an. Ich denke mit dieser Methode fahren wir am besten.
Einerseits stellen wir Konsistenz sicher, müssen uns aber beim 
Implementieren nicht total einen abbrechen, sonderen verwenden gleich 
die konkreten Implementierungen und haben damit auch keinen unnötigen 
overhead.

Eine andere Sache ist noch folgende:

Einige Sachen der Schnittstelle sind mit dem Albertgitter nur limitiert 
umsetzbar, z.B.

- Nachbarschaftselemente sind nur auf dem tiefsten Level der Hierarchie 
zu erreichen

- über Kanten/Flächen kann nur auf dem tiefsten Level iteriert werden, 
im Moment

- Elementnummerierung bei Kanten, Flächen ist nicht so ganz einfach, 
muss mir hier noch was überlegen.

Desweiteren habe ich soweit die Funktionalität implementiert, auch wenn 
ich im Moment noch keine Performance Analyse gemacht habe, was ich noch 
tun werde, um die Sache so verlustfrei wie möglich bereitzustellen.

Ein anderer Punkt, der mir noch aufgefallen ist, ist der folgende:

Sollte es bei einem Gitterelement auch möglich sein zu den Element der 
höheren Codimension zu gelangen, also von einem Element (Dreieck) zu 
seinen Kanten und von dort zu den Knoten, oder soll diese Funktionalität 
anders bereitgestellt werden. Ich denke, dass dies irgendwie vorhanden 
sein sollte, auch wenn das nicht die schnellst Art ist, um z.B. an die 
Knoten eines Elements heranzukommen.


Als letztes wollte ich noch fragen, ob ihr schon eine Albert lib 
besitzt, oder ob ich mal eine für euch organisieren soll, damit ihr das 
Ganze dann auch verwenden könnt.

Ansonsten ist übrigens Mario nächste Woch mal wieder in Freiburg, dann 
werde ich ihm die ganze Sache mal vorstellen. Hat sich ja doch ganz 
schön viel getan in den letzten zwei Wochen.

Tschö

Robert


-- 

   Robert Klöfkorn           <robertk at mathematik.uni-freiburg.de>

   Mathematisches Institut              Tel: +49 (0) 761 203 5642
   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