Download - PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

Transcript
Page 1: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

PDEs lösen mit Matlab

Matlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf

Viereck-Gittern.

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1

−0.2

0

0.2

0.4

0.6

0.8

1

1.2

Uwe Prüfert

29. Mai 2013

Page 2: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

2

Page 3: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains
Page 4: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

Inhaltsverzeichnis

1. Finite-Elemente-Methode in Matlab 31.1. Exkurs: Definition des Gebietes Ω und der Randbedingungen. . . . . . . . . 51.2. Zwei einfache Beispielprogramme . . . . . . . . . . . . . . . . . . . . . . . 101.3. Die PDE Toolbox erweitern . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2. Funktionen auf einen Blick 192.1. Geometrie Definition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.2. Gitter-Generierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.3. Randbedingungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.4. Matrix assembling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.5. Grafische Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.6. Helferfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3. Objektorientierter Ansatz 243.1. Konzept: Abstraktion und Vererbung . . . . . . . . . . . . . . . . . . . . . . 243.2. Klasse gridd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.3. Die Klasse grid2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4. FEM in 3D 314.1. 3D-Gitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314.2. Assemblierung der Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.2.1. Mathematischer Ansatz . . . . . . . . . . . . . . . . . . . . . . . . . 324.2.1.1. Aufgabe im Gebiet Ω . . . . . . . . . . . . . . . . . . . . 324.2.1.2. Randbedingungen . . . . . . . . . . . . . . . . . . . . . . 36

4.2.2. Lineare finite Elemente über Tetraeder . . . . . . . . . . . . . . . . . 374.2.2.1. Basisintegrale und Linear-/Quadratformen . . . . . . . . . 374.2.2.2. Die die lokalen Matrizen Si . . . . . . . . . . . . . . . . . 39

4.2.3. Bilinearer Ansatz über Prismenelemente . . . . . . . . . . . . . . . . 404.2.3.1. Basisintegrale und Linear- /Quadratformen . . . . . . . . . 404.2.3.2. Die lokalen Matrizen Si . . . . . . . . . . . . . . . . . . . 454.2.3.3. Randintegrale . . . . . . . . . . . . . . . . . . . . . . . . 504.2.3.4. Implementierung . . . . . . . . . . . . . . . . . . . . . . . 50

A. Beispielprogramme 54A.1. Klassischer Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

A.1.1. Elliptische PDE mit Dirichlet-Randbedingungen . . . . . . . . . . . 54

4

Page 5: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

Inhaltsverzeichnis

A.1.2. Semilineare parabolische PDE mit Neumann-Randbedingungen . . . 55A.1.3. PDE mit Quelle am Rand . . . . . . . . . . . . . . . . . . . . . . . . 55A.1.4. Der Löser parabolic . . . . . . . . . . . . . . . . . . . . . . . . . 56A.1.5. Die Lösung zeitabhängiger Probleme mit den odexxx-Lösern . . . . 58A.1.6. Lösung stationärer Probleme mittels Zeitintegration . . . . . . . . . . 60A.1.7. 1D PDEtool und die Klasse ocp . . . . . . . . . . . . . . . . . . . . 61A.1.8. Kompatibilität zwischen MATLAB’s PDE Toolbox und den 1D Funk-

tionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62A.1.9. Nichtlineares Konvektions-Diffusions-Problem: Die Burgers-Gleichung 64A.1.10. Konvektions-Diffusions-Problem auf Q-Gitter . . . . . . . . . . . . . 66A.1.11. Eine Stoffransportsimulation . . . . . . . . . . . . . . . . . . . . . . 66

A.2. Objektorientierter Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70A.2.1. Konvektions-Diffusionsgleichung in 1D . . . . . . . . . . . . . . . . 70A.2.2. Burgers’s Gleichung . . . . . . . . . . . . . . . . . . . . . . . . . . 70A.2.3. Konvektions-Diffusionsgleichung in 2D . . . . . . . . . . . . . . . . 71A.2.4. Konvektions-Diffusionsgleichung mit nichtlinearer Quelle . . . . . . 72A.2.5. Diffusionsproblem in 3D . . . . . . . . . . . . . . . . . . . . . . . . 76

1

Page 6: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

Inhaltsverzeichnis

2

Page 7: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1

Kapitel 1.

Finite-Elemente-Methode in

Matlab

Wir werden im folgenden Abschnitt einleitend auf die zugrunde liegende Finite-Elemente-Methode eingehen.

Sei Ω⊂ R2, offen und Γ sei der Rand von Ω. Wir betrachten das elliptische PDE Problem

−∇(c∇u)+au = f in Ω

~n(c∇u)+qu = g auf Γ, (1.1)

wobei c eine positiv-definite Matrix-Funktion Ω→ R ist. Durch Multiplikation mit einer ge-eigneten Testfunktion v ∈ H1(Ω) und nach partieller Integration mittels der Greenschen For-mel gelangen wir zur schwachen Formulierung der Gleichung (1.1):

ˆΩ

c(x)∇u(x)∇v(x)dx +

ˆΩ

a(x)u(x)v(x)dx −ˆ

Γ

~n(c∇u(s))v(s)ds =

ˆΩ

f (x)v(x)dx.

Jetzt können wir den Ausdruck im Randintegral auf der linken Seite durch die Randbedin-gung ersetzen, also−

´Γ~n(c∇u(s))v(s)ds =

´Γ(q(s)u(s)−g(s))v(s)ds. Damit lässt sich (1.1)

äquivalent als

ˆΩ

c(x)∇u(x)∇v(x)dx+ˆ

Ω

a(x)u(x)v(x)dx+ˆ

Γ

q(x)u(x)v(x)ds

=

ˆΩ

f (x)v(x)dx+ˆ

Γ

g(x)v(x)ds (1.2)

schreiben. Diese Gleichung gilt für alle v ∈ V . Ersetzen wir nun V durch einen endlichdi-mensionalen Unterraum Vh ⊂ V und betrachten uh = ∑uiφi, vh = ∑viφi wobei φi eine Basisdes Raumes Vh seien. Wir wählen die Ansatzfunktionen φ i nun geeignet, das heißt so, dassφi ∈H1(Ω∆), wobei Ω∆ eine endliche Überdeckung von Ω durch Dreiecke sei. Der einfachsteVertreter dieser Klasse von Funktionen sind lineare finite Elemente, die so genannten “Hüt-

3

Page 8: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

chenfunktionen.” Die Gleichung (1.2) wird nun zuˆ

Ω∆

c(x)∇∑u jφ j(x)∇∑φi(x)dx+ˆ

Ω∆

a(x)∑u jφ j(x)∑φi(x)dx

+

ˆΓ∆

q(x)∑u jφ j(x)∑φi(x)ds

=

ˆΩ∆

f (x)∑φi(x)dx+ˆ

Γ∆

g(x)∑φi(x)ds,

i, j = 1, ...,nx, wobei wir heimlich noch vorausgesetzt haben, dass sich die Koeffizienten-funktionen stückweise konstant sind, bzw. sich hinreichend genau durch stückweise konstanteFunktionen approximieren lassen. Nachdem wir die obigen Gleichung integriert haben, erhal-ten wir das lineare System

(K +M+Q)u = (F +G),

wobei nun u der Koeffizientenvektor u1, ...,unx und die Matrizen K,M und Q sowie die Vek-toren F und G als

Ki, j =

ˆΩ

c(x)∇φ j(x)∇φi(x)dx

Mi, j =

ˆΩ

a(x)φ j(x)φi(x)dx

Qi, j =

ˆΓ

q(x)φ j(x)φi(x)ds

Fi =

ˆΩ

f (x)φi(x)dx

Gi =

ˆΓ

g(x)φi(x)ds

für i, j = 1, ...,nx definiert sind, wobei nx die Anzahl der Knoten des Gitters ist. Im Prinzipfunktioniert diese Herleitung so auch für räumlich ein- und dreidimensionale Probleme.

In der obigen Herleitung der Diskretisierung geht essentiell ein, dass wir eine Aufgabe mitRobin-Randbedingungen gegeben haben. Dirichlet-Randbedingungen lassen sich nicht in die-ser Weise behandeln. Wir werden später zwei mögliche Lösungen dieses Problems diskutie-ren.

Um die Gleichung (1.1) zu lösen, bietet die Matlab PDE Toolbox eine grafische Nutzer-schnittstelle (GUI) an. Diese wird von der MATLAB Kommandozeile mit

>>pdetool

aufgerufen, vergleiche dazu auch die Dokumentation [?]. In diesem Tutorium sind wir aberan der Lösung der Aufgabe direkt in MATLAB – unter Benutzung der unter der grafischenOberfläche versteckt liegenden Funktionen – interessiert.

Ein Rahmenprogramm für die Lösung der Aufgabe (1.1) sieht in etwas so aus:

4

Page 9: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

1g = geomet ry ;2b = boundary ;3l = 1 e3 ;4c = 1 ;5a = 0 ;6f = 1 0 ;7[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 ) ;8[ p , e , t ] = r e f i n e m e s h ( g , p , e , t ) ;9[K,M, F ] = assema ( p , t , c , a , f ) ;10[Q, G, H, R] = assemb ( b , p , e ) ;11u = (K+M+Q+ l *H’*H ) \ ( F+ l *H’*R+G ) ;12p d e s u r f ( p , t , u ) ;

In Zeile 1 und 2 sollten wir die Geometrie und die Randbedingungen definieren. Dies istauf der Kommandozeile nicht so einfach, so dass wir Details dazu auf später verschieben. InZeile 3 definieren wir den so genannten “Stiff-spring coefficient” l = 103 . Diese Zahl spielteine wichtige Rolle bei der Approximation von Dirichlet Randbedingungen hu = r. Die Be-rechnung der Matrizen und Vektoren des linearen Systems wird in Zeile 8–10 vorgenommen.Die Lösung der PDE selbst wird dann in Zeile 11 durch Lösen eines linearen Gleichungs-systems erledigt. Der Vektor u enthält die Koeffizienten der Lösung bezüglich der gewähltenAnsatz-Funktionen. Das Rahmenprogramm ist unabhängig von der Dimension des Gebietesund auch vom gewählten finite Elemente Raum, es sind natürlich die Funktionen im Programmanzupassen. Im Abschnitt 1.2 werden wir die Anwendung des obigen Rahmens auf konkreteProbleme demonstrieren.

1.1. Exkurs: Denition des Gebietes Ω und der

Randbedingungen.

Die decomposed geometry Matrix

Im obigen Rahmenprogramm wurde die Geometrie des Gebietes Ω durch die Anweisung

g = geomet ry ;

definiert. Im Prinzip reicht es, wenn geometry eine Matrix – oder eine Funktion, die ei-ne Matrix als Ergebnis liefert – ist, die die Spezifikation der ”decomposed geometry Matrixerfüllt. Wir zitieren [?]:

“The Decomposed Geometry Matrix DL contains a representation of the mi-nimal regions that have been constructed by the DECSG algorithm. Each edgesegment of the minimal regions correspond to a column in DL. In each such co-lumn rows two and three contain the starting and ending x-coordinate, and rowsfour and five the corresponding y-coordinate. Rows six and seven contain left andright minimal region numbers with respect to the direction induced by the startand end points (counter clockwise direction on circle and ellipse segments). The-re are three types of possible edge segments in a minimal regions:

5

Page 10: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

1. For circle edge segments row one is 1. Rows eight and nine contain thecoordinates of the center of the circle. Row 10 contains the radius.

2. For line edge segments row one is 2.3. For ellipse edge segments row one is 4. Rows eight and nine contain the

coordinates of the center of the ellipse. Rows 10 and 11 contain the major andminor axes of the ellipse respectively. The rotational angle of the ellipse is storedin row 12.” [?]

Es lassen sich offensichtlich Gebilde definieren, die aus Kreis- und Ellipsensegmenten undLinien bestehen. Wenn man die obigen Anforderungen beherzigt, kann man alle möglichenGeometrien auch auf der MATLAB-Kommandozeile definieren.

Beispiel 1. Definiere ein Fünfeck

g = [2 2 2 2 2

0 1 1.5 0.5 -0.5

1 1.5 0.5 -0.5 0

0 0 1 1.5 1

0 1 1.5 1 0

1 1 1 1 1

0 0 0 0 0]

Beispiel 2. Ein zusammengesetztes Gebiet: Ω = (0,1)× (0,2)∪B1(1,1).

g1 = [2 2 2 1 1

0 1 0 1 2

1 0 0 2 1

0 2 2 0 1

0 2 0 1 2

1 1 1 1 1

0 0 0 0 0

0 0 0 1 1

0 0 0 1 1

0 0 0 1 1];

Für komplexere Gebiete wäre es von Vorteil, wenn man den Rand des Gebietes als parame-trisierte Kurve vorgeben könnte. Ein möglicher Zugang zu solchen Gebieten ist die Approxi-mation des Randes durch einen Polygonzug. Dafür wird die PDE Toolbox um die Funktionpolygong erweitert. Der Aufruf geschieht entweder über Paare xi,yi i = 1, ...,n, wobei n hierdie Anzahl der Ecken des Polygons ist, durch

g = polygong ( [ x1 y1 x2 y2 x3 y3 . . . xn yn ] )

oder durch zwei Vektoren, die die x- und y-Koordinaten der Kurve enthalten, also

g = polygong ( [ x1 x2 x3 . . . xn ] , [ y1 y2 y3 . . . yn ] )

6

Page 11: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

Die erste Version ist intuitiver und für die Eingabe per Hand geeignet, die zweite Formeignet sich gut für die Definition über Matlab Funktionen: Im folgenden Beispiel definierenwir die Approximation eines Kreises durch ein 80-Eck.

g = polygong ( cos ( l i n s p a c e ( 0 , 2 * pi , 8 1 ) ) , s i n ( l i n s p a c e ( 0 , 2 * pi , 8 1 ) ) )

Man beachte aber, dass nach einer Gitterverfeinerung das Objekt immer noch ein 80-Eckbleibt. Die Approximation an den Kreis verbessert sich damit nicht. Dies ist bei der Definitionder Kreisgeometrie durch die PDE Toolbox Funktion circleg anders. Wir benötigen für mitpolygong erzeugte Geometrieobjekte für jedes Polygonsegment eine Randbedingung, d.h.eine Spalte in der boundary condition matrix.

Das Format der boundary condition matrix b

Für die Beschreibung der boundary condition matrix zitieren wir das PDE Toolbox Handbuch:

“The format of each column is according to the following list:

• Row one contains the dimension N of the system.

• Row two contains the number M of Dirichlet boundary conditions.

• Row three to 3+N2−1 contain the lengths for the strings representing q. Thelengths are stored in column-wise order with respect to q.

• Row 3+N2 to 3+N2 +N−1 contain the lengths for the strings representingg.

• Row to 3+N2+N to 3+N2+N+MN−1 contain the lengths for the stringsrepresenting h. The lengths are stored in column-wise order with respect toh.

• Row 3+N2 +N +NM to 3+N2 +N +MN +M−1 contain the lengths forthe strings representing r.

The following rows contain text expressions representing the actual boundary con-dition functions. The text strings have the lengths according to above. The MAT-LAB text expressions are stored in column-wise order with respect to h q. Thereare no separation characters between the strings.” [?]

Die boundary condition matrix

b=

1 1 1 1

0 0 0 0

1 1 1 1

6 6 6 6

48 48 48 48

115 115 115 115

105 105 105 105

110 110 110 110

7

Page 12: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

40 40 40 40

115 115 115 115

41 41 41 41

repräsentiert die Neumann Randbedingungen~n · (c∇u) = sin(s), also q = 0 und g = sin(s) füreine Geometrie mit vier Randsegmenten. Wir versuchen eine Übersetzung der Kodierung:

• Erste Zeile: eindimensionales Problem, d.h eine einfache PDE, kein System von PDEs,

• Zweite Zeile: keine Dirichlet Randbedingung.

• Dritte Zeile: Die Länge des Eintrags q ist eins,

• Vierte Zeile: Länge von g ist 6. Wir haben keine Dirichlet Randbedingung und folglichgibt es auch kein leeres Feld dafür.

• Daher repräsentiert die fünfte Zeile q. Wir finden dort “48” vor. Hier ist aber das Zeichen“48” gemeint, nicht die Zahl “48”. Also müssen wir die Funktion char anwenden1

char(48)

gibt uns “0”.

• Die nächsten sechs Zeilen repräsentieren g:

char([115 105 110 40 115 41])

ergibt sin(s) .

Obwohl Dirichlet-Randbedingung sich durch Robin Randbedingung approximieren lassen,erlaubt die PDE Toolbox die Definition von Dirichlet Randbedingungen. Im linearen Systemmuss dann die Matrix H ′H und auf der rechten Seite der Vektor H ′R stehen. Diese werden alsGleichungsnebenbedingungen zur PDE betrachtet, vergleiche die Notation H ′ ∗H im Listingauf Seite 4.

Die Funktion boundarymatrix

Die vom Autor bereitgestellte Funktion boundarymatrix erzeugt eine boundary condition

matrix für zwei Randsegmente, die mittels assemb die Berechnung der Randmatrizen undVektoren ermöglicht. Die für eine allgemeine Geometrie benötigte boundary condition

matrix kann dann durch mehrmaliges Anwenden für die jeweiligen Randbedingungen be-rechnet werden, man beachte aber die unterschiedliche Dimension der Ausgabe von boundarymatrixfür verschiedene Randbedingungen, vergleiche dazu Beispiel 4 im nächsten Abschnitt.boundarymatrix erlaubt die Definition der Randbedingungen in “mathematischer Formu-

lierung”, d.h. als String. Wir schauen in die Hilfe zu boundarymatrix.

>>help boundarymatrix

1Für Freunde von OOP. Wir rufen hier den Konstruktor der Klasse char mit dem Parameter “48” auf.

8

Page 13: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

ergibt:

b = boundarymatrix([arglist])

defines a 1D boundary Matrix % usage:

same BC on both boundary:

b = boundarymatrix homogeneous Neumann BCs

b = boundarymatrix(g) Neumann BCs

b = boundarymatrix(q,g) Robin BCs

b = boundarymatrix([],[],h,r) Dirichlet BC

different BC: e.g. Dirichlet on the left bound, Robin on the right boundary

b = boundarymatrix([],[],h,r,q,g,[],[])

q,g,h,r are STRINGS like '1' 'sin(s)' etc... but NO inlines

Es gibt einige Kurzaufrufe: .

• Homogene Neumann Randbedingung~n ·∇u = 0 werden erzeugt ohne irgendwelche Ar-gumente durch

b = boundarymatrix

• Für reine Neumann Randbedingung wie~n ·∇u= sin(x), (es gilt q= 0) reicht die Angabeder rechten Seite g:

b = boundarymatrix('sin(x)')

oder äquivalent (und ausführlicher)

b = boundarymatrix('0','sin(x)')

• Robin Randbedingung wie z.B.~n ·∇u+u = sin(x) werden durch

b = boundarymatrix('1','sin(x)')

definiert. Hier sind q = 1 und g = sin(x)

• Dirichlet Randbedingung wie z.B. u = sin(x) können auf zwei Arten definiert werden:

(i) Direkt mittels

b = boundarymatrix([],[],'1','sin(x)')

oder

(ii) via Approximation durch Robin Randbedingung durch

b = boundarymatrix('1000','1000*sin(x)')

was~n ·∇u+1000u = 1000sin(x) ergibt.

Die Assemblierungsfunktion assemb liefert dann einen Satz Matrizen Q,H und Vektoren G,R,die je nach dem Typ der Randbedingung auch Nullmatrizen (“ sparse all zero”) sein können.

Man beachte, dass alle Parameter vom Typ string sein müssen. Alle anderen Formen (auchvom Typ numerical) produzieren Fehler.

9

Page 14: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

Die Funktion initmesh

Für die Erweiterung der PDE-Toolbox sind die Daten des Gitters notwendig. Wir zitieren kurzdie Hilfe zu initmesh:

The outputs P, E, and T are the mesh data.

• In the point matrix P, the first and second rows contain x- and y-coordinates of the pointsin the mesh.

• In the edge matrix E, the first and second rows contain indices of the starting andending point, the third and fourth rows contain the starting and ending parametervalues, the fifth row contains the boundary segment number, and the sixth and se-venth row contain the left- and right-hand side subdomain numbers.

• In the triangle matrix T, the first three rows contain indices to the corner points, given incounter clockwise order, and the fourth row contains the subdomain number.

1.2. Zwei einfache Beispielprogramme

Im fogenden geben wir eine kurze Einführung in die Programmierung mittels MATLAB’S

PDE Toolbox. “PDE Toolbox” steht hier für die Sammlung von Funktionen, die mit demPaket “Partial Differential Equation Toolbox for use with MATLAB” der Firma COMSOL ABgeliefert werden.

In unseren Beispielen werden wir aber auch einige zusätzliche Funktionen (polygong,boundarymatrix, xi, check_Funktion,...) benutzen, die von Autor bereitgestellt werden.Diese Funktionen sind nicht in der PDE Toolbox enthalten. Eine ausführliche Beschreibungfolgt später. Insbesonders werden wir die Funktion boundarymatrix als black-box Werkzeugbenutzen.

Beispiel 3. Löse die Aufgabe

−∆u = f in Ω

u = 0 on Γ

wobei Ω⊂ R2 als L-Gebiet Ω = (1,2)2\(32 ,2)

2 und f =

1 x ∈ (1, 3

2)2

0 otherwisedefiniert seien.

Wir teilen unser Programm in vier Teile

(i) Definiere die Geometrie und das Gitter,

(ii) Definiere die Daten f und die Randbedingungen,

(iii) Löse das Problem,

10

Page 15: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

(iv) Gebe die Lösung grafisch aus.

Wir führen diese Schritte nun in Detail aus.

(i) Das L-Gebiet ist durch das Polygon (1,1)(2,1)(2, 32)(

32 ,

32)(

32 ,2)(1,2) gegeben. Wir be-

nutzen die Funktion polygong vgl. Abschnitt (1.1) um die Matrix g zu erzeugen.

Als nächstes wird das Gitter mit initmesh. erzeugt. pdemesh gibt das Gitter dann gra-fisch aus.

g = polygong ( [ 1 1 2 1 2 1 . 5 1 . 5 1 . 5 1 . 5 2 1 2 ] ) ;[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 0 5 ) ;pdemesh ( p , e , t ) ;

g ist eine 7×6 Matrix:

>>g

g =

2.0000 2.0000 2.0000 2.0000 2.0000 2.0000

1.0000 2.0000 2.0000 1.5000 1.5000 1.0000

2.0000 2.0000 1.5000 1.5000 1.0000 1.0000

1.0000 1.0000 1.5000 1.5000 2.0000 2.0000

1.0000 1.5000 1.5000 2.0000 2.0000 1.0000

1.0000 1.0000 1.0000 1.0000 1.0000 1.0000

0 0 0 0 0 0

In Zeile 2–5 identifizieren wir die Eckpunkte des L-Gebietes, die Bedeutung der Zeilen6 und 7 ist im Augebblick noch unklar. In Abschnitt 2.1 werden wir etwas Licht ins Dun-kel bringen. Trotzdem, wenn man die Struktur der Matrix kennt, lassen sich Geometrienauch “per Hand” definieren.

(ii) Wir haben die Koeffizienten c = 1, a = 0. Wegen a = 0 ist die Massematrix M die Null-matrix. Um die Dirichlet Randbedingung zu implementieren, benutzen wir die Stiff-Spring-Technik. Wir setzen q = 103 und g = 0. Weil das L-Gebiet sechs Randsegmentehat, müssen wir die beiden Spalten der boundary conditon matrix dreimal aneinan-derfügen. Der Aufruf

b = boundarymatrix('10e3','0')

liefert die ersten beiden Spalten der boundary condition matrix. Um die Quelle fzu definieren, benutzen wir die Indikatorfunktion

χA(x) :=

1 falls A0 sonst

.

Dabei ist A ein logischer Ausdruckt. Die Funktion xi gibt eine Diagonalmatrix zurück,aus der wir für unsere Zwecke die Diagonale herausnehmen müssen. 2Falls die Koeffi-

2xi ist so auch geeignet als “Filter” zu fungieren f =

f (x) in A0 sonst

lässt sich durch g(x) = χA f (x) realisieren.

11

Page 16: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

zienten Funktionen sind, erwartet assema die Werte im Masseschwerpunkt der Dreie-cke des Gitters. Wir benutzen the Funktion pdeintrp um die notwendige InterpolationKnoten–Schwerpunkt zu berechnen.

b = b o u n d a r y m a t r i x ( ’ 1 e3 ’ , ’ 0 ’ ) ;b = [ b b b ] ;[K, ~ , F ] = assema ( p , t , 1 , 0 , p d e i n t r p ( p , t , . . .

d i a g ( x i ( p , ’ ( x < 1 . 5 ) ’ , ’&’ , ’ ( y < 1 . 5 ) ’ ) ) ) ) ;[Q, ~ , ~ , ~ ] = assemb ( b , p , e ) ;

Die Randbedingung ist durch

>>boundarymatrix('1e3','0')

b =

1 1

0 0

3 3

1 1

49 49

101 101

51 51

48 48

gegeben.

(iii) Nach dem Matrixassemblieren lösen wir einfach mit dem Matlab “\” Operator:

u = (K+Q ) \ F ;

Hier ist u die Lösung des PDE Problems. Im logischen Ausdruck y<1.5 meint y diezweite Ortsvariable des R2. Dies ist in der Syntax der PDE Toolbox festgelegt: In denAusdrücken sind x und y für die Ortsvariablen (in kartesischen Koordinaten) und s alsBogenlängenparameter erlaubt.3

(iv) Die PDE Toolbox bietet eine Reihe von Visualisierungsfunktionen:

p d e s u r f ( p , t , u )

für einen Flachengraphen,

pdemesh ( p , e , t , u )

gibt einen Netzgraphen aus,

p d e c o n t ( p , t , u )

zeichnet die Höhenlinien von u. Für den Fluß der Lösung müssen wir den Gradientenausrechnen und anschließend mittels pdeplot ausgeben.

3s läuft dabei auf jedem Randsegment von 0 nach 1.

12

Page 17: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

[ g rx gry ] = pdegrad ( p , t , u ) ;g r = [ grx ; g ry ] ;p d e p l o t ( p , e , t , ’ f l o w d a t a ’ , gr , ’ f l o w s t y l e ’ , ’ a r row ’ )

Die Funktion pdeplot ist die Funktion, auf der alle Plot-Funktionen der PDE-Seriebasieren.

Das vollständige Programm ist ein Achtzeiler:

1g = polygong ( [ 1 1 2 1 2 1 . 5 1 . 5 1 . 5 1 . 5 2 1 2 ] ) ;2[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 2 5 ) ;3b = b o u n d a r y m a t r i x ( ’ 1 e3 ’ , ’ 0 ’ ) ;4b = [ b b b ] ;5[K, ~ , F ] = assema ( p , t , 1 , 0 , p d e i n t r p ( p , t , d i a g ( x i ( p , ’ ( x < 1 . 5 ) ’ ,

’&’ , ’ ( y < 1 . 5 ) ’ ) ) ) ) ;6[Q, ~ , ~ , ~ ] = assemb ( b , p , e ) ;7y = (K+Q) \ F ;8p d e s u r f ( p , t , y ) ;

Abbildung 1.1.: Flächengraph von u. pdesurf mit zusätzlichem Gitter. Eingestellt mittels des“property editor” des Grafikfensters.

Beispiel 4. Wir lösen ein Poisson-Problem auf dem oberen Halb-(Einheits)-Kreis mit homoge-nen Robin-Randdaten auf dem Kreisbogen und einer Dirichlet-Quelle auf einem dem geradenRandstück.

−∆u = 0 in Ω

u = g on ΓD

~n · (c∇u)+u = 0 on ΓR

wobei Ω = x ∈ R2 |‖x‖ < 1,x2 > 0 und g := sin(πx), ΓD = (−1,1)×0. Wir definie-

ren die Randbedingung wieder als Robin Randbedingung mit q =

102 auf ΓD

1 sonstund g =

13

Page 18: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB102 sin(x) auf ΓD

0 sonst.

Wir definieren zuerst wieder die Geometrie mittels der polygong Funktion. Die Idee ist,den Halbkreis als Polygon zu parametrisieren und dabei den Kreisbogen durch entsprechendviele Segmente (hier N) darzustellen.

Abbildung 1.2.: Gitter des durch ein Polygon approximierten Halbkreises und hmax=0.125.

Beachte, das dies nicht äquivalent zu einer Definition bestehend aus einer Kombination vonKreissegmenten und Geraden wie im Beispiel 2 ist. Das Polygon bleibt auch nach dem Verfei-nern ein Polygon mit zum Beispiel 100 Segmenten, während bei einem aus Kreissegmentenzusammen gesetzten Geometrie-Objekt der Rand bei der Verfeinerung sich der Kreiskurveannähert

.

Wir setzen N = 100 und parametrisieren den Bogen durch (cos(s),sin(s)), s = [0,π]. DieKurve ist gegen den Uhrzeigersinn orientiert, was wichtig für die Kennung “innen”–”außen”innerhalb der Funktion polygong ist. Durch diese Definition wird schon der Halbkreis be-stimmt, da polygong die Kurve automatisch schließt. Das Gitter wird wieder durch initmesherzeugt. Wir wählen hmax gleich 0.125.

n = 100 ;g = polygong ( cos ( l i n s p a c e ( 0 , pi , n ) ) , s i n ( l i n s p a c e ( 0 , pi , n ) ) ) ;[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 2 5 ) ;

Die boundary condition matrix besitzt hier eine relativ komplizierte Struktur: Wir ha-ben eine Dirichlet Randbedingung auf dem Basissegment des Halbkreises. Auf den restlichenn−1 Segmenten gilt die Robin-Randbedingung. Wir haben dort q = 1, g = 0. Damit rufen wirboundarymatrix auf:

bR = boundarymatrix('1','0');

ergibt eine 6×2 Matrix. Als nächstes definieren wir die Dirichlet Randbedingung durch

bD = boundarymatrix('1e2','1e2*sin(pi*s)');

14

Page 19: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

wir erhalten eine 20×2 Matrix. Für die Matrix b benötigen wir 99 mal eine Spalte der MatrixbD und eine Spalte von bN. Da diese aber unterschiedlicher Dimension sind, müssen wir diesedurch Indexierung setzen. Im folgenden Listing wird diese Prozedur beschrieben.

bR = b o u n d a r y m a t r i x ( ’ 1 ’ , ’ 0 ’ ) ;bD = b o u n d a r y m a t r i x ( ’ 1 e2 ’ , ’ 1 e2 * s i n ( p i * s ) ’ ) ;b ( 1 : l e n g t h ( bR ) , 1 : n−1) = bR ( : , 1 ) * ones ( 1 , n−1);b ( 1 : l e n g t h ( bD ) , n ) = bD ( : , 1 ) ;

Die Assemblierung des linearen Systems ist wieder Standard. Da wir im Gebiet keine Quellehaben, fallen F und M (wegen f = 0 und a= 0) weg. Dafür haben wir ein nichtverschwindendesG. Da wir die Dirichlet Randbedingung durch Robin-Randbedingung approximiert haben, sindauch H und R identisch null. Durch die Tilde in der Argumentliste werden die entsprechendenVariablen nicht in den Speicher geladen.4

[K, ~ , ~ ] = assema ( p , t , 1 , 0 , 0 ) ;[Q, G, ~ , ~ ] = assemb ( b , p , e ) ;u = (K+Q ) \ G;

In vielen Fällen ist neben der Lösung auch der Fluß dieser von Interesse: Dazu müssen wirden (Anti-)Gradienten berechenen. Das Resultat ist in Abbildung 1.3 zu sehen.

[ g rx gry ] = pdegrad ( p , t , y ) ;g r = −[ g rx ; g ry ] ;p d e p l o t ( p , e , t , ’ f l o w d a t a ’ , gr , ’ f l o w s t y l e ’ , ’ a r row ’ )

Das komplette Programm besteht aus 14 Zeilen:

1n = 100 ;2g = polygong ( cos ( l i n s p a c e ( 0 , pi , n ) ) , s i n ( l i n s p a c e ( 0 , pi , n ) ) ) ;3[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 2 5 ) ;4pdemesh ( p , e , t ) ; pause ;5bR = b o u n d a r y m a t r i x ( ’ 1 ’ , ’ 0 ’ ) ;6bD = b o u n d a r y m a t r i x ( ’ 1 e2 ’ , ’ 1 e2 * s i n ( p i * s ) ’ ) ;7b ( 1 : l e n g t h ( bR ) , 1 : n−1) = bR ( : , 1 ) * ones ( 1 , n−1) ;8b ( 1 : l e n g t h ( bD ) , n ) = bD ( : , 1 ) ;9[K, ~ , ~ ] = assema ( p , t , 1 , 0 , 0 ) ;10[Q, G, ~ , ~ ] = assemb ( b , p , e ) ;11y = (K+Q) \G;12[ grx gry ] = pdegrad ( p , t , y ) ;13g r = −[ g rx ; g ry ] ;14p d e p l o t ( p , e , t , ’ f l o w d a t a ’ , gr , ’ f l o w s t y l e ’ , ’ a r row ’ )

4Wir sparen aber kaum Speicherplatz, da M,F,H und R sowieso “sparse zero”-Matrizen sind.

15

Page 20: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

Abbildung 1.3.: Fluß mit pdeplot und grid on. erzeugt.

1.3. Die PDE Toolbox erweitern

Bis hier her haben wir die Nutzerschnittstelle der PDE Toolbox etwas verbessert. Wir werdennun die PDE Toolbox in ihrer Funktionalität erweitern. Dies wird in vier Richtungen gesche-hen:

(i) Konvektions-Terme,

(ii) Finite Elemente für eindimensionale Ortsgebiete,

(iii) Finite Elemente höherer Ordnung,

(iv) Finite Elemente auf Rechteckgitter.

Mit der PDE Toolbox lassen sich keine PDEs der Form

−∇(c∇u)+ k ·∇u+au = f in Ω

~n(c∇u)+qu = g auf Γ

lösen. Die Erweiterung auf solche Konvektions-Diffusions-Gleichungen ist aber relativ leichtzu realisieren. Wir müssen lediglich eine Assemblierung für das Integral

ˆΩ

k ·∇uvdx

implementieren.5 Dies ist in der Funktionen convection realisiert. Der Programmkern findetsich zum Beispiel in [?] und benutzt wesendlich die PDE Toolbox Funktion pdetrg. Der Ko-effizientenvektor b kann aber variabler definiert werden, so dass die interne Berechnung desKoeffizienten (feldes) b in der hier besprochenen Version etwas komplexer ist. Mit der Funkti-on convection2Dhigher, convectionq und convection1d haben wir weitere Funktionen,die die Punkte (ii), (iii) und (iv) mit Punkt (i) kombinieren. Die Berechnung der Matrizen ist

5Wobei wichtige Fragen wie die nach der (eindeutigen) Lösbarkeit solcher Probleme und der numerischenStabilität der Diskretisierung erstmal nicht geklärt sind.

16

Page 21: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

dort völlig anders als in convection implementiert. Wir gehen hierbei wie in [?] vor, wo-bei die Berechnung der Matrizen auf Rechteckgitter mit einem kleinen Trick auf den Fall derBerechnung der Matrizen auf Dreieicksgitter transformiert wurde.

Die Erweiterung der PDE Toolbox auf räumlich eindimensionale Probleme ist ebenfallseine leichte Anwendung des Grundkurses “Numerische Mathematik”. Wichtig ist nur, dass dieSchnittstellen der Funktionen zur Syntax der PDE Toolbox passen. Es werden “1d”-Versionender Kernfunktionen der PDE Toolbox zur Verfügung gestellt:initmesh1d, refinemesh1d, assema1d und assemb1d.Da die Geometrie von eindimensionalen PDE Problemen immer ein reelles Intervall I =

(x1,x2) ist, ist g = [x1 x2] als Geometriedefinition ausreichend. Die Funktionen assema1d

ist aber in der Lage, die Matrizen K und M sowie den Vektor F bezüglich der Basen von Finiten-Elementen höherer Ordnung zu berechnen. Dazu wird eine globale Variable element_type

benötigt, die die Auswahl der Basis steuert. Es sind Lagrange-Elemente der Ordnung 1–3 undein Hermite-Element dritter Ordnung implementiert. Der Code ist wieder an die Darstellungin [?] angelehnt.

Die Erweiterung auf Finite-Elemente höherer Ordnung für die Ortsdimension 2 ist etwaskomplexer. Für Lagrange-Elemente zweiter Ordnung benötigt man beispielsweise Stützstel-len auf den Kanten der Dreiecke sowie zusätzliche Gitterinformationen. Diese werden durchdie Hilfsfunktion meshextend2Dhigher berechnet. Die Funktionen, die die MATLAB PDE-Toolbox um Finite Elemente höherer Ordnung in 2D erweitern, werden mit xxx2Dhigher be-nannt. Im einzelnen sind dies assema2Dhigher, assemb2Dhigher, convection2Dhigherund meshextend2Dhigher.

Die Erweiterung der PDE Toolbox um Gitter, deren Elemente Vierecke sind, macht prak-tisch eine Neuimplementierung der gesamten Funktionalität der PDE-Toolbox notwendig. Wirbenötigen einen Gittergenerator, neue Assemblierungsfunktionen und ebenso neue Grafik- undHilfsfunktionen. Diese Funktionen sind mit xxxqxxx benannt. Es wurden zwei Gittergenerato-ren implementiert. Die Funktion initqmesh ist nur für die Diskretisierung von Rechteckgeo-metrien geeignet. Dies ist aber nützlich, wenn man Raum-Zeit-Gitter für parabolische Proble-me benötigt oder eben nur auf einem Rechteck rechnen will. Für die Diskretisierung beliebigerGebiete ist die Funktion initmeshqelgen vorgesehen. Dies ist ein elliptischer Gittergenera-tor. Der Algorithmus basiert auf einer Transformation des Gebietes Ω auf das Einheitquadrat.Daraus ergeben sich einige Einschränkungen: So gibt es Probleme mit unzulässigen/entartetenViereckselementen bei nichtkonvexen Gebieten.

1

2

3

4

1

2

3

4

Abbildung 1.4.: Entartetes Viereck-Element. Das Problem tritt nach einer uniformen Verfei-nerung auf: Drei linear abhängige Knoten.

17

Page 22: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

1. Finite-Elemente-Methode in MATLAB

Die Funktion refineqmesh verfeinert Viereckgitter uniform, wobei die Mittelpunkte ge-genüberliegender Kanten verbunden werden.

1

2

3

4

2

3

4

68

9

7

1

5

Abbildung 1.5.: Viereck mit Z-förmiger Nummerierung der Knoten. Rechts nachVerfeinerung.

Die Vierecksgitter werden analog zur p-e-t Kodierung für Dreiecksgitter aus der PDE-Toolbox in den Feldern p,e,q gespeichert.

Der Kern der Implementierung der Funktion initqmeshelgen stammt von Alexander Ka-bat vel Job, Student am Institut für Strömungsmechanik und Technische Akustik der Techni-schen Universität Berlin.

Die Assemblierung der Matrizen und Vektoren ist im Prinzip Standard. Zur Zeit sind nurLagrange-Elemente erster Ordnung – auf Viereckgittern sind dies bilineare (Hütchen-) Funk-tionen, oder auch unvollständige quadratische Polynome auf R2 – implementiert. Dies wird inassemqa und convectionq realisiert. Da auf den Randkanten von Vierecksgittern die (bili-nearen) Basisfunktionen ebenfalls linear sind, können die assembxxx Funktionen benutzt wer-den. Allerdings sind diese von der PDE Toolbox abhängig. Deshalb wurde assemb2Dhigherum die Abhängigkeiten (und die “higher” Funktionalität) erleichtert und zu assemqb neube-nannt.

Die grafische Ausgabe in pdeqmesh und pdeqsurf stützt sich nur auf Standard-MATLAB

Funktionen. Eine Hilfsfunktion ist pdeqintrp, welche Daten von den Knoten auf die Vier-ecksmittelpunkte durch simple Mittelung projeziert.

18

Page 23: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

2

Kapitel 2.

Funktionen auf einen Blick

2.1. Geometrie Denition.

Wir empfehlen die Funktion polygong. Es ist etwas schwierig, eine geometry definiton

matrix “per Hand” korrekt einzugeben. Für komplexe Geometrien kann auch das GUI pdetoolbenutzt werden. Die Definition wird im “draw modus” vorgenommen, anschließend müssendie Matrizen b und g exportiert1 werden. Eine gute Idee ist es, diese Matrizen zu speichern undals Ausgabe zweier Funktionen zu implementieren, siehe dazu z.B. die Funktion unitsquare

im Ordner friends.

2.2. Gitter-Generierung.

initmesh(g[,'hmax',hmax]) generiert Dreieicksgitter für zweidimensionale Ortsgebieteund Intervallteilungen für eindimensionale Ortsgebiete. g ist eine geometry desription

matrix, hmax eine reelle Zahl oder inf. initqmesh und initqmeshelgen sind die entspre-chenden Funktionen für Viereckgitter. x,y sind reelle Vektoren, left/right und upper/lowersind Matrizen, die die Parametrisierung der jeweiligen Randstücke enthalten, die von jeweilsgleicher Länge sein müssen. x(s)/y(s) sind symbolisch (als String) gegebene Parametrisie-rungen der Randkurve des Gebietes Ω, sa/se sind Anfangs und Endwert der Parametrisierung.

Syntax:

[p,e,t] = initmesh(g)

[p,e,t] = initmesh(g,'hmax',hmax)

[p,e,t] = refinemesh(g,p,e,t)

[p,e,q] = initqmesh(x,y)

[p,e,q] = initqmeshelgen(left,right,upper,lower)

[p,e,q] = initqmeshelgen(x(s),y(s),[sa,se])

[p,e,q] = refineqmesh(p,e,t)

1Wobei dann schon die boundary conditon matrix mit erstellt ist.

19

Page 24: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

2. Funktionen auf einen Blick

Beispiele

[p,e,t] = initmesh(0,1)

[p,e,t] = initmesh([0,1,pi])

[p,e,t] = initmesh([0,1,pi],'hmax',0.1)

[p,e,t] = initmesh(polygong([0 1 1 0],[0 0 1 1]))

[p,e,t] = refinemesh([0,1,pi],p,e,t)

[p,e,t] = initqmesh(linspace(0,1,12),linspace(0,4,48));

B1 = [-cos(linspace(0,pi/3,12));sin(linspace(0,pi/3,12))];

B2 = [-cos(linspace(pi,2*pi/3,12));sin(linspace(pi,2*pi/3,12))];

B3 = [-cos(linspace(pi/3,2*pi/3,10));sin(linspace(pi/3,2*pi/3,10))];

B4 = [linspace(-1,1,10);zeros(1,10)];

[p,e,q] = initqmeshelgen(B1,B2,B3,B4);

[p,e,q] = initqmeshelgen('sin(s)','cos(s)',2*pi*linspace(0,1,10));

Point-Edges-Triangles: Wie Gitter in der PDE-Toolbox gespeichert werden Wirzitieren das PDE-Toolbox Handbuch:

The outputs P, E, and T are the mesh data.In the point matrix P, the first and second rows contain x- and y-coordinates of

the points in the mesh.In the edge matrix E, the first and second rows contain indices of the starting

and ending point, the third and fourth rows contain the starting and endingparameter values, the fifth row contains the boundary segment number, and thesixth and seventh row contain the left- and right-hand side subdomain numbers.

In the triangle matrix T, the first three rows contain indices to the corner points,given in counter clockwise order, and the fourth row contains the subdomain num-ber.

Dies gilt natürlich auch angepasst für die Dimensionen eins und drei (und auch Dimension n)

P Nichts wesentliches ändert sich. Die Anzahl der Zeilen ist

eins für 1D,

E Die Zeilen 1...N sind die Indizes der Ränder der Randelemente. In 1D ergibt daskeinen Sinn, in 2D sind das die äuKanten

2.3. Randbedingungen

Wir empfehlen die Definition der boundary condition matrixmittels der Funktion boundarymatrixoder mit Hilfe des GUI pdetool und anschließendem Export der Matrizen b und g, aber nichtdie direkte Definition mittels einer Variable.

20

Page 25: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

2. Funktionen auf einen Blick

Syntax

b = boundarymatrix()

b = boundarymatrix(g)

b = boundarymatrix(q,g)

b = boundarymatrix([],[],h,r)

b = boundarymatrix(first_segment,second_segment,[nt-h_segment,...])

Beispiele

b = boundarymatrix()

b = boundarymatrix('1')

b = boundarymatrix('1','sin(s)')

b = boundarymatrix([],[],'1','0')

b = boundarymatrix('[],[],'cos(s)','sin(s)')

b = boundarymatrix('1','0',[],[],[],[],'1','0')

2.4. Matrix assembling.

Die Koeffizienten können in einer reichen Auswahl von Formaten gegeben werden: doubles,strings, funktion_handles.

Wir bevorzugen die Definition als Strings wie zum Beispiel '1e3', 'sin(x)+cos(y)',usw. Die Funktionen assemxxx und convectionxxx erledigen die korrekte Berechnung au-tomatisch.

Syntax

[K,M,F] = assema(p,t,c,a,f)

[K,M,F] = assema(p,t,c,a,f)

[Q,G,R,H] = assemb(b,p,e)

C = convection(p,t,k)

[Q,G,R,H] = assemb2Dhigher(b,p,e)

[Q,G,R,H] = assemb2Dhigher(b,p,e,t,g)

C = convection2Dhigher(p,e,t,k)

C = convection2Dhigher(p,e,t,k,g)

[K,M,F] = assemqa(p,t,c,a,f)

[Q,G,R,H] = assemqb(g,p,e)

C = convectionq(p,t,k)

Beispiele

21

Page 26: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

2. Funktionen auf einen Blick

[K,~,F] = assema(p,t,'1','0','10')

[K,M,F] = assema(p,t,1,1,'sin(x+y)')

C = convection(p,t,[1 1])

C = convection(p,t,'0' 'sin(x))

C = convection2Dhigher(p,e,t,'0' 'sin(x))

C = convectionq(p,e,t,k,[1 1])

[K,M,F] = assemqa(p,t,[1 'exp(x+y)'],0,10)

C = convectionq(p,t,'1' 'sin(x)')

2.5. Grasche Ausgabe

pdemesh(p,e,t)

pdeqmesh(p,e,t)

pdemesh(p,e,t,u)

pdeqmesh(p,e,t,u)

pdesurf(p,t,y)

pdeqsurf(p,t,y)

Beispiele dazu im nächsten Kapitel.

2.6. Helferfunktionen

Das Überprüfen der Integrität von Daten ist eine wichtige Aufgabe. Gerade in “lax” definiertenSprachen wie MATLAB treten häufig Laufzeitfehler auf, die durch mangelnde Integrität derDaten verursacht wird. Der Dimensionsfehler in

A = ones(3,2);

b = [1 pi 4];

A = A*b;

tritt erst zur Laufzeit zu Tage. Dieses Problem tritt auch auf, wenn man mit den MATLAB

ODE-Löser arbeitet: In der Lösung [time,u] = ode15s(...) werden die Zeitschichten alsZeilenvektoren aufeinander gelegt. Bei der direkten Implementierung

u(:,k) = (Md+tau(k-1)*K)\...

(Md*u(:,k-1)-tau(k-1)*Md*u(:,k-1).^3);

ist es natürlich, u als Spaltenvektor zu interpretieren. Um den Programmierer etwas zu entlas-ten, wurde die Funktion check_function implementiert. Sie kombiniert die Funktionalitätvon eval und feval mit einer Überprüfung der Daten. So ist garantiert, dass nach dem Auf-ruf

22

Page 27: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

2. Funktionen auf einen Blick

u = check_function(fun_u,x,t)

der (Spalten-)Vektor u die zu den Argumenten passende Dimension hat.

Syntax

[y] = check_function(f,varargin)

Beispiele

y = check_function('sin(x)',pi/2)

x= linspace(0,1,10);

y = check_function('sin(x)',x);

y = check_function(@eta_6,0.3,0.5)

f = inline('x*y')

y = check_function(f,0.3,0.5)

Eine Indikator-Funktion χA(x) :=

1 falls A0 sonst

ist ebenfalls ein nützlicher Helfer.

Syntax

X = xi(p,expression[,'and'|'or',expression])

X ist eine Diagonalmatrix.

Beispiel

x= linspace(0,1,10);

X = xi(x,'x<0.3','and','x>0.1')

[p,e,t] = initmesh(g);

X = xi(p,'(x>0.3)&(x<.4)&(y>0.45)&(y<.55)')*ones(size(p(1,:)))';

f = X*check_function(@eta_6,p)

23

Page 28: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

3

Kapitel 3.

Objektorientierter Ansatz

Die bis hierher vorgestellte Programmierung ist im Wesentlichen eine Erweiterung der PDEToolbox in herkömlicher matlab-typischer Programmierung. Ein auch für Matlab in letzterZeit modern gewordener Ansatz ist die objektorientierte Programmierung.

Nun heißt das nicht, dass wir die Funktionen einfach nur zu Methoden von Klassen um-schreiben – tatsächlich hätten wir damit nicht viel gewonnen, sondern wir werden konzeptio-nell unsere Finite Elemente Tool-Box umorganisieren.

3.1. Konzept: Abstraktion und Vererbung

Wenn man sich den Code der Matrixassemblierung (assema2Dhigher, etc.) anschaut, so istdort im wesentlichen für alle Typen von finiten Elementen und Raumdimensionen der gleicheAlgorithmus implementiert.

Beispiel 5. Berechnung der KonvektionsmatrixWir betrachten das Einheitsdreieck und berechnen vorab die lokalen Matrizen B1 und B2,

anschließend werten wir das Vektorfeld~b an den Schwerpunkten der Dreiecke aus und durch-laufen dann in einer Schleife alle Dreiecke wobei wir die lokalen Koordinaten bestimmensowie die Anteile in x- und y- Richtung des Feldes~b und anschließend die Matrix B in denrichtigen Indizes auf datieren.1

Wenn wir den Code für die linearen mit dem der quadratischen Elemente vergleichen, sofallt auf, dass sich dieser nur in der Form der Matrizen und dem Indexvektor unterscheidet.

Die Idee ist nun, dieses formale Vorgehen in einer abstrakten Klasse (oder einem Klassen-system) zu implementieren und dann davon die konkreten finiten Elemente abzuleiten.

Hier taucht ein kleines Problem auf: So formal der Algorithmus in Bsp. 5 aus ist, im Detailist der Unterschied zwischen 1D und 2D finiten Elementen gravierend. In 1D haben wir esimmer mit jeweils einer Elementmatrix zu tun, in 2D mit dreien im Falle der Steifigkeitsma-trix, mit zwei Elementarmatrizen im Falle der Konvektionsmatrix und mit einer im Falle derMassenmatrix.

Trotzdem werden wir das abstrakt formulieren und erhalten in etwa diese Klassenhierarchie:1Wir werden dass aber nicht so naiv programmieren!

24

Page 29: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

3. Objektorientierter Ansatz

Die Klasse finiteElements ist abstrakt und hat als Eigenschaften allgemeine Fehlerobjektedefiniert.

In finiteElements werde aber schon die Methoden assema und convection implementiert.Diese Methoden benutzen abstrakte Methoden, die erst in abgeleiteten Klassen implementiertwerden.

Von finiteElements sind die Klassen finiteElements1D, finiteElements2D und finiteEle-ments3D (nicht im Bild gezeigt) abgeleitet. Dort werden die Methoden implementiert, dievon der Dimension des Raumes abhängen. Beispiele sind createMatrixEntries für die As-semblierung der Matrizen, die z.B. für die Steifigkeitsmatrix eine bis sechs Elementmatrizensummieren muss.

Interessant mag die Tatsache sein, dass finiteElements1D keine Eigenschaften definiert. DieKlasse dient tatsächlich nur zum implementieren von vormals abstrakten Methoden und Me-thoden für abgeleitete Klassen wie lagrange11D.

Der Trick mit den unbestimmten Eigenschaften. Hier wird man sich fragen, warumdie Eigenschaften S, M, C usw., die in lagrange11D definiert werden, nicht schon vorher alsabstrakte Eigenschaften Aufgetaucht sind?

(i) Es ist ja nicht klar, wie viele (und welche) dieser Matrizen(?) wir benötigen.

(ii) Sogar die Gestalt von S, M, C, usw. ist nicht klar.

Für lineare Ansatzfunktionen (Lagrange-Elemente erster Ordnung in 1D, daher lagrange11D)ist z.B. S eine konstante 2× 2-Matrix, die die Koeffizienten der Ansatzfunktionen über demEinheitsintervall darstellen. Die Koeffizientenfunktion c kann dann als stückweise konstant(über jedem Teilintervall) angenommen werden (Treppenfunktion). Für diese kann dann unterErhalt der Fehlerordnung einfach integriert werden, indem der lokal konstante Wert von c vordas Integral gezogen wird.

Für Elemente höherer Ordnung benötigt man aber eine “exaktere” Integration. Dann wirdS keine Eigenschaft der Klasse mehr sein, sondern eine (parameterlose) Methode, die diekorrekten Werte für alle Intervalle(Dreiecken, Tetraeder, usw.) als Matrix liefert. Der folgendeCode bleibt gültig, wenn nur die Dimensionen von S, J1 usw. stimmen.

[ cva l , ava l , f v a l ] = o b j . a C o e f f i c i e n t s ( g r idObj , cf , af , f f ) ;[ J , J1 ] = o b j . makeJ ( g r idObj , c v a l ) ;K = r e s h a p e ( o b j . S* J1 , 1 , n t * s i z e M a t r i x ) ;

Für lagrange11D ist

o b j . S* J1

ein dyadisches Produkt, das Ergebnis eine Matrix der Dimension 4× nelments. Für höhereElemente ist S dann die aus der lokalen Integration stammende Matrix, J1 einfach ein Eins-vector und die Werte für cval, aval, usw. werden in S eingearbeitet. In finiteElements1D istmakeJ abstrakt und damit in den Subklassen zu überschreiben. S benötigt hier Informationenzum Gitter. Das kann erreicht werden, wenn die Klasse dann ein von gridd abgeleitetes Objektals Eigenschaft erhält.

25

Page 30: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

3. Objektorientierter Ansatz

3.2. Klasse gridd2

Sinnvollerweise setzen wir das Konzept der Objektorientierung auch für die Gitter- und Geo-metriedaten durch. Die Klasse ist von handle abgeleitet, weswegen sie eine copy-Methodebenötigt.

Wir schlagen die Funktionalität “Koeffizeintenauswerten” der Klasse gridd zu, bzw. dendavon abgeleiteten Klassen. Außerdem sind die Randbedingungen Eigenschaften des Gitters.

3.3. Die Klasse grid2D

Die Eigenschaften sind die Daten für Gitterpunkte, Eckknotenkoordinaten e und Dreieckskno-tenkoordinaten t sowie die boundary-condition-matrix b und die geometry matrix g, alles wiein Kapitel 1.1 beschrieben.

Wir haben die Methoden

grid2D Konstruktor

copy Erstellt eine harte Kopie des Objekts

delete Löscht das Objekt

isvalid Prüft, ob das Objekt gültig ist

disp disp-Methode

plot plot-Methode

triangleDiameters Gibt den Durchmesser der Dreiecke zurück.

tripts2midpts Gibt die Mittelpunkte jeden Dreiecks zurück.

isBoundary Gibt einen Bool-Vektor zurück, der “true” enthält, wenn das Dreieck ein Rand-stück enthält.

refinemesh Uniforme Verfeinerung des Gitters

polygong Statische Methode zur Erstellung von polygon-berandeten Geometrien

unitsquare Statische Methode zur Erstellung einer Rechteckgeometrie

squareMidpt Statische Methode zur Erstellung einer Rechteckgeometrie, wobei der Mittel-punkt des Rechtecks als Parameter gegeben ist.

2Wir müssen die Klassen von der Eigenschaft grid der Figureklasse unterscheiden, deshalb die seltsame Schrei-bung.

26

Page 31: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

3. Objektorientierter Ansatz

inverseSquareMidpt Statische Methode zur Erstellung einer Rechteckgeometrie, wobei derRand nach “innen” orientiert ist. Diese Methode kann nur sinnvoll in Kombinationmit polygong, unitsquare, squareMidpt genutzt werden, um in Gebiete “Löcher”zu schneiden.

unitcircle Statische Methode zur Erstellung eines Einheitskreisgebietes.

Das folgende Skript demonstriert die Benutzung von grid2D

c l e a r a l lg r = gr id2D ( ) ;g r . u n i t s q u a r e ( ) ;

g r . r e f i n e m e s h ( )% gr . r e f i n e m e s h ( )f i g u r e ( 1 )g r . p l o t ;ho ld onmpts = gr . m idp t s ;p l o t ( mpts ( 1 , : ) , mpts ( 2 , : ) , ’ k+ ’ )

g r . u n i t c i r c l e ( )f i g u r e ( 2 )g r . p l o t ; ho ld onmpts = gr . m idp t s ;p l o t ( mpts ( 1 , : ) , mpts ( 2 , : ) , ’ k+ ’ )

g r . t r i a n g l e ( 0 . 3 )f i g u r e ( 3 )g r . p l o t ;ho ld onmpts = gr . m idp t s ;p l o t ( mpts ( 1 , : ) , mpts ( 2 , : ) , ’ k+ ’ )

Das folgende Skript initialisiert eine “2D Tragfläche”.

s = l i n s p a c e ( 0 , 1 , 2 5 ) ;g f = gr . po lygong (−0.8* cos (2* p i * s ) , . . .

0 .2*(1−0 .75* s ) . ^ 2 . * s i n (2* p i * s ) ) ;g0 = gr . po lygong ([−1 2 2 −1] ,[− .5 −.5 . 5 . 5 ] ) ;g = [ g0 , g f ] ;g r . i n i t m e s h ( g , 0 . 0 5 ) ;g r . p l o t ;

sowie der Plot in Fig. 3.3

27

Page 32: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

3. Objektorientierter Ansatz

finiteElements

+wrongNumberInputs: MException

+wrongNumberOutputs: MException

+wrongFormat: MException

+wrongClass: MException

+wrongSize: MException

+idx: double

+

+assema(gr:gridd,c,a,f): double

+convection(gr:grid,b): double

+assemb(gr:gridd)

+createMatrixEntries(gr:gridd,c,a,f): double

+createConvectionEntries(gr:gridd,b): double

+makeIndex(idx:double,nElem:double): double

finiteElements1D

+assemb(bd:double,gr:gridd): double

+createMatrixEntries(gr:gridd,c,a,f): double

+createConvectionEntries(gr:gridd,b:double): double

+aCoefficients(gr:gridd,c,a,f): double

+convCoefficients(gr:gridd,b:double): double

+makeJ(gr:gridd,c:double): double

handle

lagrange11D

+S: double

+M: double

+C: double

+F: double

+idx: double = 1:2

+assembleStep: double = 1

+makeIndex(idx:double,np:double): double

+makeJ(gr:gridd,c:double): double

gridd

Abbildung 3.1.: Klassenhierarchie Finite Elemente, 1D Zweig.

28

Page 33: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

3. Objektorientierter Ansatz

gridd

+b: double

-g: double

-p: doubel

-e: double

-t: double

+wrongNumberInputs: MException

+wrongFormat: MException

+wrongClass: MException

+wrongNumberPoints: MException

+privateProp: MException

+noIndexing: MException

+disp()

+nElements(): double

+nPoints(): double

+nEdges(): double

+nBoundarySegments(): double

+acoefficients(): double

+bcoefficients(): double

+ccoefficients(): double

+makeBoundaryMatrix(): gridd

+robinBC(): double

+dirichletBC(): double

+boundaryCondition(): double

handle

grid1d

+grid1d(): grid1d

+diam(): double

+isBoundary(): logical

+refinemesh(): grid1d

+midpts(): double

+plot()

+copy(): grid1d

+initmesh(): grid1d

+acoefficients(): double

+convCoefficients(): double

-neighbours(): double

Abbildung 3.2.: UML Klasse gridd, grid1d

29

Page 34: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

3. Objektorientierter Ansatz

0 0.2 0.4 0.6 0.8 10

0.2

0.4

0.6

0.8

1

Abbildung 3.3.: Gitter produziert mit dem obigen Skript.

30

Page 35: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4

Kapitel 4.

FEM in 3D

Wir beschreiben im folgenden die Implementierung der finiten Elemente Methode für dreiOrtsdimensionen. Wir gehen vom objektorientierten Programmansatz aus, die Codes lassensich aber natürlich auch “klassisch” implementieren.

4.1. 3D-Gitter

Die Spezifikation für die Klassen, die 3D Gitter repräsentieren, sind analog zum 2D Fall. Wirbenötigen Informationen über

(i) die Knoten des Gitters

(ii) welche Knoten zu den Elementen gehören. Darin verbirgt sich ebenfalls der Typ desElements.

(iii) welche Knoten zu Randelementen gehören. Diese können dann wieder als passendeElemente der Dimension zwei interpretiert werden.

(iv) Information über die Orientierung der Randflächen (“Wo ist Außen?”)

(v) Information über Teilmengen des Gebietes.

Wir benutzen wieder die p-e-t-Struktur aus der PDE-Toolbox.

p ist nun eine 3×nPts-Matrix, die die x-,y- und z-Koordinaten der Gitterpukte ent-hält.

t ist eine nEPts+1×nElmts-Matrix, die die Indizes der Eckknoten jedes Elementsenthält und in der Zeile nEPts+ 1 steht die Nummer der Teilmenge zu der dasElement gehört. Ist das Gebiet nicht in Teilmengen unterteilt, ist die Nummergleich eins.

31

Page 36: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

e ist eine Matrix, deren erste drei (Tetraeder) oder vier (Prismenelemente) Zei-len die Indizes der Anfangs und Endpunkte des Randgebietes des jeweiligenElements enthalten. Bei Gittern, die aus Prismenelementen bestehen, stehen beiRanddreiecken in der vierten Zeile Nullen. In Zeile fünf steht die Nummer desRandsegments.

4.2. Assemblierung der Matrizen

4.2.1. Mathematischer Ansatz

4.2.1.1. Aufgabe im Gebiet Ω

Wir betrachten die Aufgabe

−∇ · (C∇u)+~b∇u+au = f in Ω

~n · (C∇u)+qu = g auf ∂Ω

mit C ∈ L∞(Ω). Die Aufgabe ist nun, die Integrale˚

Gi

(c1u2x + c2u2

y + c3u2z )dxdydz

˚

Gi

(b1uxu+b2uyu+b3uzu)dxdydz

˚

Gi

au2dxdydz

˚

Gi

f u dxdydz

für i = 1, ...,nElmts zu berechnen. Wir transformieren wieder auf das Einheitselement (Te-traeder oder Prisma). Die Transformation ist für vier-punkte Tetraeder und parallele Sechs-Punkte Prismen gleich, vergleiche die Situation in 2D.

x = x1 +(x2− x1)ξ +(x3− x1)η +(x4− x1)ζ

y = z1 +(y2− y1)ξ +(y3− y1)η +(y4− y1)ζ

z = z1 +(z2− z1)ξ +(z3− z1)η +(z4− z1)ζ .

Die Jacobi-Determinante ist

32

Page 37: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

z

ζ

(0,0,0) (1,0,0)

(0,1,0)

(0,0,1)

p1

p2

p3

p4

Abbildung 4.1.: Transformation eines Tetraeders auf das Einheitstetraeder.

z

η

ζ

(0,0,0) (1,0,0)x

ξ

p1p2

p3

p4 p5

y

p6

(0,1,1)

(1,0,1)

(0,1,0)

(0,0,1)

Abbildung 4.2.: Transformation eines parallelen Prisma auf das Einheitsprisma.

J =

∣∣∣∣∣∣(x2− x1) (y2− y1) (z2− z1)(x3− x1) (y3− y1) (z3− z1)(x4− z1) (y4− y1) (z4− z1)

∣∣∣∣∣∣und das Volumenelement im Integral wird mit

dxdydz = J dξ dηdζ

transformiert. Die Ableitungen in den Integralen sind mit der Kettenregel

ux = uξ ξx +uηηx +uζ ζx

uy = uξ ξy +uηηy +uζ ζy

uz = uξ ξz +uηηz +uζ ζz

zu transformieren. Nach Differentiation der Transformation nach x, y bzw. z ergibt sich

1 = (x2− x1)ξx +(x3− x1)ηx +(x4− x1)ζx

0 = (y2− y1)ξx +(y3− y1)ηx +(y4− y1)ζx

0 = (z2− z1)ξx +(z3− z1)ηx +(z4− z1)ζx

und

0 = (x2− x1)ξy +(x3− x1)ηy +(x4− x1)ζy

1 = (y2− y1)ξy +(y3− y1)ηy +(y4− y1)ζy

0 = (z2− z1)ξy +(z3− z1)ηy +(z4− z1)ζ

33

Page 38: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

sowie

0 = (x2− x1)ξz +(x3− x1)ηz +(x4− x1)ζz

0 = (y2− y1)ξz +(y3− y1)ηz +(y4− y1)ζz

1 = (z2− z1)ξz +(z3− z1)ηz +(z4− z1)ζz

Es folgt ξx ξy ξzηx ηy ηzζx ζy ζz

=

(x2− x1) (x3− x1) (x4− x1)(y2− y1) (y3− y1) (y4− y1)(z2− z1) (z3− z1) (z4− z1)

−1

= DFinv

Mit Hilfe der Formel

A−1 =

a b cd e fg h i

−1

=1

det(A)

ei− f h ch−bi b f − cef g−di ai− cg cd−a fdh− eg bg−ah ae−bd

kann man die Ableitungen direkt hinschreiben, wir benutzen später im Code die DarstellungDFinv(:, i).

Die Integrale sind nun darstellbar als

˚

Gi

(c1u2x + cu2

2y + c3u2z )dxdydz =

˚

G0

c1(uξ ξx +uηηx +uζ ζx)2 + c2(uξ ξy +uηηy +uζ ζy)

2 + ...

c3(uξ ξz +uηηz +uζ ζz)2J dξ dηdζ =

J1

˚

G0

u2ξ

dξ dηdζ + J2

˚

G0

u2ηdξ dηdζ + J3

˚

G0

u2ζ

dξ dηdζ + ...

2J4

˚

G0

uξ uηdξ dηdζ +2J5

˚

G0

uξ uζ dξ dηdζ +2J6

˚

G0

uηuζ dξ dηdζ

34

Page 39: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

wobei

J1 = J ·

⟨ ξxξyξz

,C

ξxξyξz

J2 = J ·

⟨ ηxηyηz

,C

ηxηyηz

J3 = J ·

⟨ ζxζyζz

,C

ζxζyζz

J4 = J ·

⟨ ξxξyξz

,C

ηxηyηz

J5 = J ·

⟨ ξxξyξz

,C

ζxζyζz

J6 = J ·

⟨ ηxηyηz

,C

ζxζyζz

Beachte, dass wir den Faktor zwei nicht in Ji integriert haben und wir erst mal ci = constauf Gi.

Für den Konvektionterm gilt

˚

Gi

(b1ux +b2uy +b3uz)u dxdydz =

˚

G0

b1(uξ ξx +uηηx +uζ ζx)u+b2(uξ ξy +uηηy +uζ ζy)u+ ...

b3(uξ ξz +uηηz +uζ ζz)uJ dξ dηdζ =

J7

˚

G0

uξ u dξ dηdζ + J8

˚

G0

uηu dξ dηdζ + J9

˚

G0

uζ u dξ dηdζ

35

Page 40: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

mit

J7 = J ·

⟨~b,

ξxξyξz

J8 = J ·

⟨~b,

ηxηyηz

J9 = J ·

⟨~b,

ζxζyζz

⟩Die Integrale ohne Ableitungen sind˚

Gi

u2dxdydz = J˚

G0

u2 dξ dηdζ

˚

Gi

u dxdydz = J˚

G0

u dξ dηdζ

4.2.1.2. Randbedingungen

Wir haben nun noch die Randbedingungen in die finite Elemente Methode zu integrieren. Aus

−∇ · (C∇u)+~b∇u+au = f in Ω

~n · (C∇u)+qu = g auf ∂Ω

folgt mit Ersetzen von~nC∇u in dem Randintegral durch die Randbedingung die Gleichung˚

Ω

−∇ · (C∇u)v+~b∇uv+auvdxdxdz =

=

˚

Ω

C∇u∇ · v+~b∇uv+auvdxdxdz−¨

∂Ω

~nC∇uvdsdr

=

˚

Ω

C∇u∇ · v+~b∇uv+auvdxdxdz+¨

∂Ω

quvdsdr−¨

∂Ω

gvdsdr

=

˚

Ω

f vdxdydz.

Wir müssen uns nur noch um die beiden Randintegrale kümmern, von denen eines nur voneiner von u unabhängigen Funktion g abhängt. Die Berechnung diese Integrale über eine inden R3 eingebetteten zweidimensionalen Mannigfaltigkeit kann dann wie im Abschnitt ??beschrieben erfolgen. Allerdings ist zu beachten, dass z.B. Tetraeder-Elemente Randstückebesitzen, die Dreiecke oder Vierecke sind. Dies ergibt dann aber nur technische Schwierigkei-ten.

36

Page 41: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

4.2.2. Lineare nite Elemente über Tetraeder

4.2.2.1. Basisintegrale und Linear-/Quadratformen

Eine Lineare Funktion in R3 lässt sich als

u(ξ ,η ,ζ ) = a1 +a2ξ +a3η +a4ζ

schreiben. Wir müssen nun nur noch die obigen Integrale für diesen Ansatz auf dem Einheits-Tetraeder bestimmen. Die Ableitungen sind leicht zu berechnen:

uξ = a2

uη = a3

uζ = a4

Beachte, dass die Ji nur von der Transformation der Tetraeder in allgemeiner Lage auf dasEinheits-Tetraeder abhängen und somit für jedes Gi konstant sind. Das Integral über G0 ist

˚

G0

dξ dηdζ =

0

1−ξˆ

0

1−ξ−ηˆ

0

dζ dηdξ =16

wobei 16 das Volumen des Einheits-Tetraeders ist. Es folgt

I1 =

˚

G0

u2ξ

dξ dηdζ =

˚

G0

a22dξ dηdζ =

16

a22

I2 =

˚

G0

u2ηdξ dηdζ =

˚

G0

a23dξ dηdζ =

16

a23

I3 =

˚

G0

u2ζ

dξ dηdζ =

˚

G0

a24dξ dηdζ =

16

a24

Die Integrale mit gemischten Ableitungen sind

I4 = 2˚

G0

uξ uηdξ dηdζ = 2˚

G0

a2a3dξ dηdζ =13

a2a3

I5 = 2˚

G0

uξ uηdξ dηdζ = 2˚

G0

a2a4dξ dηdζ =13

a2a4

I6 = 2˚

G0

uηuζ dξ dηdζ = 2˚

G0

a3a4dξ dηdζ =13

a3a4

Beachte wieder, das der Faktor zwei zum Integral gehört.

37

Page 42: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

Der Konvektionsterm ist dann aus den folgenden Integralen zusammengesetzt

I7 =

˚

G0

a2 · (a1 +a2 ·ξ +a3 ·η +a4 ·ζ )dζ dηdξ =1

24a2 (a4 +a3 +a2 +4a1)

I8 =

˚

G0

a3 · (a1 +a2 ·ξ +a3 ·η +a4 ·ζ )dζ dηdξ =1

24a3 (a4 +a3 +a2 +4a1)

I9 =

˚

G0

a4 · (a1 +a2 ·ξ +a3 ·η +a4 ·ζ )dζ dηdξ =1

24a4 (a4 +a3 +a2 +4a1)

Die Integrale für u2 und u sind dann

I10 =

˚

G0

(a1 +a2 ·ξ +a3 ·η +a4 ·ζ )2 dζ dηdξ

=a2

4 +(a3 +a2 +5a1) a4 +a23 +(a2 +5a1) a3 +a2

2 +5a1 a2 +10a21

60

I11 =

˚

G0

(a1 +a2 ·ξ +a3 ·η +a4 ·ζ )dζ dηdξ =a4 +a3 +a2 +4a1

24

Die Integrale I1 bis I10 liefern quadratische Formen Ii = a>Sia, i = 1, ...,6, wobei die füri = 1, ...,6 und i = 11 symmetrisch sind. I11ist eine Linearform I12 = S12a, wobei a der Koef-fizientenvektor der Ansatzfunktion u ist.

Aus den rechten Seiten der Formeln ??–?? ergeben sich die Matrizen

S1 =16

0 0 0 00 1 0 00 0 0 00 0 0 0

S3 =16

0 0 0 00 0 0 00 0 0 00 0 0 1

S5 =16

0 0 0 00 0 0 10 0 0 00 1 0 0

S2 =16

0 0 0 00 0 0 00 0 1 00 0 0 0

S4 =16

0 0 0 00 0 1 00 1 0 00 0 0 0

S6 =16

0 0 0 00 0 0 00 0 0 10 0 1 0

38

Page 43: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

Die Matrizen Si, i = 7, ...,9 gehören zum Konvektionsterm

S7 =1

24

0 4 0 00 1 0 00 1 0 00 1 0 0

S8 =1

24

0 0 4 00 0 1 00 0 1 00 0 1 0

S9 =124

0 0 0 40 0 0 10 0 0 10 0 0 1

Massematrix und Quellterm

S10 =1

120

20 5 5 55 2 1 15 1 2 15 1 1 2

S11 =1

24

4111

4.2.2.2. Die die lokalen Matrizen Si

Die Koeffizienten ai ergeben sich aus der Forderung nach Interpolation an den Knoten desTetraeders

u1 = a1

u2 = a1 +a2

u3 = a1 +a3

u4 = a1 +a4

wobei die Abbildung linear ist und als Matrix A geschrieben werden kann. Mit

A−1 =

1 0 0 0−1 1 0 0−1 0 1 0−1 0 0 1

haben wir die Zuordnung ai 7→ ui.

Die Integrale sind dann mittels A zu transformieren

Ii = u>(A−1)>SiAu = u>Siu i = 1, ...,10,

I11 = S11A−1u = S11u.

Die folgenden lokalen Matrizen sind dann in der Assemblierung zu verwenden:

39

Page 44: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

S1 =16

1 −1 0 0−1 1 0 0

0 0 0 00 0 0 0

S3 =16

1 0 0 −10 0 0 00 0 0 0−1 0 0 1

S5 =16

2 −1 0 −1−1 0 0 1

0 0 0 0−1 1 0 0

S2 =16

1 0 −1 00 0 0 0−1 0 1 0

0 0 0 0

S4 =16

2 −1 −1 0−1 0 1 0−1 1 0 0

0 0 0 0

S6 =16

2 0 −1 −10 0 0 0−1 0 0 1−1 0 1 0

S7 =1

24

−1 1 0 0−1 1 0 0−1 1 0 0−1 1 0 0

S8 =1

24

−1 0 1 0−1 0 1 0−1 0 1 0−1 0 1 0

S9 =1

24

−1 0 0 1−1 0 0 1−1 0 0 1−1 0 0 1

S10 =1

120

2 1 1 11 2 1 11 1 2 11 1 1 2

S11 =1

24

1111

4.2.3. Bilinearer Ansatz über Prismenelemente

4.2.3.1. Basisintegrale und Linear- /Quadratformen

Die Ansatzfunktion für Prismenelemente in R3 lässt sich als

u(ξ ,η ,ζ ) = a1 +a2ξ +a3η +a4ζ +a5ξ ζ +a6ηζ

schreiben. Die Ableitungen sind hier ebenfalls leicht zu berechnen:

uξ = a2 +a5 ·ζuη = a3 +a6 ·ζuζ = a4 +a5 ·ξ +a6 ·η

Beachte, dass die Ji wie im Falle von Tetraedern nur von der Transformation der Tetraeder inallgemeiner Lage auf das Einheits-Tetraeder abhängen und somit für jedes Gi konstant sind.G0 sei der Einheitstetraeder. Das Volumen von G0 ist

40

Page 45: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

˚

G0

dξ dηdζ =

0

1−ξˆ

0

0

dζ dηdξ =12

Die Integrale I1..., I11 bestimmen sich wie folgt:Quadrate der partiellen Ableitungen

I1 =

˚

G0

uξ (ξ ,η ,ζ )2dξ dηdζ =

0

1−ξˆ

0

0

(a2 +a5 ·ζ )2 dζ dηdξ =a2

5 +3a2 a5 +3a22

6

I2 =

˚

G0

uη(ξ ,η ,ζ )2dξ dηdζ =

0

1−ξˆ

0

0

(a3 +a6 ·ζ )2 dζ dηdξ =a2

6 +3a3 a6 +3a23

6

I3 =

˚

G0

uζ (ξ ,η ,ζ )2dξ dηdζ =

0

1−ξˆ

0

0

(a4 +a5 ·ξ +a6 ·η)2 dζ dηdξ

=a2

6 +(a5 +4a4) a6 +a25 +4a4 a5 +6a2

412

=a62

12+

a5a612

+a4a6

3+

a52

12+

a4a53

+a42

2

die gemischten Ableitungen

I4 =

˚

G0

uξ (ξ ,η ,ζ )uη(ξ ,η ,ζ )dξ dηdζ =

0

1−ξˆ

0

0

(a2 +a5 ·ζ ) · (a3 +a6 ·ζ )dζ dηdξ

=(2a5 +3a2) a6 +3a3 a5 +6a2 a3

12

=a5a6

6+

a2a64

+a3a5

4+

a2a32

I5 =

˚

G0

uξ (ξ ,η ,ζ )uζ (ξ ,η ,ζ )dξ dηdζ =

0

1−ξˆ

0

0

(a2+a5 ·ζ )·(a4+a5 ·ξ +a6 ·η)dζ dηdξ

=(a5 +2a2) (a6 +a5 +3a4)

12

=a5a6

12+

a2a66

+a52

12+

a4a54

+a2a5

6+

a2a42

41

Page 46: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

I6 =

˚

G0

uη(ξ ,η ,ζ )uζ (ξ ,η ,ζ )dξ dηdζ =

0

1−ξˆ

0

0

(a3+a6 ·ζ )·(a4+a5 ·ξ +a6 ·η)dζ dηdξ

=(a6 +2a3) (a6 +a5 +3a4)

12

=a6

2

12+

a5 a6

12+

a4 a6

4+

a3 a6

6+

a3 a5

6+

a3 a4

2

die Konvektionsterme

0

1−ξˆ

0

0

(a2 +a5 ·ζ ) · (a1 +a2 ·ξ +a3 ·η +a4 ·ζ +a5 ·ξ ·ζ +a6 ·η ·ζ )dζ dηdξ

=a5 a6

18+

a2 a6

12+

a52

18+

a4 a5

6+

a3 a5

12+

a2 a5

6+

a1 a5

4+

a2 a4

4+

a2 a3

6+

a22

6+

a1 a2

2

0

1−ξˆ

0

0

(a3 +a6 ·ζ ) · (a1 +a2 ·ξ +a3 ·η +a4 ·ζ +a5 ·ξ ·ζ +a6 ·η ·ζ )dζ dηdξ =

a62

18+

a5 a6

18+

a4 a6

6+

a3 a6

6+

a2 a6

12+

a1 a6

4+

a3 a5

12+

a3 a4

4+

a32

6+

a2 a3

6+

a1 a3

2

0

1−ξˆ

0

0

(a4+a5 ·ξ +a6 ·η) · (a1+a2 ·ξ +a3 ·η +a4 ·ζ +a5 ·ξ ·ζ +a6 ·η ·ζ )dζ dηdξ =

a62

24+

a5 a6

24+

a4 a6

6+

a3 a6

12+

a2 a6

24+

a1 a6

6+ ...

+a5

2

24+

a4 a5

6+

a3 a5

24+

a2 a5

12+

a1 a5

6+

a42

4+

a3 a4

6+

a2 a4

6+

a1 a4

2

der Masse-Term

I10 =

˚

G0

u(ξ ,η ,ζ )2dξ dηdζ =

0

1−ξˆ

0

0

(a1+a2ξ +a3η+a4ζ +a5ξ ζ +a6ηζ )2dξ dηdζ

=a6

2

36+

a5 a6

36+

a4 a6

9+

a3 a6

12+

a2 a6

24+

a1 a6

6+

a52

36+

a4 a5

9+

a3 a5

24+

a2 a5

12+

a1 a5

6...

+a4

2

6+

a3 a4

6+

a2 a4

6+

a1 a4

2+

a32

12+

a2 a3

12+

a1 a3

3+

a22

12+

a1a23

+a1

2

2

42

Page 47: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

und der Quellterm

I11 =

˚

G0

u(ξ ,η ,ζ )dξ dηdζ =

0

1−ξˆ

0

0

a1+a2 ·ξ +a3 ·η+a4 ·ζ +a5 ·ξ ·ζ +a6 ·η ·ζ dζ dηdξ

=a6 +a5 +3a4 +2a3 +2a2 +6a1

12

Die Integrale I1 bis I10 liefern wieder quadratische Formen Ii = a>Sia, i = 1, ...,6, wobei diefür i = 1, ...,6 und i = 11 symmetrisch sind. I12 ist eine Linearform I12 = S12a, wobei a derKoeffizientenvektor der Ansatzfunktion u ist.

Aus den rechten Seiten der Formeln ??–?? ergeben sich die Matrizen

S1 =

0 0 0 0 0 0

012

0 014

0

0 0 0 0 0 00 0 0 0 0 0

014

0 016

0

0 0 0 0 0 0

S3 =

0 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0

0 0 012

16

16

0 0 016

112

124

0 0 016

124

112

S5 =

0 0 0 0 0 0

0 0 014

112

112

0 0 0 0 0 0

014

0 018

0

01

120

18

112

124

01

120 0

124

0

S2 =

0 0 0 0 0 00 0 0 0 0 0

0 012

0 014

0 0 0 0 0 00 0 0 0 0 0

0 014

0 016

S4 =

0 0 0 0 0 0

0 014

0 018

014

0 018

0

0 0 0 0 0 0

0 018

0 01

120

18

0 01

120

S6 =

0 0 0 0 0 00 0 0 0 0 0

0 0 014

112

112

0 014

0 018

0 01

120 0

124

0 01

1218

124

112

Konvektion

43

Page 48: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

S7 =

014

0 018

014

16

112

18

112

124

01

120 0

124

0

018

0 01

120

18

112

124

112

118

136

01

240 0

136

0

S8 =

0 014

0 018

0 0112

0 01

2414

112

16

18

124

112

0 018

0 01

120 0

124

0 01

3618

124

112

112

136

118

S9 =

0 0 014

112

112

0 0 01

121

241

480 0 0

112

148

124

14

112

112

14

112

112

112

124

148

112

124

148

112

148

124

112

148

124

Massematrix und Quellterm

44

Page 49: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

S10 =

12

16

16

14

112

112

16

112

124

112

124

148

16

124

112

112

148

124

14

112

112

16

118

118

112

124

148

118

136

172

112

148

124

118

172

136

S11 =1

12

622311

4.2.3.2. Die lokalen Matrizen Si

Die Koeffizienten ai ergeben sich aus der Forderung nach Interpolation an den Knoten derPrismen

u1 = a1

u2 = a1 +a2

u3 = a1 +a3

u4 = a1 +a4

u5 = a1 +a2 +a4 +a5

u6 = a1 +a3 +a4 +a6

wobei die Abbildung linear ist und als Matrix-Vektor Operation ~u = A~a geschrieben werdenkann, wobei

A =

1 0 0 0 0 01 1 0 0 0 01 0 1 0 0 01 0 0 1 0 01 1 0 1 1 01 0 1 1 0 1

Mit

A−1 =

1 0 0 0 0 0−1 1 0 0 0 0−1 0 1 0 0 0−1 0 0 1 0 0

1 −1 0 −1 1 01 0 −1 −1 0 1

haben wir die Zuordnung ai 7→ ui.

Analog zum Tetraeder sind die Integrale dann mittels A−1 zu transformieren

Ii = u>(A−1)>SiA−1u = u>Siu i = 1, ...,10,

45

Page 50: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

I11 = S11A−1u = S11u.

Die folgenden lokalen Matrizen sind dann in der Assemblierung zu verwenden:

S1 =

16−1

60

112− 1

120

−16

16

0 − 112

112

0

0 0 0 0 0 01

12− 1

120

16

16

0

− 112

112

016

16

0

0 0 0 0 0 0

S2 =

16

0 −16

112

0 − 112

0 0 0 0 0 0

−16

016

− 112

01

121

120 − 1

1216

016

0 0 0 0 0 0

− 112

01

1216

016

S3 =

112

124

124

− 112− 1

24− 1

241

241

121

24− 1

24− 1

12− 1

241

241

241

12− 1

24− 1

24− 1

12− 1

12− 1

24− 1

241

12124

124

− 124− 1

12− 1

241

24112

124

− 124− 1

24− 1

121

24124

112

S4 =

16− 1

12− 1

121

12− 1

24− 1

24− 1

120

112

− 124

01

24− 1

121

120 − 1

24124

01

12− 1

24− 1

2416− 1

12− 1

12− 1

240

124

− 112

01

12− 1

241

240 − 1

12112

0

46

Page 51: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

S5 =

112

01

240 − 1

12− 1

240 − 1

12− 1

241

120

124

124− 1

240

124− 1

240

01

121

24− 1

120 − 1

24− 1

120 − 1

240

112

124

− 124

124

0 − 124

124

0

S6 =

112

124

0 0 − 124

112

124

0 − 124

124

0 − 124

0 − 124− 1

121

12124

0

01

241

12− 1

12− 1

240

− 124

01

24− 1

240

124

− 112− 1

240 0

124

112

S7 =

− 118

0 − 136− 1

360 − 1

720

118

136

01

361

72− 1

36136

0 − 172

172

0

− 136

0 − 172− 1

180 − 1

360

136

172

01

181

36− 1

72172

0 − 136

136

0

S8 =

− 118− 1

360 − 1

36− 1

720

− 136

01

36− 1

720

172

01

361

180

172

136

− 136− 1

720 − 1

18− 1

360

− 172

01

72− 1

360

136

01

721

360

136

118

47

Page 52: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

S9 =

− 124− 1

48− 1

480 0 0

− 148− 1

24− 1

480 0 0

− 148− 1

48− 1

240 0 0

0 0 01

24148

148

0 0 01

48124

148

0 0 01

48148

124

S10 =

136

172

172

172

1144

1144

172

136

172

1144

172

1144

172

172

136

1144

1144

172

172

1144

1144

136

172

172

1144

172

1144

172

136

172

1144

1144

172

172

172

136

S11 =1

12

111111

Die Transformation eines beliebigen parallelen Prismenelementes ist wegen x4− x1 = y4−y1 = 0 und z2−z1 = z3−z1 = 0 etwas einfacher als die des Tetraeder-Elements. Wir betrachtendie Abbildung Φ : (ξ ,η ,ζ ) 7→ (x,y,z)

x = x1 +(x2− x1)ξ +(x3− x1)η

y = y1 +(y2− y1)ξ +(y3− y1)η

z = z1 +(z4− z1)ζ

Die Jacobi-Determinante ist dann

J = ((x2− x1)(y3− y1)− (x3− x1)(y2− y1))(z4− z1).

Ebenfalls dramatisch einfacher werden die Ableitungen ξx, ...,ζz. Die Ableitung nach x ist

1 = x1 +(x2− x1)ξx +(x3− x1)ηx

0 = y1 +(y2− y1)ξx +(y3− y1)ηx

0 = z1 +(z4− z1)ζx

wobei jetzt schon ζx = 0 folgt. Wir schreiben das System als Matrix

A =

x2− x1 x3− x1 0y2− y1 y3− y1 0

0 0 z4− z1

48

Page 53: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

Mit einer bekannten Formel folgt

A−1 =1

det(A)

(y3− y1)(z4− z1) −(x3− x1)(z4− z1) 0−(y2− y1)(z4− z1) (x2− x1)(z4− z1) 0

0 0 (x2− x1)(y3− y1)− (y2− y1)(x3− x1)

Multipliziert man für die Ableitungen nach x, y und z der Transformierten ξ , η und ζ mit denEinheitsvektoren, so erhält man

ξx =1J(y3− y1)(z4− z1)

ηx = −1J(y2− y1)(z4− z1)

ζx = 0

ξy = −1J(x3− x1)(z4− z1)

ηy =1J(x2− x1)(z4− z1)

ζy = 0ξz = 0ηz = 0

ζz =1

z4− z1

wobei z.B.

ξx =1J(y3− y1)(z4− z1) =

y3− y1

(x2− x1)(y3− y2)− (y2− y1)(x3− x1)

die bekannte Formel aus der Dreieckstransformation in 2D ist.Benutzen wir als Abkürzung

xk j = (xk− x j)

yk j = (yk− y j)

zk j = (zk− z j)

erhalten wir für die Ji

J1 =z2

41J(c1y2

31 + c2x231)

J2 =z2

41J(c1y2

21 + c2x221)

J3 = c3J

z241

J4 = −z2

41J(c1y31y21 + c2x31x21)

J5 = 0J6 = 0

49

Page 54: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

4.2.3.3. Randintegrale

Wir müssen ¨∂Gi

qu2dxdy = J¨

∂G0

qu2 dξ dη (4.1)¨

∂Gi

gudxdy = J¨

∂G0

gudξ dη (4.2)

bestimmen. Für den Wert des Integrals ist es nicht wichtig, wie wir die Randelemente auf 2Dtransformieren, die Zuordnung zu den 3D Knoten liefert uns das Feld e, dabei ist nur darauf zuachten, ob das Randelement ein Dreieck oder Rechteck ist. Für die Dreiecksrandelemente giltzi,k = z jk für alle j = 1, ...,3 und alle k, wobei dann für die Randelemente, die Rechtecke sindx1k = x4k, x2k = x3k, y1k = y4k sowie y2k = y3k gilt. Diese einfache Überlegung funktioniert nurfür parallele Prismen-Elemente. Im Tetraeder muss die Transformation tatsächlich berechnetwerden.

Insgesamt kann man leicht einsehen, dass das Problem (4.1)–(4.2) durch die Anwendungder analogen Rechnung für 2-D Probleme gelöst werden kann.

4.2.3.4. Implementierung

Die Implementierung der Assemblierung erfolgt wieder für alle Elemente in den MethodenfiniteElements3D.assema bzw. finiteElements3D.assemb. Die Methode benutzt abstrakte Me-thoden und Eigenschaften der Klasse finiteElements3D, die erst in den Subklassen definiertwerden. Dort wird auch der Komplette Satz I1...I6 von Integralen benutzt, obwohl für dieparallelen Prismenelemente J5 = 0 und J6 = 0 gilt. Siehe auch Abschnitt 4.2.1. Die für diejeweiligen Elemente konkrete Berechnung der Ji erfolgt erst in der Methode makeJ, die infiniteElements3D abstract deklariert wurde.

Der Code für die Assemblierung ist dadurch sehr kompaktDie Assemblierung benutzt die in der jeweilige FE-Klasse definierten Elementmatrizen

S1–S10. Die Koeffizienten c, a und f werden in acoefficients als Matrix der Dimension3×#ELEM bzw. als Vektoren der Länge #ELEM bereitgestellt. Die in Abschnitt ?? definier-ten Zahlen J,J1, ...,J6 werden durch Vektoren der Länge #ELEM ebenfalls für alle Elementebereitgestellt. Die Methode makeIndex liefert eine Umordnung der Indizes und dient nur zumeffektiven Anwenden des Befehls sparse. sparse arbeitet mit Vektoren für die Werte und dieIndizes. Man beachte, dass im reshape ein Dyadisches Produkt steht, damit werden die Spal-tenvektoren mit den Zeilenvektoren multipliziert, die entstehende 36× #ELEM Matrix wirddann mittels reshape zu einem Vektor der Länge 36 ·#ELEM.

Diese Technik lässt sich so nicht auf die Assemblierung der Randdaten anwenden, da dieRanddaten anders codiert sind, siehe Abschnitt ??.

Wir können aber eine ähnliche Technik für jedes Randsegment anwenden. Auch ist zu be-achten, dass die Ränder in 3D aus verschiedenen 2D Elementen (Dreiecken, Rechtecke, ...)bestehen können.

Durch die Codierung der Randdaten analog zur PDE-Toolbox müssen wir die (teure) Aus-wertung der Randdaten für jedes Randelement vornehmen. Anschließend können wir aber

50

Page 55: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

c l a s s d e f ( A b s t r a c t ) f i n i t e E l e m e n t s 3 D < f i n i t e E l e m e n t s

p r o p e r t i e s ( A b s t r a c t , C o n s t a n t )S1 ; S2 ; S3 ; S4 ; S5 ; S6 ;S7 ; S8 ; S9 ;S10 ;S11 ;i d x ;

end

methods ( Access = p u b l i c )[K,M, F ] = assema ( obj , g r idObj , cf , af , f f ) ;[Q, G, H, R] = assemb ( obj , bound , g r i d O b j ) ;B = c o n v e c t i o n ( obj , g r idObj , b ) ;

end

methods ( S t a t i c , Access = p r o t e c t e d )[ cva l , ava l , f v a l ] = c o e f f i c i e n t s ( g , c , a , f ) ;[ qva l , gva l , hva l , r v a l ] = b c o e f f i c i e n t s ( p , b )b v a l v e c = c c o e f f i c i e n t s ( g , b ) ;

end

methods ( S t a t i c , A b s t r a c t )[ J , J1 , J2 , J3 , J4 , J5 , J6 ] = makeJ ( g r idObj , c v a l ) ;

endend

Abbildung 4.3.: Code der Klassendefinition finiteElements3D

die Technik wie in assema benutzen, nur dass wir noch zwischen Dreicksrandelementen undVierecksrandelementen unterscheiden müssen.

51

Page 56: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

f u n c t i o n [ v a r a r g o u t ] = assema ( obj , g r idObj , cf , af , f f )

np = s i z e ( g r i d O b j . p , 2 ) ;n t = s i z e ( g r i d O b j . t , 2 ) ;

[ cva l , ava l , f v a l ] = o b j . a c o e f f i c i e n t s ( g r idObj , cf , af , f f ) ;[ J , J1 , J2 , J3 , J4 , J5 , J6 ] = o b j . makeJ ( g r idObj , c v a l ) ;[ idx1 , idx2 , i dx0 ] = o b j . makeIndex ( g r i d O b j . t ( o b j . idx , : ) , n t ) ;

sw i t ch n a r g o u tcase 2

v a r a r g o u t 1 = s p a r s e ( idx1 , idx2 , . . .r e s h a p e ( o b j . S1* J1+ o b j . S2* J2+ o b j . S3* J3 . . .

+2* o b j . S4* J4 +2* o b j . S5* J5 +2* o b j . S6* J6 . . .+ o b j . S10 *( a v a l . * J ) , 1 , n t * 3 6 ) , np , np ) ;

v a r a r g o u t 2 = s p a r s e ( idx0 , 1 , . . .r e s h a p e ( o b j . S11 *( J . * f v a l ) , 1 , n t * 6 ) , np , 1 ) ;

case 3v a r a r g o u t 1 = s p a r s e ( idx1 , idx2 , . . .

r e s h a p e ( o b j . S1* J1+ o b j . S2* J2+ o b j . S3* J3 . . .+2* o b j . S4* J4 +2* o b j . S5* J5 +2* o b j . S6* J6 , 1 , n t * 3 6 ) , np , np ) ;

v a r a r g o u t 2 = s p a r s e ( idx1 , idx2 , . . .r e s h a p e ( o b j . S10 *( a v a l . * J ) , 1 , n t * 3 6 ) , np , np ) ;

v a r a r g o u t 3 = s p a r s e ( idx0 , 1 , . . .r e s h a p e ( o b j . S11 *( J . * f v a l ) , 1 , n t * 6 ) , np , 1 ) ;

o t h e r w i s eth row ( o b j . wrongNumberOutputs )

endend

Abbildung 4.4.: Code finiteElements3D.assema

52

Page 57: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

4. FEM in 3D

f u n c t i o n [Q, G, H, R] = assemb ( obj , g r i d O b j )

nBoundaryElements = s i z e ( g r i d O b j . e , 2 ) ;n T r i = sum ( g r i d O b j . e ( 4 , : ) = = 0 ) ;nSqr = sum ( g r i d O b j . e ( 4 , : ) > 0 ) ;n P t s = s i z e ( g r i d O b j . p , 2 ) ;q v a l = z e r o s ( 1 , n P t s ) ;g v a l = z e r o s ( 1 , n P t s ) ;h v a l = z e r o s ( 1 , n P t s ) ;

r v a l = z e r o s ( 1 , n P t s ) ;

f o r k = 1 : nBoundaryElementsi f g r i d O b j . e ( 4 , k )==0

[ q v a l ( k ) , g v a l ( k ) , h v a l ( k ) , r v a l ( k ) ] = g r i d O b j . b c o e f f i c i e n t s ( . . .g r i d O b j . p ( : , g r i d O b j . e ( 1 : 3 , k ) ) , g r i d O b j . b ( : , g r i d O b j . e ( 5 , k ) ) ) ;

e l s e[ q v a l ( k ) , g v a l ( k ) , h v a l ( k ) , r v a l ( k ) ] = g r i d O b j . b c o e f f i c i e n t s ( . . .

g r i d O b j . p ( : , g r i d O b j . e ( 1 : 4 , k ) ) , g r i d O b j . b ( : , g r i d O b j . e ( 5 , k ) ) ) ;end

end

% Case 2 . TRIANGLESi n d x T r i = f i n d ( g r i d O b j . e ( 4 , : ) = = 0 ) ;

p1 = g r i d O b j . p ( 1 : 2 , g r i d O b j . e ( 1 , i n d x T r i ) ) ;p2 = g r i d O b j . p ( 1 : 2 , g r i d O b j . e ( 2 , i n d x T r i ) ) ;p3 = g r i d O b j . p ( 1 : 2 , g r i d O b j . e ( 3 , i n d x T r i ) ) ;

x21 = p2 ( 1 , : ) − p1 ( 1 , : ) ;x31 = p3 ( 1 , : ) − p1 ( 1 , : ) ;y21 = p2 ( 2 , : ) − p1 ( 2 , : ) ;y31 = p3 ( 2 , : ) − p1 ( 2 , : ) ;

J t r i = x21 . * y31−x31 . * y21 ;

Qe = r e s h a p e ( l ag range12D . S4 *( J t r i . * q v a l ( i n d x T r i ) ) , 1 , 9 * n T r i ) ;ge = r e s h a p e ( l ag range12D . s1 * ( J t r i . * g v a l ( i n d x T r i ) ) , 1 , 3 * n T r i ) ;

He = r e s h a p e ( [ 1 0 0 0 1 0 0 0 1 ] ’ * ( J t r i . * h v a l ( i n d x T r i ) ) , 1 , 9 * n T r i ) ;r e = r e s h a p e ( [ 1 1 1 ] ’ * ( J t r i . * r v a l ( i n d x T r i ) ) , 1 , 3 * n T r i ) ;

i n d x T r i P t s = g r i d O b j . e ( 1 : 3 , i n d x T r i ) ;

[ indx0 , indx1 , indx2 ] = lag range12D . makeIndex ( i n d x T r i P t s , n T r i ) ;

Q = s p a r s e ( indx1 , indx2 , Qe , nPts , n P t s ) ;G = s p a r s e ( indx0 , 1 , ge , nPts , 1 ) ;H = s p a r s e ( indx1 , indx2 , He , nPts , n P t s ) ;R = s p a r s e ( indx0 , 1 , re , nPts , 1 ) ;

% Case 2 . SQUARESi n d x S q r = f i n d ( g r i d O b j . e ( 4 , : ) > 0 ) ;

i n d x S q r P t s = g r i d O b j . e ( 1 : 4 , i n d x S q r ) ;

pSqr1 = g r i d O b j . p ( : , g r i d O b j . e ( 1 , : ) ) ;pSqr2 = g r i d O b j . p ( : , g r i d O b j . e ( 2 , : ) ) ;pSqr3 = g r i d O b j . p ( : , g r i d O b j . e ( 3 , : ) ) ;

p2 = [ s q r t ( ( pSqr2 ( 1 , i n d x S q r )−pSqr1 ( 1 , i n d x S q r ) ) . ^ 2 + ( pSqr2 ( 2 , i n d x S q r )−pSqr1 ( 2 , i n d x S q r ) ) . ^ 2 )z e r o s ( s i z e ( i n d x S q r ) ) ] ;

p3 = [ z e r o s ( s i z e ( i n d x S q r ) )pSqr3 ( 3 , i n d x S q r )−pSqr2 ( 3 , i n d x S q r ) ] ;

h = [1 0 0 0 , 0 1 0 0 , 0 0 1 0 , 0 0 0 1 ] ’ ;r = [1 1 1 1 ] ’ ;

JSq r = p2 ( 1 , : ) . * p3 (2 , : ) − p3 ( 1 , : ) . * p2 ( 2 , : ) ;

Qe = r e s h a p e ( r e s h a p e ( o b j . BMsqr , 1 6 , 1 ) * ( JSq r . * q v a l ( i n d x S q r ) ) , 1 , 1 6 * nSqr ) ;ge = r e s h a p e ( o b j . b e s q r * ( JSq r . * g v a l ( i n d x S q r ) ) , 1 , 4 * nSqr ) ;

He = r e s h a p e ( h * ( JSq r . * h v a l ( i n d x S q r ) ) , 1 , 1 6 * nSqr ) ;

r e = r e s h a p e ( r * ( JSq r . * r v a l ( i n d x S q r ) ) , 1 , 4 * nSqr ) ;

[ indx0 , indx1 , indx2 ] = makeIndex ( i n d x S q r P t s , nSqr ) ;

Q = Q + s p a r s e ( indx1 , indx2 , Qe , nPts , n P t s ) ;G = G + s p a r s e ( indx0 , 1 , ge , nPts , 1 ) ;H = H + s p a r s e ( indx1 , indx2 , He , nPts , n P t s ) ;R = R + s p a r s e ( indx0 , 1 , re , nPts , 1 ) ;

f u n c t i o n [ idxvec0 , idxvec1 , i d x v e c 2 ] = makeIndex ( idx , np )i d x v e c 0 = r e s h a p e ( idx , 1 , np * 4 ) ;i d x v e c 1 = r e s h a p e ( [ i d x ; i d x ; i d x ; i d x ] , 1 , np * 1 6 ) ;i d x v e c 2 = r e s h a p e ( [ i d x ( 1 , : ) ; i d x ( 1 , : ) ; i d x ( 1 , : ) ; i d x ( 1 , : ) ; . . .

i d x ( 2 , : ) ; i d x ( 2 , : ) ; i d x ( 2 , : ) ; i d x ( 2 , : ) ; . . .i d x ( 3 , : ) ; i d x ( 3 , : ) ; i d x ( 3 , : ) ; i d x ( 3 , : ) ; . . .i d x ( 4 , : ) ; i d x ( 4 , : ) ; i d x ( 4 , : ) ; i d x ( 4 , : ) ] , 1 , 1 6 * np ) ;

end

end

Abbildung 4.5.: Code assemb. Diese Version überschreibt die assemb der Klasse finiteEle-mente3D, Grund sind einige kleine Tricks zur effizienzsteigerung, die nur fürparallele Tetraeder-Elemente gelten.

53

Page 58: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A

Anhang A.

Beispielprogramme

Mit den folgenden Beispielprogrammen sollen die Techniken, die in den vorhergehenden Ab-schnitten eingeführt wurden, an konkreten Aufgaben noch einmal erläutert werden. Die Auf-gaben sind so gewählt, dass möglichst viel der Syntax der PDE Toolbox und unserer Erweite-rungen benutzt wird, ohne die Programme aber damit zu überfrachten.

A.1. Klassischer Code

A.1.1. Elliptische PDE mit Dirichlet-Randbedingungen

Wir lösen das Rand-Anfangswertproblem in einer Ortsdimension

−uxx +u = x5 in (0,π)u = 0 in 0∪π.

Die Parameter sind als c = 1,a = 1, f = x5, h = 1,r = 0 gegeben. Das folgende Programm löstdie Aufgabe numerisch.

1c l e a r , c l c , c l e a r a l l2g = [ 0 , p i ] ;3b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ ) ;4[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 ) ;5[K,M, F ] = assema ( p , t , ’ 1 ’ , ’ 1 ’ , ’ x . ^ 5 ’ ) ;6[ ~ , ~ ,H, ~ ] = assemb ( b , p , e ) ;7u = (K+M+1 e3 *H’*H ) \ ( F ) ;8p l o t ( p , u )

Alle nicht benötigen Matrizen/Vektoren sind mit “~” geblockt.

54

Page 59: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

A.1.2. Semilineare parabolische PDE mit

Neumann-Randbedingungen

Wir lösen das Rand-Anfangswertproblem

ut−uxx +u3 = 0 in (0,π)× (0,1)~n · (c∇u) = 0 auf 0× (0,1) und π× (0,1)

u(0) = sin(x) in (0,π).

Um das nichtlineare Problem ohne Newton-Verfahren zu lösen, benutzen wir eine Metho-de, die die Nichtlinearität u3(t) durch u3(t− δ t) ersetzt. Hier ist δ t die Zeitschrittweite. DieNichtlinerarität wird damit in den Quellterm verschoben: f (t) = u3(t− δ t)). Dies ist der sogenannte “Semi-linear approach”.

1c l e a r , c l c , c l f2n t = 100 ;3b = b o u n d a r y m a t r i x ( ) ;4g = [ 0 , p i ] ;5[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 ) ;6t ime = l i n s p a c e ( 0 , 1 , n t ) ;7t a u = t ime ( 2 : end)− t ime ( 1 : end−1);89u0 = i n l i n e ( ’ s i n ( x ) ’ ) ;10u = u0 ( p ) ’ ;1112[K, Md, ~ ] = assema ( p , t , 1 , 1 , 0 ) ;1314f o r k = 2 : nt ,15u ( : , k ) = (Md+ t a u ( k−1)*K ) \ . . .16(Md*u ( : , k−1)− t a u ( k−1)*Md*u ( : , k− 1 ) . ^ 3 ) ;17end1819s u r f ( t ime , p , u )

A.1.3. PDE mit Quelle am Rand

Wir betrachten das Rand-Anfangswertproblem

ut−uxx +u = 0 in (0,π)−yx = sin(t) on 0× (0,2π)

y = t cos(t) on π× (0,2π)

y(0) = 0 in (0,π).

55

Page 60: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

Wir haben eine zeitabhängige Neumann-Randbedingungen auf dem linken und eine zeitab-hänge Dirichlet-Randbedingungen auf dem rechten Rand.

Das folgende MATLAB Program löst das Problem:

1c l e a r , c l f , c l c23n t = 3 0 ;4t ime = l i n s p a c e ( 0 , 2 * pi , n t ) ;5g = [ 0 , p i ] ;6[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 ) ;78b = b o u n d a r y m a t r i x ( ’ 0 ’ , ’ s i n ( t ) ’ , [ ] , [ ] , [ ] , [ ] , ’ 1 ’ , ’ t * cos ( t ) ’ ) ;9t a u = t ime ( 2 : end)− t ime ( 1 : end−1);1011f = 0 ;12u_0 = 0 ;131415[K,M, F ] = assema ( p , t , 1 , 1 , f ) ;1617u = c h e c k _ f u n c t i o n ( u_0 , p ) ;1819f o r k = 2 : nt ,2021[Q, G, H, R] = assemb ( b , p , e , t ime ( k ) ) ;22u ( : , k ) = (M+ t a u ( k−1)*(K+M+Q+H ) ) \ . . .23(M*u ( : , k−1)+ t a u ( k−1)*(G+F+R ) ) ;24end2526s u r f ( t ime , p , u )

A.1.4. Der Löser parabolic

Die PDE Toolbox bietet einen Löser parabolic zur Lösung von zeitabhängigen Problemenan. Er löst Propbleme vom Typ

dut−∇(c∇u)+au = f~n · (c∇u)+qu = g

u(0) = u0

Wir rufen ihn mit

parabolic(u0,time,b,p,e,t,c,a,f,d)

56

Page 61: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

auf, wobei time ein Vektor ist, der die Zeit t0 und tend oder ein Zeitintervall t0, t1, ..., tend enthält.Für die Definition der Koefficienten c,a,d und f vergeliche die Hilfe zu assema. Für die PDEToolbox gilt die folgende Konvention:

“In expressions for boundary conditions and PDE coefficients, the symbol t isused to denote time. The variable t is often used to store the triangle Matrix ofthe mesh. You can use any variable to store the triangle Matrix, but in the PartialDifferential Equation Toolbox expressions, t always denotes time.”[?]

Deshalb nennen wir hier die triangle matrix t besser “tt”, und die interne Zeit wird zu “t”.Wir lösen das Problem

ut−∆u = e−t sin(x) in (0,π)× (0,2π)

~n · (∇u) = 0 in x = 0u = t cos(t) in x = π

u(0) = 0.

Durch die Kompatibilität der xxx1d Funktionen mit den entsprechenden PDE-Toolbox-Funktionenläuft parabolic ohne weitere Anpassung.

1c l c , c l e a r , c l f ,2n t = 5 0 ;3g = [ 0 , p i ] ;4[ p , e , t t ] = i n i t m e s h ( g , ’hmax ’ , . 1 ) ;5t ime = l i n s p a c e ( 0 , 2 * pi , n t ) ;6b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 . 0 ’ , ’ t * cos ( t ) ’ , ’ 0 ’ , ’ 0 ’ , [ ] , [ ] ) ;7u_0 = 0 ;8u = p a r a b o l i c ( c h e c k _ f u n c t i o n ( u_0 , p ) , t ime , b , p , e , t t , . . .9’ 1 ’ , 0 , ’ exp(− t ) * s i n ( x ) ’ , 1 ) ;10s u r f ( t ime , p , u )

Beachte aber, dass parabolic für lineare finite Elemente auf Dreieckgittern programmiertwurde. Wenn wir unsere erweiterte Funktionalität (hier im Ort eindimensionale Probleme,finite Elemente vom Typ Lagrange-2) benutzen wollen, müssen wir einige Anpassungen vor-nehmen: Das Lagrange-2 Element ist definiert auf den Knoten des originalen Dreieicks undauf dessen Kantenmittelpunkten. Die Lösung wird also auf einem feineren Gitter berechnetals ursprünglich gegeben war.

Wir setzen der globalen Variable element_type den Wert element_type = 'L2' zu. DieFunktion parabolic wird intern assema und diese letztlich assema1d aufrufen, welche dannintern ein Hilfsgitter erstellt. Wir müssen nun zwei Dinge beachten:

(i) Der Anfangswert u0 muss auf dem neuen Gitter definiert sein.

(ii) Die grafische Ausgabe kann

57

Page 62: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

a) auf dem Hilfsgitter (surf(time1,p1,y) ), oder

b) auf dem originalen Gitter (surf(time1,p,y(1:2:end,:))) erfolgen.

1c l c , c l e a r , c l f , c l e a r a l l2n t = 5 0 ;3g = [ 0 , p i ] ;4[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , . 1 ) ;5t ime1 = l i n s p a c e ( 0 , 2 * pi , n t ) ;6g l o b a l e l e m e n t _ t y p e7e l e m e n t _ t y p e = ’L2 ’ ;8b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 . 0 ’ , ’ t * cos ( t ) ’ , ’ 0 ’ , ’ 0 ’ , [ ] , [ ] ) ;9[ p1 , e , t ] = r e f i n e m e s h ( g , p , e , t ) ;10u_0 = 0 ; i n l i n e ( ’ s i n ( x ) ’ ) ;11y = p a r a b o l i c ( c h e c k _ f u n c t i o n ( u_0 , p1 ) , . . .12t ime1 , b , p , e , t , ’ 1 ’ , 0 , ’ exp(− t ) * s i n ( x ) ’ , 1 ) ;13s u r f ( t ime1 , p1 , y )

A.1.5. Die Lösung zeitabhängiger Probleme mit den

odexxx-Lösern

Wir lösen noch einmal ein Problem ähnlich wie Aufgabe A.1.4, aber nun nicht indem wirdie Zeitdiskreitisierung explizit in einer Schleife programmieren, sondern indem wir zuerstden Ort diskretisieren und dann mittels der klassischen Linienmethode die Zeitintegration mitHilfe einer geeigneten Funktion aus der MATLAB ODE-Suite vornehmen. Die Syntax allerODE-Löser ist

[T,Y] = solver(odefun,tspan,y0,options),

wobei solver eine Funktion aus der Reihe ode45, ode23, ode113, ode15s, ode23s, ode23t,oder ode23tb ist. odefun ist die rechte Seite der Gleichung

ut = Φ(u,x, t)

also in unserem FallΦ = (K +M+Q+ lH ′H)u+F +G+H ′R

wobei alle Matrizen vom Ort und der Zeit abhängen können. Dies macht eine sehr spezielleProgrammierung der Funktion odefun notwendig. Die ODE-Löser sind so programmiert, dasssie am Ende der Parameterliste die (zusätzlichen) Parameter für odefun erhalten. Die folgen-de Funktion demonstriert diese Technik. Hier ist eine Schwierigkeit, dass der ODE Löser erstzur Laufzeit die Schreitweite und somit den Wert für t berechnet. Wenn eine der Matrizen/-Vektoren von vorgegebenen Daten zu festen Zeitpunkten tk abhängt (dies ist typischerweisebei Optimalitätssystemen der Fall) so müssen diese Daten von den Zeitpunkten tk auf denaktuellen Wert t interpoliert werden. Im Beispiel ist dies in den Zeilen 13–28 implementiert.

58

Page 63: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

1f u n c t i o n dy = odefun ( t , y , v a r a r g i n )23b = v a r a r g i n 1 ;4p = v a r a r g i n 2 ;5t r i = v a r a r g i n 3 ;6e = v a r a r g i n 4 ;7u = v a r a r g i n 5 ;8t t = v a r a r g i n 6 ;9l = 1 e2 ;10[ ~ ,Md, ~ ] = assema ( p , t r i , 0 , 1 , 0 ) ;11[K, ~ , ~ ] = assema ( p , t r i , ’ 1 ’ , 0 , 0 ) ;12[Q, G, H, R]= assemb ( b , p , e , t ) ;13e x a k t = f a l s e ;14f o r k = 1 : l e n g t h ( t t ) ,15i f t t ( k )== t ,16u t =u ( : , k ) ;17e x a k t = t r u e ;18break ;19end20end21i f ~ exak t ,22k =1;23whi le t t ( k ) < t ,24k = k +1;25end26u t = u ( : , k−1)*( t t ( k)− t ) / ( t t ( k)− t t ( k − 1 ) ) . . .27+u ( : , k ) * ( t− t t ( k−1 ) ) / ( t t ( k)− t t ( k−1 ) ) ;28end29dy = Md* u t +G+ l *H’*R−(K+Q+ l *H’*H)* y ;

Das Programm zur Lösung der zeitabhängigen PDE ist nun im wesentlichen ein Aufruf vonode15s:

1c l c23n t = 5 0 ;4g = [ 0 , p i ] ;5[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , . 1 ) ;6t ime1 = l i n s p a c e ( 0 , 2 * pi , n t ) ;78b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 . 0 ’ , ’ t * cos ( t ) ’ , ’ 0 ’ , ’ 0 ’ , [ ] , [ ] ) ;9y_0 = i n l i n e ( ’ s i n ( x ) ’ ) ;1011[ T ,X] = meshgr id ( t ime1 , p ) ;12f u n _ f = i n l i n e ( ’ exp(− t ) . * s i n ( x ) ’ ) ;

59

Page 64: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

13f = f u n _ f ( T ,X ) ;1415[ ~ ,Md, ~ ] = assema ( p , t , 0 , 1 , 0 ) ;1617o p t i o n s = o d e s e t ( ’ Re lTo l ’ ,1 e−3, ’ MaxOrder ’ , 5 , ’BDF ’ , ’ on ’ , ’ Mass ’ ,Md ) ;18[ t ime2 , y ] = ode15s ( @odefun , [ 0 2* p i ] , c h e c k _ F u n k t i o n ( y_0 , p ) , . . .19o p t i o n s , b , p , t , e , f , t ime1 ) ;2021s u r f ( t ime2 , p , y ’ )

A.1.6. Lösung stationärer Probleme mittels Zeitintegration

Oftmals ist man an der Lösung eines nichtlinearen stationären Problems interessiert. Als Bei-spiel diene

−c∆u+ f (u) = g in Ω

~n · (c∇u) = 0 auf ∂Ω.

Das Problem wird nach Diskretisierung im Ort zu

Ku+F(u)−G = 0,

wobei

F(u)i =

ˆ∆

f (uiφi)φ j dx

G =

ˆ∆

giφiφ j dx.

Wir müssen also ein nichtlineares Gleichungssystem mittels Newtonverfahren zu lösen. Dabeitaucht die Schwierigkeit auf, ein Startwert zu finden, für den das Newtonverfahren konver-giert. Dies ist aber oftmals in praxisrelevanten Problemen nicht möglich. Ein Ansatz ist, einenZeitableitungsterm hinzuzufügen

ddt

u− c∆u+ f (u) = g in Ω

~n · (c∇u) = 0 auf ∂Ω

u(0) = u0

wobei dann giltddt

u = 0⇔ u ist stationär.

Hier ist die Wahl des Anfangswertes wesentlich unkritischer als die Wahl eines Startwertesfür das obige Newtonverfahren. Allerdings taucht hier die Schwierigkeit auf, zu entscheiden,wann die Lösung stationär ist. Ein Kriterum kann sein, solange zu rechen, bis

ddt

u≤ ε.

60

Page 65: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

Daraus folgt, wir können unsere Zeitintegration stoppen, wenn die obige Bedingung erfülltist. Dazu können die event functions der ODE-Löser benutzt werden. Das Beispiel illustriertdies.

Die Funktion muss folgendermaßen definiert sein:

f u n c t i o n [ va lue , i s t e r m i n a l , d i r e c t i o n ] = e v e n t f u n ( t , y )% e v e n t f u n c t i o n t h a t s t o p p s t h e e v a l u a t i o n o f t h e t i m e% i n t e g r a t i o n . C r i t e r i a f o r b e i n g s t a t i o n a r y% i s | | dY / d t ( t , Y ) | | < 1e−3.

v a l u e = norm ( dY ( t , y ))−1 e−3; % v a l u ei s t e r m i n a l = 1 ; % s t o p p s t h e i n t e g r a t i o nd i r e c t i o n = −1; % n e g a t i v e d i r e c t i o nend

Jetzt können wir das Zeitintervall “offen” lassen:

o p t i o n s = o d e s e t ( ’ Mass ’ ,MM, ’ Re lTo l ’ ,1 e − 3 , . . .’ J a c o b i a n ’ ,@ddY, ’ S t a t s ’ , ’ o f f ’ , ’ Eve n t s ’ , @eventfun ) ;

s o l = ode15s (@dY, [ 0 , I n f ] , y0 , o p t i o n s ) ;

Nach der Rechnung stellen wir fest, dass das Beispiel nach 0.2514 s stationär ist:

>> s o l . t ime ( end )ans =

0 .2514>>

A.1.7. 1D PDEtool und die Klasse ocp

Wir demonstrieren in diesem Beispiel, wie man die 1D Erweiterung zusammen mit der Klasseocp benutzen kann.

Wir lösen das Optimalsteuerproblem1

min12(‖y− sin(x)‖2 +10−3‖u‖2)

unter den Nebenbedingungen

−yxx = u in (0,π)y = 0 in 0,π

und10−3u+ y≤ 0.8 in (0,π).

Im folgenden Programm benutzen wir die Klasse ocp zusammen mit einzelnen Funktionender PDE Toolbox.

1Wobei wir hier die Nomenklatur der Optimalen Steuerung benutzen: y ist der Zustand und u die Steuerung.

61

Page 66: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

1c l c ; c l e a r ;23g = [ 0 , p i ] ;45b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ ) ;67[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 ) ;89gd = g r i d d ( ) ;10gd = s e t ( gd , ’ p ’ , p , ’ e ’ , e , ’ t ’ , t ) ;11gd = s e t ( gd , ’ g ’ , g , ’ b ’ , b ) ;12p l o t ( gd )1314o = ocp ;1516o = s e t ( o , ’ y_d ’ , @sin , ’ u_d ’ , 0 , . . .17’mu_a ’ , 1 , ’ t y p e ’ , ’L2 ’ , ’ s o l v e r ’ , ’ i p ’ , . . .18’ p d e _ t y p e ’ , ’ e l l i p t i c ’ , ’ kappa ’ , 1e − 3 , . . .19’ g r i d ’ , gd , ’ l a v r e n t i e v ’ ,1 e − 3 , . . .20’ c ’ ,1 , ’ a ’ , 0 , ’ debug ’ , t r u e , ’mu_e ’ ,1 e − 3 , . . .21’ p o i n t s ’ ,1 e3 , ’ r e f i n e m e n t s ’ , 3 , . . .22’ n e w t o n _ s t a r t ’ , t r u e , ’ y_b ’ , . 8 ) ;2324o = d e f i n e ( o ) ;2526o = s o l v e ( o ) ;2728p l o t ( o )

A.1.8. Kompatibilität zwischen Matlab's PDE Toolbox und den

1D Funktionen

Um die Kompatibilität zwischen der PDE Toolbox und den 1D-Erweiterungen zu demonstrie-ren, betrachten wir das Problem

−∆u = 8 in Ω

u = 0 on ∂Ω

wobei Ω=(0,1)k, k = 1,2, und ∂Ω der Rand von Ω ist. Das Programm benutzt nur MATLAB’sPDE Toolbox Syntax. Nur die Definition des Gebietes und der Randbedinungen ist von derDimension abhängig.

1f u n c t i o n b e i s p i e l 7 ( dim )2i f dim == 2 ,

62

Page 67: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

3g = u n i t s q u a r e ;4b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ ) ;5b = [ b , b ] ;6e l s e7g = [ 0 , 1 ] ;8b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ ) ;9end10f = 8 ;11[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 ) ;12[ p , e , t ] = r e f i n e m e s h ( g , p , e , t ) ;13[K,M, F ] = assema ( p , t , 1 , 0 , f ) ;14[Q, G, H, R] = assemb ( b , p , e ) ;1516u = (K+1 e3 *H’*H ) \ ( F ) ;1718s u b p l o t ( 2 , 1 , 1 ) , pdemesh ( p , e , t , u ) ;19s u b p l o t ( 2 , 1 , 2 ) , p d e s u r f ( p , t , u ) ;20end

Wir lösen das Problem

−∆u = 8 in Ω

u = 0 auf ∂Ω1

~n · (c∇u) = 0 auf ∂Ω2

Im zweidimensionalen Fall Seien ∂Ω1 und ∂Ω2 jeweils zwei gegenüberliegende Kanten, imeindimensionalen Fall seien ∂Ω1 und ∂Ω2 die beiden Randpunkte des Intervalls Ω. Wir be-nutzen die erweiterte Syntax der Funktion boundarymatrix. Hier wird eine Liste mit Rand-bedingungen übergeben.

1f u n c t i o n b e i s p i e l 7 a ( dim )2i f dim == 2 ,3g = u n i t s q u a r e ;4b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ , [ ] , [ ] , ’ 1 ’ , ’ 0 ’ , . . .5’ 0 ’ , ’ 0 ’ , [ ] , [ ] , ’ 0 ’ , ’ 0 ’ , [ ] , [ ] ) ;6e l s e7g = [ 0 , 1 ] ;8b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ , ’ 0 ’ , ’ 0 ’ , [ ] , [ ] ) ;9end10f = 8 ;1112[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , 0 . 1 ) ;13[ p , e , t ] = r e f i n e m e s h ( g , p , e , t ) ;14[K, ~ , F ] = assema ( p , t , 1 , 0 , f ) ;15[ ~ , ~ ,H, ~ ] = assemb ( b , p , e ) ;

63

Page 68: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

1617u = (K+1 e3 *H’*H ) \ ( F ) ;1819s u b p l o t ( 2 , 1 , 1 ) , pdemesh ( p , e , t , u ) ;20s u b p l o t ( 2 , 1 , 2 ) , p d e s u r f ( p , t , u )21end

A.1.9. Nichtlineares Konvektions-Diusions-Problem: Die

Burgers-Gleichung

Wir betrachten einen klassischen Vertreter nichtlinearer Konvektions-Diffusions Probleme ineiner Ortsdimension, die zeitabhängige Burgers-Gleichung:

ut− cuxx +νuux = f in Σ := Ω× (t0,T )u = g auf Γ := ∂Ω× (t0,T )

u(t0) = u0 in Ω.

Oft wird die Burgers-Gleichung als eindimensionales Gegenstück zu den Navier-Stokes Glei-chungen gesehen. Wir wählen eine bekannte Konfiguration: Sei Ω = (0,π), t0 = 0 und T = 8.Setze weiter c= 10−2, ν = 1, f = g≡ 0 sowie u0 = sin(x). Hier wechselt die Kovektion~b= νubei x = π/2 das Vorzeichen, die Lösung wird also zu x = π/2 hin verschoben, ein sogenannterSchock entsteht. Im folgenden Programm wird das Problem mit dem semilinearen Ansatz ge-löst, vergleiche die Aufdatierung in der Programmzeile B = convection1d(p,u(:,k-1)).Wie in Beispiel 5.2 spart man sich in jedem Zeitschritt die Lösung einer nichtlinearen Glei-chung.

c l e a r a l l ; c l f ; c l c ;

g = [ 0 , p i ] ;[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , . 0 5 ) ;n t = 2 0 ; t ime = l i n s p a c e ( 0 , 8 , n t ) ;b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ ) ;

[K,M, ~ ] = assema ( p , t , . 0 1 , 1 , 0 ) ;[ ~ , ~ ,H, ~ ] = assemb ( b , p , e ) ;

u = s i n (2* p ( 1 , : ) ) ’ ;d t = t ime (2)− t ime ( 1 ) ;

f o r k =2: nt ,B = c o n v e c t i o n 1 d ( p , u ( : , k−1 ) ) ;u ( : , k ) = (M+ d t * (K+B+1 e3 *(H’*H ) ) ) \M*u ( : , k−1);

end

64

Page 69: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

s u r f ( p ( 1 , : ) , t ime , u ’ )

Abbildung A.1 zeigt die Lösung u der Burgers-Gleichung zu den obigen Parametern.

Abbildung A.1.: Lösung u der Burgers-Gleichung.

Alternativ lösen wir die Burgers-Gleichung in der nichtlinearen Form. In den Zeilen 16–24haben wir ein ungedämpftes Newtonverfahren implementiert.

1c l e a r a l l ; c l f ; c l c ;23g = [ 0 , p i ] ;4[ p , e , t ] = i n i t m e s h ( g , ’hmax ’ , . 0 2 5 ) ;5n t = 2 0 ; t ime = l i n s p a c e ( 0 , 8 , n t ) ;6b = b o u n d a r y m a t r i x ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ ) ;78[K,M, ~ ] = assema ( p , t , . 0 1 , 1 , 0 ) ;9[ ~ , ~ ,H, ~ ] = assemb ( b , p , e ) ;10B = c o n v e c t i o n 1 d ( p , 1 ) ;1112u = s i n (2* p ( 1 , : ) ) ’ ;13d t = t ime (2)− t ime ( 1 ) ;14f o r k =2: nt ,15u ( : , k ) = u ( : , k−1);16f o r l = 1 : 8 ,17d = −(M+ d t * (K+2*B* d i a g ( u ( : , k ) ) + ( H’*H ) ) ) \ . . .18(M*( u ( : , k)−u ( : , k−1))+ d t * (K*u ( : , k )+ u ( : , k ) . * . . .19(B*u ( : , k ) ) + ( H’*H)* u ( : , k ) ) ) ;20u ( : , k ) = u ( : , k )+ d ;21i f norm ( d ) <1 e−6,22break23end24end25end2627s u r f ( p ( 1 , : ) , t ime , u ’ )

65

Page 70: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

A.1.10. Konvektions-Diusions-Problem auf Q-Gitter

Sei Ω = (0,1)× (0,4). Wir lösen das Konvektions-Diffusions Problem

−c∆u+~b ·∇u+au = f in Ω

~n · (c∇u) = 0 on Γ

wobei c = 1,~b = (0,10sin(πx1)) und a = 0.1. Die Quelle ist definiert als

f =

10 für (x1x2) ∈ (0.05,0.1)× (1.2,1.3)20 für (x1x2) ∈ (0.85,0.9)× (0.6,0.8)0 sonst.

Dies Aufgabe modelliert ein (langsam) fließendes Medium in einem Kanal mit zwei Quellen(Wärme, Verschmutzung). Die Variable u ist dann die Temperatur bzw. die Konzentration desverschmutzenden Stoffes. Wir benutzen lineare finite Elemente auf einem Vierecksgitter.

1c l c , c l f , c l e a r a l l23nx1 = 4 0 ; nx2 = 160 ;4x1 = l i n s p a c e ( 0 , 1 , nx1 ) ;5x2 = l i n s p a c e ( 0 , 4 , nx2 ) ;6[ p , e , t ] = i n i t q m e s h ( x1 , x2 ) ;78b = [ b o u n d a r y m a t r i x ( ) b o u n d a r y m a t r i x ( ) ] ;910f1 = x i ( p , ’ ( x > 0 . 0 5 ) &(x < 0 . 1 ) &(y > 1 . 2 ) &(y < 1 . 3 ) ’ ) *10* ones ( s i z e ( p

( 1 , : ) ) ) ’ ;11f2 = x i ( p , ’ ( x > 0 . 8 5 ) &(x < 0 . 9 ) &(y > 0 . 6 ) &(y < 0 . 8 ) ’ ) *20* ones ( s i z e ( p

( 1 , : ) ) ) ’ ;12f = f1 + f2 ;1314[K,M, F ] = assemqa ( p , t , ’ 1 ’ , ’ . 1 ’ , f ) ;15[Q, G, H, R] = assemb2Dhigher ( b , p , e ) ;16B = c o n v e c t i o n q ( p , t , ’ 0 ’ ’ 10* s i n ( p i *x ) ’ ) ;1718u = (K+M+Q+B+1 e2 *(H’*H) ) \ ( F+G+1 e2 *H’*R) ;1920p d e q s u r f ( p , t , u ) ; co lormap h o t21a x i s ( [ 0 , 1 , 0 , 4 ] ) ; a x i s e q u a l

A.1.11. Eine Storansportsimulation

Es sei ein L-förmiges Gebiet Ω mit einer rechteckigen “Insel” gegeben. Dazu sei~b die (mit-tels der Navier-Stokes Gleichungen vorberechnete oder einer durch ein Experiment ermittelte)

66

Page 71: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

0 0.5 1 1.5 2 2.5 3

0

0.2

0.4

0.6

0.8

1

Abbildung A.2.: Gebiet Ω und das bekannte Strömungsfeld~b.

Strömung eines Mediums in Ω, siehe Abbildung A.2. Sei u die Konzentration eines Stoffes(zum Beispiel Tinte) in einem Fluid, (zum Beispiel Wasser) das am linken Rand von Ω miteinem gegebenen Konzentrationsprofil einströmt. Bedingt durch das nichttriviale Strömungs-feld in Ω und die Diffusion wird der Stoff im Fluid verteilt. Dies wird mittels der Konvektions-Diffusions-Gleichung

dddt

u− c∆u+~b ·u = f in Ω× (0, te)

~n · (c∇u) = 0 in Γ× (0, te)u = uΓe in Ω

modelliert. Es seien zwei Quellen für den verschmutzenden Stoff gegeben, wobei nur jeweilseine Mengeneinheit 2 hinzu gegeben wird. Mit den Zeitpunkten t1 und t2 an denen wir mitdem Eingießen beginnen, erhalten wir zwei Kontrollvariablen. Damit können wir die Quelleals f = χt∈(t1,t1+1) · χx∈Ω1 + χt∈(t2,t2+1) · χx∈Ω2 modellieren. Wir wählen d = 1 und als Dif-fusionsparameter c = 0.008. Das folgende MATLAB Programm simuliert dieses Experimentnumerisch. Wir formulieren das Programm als Funktion, die von den beiden Eingießzeitpunk-ten tpr1 und tpt2 abhängt. Mit der Variation dieser Variablem lässt sich zum Beispiel dasAusflussprofil der Konzentration des verschmutzenden Stoffes steuern.

1f u n c t i o n [ u , p , e , t , t i m e s ] = b e i s p i e l 1 0 ( t p t 1 , t p t 2 )23[w]= l o a d ( ’ g r i d _ n s _ s t u f e _ i n s e l ’ ) ;4[ w2]= l o a d ( ’ d a t a _ u _ v _ s t u f e _ i n s e l ’ ) ;

2Dazu ist bei konstanter Menge pro Zeiteinheit: “In einer einer Zeiteinheit” äquivalent.

67

Page 72: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

56p = w. p ; e = w. e ; t = w. t ;7u = w2 . u ; v = w2 . v ;8g = [ ] ;910BN = b o u n d a r y m a t r i x ( ’ 0 ’ , ’ 0 ’ ) ;11BN = BN( : , 1 ) ;12BD = b o u n d a r y m a t r i x ( ’ 1 ’ , ’ 0 . 1 * s i n ( p i * s ) ’ ) ; BD = BD( : , 1 ) ;1314b = z e r o s ( max ( l e n g t h (BD) , l e n g t h (BN) ) , 1 0 ) ;1516b ( 1 : l e n g t h (BN) , 2 : 1 0 ) = [BN BN BN BN BN BN BN BN BN] ;17b ( 1 : l e n g t h (BD) , 1 ) = BD ;1819un = p d e p r t n i ( p , t ( : , u . e l i n d ) , u . d ) ;20vn = p d e p r t n i ( p , t ( : , v . e l i n d ) , v . d ) ;21f1 = x i ( p , ’ ( x > 0 . 3 ) &(x < . 4 ) &(y > 0 . 4 5 ) &(y < . 5 5 ) ’ ) * ones ( s i z e ( p ( 1 , : ) )

) ’ ;22f2 = x i ( p , ’ ( x > 0 . 3 ) &(x < . 4 ) &(y > 0 . 8 5 ) &(y < . 9 5 ) ’ ) * ones ( s i z e ( p ( 1 , : ) )

) ’ ;2324[K,M, F1 ] = assema2Dhigher ( g , p , e , t , ’ . 0 0 8 ’ , ’ . 0 0 8 ’ , ’ 0 ’ , f1 ) ;25[Q, G, H, R] = assemb ( b , p , e ) ;26B = c o n v e c t i o n 2 D h i g h e r ( p , e , t , un , vn , g ) ;2728u0 = (K+M+Q+B+1 e2 *(H’*H) ) \ ( G+1 e2 *H’*R) ;2930[ ~ , ~ , F2 ] = assema2Dhigher ( g , p , e , t , ’ . 0 0 8 ’ , ’ . 0 0 8 ’ , ’ 0 ’ , f2 ) ;31[ ~ ,Md, ~ ] = assema2Dhigher ( g , p , e , t , 0 , 1 , 0 ) ;3233o p t i o n s = o d e s e t ( ’ Mass ’ ,Md) ;34[ t imes , u ] = ode15s ( @odefun , l i n s p a c e ( 0 , 1 0 , 2 0 0 ) , u0 , . . .35o p t i o n s , K,M, F1 , F2 , B , Q, G, H, R , t p t 1 , t p t 2 ) ;3637%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−38f u n c t i o n dy = odefun ( t , y , K,M, F1 , F2 , B , Q, G, H, R , t p t 1 , t p t 2 )39dy = ( ( t < t p t 1 +1) * ( t > t p t 1 ) *F1 +( t < t p t 2 +1) . . .40* ( t > t p t 2 ) *F2+G+H’*R) . . .41−(K+M+B+1 e2 *(H’*H) +Q) *y ;42end43end

Die folgenden Abbildungen zeigen Schnappschüsse der Lösung u mit dem Aufruf beispiel10(1,2).

68

Page 73: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

Abbildung A.3.: Schnappschüsse zu den Zeitpunkten t = 1, t = 2, t = 2.5, t = 3 und t = 4.

69

Page 74: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

A.2. Objektorientierter Code

A.2.1. Konvektions-Diusionsgleichung in 1D

Im ersten Beispiel lösen wir eine Konvektions-Diffusionsgleichung

−uxx(x)+10 ·ux(x)+u(x) = 1 in (0,π)ux(0)+u(0) = 0

u(π) = 0

in einer Raumdimension. Wir benutzen lineare FE.

g r = gr id1D ( [ 0 p i ] , 0 . 0 1 ) ;fem = lagrange11D ;g r . makeBoundaryMatr ix ( g r . robinBC ( ’ 1 ’ , ’ 0 ’ ) , g r . d i r i c h l e t B C ( ’ 1 ’ , ’ 0 ’ ) ) ;

[K,M, F ] = fem . assema ( gr , 1 , 1 , 1 ) ;[Q, G, H, R] = fem . assemb ( g r ) ;B = fem . c o n v e c t i o n ( gr , 1 0 ) ;

y = (K+M+B+1 e6 *(H’*H)+Q ) \ ( F+(1 e6 *H’*R)+G ) ;

f i g u r e ( 1 )c l fp l o t ( g r . p , y , ’ . ’ ) ;

A.2.2. Burgers's Gleichung

Wir lösen mittels semi-implizitem Eulerverfahren die Burgers-Gleichung

ut−uxxu ·ux = 0u(0,x) = sin(2 · x)u(t,0) = 0u(t,π) = 0

wobei t ∈ (0,5) gewählt ist.

n t = 200 ;t ime = l i n s p a c e ( 0 , 5 , n t ) ;

g r = gr id1D ( [ 0 , p i ] , 0 . 0 0 5 ) ;g r . makeBoundaryMatr ix ( g r . d i r i c h l e t B C ( ’ 1 ’ , ’ 0 ’ ) , g r . d i r i c h l e t B C ( ’ 1 ’ , ’ 0 ’ ) ) ;

fem = lagrange11D ;[K,M, ~ ] = fem . assema ( gr , 0 . 0 0 1 , 1 , 0 ) ;

70

Page 75: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

[ ~ , ~ ,H, ~ ] = fem . assemb ( g r ) ;

u = s i n (2* gr . p ( 1 , : ) ) ’ ;d t = t ime (2)− t ime ( 1 ) ;

f o r k =2: nt ,B = fem . c o n v e c t i o n ( gr , u ( : , k−1 ) ’ ) ;u ( : , k ) = (M+ d t * (K+B+1 e6 *(H’*H ) ) ) \M*u ( : , k−1);

endf i g u r e ( 2 )c l fs u r f ( g r . p ( 1 , : ) , t ime , u ’ ) ;

A.2.3. Konvektions-Diusionsgleichung in 2D

Wir lösen die Konvektions-Diffusionsgleichung

−∆u+(−10,10) ·∇u+u = 10 in Ω

u = 0 auf ∂Ω

wobei Ω die Einheitskreisfläche ist.

% c r e a t e a u n i t c i r c l e and mesh i tgr = gr id2D ( ) ;g r . u n i t c i r c l e ( ) ;g r . r e f i n e m e s h ( ) ;g r . p l o t ;

% c r e a t e boundary c o n d i t i o n sdb = gr . b o u n d a r y C o n d i t i o n ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ ) ;g r . makeBoundaryMatr ix ( db , db , db , db ) ;

f e = lag range12D ( ) ;[K,M, F ] = f e . assema ( gr , ’ 1 ’ , ’ 1 ’ , ’ 10 ’ ) ;B = f e . c o n v e c t i o n ( gr , [ −1 0 , 1 0 ] ’ ) ;[Q, G, H, R] = f e . assemb ( g r ) ;y = (K+M+B+1 e6 *(H’*H)+Q ) \ ( F+(1 e6 *H’*R)+G ) ;p d e s u r f ( g r . p , g r . t , y )

71

Page 76: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

A.2.4. Konvektions-Diusionsgleichung mit nichtlinearer Quelle

Die Aufgabe stammt aus B/W 2010.

−∇ · (κ∇u)+~U∇u− w(u) = 0u = g|ΓD

~n ·κ∇u = 0|ΓN

Das Gebiet ist das Rechteck (0,1.8)× (0,0.9). Wegen der Notwendigkeit, einen Gaseinlasszu modellieren, wird das Rechteck durch ein Polygon mit sechs Punkten definiert.

f u n c t i o n test_BW_FEMc l fg r = gr id2D ( ) ;g r . po lygon ( [ 0 1 . 8 1 . 8 0 0 0 ] , [ 0 0 0 . 9 0 . 9 0 . 6 0 . 3 ] ) ;g r . r e f i n e m e s h ( ) ;g r . r e f i n e m e s h ( ) ;np = gr . n P o i n t s ;

f p r i n t f ( [ ’Mesh c o n s i s t s o f ’ , . . .num2s t r ( g r . n P o i n t s ) , ’ g r i d p o i n t s . \ n ’ ] )

f i g u r e ( 1 )g r . p l o t

bcTempIn l e t = g r . b o u n d a r y C o n d i t i o n ( [ ] , [ ] , ’ 1 ’ , ’ 950 ’ ) ;bcTempOvera l l = g r . b o u n d a r y C o n d i t i o n ( [ ] , [ ] , ’ 1 ’ , ’ 300 ’ ) ;

bc Fu e l = gr . b o u n d a r y C o n d i t i o n ( [ ] , [ ] , ’ 1 ’ , ’ 0 . 028 ’ ) ;bcOx = gr . b o u n d a r y C o n d i t i o n ( [ ] , [ ] , ’ 1 ’ , ’ 0 . 226 ’ ) ;bcProd = gr . b o u n d a r y C o n d i t i o n ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ ) ;bc Nu l l = g r . b o u n d a r y C o n d i t i o n ( [ ] , [ ] , ’ 1 ’ , ’ 0 ’ ) ;

bcNeuman = gr . b o u n d a r y C o n d i t i o n ( ’ 0 ’ , ’ 0 ’ ) ;

fem = lagrange12D ( ) ;[K,M, ~ ] = fem . assema ( gr , ’ 2 ’ , ’ 1 ’ , ’ 0 ’ ) ;

g r . makeBoundaryMatr ix ( bcNeuman , bcNeuman , . . .bcNeuman , bcNul l , bcFuel , bc Nu l l ) ;

[ ~ , ~ ,H, RF ] = fem . assemb ( g r ) ;

g r . makeBoundaryMatr ix ( bcNeuman , bcNeuman , . . .bcNeuman , bcNul l , bcOx , bc Nu l l ) ;

[ ~ , ~ , ~ ,RO] = fem . assemb ( g r ) ;

72

Page 77: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

gr . makeBoundaryMatr ix ( bcNeuman , bcNeuman , . . .bcNul l , bcNul l , bcProd , bc Nu l l ) ;

[ ~ , ~ , ~ , RP ] = fem . assemb ( g r ) ;

g r . makeBoundaryMatr ix ( bcNeuman , bcNeuman , . . .bcNeuman , bcTempOveral l , bcTempIn le t , bcTempOvera l l ) ;

[ ~ , ~ , ~ ,RT] = fem . assemb ( g r ) ;

N = s p a r s e ( g r . n P o i n t s , g r . n P o i n t s ) ;B = fem . c o n v e c t i o n ( gr , [ 5 0 0 ] ’ ) ;

DD = −[K+B+1 e8 *(H’*H) N N N;N K+B+1 e8 *(H’*H) N N;N N K+B+1 e8 *(H’*H) N;N N N K+B+1 e8 *(H’*H ) ] ;

MM = [M N N N;N M N NN N M NN N N M] ;

FF = [1 e8 *H’*RT ;1 e8 *H’*RF ;1 e8 *H’*RO;1 e8 *H’*RP ] ;

y0 = −DD\ FF ;f p r i n t f ( ’ S t a r t s o l v i n g t ime d e p e n d e n t problem . \ n ’ ) ;

% d e f i n e ode−o p t i o n so p t i o n s = o d e s e t ( ’ Mass ’ ,MM, ’ Re lTo l ’ ,1 e − 3 , . . .

’ J a c o b i a n ’ ,@ddY, ’ S t a t s ’ , ’ o f f ’ , ’ Eve n t s ’ , @eventfun ) ;

f p r i n t f ( ’ Compute t r a n s i e n t s o l u t i o n . . . \ n ’ ) ;t i c[ x , y ] = ode15s (@dY, l i n s p a c e ( 0 , 0 . 2 , 6 0 0 ) , y0 , o p t i o n s ) ;y = y ( end , : ) ’ ;

f p r i n t f ( [ ’ . . . f i n i s h e d a f t e r ’ , num2s t r ( t o c ) , ’ s e c . \ n ’ ] )f p r i n t f ( [ ’ S o l u t i o n s t a t i o n a r y a t : ’ , num2s t r ( x ( end ) ) , ’ \ n ’ ] ) ;

temp = y ( 1 : g r . n P o i n t s , : ) ;f u e l = y (1+ gr . n P o i n t s : 2 * g r . n P o i n t s , : ) ;

73

Page 78: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

ox = y (1+2* gr . n P o i n t s : 3 * g r . n P o i n t s , : ) ;p rod = y (1+3* gr . n P o i n t s : 4 * g r . n P o i n t s , : ) ;

% s o l . x i s t h e t i m e

f i g u r e ( 1 )c l f

s u b p l o t ( 2 , 2 , 1 )p d e p l o t ( g r . p , g r . e , g r . t , ’ x y d a t a ’ , temp ( : , end ) , ’ c o n t o u r ’ , ’ on ’ )co lormap j e ta x i s e q u a lc o l o r b a r

s u b p l o t ( 2 , 2 , 2 )p d e p l o t ( g r . p , g r . e , g r . t , ’ x y d a t a ’ , f u e l ( : , end ) , ’ c o n t o u r ’ , ’ on ’ )co lormap j e ta x i s e q u a lc o l o r b a r

s u b p l o t ( 2 , 2 , 3 )p d e p l o t ( g r . p , g r . e , g r . t , ’ x y d a t a ’ , ox ( : , end ) , ’ c o n t o u r ’ , ’ on ’ )co lormap j e ta x i s e q u a lc o l o r b a r

s u b p l o t ( 2 , 2 , 4 )p d e p l o t ( g r . p , g r . e , g r . t , ’ x y d a t a ’ , p rod ( : , end ) , ’ c o n t o u r ’ , ’ on ’ )view ( [ 0 , 9 0 . 0 ] )co lormap j e ta x i s e q u a lc o l o r b a r

% end o f t h e main program

% We d e f i n e now some l o c a l ( n e s t e d ! ) f u n c t i o n sf u n c t i o n dy = dY ( t , y )

% RHS o f Sys temdy = DD*y + MM*w( t , y ) + FF ;

end

% i t ’ s a good i d e a t o g i v e ode15s t h e Jacobian , so here we are . .f u n c t i o n d = ddY ( t , y )

74

Page 79: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

%d e r i v a t e o f dYd = DD + . . .

MM*dw ( t , y ) ;end

% t h e d e f i n i t i o n o f t h e c h e m i c a l s o u r c e termf u n c t i o n d = w( ~ ,Y)

% c h e m i c a l s o u r c e term f o r t h e% B u f f o n i / W i l l c o x paper p r o j e c t% w = g ( Y , T )% Si mp le one s t e p r e a c t i o n i s 2H2 + O2 => H2O% F i l l t h e Data by u s i n g v a l u s from c a n t e r a% p o s s i b l e i s a l s o a t e m p e r a t u r e d e p e n d e n t% i m p l e m e n t a t i o n f o r A% M o l e c u l a r a r w e i g h t s : t a k e t h i s from L i t e r a t u r e% R e a c t i o n da taA = 5 . 5 e11 ;E = 4 . 5 e3 ;nu = [2 1 −2] ’ ;wc= [ 2 . 0 1 6 3 1 . 9 1 8 . 0 ] ’ ;R = 8 . 3 1 4 4 7 2 ;rho = 1 . 3 9 e−3;Q = 9800 ;% t h i s p a r t i s v a l i d f o r a l l s p e c i e s ,% because o f t h e use o f a% g l o b a l mechanisms c a l a r _ r a t e = . . .

( rho *Y( np +1:2* np ) / wc ( 1 ) ) . ^ nu ( 1 ) . * . . .( rho *Y(2* np +1:3* np ) / wc ( 2 ) ) . ^ nu ( 2 ) . . .. *A. * exp(−E . / ( R . *Y( 1 : np ) ) ) ;

dY = −1/ rho *[ wc ( 1 ) * nu ( 1 ) * s c a l a r _ r a t e ; . . .wc ( 2 ) * nu ( 2 ) * s c a l a r _ r a t e ; wc ( 3 ) * nu ( 3 ) * s c a l a r _ r a t e ] ;

% f o r t e m p e r a t u r e i s d Y _ f u e l / d t * QdT = dY(2* np +1:3* np )*Q;d = [ dT ; dY ] ;

end

% we need t h e J a c o b i a n o f our c h e m i s c a l s o u r c e term ,%r a t h e r c r i p t i c . . .f u n c t i o n d = dw ( ~ ,Y)

% t h e d e r i v a t i v e o f dwA = 5 . 5 e11 ;E = 4 . 5 e3 ;

75

Page 80: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

nu = [2 1 −2] ’ ;wc= [ 2 . 0 1 6 3 1 . 9 1 8 . 0 ] ’ ;R = 8 . 3 1 4 4 7 2 ;rho = 1 . 3 9 e−3;Q = 9800 ;% computed on paper and coded as a " m a t r i x g r a d i e n t "d _ r a t e = [ . . .

d i a g ( ( rho / wc ( 1 ) *Y( np +1:2* np ) ) . ^ ( nu ( 1 ) ) . * . . .( rho / wc ( 2 ) *Y(2* np +1:3* np ) ) . ^ nu ( 2 ) . * . . .(A* exp(−E . / ( R . *Y( 1 : np ) ) ) ) . * ( E . / R . / ( Y( 1 : np ) . ^ 2 ) ) ) , . . .d i a g ( nu ( 1 ) * ( rho / wc ( 1 ) ) * . . .( rho *Y( np +1:2* np ) / wc ( 1 ) ) . ^ ( nu ( 1 ) − 1 ) . * . . .( rho *Y(2* np +1:3* np ) / wc ( 2 ) ) . ^ nu ( 2 ) . * . . .(A* exp(−E . / ( R . *Y( 1 : np ) ) ) ) ) , . . .d i a g ( nu ( 2 ) * ( rho / wc ( 2 ) ) * ( rho / wc ( 1 ) . . .

*Y( np +1:2* np ) ) . ^ ( nu ( 1 ) ) . * . . .( rho / wc ( 2 ) *Y(2* np +1:3* np ) ) . ^ ( nu ( 2 ) − 1 ) . * . . .(A* exp(−E . / ( R . *Y( 1 : np ) ) ) ) ) , . . .

N ] ;% i n 0D case t h i s i s a d y a d i c p r o d u c t . . .d =−1/ rho * [Q*wc ( 3 ) * nu ( 3 ) * d _ r a t e ; wc ( 1 ) * nu ( 1 ) * d _ r a t e ; . . .

wc ( 2 ) * nu ( 2 ) * d _ r a t e ; wc ( 3 ) * nu ( 3 ) * d _ r a t e ] ;end

% e v e n t t o s t o p p t h e t i m e i n t e g r a t i o n i f s o l u t i o n i s s t a t i o n a r yf u n c t i o n [ va lue , i s t e r m i n a l , d i r e c t i o n ] = e v e n t f u n ( t , y )

% e v e n t f u n c t i o n t h a t s t o p p s t h e e v a l u a t i o n o f t h e t i m e% i n t e g r a t i o n . C r i t e r i a f o r b e i n g% s t a t i o n a r y i s | | dY / d t ( t , Y ) | | <% 1e−3.v a l u e = norm ( dY ( t , y ))−1 e−3;%i s t e r m i n a l = 1 ; % s t o p p s t h e i n t e g r a t i o nd i r e c t i o n = −1; % n e g a t i v e d i r e c t i o n

endend

A.2.5. Diusionsproblem in 3D

Wir lösen die Gleichung

−κ∆u+u = 0~nκ∇u = 0 auf ∂Ω|N

u = f (x,y,z) auf ∂Ω|D

76

Page 81: PDEs Lösen mit Matlab - TU Bergakademie Freiberg · PDF fileMatlab PDE-Toolbox, Erweiterungen, Finite-Elemente auf Viereck-Gittern. ... “The Decomposed Geometry Matrix DL contains

A. Beispielprogramme

wobei Ω der Einheitswürfel ist. Die Randfläche ∂Ω|D ist die erste Seitenfläche des Würfelsund f = 100−10∗ ((x−0.5)2 +(y−0.5)2). Die Lösung des linearen Gleichungssystems er-folgt per PCG, wobei die Vorkonditionierer eine unvollständige Choleski-Zerlegung der Ma-trix.

c l e a r a l ln R e f i n e m e n t s = 4 ;g r2 = gr id2D ( ) ;g r2 . u n i t s q u a r e ;f o r k = 1 : n R e f i n e m e n t s

g r2 . r e f i n e m e s h ( ) ;endgr2 . p l o t

g r3 = g r i d 3 D p r ;g r3 . expand ( gr2 , l i n s p a c e ( 0 , 1 , 2 ^ n R e f i n e m e n t s + 1 ) )g r3 . p l o t f a c e s ;

db = gr3 . d i r i c h l e t B C ( ’ 1 ’ , ’ 100−10*((x−0 . 5 ) . ^ 2 + ( y−0 . 5 ) . ^ 2 ) ’ ) ;nb = gr3 . robinBC ( ) ;g r3 . makeBoundaryMatr ix ( db , nb , nb , nb , nb , nb ) ;

fem = b i l i n e a r 3 D ( ) ;[K,M, F ] = fem . assema ( gr3 , ’ 11 ’ , ’ 1 ’ , ’ 0 ’ ) ;[Q, G, H, R] = fem . assemb ( gr3 ) ;L = i c h o l (K+M+1 e6 *(H’*H)+Q ) ;y = pcg (K+M+1 e6 *(H’*H)+Q, ( F+1 e6 *H’*R+G) , 1 e−8 ,200 ,L , L ’ ) ;

f i g u r e ( 1 )g r3 . p l o t m e shf i g u r e ( 2 )g r3 . p l o t f a c e sf i g u r e ( 3 )g r3 . p l o t s l i c e s ( y , n R e f i n e m e n t s )f i g u r e ( 4 )g r3 . p l o t f a c e s ( y )

77