pdelib

FVM und FEM Toolbox für Partielle Differentialgleichungen

Inhalt:   Zur Implementierung · Import und Export Filter · Pre- und Post-Processing · Online Visualisierung · Numerische Module · Leistung · Software Abhängigkeiten · System Information 

pdelib2 ist eine Sammlung von Software-Bausteinen, welche zur Erstellung von Simulatoren basierend auf Modellen numerischer Lösung entwickelt wurden. Ziele des Designs sind Modularität, Portabilität, Integrierbarkeit und Parallelisierung auf Shared Memory Architekturen.

Zur Implementierung

Das array basierte Design der Hauptstrukturen erlaubt eine Interoperabilität mit einer Vielzahl von existierenden Paketen und erlaubt eine freie Wahl der Programmiersprache. pdelib2 nutzt in FORTRAN geschriebene Kerne. Die zentralen Datenstrukturen sind in C++ implementiert. Skripte sind über eine Lua Anbindung verfügbar.
  • Die Datenstrukturen basieren auf mehrdimensionalen arrays und speichern Lösungen, Gitter, Matrzen und andere Objekte.
  • Sicheres Speicher Management mittels C++ smart pointers.
  • Bibliotheksanbindung zu Gittergeneratoren Triangle und TetGen.
  • Partitionierung der Gitter für paralleles Rechnen und Cache-effizienten Datenzugriff durch METIS
  • Linear Algebra Subroutinen, Matrix Assemblierung and nichtlineare Operator Anwendung ausgelegt für paralleles Rechnen (mehr...).
  • Integrierte Visualisierung der berechneten Daten mittels OpenGL.
  • Linear Probleme werden gelöst mit iterativen und direkten Lösern, z.B. PARDISO.
  • Große Teile der Bibliothek sind über die Erweiterungssprache Lua mittels SWIG Schnittstellengenerierungstool verfügbar.
  • Graphische Nutzer Schnittstelle für basieriert auf FLTK ("fulltick").

Import und Export Filter

Eigene Daten Dateiformate
  • .tsol - Lesen/Schreiben von (Zeit-)Schrittlösungen auf nicht redundante weise.
Eigene Geometrie und Gitter Dateiformate
  • .grid - ASCII/Binär lua/ldf Dateien mit (generischer) Gitter- oder Geometrie-Beschreibung
  • .xgrid - binäre ldf Dateien mit Gitter-Beschreibung
  • .sg - pdelib1 Simplex Gitter Datei
  • .polyx - Erweiterung von .poly
  • .vec - Vectorfeld Dateien
Unterstützung weiterer Gitter Dateiformate
  • .stl - Stereolithographie Format (mehr...)
  • .ele - Triangle/TetGen Dateiformate (mehr...)
  • .poly - piecewise linear complex (PLC) files (mehr...)

Pre- und Post-Processing

Diese eigenständigen Softwarekomponenten ermöglichen eine offline Datenauswertung. Die offline Implementierung der folgenden Programme basiert auf den online Komponenten.

gview gview Betrachter für Geometrie und Gitter Dateien (1D, 2D und 3D)
semiview semiview Betrachter für numerische Lösungen von Problemen, welche große Dateien erzeugen (> 2GB). semiview ist eine spezielle Implementierung für die Darstellung von Ergebnissen aus 'Semiconductor Photon Detectors' Simulationen.
player player Zeigt eine gespeicherte zeitabhängige Lösung geladen aus dem .tsol Dateiformat. Generische und nutzerspezifische Interpretationen sind möglich.

Online Visualisierung

Wärend einer Simulation wird eine direkte Betrachtung der Daten ohne Kopie und Interpolation unterstützt. Von allen pdelib Betrachtern ist eine Speicherung in folgende Formate möglich
  • PPM-Raw (Einzel / Serien Bilder)
  • PNG-Compressed (Einzel / Serien Bilder)
  • EPS-Vector (Einzel / Serien Bilder)
  • MPEG-Video (Video Format)
gView gView Online Betrachter für Gitterdaten (1D, 2D und 3D)
aView aView Online Betrachter für skalare Felder (1D, 2D und 3D)
vfView vfView Online Betrachter für Vectorfelder (2D und 3D)

Weitere Eigenschaften sind
  • MultiView und OpenGL stereo und ein einfacher Szenen-Editor ermöglichen eine erhöhte räumlichen Eindruck der 3D Daten.
  • Der Macro-Rekorder ermöglicht z.B. die Aufnahme und Wiedergabe von graphischer Nutzerinteraktionen. Ein aufgenommener Makro ist einfacher editierbarer Lua Programmcode.
  • Erweiterte Farbeinstellungen für Materialregionen und deren Schnittflächen. Wählbar sind gefüllt, transparent oder Drahtdarstellung. In diesem Beispiel sind die uninteressanten äußeren Regionen ausgegraut.
  • Beliebig orientierte Schnittebene

Numerische Module

  • Gitter-Partitionierung mit variabler Breite der Separatoren
  • Gitter-Interpolation: Gitter-Gitter für adaptive Methoden, Gitter-Punkt für Messungen (pdelib2/grid_interpol)
  • Finite Volumen (FVM) Assemblierungs- und Anwendungs-Schleifen (pdelib2/grid)
  • Lineare Algebra Operationen zwischen (sparse-)Matrix und Vektor (pdelib2/linalg)
  • Vorkonditionierer: Jacobi/Point block Jacobi, SSOR/Point block SSOR, ILU/ Point block ILU, GSPAR direkter Löser (pdelib2 built-in), Schnittstelle zu PARDISO, Agglomeration Mehrgitter (pdelib2/iteration)
  • Nichtlineare iterative Löser: Newton Verfahren, CG, CGS, Bi-CG, Bi-CGSTAB, GMRES (pdelib2/iteration)
  • Finite Volumen Löser für nichtlineare gekoppelte Systeme von Reaktion-Diffusion-Konvektion Differentialgleichungen (pdelib2/fvsys)
  • Spline Interpolation für nichtlineare Datenfunktionen (pdelib2/nltools)

Leistung

Assemblierung und Anwendung von linearen und nichtlinearen Operatoren nutzen
  • SMP basierte Parallelisierung
  • Cache-bewusster Gitterzugriff
  • FORTRAN Kerne kompatible Datenstrukturen
Neben den bekannten OpenMP profiling Werkzeugen wie z.B. Assure, Intel Thread Checker, DDT nutzen wir ein eigenes built-in Werkzeug. Ein Vergleich zwischen sequentiellen, parallelen Läufen, Compiler und Systemen ist möglich.

Thread Viewer Thread Viewer Leistungsanalyse von parallelen and sequentiellen Programmteilen

Software Abhängigkeiten

Für die beschriebene Funktionalität nutzt die pdelib2 mehrere externe Softwarepakete. Die folgenden Pakete werden unterstützt

Paket genutz für
ARPACK Löst large scale Eigenwertprobleme
FLTK GUI Funktionalität und 3D Graphik via OpenGL
SWIG Verbindet C++ mit der Skriptsprache Lua
Lua Skriptsprache
METIS Gitterpartitionierung
TetGen 3D Gittergenerierung
TetView 3D Gittervisualisierung
Triangle 2D Gittergenerierung
gnuplot XY-Datenvisualisierung

System Information

Dieser Abschnitt beinhaltet Informationen bezüglich Systemvoraussetzungen und unterstützte Plattformen für pdelib2. Im wesentlichen sind alle Programmteile in C++ geschrieben. Die effizienten numerischen Kerne (Vektor-Routinen, dünnbestzte Matrix Programmcode) dagegen in Fortran77. Aktuell ist die Software portierbar auf eine große Zahl von UNIX Systemen, auf welchen X11 und OpenGL Unterstützung verhanden ist.
  • Linux
  • Mac OS X
  • AIX
  • Windows (MinGW-cross)
  • True64
  • IRIX