Gelöste Aufgaben/TC13: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
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 {\color{green}Randbedingungen} also
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.


Lageplan

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.

Struktur der Steifigkeitsmatrix.

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

Biegelinie w(x)

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

  • ...