Programmstruktur


Verfügbarkeit und Voraussetzungen

Die Datei   NaSt2D-2.0.zip   kann auf der Webseite   http://nast2d-2.de/nast/dNaSt2D.html   heruntergeladen werden. Nach dem Entpacken entsteht das Verzeichnis   "NaSt2D-2.0"   mit den Unterverzeichnissen   "Programm", "Par", "Tools"   und   "Grafik". Im Verzeichnis   "Programm"   sind alle Quell- und Headerdateien des Programmes NaSt2D-2.0 abgelegt, im einzelnen:

Datei Funktion Aufgabe

main.c   steuert den Programmablauf
datadef.h   enthält die programmübergreifenden Definitionen

boundary.c + boundary.h SETBCOND setzt generelle Randbedingungen
  SETSPECBCOND setzt problemabhängige Randbedingungen

flag.c + cars.c + valves.c + drachen.c + flag.h INIT_FLAG definiert die Hinderniszellen

init.c + init.h READ_PARAMETER einlesen der Parameter des par-Files
  INIT_UVP setzen der Anfangswerte
  SCHREIBE_ERG_bin binäres Schreiben für Fortsetzungsrechnungen
  LESE_ERG_bin binäres Lesen bei Fortsetzungsrechnungen

uvp.c + uvp.h COMP_TEMP berechnet die dimensionslose Temperatur T*
  COMP_FG berechnet die F*- und G*-Werte für den laminaren und den turbulenten Fall
  COMP_RHS berechnet die rechten Seiten der Poissongleichung für den dimensionslosen Druck p*
  ADAP_UV berechnet die neuen dimensionslosen Geschwindigkeiten u* und v*
  POISSON löst die Poissongleichung für den Druck p* mit dem SOR-Verfahren
  COMP_delt berechnet die neue dimensionslose Zeitschrittweite δt*

turbulence.c + turbulence.h COMP_NUT berechnet die dimensionslose turbulente Viskosität νturb*
  COMP_KAEP berechnet die dimensionslosen k*- und ε*- Werte

surface.c + surface.h SET_PART setzt problemabhängig anfängliche Partikel bei Freien Randwertproblemen
  MARK_CELLS markiert Zellen, in denen Partikel liegen, und bestimmt Zellen am freien Rand
  SET_UVP_SURFACE berechnet die Randwerte am freien Rand

visual.c + visual.h OUTPUTVEC schreibt δxW*, δyW*, u*, v*, p*, T*, νturb*, k*, ε*, ζ*, ψ*, H* und FLAG in den out-File
  COMPPSIZETA berechnet die dimensionslose Stromfunktion ψ* und die dimensionslose Wirbelstärke ζ*
  COMP_HEAT berechnet die dimensionslose Wärmefunktion H*
  ADVANCE_PARTICLES bewegt Partikel weiter
  ADVANCE_AT_BOUND berechnet die Partikelpositionen an Hinderniszellen
  INJECT_PARTICLES injiziert Partikel für Streichlinien
  WRITE_PARTICLES schreibt die aktuellen Partikelpositionen als ASCII-Datei
  WRITE_PARTICLES_bin schreibt die aktuellen Partikelpositionen binär
  PARTICLE_TRACING schreibt Partikelpositionen der Bahnlinien in den tra-File
  STREAKLINES schreibt Partikelpositionen der Streichlinien in den str-File

Makefile_L + Makefile_W compilieren + linken Makefiles für die LINUX- und die WINDOWS- Umgebung

zeit.gnu Script-File visualisiert den zeitlichen Verlauf der Berechnung mit GNUPLOT

Die C-Dateien können mit   gcc   compiliert und zur Ausführung gebracht werden. Die nötige Software ist für LINUX-Umgebungen kostenlos von der   GNU Compiler Collection   auf der Webseite   http://gcc.gnu.org/   erhältlich; für WINDOWS-Umgebungen auf   http://www.mingw.org/. Das GCC-Paket enthält auch den Compiler   g77   für   FORTRAN77 - Programme sowie das Makefile - Tool. Das Grafik-Programm   GNUPLOT   kann kostenlos von der Webseite   http://www.gnuplot.info/   heruntergeladen werden.

Im Verzeichnis   "Par"   sind alle Eingabedateien der bisher implementierten Problemfälle des Programmes NaSt2D-2.0 abgelegt, im einzelnen:


Problem par-Datei Kurzbeschreibung

Umströmung autoA.par Autoumströmung Typ A, Oldtimer   link
  autoB.par Autoumströmung Typ B, Porsche 911   link
  autoC.par Autoumströmung Typ C, Audi A4 Cabrio   link
  autoD.par Autoumströmung Typ D, BionicCar   link
  autoE.par Autoumströmung Typ E, RacingCar   link
  backstep.par Strömung über eine Stufe   link
  balken.par Kármánsche Wirbelstrasse hinter einem schräg gestellten Balken   link
  kreis.par Kármánsche Wirbelstrasse hinter einem Kreis, Halbkreis u.a.   link
  drachen.par Kármánsche Wirbelstrasse hinter einem Flugdrachen   link

Durchströmung dcavity.par Nischenströmung   link
  duese.par Strömung durch eine Düse   link
  ventilD.par Durchgangs-Ventil-Strömung   link
  ventilE.par Eck-Ventil-Strömung   link
  ventilK.par Koswa-Ventil-Strömung   link
  ventilL.par Leser-Ventil-Strömung   link
  ventilP.par Patent-Freifluss-Ventil-Strömung   link
  ventilR.par Rhei-Ventil-Strömung   link

Freie Randwerte damm.par brechender Damm   Damm
  spritzguss.par Spritzguss von Kunststoffteilen   Spritzguss
  tropfen1.par ein fallender Tropfen   Tropfen1
  tropfen2.par zwei fallende Tropfen   Tropfen2
  wafa.par rückschlagende Welle   Welle

Energietransport convection.par natürliche Konvektion   link
  fluidtrap.par gefangenes Fluid   link
  rayleigh.par Rayleigh-Bénard-Strömung   link

Das Verzeichnis   "Tools"   enthält   C- bzw. FORTRAN77 - Dateien, die für die Implementierung von neuen Berechnungsfällen mit komplizierter Geometrie nützlich sind oder für die Aufbereitung der berechneten Ergebnisse zur Visualisierung mit den Grafik - Programmen   GNUPLOT   und   DISLIN, im einzelnen:


Funktion Datei Aufgabe

  flagg.c + flagg.f berechnen Geraden aus aufeinander folgenden Punktepaaren
Implementierung kontur.c + kontur.f skalieren Polynome aus fig-Dateien

Visualisierung datgen.c + datgen.f erstellen Eingabedateien für GNUPLOT und DISLIN
  delete.c + delete.f löschen mehrfach hintereinander liegende Datenpunkte
  marker.c + marker.f markieren die Daten speziell für das Splitten in 3 Datenfolgen
  neighbor.c + neighbor.f ordnen die Daten entsprechend ihrer Nachbarschaft
  revers.c + revers.f geben die Eingabedaten in umgekehrter Folge aus
  split.c + split.f splitten die Daten optional in 2 bis 8 Datenfolgen

Berechnung drag.c + drag.f berechnen den Widerstands - Beiwert umströmter Körper

Fig -Dateien lassen sich in einer LINUX-Umgebung mit dem Vektorgrafik - Programm   XFIG, das von der Webseite   http://ccm.net/download/download-21611-xfig-for-linux   kostenlos heruntergeladen werden kann, erstellen und bearbeiten. Für WINDOWS-Umgebungen sollte man sich das Shareware - Programm   WINFIG   von   http://winfig.com  beschaffen.

Im Verzeichnis   "Grafik"   sind   kon-Dateien abgelegt. Diese enthALTen die Konturdaten aller implementierten Problemfälle mit komplizierter Geometrie, z.B. Polynome, die die Umrisse eines Autos beschreiben. Sie können mit dem Programm GNUPLOT dargestellt werden; eine GNUPLOT - Steuerdatei ist im Verzeichnis beispielhaft angegeben. Vielfältiger in seinen Darstellungsmöglichkeiten ist das Grafik - Programm   DISLIN, das von der Webseite   http://www.dislin.de/   für LINUX- und WINDOWS-Umgebungen kostenlos heruntergeladen werden kann. In Kombination mit GNUPLOT lassen sich die nötigen Eingabedateien für DISLIN relativ problemlos erstellen. Dazu benötigt man die   C- bzw. FORTRAN77 - Programme im Verzeichnis   "Tools". Steuerdateien für das Darstellen mit DISLIN findet man beispielhaft im Verzeichnis   "Grafik". Dort befinden sich im einzelnen:


Funktion Datei Aufgabe

Kontur-Polynom autoA.kon Autokontur Typ A, Oldtimer   AAA 
  autoB.kon Autokontur Typ B, Porsche 911
  autoC.kon Autokontur Typ C, Audi A4 Cabrio
  autoD.kon Autokontur Typ D, BionicCar
  autoE.kon Autokontur Typ E, RacingCar
  ventilD.kon Durchgangs-Ventil-Kontur
  ventilE.kon Eck-Ventil-Kontur
  ventilK.kon Koswa-Ventil-Kontur
  ventilL.kon Leser-Ventil-Kontur
  ventilP.kon Patent-Freifluss-Ventil-Kontur
  ventilR.kon Rhei-Ventil-Kontur
  drachen.kon Flugdrachen-Kontur

GNUPLOT-Steuerprogramm iso.gnu stellt Polynome dar mit GNUPLOT

DISLIN-Steuerprogramme Vektor.c + Vektor.for erzeugen ein Vektorbild der Geschwindigkeit w(u,v) mit DISLIN
  IsoFarb.c + IsoFarb.for Isolinien + farbkodierte Fläche der Datenmatrix ψ, p etc.
  autoBdatInc.c + autoBdatInc.for autoB-Kontur-Daten (Porsche 911) für DISLIN
  autoBplotInc.c + autoBplotInc.for stellen die autoB-Kontur-Daten (Porsche 911) mit DISLIN dar
  Streak.c + Streak.for erzeugen Streichlinien-Bilder mit DISLIN
  Trace.c + Trace.for erzeugen Bahnlinien-Bilder mit DISLIN
  Profil.c + Profil.for erzeugen Profil-Bilder mit DISLIN
  e3Ddruck.c + e3Ddruck.for erzeugen räumliche Verteilungen mit DISLIN



Struktur und Anpassungen

Der Hauptalgorithmus im Programm   main.c   hat folgende Struktur:

  1. Setzen der Parameter für die Turbulenzmodelle; derzeit sind die in [1] angegebenen Zahlenwerte   Cμ = 0,09 , Cε = 0,07 , C1 = 0,126 und C2 = 1,92   eingestellt.

  2. Einlesen der Startwerte bei Fortsetzungsrechnungen, wenn im par-File ein Dateiname genannt ist.

  3. Setzen der Anfangswerte und definieren von Hinderniszellen, falls es sich nicht um eine Fortsetzungsrechnung handelt, vgl. Pkt.2.

  4. Setzen von Partikeln für Streichlinien und/oder Bahnlinien, wenn im par-File entsprechende Dateinamen angegeben sind.

  5. Setzen von Partikeln für Freie Randwertprobleme, wenn mit dem par-File ein solches Problem aufgerufen ist.

  6. Setzen der Randbedingungen, falls es sich nicht um eine Fortsetzungsrechnung handelt, vgl. Pkt.2.

  7. Berechnung der dimensionslosen turbulenten Viskosität νturb* und der k*, ε*- Werte, wenn ein Turbulenzmodell im par-File aufgerufen ist.

  8. Abarbeiten der   Zeitschleife   von t_anf* = Null bis t_end*.

  9. Berechnung der dimensionslosen Stromfunktion ψ*, der Wirbelstärke ζ* sowie der Wärmefunktion H* und schreiben der Ergebnisse in den out-File, wenn im par-File ein Dateiname für diese Vektordatei genannt ist.

  10. Speicherplatz-Freigabe und Programm-Ende.

Das Ende der Zeitschleife wird im par-File vorgegeben, entweder mit t_end* = Null oder größer Null. Im ersten Fall endet die Rechnung mit dem Erreichen   stationärer Strömungsbedingungen, d.h. wenn der Absolutwert des Geschwindigkeitsgradienten in einem vorbestimmten Feldpunkt den Wert 10-4 unterschreitet. Im zweiten Fall endet die Rechnung beim Erreichen der beliebig vorgegebenen   Endzeit, wobei der Wert t_end* = 29.3 ein Steuerparameter ist und nicht verwendet werden kann. Die angegebenen Zeiten sind dimensionslose Werte und hier mit einem * gekennzeichnet. Die dimensionsbehaftete Zeit ist   t = t*· L / c   mit der charakteristischen Länge L und der Einströmgeschwindigkeit c.

In der Anfangsphase jeder Rechnung kommt es zu mehr oder weniger großen Fluktuationen des Geschwindigkeitsgradienten, deshalb kann die   minimale Laufzeit   der Zeitschleife mit einem Wert für tks in main.c vorgegeben werden. Auch die Stelle des Feldpunktes zur Bestimmung des Geschwindigkeitsgradienten kann gewählt werden; im Normalfall sind ikx = imax/2 und jky = jmax/2 geeignete Werte. Liegt der gewählte Feldpunkt jedoch in einer Hinderniszelle oder an einer anderen strömungsmechanisch ungeeigneten Stelle, so kann ein geeigneter Feldpunkt mit folgendem Algorithmus in main.c gefunden werden:


if(U[ikx][jky] == 0.) {
printf("ikx,iky aendern, damit Gradient nicht NULL, siehe Zeitschleife in main.c\n");
/* return(0); hier deaktivieren und folgenden Suchalgorithmus aktivieren */
//           return(0);
}
/* Mit der Aktivierung des folgenden Ausdruckes die geeigneten Werte ikx,iky finden */
/*
for(i=1;i<=imax;i++)
for(j=1;j<=jmax;j++){
if(U[i][j]!=0.) printf("ikx,jky waehlen: i %d j %d U %1.5g V %1.5g\n",i,j,U[i][j],V[i][j]);
}
*/

Das Abarbeiten der   Zeitschleife   umfasst:

  1. Berechnung der neuen Zeitschrittweite δt*. Im Fall von δt* < 10-8 wird eine Warnung auf dem Desktop ausgegeben. Die Rechnung konvergiert im weiteren Verlauf nicht mehr, d.h. die Eingabedaten müssen geändert werden.

  2. Bei Freien Randwertproblemen werden die Zellen markiert, in denen Partikel liegen, die Zellen am freien Rand werden bestimmt und die Geschwindigkeiten am freien Rand berechnet.

  3. Berechnung der Temperatur T*, der F*- und G*-Werte für den laminaren und den turbulenten Fall sowie der rechten Seiten für die Poisson - Gleichung.

  4. Anzeige der Restlaufzeit, der Zahl von SOR-Iterationen sowie des Geschwindigkeitsgradienten am gewählten Feldpunkt auf dem Desktop. Gleichzeitig werden die Zeit t*, die Geschwindigkeit u*, der Druck p* und der Geschwindigkeitsgradient ∂u*/∂t* am gewählten Festpunkt in den File zeit.dat geschrieben. Während der Berechnung kann so mit GNUPLOT, d.h. mit den Dateien zeit.gnu und zeit.dat, der Gradientenverlauf dargestellt und die Rechnung verfolgt werden.

  5. Berechnung der neuen Geschwindigkeiten u* und v*.

  6. Berechnung der neuen generellen und der neuen problemabhängigen Randbedingungen.

  7. Im Fall von Turbulenz werden νturb* und die k*, ε*- Werte neu berechnet.

  8. Bei Freien Randwertproblemen werden die Randwerte am freien Rand neu berechnet.

  9. Falls mit del_vec, del_trace und del-streak im par-File vorgegeben, werden Zwischenergebnisse in den out-File und in den File für Fortsetzungsrechnungen geschrieben, desgleichen Partikelpositionen in den str-File und/oder den tra-File.




Der Algorithmus der Funktion   OUTPUTVEC   im Programm   visual.c   steuert die Ergebnisausgabe und sollte vor jeder Rechnung angepasst werden, damit eine unnötige Datenausgabe durch Deaktivierung vermieden wird bzw. dimensionsbehaftete Werte durch Transformation direkt ausgegeben werden. Allen Berechnungen des Programmes sind dimensionslose Variable zugrunde gelegt, deshalb sind die Ausgabevariablen zunächst auch dimensionslos. Möchte man dimensionsbehaftete Werte ausgeben, dann sind für die Ausgabeparameter folgende Transformationen mit den Bezugsgrößen   L , c , p , ρ , λ , cp∞ , η   einzufügen:

Parameter dimensionslos dimensionsbehaftet

waagerechte Koordinate X = x* x = x*· L
senkrechte Koordinate Y = y* y = y*· L
Zeit t = t* t = t*· L / c

Geschwindigkeit in x-Richtung U = u* u = u*· c
Geschwindigkeit in y-Richtung V = v* v = v*· c
Druck P = p* p = p + p*· ρ· c2
Temperatur TEMP = T* T = T + T*· ΔT
turbulente Viskosität NUT = νturb* νturb = νturb*· L· c
turbulente kinetische Energie KA = k* k = k*· c2
Dissipationsrate EP = ε* ε = ε*· c3/ L
Wirbelstärke ZETA = ζ* ζ = ζ*· c / L
Stromfunktion PSI = ψ* ψ = ψ*· L· c
Wärmefunktion HEAT = H* H = H*· λ· ΔT     mit     T = 0 °C     und     ΔT = Theiß - TkALT



Problemspezifische Anpassungen

Im Programm   boundary.c   sind folgende problemspezifischen Randbedingungen definiert und können dort auch verändert werden, im einzelnen:

Problem Definition

backstep Einströmbereich
dcavity obere Geschwindigkeit
spritzguss Einströmbereich
wafa Einströmbereich
convection Wandtemperaturen
fluidtrap Wandtemperaturen
rayleigh Wandtemperaturen

Im Programm   flag.c   sind problemspezifische Hinderniszellen definiert und können dort auch verändert werden. Einfache Geometrien wie Stufen, Kreise, Rechtecke, sinusförmige Düsen etc. sind durch wenige analytische Funktionen definiert. Kompliziertere Geometrien wie Ventile und Autos benötigen eine Reihe von Polynomen als Begrenzung. Im Ergebnis ist dann das Feld FLAG(x,y) mit 0 oder 16 in den Gitterpunkten definiert, wodurch Hindernisse bzw. keine Hindernisse gekennzeichnet sind. Die einfachen Geometrien können in flag.c durch die Änderung weniger Parameter umgebaut werden. Bei dem Problem "kreis" kann wie auch bei den komplizierten Geometrien, durch den par-File gesteuert, die FLAG-Verteilung zur Kontrolle und Korrektur mit dem Vektorfile ausgegeben werden. Es handelt sich im einzelnen um folgende Problemfälle:

Problem Definition der Geometrie

backstep Höhe und Länge der Stufe
balken unterer und oberer Rand des schrägen Balkens
kreis möglich sind Kreis, Halbkreis, Halbkreis-Dreieck-Profil, Stromlinienkörper
duese sinusförmige Düsenkontur
spritzguss Kreis
wafa Höhe und Länge der Stufe
fluidtrap Begrenzungswände

Im Programm   init.c   sind die problemspezifischen Anfangsbedingungen für die Fälle "backstep" und "duese" definiert, d.h. die geometrieabhängigen Anfangswerte für die Geschwindigkeit und die Turbulenz werden gesetzt. Und letztlich sind im Programm   surface.c   die Parameter für die Freien Randwertprobleme "damm", "tropfen1" und "tropfen2", d.h. die Anzahl der Partikelverfolgungen, die Geometrie der Tropfen und des Auffangbehälters sowie die Anfangsgeschwindigkeiten der Tropfen angegeben.



Vorwort   |   Inhaltsverzeichnis