Universidade Federal do Rio Grande do Sul (UFRGS)
Programa de Pós-Graduação em Engenharia Civil (PPGEC)
1. Introduction
2. Impulse response
3. General response to forced vibration
4. Short transient loads
4.1. Impulse response approximation
4.2. Dynamic factor approach
5. Assignment
Prof. Marcelo M. Rocha, Dr.techn. (ORCID)
Porto Alegre, RS, Brazil
# Importing Python modules required for this notebook
# (this cell must be executed with "shift+enter" before any other Python cell)
import numpy as np
import matplotlib.pyplot as plt
from MRPy import MRPy
So far we have calculated the system response in damped free vibration, which depends solely on the initial conditions with F(t)=0.
We call forced vibration the system response to any force function, F(t), which is the solution of the equation:
m¨u+c˙u+ku=F(t)In this class we shall present the closed-form solution for any given force function, starting with the very fundamental one: the unit impulse function.
We start by re-writing the equilibrium equation, which after division by the system mass is:
¨u+2η˙u+ω2nu=F(t)/mNow we take the force function as F(t)=mδ(t) (the Dirac's delta function at time origin), then we apply Laplace transform on this equation disregarding the initial conditions (u0=0 and v0=0). It gives:
L{¨u+2η˙u+ω2nu}=L{δ(t)}what solving for ˉu(s) results in:
ˉu(s)=[ωD(s+η)2+ω2D](1ωD)where we have used the same definition we made for free damped vibration: ω2D=ω2n−η2.
Recognizing the sine function transform and using the translation theorem gives a special response called unit impulse response, g(t):
g(t)=1ωDe−ζωntsinωDtThis response corresponds to the free vibration response for u0=0 and v0=1 (m/s), which means that the unit impulse force mδ(t) at time origin causes the same response as a unit initial velocity.
From the practical viewpoint, the system response to an impulsive force allow us to know all the system mechanical properties by fitting the theoretical function g(t) to the measured dynamic response.
Now let us apply Laplace transform to the general equilibrium equation:
L{¨u+2η˙u+ω2nu}=L{F(t)/m}where we define L{F(t)/m}=ˉf(s). Recalling that the Laplace transform of the unit impulse response, g(t), is:
ˉg(s)=1(s+η)2+ω2Dresults in:
ˉu(s)=ˉg(s)ˉf(s)+ˉu0(s)where:
ˉu0(s)=ˉg(s)[u0s+(v0+2ηu0)]is the response to the initial conditions, u0 and v0, while the term ˉg(s)ˉf(s) is the response to the force function, F(t)/m.
With the convolution theorem, the inverse Laplace transform finally leads to:
u(t)=u0(t)+1m∫t0g(t−τ)F(τ)dτwhich is the general solution of the dynamic equilibrium equation for a sdof system. It implies that the response, u(t), for any given force function, F(t)/m, can be obtained by calculating its convolution with the impulse response, g(t), superposed to the response for initial conditions, u0(t).
The numerical approach for directly solving the convolution integral is not recommended. In the next class we shall be presented to a more efficient numerical technique called the Duhamel integral.
In this section we present a more practical approach to evaluate the system response to a
force function with short duration. To illustrate these approaches, we make use of a numerical
example, calculated with MRPy
. The numerical method will be explained in details next class.
By now we are only interested in the results provided by the Python class.
Let us start assuming a short transient load consisting in a constant force, F0, applied at t=0 and removed at t=td.
td = 1.00 # load duration (s)
F0 = 10.#/td # constant force amplitude (N)
Td = 32. # total integration time (s)
N = 8192 # number of time step for Td discretization
F = MRPy.zeros(NX=1, N=N, Td=Td) # creates a time series filled with zeroes
i0 = int(td*F.fs) # number of time steps to reach td
F[0, i0:] = F0 # fills constant value up to td
print(F.fs, i0)
F.plot_time(figsize=(9,3), axis_t=[0, Td, -5, 20]);
256.0 256
Now we use MRPy
to calculate the response of a system with m=1kg, natural vibration frequency
fn=1Hz, and damping ratio of critical ζ=1%.
m = 1.0 # system mass in kg
fn = 1.0 # natural frequency in Hz
wn = 2*np.pi*fn # natural frequency in rad/s
zt = 0.02 # damping ratio to critical (nondim)
k = wn*wn*m # system stiffness (N/m)
print(k)
u = F.sdof_Duhamel(fn, zt, U0=0., V0=0.)/m
u.plot_time(fig=1, figsize=(9,3), axis_t=[0, Td, -0.5, 0.5]);
print('Maximum response amplitude: {0:6.0f}mm'.format(1000*u.max()))
print(1/(2*np.pi*1.))
39.47841760435743 Maximum response amplitude: 491mm 0.15915494309189535
We see that MRPy
has calculated the peak response amplitude as 15.4mm.
Now we will perform the same calculation by assuming that the applied force function
can be approximated by an impulse function at time origin.
The impulse function equivalent to the load defined above is given by:
F(t)=F0tdδ(t)=Iδ(t)where F0td is the total impulse (integral of the Dirac's delta), which is not unitary in the example. As previously stated, the equivalent initial velocity, v0, is approximatelly:
v0=Im=F0tdm=1m/swhere I is the given impulse. The response amplitude to this initial condition is:
umax≈v0ωD≈v0ωn≈1.02π⋅1.0≈159mmwhich is quite close to the numerical result (the discretization N was intentionally chosen to give the required accuracy).
As a rule of thumb, the approximation of a short transient load as an impulse function at time origin provides a good approximation up to td≤Tn/4 (where Tn is the system natural period of vibration). For instance, by setting td=0.25s in the previous example, the numerical result would be umax=35.3mm, while the impulse function approximation would give umax=39.8mm, overestimating the correct result (try it by yourself!).
To overcome this approximation error, numerically computed results may be provided as design curves, as the one reproduced below (Clough & Penzien, 1995):
The curves provide a dynamic amplification factor, to be multiplied by the system static response to the force function maximum amplitude:
umax=AF0k=AF0ω2nmIn the previous example, with td=0.25s, the dynamic amplification taken from the respective curve (rectangular function shape) is A≈1.4. Hence the peak response amplitude is:
umax=1.44.0(2π⋅1.0)2⋅1.0≈142mmwhich is much closer to the correct solution.
k = ((2*np.pi*fn)**2)*m
uest = F0/k
A = 1.4
udyn = A*uest
print(uest, udyn)
0.10132118364233778 0.14184965709927289
MRPy.sdof_Duhamel()
.Prazo: 20 de maio de 2020.