Frequency analysis#
The mass matrix is calculated with Shell.calc_kM() and the eigenvalue
problem \(([K] + \lambda^2 [M])\{c\} = \{0\}\) is solved with
structsolve.freq(), where \(\lambda^2 = -\omega_n^2\) and \(\omega_n\) is
the natural frequency in rad/s. The effect of a pre-stress is included by
adding the geometric stiffness matrix to the constitutive stiffness matrix. The
code below is extracted from one of the panels unit tests:
def test_panel_freq():
for model in models:
for prestress in [True, False]:
print('Frequency Analysis, prestress={0}, model={1}'.format(
prestress, model))
p = Shell()
p.model = model
p.a = 1.
p.b = 0.5
p.r = 1.e8
p.stack = [0, 90, -45, +45]
p.plyt = 1e-3*0.125
p.laminaprop = (142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9)
p.rho = 1.3e3
p.m = 8
p.n = 8
p.Nxx = -60.
p.Nyy = -5.
k0 = p.calc_kC(silent=True)
M = p.calc_kM(silent=True)
if prestress:
kG0 = p.calc_kG(silent=True)
k0 += kG0
eigvals, eigvecs = freq(k0, M, sparse_solver=True, silent=True)
omegan = np.sqrt(-eigvals)
if prestress:
assert np.isclose(omegan[0], 17.6002, rtol=0.001)
else:
assert np.isclose(omegan[0], 39.1962, rtol=0.001)