Gelöste Aufgaben/TC13: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 186: | Zeile 186: | ||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1+1 | /**** equilibrium conditions ***/ | ||
/* generic stiffness matrix */ | |||
k[0] : E*I[i]/l[i]^3*makelist(makelist( | |||
integrate( | |||
diff(phi[i],xi,2)*diff(phi[j],xi,2), | |||
xi,0,1), | |||
j,1,4),i,1,4); | |||
k[0] : funmake('matrix,k[0]); | |||
/* element stiffness matrices */ | |||
/* element 1 */ | |||
k[1] : subst([i=1],k[0]); | |||
/* element 2 */ | |||
δΠ[2] : subst([i=2],coords[2].k[0].transpose(coords[1])); | |||
δΠ[2] : expand(subst(kinematics, δΠ[2])); | |||
k[2] : funmake('matrix,makelist(makelist(coeff(coeff(δΠ[2],subst([i=2],coords[2])[m]),subst([i=2],coords[1])[n]),m,1,4),n,1,4)); | |||
/* compose system matrix */ | |||
NoN : 3; /* Number of Nodes*/ | |||
K : zeromatrix(2*NoN,2*NoN); | |||
for m:1 thru 4 do | |||
for n:1 thru 4 do | |||
(K[ m, n] : K[ m, n] + k[1][m,n], | |||
K[2+m,2+n] : K[2+m,2+n] + k[2][m,n])$ | |||
/* add spring */ | |||
K[3,3] : K[3,3] + k[B]; /* W[1] */ | |||
/* compose righ-hand-side */ | |||
P : zeromatrix(6,1); | |||
for m:1 thru 4 do | |||
P[m,1] : l[1]*integrate(q[0]*subst([i=1],phi[m]), xi,0,1); | |||
P[4,1] : P[4,1] + M[B]; | |||
/* coordinates of displacement */ | |||
Q : matrix([W[0]],[Φ[0]],[W[1]],[Φ[1]],[W[2]],[Φ[2]]); | |||
/* incorporate geometric boundary conditions */ | |||
/* eliminate rows / columns for W[0], Φ[2] (positions 1, 6) */ | |||
K : submatrix(1,submatrix(5,K,5),1); | |||
Q : submatrix(1,submatrix(5,Q)); | |||
P : submatrix(1,submatrix(5,P)); | |||
print("k[1] = ", k[1])$ | |||
print("k[2] = ", k[2])$ | |||
print("K = ", K)$ | |||
print("Q = ", Q)$ | |||
print("P = ", P)$ | |||
print(K," * ",Q," = ",P)$ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
Zeile 197: | Zeile 252: | ||
::<math>\begin{array}{ll} {\Phi_{0}}&=-0.0157,\\ W_{1} &=-4.86\cdot {{10}^{-18}}\; \text{m},\\ {\Phi_{1}}&=+0.0682,\\ {\Phi_{2}}&=-0.0262 \end{array}</math>, | ::<math>\begin{array}{ll} {\Phi_{0}}&=-0.0157,\\ W_{1} &=-4.86\cdot {{10}^{-18}}\; \text{m},\\ {\Phi_{1}}&=+0.0682,\\ {\Phi_{2}}&=-0.0262 \end{array}</math>, | ||
zusammen mit den | zusammen mit den <span style="background:green">Randbedingungen</span> also | ||
::<math>\begin{array}{ll} {\color{green}{W_0}}&={\color{green}{0}},\\ {\Phi_{0}}&=-0.0157,\\ W_{1} &=-4.86\cdot {{10}^{-18}}\; \text{m},\\ {\Phi_{1}}&=+0.0682,\\ {\color{green}{W_2}}&={\color{green}{+0.00656 \text{ m}}},\\ {\Phi_{2}}&=-0.0262 \end{array}</math>. | ::<math>\begin{array}{ll} {\color{green}{W_0}}&={\color{green}{0}},\\ {\Phi_{0}}&=-0.0157,\\ W_{1} &=-4.86\cdot {{10}^{-18}}\; \text{m},\\ {\Phi_{1}}&=+0.0682,\\ {\color{green}{W_2}}&={\color{green}{+0.00656 \text{ m}}},\\ {\Phi_{2}}&=-0.0262 \end{array}</math>. |
Version vom 9. April 2021, 06:41 Uhr
Aufgabenstellung
Das System ist eine Variante von Aufgabe TC12. Hier ist eine Näherungslösung mit der Methode der Finiten Elemente gefragt. Das Sytem besteht aus zwei Sektionen mit den Längen ℓ1 bzw. ℓ2 sowie den Flächenmomenten I1 bzw. I2. Sektion AB ist durch eine konstante Streckenlast q0 belastet, in B wirkt das Moment MB0. Der Stab ist in A durch ein gelenkiges Festlager gelagert. In C ist das Stabende fest mit dem Umfang einer Rolle vom Radius r verbunden, die in D frei drehbar gelagert ist. In B sind die beiden Sektionen fest miteinander verbunden. Die Feder in B ist eine Translationsfeder mit der Steifigkeit kB.
Gesucht ist die FEM-Lösung mit zwei Elementen für den Euler-Bernoulli-Balken.
Die Systemparameter sind die gleichen wie in TC12, das dort gesuchte Flächenmoment I1 übernehmen wir zu
.
Lösung mit Maxima
Header
Wir suchen eine Lösung mit den Standard-Trial-Functions (Hermitesche-Polynome) für einen Euler-Bernoulli-Balken. Aufpassen müssen wir am Rand "C". Hier sind Verschiebung und Verdrehung durch die Rolle gekoppelt. Die Element-Steifigkeitsmatrix müssen wir passend umschreiben.
/*******************************************************/
/* MAXIMA script */
/* version: wxMaxima 15.08.2 */
/* author: Andreas Baumgart */
/* last updated: 2018-04-15 */
/* ref: TM-C, Labor 4 */
/* description: finds the FE solution for */
/* lab problem #4 */
/*******************************************************/
/* declare variational variables - see 6.3 Identifiers */
declare("δA", alphabetic);
declare("δΠ", alphabetic);
declare("δW", alphabetic);
declare("δΦ", alphabetic);
declare("δw", alphabetic);
Declarations
Wir übernehmen die Systemparameter aus TC12 zu
- ,
und wählen als Referenzgröße wref für die Auslenkung des Balkens die maximale Verschiebung eines Kragbalkens unter konstanter Streckenlast:
- .
/*** declarations ***/
assume(l[i]>0);
/* system parameter */
units : [mm = m/1000, cm = m/100];
params : [l[1]=1000*mm, l[2] = l[1]/2, r=l[1]/4,
E = 2.1*10^5*N/mm^2,
I[1] = 54000*mm^4, I[2]=2*I[1],
k[B] = 3*E*I[1]/l[1]^3,
q[0]=10*N/mm, M[B]=q[0]*l[1]^2];
params : subst(units,makelist(lhs(params[i])=subst(params,rhs(params[i])),i,1,length(params)));
/* kinematics of boundary condition at "C" */
kinematics : [W[2]=-r*Φ[2], δW[2] = -r*δΦ[2]];
/* max. displacement of cantilevered beam under load q[0] */
dimless : [w[ref] = q[0]*l[1]^4/(8*E*I[1])];
print(subst(params,dimless))$
Formfunctions
Die Trial-Functions je Element "i" zur Komposition der Form-Funktion kopieren wir aus Finite Elemente Methode zu
- ,
die Koordinaten der Verschiebung sind
- .
Damit ist
- .
/**** define form functions ***/
/* coordinates */
coords : [[ W[i-1], Φ[i-1], W[i], Φ[i]],
[δW[i-1],δΦ[i-1],δW[i],δΦ[i]]];
/* tial-functions */
phi : [ 2*xi^3-3*xi^2+1,
(xi^3-2*xi^2+xi)*l[i],
3*xi^2-2*xi^3,
(xi^3-xi^2)*l[i]];
/* form-function */
form : w(xi) = sum(coords[1][j]*phi[j],j,1,4);
Equilibrium Conditions
Die Gleichgewichtsbedingungen kommen aus dem Prinzip der virtuellen Verrückungen zu
- .
Wir sortieren die Elemente der virtuellen Arbeit nach den virtuellen Koordinaten und den Koordinaten des System und konstruieren daraus das gewöhnliche Gleichungssystem
- .
Die Anteile an der gesamten virtuellen Arbeit kommen aus der virtuellen Formänderungsenergie δΠ und der virtuellen Arbeit der äußeren Lasten δWa.
Dabei ist für unsere zwei Elemente δΠ = δΠ1 + δΠ2' mit
und der Element-Steifigkeitsmatrix
- .
Für Element 1 können wir diese Matrix direkt übernehmen, das heißt k1 = k0 für i=1.
Element 2 birgt eine Tücke: Hier sind Verschiebung W2 und Verdrehung Φ2 gekoppelt über die Kinematik der Rolle:
Damit ist auch die Variation in diesen Koordinaten gekoppelt, also
- .
Mit dieser Beziehung eliminieren wir demnach W2 aus der Formulierung der Gleichgewichtsbedingungen. Das Einsetzen der kinematischen Beziehungen in δΠ liefert nun als Element-Steifigkeitsmatrix
- ,
bei der die Elemente der dritten Zeile (zu δWi) und der dritten Spalte (zu Wi) verschwinden.
Wir setzen die Gesamt-Steifigkeitsmatrix K aus den beiden Element-Steifigkeitsmatrizen so zusammen:
Und das ist die anteilige Gesamt-Steifigkeitsmatrix der beiden Balken-Abschnitte:
Auch die Feder ist ein elastisches Element und trägt damit eine virtuelle Formänderungsenergie, zu δΠ hinzu, nämlich
Diesen Beitrag müssen wir in Zeile 3, Spalte 3 hinzuaddieren, also mit der Anweisung
- .
Auf der rechten Seite des Gleichungssystem bleiben die Beiträge der virtuellen Arbeiten äußerer Lasten stehen. Dies sind
- ,
wir erhalten
- .
Jetzt fehlen nur noch die Randbedingungen. Wir setzen
- ,
die kinematische Beziehung
haben wir schon eingearbeit - bleibt also nur noch, die entsprechenden Spalten und Zeilen in den Matrizen K, Q und P zu eliminieren. Es bleibt das Gleichungssystem
- .
/**** equilibrium conditions ***/
/* generic stiffness matrix */
k[0] : E*I[i]/l[i]^3*makelist(makelist(
integrate(
diff(phi[i],xi,2)*diff(phi[j],xi,2),
xi,0,1),
j,1,4),i,1,4);
k[0] : funmake('matrix,k[0]);
/* element stiffness matrices */
/* element 1 */
k[1] : subst([i=1],k[0]);
/* element 2 */
δΠ[2] : subst([i=2],coords[2].k[0].transpose(coords[1]));
δΠ[2] : expand(subst(kinematics, δΠ[2]));
k[2] : funmake('matrix,makelist(makelist(coeff(coeff(δΠ[2],subst([i=2],coords[2])[m]),subst([i=2],coords[1])[n]),m,1,4),n,1,4));
/* compose system matrix */
NoN : 3; /* Number of Nodes*/
K : zeromatrix(2*NoN,2*NoN);
for m:1 thru 4 do
for n:1 thru 4 do
(K[ m, n] : K[ m, n] + k[1][m,n],
K[2+m,2+n] : K[2+m,2+n] + k[2][m,n])$
/* add spring */
K[3,3] : K[3,3] + k[B]; /* W[1] */
/* compose righ-hand-side */
P : zeromatrix(6,1);
for m:1 thru 4 do
P[m,1] : l[1]*integrate(q[0]*subst([i=1],phi[m]), xi,0,1);
P[4,1] : P[4,1] + M[B];
/* coordinates of displacement */
Q : matrix([W[0]],[Φ[0]],[W[1]],[Φ[1]],[W[2]],[Φ[2]]);
/* incorporate geometric boundary conditions */
/* eliminate rows / columns for W[0], Φ[2] (positions 1, 6) */
K : submatrix(1,submatrix(5,K,5),1);
Q : submatrix(1,submatrix(5,Q));
P : submatrix(1,submatrix(5,P));
print("k[1] = ", k[1])$
print("k[2] = ", k[2])$
print("K = ", K)$
print("Q = ", Q)$
print("P = ", P)$
print(K," * ",Q," = ",P)$
Solving
Auflösen nach Q liefert
- ,
zusammen mit den Randbedingungen also
- .
/**** solve K Q = P ***/
sol[1] : linsolve_by_lu(subst(params,K),subst(params,P))[1]$
sol[1] : makelist(Q[i][1] = sol[1][i][1],i,1,4);
sol[1] : append(subst(params,[W[0]=0, W[2]=-r*subst(sol[1], Φ[2])]), sol[1]);
Post-Processing
Die Auslenkung w(x) der Querschnitte tragen wir jetzt auf. Für die dimensionslose Darstellung wählen wir aus der analytischen Lösung für den Kragbalken unter konstanter Streckenlast
und tragen w(x)/wref auf:
Die maximale Auslenkung des Systems ist dann
- ,
und das entspricht der Vorgabe aus Aufgabe TC12.
/**** post-process ***/
f1 : subst([xi=t],subst(params,subst(dimless,expand(subst(sol[1],subst([i=1],subst(form,w(xi)/w[ref])))))));
f2 : subst([xi=t],subst(params,subst(dimless,expand(subst(sol[1],subst([i=2],subst(form,w(xi)/w[ref])))))));
scale : subst(params,(l[2]/l[1]));
plot2d([[parametric, t, f1, [t, 0, 1]],
[parametric, 1+t*scale, f2, [t, 0, 1]]],
[gnuplot_preamble, "set yrange [] reverse"],
[legend, "sec. I", "sec. II"],
[xlabel, "x/l[1] →"], [ylabel, "w/w[ref] →"])$
Links
- ...
Literature
- ...