[Dune] IO in Dune

Oliver Sander sander at math.fu-berlin.de
Thu Nov 6 18:13:05 CET 2003


Hallo!
Da ich zum ersten Mal an diese Mailingliste schreibe stelle ich
mich mal kurz vor:  Ich bin Oliver Sander, Doktorand bei
Prof. Ralf Kornhuber an der Freien Universität Berlin.  Hauptsächlich
bin ich mit Elastizität und Kontaktproblemen beschäftigt,
und qua dieses Amtes dauernd am programmieren.

Wie einige schon wissen, werde ich bald anfangen, an Dune
mitzuprogrammieren.  Eines meiner ersten Projekte wird sein,
Unterstützung für das AmiraMesh-Datenformat (aus dem Visualisierungs-
paket Amira) von UG nach Dune zu portieren.  Das bringt mich zum
eigentlich Grund dieser Mail.

Anscheinend wurde schon einiges für IO getan.  Ich kenne mich noch
nicht sehr gut mit der internen Architektur von Dune aus, aber
mir erscheint das momentane Design des Datei-IO etwas unglücklich.
Konkret stört mich, daß (anscheinend)
a) File-IO von den Gridobjekten selbst ausgeführt wird
b) und deswegen unterstütze Dateiformate in der Gitterschnittstelle
   auftauchen.

Das führt IMHO dazu, daß man für
- jeden Gittertyp IO komplett neu implementieren muß
- Man die Schnittstelle ändern muß, wenn ein neues Format
  dazukommt.

Ich schlage vor, ein separates IO-Modul zu schreiben, daß Lese-
und Schreibaktionen nur mittels der abstrakten Schnittstelle
durchführt.  Das könnte z.B. so aussehen:

class GridWriter {

   private:  //singleton
   GridWriter(){}

   public:
   virtual write(const Grid& grid) = 0;

   /** Die folgende Funktion ist die einzige, die
     alle Dateiformate kennt.  Entweder sind sie hart
     reincodiert, oder sie werden aus einer Textdatei
     eingelesen.*/
   static GridWriter* getWriter(std::string file_format);

}

class AmiraMeshWriter : public GridWriter {

   // Hier die Implementierung
   virtual write(const Grid& grid);

}

int main
{
    AlbertGrid mygrid;

    GridWriter* writer = GridWriter::getWriter("AmiraMesh");
    writer->write(mygrid);
}


Dieser Ansatz ist meiner Meinung nach langfristig flexibler.
IO ist komplett vom Gitter getrennt.  Man könnte z.B. das
Dateiformat per Argument übergeben (oder vielleicht will
man Dune doch mal irgendwann mit Python versehen) oder
neue Dateiformate dynamisch dazulinken.  Zugestandenermassen
alles eher langfristige Vorteile.

Okay, das ist jetzt doch etwas länger geworden.  Ich danke
für die Geduld beim Lesen,

Gruß,
Oliver

************************************************************************
* Oliver Sander                **                                      *
* Freie Universität Berlin     ** email: sander at math.fu-berlin.de      *
* Institut für Mathematik II   ** phone: + 49 (30) 838 75217           *
* Arnimallee 2-6               ** fax  : + 49 (30) 838 54977           *
* 14195 Berlin, Germany        ** URL  : www.math.fu-berlin.de/~sander *
************************************************************************




More information about the Dune mailing list