Modellierung Hydrosysteme: Finite-Differenzen-Methode (FDM)

Ähnliche Dokumente
BHYWI-22: Semester-Fahrplan: 2018

Modellierung Hydrosysteme: Finite-Differenzen-Methode (FDM)

Modellierung Hydrosysteme: Finite-Differenzen-Methode (FDM)

Modellierung von Hydrosystemen Numerische und daten-basierte Methoden 2018 implizite Finite-Differenzen-Methode Selke-Modell

Modellierung Hydrosysteme: ] Finite-Differenzen-Methode (FDM)

Hydroinformatik II: Finite Differenzen Methode

BHYWI-08: Semester-Fahrplan Vorlesungen 1 / 1

Hydroinformatik II Prozess-Simulation und Systemanalyse

Hydroinformatik I: Referenzen und Zeiger

Hydroinformatik II Prozess-Simulation und Systemanalyse

Angewandte Umweltsystemanalyse: Finite-Elemente-Methode (FEM) #3

Hydroinformatik I: Synthese-Übung Sprachelemente

Hydroinformatik II: Gerinnehydraulik

Hydroinformatik II: Gerinnehydraulik

Angewandte Umweltsystemanalyse: Finite-Elemente-Methode (FEM)

Hydroinformatik I: Referenzen und Zeiger

Hydroinformatik II: Grundlagen der Kontinuumsmechanik

Hydrosystemanalyse: Finite-Elemente-Methode (FEM)

Hydroinformatik I - WiSe 2018/2019 V5: Klassen

Einführung in die Umweltsystemanalyse Grundlagen und Fallstudien

Hydroinformatik I: Introduction

Hydroinformatik I: Klassen

Hydroinformatik I: Klassen

Hydroinformatik I: Hello World

Hydroinformatik II: Gerinnehydraulik

1. Übung Modellierung von Hydrosystemen: Einleitung 1

Hydroinformatik I: Hello World

Hydroinformatik II: Grundlagen der Kontinuumsmechanik V3

1. Übung Modellierung von Hydrosystemen: Einleitung 1

Finite Differenzen Methode (FDM)

Hydrosystemanalyse: Finite-Elemente-Methode (FEM)

C++ - Einführung in die Programmiersprache Schleifen

3 Das Programm 3. 4 Dateien 4. 5 Aufgaben 4. 6 Ausblick 5

Institut für Wasserbau, Lehrstuhl für Hydromechanik und Hydrosystemmodellierung

Modellierung von Hydrosystemen Numerische und daten-basierte Methoden 2018 Finite-Elemente-Methode Selke-Modell

Übungsblatt 6 Musterlösung

Angewandte Mathematik und Programmierung

Hydroinformatik I: IO - Files

Semester-Fahrplan 1 / 17

Übung zur Numerik linearer und nichtlinearer Parameterschätzprobleme A. Franke-Börner, M. Helm

u(x, 0) = g(x) : 0 x 1 u(0, t) = u(1, t) = 0 : 0 t T

Simulationstechnik V

Übung zur Vorlesung Numerische Simulationsmethoden in der Geophysik

1-, 2-, 3D-Modelle: Überblick, Vergleich und Anwendung

Programmieren in C/C++ und MATLAB

Girls Day 2017 Programmierung

Hydroinformatik I - WiSe 2018/2019 V11: BigData

Hydroinformatik I: Strings

Modellierung von Hydrosystemen

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Schriftlicher Test zu C (90 Minuten) VU Einführung ins Programmieren für TM. 1. Oktober 2012

Simulationstechnik V

Bildsegmentierung mit Snakes und aktiven Konturen

Kapitel 3. Diskretisierungsverfahren. 3.1 Elliptische Differentialgleichung

Einführung FEM 1D - Beispiel

Übungsblatt 2 Musterlösung

Numerische Akustik. Ennes Sarradj, Gesellschaft für Akustikforschung Dresden mbh

Ordnen Sie die folgenden Funktionen nach ihrer asymptotischer Komplexität in aufsteigender Reihenfolge: i=1 4i + n = 4 n. i=1 i + 3n = 4 ( n(n+1)

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Skript zur Vorlesung. Informatik 1. Studienjahr Halbjahr

Semester-Fahrplan 1 / 26

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Beginn der Vorlesung zur Numerik I (Wintersemester 2010/2011)

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Simulationstechnik V

Anhang: Ungarische Methode

Wertebereich und Genauigkeit der Zahlendarstellung

Informatik II Übung, Woche 10

High Performance Computing Blatt 7

II. Elliptische Probleme

Informatik II. Woche 15, Giuseppe Accaputo

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Lösungen zu Mathematik I/II

Algorithmen zur Datenanalyse in C++

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 3

Modellierung und Programmierung 1

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Mathematik-Tutorium für Maschinenbauer II: Differentialgleichungen und Vektorfelder

Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich

D-MATH Numerische Methoden FS 2016 Dr. Vasile Gradinaru Alexander Dabrowski. Serie 9

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Klausur "C#" WS 2013/2014

Es findet eine binäre/iterative o.ä. Suche statt. (8 Punkte);

= pkp(t 1 ) und (1) α 1 (1 + α e ) α 2 α e

Workshop Einführung in die Sprache Haskell

Unterlagen. CPP-Uebungen-08/

Stack. Seniorenseminar Michael Pohlig

Einführung in numerische Methoden für Ingenieure (nach A. Quarteroni, F. Saleri: Wissenschaftliches Rechnen mit MATLAB)

D-MATH Numerische Methoden FS 2017 Dr. Vasile Gradinaru Luc Grosheintz. Serie 10

Modellieren in der Angewandten Geologie II. Sebastian Bauer

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Numerische Lösung von Differentialgleichungen

Transkript:

Modellierung Hydrosysteme: Finite-Differenzen-Methode (FDM) Prof. Dr.-Ing. habil. Olaf Kolditz 1 Helmholtz Centre for Environmental Research UFZ, Leipzig 2 Technische Universität Dresden TUD, Dresden Dresden, 26. Mai 2017 1/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Fahrplan für das Semester 2/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Fahrplan für heute... Übersicht Übungen Grundlagen - GWE Grundlagen - TSE Übungen zur expliziten FDM (page 12) [BHYWI-22-E2] 3/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Grundlagen - GWE PDE S h t ( ) h K x ( ) h K y x x y y = Q (1) 4/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Grundlagen - TSE in time u n+1 j = u n i+1 = m=0 in space m=0 t m m! x m m! [ m ] u n t m j [ m ] u n x m i (2) (3) u n j+1 = m=0 y m m! [ m ] u n y m j (4) 5/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Grundlagen - FDM Zeitableitung [ ] u n t j = un+1 j uj n t t 2 [ 2 ] n u t 2 + 0( t 2 ) (5) j in space [ 2 ] n u x 2 = un i+1,j 2un i,j + un i 1,j i,j x 2 + x 2 12 [ 4 ] n u x 4 +... (6) i,j [ 2 ] n u y 2 = un i,j+1 2un i.j + un i,j 1 i,j y 2 + y 2 12 [ 4 ] n u y 4 +... (7) i,j 6/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

FDM - explizites Schema ui,j n t Ki,j x ui+1,j n 2un i,j + un i 1,j x 2 K y i,j u n+1 i,j S i,j u n i,j+1 2un i,j + un i,j 1 y 2 (8) = Q i,j u n+1 i,j = ui,j n + K i,j x t S i,j x 2 un i+1,j 2ui,j n + ui 1,j n + K y i,j S i,j + Q i,j S i,j t y 2 un i,j+1 2u n i,j + u n i,j 1 (9) 7/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Grundlagen - FDM Abbildung: 5-Punkte-Stern (Knabner und Angermann 2000) 8/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Datenstrukturen Tabelle: Feldgröße Physikalische Parameter Numerische Parameter u S, K, Q t, x, y 9/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Die Minimal-Datenstrukturen für die Programmierung der Gleichung (9) sind damit: std::vector<float>u_new; std::vector<float>u_old; float S0,Kf,Q; float dx,dy,dt; 10/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

11/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

- V1 Um dieses Gitter abtasten zu können, schreiben wir folgende doppelte Schleife. for(j=0;j<jy;j++) { nn = j*ix; for( i=0;i<ix;i++) { n = nn+i; u_new[n] = u[n] \ + Kf/S0*dt/dx2 * (u[n+1]-2*u[n]+u[n-1]) \ + Kf/S0*dt/dy2 * (u[(j+1)*ix+i]-2*u[n]+u[(j-1)*ix+i]) \ + Q/S0; } } 12/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

- V2 Um dieses Gitter abtasten zu können, schreiben wir folgende doppelte Schleife. for(int j=0;j<jy;j++) { nn = j*ix; for(int i=0;i<ix;i++) { n = nn+i; if(isbcnode(n,bc_nodes)) continue; u_new[n] = u[n] \ + Kf/S0*dt/dx2 * (u[n+1]-2*u[n]+u[n-1]) \ + Kf/S0*dt/dy2 * (u[(j+1)*ix+i]-2*u[n]+u[(j-1)*ix+i]) \ + Q/S0; } } 13/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Dabei ist j der Laufindex über die y Richtung und i der Laufindex über die x Richtung. Ganz wichtig ist natürlich, den Speicher für die Vektoren bereitzustellen, bevor es los geht. u.resize(ix*jy); u_new.resize(ix*jy); Welche Rolle spielen ix und jy bei der Speicherreservierung? 14/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Natürlich müssen auch die Parameter vor der Berechnung initialisiert werden ix = 21; jy = 11; dx = 10.; dy = 10.; dt = 0.25e2; S0 = 1e-5; Kf = 1e-5; Q = 0.; u0 = 0.; Welche Einheiten haben die einzelnen Parameter? 15/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Das mit den Anfangsbedingungen ist eine einfache Sache. Mit der Doppelschleife über alle Knoten, können wir sehr einfach einen Wert u0 als Anfangsbedingung überall zuweisen. for(int i=0;i<ix;i++) for(int j=0;j<jy;j++) { u[j*(ix+1)] = u0; u_new[j*(ix+1)] = u0; } } 16/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Mit den Randbedingungen ist es etwas kniffliger... //top and bottom int l; for(int i=0;i<ix;i++) { bc_nodes.push_back(i); u[i] = u_top l = ix*(jy-1)+i; bc_nodes.push_back(l); u[l] = u_bottom; } //left and right side for(int j=1;j<jy-1;j++) { l = ix*j; bc_nodes.push_back(l); u[l] = u_left; } l = ix*j+ix-1; bc_nodes.push_back(l); u[l] = u_right; u_new[i] = u_top; u_new[l] = u_bottom; u_new[l] = u_left; u_new[l] = u_right; 17/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Sie sehen, dass wir für die Zuweisung der Randbedingungen eine neue Datenstruktur eingeführt haben. std::vector<float>u_bc; 18/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Das Einbauen der Randbedingungen integrieren wir direkt in die Doppelschleife zur Berechnung der Knotenwerte. Dabei kommt eine neue Funktion IsBCNode ins Spiel, die wir uns gleich noch näher anschauen. IsBCNode soll eigentlich nichts anderes machen, als beim Auftreten einer Randbedingung nichts zu tun (i.e. continue). Randbedingungswerte sind gesetzt, müssen also nicht gerechnet werden. for(int j=0;j<jy;j++) { nn = j*ix; for(int i=0;i<ix;i++) { n = nn+i; if(isbcnode(n,bc_nodes)) continue;... } } 19/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Wie funktioniert nun IsBCNode? bool IsBCNode(int n,std::vector<int>bc_nodes) { bool is_node_bc = false; for(int k=0;k<(size_t)bc_nodes.size();k++) { if(n==bc_nodes[k]) { is_node_bc = true; return is_node_bc; } } return is_node_bc; } 20/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Struktur der Funktion: Rückgabewert: logischer Wert wahr oder falsch Parameter: aktueller Gitterpunkt und Randbedingungsknotenvektor Die Funktion überprüft, ob der Gitterpunkt n ein Randbedingungsknoten ist und gibt den entsprechenden logischen Wert zurück. 21/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Das Ergebnis der finite Differenzen Simulation sehen wir in der Abb. Abbildung: Berechnete Druckverteilung im Rechteck-Aquifer nach 100 Zeitschritten t = 25 sec 22/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Jetzt werden wir mutig und vergrößern mal den Zeitschritt, sagen wir mal verdoppeln: t = 50 sec. Das Maleur sehen wir in der Abb. Was ist hier los? Abbildung: Berechnete Druckverteilung im Rechteck-Aquifer nach 100 Zeitschritten t = 50 sec 23/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Wir erinnern uns noch dunkel daran, dass der Preis für das einfache explizite FDM ein strenges Stabilitätskriterium war (siehe Hydroinformatik, Teil II, Abschn. 3.2.2 und Abschn. 4.1). Dabei muss die Neumann-Zahl kleiner einhalb sein. Ne = α t x 2 1 2 (10) 24/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Prima, aber was ist jetzt α und warum steht nur x und nicht auch y in der Gleichung? Zur bestimmung des α schreiben wir die Grundwassergleichung in eine Diffusionsgleichung wie folgt um. h t = K x 2 h S x 2 + K y 2 h S y 2 + Q S (11) 25/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Wir sehen, dass es eigentlich zwei α-s gibt, für jede Richtung eins. α x = K x S α y = K y S (12) Welche Einheit hat unser Grundwasser-α? 26/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Der richtige Zeitschritt für unser explizites FD Verfahren ergibt sich somit zu: t min( x 2, y 2 ) 2α (13) 27/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Die numerischen und hydraulischen Parameter sind in der nachfolgenden Tabelle?? zu finden. Glücklicherweise sind die Ortdiskretisierungen und die hydraulischen Leitfähigkeiten in beide Koordinatenrichtungen gleich (isotropes Problem). 28/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

t 100m2 2 1m 2 /s = 50s (14) 29/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

30/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017

Wie stellen wir eine Zeitmessung in einem Programm an. clock_t start, end; // Definitionen... start = clock(); // Beginn Zeitmessung... end = clock(); // Ende Zeitmessung... time= (end-start)/ (double)(clocks_per_sec); // Differenz Übung USA2 Der Quelltext für diese Übung befindet sich in EXERCISES\USA2. 31/31 Prof. Dr.-Ing. habil. Olaf Kolditz Modellierung Hydrosysteme 2017