Hyperstatic Truss - Compatibility
import ema as em
import matplotlib.pyplot as plt
import numpy as np
%config InlineBackend.figure_format = 'svg'
= em.Model(2,2)
mdl = mdl.dnodes
n = mdl.delems
e
'1', 0.0, 0.0)
mdl.node('2', 8.0, 0.0)
mdl.node('3', 4.0, 3.0)
mdl.node('4', 4.0, 6.0)
mdl.node(
'a', n['1'], n['3'])
mdl.truss('b', n['2'], n['3'])
mdl.truss('c', n['1'], n['4'])
mdl.truss('d', n['3'], n['4'])
mdl.truss('e', n['2'], n['4'])
mdl.truss(
'1'], ['x', 'y'])
mdl.fix(n['2'], ['x', 'y'])
mdl.fix(n[
mdl.numDOF()
[[5, 6], [7, 8], [1, 2], [3, 4]]
= plt.subplots(1,1)
fig1, ax1 em.plot_structure(mdl, ax1)
Part 1
Static-Kinematic Matrix Equivalence
\[V = A_f U_f\]
= em.A_matrix(mdl)
A = em.B_matrix(mdl) B
\[P_f = B_f Q\]
B.f
$a_1$ | $b_1$ | $c_1$ | $d_1$ | $e_1$ | |
---|---|---|---|---|---|
$1$ | 0.8 | -0.8 | 0.00000 | -0.0 | 0.00000 |
$2$ | 0.6 | 0.6 | 0.00000 | -1.0 | 0.00000 |
$3$ | 0.0 | 0.0 | 0.55470 | 0.0 | -0.55470 |
$4$ | 0.0 | 0.0 | 0.83205 | 1.0 | 0.83205 |
- A.f B.f.T
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 0.0 | 0.0 | 0.0 | 0.0 |
1 | 0.0 | 0.0 | 0.0 | 0.0 |
2 | 0.0 | 0.0 | 0.0 | 0.0 |
3 | 0.0 | 0.0 | 0.0 | 0.0 |
4 | 0.0 | 0.0 | 0.0 | 0.0 |
Part 2
Member d length
The kinematic matrix, \(A_f\), is given below:
A.f
$1$ | $2$ | $3$ | $4$ | |
---|---|---|---|---|
$a_1$ | 0.8 | 0.6 | 0.0000 | 0.00000 |
$b_1$ | -0.8 | 0.6 | 0.0000 | 0.00000 |
$c_1$ | 0.0 | 0.0 | 0.5547 | 0.83205 |
$d_1$ | -0.0 | -1.0 | 0.0000 | 1.00000 |
$e_1$ | 0.0 | 0.0 | -0.5547 | 0.83205 |
And the corresponding deformation vector is:
= em.V_vector(A)
V 'b_1', 0.1)
V.set_item('c_1', 0.2)
V.set_item( V
$V_{{}}$ | |
---|---|
$a_1$ | 0.0 |
$b_1$ | 0.1 |
$c_1$ | 0.2 |
$d_1$ | 0.0 |
$e_1$ | 0.0 |
The free dof displacement vector, \(U_f\), is then computed as follows: \[ U_f = A_f^{-1}V_\epsilon \]
= V[[0,1,2,4]]
Ve = A.f[[0,1,2,4],:]
Ae = Ae.inv@Ve
U U.disp
\[\left[\begin{matrix}-0.0625\\0.0833333333333333\\0.180277563773199\\0.120185042515466\end{matrix}\right]\]
Finally the fully deformation vector is computed from \(V=A_fU_f\), which gives the necessary deformation of element d.
= A.f@U
Veh Veh.disp
\[\left[\begin{matrix}9.25185853854297 \cdot 10^{-19}\\0.1\\0.2\\0.036851709182133\\1.66986849470959 \cdot 10^{-17}\end{matrix}\right]\]
Element d must therefore elongated by 0.037.
Satisfy Compatibility
The matrix \(\bar{B}_x\) is computed as follows:
'd'], '1')
mdl.redundant(e[ B.barx
$d_1$ | |
---|---|
$a_1$ | 0.833333 |
$b_1$ | 0.833333 |
$c_1$ | -0.600925 |
$d_1$ | 1.000000 |
$e_1$ | -0.600925 |
This is multiplied by the deformation vector as follows:
= B.barx.T@Veh
residual print(residual)
if residual < 10e-9:
print("Compatibility is satisfied")
/-0.56694671 B.f.ker
/-0.56694671 B.ker