Einsteigerguide: Was ist Dune?

Dune (Distributed and Unified Numerics Environment) ist eine modulare Toolbox zur Lösung von partiellen Differentialgleichungen (PDEs) mit gridbasierten Methoden. Es unterstützt die einfache Implementierung von Methoden wie Finite Elements (FE), Finite Volume (FV) und auch Finite Differences (FD).

Was ist Dune?

Dune ist eine freie Software, die unter GPL (Version 2) mit einer sogenannten „Runtime Exception“ lizenziert ist. Diese Lizenz ist vergleichbar mit derjenigen, unter der die libstdc++-Bibliotheken verteilt werden. Somit ist es möglich, DUNE auch in proprietärer Software zu verwenden.

Die Grundidee von Dune ist es, schlanke Schnittstellen zu schaffen, die eine effiziente Nutzung von bestehenden und/oder neuen Bibliotheken ermöglichen. Moderne C++-Programmiertechniken ermöglichen sehr unterschiedliche Implementierungen desselben Konzepts über eine gemeinsame Schnittstelle bei sehr geringem Aufwand. So sorgt Dune für Effizienz in wissenschaftlichen Berechnungen und unterstützt Anwendungen für Hochleistungsrechner.

Besondere Highlights sind:

  • eine generische Grid-Schnittstelle, die es ermöglicht, eine Reihe von sehr unterschiedlichen Grid-Implementierungen zu verbinden.
  • Die iterative Solver Template Library, die einen algebraischen Multigrid-Preconditioner enthält.
  • Hochwertige Schnittstellen für Versuchs- und Testfunktionen und generische Diskretisierungsmodule.
  • Python-Bindung für die Full-Grid-Schnittstelle und ein flexibles Konzept zur Anbindung von Anwendermodulen.

Dune basiert auf den folgenden Grundprinzipien:

  • Trennung von Datenstrukturen und Algorithmen durch abstrakte Schnittstellen. Dies bietet mehr Funktionalität bei weniger Code und gewährleistet zudem die Wartbarkeit und Erweiterbarkeit des Frameworks.
  • Effiziente Implementierung dieser Schnittstellen durch generische Programmiertechniken. Der statische Polymorphismus ermöglicht es dem Compiler, weitere Optimierungen vorzunehmen, insbesondere Funktionsinlining, was wiederum ermöglicht, dass die Schnittstelle sehr kleine Funktionen (implementiert durch eine oder wenige Maschinenanweisungen) ohne schwerwiegende Leistungseinbußen aufweist. Im Wesentlichen werden die Algorithmen mit einer bestimmten Datenstruktur parametrisiert und die Schnittstelle zur Kompilierzeit entfernt. Damit ist der resultierende Code so effizient, als wäre dieser für den speziellen Fall geschrieben worden.
  • Wiederverwendung bestehender Finite-Elements-Pakete mit großer Funktionalität. Insbesondere die Finite-Elements-Codes UG, ALBERTA und ALUGrid wurden an das Dune-Framework angepasst. Somit stehen parallele und adaptive Grids mit mehreren Elementtypen und Verfeinerungsregeln zur Verfügung. Alle diese Pakete können in einer ausführbaren Datei miteinander verknüpft werden.

Module.

Das Framework besteht aus einer Reihe von Modulen, die als separate Pakete heruntergeladen werden können. Es gibt eine Reihe von Kernmodulen, die von den meisten anderen Paketen verwendet werden. Das Kernmodul Dune-Grid enthält bereits einige Grid-Implementierungen und weitere Grid-Manager sind als Zusatzmodule verfügbar. Hauptdiskretisierungsmodule, die die Infrastruktur für die Lösung partieller Differentialgleichungen mit Dune bereitstellen, sind als separate Module verfügbar. Der modulare Aufbau von Dune ermöglicht es, nur einen kleinen Teil der Module zu verwenden (z.B. nur das Solver-Modul Dune-istl oder das Modul Dune-localfunctions mit Formfunktionen, ohne z.B. das Dune-Grid oder ein Full Discretization Modul zu verwenden).

Vielen Dank für Ihren Besuch.