Randwertprobleme/Methoden zur Lösung von Randwertproblemen/Finite Elemente Methode: Unterschied zwischen den Versionen
(43 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Die Methode der Finiten Elemente ist deshalb so erfolgreich, weil Sie ideal mit der Implementierung im Computer harmoniert. | Die Methode der Finiten Elemente ist deshalb so erfolgreich, weil Sie ideal mit der Implementierung im Computer harmoniert. | ||
Zeile 17: | Zeile 13: | ||
|} | |} | ||
=Einführungsbeispiel= | ==Einführungsbeispiel== | ||
Wie das geht, zeige ich Ihnen - zuerst ohne Theorie - für ein Beispiel: | Wie das geht, zeige ich Ihnen - zuerst ohne Theorie - für ein Beispiel: | ||
[[Datei:FiniteElementeMethode-Stabwerk.png|left|120px|mini|Stabwerk]]<br clear="all"/> | |||
</ | Ein Stabwerk aus drei elastischen Stäben und einer Feder wird durch eine Einzelkraft ''F'' belastet. Alle Stäbe haben die Dehnsteifigkeit ''EA'', die Federsteifigkeit ist ''k''. | ||
Gegeben sind ''a, EA, k, F'', gesucht sind die Verschiebungen der Knotenpunkte. | Gegeben sind ''a, EA, k, F'', gesucht sind die Verschiebungen der Knotenpunkte. | ||
Zeile 38: | Zeile 33: | ||
::<math>\underline{\underline{K}}\cdot\underline{Q} = \underline{P}</math> | ::<math>\underline{\underline{K}}\cdot\underline{Q} = \underline{P}</math> | ||
[[Datei:FiniteElementeMethode-StabwerkMitBezeichnugen.png|left|120px|mini|Benennung von Stäben und Knoten.]]<br clear="all"/> | |||
Wir benennen Stäbe und Knoten, ein Koordinatensystem brauchen wir auch: | Wir benennen Stäbe und Knoten, ein Koordinatensystem brauchen wir auch: | ||
Das Stabwerk besteht aus vier elastischen Bauteilen: | Das Stabwerk besteht aus vier elastischen Bauteilen: | ||
Zeile 53: | Zeile 49: | ||
== A. Das Prozess-Schema == | == A. Das Prozess-Schema == | ||
Das Gesamt-Gleichungssystem komponieren wir, indem die Element-Steifigkeitsmatrizen je Bauteil nach einem festen Schema in ''K'' hineinkopiert werden: | Das Gesamt-Gleichungssystem komponieren wir, indem die Element-Steifigkeitsmatrizen je Bauteil nach einem festen Schema in ''K'' hineinkopiert werden: | ||
[[File:BVP-FEM.mp4|Video: Prozessschema FEM]]<br clear="all"/> | |||
Es bleibt noch, die Randbedingungen in das System einzuarbeiten: das machen wir durch Streichen der Zeilen und Spalten des Gleichungssystems, die zu Koordinaten gehören, die aufgrund der Lagerung des Systems behindert sind: | Es bleibt noch, die Randbedingungen in das System einzuarbeiten: das machen wir durch Streichen der Zeilen und Spalten des Gleichungssystems, die zu Koordinaten gehören, die aufgrund der Lagerung des Systems behindert sind: | ||
Zeile 60: | Zeile 58: | ||
Wie dieser Prozess in einem "Lehrbuch" der Mechanik / Mathematik und in einer Implementierung im Computer aussieht folgt hier in der linken bzw. rechten Spalte: | Wie dieser Prozess in einem "Lehrbuch" der Mechanik / Mathematik und in einer Implementierung im Computer aussieht folgt hier in der linken bzw. rechten Spalte: | ||
--- | <table style="width:100%"> | ||
<tr><td style="width:50%"> | |||
<h2>B: Die Lehrbuch-Sichtweise</h2> | |||
</td><td style="width:50%"> | |||
<h2>C: Die Implementierung in MAXIMA</h2> | |||
</td></tr> | |||
</table> | |||
{{Vorlage:MyCodeBlock|title=Header|text= | |||
Für diese Aufgabe nutzen wir Ergenisse aus [[Gelöste Aufgaben/T312|T312]]. | |||
In diesem Beispiel sind die gesuchten Größen die Verschiebungen der drei Knoten in x- und y-Richtung, also: | |||
::<math>\underline{Q} = \left(\begin{array}{l}u_{I}\\v_{I}\\u_{II}\\v_{II}\\u_{III}\\v_{III}\\\end{array}\right)</math> | |||
|code= | |||
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue"> | |||
/*******************************************************/ | |||
/* MAXIMA script */ | |||
/* version: wxMaxima 15.08.2 */ | |||
/* author: Andreas Baumgart */ | |||
/* last updated: 2018-05-30 */ | |||
/* ref: FEM */ | |||
/* description: Berechnung der Knoten-Verscheibungen */ | |||
/* eines elastischen Stabwerks */ | |||
/* - gehört zu Aufgabe T312 */ | |||
/*******************************************************/ | |||
/* coordiates in K*Q=P */ | |||
Q: transpose(matrix(flatten(makelist([u[i],v[i]],i,1,length(N))))); | |||
</syntaxhighlight> | |||
}} | |||
{{Vorlage:MyCodeBlock|title=System Parameter|text= | |||
Die Knoten (Nodes) ''I, II'' und ''III'' des Fachwerks haben die Koordinaten [''x<sub>i</sub>, y<sub>i</sub>'']: | |||
::<math>\begin{array}{llcc}N_1 =& [&0,&0]\\N_2 =& [&a,&a]\\N_3 =& [&a,&0]\end{array}</math> | |||
Jeder Stab (Rod) ist ein Finites Element des Fachwerks, die drei Stabe verbinden folgende Knoten miteinander: | |||
::<math>\begin{array}{llcc}R_1 =& [&1,&2]\\R_2 =& [&1,&3]\\R_3 =& [&2,&3]\end{array}</math> | |||
Damit berechnen wir die Parameter [ξ''<sub>x</sub>, ξ<sub>x</sub>''] aus T312 | |||
::<math>\begin{array}{ll}\ldots\text{ für Element 1:}&\displaystyle [\xi_x,\xi_y] = [\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}}]\\\ldots\text{ für Element 2:}&\displaystyle [\xi_x,\xi_y] = [1,0]\\\ldots\text{ für Element 3:}&\displaystyle [\xi_x,\xi_y] = [0,-1]\end{array}</math>, | |||
die wir für den nächsten Schritt brauchen: | |||
|code= | |||
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue"> | |||
/* parameters */ | |||
assume(a>0); | |||
/* nodal coordinates */ | |||
N : [[0, 0], | |||
[a, a], | |||
[a, 0]]; | |||
/* rod-connectivity */ | |||
R : [[1,2], | |||
[1,3], | |||
[2,3]]; | |||
dims: [length(N),length(R)]; | |||
/* compute elements of Element-Stiffness Matrix */ | |||
/* Δx / Δy */ | |||
d : makelist(N[R[i][2]]-N[R[i][1]],i,1,length(R)); | |||
/* reference-lengths */ | |||
l : makelist(sqrt(d[i].d[i]),i,1,length(d)); | |||
/* normalized Δx / Δy ( xi )*/ | |||
xi : makelist((N[R[i][2]]-N[R[i][1]])/l[i], | |||
i,1,length(R)); | |||
</syntaxhighlight> | |||
}} | |||
{{Vorlage:MyCodeBlock|title=Definition of the Element Stiffness-Matrix|text= | |||
Die Element-Steifigkeitsmatrix aus [[Gelöste_Aufgaben/T312|T312]] sieht so aus: | |||
::<math>k\left(EA,\ell,\xi\right) := \displaystyle \frac{EA}{\ell} \cdot | |||
\begin{pmatrix} | |||
{{\xi}_x^{2}} & {{\xi}_x}\cdot {{\xi}_{y}} & -{{\xi}_x^{2}} & -{{\xi}_x}\cdot {{\xi}_{y}}\\ | |||
{{\xi}_x}\cdot {{\xi}_{y}} & {{\xi}_{y}^{2}} & -{{\xi}_x}\cdot {{\xi}_{y}} & -{{\xi}_{y}^{2}}\\ | |||
-{{\xi}_x^{2}} & -{{\xi}_x}\cdot {{\xi}_{y}} & {{\xi}_x^{2}} & {{\xi}_x}\cdot {{\xi}_{y}}\\ | |||
-{{\xi}_x}\cdot {{\xi}_{y}} & -{{\xi}_{y}^{2}} & {{\xi}_x}\cdot {{\xi}_{y}} & {{\xi}_{y}^{2}} | |||
\end{pmatrix}</math> | |||
Je Stab setzen wir hier für die Parameter ''EA, ℓ, ξ'' die jeweiligen Größen ein. | |||
|code= | |||
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue"> | |||
/* Element-Stiffness Matrix from T123 */ | |||
k(EA,l,xi) := EA/l*matrix( | |||
[ xi[1]^2,xi[1]*xi[2],-xi[1]^2,-xi[1]*xi[2]], | |||
[ xi[1]*xi[2],xi[2]^2,-xi[1]*xi[2],-xi[2]^2], | |||
[-xi[1]^2,-xi[1]*xi[2], xi[1]^2,xi[1]*xi[2]], | |||
[-xi[1]*xi[2],-xi[2]^2,xi[1]*xi[2],xi[2]^2]); | |||
</syntaxhighlight> | |||
}} | |||
{{Vorlage:MyCodeBlock|title=Compose System-Matrix|text= | |||
Die Element-Steifigkeits-Matrizen ''k<sub>i</sub>'' addieren wir nun je Element zur System-Steifigkeitsmatrix ''K'' hinzu - so, wie im Prozess-Schema beschrieben: | |||
[[Datei:FiniteElementeMethode-KompositionDerSteifigkeitsmatrix.png|left|mini|Komposition der Steifigkeitsmatrix.]]<br clear="all"/> | |||
Element 4 - die Feder mit der Steifigkeit ''k = κ* EA/ℓ'' addieren wir als letztes zu Element ''K''<sub>44</sub> hinzu. | |||
In die Rechten Seite des Gleichungssystems schreiben wir nur die Kraft ''F'' in der zweiten Zeile. | |||
Wir erhalten das Gesamt-Gleichungssystem zu | |||
::<math>\displaystyle \frac{EA}{\sqrt{2}\cdot a}\cdot | |||
\begin{pmatrix} | |||
\sqrt{2}+\frac{1}{2} & \frac{1}{2} & -\frac{1}{2} & -\frac{1}{2} & -\sqrt{2} & 0\\ | |||
\frac{1}{2} & \frac{1}{2} & -\frac{1}{2} & -\frac{1}{2} & 0 & 0\\ | |||
-\frac{1}{2} & -\frac{1}{2} & \frac{1}{2} & \frac{1}{2} & 0 & 0\\ | |||
-\frac{1}{2} & -\frac{1}{2} & \frac{1}{2} & \kappa+\sqrt{2}+\frac{1}{2} & 0 & -\sqrt{2}\\ | |||
-\sqrt{2} & 0 & 0 & 0 & \sqrt{2} & 0\\ | |||
0 & 0 & 0 & -\sqrt{2} & 0 & \sqrt{2} | |||
\end{pmatrix} \cdot\underline{Q}\,=\, | |||
\begin{pmatrix} | |||
0\\ | |||
-F\\ | |||
0\\ | |||
0\\ | |||
0\\ | |||
0\end{pmatrix}</math> | |||
Wichtig für die Lösung des Gleichungssystems (bei hunderttausenden von Unbekannten) ist, dass die Systemmatrix die sympatische Eigenschaft hat, symmetrisch zu sein. | |||
|code= | |||
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue"> | |||
/* compose total stiffness matrix */ | |||
K: zeromatrix(2*dims[1],2*dims[1]); | |||
for rod:1 thru dims[2] do | |||
(/* Elemet Stiffness matrix for Element i*/ | |||
ESM : k(EA,l[rod],xi[rod]), | |||
/* incidence Matrix*/ | |||
iL: [2*R[rod][1]-1,2*R[rod][1],2*R[rod][2]-1,2*R[rod][2]], | |||
for rowi: 1 thru 4 do | |||
for coli: 1 thru 4 do | |||
(K[iL[rowi]][iL[coli]]: | |||
K[iL[rowi]][iL[coli]]+ESM[rowi][coli]), | |||
print("done adding ESM for rod ",rod))$ | |||
/*add spring*/ | |||
K[4,4] : K[4,4]+kappa*(EA/sqrt(2)/a); | |||
/* right-hand-side in K*Q=P */ | |||
P: transpose(matrix([0,-F,0,0,0,0])); | |||
/* print equations of "motion" */ | |||
fac: EA/(sqrt(2)*a); | |||
print(fac,expand(K/fac),"∙",Q," = ", P)$ | |||
/* system mtrix is symmetric ? */ | |||
print("K ist symmtric?: ",is(K - transpose(K) = zeromatrix(2*dims[1],2*dims[1])))$ | |||
</syntaxhighlight> | |||
}} | |||
{{Vorlage:MyCodeBlock|title=Incorporate Boudary Conditions|text= | |||
Randbedingungen für unsere Knoten-Koordinaten sind | |||
::<math>\begin{array}{ll}u_{II} & = 0\\v_{III} & = 0\\u_{III} & = 0\end{array}</math>. | |||
Wir arbeiten Sie in das lineare Gleichungssystem ein, indem wir die zugehörigen Zeilen und Spalten - 3, 5, 6 - streichen. | |||
Nun lautet das Gleichungssystem | |||
::<math>\displaystyle \frac{EA}{\sqrt{2}\cdot a} \begin{pmatrix} | |||
\sqrt{2}+\frac{1}{2} & \frac{1}{2} & -\frac{1}{2}\\ | |||
\frac{1}{2} & \frac{1}{2} & -\frac{1}{2}\\ | |||
-\frac{1}{2} & -\frac{1}{2} & \kappa+\sqrt{2}+\frac{1}{2} | |||
\end{pmatrix} \cdot \begin{pmatrix} | |||
{{u}_{I}}\\ | |||
{{v}_{I}}\\ | |||
{{v}_{II}} | |||
\end{pmatrix}\,=\, \begin{pmatrix} | |||
0\\ | |||
-F\\ | |||
0 \end{pmatrix}</math> | |||
|code= | |||
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue"> | |||
/*incorporate boundary conditions */ | |||
K : submatrix(3,5,6,K,3,5,6); | |||
Q : submatrix(3,5,6,Q); | |||
P : submatrix(3,5,6,P); | |||
print(fac,expand(K/fac),"∙",Q," = ", P)$ | |||
</syntaxhighlight> | |||
}} | |||
{{Vorlage:MyCodeBlock|title=Solution|text= | |||
Die Lösung für ''κ''=1/2 ist | |||
::<math>\begin{array}{ll} {{u}_{I}}&\displaystyle =\frac{a\cdot F}{EA}\\ {{v}_{I}}&\displaystyle =-\frac{\left( 22639305+4002171\cdot {{2}^{\frac{5}{2}}}\right) \cdot a\cdot F}{\left( 438075\cdot {{2}^{\frac{7}{2}}}+4957649\right) \cdot EA}\\ {{v}_{II}}&\displaystyle =-\frac{\left( 17144+5993\cdot {{2}^{\frac{3}{2}}}\right) \cdot a\cdot F}{\left( 1017\cdot {{2}^{\frac{9}{2}}}+23137\right) \cdot EA} \end{array}</math>, | |||
oder numerisch | |||
::<math>\begin{array}{ll} {{u}_{1}}&=\frac{a\cdot F}{{EA}}\\ {{v}_{1}}&=-4.567223249782448\cdot \frac{a\cdot F}{{EA}}\\ {{u}_{2}}&=0.0\\ {{v}_{2}}&=-0.7387961250362585\cdot \frac{a\cdot F}{{EA}}\\ {{u}_{3}}&=0.0\\ {{v}_{3}}&=0.0\\ \end{array}</math>. | |||
|code= | |||
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue"> | |||
/* solve */ | |||
sol:makelist(Q[i][1]=ratsimp(linsolve_by_lu(K,P)[1][i][1]),i,1,3); | |||
</syntaxhighlight> | |||
}} | |||
{{Vorlage:MyCodeBlock|title=Post-Processing|text= | |||
Aus [[Gelöste_Aufgaben/T312|T312]] wissen wir, dass je Stab | |||
::<math>\Delta\ell_i = \xi_x\cdot\Delta u_i + \xi_y\cdot\Delta v_i</math>. | |||
Die Stab-Normalkraft ist | |||
::<math>S_i = \displaystyle \frac{EA}{\ell_i}\cdot \Delta \ell_i</math> | |||
hier | |||
::<math>\begin{array}{ll} S_1\,=\,&1.414213562373095\cdot F\\ S_2\,=\,-&0.7387961250362585\cdot F\\ S_3\,=\,-&1.0\cdot F \end{array}</math>. | |||
In FEM-Programmen werden Spannungen (hier die Normalkräfte) und Verformungen gern in ein Bild eingetragen, die Größe der Spannung wird dabei farblich kodiert: | |||
[[Datei:FiniteElementeMethode-Ergebnis.png|150px|left|mini|Verformung des Stabwerks.]] | |||
|code= | |||
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue"> | |||
declare("Δl", alphabetic); | |||
sol: subst([kappa=1/2],append(sol, [u[2]=0,u[3]=0,v[3]=0])); | |||
for rod:1 thru dims[2] do | |||
(Δl[rod] : xi[rod].transpose(subst(sol, | |||
[u[R[rod][2]]-u[R[rod][1]],v[R[rod][2]]-v[R[rod][1]]])), | |||
S[rod] : EA/l[rod]*Δl[rod], | |||
print("S[",rod,"] = ", expand(float(S[rod])))); | |||
</syntaxhighlight> | |||
}} | |||
Wie passt diese Vorgehensweise nun zur klassischen Technischen Mechanik? Eigentlich gar nicht. Hier wird nichts freigeschnitten, es gibt keine Gleichgewichtsbedingungen je Element und keine Kraft-Übergangsbedingungen zwischen den Elementen. Wir brauchen also eine fundamental andere Mechanik, als die des gewohnten [[Sources/Lexikon/Kräfte-Gleichgewicht|Kräftegleichgewichts]]. | |||
Hier kommt die [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik|Analytische Mechanik]], für die Methode der Finiten Elemente in Form des [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzips der virtuellen Arbeit]], ins Spiel. Sie erklärt, wie wir Übergangsbedingungen erfüllen, wie wir Spalten und Zeilen des Gleichungssystems erstellen und warum wir Randbedingungen einfach durch Streichen von Zeilen und Spalten der Systemmatrix erfüllen. | |||
== Grundlagen == | |||
Die Methode der Finiten Elemente (FEM) arbeitet mit dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]] für die Gleichgewichtsbedingungen und einfachen, lokalen Polynom-Ansätzen. | |||
Für die Gleichgewichtsbedingung brauchen wir die allgemeinen Terme der virtuellen Arbeit des Systems | |||
::<math>\delta W = \delta W^a - \delta \Pi</math> | |||
wobei ''δΠ'' die [[Sources/Lexikon/Virtuelle Formänderungsenergie|Virtuelle Formänderungsenergie]] ist und ''δW<sup>a</sup>'' die virtuelle Arbeit von äußeren, eingeprägten Lasten. | |||
Darin ist z.B. für den [[Sources/Lexikon/Euler-Bernoulli-Balken|Euler-Bernoulli-Balken]] | |||
::<math>\displaystyle \delta\Pi = \displaystyle \int_\ell EI\;w''\cdot\delta w''\; dx </math> | |||
Die gesamte Virtuelle Formänderungsarbeit setzt sich damm additiv aus den Anteilen aller N elastischen Bauteile zusammen, also | |||
::<math>\delta\Pi = \delta\Pi_1+\delta\Pi_2+\ldots +\delta\Pi_N</math> | |||
Die Arbeit von äußeren, eingeprägten Kräften ist beispielsweise | |||
::<math>\begin{array}{lll} \displaystyle \delta W^a & = \displaystyle \displaystyle \int_\ell \vec{q}(x)\cdot\delta \vec{r}\; dx &\text { für Streckenlasten oder }\\ \displaystyle \delta W^a & = \vec{F}\cdot \delta \vec{r}_F &\text{ für diskrete Kräfte.}\end{array}</math> | |||
Das ''δΠ'' sieht ganz ähnlich aus wie die Formänderungsenergie ''Π'' der Potentiellen Energie - hier fehlt allerdings der Faktor 1/2! | |||
Der Prozess, in dem wir eine Striktur in Finite Elemente unterteilen, nennen wir Diskretisierung. Denn an dieser Stellen werden aus den unendlich vielen Freiheitsgraden endlich viele. | |||
Als Trial-Formfunktionen für die Approximation der exakten Lösung wählen wir Polynome, die wir in die Raumrichtungen aneinanderstückeln - und zwar immer wieder die selben! Jeder Abschnitt des Struktur,, in dem wir eine Trial-Funktion ansetzen, nennen wir Finites Element, jede "Stoßstelle" zwischen den Elementen nennen wir Node (Knoten). Was hier wenig dramatisch daherkommt, ist die Grundlage für den unglaublichen Erfolg der FEM: | |||
* Wiederholung: Alle Trial-Funktionen sind gleich! | |||
* Simplizität: Jede Trial-Funktion ist ein sehr einfaches Polynom - oft reicht erster Ordnung! | |||
* Skalierbarkeit: die Genauigkeit steigern wir durch die Unterteilung in kleinere Finite Elemente! | |||
=== Stab-Modelle === | |||
Für einen geraden Stab sieht eine Diskretisierung - hier mit gleich langen - Finiten Elementen so aus: | |||
[[Datei:FiniteElementeMethode-Stabmodelle.png|left|mini|Knoten und Elemente für Stabmodelle.|alternativtext=|400x400px]]<br clear="all"/> | |||
Der Ansatz - hier für einen [[Sources/Lexikon/Euler-Bernoulli-Balken|Euler-Bernoulli-Balken]] - ist wieder allgemein | |||
::<math>\tilde{w}(x) = \displaystyle \sum_I Q_i\cdot \phi_i(x)</math> | |||
wobei die ''ϕ<sub>i</sub>'' die linear unabhängigen Trial-Funktionen und die ''Q<sub>i</sub>'' ihre gesuchten "Wichtungsfaktoren" - hier: die gesuchten Auslenkungen und/oder Verdrehungen an den Knoten - sind. | |||
Statt Polynome zu wählen, die sich über die gesamte Stab-Länge erstrecken wie beim Verfahren von Ritz, wählen wir hier lokale Ansatzfunktionen je Element, also | |||
::<math>\tilde{w}(x) = \displaystyle \sum_I \tilde{w}_i(x) \text{ mit } \tilde{w}_i(x) = \left\{\begin{array}{cl}\bar{w}(x) &\text{ im Element}\\ 0 &\text{ sonst}\end{array} \right.</math> | |||
=== Schalen-Modelle === | |||
Bei [[Sources/Lexikon/Schale|Schalen-Modellen]] für ebene Strukturen müssen wir Verschiebungen und/oder Verdrehungen als Funktion von zwei unabhängigen Variablen - z.B. ''x'' und ''y'' - ausdrücken. | |||
[[Datei:FiniteElementeMethode-Plattenmodelle.png|left|mini|Plattenmodell]]<br clear="all"/> | |||
Als Ansatz für eine ebene Scheibe sind die Verschiebungen in der der Schalen-Ebene in die beiden Raumrichtungen | |||
::<math>\begin{array}{l}\tilde{u}_{i,x}(x,y) = \displaystyle \sum_I \sum_J Q_{ij}\cdot \phi_i(x)\cdot \phi_j(y)\\\tilde{u}_{i,y}(x,y) = \displaystyle \sum_K \sum_L Q_{kl}\cdot \phi_k(x)\cdot \phi_l(y)\end{array}</math> | |||
In den Knoten-Verschiebungen ''u<sub>ij</sub>'' stehen dann die beiden Knoten-Verschiebungen ''Q<sub>ij</sub>, Q<sub>kl</sub>'', also | |||
::<math>\underline{u}_{ij} = \left(\begin{array}{c}u_{x,ij}\\u_{y,ij} \end{array}\right)</math> | |||
die wir wiederum in die Spaltenmatrix der gesuchten Größen ''Q'' einsortieren: | |||
::<math>\underline{Q} = \left(\begin{array}{c}\underline{u}_{00}\\\vdots\\\underline{u}_{ij} \\ \vdots \end{array}\right)</math> | |||
Mit [[Randwertprobleme/Methoden zur Lösung von Randwertproblemen/Finite Elemente Methode/FEM: Trial-Functions für lineare Ansatz-Polynome|linearen Trial-Functions]] wird die Näherungslösung je Element dann aus diesen Formen zusammengesetzt sein: | |||
{| class="wikitable" | |||
|+ | |||
|[[Datei:FiniteElementeMethode-LineareTrialfunctions2DÜberlagert.png|mini|Produktansatz der Trialfunctions.]] | |||
|[[Datei:FiniteElementeMethode-TrialfunctionLinear2D.png|mini|Produktansatz mit linearen Trialfunctions.]] | |||
|} | |||
== Das Gleichungssystem für lineare Bewegungsgleichungen == | |||
Weil die Ansatzfunktionen nur im Element gelten, ist | |||
::<math>\delta\Pi = \displaystyle \sum_I \delta\Pi_i</math> | |||
die Summe aller virtuellen Formänderungs-Energien aller Elemente. | |||
Einsetzen und Ausführen der Integration in ''δΠ'' führt bei linearen Systemen (wir betrachten nur lineare Systeme) immer auf die Form | |||
::<math>\delta \Pi = \displaystyle \delta\underline{Q}^T \cdot \underline{\underline{A}}\cdot \underline{Q} \text{ mit } \underline{Q} = \left(\begin{array}{l}Q_0\\ \vdots \\Q_I\end{array}\right)</math> | |||
und ''δW<sup><sub>a</sub></sup>'' hat in der Statik immer die Form | |||
::<math>\delta W^a = \displaystyle \delta\underline{W}^T\cdot \underline{P} </math> | |||
also | |||
::<math>\begin{array}{ll}\delta W &= \displaystyle \delta\underline{Q}^T \cdot \underline{\underline{K}}\cdot \underline{Q} - \delta\underline{Q}^T\cdot \underline{P}\\ & = \displaystyle \delta\underline{Q}^T \cdot \left(\underline{\underline{K}}\cdot \underline{Q} - \underline{P}\right) \end{array} </math> | |||
Die Gleichgewichtsbedingungen des Prinzip der virtuellen Verrückungen lauten: | |||
::<math>\delta W \stackrel{!}{=}0</math> | |||
und das sind mehrere, denn: | |||
<ul> | |||
<li>die einzelnen virtuellen Verrückungen in ''δW'' sind jeweils für sich unabhängig. Die Summe der <br /> | |||
<math>\delta Q_i \cdot \underbrace{\left(\displaystyle \sum_j k_{ij}\cdot Q_j - b_i \right)}_{\displaystyle \stackrel{!}{=}0} = 0</math><br /> | |||
wird nur dann Null, wenn die Klammerausdrücke jeweils für sich verschwinden (Null werden).</li> | |||
<li>Wir erhalten also ganz automatisch für jede unbekannte Koordinate eine Gleichgewichtsbedingung.</li> | |||
</ul> | |||
== Ansatzfunktionen == | |||
Finite Elemente benutzen besondere Trial-Functions um die Verschiebungen einer Struktur sehr effizient abbilden zu können. Dies sind | |||
* [[Randwertprobleme/Methoden zur Lösung von Randwertproblemen/Finite Elemente Methode/FEM: Trial-Functions für lineare Ansatz-Polynome|Trial-Functions für lineare Ansatz-Polynome]] | |||
* [[Randwertprobleme/Methoden zur Lösung von Randwertproblemen/Finite Elemente Methode/FEM: Trial-Functions für kubische Ansatz-Polynome|Trial-Functions für kubische Ansatz-Polynome]] | |||
Im Vergleich: das Verfahren von Ritz und die Methode der Finite Elemente | |||
== Literatur == | |||
* [[Sources/Literatur#Strang2008|Strang 2008]] | |||
'''Untergeordnete Seiten''' | |||
<splist | <splist | ||
showparent=no | showparent=no | ||
Zeile 83: | Zeile 427: | ||
kidsonly=yes | kidsonly=yes | ||
debug=0 | debug=0 | ||
/> | /> | ||
'''Links''' | |||
* [[Randwertprobleme/Methoden zur Lösung von Randwertproblemen/Im Vergleich: das Verfahren von Ritz und die Methode der Finite Elemente|Im Vergleich: das Verfahren von Ritz und die Methode der Finite Elemente]] | |||
* {{Kategorie:Finite-Elemente-Methode}} | |||
* [https://de.wikipedia.org/wiki/Hermitesches_Polynom Hermite-Polynome] |
Aktuelle Version vom 24. Februar 2021, 12:34 Uhr
Die Methode der Finiten Elemente ist deshalb so erfolgreich, weil Sie ideal mit der Implementierung im Computer harmoniert.
Auf zwei Ansätzen basiert dieser Erfolg:
Einführungsbeispiel
Wie das geht, zeige ich Ihnen - zuerst ohne Theorie - für ein Beispiel:
Ein Stabwerk aus drei elastischen Stäben und einer Feder wird durch eine Einzelkraft F belastet. Alle Stäbe haben die Dehnsteifigkeit EA, die Federsteifigkeit ist k.
Gegeben sind a, EA, k, F, gesucht sind die Verschiebungen der Knotenpunkte.
Die Lösung mit der Methode der Finiten Elemente zeige ich Ihnen aus drei Perspektiven:
- das Prozess-Schema
- die Lehrbuch-Sichweise und
- die Implementierung in einem Algorithmus (hier Maxima).
Das Modell für ein lineares Modell mit Finiten Elemente ist ein System linearer Gleichungen. In jeder Spalte steht die Gleichgewichtsbedingung für eine Koordinate Qi, in den Spalten stehen die Koeffizienten der Koordinaten Qj. Das Gleichungssystem sieht immer so aus:
Wir benennen Stäbe und Knoten, ein Koordinatensystem brauchen wir auch:
Das Stabwerk besteht aus vier elastischen Bauteilen:
- den Stäben 1,2 und 3 sowie
- der Feder.
Und jedes dieser elastischen Bauteil hinterlässt eine Spur in der Steifigkeitsmatrix K.
Die Verformung der Stäbe erfassen wir durch die Verschiebung der Endpunkte - der Knoten - des Stabwerks. Wie das geht und wir wir daraus eine Element-Steifigkeitsmatrix für einen Dehnstab bekommen, steht in T312. Die Knoten-Verschiebungen schreiben wir in Q hinein, hier für drei Knoten die Verschiebungen jeweils u in x- und v in y-Richtung
A. Das Prozess-Schema
Das Gesamt-Gleichungssystem komponieren wir, indem die Element-Steifigkeitsmatrizen je Bauteil nach einem festen Schema in K hineinkopiert werden:
Es bleibt noch, die Randbedingungen in das System einzuarbeiten: das machen wir durch Streichen der Zeilen und Spalten des Gleichungssystems, die zu Koordinaten gehören, die aufgrund der Lagerung des Systems behindert sind:
Wie dieser Prozess in einem "Lehrbuch" der Mechanik / Mathematik und in einer Implementierung im Computer aussieht folgt hier in der linken bzw. rechten Spalte:
B: Die Lehrbuch-Sichtweise |
C: Die Implementierung in MAXIMA |
Header
Für diese Aufgabe nutzen wir Ergenisse aus T312.
In diesem Beispiel sind die gesuchten Größen die Verschiebungen der drei Knoten in x- und y-Richtung, also:
/*******************************************************/
/* MAXIMA script */
/* version: wxMaxima 15.08.2 */
/* author: Andreas Baumgart */
/* last updated: 2018-05-30 */
/* ref: FEM */
/* description: Berechnung der Knoten-Verscheibungen */
/* eines elastischen Stabwerks */
/* - gehört zu Aufgabe T312 */
/*******************************************************/
/* coordiates in K*Q=P */
Q: transpose(matrix(flatten(makelist([u[i],v[i]],i,1,length(N)))));
System Parameter
Die Knoten (Nodes) I, II und III des Fachwerks haben die Koordinaten [xi, yi]:
Jeder Stab (Rod) ist ein Finites Element des Fachwerks, die drei Stabe verbinden folgende Knoten miteinander:
Damit berechnen wir die Parameter [ξx, ξx] aus T312
- ,
die wir für den nächsten Schritt brauchen:
/* parameters */
assume(a>0);
/* nodal coordinates */
N : [[0, 0],
[a, a],
[a, 0]];
/* rod-connectivity */
R : [[1,2],
[1,3],
[2,3]];
dims: [length(N),length(R)];
/* compute elements of Element-Stiffness Matrix */
/* Δx / Δy */
d : makelist(N[R[i][2]]-N[R[i][1]],i,1,length(R));
/* reference-lengths */
l : makelist(sqrt(d[i].d[i]),i,1,length(d));
/* normalized Δx / Δy ( xi )*/
xi : makelist((N[R[i][2]]-N[R[i][1]])/l[i],
i,1,length(R));
Definition of the Element Stiffness-Matrix
Die Element-Steifigkeitsmatrix aus T312 sieht so aus:
Je Stab setzen wir hier für die Parameter EA, ℓ, ξ die jeweiligen Größen ein.
/* Element-Stiffness Matrix from T123 */
k(EA,l,xi) := EA/l*matrix(
[ xi[1]^2,xi[1]*xi[2],-xi[1]^2,-xi[1]*xi[2]],
[ xi[1]*xi[2],xi[2]^2,-xi[1]*xi[2],-xi[2]^2],
[-xi[1]^2,-xi[1]*xi[2], xi[1]^2,xi[1]*xi[2]],
[-xi[1]*xi[2],-xi[2]^2,xi[1]*xi[2],xi[2]^2]);
Compose System-Matrix
Die Element-Steifigkeits-Matrizen ki addieren wir nun je Element zur System-Steifigkeitsmatrix K hinzu - so, wie im Prozess-Schema beschrieben:
Element 4 - die Feder mit der Steifigkeit k = κ* EA/ℓ addieren wir als letztes zu Element K44 hinzu.
In die Rechten Seite des Gleichungssystems schreiben wir nur die Kraft F in der zweiten Zeile.
Wir erhalten das Gesamt-Gleichungssystem zu
Wichtig für die Lösung des Gleichungssystems (bei hunderttausenden von Unbekannten) ist, dass die Systemmatrix die sympatische Eigenschaft hat, symmetrisch zu sein.
/* compose total stiffness matrix */
K: zeromatrix(2*dims[1],2*dims[1]);
for rod:1 thru dims[2] do
(/* Elemet Stiffness matrix for Element i*/
ESM : k(EA,l[rod],xi[rod]),
/* incidence Matrix*/
iL: [2*R[rod][1]-1,2*R[rod][1],2*R[rod][2]-1,2*R[rod][2]],
for rowi: 1 thru 4 do
for coli: 1 thru 4 do
(K[iL[rowi]][iL[coli]]:
K[iL[rowi]][iL[coli]]+ESM[rowi][coli]),
print("done adding ESM for rod ",rod))$
/*add spring*/
K[4,4] : K[4,4]+kappa*(EA/sqrt(2)/a);
/* right-hand-side in K*Q=P */
P: transpose(matrix([0,-F,0,0,0,0]));
/* print equations of "motion" */
fac: EA/(sqrt(2)*a);
print(fac,expand(K/fac),"∙",Q," = ", P)$
/* system mtrix is symmetric ? */
print("K ist symmtric?: ",is(K - transpose(K) = zeromatrix(2*dims[1],2*dims[1])))$
Incorporate Boudary Conditions
Randbedingungen für unsere Knoten-Koordinaten sind
- .
Wir arbeiten Sie in das lineare Gleichungssystem ein, indem wir die zugehörigen Zeilen und Spalten - 3, 5, 6 - streichen.
Nun lautet das Gleichungssystem
/*incorporate boundary conditions */
K : submatrix(3,5,6,K,3,5,6);
Q : submatrix(3,5,6,Q);
P : submatrix(3,5,6,P);
print(fac,expand(K/fac),"∙",Q," = ", P)$
Solution
Die Lösung für κ=1/2 ist
- ,
oder numerisch
- .
/* solve */
sol:makelist(Q[i][1]=ratsimp(linsolve_by_lu(K,P)[1][i][1]),i,1,3);
Post-Processing
Aus T312 wissen wir, dass je Stab
- .
Die Stab-Normalkraft ist
hier
- .
In FEM-Programmen werden Spannungen (hier die Normalkräfte) und Verformungen gern in ein Bild eingetragen, die Größe der Spannung wird dabei farblich kodiert:
declare("Δl", alphabetic);
sol: subst([kappa=1/2],append(sol, [u[2]=0,u[3]=0,v[3]=0]));
for rod:1 thru dims[2] do
(Δl[rod] : xi[rod].transpose(subst(sol,
[u[R[rod][2]]-u[R[rod][1]],v[R[rod][2]]-v[R[rod][1]]])),
S[rod] : EA/l[rod]*Δl[rod],
print("S[",rod,"] = ", expand(float(S[rod]))));
Wie passt diese Vorgehensweise nun zur klassischen Technischen Mechanik? Eigentlich gar nicht. Hier wird nichts freigeschnitten, es gibt keine Gleichgewichtsbedingungen je Element und keine Kraft-Übergangsbedingungen zwischen den Elementen. Wir brauchen also eine fundamental andere Mechanik, als die des gewohnten Kräftegleichgewichts.
Hier kommt die Analytische Mechanik, für die Methode der Finiten Elemente in Form des Prinzips der virtuellen Arbeit, ins Spiel. Sie erklärt, wie wir Übergangsbedingungen erfüllen, wie wir Spalten und Zeilen des Gleichungssystems erstellen und warum wir Randbedingungen einfach durch Streichen von Zeilen und Spalten der Systemmatrix erfüllen.
Grundlagen
Die Methode der Finiten Elemente (FEM) arbeitet mit dem Prinzip der virtuellen Verrückungen für die Gleichgewichtsbedingungen und einfachen, lokalen Polynom-Ansätzen.
Für die Gleichgewichtsbedingung brauchen wir die allgemeinen Terme der virtuellen Arbeit des Systems
wobei δΠ die Virtuelle Formänderungsenergie ist und δWa die virtuelle Arbeit von äußeren, eingeprägten Lasten.
Darin ist z.B. für den Euler-Bernoulli-Balken
Die gesamte Virtuelle Formänderungsarbeit setzt sich damm additiv aus den Anteilen aller N elastischen Bauteile zusammen, also
Die Arbeit von äußeren, eingeprägten Kräften ist beispielsweise
Das δΠ sieht ganz ähnlich aus wie die Formänderungsenergie Π der Potentiellen Energie - hier fehlt allerdings der Faktor 1/2!
Der Prozess, in dem wir eine Striktur in Finite Elemente unterteilen, nennen wir Diskretisierung. Denn an dieser Stellen werden aus den unendlich vielen Freiheitsgraden endlich viele.
Als Trial-Formfunktionen für die Approximation der exakten Lösung wählen wir Polynome, die wir in die Raumrichtungen aneinanderstückeln - und zwar immer wieder die selben! Jeder Abschnitt des Struktur,, in dem wir eine Trial-Funktion ansetzen, nennen wir Finites Element, jede "Stoßstelle" zwischen den Elementen nennen wir Node (Knoten). Was hier wenig dramatisch daherkommt, ist die Grundlage für den unglaublichen Erfolg der FEM:
- Wiederholung: Alle Trial-Funktionen sind gleich!
- Simplizität: Jede Trial-Funktion ist ein sehr einfaches Polynom - oft reicht erster Ordnung!
- Skalierbarkeit: die Genauigkeit steigern wir durch die Unterteilung in kleinere Finite Elemente!
Stab-Modelle
Für einen geraden Stab sieht eine Diskretisierung - hier mit gleich langen - Finiten Elementen so aus:
Der Ansatz - hier für einen Euler-Bernoulli-Balken - ist wieder allgemein
wobei die ϕi die linear unabhängigen Trial-Funktionen und die Qi ihre gesuchten "Wichtungsfaktoren" - hier: die gesuchten Auslenkungen und/oder Verdrehungen an den Knoten - sind.
Statt Polynome zu wählen, die sich über die gesamte Stab-Länge erstrecken wie beim Verfahren von Ritz, wählen wir hier lokale Ansatzfunktionen je Element, also
Schalen-Modelle
Bei Schalen-Modellen für ebene Strukturen müssen wir Verschiebungen und/oder Verdrehungen als Funktion von zwei unabhängigen Variablen - z.B. x und y - ausdrücken.
Als Ansatz für eine ebene Scheibe sind die Verschiebungen in der der Schalen-Ebene in die beiden Raumrichtungen
In den Knoten-Verschiebungen uij stehen dann die beiden Knoten-Verschiebungen Qij, Qkl, also
die wir wiederum in die Spaltenmatrix der gesuchten Größen Q einsortieren:
Mit linearen Trial-Functions wird die Näherungslösung je Element dann aus diesen Formen zusammengesetzt sein:
Das Gleichungssystem für lineare Bewegungsgleichungen
Weil die Ansatzfunktionen nur im Element gelten, ist
die Summe aller virtuellen Formänderungs-Energien aller Elemente.
Einsetzen und Ausführen der Integration in δΠ führt bei linearen Systemen (wir betrachten nur lineare Systeme) immer auf die Form
und δWa hat in der Statik immer die Form
also
Die Gleichgewichtsbedingungen des Prinzip der virtuellen Verrückungen lauten:
und das sind mehrere, denn:
- die einzelnen virtuellen Verrückungen in δW sind jeweils für sich unabhängig. Die Summe der
wird nur dann Null, wenn die Klammerausdrücke jeweils für sich verschwinden (Null werden). - Wir erhalten also ganz automatisch für jede unbekannte Koordinate eine Gleichgewichtsbedingung.
Ansatzfunktionen
Finite Elemente benutzen besondere Trial-Functions um die Verschiebungen einer Struktur sehr effizient abbilden zu können. Dies sind
Im Vergleich: das Verfahren von Ritz und die Methode der Finite Elemente
Literatur
Untergeordnete Seiten
Links