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

Aus numpedia
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
<math>\delta\Pi = \displaystyle \int_\ell E\,I\; w'' \cdot \delta w'' dx</math>.
<math>\delta\Pi = \displaystyle \int_\ell E\,I\; w'' \cdot \delta w'' dx</math>.


 
Zweimaliges Ableiten der linearen Trial-Funktion von oben führt dazu, dass die virtuelle Formänderungsarbeit komplett verschwindet - diese Ansatzfunktionen passen dann also nicht.
weimaliges Ableiten der linearen Trial-Funktion von oben führt dazu, dass die virtuelle Formänderungsarbeit komplett verschwindet - diese Ansatzfunktionen passen dann also nicht.


Ein Polynom zweiten Grades würde passen - hat aber nur drei Koeffizienten. Und eine ungerade Anzahl von Koeffizienten kann man nicht auf zwei Knoten gleich verteilen! Wie brauchen ein Polynom mit vier Koeffizienten.
Ein Polynom zweiten Grades würde passen - hat aber nur drei Koeffizienten. Und eine ungerade Anzahl von Koeffizienten kann man nicht auf zwei Knoten gleich verteilen! Wie brauchen ein Polynom mit vier Koeffizienten.


== Arbeitsschritte ==
Wir gehen die Arbeitsschritte zum Finden der Trial-Functions wie beim vorangehenden Schema durch:
Wir gehen die Arbeitsschritte zum Finden der Trial-Functions wie beim vorangehenden Schema durch:


Zeile 86: Zeile 86:
so dass wir uns den Verschiebungsverlauf nun als Linearkombination der Funktionen ''ϕ<sub>1</sub>, ϕ<sub>2</sub>, ϕ<sub>3</sub>'' und ''ϕ<sub>4</sub>'' denken können. Die Form-Funktionen der Koordinaten sind hier für ''l<sub>E</sub>=5'' aufgetragen.
so dass wir uns den Verschiebungsverlauf nun als Linearkombination der Funktionen ''ϕ<sub>1</sub>, ϕ<sub>2</sub>, ϕ<sub>3</sub>'' und ''ϕ<sub>4</sub>'' denken können. Die Form-Funktionen der Koordinaten sind hier für ''l<sub>E</sub>=5'' aufgetragen.
[[Datei:FEM-cubicTrialFcts-trialFunctions.png|mini|Trial-Functions.|alternativtext=|ohne]]
[[Datei:FEM-cubicTrialFcts-trialFunctions.png|mini|Trial-Functions.|alternativtext=|ohne]]
== Die virtuelle Formänderungs-Energie und die virtuelle Arbeit der d'Alembert'schen Trägheitskräfte je Euler-Bernoulli-Element für kubische Ansatz-Polynome ==
Die gesamte virtuelle Formänderungsenergie <i>δΠ</i> und die virtuelle Arbeit der d'Alembert'schen Trägheitskräfte <i>δW<sup>a</sup></i> setzen wir jetzt aus aus den Formänderungsenergien je Element zusammen, also
::<math>\delta\Pi = \displaystyle \sum_I \delta \Pi_i</math> und <math>\delta W^a = \displaystyle \sum_I \delta W^a_i</math>
also für einen Euler-Bernoulli-Balken
<math>
\begin{array}{lll}
\delta\Pi_i  &= +& \displaystyle \int_{\displaystyle \ell_i} E\,I\; w_i'' \cdot \delta w_i'' dx_i\\
\delta W^a_i &= -& \displaystyle \int_{\displaystyle \ell_i} \varrho\,A\; \ddot{w}_i \cdot \delta w_i dx_i
\end{array}
</math>
{{Template:MyCodeBlock|title=Virtual Strain Energy
|text=
Wir setzten also die Ansatzfunktionen von oben in dieses Integral ein und erhalten
::<math>\delta\Pi_i= \left({{{\delta W}}_{i-1}},{{{\delta\Phi}}_{i-1}},{{{\delta W}}_{i}},{{{\delta\Phi}}_{i}}\right)\cdot \displaystyle \frac{{E I}}{{{\ell}_{i}^{3}}} \cdot
\begin{pmatrix}
12 & 6\cdot {{\ell}_{i}} & -12 & 6\cdot {{\ell}_{i}}\\
6\cdot {{\ell}_{i}} & 4\cdot {{\ell}_{i}^{2}} & -6\cdot {{\ell}_{i}} & 2\cdot {{\ell}_{i}^{2}}\\
-12 & -6\cdot {{\ell}_{i}} & 12 & -6\cdot {{\ell}_{i}}\\
6\cdot {{\ell}_{i}} & 2\cdot {{\ell}_{i}^{2}} & -6\cdot {{\ell}_{i}} & 4\cdot {{\ell}_{i}^{2}}
\end{pmatrix}\cdot \begin{pmatrix}
{{W}_{i-1}}\\
{{\Phi}_{i-1}}\\
{{W}_{i}}\\
{{\Phi}_{i}}
\end{pmatrix}
</math>
Hier die Maxima-Kopiervorlage:
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue">
ϕ : [ 2*ξ^3-3*ξ^2+1,
      (ξ^3-2*ξ^2+ξ)*ℓ[i],
        3*ξ^2-2*ξ^3,
      (ξ^3-ξ^2)*ℓ[i]];
Q[i] : [ W[i-1], Φ[i-1], W[i],Φ[i]];
K[i] : EI[i]/ℓ[i]^3 * matrix(
          [    12,  6*ℓ[i],    -12,  6*ℓ[i]],
          [6*ℓ[i], 4*ℓ[i]^2, -6*ℓ[i], 2*ℓ[i]^2],
          [  -12,  -6*ℓ[i],      12,  -6*ℓ[i]],
          [6*ℓ[i], 2*ℓ[i]^2, -6*ℓ[i], 4*ℓ[i]^2]);
</syntaxhighlight>
|code=
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue">
/* Maxima */
/* trial-functions */
ϕ : [2*ξ^3-3*ξ^2+1,
    ℓ*ξ^3-2*ℓ*ξ^2+ℓ*ξ,
    3*ξ^2-2*ξ^3,
    ℓ*ξ^3-ℓ*ξ^2];
/* for element "i" */
Q[i] : [ W[i-1](t), Φ[i-1](t), W[i](t), Φ[i](t)];
δQ[i] : [δW[i-1]  ,δΦ[i-1]  ,δW[i]  ,δΦ[i]  ];
w:  Q[i].φ;
δw: δQ[i].φ;
PvV : [δΠ[i] = 'integrate( EI*'diff(w,ξ,2)/ℓ^2*'diff(δw,ξ,2)/ℓ^2,ξ,0,1)*ℓ,
      δW[i] = 'integrate(  μ*'diff(w,t,2)*δw,ξ,0,1)*ℓ];
PvV : expand(ev(PvV,nouns));
K : funmake('matrix,
        makelist(
              makelist(
                  coeff(coeff(subst(PvV[1],δΠ[i]),δQ[i][row]),Q[i][col]),
                                      row,1,4),col,1,4));
print(δΠ[i],"=", δQ[i],"*",EI/ℓ^3,"*",K/(EI/ℓ^3),"*",transpose(Q[i]))$
</syntaxhighlight>
}}
{{Template:MyCodeBlock|title=Virtual Work of d'Alembert-Forces
|text=
Wir setzten also auch hier die Ansatzfunktionen in das Integral für <i>δW<sup>a</sup></i> ein und erhalten mit <math>\mu=\varrho\, A</math>
::<math>\delta W^a_i=\left({{{\delta W}}_{i-1}},{{{\delta\Phi}}_{i-1}},{{{\delta W}}_{i}},{{{\delta\Phi}}_{i}}\right)\cdot \displaystyle \frac{\displaystyle {\varrho A \ell_i}}{{\displaystyle35}} \cdot
\begin{pmatrix} 13 & \frac{11 \ell_i}{6} & \frac{9}{2} & -\frac{13 \ell_i}{12}\\
                \frac{11 \ell_i}{6} & \frac{{{\ell_i}^{2}}}{3} & \frac{13 \ell_i}{12} & -\frac{{{\ell_i}^{2}}}{4}\\
                \frac{9}{2} & \frac{13 \ell_i}{12} & 13 & -\frac{11 \ell_i}{6}\\
              -\frac{13 \ell_i}{12} & -\frac{{{\ell_i}^{2}}}{4} & -\frac{11 \ell_i}{6} & \frac{{{\ell_i}^{2}}}{3}
\end{pmatrix}
\cdot
\begin{pmatrix}
{\ddot{W}_{i-1}}\\
{\ddot{\Phi}_{i-1}}\\
{\ddot{W}_{i}}\\
{\ddot{\Phi}_{i}}
\end{pmatrix}
</math>
Hier die Maxima-Kopiervorlage:
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue">
ϕ : [ 2*ξ^3-3*ξ^2+1,
      (ξ^3-2*ξ^2+ξ)*ℓ[i],
        3*ξ^2-2*ξ^3,
      (ξ^3-ξ^2)*ℓ[i]];
Q[i] : [ W[i-1], Φ[i-1], W[i],Φ[i]];
M[i] : μ*ℓ[i]/35*[[13, (11*ℓ[i])/6, 9/2, -(13*ℓ[i])/12],
  [(11*ℓ[i])/6, ℓ[i]^2/3, (13*ℓ[i])/12, -ℓ[i]^2/4],
  [9/2, (13*ℓ[i])/12, 13, -(11*ℓ[i])/6],
  [-(13*ℓ[i])/12, -ℓ[i]^2/4, -(11*ℓ[i])/6, ℓ[i]^2/3]])
</syntaxhighlight>
|code=
<syntaxhighlight lang="notmuch" line='line' style="border:1px solid blue">
/* Maxima */
/* trial-functions */
φ : [2*ξ^3-3*ξ^2+1,
    ℓ*ξ^3-2*ℓ*ξ^2+ℓ*ξ,
    3*ξ^2-2*ξ^3,
    ℓ*ξ^3-ℓ*ξ^2];
/* for element "i" */
Q[i] : [ W[i-1](t), Φ[i-1](t), W[i](t), Φ[i](t)];
δQ[i] : [δW[i-1]  ,δΦ[i-1]  ,δW[i]  ,δΦ[i]  ];
w:  Q[i].φ;
δw: δQ[i].φ;
PvV : [δΠ[i] = 'integrate( EI*'diff(w,ξ,2)/ℓ^2*'diff(δw,ξ,2)/ℓ^2,ξ,0,1)*ℓ,
      δW[i] = 'integrate( -μ*'diff(w,t,2)*δw,ξ,0,1)*ℓ];
PvV : expand(ev(PvV,nouns));
M : funmake('matrix,
        makelist(
              makelist(
                  coeff(coeff(subst(PvV[2],δW[i]),δQ[i][row]),diff(Q[i][col],t,2)),
                                      row,1,4),col,1,4));
print(δW[i],"=", δQ[i],"*",μ*ℓ/35,"*",M/(μ*ℓ/35),"*",transpose(diff(Q[i],t,2)))$
</syntaxhighlight>
}}
'''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]]
* [[Sources/Anleitungen/FEM-Formulierung für den Euler-Bernoulli-Balken|FEM-Formulierung für den Euler-Bernoulli-Balken]]

Aktuelle Version vom 28. Juni 2022, 08:28 Uhr

Im Vergleich zu linearen Ansatzfunktionen brauchen wir oft Trial-Functions höherer Ordnung. So ist beim Euler-Bernoulli-Balken die virtuelle Formänderungsarbeit

.

Zweimaliges Ableiten der linearen Trial-Funktion von oben führt dazu, dass die virtuelle Formänderungsarbeit komplett verschwindet - diese Ansatzfunktionen passen dann also nicht.

Ein Polynom zweiten Grades würde passen - hat aber nur drei Koeffizienten. Und eine ungerade Anzahl von Koeffizienten kann man nicht auf zwei Knoten gleich verteilen! Wie brauchen ein Polynom mit vier Koeffizienten.

Arbeitsschritte

Wir gehen die Arbeitsschritte zum Finden der Trial-Functions wie beim vorangehenden Schema durch:

  • A→B Diskretisierung: Wir teilen die Struktur in N Stücke ( = Finite Elemente ) der Länge lE. An jedem Ende eines Finiten Elements entsteht ein Knoten von insgesamt N+1 Knoten.
  • B→C Trial-Funktion je Element:Je Element wählen wir ein kubisches Polynom (ein Polynom 3.ten Grades mit vier Koeffizienten) als Trial-Funktion
    so dass wir als Approximation nun
    haben, mit den {ai,3, ai,2, a'i,1 ,ai,0} als gesuchte Wichtungsfaktoren.
  • C→D Anpassen der Trial-Funktion an Übergangsbedingungen: Die 4N Koeffizienten {ai,3, ai,2, a'i,1 ,ai,0} können wir wiederum nicht anschaulich interpretieren. Mit der Koordinatentransformation auf die lokale Element-Koordinate ξi ist:
    ξi ist nun die lokale, dimensionslose Ortskoordinate im Element. Für das kubische Polynom müssen wir nun noch sicherstellen, dass die Übergangsbedingungen zwischen den Elementen erfüllt sind. Das ist etwas komplizierter als bei der linearen Ansatzfunktion. Sie sehen, dass bei einem Balken nicht nur die Auslenkung der Elemente an den Übergangsknoten gleich sein muss - sondern auch der Kipp-Winkel Φ:
    Koordinaten des Stabes.

    Die Übergangsbedingungen sind also

    Das heißt: neben den Gleichgewichtsbedingungen müssen wir nun auch 2∙(N-1) algebraische Nebenbedingungen zwischen den bi,3bi,2bi,1, bi,0 erfüllen, damit an den Knoten die geometrischen Übergangsbedingungen erfüllt sind. Wieder ersetzen wir die bij durch die Knoten-Verschiebungen und Kipp-Winkel Φ des Balkens in den Knoten:

    Trial Functions ϕi

    Durch Einsetzten unseres Polynoms in diese Randbedingungen können wir die vier generischen Koeffizienten bi,3,  bi,2,  bi,1, bi,0  gegen die Knoten-Koordinaten Wi-1, Φi-1, Wi, Φi tauschen und damit die Übergangsbedingungen implizit erfüllen! Wir finden

    und damit

    mit den 2(N+1) Koordinaten der Knoten-Verschiebungen Wn,Φn  als gesuchten Größen.


    /* Maxima */
    w(xi) := b[i,3]*xi^3+b[i,2]*xi^2+b[i,1]*xi+b[i,0];
    
    /* boundary conditions */
    BC: [w(0)=W[i-1],
         subst(0,xi,diff(w(xi),xi))/l[i] = Phi[i-1],
         w(1)=W[i],
         subst(1,xi,diff(w(xi),xi))/l[i] = Phi[i]];
    
    /* solve for polynom coeff. */
    sol: solve(BC,[b[i,3],b[i,2],b[i,1],b[i,0]])[1];
    print('w(xi),"=",subst(sol,w(xi)))$
    
    /* new coordinates = nodal displacements */
    Q : [W[i-1],Phi[i-1],W[i],Phi[i]];
    print('w(xi),"=",facsum(subst(sol,w(xi)),Q))$
    
    /* plot trial fcts */
    trials : expand(subst(sol,w(xi)));
    trials: makelist(coeff(trials,Q[j]), j,1,4);
    plot2d(subst([l[i]=5],trials),[xi,0,1], [xlabel, "ξ→"],
           [legend, "ϕ1", "ϕ2", "ϕ3", "ϕ4"],
           [style, [lines,3]] );



  • 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  
    ,
    so dass wir uns den Verschiebungsverlauf nun als Linearkombination der Funktionen ϕ1, ϕ2, ϕ3 und ϕ4 denken können. Die Form-Funktionen der Koordinaten sind hier für lE=5 aufgetragen.
    Trial-Functions.

    Die virtuelle Formänderungs-Energie und die virtuelle Arbeit der d'Alembert'schen Trägheitskräfte je Euler-Bernoulli-Element für kubische Ansatz-Polynome

    Die gesamte virtuelle Formänderungsenergie δΠ und die virtuelle Arbeit der d'Alembert'schen Trägheitskräfte δWa setzen wir jetzt aus aus den Formänderungsenergien je Element zusammen, also

    und

    also für einen Euler-Bernoulli-Balken

    Virtual Strain Energy

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

    Hier die Maxima-Kopiervorlage:

    ϕ : [ 2*ξ^3-3*ξ^2+1,
           (ξ^3-2*ξ^2+ξ)*ℓ[i],
            3*ξ^2-2*ξ^3,
           (ξ^3-ξ^2)*ℓ[i]];
    Q[i] : [ W[i-1], Φ[i-1], W[i],Φ[i]];
    K[i] : EI[i]/ℓ[i]^3 * matrix(
               [    12,   6*ℓ[i],     -12,   6*ℓ[i]],
               [6*ℓ[i], 4*ℓ[i]^2, -6*ℓ[i], 2*ℓ[i]^2],
               [   -12,  -6*ℓ[i],      12,  -6*ℓ[i]],
               [6*ℓ[i], 2*ℓ[i]^2, -6*ℓ[i], 4*ℓ[i]^2]);

    /* Maxima */
    
    /* trial-functions */
    ϕ : [2*ξ^3-3*ξ^2+1,
         ℓ*ξ^3-2*ℓ*ξ^2+ℓ*ξ,
         3*ξ^2-2*ξ^3,
         ℓ*ξ^3-ℓ*ξ^2];
    
    /* for element "i" */
     Q[i] : [ W[i-1](t), Φ[i-1](t), W[i](t), Φ[i](t)];
    δQ[i] : [δW[i-1]   ,δΦ[i-1]   ,δW[i]   ,δΦ[i]   ];
    
     w:  Q[i].φ;
    δw: δQ[i].φ;
    
    PvV : [δΠ[i] = 'integrate( EI*'diff(w,ξ,2)/ℓ^2*'diff(δw,ξ,2)/ℓ^2,ξ,0,1)*ℓ,
           δW[i] = 'integrate(  μ*'diff(w,t,2)*δw,ξ,0,1)*ℓ];
    PvV : expand(ev(PvV,nouns));
    K : funmake('matrix,
            makelist(
                  makelist(
                       coeff(coeff(subst(PvV[1],δΠ[i]),δQ[i][row]),Q[i][col]),
                                          row,1,4),col,1,4));
    
    print(δΠ[i],"=", δQ[i],"*",EI/ℓ^3,"*",K/(EI/ℓ^3),"*",transpose(Q[i]))$




    Virtual Work of d'Alembert-Forces

    Wir setzten also auch hier die Ansatzfunktionen in das Integral für δWa ein und erhalten mit

    Hier die Maxima-Kopiervorlage:

    ϕ : [ 2*ξ^3-3*ξ^2+1,
           (ξ^3-2*ξ^2+ξ)*ℓ[i],
            3*ξ^2-2*ξ^3,
           (ξ^3-ξ^2)*ℓ[i]];
    Q[i] : [ W[i-1], Φ[i-1], W[i],Φ[i]];
    M[i] : μ*ℓ[i]/35*[[13,	(11*ℓ[i])/6,	9/2,	-(13*ℓ[i])/12],
    		  [(11*ℓ[i])/6,	ℓ[i]^2/3,	(13*ℓ[i])/12,	-ℓ[i]^2/4],
    		  [9/2,	(13*ℓ[i])/12,	13,	-(11*ℓ[i])/6],
    		  [-(13*ℓ[i])/12,	-ℓ[i]^2/4,	-(11*ℓ[i])/6,	ℓ[i]^2/3]])

    /* Maxima */
    
    /* trial-functions */
    φ : [2*ξ^3-3*ξ^2+1,
         ℓ*ξ^3-2*ℓ*ξ^2+ℓ*ξ,
         3*ξ^2-2*ξ^3,
         ℓ*ξ^3-ℓ*ξ^2];
    
    /* for element "i" */
     Q[i] : [ W[i-1](t), Φ[i-1](t), W[i](t), Φ[i](t)];
    δQ[i] : [δW[i-1]   ,δΦ[i-1]   ,δW[i]   ,δΦ[i]   ];
    
     w:  Q[i].φ;
    δw: δQ[i].φ;
    
    PvV : [δΠ[i] = 'integrate( EI*'diff(w,ξ,2)/ℓ^2*'diff(δw,ξ,2)/ℓ^2,ξ,0,1)*ℓ,
           δW[i] = 'integrate( -μ*'diff(w,t,2)*δw,ξ,0,1)*ℓ];
    PvV : expand(ev(PvV,nouns));
    
    M : funmake('matrix,
            makelist(
                  makelist(
                       coeff(coeff(subst(PvV[2],δW[i]),δQ[i][row]),diff(Q[i][col],t,2)),
                                          row,1,4),col,1,4));
    
    print(δW[i],"=", δQ[i],"*",μ*ℓ/35,"*",M/(μ*ℓ/35),"*",transpose(diff(Q[i],t,2)))$




    Links: