Zum Inhalt springen

Dune (Software)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 26. März 2009 um 21:40 Uhr durch 92.195.7.169 (Diskussion) (Technik: Zeichensetzung korrigiert). Sie kann sich erheblich von der aktuellen Version unterscheiden.
DUNE

Basisdaten

Aktuelle Version 1.1 (9. April 2008)
Betriebssystem Linux, Unix, Mac OS X
Programmier­sprache C++, Python
Kategorie FEM-Programm
Lizenz GPL (version 2) mit "runtime exception"
http://www.dune-project.org

DUNE (für "Distributed and Unified Numerics Environment") ist eine modulare C++ Bibliothek zum Lösen von Partiellen Differentialgleichungen mit gitterbasierten Verfahren.

DUNE besteht aus Unterbibliotheken und umfasst in der Version 1.0 die Teile

  • dune-common (Allgemeine Klassen),
  • dune-grid (Gitterschnittstelle),
  • dune-istl (Matrix-, Vektor-Bibliothek und Löser),

sowie weiterführende Tutorials. Darüber hinaus gibt es experimentelle Module, welche zum Teil auch von Dritten entwickelt werden.

Geschichte

Die Entwicklung von DUNE begann 2002 auf Initiative von Prof. Bastian (damals Universität Heidelberg) und Dr. Ohlberger (während seiner Habilitation an der Albert-Ludwigs-Universität Freiburg) sowie Prof. Rumpf (damals Universität Duisburg). Man strebte ein offenes, nicht an einzelne Universitäten gekoppeltes Entwicklungsmodell an, um das Projekt für eine möglichst breite Nutzergruppe attraktiv zu machen. Aus dem gleichen Grund wurde auch eine Lizenz gewählt, welche es erlaubt, DUNE in Verbindung mit proprietären Bibliotheken einzusetzen. Auch heute noch stammen die Hauptentwickler aus dem universitären Umfeld.[1]

Zielsetzung

Bei der Entwicklung von DUNE wurde von Beginn an angestrebt, neuen Code und existierende Bibliotheken auf effiziente Art koppeln zu können. Dies ist auch gleichzeitig der Hauptunterschied zu anderen Finite-Element-Programmen.

DUNE ist zunächst eine Sammlung von Softwareschnittstellen, die abstrakte Konzepte im Wissenschaftlichen Rechnen, wie das eines Gitters, umsetzen. Beim Design der Gitterschnittstelle standen die Finite-Elemente-Verfahren und Finite-Volumen-Verfahren im Vordergrund, die Verwendung von Finite-Differenzen-Verfahren ist aber ebenso möglich. Die Gitterschnittstelle ist auch gleichzeitig der am weitesten fortgeschrittene Teil. Sie erlaubt die Beschreibung von strukturierten und unstrukturierten Gittern beliebiger Dimension sowie von Gittern auf Mannigfaltigkeiten. Ausserdem erlaubt sie die einfache Verwendung von parallelen Programmierkonzepten im Bereich des Hochleistungsrechnens. Es gibt Implementierungen der Gitterschnittstelle für sieben verschiedene Gitter; vier davon erlauben die Verwendung von existierenden Bibliotheken (Stand: 2007). Man kann somit die gleiche Diskretisierung auf unterschiedlichen Gitterimplementierung verwenden und vergleichen.

Technik

Um die gesetzten Ziele effizient umsetzen zu können, werden verschiedene C++-Techniken wie Template Programmierung, Generische Programmierung, C++-Metaprogrammierung und statischer Polymorphismus verwendet. In anderen Bereichen der Softwareentwicklung finden diese Techniken schon lange Anwendung, im Bereich des Wissenschaftlichen Rechnens ist ihre Verwendung aber noch selten. Sie ermöglichen es dem Compiler, den durch die Abstraktion erzeugten Overhead fast vollständig zu eliminieren und fortgeschrittene Optimierungstechniken zu verwenden. Diese Techniken stellen hohe Anforderungen an die Konformität des verwendeten Compilers, was die unterstützten Plattformen einschränkt.

Einzelnachweise

  1. http://www.dune-project.org/people.html