Randwertprobleme/Methoden zur Lösung von Randwertproblemen/Finite Elemente Methode/FEM: Trial-Functions für lineare Ansatz-Polynome: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 47: Zeile 47:
'''C→D Anpassen der Trial-Funktion an Übergangsbedingungen:'''  Die ''2N'' Koeffizienten ''a<sub>i,1</sub>, a<sub>i,0</sub>'' können wir nicht anschaulich interpretieren - und das ist bei komplexen Zusammenhängen wie hier immer ein Nachteil. Das ändert sich, wenn wir eine Koordinatentransformation auf eine lokale Element-Koordinate ''ξ<sub>i</sub>'' durchführen:
'''C→D Anpassen der Trial-Funktion an Übergangsbedingungen:'''  Die ''2N'' Koeffizienten ''a<sub>i,1</sub>, a<sub>i,0</sub>'' können wir nicht anschaulich interpretieren - und das ist bei komplexen Zusammenhängen wie hier immer ein Nachteil. Das ändert sich, wenn wir eine Koordinatentransformation auf eine lokale Element-Koordinate ''ξ<sub>i</sub>'' durchführen:


<math>\bar{u}_i(\xi) = b_{i,1}\cdot\xi_i + b_{i,1} \text{ mit } x = x_i + \ell_E\cdot \xi_i, \;\;x_i = (i-1) \cdot \ell_E</math>. ''ξ''<sub>i</sub> ist nun die lokale, dimensionslose Ortskoordinate im Element. Für die Geradenfunktion müssen wir nun noch sicherstellen, dass die Übergangsbedingungen zwischen den Elementen erfüllt sind, also
:: <math>\bar{u}_i(\xi) = b_{i,1}\cdot\xi_i + b_{i,1} \text{ mit } x = x_i + \ell_E\cdot \xi_i, \;\;x_i = (i-1) \cdot \ell_E</math>.


<math>\begin{array}{rcl}\bar{u}_i(1) &=& \bar{u}_{i+1}(0)\\\text{ also}\\b_{i,1} + b_{i,0} &=& b_{i+1,0}\end{array}</math>  Das heißt: neben den Gleichgewichtsbedingungen müssen wir nun auch N-1 algebraische Nebenbedingungen zwischen den ''b<sub>i,1</sub>'', ''b<sub>i,0</sub>'' erfüllen, damit an den Knoten die geometrischen Übergangsbedingungen erfüllt sind (damit zwischen den Elementen im Verschiebungszustand keine Lücke klafft). Das ist extrem aufwändig wenn Sie bedenken, dass FE-Programme Millionen von Freiheitsgraden = Koordinaten haben können. Also ist das so nicht gewollt. Elegant wird es, wenn wir statt der ''b<sub>ij</sub>'' die Knoten-Verschiebungen als Koordinaten nutzen:  ''ξ''<sub>i</sub> = 0: der obere Rand und  ''ξ''<sub>i</sub> = 1: der untere Rand also
''ξ''<sub>i</sub> ist nun die lokale, dimensionslose Ortskoordinate im Element. Für die Geradenfunktion müssen wir nun noch sicherstellen, dass die Übergangsbedingungen zwischen den Elementen erfüllt sind, also


<math>\bar{u}_i(x) = \underbrace{\left(U_i-U_{i-1}\right)}_{\displaystyle =b_{i,1}} \cdot \xi + \underbrace{U_{i-1}}_{\displaystyle =b_{i,0}}</math> Denn nun erhalten wir
::<math>\begin{array}{rcl}\bar{u}_i(1) &=& \bar{u}_{i+1}(0)\\\text{ also}\\b_{i,1} + b_{i,0} &=& b_{i+1,0}\end{array}</math>


<math>\tilde{u}(x) = \displaystyle \sum_{N+1} U_{n} \cdot \phi_n(x)</math> mit den ''N+1'' Koordinaten der Knoten-Verschiebungen ''U<sub>n</sub>'' als gesuchten Größen.
Das heißt: neben den Gleichgewichtsbedingungen müssen wir nun auch N-1 algebraische Nebenbedingungen zwischen den ''b<sub>i,1</sub>'', ''b<sub>i,0</sub>'' erfüllen, damit an den Knoten die geometrischen Übergangsbedingungen erfüllt sind (damit zwischen den Elementen im Verschiebungszustand keine Lücke klafft). Das ist extrem aufwändig wenn Sie bedenken, dass FE-Programme Millionen von Freiheitsgraden = Koordinaten haben können. Also ist das so nicht gewollt. Elegant wird es, wenn wir statt der ''b<sub>ij</sub>'' die Knoten-Verschiebungen als Koordinaten nutzen:  ''ξ''<sub>i</sub> = 0: der obere Rand und  ''ξ''<sub>i</sub> = 1: der untere Rand also
 
::<math>\bar{u}_i(x) = \underbrace{\left(U_i-U_{i-1}\right)}_{\displaystyle =b_{i,1}} \cdot \xi + \underbrace{U_{i-1}}_{\displaystyle =b_{i,0}}</math>
 
Denn nun erhalten wir
 
::<math>\tilde{u}(x) = \displaystyle \sum_{N+1} U_{n} \cdot \phi_n(x)</math>
 
mit den ''N+1'' Koordinaten der Knoten-Verschiebungen ''U<sub>n</sub>'' als gesuchten Größen.
</li>
</li>
<li>
<li>
'''D→E Einführung der Trial-Funktionen:'''  Jetzt fehlt nur noch eine Kleinigkeit: wir sortieren die Gleichung für die Element-Verschiebung nach den Knoten-Variablen um und erhalten
'''D→E Einführung der Trial-Funktionen:'''  Jetzt fehlt nur noch eine Kleinigkeit: wir sortieren die Gleichung für die Element-Verschiebung nach den Knoten-Variablen um und erhalten


<math>\bar{u}_i(x) = U_{i-1}\cdot \underbrace{\left(1-\xi_i\right)}_{\displaystyle =:\phi_{1}} + U_{i}\cdot \underbrace{\xi_i}_{\displaystyle =:\phi_{2}(\xi)}</math> so dass wir uns den Verschiebungsverlauf nun als Linearkombination der Funktionen ''ϕ<sub>1</sub>'' und ''ϕ<sub>2</sub>'' denken können.  Das zeigt das folgende Bild:[[Datei:FEM-linearTrialFcts-Überlagerung.png|150px|mini|Überlagerung der Trial-Functions.|alternativtext=|ohne]]Die resultierenden Form-Funktionen der Koordinaten ''U<sub>n</sub>'' der Verschiebung sind in '''E''' aufgetragen.
::<math>\bar{u}_i(x) = U_{i-1}\cdot \underbrace{\left(1-\xi_i\right)}_{\displaystyle =:\phi_{1}} + U_{i}\cdot \underbrace{\xi_i}_{\displaystyle =:\phi_{2}(\xi)}</math>
 
so dass wir uns den Verschiebungsverlauf nun als Linearkombination der Funktionen ''ϕ<sub>1</sub>'' und ''ϕ<sub>2</sub>'' denken können.  Das zeigt das folgende Bild:
[[Datei:FEM-linearTrialFcts-Überlagerung.png|250px|mini|Überlagerung der Trial-Functions.|alternativtext=|ohne]]Die resultierenden Form-Funktionen der Koordinaten ''U<sub>n</sub>'' der Verschiebung sind in '''E''' aufgetragen.
</li>
</li>
</ul>
</ul>
Zeile 159: Zeile 170:
           [1/2, 1 ]);
           [1/2, 1 ]);
</syntaxhighlight>
</syntaxhighlight>
</math>
|code=
|code=
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue">
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue">

Aktuelle Version vom 22. Februar 2021, 09:54 Uhr

Auch wenn es so aussieht, als wäre alles zur FEM gesagt, sind die Trial-Funktionen der FEM eine besondere Delikatesse!

Wie bei allen wirklichen Delikatessen steht vor dem Genuss noch etwas Arbeit, denn:

Es gibt einen Trick, wie diese Trial-Funktionen aussehen, damit wir Sie am Rechner einfach zusammenbauen können.

Dafür ist dieses Beispiel (aus FEAB):

Stabmodell im Erdschwerefeld.

Ein dehnbarer Stab ist an der "Decke" im Erd-Schwerefeld aufgehängt. Der Stab hat die Dehnsteifigkeit EA, die Dichte ρ und die Gesamtlänge ''ℓ''.

Gesucht ist eine Approximation der Auslenkung ''u(x)''.

Arbeitsschritte

Die Einführung der Trial-Funktionen der Finiten Elemente ist hier schematisch aufgezeichnet:

STEP A B C D E
Einführung der Trial-Functions

Dies sind die Arbeitsschritte zur Umsetzung:

  • A→B Diskretisierung: Wir teilen die Struktur in N=6 Stücke ( = Finite Elemente ) gleicher Länge E=ℓ/N. An jedem Ende eines Finiten Elements entsteht ein Knoten, die nummerieren wir durch von 0 ...6.
  • B→C Trial-Funktion je Element:Je Element wählen wir eine Geradenfunktion (ein Polynom 1sten Grades) als Trial-Funktion
    u¯i(x)={ai,1x+ai,0 im Element i0 sonst
    so dass wir als Approximation nun
    u~(x)=2NAnϕn(x)
    haben, mit den {ai,1, ai,0} als gesuchte Wichtungsfaktoren. Hinzu kommen die Übergangsbedingungen: an N-1 Knoten müssen wir für die Geradengleichungen fordern, dass sie stetig aneinander anschließen, also
    ui1(x)|unten=ui(x)|oben
  • C→D Anpassen der Trial-Funktion an Übergangsbedingungen: Die 2N Koeffizienten ai,1, ai,0 können wir nicht anschaulich interpretieren - und das ist bei komplexen Zusammenhängen wie hier immer ein Nachteil. Das ändert sich, wenn wir eine Koordinatentransformation auf eine lokale Element-Koordinate ξi durchführen:
    u¯i(ξ)=bi,1ξi+bi,1 mit x=xi+Eξi,xi=(i1)E.
    ξi ist nun die lokale, dimensionslose Ortskoordinate im Element. Für die Geradenfunktion müssen wir nun noch sicherstellen, dass die Übergangsbedingungen zwischen den Elementen erfüllt sind, also
    u¯i(1)=u¯i+1(0) alsobi,1+bi,0=bi+1,0
    Das heißt: neben den Gleichgewichtsbedingungen müssen wir nun auch N-1 algebraische Nebenbedingungen zwischen den bi,1, bi,0 erfüllen, damit an den Knoten die geometrischen Übergangsbedingungen erfüllt sind (damit zwischen den Elementen im Verschiebungszustand keine Lücke klafft). Das ist extrem aufwändig wenn Sie bedenken, dass FE-Programme Millionen von Freiheitsgraden = Koordinaten haben können. Also ist das so nicht gewollt. Elegant wird es, wenn wir statt der bij die Knoten-Verschiebungen als Koordinaten nutzen: ξi = 0: der obere Rand und ξi = 1: der untere Rand also
    u¯i(x)=(UiUi1)=bi,1ξ+Ui1=bi,0
    Denn nun erhalten wir
    u~(x)=N+1Unϕn(x)
    mit den N+1 Koordinaten der Knoten-Verschiebungen Un als gesuchten Größen.
  • D→E Einführung der Trial-Funktionen: Jetzt fehlt nur noch eine Kleinigkeit: wir sortieren die Gleichung für die Element-Verschiebung nach den Knoten-Variablen um und erhalten
    u¯i(x)=Ui1(1ξi)=:ϕ1+Uiξi=:ϕ2(ξ)
    so dass wir uns den Verschiebungsverlauf nun als Linearkombination der Funktionen ϕ1 und ϕ2 denken können. Das zeigt das folgende Bild:
    Überlagerung der Trial-Functions.
    Die resultierenden Form-Funktionen der Koordinaten Un der Verschiebung sind in E aufgetragen.
STEP A:
Lageplan des Systems
Step B:
Diskretisierung in Elemente und Knoten
Step C:
Lineare Trial-Funktion im Element 4
Step D:
Alle Trial-Funktionen auf einen Blick
Step E:
Beitrag der einzelnen Knoten und Ihrer Form-Funktionen.
Stabmodell im Erdschwerefeld. Stabmodell im Erdschwerefeld. Stabmodell im Erdschwerefeld. Stabmodell im Erdschwerefeld. Stabmodell im Erdschwerefeld.

Numerische Ergebnisse finden Sie in Aufgabe FEAD.

Die virtuelle Formänderungs-Energie je Dehnstab-Element für lineare Ansatz-Polynome

Die gesamte Formänderungsenergie setzen wir jetzt aus aus den Formänderungsenergien je Element zusammen, also

δΠ=IδΠi

also für eine Dehnstab-Element

δΠi=iEAuiδuidxi

Virtual Strain Energy

Wir setzten also die Ansatzfunktionen von oben in dieses Integral ein und erhalten

δΠi=(δUi,δUi1)EAi(+111+1)(Ui1Ui)

Hier die Maxima-Kopiervorlage:

phi : [ 1-xi,
          xi];
Q[i] : [ U[i-1], U[i]];
K[i] : EA[i]/l[i] * matrix(
           [+1,-1],
           [-1,+1]);

/* Maxima ( continued) */
declare("δW", alphabetic);
declare("δΠ", alphabetic);
declare("δu", alphabetic);
declare("δU", alphabetic);

phi : [ 1-xi, xi];
Q : [[ U[i-1],  U[i]],
     [δU[i-1], δU[i]]];

trials: [u = Q[1].phi, δu = Q[2].phi];

PvV : δΠ[i] = 'integrate(EA*'diff(u,x[i])*'diff(δu,x[i]),x[i],0,l[i]);
PvV : subst([xi=x[i]/l[i]],subst(trials,PvV));
PvV : expand(ev(PvV,nouns));
K : funmake('matrix,
        makelist(
              makelist(
                   coeff(coeff(rhs(PvV),Q[2][i]),Q[1][j]),
                                      i,1,2),j,1,2));

print(δΠ[i],"=", Q[2],"*",EA/l[i],"*",K/(EA/l[i]),"*",transpose(Q[1]))$




Die virtuelle Arbeit der d'Alembert'schen Trägheitskräfte je Dehnstab-Element für lineare Ansatz-Polynome

Die gesamte virtuelle Arbeit der d'Alembert'sche Trägheitskräfte setzen wir jetzt aus aus den virtuellen Arbeiten je Element zusammen, also

δWa=IδWia

also für eine Dehnstab-Element

δWia=iϱA(u¨i)δuidxi

Virtual Work of d'Alembert Forces

Wir setzten also die Ansatzfunktionen von oben in dieses Integral ein und erhalten

δWia=(δUi,δUi1)ϱAi3(112121)(U¨i1U¨i)

Hier die Maxima-Kopiervorlage:

phi : [ 1-xi,
          xi];
Q[i] : [ U[i-1](t), U[i](t)];
M[i] : rho*A*l[i]/3 * matrix(
           [ 1 ,1/2],
           [1/2, 1 ]);

/* Maxima ( continued) */
declare("δW", alphabetic);
declare("δΠ", alphabetic);
declare("δu", alphabetic);
declare("δU", alphabetic);

phi : [ 1-xi, xi];
Q : [[ U[i-1](t),  U[i](t)],
     [δU[i-1]   , δU[i]   ]];

trials: [u(x[i],t) = Q[1].phi, δu(x[i]) = Q[2].phi];

PvV : δW^a[i] = -'integrate(rho*A*'diff(u(x[i],t),t,2) * δu(x[i]), x[i],0,l[i]);
PvV : subst(subst([xi=x[i]/l[i]],trials),PvV);
PvV : expand(ev(PvV,nouns));
M : funmake('matrix,
        makelist(
              makelist(
                   coeff(coeff(rhs(-PvV),Q[2][i]),'diff(Q[1][j],t,2)),
                                      i,1,2),j,1,2));

print(δW^a[i],"=", Q[2],"*",rho*A*l[i]/3,"*",M/(rho*A*l[i]/3),"*",transpose(diff(Q[1],t,2)))$