R2B2.A
Berechnen Sie die Verschiebung von Knoten 1.
siehe R2B2-Element 1 = R2-Element, 2 = R2B2-Element. Die 5 letzten Freiheitsgrade sind gleich null, sodass die 5 letzten Spalten irrelevant sind. Die ersten 3 Zeilen ausgewertet sind drei Gleichungen zur Berechnung von \(u_{1x}, u_{1y}, \psi_1.\) Lösung dieselbe wie mit den anderen Methoden.0. Lösung "Standard"
Ein Stab-Element R2 sowie ein Balken-Element B2 sowie Berücksichtigung der Längs-Elastizität des Balkens über \(u_{1x} = - \tfrac{2 H a}{EA_2}\). Beide Strukturen zusammengeführt über gemeinsame Kräfte \(H\) und \(V\) und gemeinsame Verschiebungen \(u_{1x}\) und \(u_{1y}=-w_1\). Die sechs Unbekannten \(u_{1x}, u_{1y}, \psi_1, w_1\) sowie \(H, V\) lassen sich durch die Zeilen 1, 2, 5, 6 und durch die zwei Zusatzgleichungen berechnen. Man könnte aber auch alle zehn Unbekannten berechnen durch Auswertung aller zehn Gleichungen. Die Zeilen 1, 2, 5, 6 und die zwei Zusatzgleichungen lauten: Eliminieren von \(w_1\) durch Einsetzen von \(w_1\) aus der zweiten Zusatzgleichung in die vierte Zeile liefert: Eliminieren von \(V\) durch Subtrahieren der vierten Zeile von der zweiten Zeile liefert: Eliminieren von \(H\) durch Einsetzen von \(H\) aus der verbleibenden Zusatzgleichung in Zeile 1 liefert: Die Lösung ist unhandlich. Aber für folgende gegebenen Größen: erhält man z.B.:1. Lösung "Freischneiden"
Der Balken wird modelliert einerseits als Balken-Element B2 mittels \(K_{2B}^|\), andererseits als Stab-Element R2 mittels \(K_{2R}^|\). Gemeinsame Freiheitsgrade: \(w_1 = -u_{1y}\) und \(u_{1x}\).2. Lösung "Gemeinsame Freiheitsgrade"
Source Code eines Programms dazu: Programm ausführen? Dazu: Copy: Source Code in die Zwischenablage kopieren. Paste: Source Code ins Eingabefeld hinter Play: Knopf SymPy
from sympy.physics.units import kg, m, s
from sympy import pprint, Matrix, cos, sin, var, sqrt, zeros, Eq, solve, pi, S
# Rounding:
def iso_round(x, pv):
try:
x = float(x)
tmp = round(x, pv)
except TypeError:
from functools import partial
func = partial(round, ndigits = pv)
tmp = x.applyfunc(func)
return tmp
def printout(x, unit=1, prec=None, sub_list=[]):
x = x.subs(sub_list)
x /= unit
try:
x = x.applyfunc(simplify)
except:
x = x.simplify()
if prec:
x = iso_round(x, prec)
pprint(x)
return
# Units:
(mm, cm) = ( m/1000, m/100 )
Newton = kg*m/s**2
kN = 10**3*Newton
Pa = Newton/m**2
MPa = 10**6*Pa
GPa = 10**9*Pa
deg = pi/180
half = S(1)/2
# ---
def K_1E(EI, l):
# l = Element length
l2, l3 = l*l, l*l*l
K = EI/l3
K *= Matrix([
[ 4*l2 , -6*l , 2*l2 , 6*l ],
[ -6*l , 12 , -6*l , -12 ],
[ 2*l2 , -6*l , 4*l2 , 6*l ],
[ 6*l , -12 , 6*l , 12 ],
])
return K
def k(phi):
"""
Computes entries of stiffness matrix
Input: φ
- measured at first element node
- counting positively about z-axis
- counting from x-axis to rod-axis
"""
(c, s) = ( cos(phi), sin(phi) )
(cc, ss, sc) = ( c*c, s*s, s*c)
return Matrix(
[
[ cc, sc, -cc, -sc],
[ sc, ss, -sc, -ss],
[-cc, -sc, cc, sc],
[-sc, -ss, sc, ss],
])
def assemble(n,k,i,j):
""" Adds element stiffness matrix to system stiffness matrix
n: number of system nodes
k: element stiffness matrix
(i, j): Numbers of (first, second) element node
"""
assert i in range(1,10)
assert j in range(1,10)
K = zeros(2*n,2*n)
# swap if necessary:
if (i < j):
I, J = (i-1)*2, (j-1)*2
else:
I, J = (j-1)*2, (i-1)*2
K[I:I+2, I:I+2]+=k[0:2,0:2]
K[I:I+2, J:J+2]+=k[0:2,2:4]
K[J:J+2, I:I+2]+=k[2:4,0:2]
K[J:J+2, J:J+2]+=k[2:4,2:4]
return K
a, A1, A2, E, I, F = var("a, A1, A2, E, I, F")
u1x, u1y, p1, w1, H, V = var("u1x, u1y, psi1, w1, H, V")
sub_list = [
(a, 1500*mm ),
(A1, 1000*mm**2 ),
(A2, 200*cm**2 ),
(E, 210*GPa ),
(I, 2*(10*cm)**4/3),
(F, 50*kN ),
]
EA1, EI = E*A1, E*I
s2 = sqrt(2)
l1 = a*s2
k1 = EA1/l1 * k(45*deg)
K1 = assemble(2, k1, 1,2)
K2 = K_1E(EI, 2*a)
# pprint("\n\nK1 / ( EA1 / (√2a) ):")
# tmp = K1
# tmp = tmp.applyfunc(expand)
# tmp = tmp.applyfunc(simplify)
# tmp /= EA1 / (s2*a)
# pprint(tmp)
# pprint("\n\nK1 / (E / a):")
# tmp = K1
# tmp /= ( E / a )
# pprint(tmp)
# pprint("\n\nK2 / ( EI / (2a)³ ):")
# tmp = K2
# tmp /= EI / ((2*a)**3)
# pprint(tmp)
# pprint("\n\nK2 / (E / a):")
# tmp = K2
# tmp /= ( E / a )
# pprint(tmp)
pprint("\n0. Standard:")
l = 2*a
l2 = l*l
l3 = l*l*l
alf = A2*l2 / I
bet = E*I / l3
gam = E*A1 / (2*sqrt(2) *a)
K = Matrix([
[alf*bet + gam, gam, 0],
[gam, 12*bet + gam, 6*l*bet],
[0, 6*l*bet, 4*l2*bet]
])
u = Matrix([u1x, u1y, p1])
f = Matrix([0, -F, 0])
eq = Eq(K*u, f)
sol = solve(eq, [u1x, u1y, p1])
u1x_s = sol[u1x]
u1y_s = sol[u1y]
pprint("\nu1x / mm, u1y / mm:")
for tmp in [u1x_s, u1y_s]:
printout(tmp, unit=mm, prec=3, sub_list=sub_list)
pprint("\n1. Using \"FBD\":")
u = Matrix([u1x, u1y, p1, w1])
f = Matrix([H, - F + V, 0, V])
K11 = s2 *A1/4
K33 = 2*I
K34 = -3*I/(2*a)
K44 = 3*I/(2*a**2)
K = Matrix([
[K11, K11, 0, 0 ],
[K11, K11, 0, 0 ],
[ 0, 0, K33, K34],
[ 0, 0, K34, K44],
])
K *= E/a
unks = [u1x, u1y, p1, w1, H, V]
eq1 = Eq(K*u, f)
eq2 = Eq(u1x, -2*H*a/(E*A2))
eq3 = Eq(u1y, -w1)
eqns = [eq1, eq2, eq3]
sol = solve(eqns,unks)
u1x, u1y, p1, w1, H, V = \
sol[u1x], sol[u1y], sol[p1], sol[w1], sol[H], sol[V]
pprint("\nu1x / mm, u1y / mm:")
for tmp in [u1x, u1y]:
printout(tmp, unit=mm, prec=3, sub_list=sub_list)
pprint("\n2. Using \"Shared Dofs\":")
K11 = s2 *A1/4 + A2/2
K12 = s2 *A1/4
K22 = s2 *A1/4 + 3*I/(2*a**2)
K23 = 3*I / (2*a)
K33 = 2*I
K = Matrix([
[ K11, K12, 0 ],
[ K12, K22, K23 ],
[ 0, K23, K33 ],
])
# pprint("\nK / (E/a):")
# pprint(K)
K *= E/a
u = Matrix([u1x, u1y, p1])
f = Matrix([0, -F, 0])
unks = [u1x, u1y, p1]
eq = Eq(K*u, f)
sol = solve(eq,unks)
# pprint(sol)
u1x, u1y, p1 = sol[u1x], sol[u1y], sol[p1],
pprint("\nu1x / mm, u1y / mm:")
for tmp in [u1x, u1y]:
printout(tmp, unit=mm, prec=3, sub_list=sub_list)
pprint("\n3. Using \"Spring\":")
K, u, w = var("K, u, w")
blue = sqrt(2)/2*K
eq1 = Eq( K , E*A1/(2*a) * (u+w) )
eq2 = Eq( - blue , E*A2/(2*a) * u )
eq3 = Eq( E*I*w , (F - blue) * 8*a**3 / 3 )
sol = solve([eq1, eq2, eq3], [K, u, w])
K_s = sol[K]
u_s = sol[u]
w_s = sol[w]
pprint("\nu / mm, w / mm:")
for tmp in [u_s, w_s]:
printout(tmp, unit=mm, prec=3, sub_list=sub_list)
[ ]: einfügen.▶ drücken.