OpenLB
# OpenLB

OpenLB ist eine objektorientierte Implementierung von Lattice-Boltzmann-Methoden (LBM). Es ist die erste Umsetzung einer generischen Plattform für LBM-Programmierung, die mit der Open-Source-Gemeinschaft (GPLv2) geteilt wird. Der Code ist in C++ geschrieben und wird sowohl durch Anwendungsprogrammierer als auch Entwickler verwendet, wobei eigene Modelle implementiert werden können. OpenLB unterstützt komplexe Datenstrukturen, die Simulationen in komplexen Geometrien und das parallele Ausführung mittels MPI, OpenMP und CUDA auf Hochleistungsrechnern erlauben. Der Quellcode bedient sich der Konzepte von Interfaces und Templates, so dass effiziente, direkte und intuitive Implementierungen der LBM möglich werden. Die Effizienz und Skalierbarkeit konnte durch mehrere Code-Reviews überprüft und nachgewiesen werden. Eine Bedienungsanleitung für Anwender sowie eine Quellcode-Dokumentation durch DoxyGen sind auf der Projektseite verfügbar.

## Funktionsumfang

OpenLB befindet sich in ständiger Entwicklung. Aktuell sind folgende Anwendungsmöglichkeiten implementiert:

* Strömungssimulation in komplexen Geometrien
* Automatisierte Gittergenerierung
* Turbulente Strömungen
* Mehrphasen- und Mehrkomponenten-Strömungen
* Thermische Strömungen
* Lichtstrahlung
* Topologieoptimierung
* Parikelströmungen (Euler-Euler- und Euler-Lagrange-Verfahren)

## Automatisierte Gittergenerierung

Die automatisierte Gittergenerierung stellt einen der großen Vorteile von OpenLB gegenüber anderen CFD-Softwarepaketen dar. Im Folgenden sind die Hauptvorteile aufgeführt:

* Nutzung von Geometrien im STL-Dateiformat oder geometrisch primitiven Formen (z. B. Kugel, Zylinder, Kegel) und deren Vereinigung, Schnittmenge und Differenz
* sehr schnelle Voxelization: 600³ ~ 1 Minute
* Umgang mit nicht abgeschlossenen Oberflächen
* Verwendung von speichereffizienten Octrees
* Lastverteilung für parallele Ausführung mit MPI, OpenMP und CUDA.

Die automatische Gittergenerierung kann sowohl von einer STL-Datei als auch von primitiven Geometrien ausgehen. Für die übergebenen Geometrie wird zunächst ein den gesamten Raum der Geometrie umschließendes quaderförmiges Rechengitter erstellt. Anschließend werden die überflüssigen Gitterzellen entfernt und verbleibende Quader so weit wie möglich auf die gegebene Geometrie geschrumpft. Abschließend wird das Gitter für die parallele Ausführung der Simulation auf verschiedene Threads beziehungsweise Prozessoren aufgeteilt. Mit Hilfe von Materialzahlen können die Randbedingungen und Startwerte gesetzt werden.

## Auszeichnungen

* Gewinner Mimics Innovation Award (2011)
* Ehrenurkunde in der Gruppe Humanitarian Impact, "Itanium® Solutions Alliance Innovation Awards" (2009)
* Finalteilnehmer in der Gruppe Humanitarian Impact Innovation, "Itanium® Solutions Alliance Innovation Awards" (2007)
