Gelöste Aufgaben/FEAD
Aufgabenstellung
Statt Formfunktionen über die ganze Stablänge anzusetzten wie in FEAB gehen wir jetzt nach der Methode der Finiten Elemente vor.
Gesucht ist die Näherungslösung für die statische Auslenkung der Stab-Querschnitte mit dem Prinzip der Virtuellen Verrückungen und dem Ansatz nach der Methode der Finiten Elemente. Dazu wir unterteilen die Struktur in Elemente und setzen Lineare Trialfunctions für die Verformung in den Elemeten an.
Lösung mit Matlab
Header
Die Lösung basiert auf Maxima 16.04.2 - wir interessieren uns also vor allem für die Struktur der Lösung.
/*******************************************************/
/* MAXIMA script */
/* version: wxMaxima 16.04.2 */
/* author: Andreas Baumgart */
/* last updated: 2017-10-10 */
/* ref: FENV step 4 im Prozess: FE-Ansätze */
/* description: mit dem PvV werden die Bewegungsgl. */
/* für einen Stab unter Gewichtskraft erstellt*/
/*******************************************************/
Declarations
Für Maxima brauchen wir einige Deklarationen.
Die Anzahl der Finiten-Elementen I wählen wir zu
Wir wählen Elemente gleicher Länge, also ist die Elementlänge li im Element i
- .
/*******************************************************/
/* declare variational variables - see 6.3 Identifiers */
declare("δW", alphabetic);
declare("δA", alphabetic);
declare("δΠ", alphabetic);
declare("δQ", alphabetic);
declare("δu", alphabetic);
/*******************************************************/
/* parameter: Number of Elements */
I : 3; /* change as required */
Formfunctions
Wir können die Trial-Functions als
mit
- .
Für i=2 sieht die Trial-Function dann so aus:
Für die Methode der Finiten Elemente ist allerdings die Sichtweise je Elemement anschaulicher, also
- ,
Und für Element i=2 wird der Verlauf der Querschnitts-Verschiebung also durch
- .
entsprechend
beschreiben.
Bei 3 Finiten Elementen sind die System-Koordinaten dann
/* coordinates and their variations */
Q : makelist( U[i],i,0,I);
δQ : makelist(δU[i],i,0,I);
/* trial functions */
Phi : [1-(x/l[i]),(x/l[i])];
/* Ansatz for element i */
u[i]: sum( U[i+j-2]*Phi[j],j,1,2);
δu[i]: sum(δU[i+j-2]*Phi[j],j,1,2);
Element-wise contributions to δW
Die gesamte virtuelle Arbeit am System können wir nun als Summe der virtuellen Einzelarbeiten je Element hinschreiben, also
- .
Für jedes Element erhalten wir die virtuelle Formänderungsenergie
und die virtuelle Arbeit der äußeren, eingeprägten Gewichtskraft
- .
/* Equilibrium */
δΠ[i] : E*A*integrate(diff(u[i],x)*diff(δu[i],x),x,0,l[i]);
δA[i] : integrate(rho*g*A*δu[i], x,0,l[i]);
K[i] : funmake('matrix, makelist(makelist(coeff(coeff(expand( δΠ[i]), δU[i+j]),U[i+k]), j,-1,0), k,-1,0));
P[i] : funmake('matrix, makelist( [coeff(expand( δA[i]), δU[i+j])] , j,-1,0) );
Equlilibrium Conditions
Für jedes Element müssen wir nun die virtuellen Arbeiten zum Gesamt-Gleichungssystem zusammenaddieren.
Die Gleichgewichtsbedingung
liefern ein Gleichungssystem, in das wir nun die kinematische Randbedingung U0=0, δU0=0 durch Streichen der ersten Zeile des Gleichungssystems und der ersten Spalte der Gesamt-Steifigkeitsmatrix einarbeiten.
Wir wählen nun noch für jedes Element die gleiche Element-Länge ℓi = ℓe, mit ℓe = ℓ0/3 und es bleibt
- .
/* Assembling the System Equations */
K[0] : zeromatrix(length(Q),length(Q))$
P[0] : zeromatrix(length(Q), 1 )$
for j:1 thru I do
(for row:1 thru 2 do
(P[0][j-1+row][ 1 ]: P[0][j-1+row][ 1 ]+P[i][row][ 1 ],
for col:1 thru 2 do
K[0][j-1+row][j-1+col]: K[0][j-1+row][j-1+col]+K[i][row][col]));
/* Incorporate Boundary Condition U[0]=0 */
K[0] : submatrix(1,K[0],1);
P[0] : submatrix(1,P[0]);
Solving
Die Gleichgewichtsbedingungen lösen wir nun und erhalten
/* solution */
sol[0]: linsolve_by_lu(K[0], P[0]);
sol[1]: append([U[0]=0],makelist(U[i]=sol[0][1][i][1],i,1,I))
Post-processing
Wir tragen die Ergebnisse für die numerische Näherungslösung gegen die exakte Lösung auf. Dabei setzen wir li=l0/3. Die Verschiebungen sind elementweise für die Elemente e = 1,2,3 aufgetragen:
/* plot results*/
/* define piecewise, normalized functions u[0] */
u[0]: subst(sol[1],makelist(subst([i=j],subst([x=xi*l[i]],u[i])),j,1,I))$
/* normalize */
u[0]: expand(subst([l[i]=l[0]/I],u[0])/(rho*g*l[0]^2/E));
/* analytic solution */
analytic : subst([xi=xi/I],(xi)*(1-(xi)/2))$
toPlot: append( [[parametric, t, analytic, [t, 0, I]]],
makelist([parametric, i-1+t, u[0][i], [t, 0, 1]],i,1,I))$
/* use t as independent variable for parametric plot */
toPlot: subst([xi=t], toPlot)$
/* plot */
legende : append([legend, "analytic"],makelist(simplode(["e = ",i]),i,1,I))$
plot2d(toPlot, legende,
[title, sconcat("number of elements I = ",I)],
[xlabel, "x/l[e] ->"], [ylabel, "u(x)/(rho*g*l/E)"],
[gnuplot_preamble,"set key bottom"])$
✔ Spannungen im Stab: |
Tragen Sie auch die Spannungen im Stab über die Stablänge an! Berechnen Sie die Spannungen auf Basis der Dehnung
|
Links
- ...
Literature
- ...