Diese Seite wurde maschinell aus dem Englischen übersetzt und kann Fehler enthalten. Englisches Original

Preprocessing

Preprocessing konvertiert die Fallbeschreibung in die Dateien, die ein Simulationscode liest. Keine Simulation wird während Preprocessing gestartet. Sein Ergebnis ist ein vollständiges Modell, das inspiziert werden kann, bevor die Rechenzeit aufgewendet wird.

aXqua Workflow

aXqua erstellt ein Modell in fünf Schritten, von denen jeder das Ergebnis des vorherigen verwendet:

  1. Gelände. Das digitale Geländemodell wird zum Koordinatenbezugssystem des Falls umgebaut und zum Untersuchungsgebiet geschnitten.

  2. Rechennetz. Das Untersuchungsgebiet ist nach den Rechennetzzonen in Dreiecke unterteilt, und jeder Rechennetzknoten erhält seine Sohlhöhe vom Geländemodell und seine Rauheitszone.

  3. Ränder. Die Knoten auf dem Umriss des Rechennetzes werden mit den Zufluss- und Ausflusslinien verglichen. Knoten auf einer Linie werden offene Ränder, und alle anderen Umrisse werden geschlossene Ränder.

  4. Simulationseinstellungen. Die Kontrolldatei von TELEMAC (die Steuerdatei) und die Rauheitstabelle werden aus den Einstellungen der Fall-Datei geschrieben.

  5. Messungen. Die Feldmessungen werden in der Tabelle zusammengefasst, die die Kalibrierung liest.

Da alle Dateien aus einer Fall-Datei stammen, sind sie miteinander konsistent. Beispielsweise stimmt die Reihenfolge der Rand Knoten in der Rand-Datei immer mit dem Rechennetz überein.

Um Preprocessing im Plugin zu starten, wählen Sie den Fall auf der Registerkarte Case Setup und klicken Sie auf Build auf der Registerkarte Preprocessing. Die Tabelle Preprocessing checkup auf dieser Registerkarte gibt dann für jede Simulation des Falls an, ob die Fall-Datei danach fragt, ob sie erstellt wurde und ob sie ausgeführt wurde. In einem Terminal lautet der Befehl:

axqua <case-file>
Der Preprocessing-Tab des Plugins

Die Registerkarte Preprocessing. (1) Build startet Preprocessing als Job. (2) Die Tabelle Preprocessing checkup des aktiven Falls. (3) Die Jobliste, die unter jedem Tab sichtbar ist.

Das Modell wird in den Ordner axqua-case/simulation/ geschrieben. Es besteht aus dem Rechennetz mit Bettenhöhen (geometry.slf), den Randbedingungen (boundaries.cli), der Rauheitstabelle (friction.tbl) und der Steuerdatei (steady2d.cas). Die Protokolldatei axqua.log im selben Ordner zeichnet jeden Schritt mit seiner Dauer auf.

Maschen

Das Rechennetz wird einmal erstellt und dann von allen nachfolgenden TELEMAC-Simulationen des Falls, einschließlich Simulationen mit unterschiedlichen Abfluss- und 3D-Simulationen, die das gleiche Rechennetz in der Draufsicht verwenden, wiederverwendet. Die einzige Ausnahme ist die Netzkonvergenzstudie, die bewusst mehrere Rechennetze mit unterschiedlicher Auflösung erstellt (Netzkonvergenz).

aXqua generiert das Dreiecks-Rechennetz mit dem Open-Source-Rechennetzgenerator Gmsh (Geuzaine und Remacle 2009), den es direkt steuert, so dass weder SALOME noch ein anderes grafisches Programm benötigt wird. Zwei Eigenschaften der Rechennetz-Generation sind in der Praxis relevant:

  • Die Kantenlängen in den Rechennetz-Zonen sind Zielwerte. Die realisierten Dreiecke weichen leicht von ihnen ab, insbesondere am Übergang zwischen Gerinne und Vorland, wo sich die Dreiecksgröße allmählich ändert.

  • Zwei Builds aus identischen Inputs erzeugen leicht unterschiedliche Rechennetze, wobei sich die Anzahl der Knoten um weniger als 1 % unterscheidet. Beide Rechennetze sind gültig. Ein Ergebnis sollte daher immer zusammen mit dem Rechennetz gemeldet werden, auf dem es berechnet wurde, und die Rechennetz-Datei sollte beibehalten werden.

Nach dem Meshing bewertet aXqua das Rechennetz und schreibt einen Qualitätsbericht in die Protokolldatei. Der Bericht listet die Winkel und die Verlängerung der Dreiecke, das Größenverhältnis benachbarter Dreiecke und die kürzeste Kante auf. Die kürzeste Kante ist am wichtigsten, weil sie den Zeitschritt der Simulation begrenzt: Ein sehr kleines Dreieck kann die gesamte Berechnung verlangsamen.

OpenFOAM benötigt ein dreidimensionales Rechennetz. aXqua leitet es aus dem gleichen Untersuchungsgebiet in einem separaten Schritt ab (OpenFOAM-Auswahl).

Überprüfung vor der Verarbeitung

Drei Prüfungen zeigen, ob ein Fall vollständig und plausibel ist, bevor eine Simulation gestartet wird.

Überprüfen Sie die Eingaben vor dem Bau. Der folgende Befehl liest die Fall-Datei, überprüft, ob alle Eingabedateien vorhanden sind und dass TELEMAC erreicht werden kann, und stoppt dann. Es dauert ungefähr eine Sekunde.

axqua <case-file> --check

Überprüfen Sie, was erstellt wurde. aXqua meldet für jeden Code und jede Art von Simulation, ob er verfügbar ist, ob der Fall ihn anfordert und ob seine Dateien existieren:

axqua status <case-file>

Säule

Bedeutung

implemented

aXqua bietet diese Art von Simulation für diesen Code an (yes, no oder n/a, wenn der Typ für den Code nicht existiert).

configured

Die Fall-Datei fordert diese Art von Simulation an.

built

Die Eingabedateien der Simulation existieren.

run

Eine Ergebnisdatei existiert.

Das Plugin verwendet die gleichen Informationen, um seine Tabs und Schaltflächen zu aktivieren und zu deaktivieren. aXqua speichert es auch in zwei Textdateien im Fall-Ordner, deren Namen angeben, ob der Fall einen Code verwendet (z. B. MODEL=TELEMAC_ENABLED und MODEL=OPENFOAM_DISABLED).

Lesen Sie die Protokolldatei des Builds. Überprüfen Sie drei Elemente in axqua-case/simulation/axqua.log:

  • Der Rechennetz-Qualitätsbericht enthält keine Warnhinweise für das Vorland und eine plausible kürzeste Kante;

  • Knoten wurden jeder Zufluss- und Ausflusslinie zugewiesen. Eine Warnung erscheint, wenn der Knotenabstand am Zufluss und am Ausfluss um mehr als 10 % abweicht, was zu einer instabilen Simulation führen kann;

  • die Messpunkte liegen innerhalb des Modells. Der Befehl axqua check-gt <case-file> vergleicht zusätzlich die Höhen der Messpunkte mit dem Gelände-Modell.

Die letzte Prüfung ist die erste Simulation selbst, die zeigt, ob Zufluss und Ausfluss Flussabschnitt eine Balance (TELEMAC Trockenläufe 2D/3D).

TELEMAC-Entscheidungen

Zwei Auswahlmöglichkeiten des hydrodynamics Blocks beeinflussen, wie TELEMAC die Flussgleichungen löst. Beide haben Standardwerte, die für die meisten Flüsse, Seen und Stauseen geeignet sind.

Numerische Methode. Standardmäßig verwendet TELEMAC finite Elemente. Bei finite_volumes: true verwendet es stattdessen endliche Volumina, die robuster für Flüsse sind, die zwischen unterkritischen und überkritischen Bedingungen wechseln, beispielsweise bei einem Hydrauliksprung. Die Finite-Volume-Methode unterstützt nur eine konstante turbulente Viskosität.

Turbulenzmodell. Mit turbulence_model: auto vergleicht aXqua die Zellgröße in der Gerinne mit der Wassertiefe und wählt das Modell aus, das zum Rechennetz passt: ein großes Wirbelsimulationsmodell (Smagorinsky) auf feinen Rechennetzen, das k-Epsilon-Modell auf Rechennetzen mit mittlerer Auflösung und das Spalart-Allmaras-Modell auf groben Rechennetzen. Eine Zahl wählt stattdessen ein bestimmtes TELEMAC-Modell aus.

Austausch mit einem porösen Körper. Einige Flüsse verlieren Wasser in eine Kiesbar und gewinnen es weiter flussabwärts zurück. Ein Tiefen-gemitteltes Modell hat keinen Untergrundfluss, so dass aXqua diesen Austausch darstellt, indem es Wasser entzieht, wo es infiltriert wird, und die gleiche Menge hinzufügt, wo es zurückkehrt. Der gain_lose-Block aktiviert diese Funktion. zone nennt einen Polygonlayer des porösen Körpers, und conductivity ist seine hydraulische Leitfähigkeit in m/s. Ohne diesen Block modelliert aXqua keinen Austausch, auch wenn der offener Rand Layer interne Austauschleitungen enthält (int-...). Das Build-Log benennt diese Zeilen dann.

gain_lose:
  enabled: true
  zone: user-sources/geodata/porous-body.gpkg
  conductivity: 3.0e-4

Die Infiltrations- und Rückführungsorte ergeben sich aus den Wasserständen der Gerinne an beiden Enden des porösen Körpers und müssen daher nicht gezogen werden. Die hydraulische Leitfähigkeit einer Flusssohle variiert über mehrere Größenordnungen und sollte kalibriert werden (Kalibrierung und Validierung).

Strukturen, die nie überragt werden, wie Wände und Gebäude, werden im TELEMAC-Modell durch ein Hochbeet dargestellt: aXqua hebt das Bett an solchen Strukturen auf die Wappenhöhe plus 2 m (structures.solid_freeboard_2d). Mit structures.solid_mode: cut wird stattdessen ihr Fußabdruck aus dem Rechennetz entfernt.

OpenFOAM-Auswahl

Der openfoam Block aktiviert und steuert das dreidimensionale Modell. Sein Rechennetz besteht aus Säulen kastenförmiger Zellen, die der Flusssohle unten folgen. Die Oberseite des Rechennetzes, die als Deckel bezeichnet wird, liegt knapp über dem Wasserspiegel des TELEMAC Warm-up (aXqua Warm-up Konzept), so dass das Rechennetz wenig Luft enthält.

openfoam:
  mode: vof              # vof | rigid-lid
  cell_size: 0.5         # [m] horizontal cell size
  n_layers: 14           # number of cells over the height
  n_processors: 16
  end_time: 300          # [s] simulated time

mode ist die wichtigste Wahl:

vof (Volumen der Flüssigkeit)

Wasser und Luft werden beide simuliert, und die Position des Wasserspiegels ist ein Ergebnis. Dieser Modus beantwortet Fragen zur Form des Wasserspiegels, beispielsweise an einem Wehr oder in einer Kurve. Es ist die teuerste Art der Simulation in aXqua.

rigid-lid

Der Deckel wird exakt auf den Wasserspiegel des TELEMAC Warm-Ups gelegt und nur Wasser simuliert. Der Wasserspiegel kann sich nicht bewegen. Ein grober Lauf dieser Art dauert Minuten, während ein vof Lauf Stunden bis Tage dauert. Es ist geeignet, Fehler im Rechennetz, im Ränder und im Rauheit zu erkennen, bevor ein vof-Lauf gestartet wird. Es ist nicht anwendbar, wenn der Wasserspiegel in Stufen fällt, zum Beispiel in einem Fischpass mit Pools. aXqua erkennt diese Situation und weigert sich, ein solches Modell zu erstellen.

Statt cell_size setzt der Eintrag cell_size_factor die horizontale Zellgröße als ein Vielfaches der Gerinne-Kantenlänge des TELEMAC Rechennetzes. Um die Anzahl der Zellen zu erhalten, ohne das Modell zu erstellen, verwenden Sie:

axqua openfoam <case-file> --check

Um das OpenFOAM-Modell im Plugin zu erstellen, klicken Sie auf Build in der Box Free surface (VOF) auf der Unterkarte OpenFOAM der Registerkarte Simulations. Der Build meldet den Zeitschritt, den die Simulation verwenden wird, und die resultierende Anzahl von Zeitschritten, die die Rechenzeit anzeigt. Das TELEMAC Warm-up ist standardmäßig aktiv (openfoam.pre_run.enabled). Bei openfoam.pre_run.dimension: 3d geht das Warm-up mit einem TELEMAC-3D-Lauf weiter, so dass das OpenFOAM-Modell auch mit einer vertikalen Geschwindigkeitsverteilung beginnt. Diese Option erfordert eine Wassertiefe von mehreren horizontalen Zellgrößen und wird mit einer Nachricht in flachen Flussabschnitten übersprungen.

Zufluss und Ausfluss. Das OpenFOAM-Modell führt das Wasser in den gleichen Linien ein und aus wie das TELEMAC-Modell. Bei jeder Zufluss Zeile tritt der Abfluss dieser Zeile in das Modell ein, und bei Wasserstand gibt es ein Ergebnis des Flusses. Unter Ausfluss hält das Modell das Wasserstand, das das TELEMAC-Modell dort vorschreibt (boundaries.outflow_condition), oder openfoam.outlet_stage, wo das Fall eins setzt. Oberhalb dieses Niveaus plus outlet_air_margin (0,25 m standardmäßig) ist der Ausfluss ein geschlossener Rand, so dass die Luft nur durch ihre Spitze in das Modell eindringt und es verlässt. Ein Ausfluss, der über seine gesamte Höhe offen ist, lässt Luft durch das Modell zirkulieren, das in einem Fischpass schließlich Wasser durch Ausfluss zurückzog. Beim Isar-Beispiel mit 2 m-Zellen hat die Wand den Wasserstände bei Zuflüsse und den Ausfluss um maximal 2 mm verändert, und der Fließgeschwindigkeit in den Spalten des Rechennetz variiert nicht mehr als innerhalb eines Durchlaufs über 100 s.

Ausfluss mit einer Wasserstand-Abfluss-Beziehung. Standardmäßig hält der Ausfluss einen Wasserstand für den gesamten Lauf, das Niveau, das die Ausflussbedingung beim Abfluss des Falls gibt. Mit openfoam.outflow_boundary: rating-curve folgt der Ausfluss stattdessen einer Wasserstand-Abfluss-Beziehung: Bei jedem Zeitschritt hält er den Wasserstand, den die Relation für den Abfluss gibt, der tatsächlich das Modell verlässt. Dies ist die Randbedingung waterLevel_alpha_prgh des Federal Waterways Engineering and Research Institute (BAW; Thorenz 2024), die die OpenFOAM-Installation von aXqua baut (OpenFOAM). Die Relation ist die Tabelle boundaries.stage_discharge, wo sie mindestens zwei Abflüsse hat. Ansonsten leitet aXqua einen aus dem Gelände an der Ausflusslinie mit boundaries.rating_method ab, für neun Abflüsse zwischen dem 0,1- und 3-fachen des Abflusses des Falls, und schreibt ihn als rating-curve-openfoam.csv in den Ordner des OpenFOAM-Modells; die Randbedingung extrapoliert nicht über die Tabelle hinaus. Der Lauf beginnt auf der Ebene der Beziehung am Abfluss des Falls, und der Ausfluss wird von outlet_air_margin über dieser Ebene ummauert. Die Option erfordert eine freie Oberfläche (mode: vof) und kann nicht mit outlet_stage kombiniert werden. Wenn ein Modell mehrere Ausflusslinien hat, folgt jede der gleichen Beziehung zu ihrem eigenen Abfluss. In den Herbst-Einstellungen lautet die Option Outflow boundary auf der Seite OpenFOAM. Am Beispiel der Isar mit Zellen von 2,7 m wurde der Fall mit der Relation des Querprofils am Ausfluss gebaut und interFoam belud die Randbedingung und durchlief beide Stufen.

Rechenzeit. Der Zeitschritt eines vof-Laufs wird von OpenFOAM aus zwei Grenzen ausgewählt: der Courant-Nummer im Wasserspiegel (max_courant, standardmäßig 0,9) und der Courant-Nummer des Flusses in allen Zellen, was dieselbe Nummer ist, es sei denn, max_flow_courant setzt eine größere fest. In einem flachen Fluss sind die Zellen, die Flussabschnitt die zweite Grenze zuerst sind Luftzellen neben der Wasserlinie, wo die Zellen ein paar Zentimeter dick sind. Luft braucht keine Genauigkeit, daher ist ein Wert von 3 angemessen; der Wasserspiegel hält seine eigene Grenze. Jeder Zeitschritt löst den Druck mehrmals. pressure_correctors (3 standardmäßig) und non_orthogonal_correctors (2 standardmäßig) legen fest, wie oft, und die Werte 2 und 1 reduzieren die Kosten für einen Schritt um etwa 40 %. Folgende Einstellungen wurden für das Isar-Beispiel verwendet und ergaben das gleiche Ergebnis wie die Defaults in einem Vergleich über 40 s simulierter Zeit:

openfoam:
  max_courant: 0.9
  max_flow_courant: 3.0
  pressure_correctors: 2
  non_orthogonal_correctors: 1

Schärfe des Wasserspiegel. In einem flachen Fluss verteilt sich der Wasserspiegel eines vof-Laufs über mehrere Zellen. Der Layer des Rechennetz folgt dem Bett, und die Oberfläche kreuzt sie überall dort, wo das Bett abfällt. Im Beispiel der Isar mit 1 m Zellen und 14 Layer befand sich etwa ein Drittel des Wassers in vollständig gefüllten Zellen, und der Übergang von Wasser zu Luft war etwa so hoch, wie das Wasser tief war. Die Einstellung interface_compression (1 standardmäßig) legt fest, wie stark OpenFOAM die Oberfläche zusammenhält. Mit 2 war der Übergang auf dem Isar-Beispiel halb so hoch mit 2 m Zellen und ein Viertel so hoch mit 1 m Zellen, und der Lauf brauchte etwa ein Drittel mehr Zeitschritte. Bei 1 m Zellen haben sich die Durchschnittswerte über dem Flussabschnitt kaum geändert: Wo das Wasser tiefer als 5 cm war, änderte sich der Wassertiefe um 3 mm und die Tiefe gemittelte Geschwindigkeit um weniger als 0,01 m / s im Durchschnitt, und der Wasserstände bei Zuflüsse und der Ausfluss änderte sich um weniger als 5 mm. Spalte für Spalte änderte sich jedoch die Tiefe-gemittelte Geschwindigkeit um 0,09 m/s (Mittelwertquadrat), fünfmal so viel wie sie innerhalb eines Laufs über 100 s variierte, und der Mittelwert Sohlschubspannung stieg von 8,7 auf 9,7 Pa. Lokale Geschwindigkeiten und Bettscherspannungen eines vof Laufs in einem flachen Flussabschnitt hängen somit von dieser Einstellung ab; welcher Wert die genaueren gibt, wurde nicht gegen Messungen getestet. Spuren von Wasser in einer verschmierten Oberfläche verlassen auch das Modell mit der Luft durch seine Oberseite. aXqua meldet diesen Verlust nach jedem Lauf als Anteil des Abfluss und schließt ihn in den Abfluss-Saldo ein. Beim Isar-Beispiel mit 1 m-Zellen betrug der Verlust 0,8 % des Abfluss mit Kompression 1 und 1,3 bis 1,6 % mit Kompression 2.

Die simulierte Zeit, die ein Modell für einen stationären Zustand benötigt, hängt davon ab, wie viel Wasser der Flussabschnitt speichern oder abgeben muss, bevor Zufluss und Ausfluss zustimmen. Ein 3D-Modell hat einen anderen Widerstand als das 2D-Modell, von dem es ausgeht, und der Unterschied im gespeicherten Wasser fließt langsam durch Pools und Seitengerinne ab. Am Beispiel Isar benötigte das Modell mit 2 m Zellen etwa 3000 s simulierte Zeit, bis der Ausfluss den Zufluss um weniger als 1 % übertraf.

Referenzen

Geuzaine, C., Remacle, J.-F., 2009. Gmsh: A 3-D finite element mesh generator with built-in pre- and post-processing facilities. International Journal for Numerical Methods in Engineering 79, 1309–1331. https://doi.org/10.1002/nme.2579

Thorenz, C., 2024. Boundary conditions for hydraulic structures modelling with OpenFOAM. 10th International Symposium on Hydraulic Structures, Zurich. https://doi.org/10.3929/ethz-b-000675949