Universidade Federal do Rio Grande do Sul (UFRGS)
Programa de Pós-Graduação em Engenharia Civil (PPGEC)
1. Frequency preservation theorem
2. Reological models
2.1. General linear model
2.2. The Kevin-Voigt model
2.3. The Maxwell model
2.4. The standard model
3. Equilibrium in frequency domain
4. 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
Let us assume now that our idealized single degree of freedom system is subjected to a harmonic (sinusoidal) loading with frequency f0:
F(t)=Fmaxsin(2πf0t+θF)with Fmax being the force function amplitude and θ some phase angle.
Recalling the convolution theorem for Fourier Transform presented in last class we anticipate that, in the same way as with Laplace Transform, the system response can calculated as:
u(t)=f(t)∗h(t)=∫∞−∞f(t−τ)h(τ)dτwith f(t)=F(t)/m. Deriving now the displacement twice we got the acceleration:
¨u(t)=∫∞−∞¨f(t−τ)h(τ)dτbut replacing the sinusoidal function we get:
¨u(t)=−(2πf0)2∫∞−∞f(t−τ)h(τ)dτReplacing now the integral in the expression above by u(t) we arrive at:
¨u(t)+(2πf0)2u(t)=0what is a homogeneous differential equation with solution:
u(t)=umaxsin(2πf0t+θu)This solution states that a linear system responds to a harmonic excitation preserving the same excitation frequency. On the other hand, whenever a system is subjected to a harmonic excitation and the excitation frequency is not exclusivelly preserved in the system response, this will be a strong indication that the system is not linear.
This theorem is demonstrated below with a excitation frequency f0=1Hz applied to a linear
system with natural frequency fn=2Hz. The system equation is solved with
the MRPy
method sdof_Fourier()
which assumes that the loading is periodic and
hence no initial conditions are required. How this method works will be explained in
the following sections.
f0 = 1.0 # excitation frequency (kg)
F0 = 1.0 # excitation amplitude (N)
m = 1.0 # system mass (kg)
fn = 2.0 # system natural frequency (Hz)
zt = 0.01 # system damping ratio (nondim)
F = F0*MRPy.harmonic(NX=1, N=1024, Td=8, f0=1, phi=0) # MRPy harmonic function
F = (F + 2*F0)**1.05 - 2*F0
u = F.sdof_Fourier(fn, 0.01)/m # frequency domain solution
f0 = F.plot_time(0, figsize=(8,2), axis_t=(0, 8, -1.50, 1.50 ))
f1 = u.plot_time(1, figsize=(8,2), axis_t=(0, 8, -0.02, 0.02 ))
f2 = u.plot_freq(2, figsize=(8,2), axis_f=(0, 8, 0.00, 0.0004))
The damped spring-mass system depicted at the beginning of this notebook, with a single spring in parallel with a single damper, is one amongst many possible models for the reological behavior of linear systems. In general, the equilibrium equation may be written as:
m¨u+r(u,t)=F(t)where r(u,t) is a time function abridging both restitutive and reactive forces, which obviously depend on the system response itself, u(t). In general, it can be stated that a linear reological model is the solution of the equation:
(a0+a1∂∂t+a2∂2∂t2+…)r(t)=(b0+b1∂∂t+b2∂2∂t2+…)u(t)If we apply a Fourier Transform to this equation, with F{r(t)}=R(ω) and F{u(t)}=U(ω), after some algebraic manipulation we arrive at the following general relation:
R(ω)=K(ω)[1+iμ(ω)]U(ω)what in short means that there will be an in phase and an out of phase force to displacement response. Each reological models will have its own K(ω) and μ(ω) functions. It is important to observe the importance of the Fourier Transform approach here, which makes possible the solution of equilibrium equation in frequency domain without the need of solving an integral-differential equation in time domain.
The parallel spring-damper system, commonly used for elastic structures in Civil Engineering, is known as Kelvin-Voigt model.
In time domain the model is formulated as:
r(t)=c˙u(t)+ku(t)while its properties are:
K(ω)=kμ(ω)=−cωkWe will be always using this model, unless otherwise explicitly stated.
The series spring-damper system, the most basic representation of a viscous material, is known as Maxwell model.
In time domain the model is stated as:
r(t)+ck˙r(t)=c˙u(t)while its properties are:
K(ω)=c2kc2ω2+k2ω2μ(ω)=−kcωObserve that this model implies the possibility (almost a certainty) of a system non-zero final response. Furthermore, for zero excitation frequency (what means a static load) the displacement will become infinity.
A more complex reological model is known as the Zener (or standard) model. There are two versions for these model, as illustrated below.
The Zener model (Maxwell version) | The Zener model (Kelvin version) |
The time domain equation for the Maxwell version of Zener model is:
r(t)+ck2˙r(t)=k1u(t)+c(k1+k2)k2˙u(t)while the equation for the Kelvin version is:
r(t)+ck1+k2˙r(t)=k1k2k1+k2u(t)+ck1k1+k2˙u(t)As an exercise, it is suggested the derivation of frequency domain functions, K(ω) and μ(ω) for these two Zener model versions.
After choosing a suitable reological model, we may now go back to the linear dynamic equilibrium equation:
m¨u+r(u,t)=F(t)and apply a Fourier transform to both sides of equation:
−ω2U(ω)+1mR(ω)=F(ω)where F{F(t)/m}=F(ω).
After replacing the expression for the choosen R(ω), the system response U(ω) can be calculated as a function of excitation F(ω), and transformed back to time domain (if required). One must be aware that this is complex algebra and the solution will have both an in phase and an out of phase components.
In the following we will do the math for the most used Kevin-Voigt model. The equilibrium in frequency domain is:
−ω2U(ω)+km(1−icωk)U(ω)=F(ω)Now we isolate U(ω) and recall that ω2n=k/m and that ζ=c/(2mωn), what gives:
U(ω)=H(ω)F(ω)where:
H(ω)=1ω2n[1(1−β2)−i(2ζβ)]is called the system mechanical admittance, with β=ω/ωn being a nondimensional frequency.
These expressions allow a straightforward solution of the equilibrium equation in time domain (although its complex algebra). The mechanical admittance can be understood as a frequency dependent flexibility, for as the excitation frequency goes to zero (static condition) the admittance goes to 1/ω2n, which is the flexibility coefficient (inverse of the stiffness coefficient, ω2n) with unity mass.
In the expression above it can also be observed that for undamped systems, ζ=0, the admittance, and consequently the system response, will rise to infinity when the excitation frequency equals the system natural frequency, ω=ωn. This condition is called resonance, and must be always avoided in structural systems design.
The class MRPy
has a method sdof_Fourier()
that is an implementation of this
solution in frequency domain (for Kevin-Voigt model). It requires no inicial condition,
for in Fourier analysis the numerical approach (where signals must have a finite duration)
assumes the signal is always periodic.
The example below compares the solutions with sdof_Fourier()
and sdof_Duhamel()
for a linear system subject to a harmonic load. Observe the difference due to
the initial conditions in time domain approach. The two responses become the same
after some acceleration time in the solution with Duhamel. This difference between
the two solution methods is exactly the system response to some initial conditions.
m = 1.0 # system mass (kg)
fn = 1.0 # system natural frequency (Hz)
zt = 0.01 # system damping ratio (nondim)
F = MRPy.white_noise(1, 2048, Td=32) # 32 seconds white noise
F = (F - F.mean())/F.std() # unit variance
# Uncomment the following line for padding zeros to force same result
# F = F.double().double()
uF = F.sdof_Fourier(1, 0.01)/m # 1Hz, 1% damping, 1kg mass
uD = F.sdof_Duhamel(1, 0.01, 0, 0)/m # zero initial conditions
uE = uF - uD # solutions difference
f2 = F.plot_time(2, figsize=(8,2), axis_t=(0, 32, -4.0, 4.0))
f3 = uF.plot_time(3, figsize=(8,2), axis_t=(0, 32, -0.2, 0.2))
f4 = uD.plot_time(4, figsize=(8,2), axis_t=(0, 32, -0.2, 0.2))
f5 = uE.plot_time(5, figsize=(8,2), axis_t=(0, 32, -0.2, 0.2))
There are many areas in engineering analysis where design codes define dynamic loads as power spectra. For instance, surface irregularities in pavements, earthquake accelerations, wind speeds, etc. In these cases, the equation:
U(ω)=H(ω)F(ω)which preserve phase information, is replaced by:
SU(ω)=|H(ω)|2SF(ω)where, instead of the complex Fourier transforms, the (real) spectral densities are used. In this new equation, the absolute squared mechanical admittance becomes:
|H(ω)|2=1ω4n[1(1−β2)2+(2ζβ)2]with β=ω/ωn. The square root of the expression between brackets is also called dynamic amplification factor, A(β,ζ):
A(β,ζ)=√1(1−β2)2+(2ζβ)2plotted below for some typical values of the damping ratio.
bt = np.linspace(0, 3, 200)
zt = [0.20, 0.10, 0.05, 0.01]
plt.figure(6, figsize=(8,4))
for z in zt:
A = np.sqrt(1/((1 - bt**2)**2 + (2*z*bt)**2))
f6 = plt.semilogy(bt, A)
plt.legend(zt)
plt.axis([0, 3, 0.1, 100])
plt.ylabel('Dynamic Amplification (nondim)')
plt.xlabel('Normalized frequency')
plt.grid(True)
The most important features of the dynamic amplification factor are:
Lets take a look at this theory by running an example.
m = 1.0 # system mass (kg)
fn = 1.0 # system natural frequency (Hz)
zt = 0.01 # system damping ratio (nondim)
k = m*(2*np.pi*fn)**2 # implied stiffness
Td = 32 # load duration (s)
fs = 32 # sampling rate (Hz)
N = Td*fs # signal length
f0 = 1.0 # excitation frequency (Hz)
F0 = 1.0 # excitation amplitude (N)
phi = 0.0 # phase angle (rad)
F = F0*MRPy.harmonic(1, N, fs, f0=f0, phi=phi) # harmonic loading
ue = F0/k # static response
ud = F.sdof_Fourier(fn, zt)/m # dynamic response
up = ud[0].max() # peak response
f7 = F.plot_time(7, figsize=(8,2), axis_t=(0,32,-1.5,1.5))
f8 = ud.plot_time(8, figsize=(8,2), axis_t=(0,32,-1.5,1.5))
print('Static displacement would be: {0:6.3f}m'.format(ue))
print('Peak of dynamic displacement: {0:6.3f}m'.format(up))
print('Amplification factor is: {0:4.1f} '.format(up/ue))
Static displacement would be: 0.025m Peak of dynamic displacement: 1.261m Amplification factor is: 49.8
The aerodynamic force over a bluff body due to wind speed turbulence can be calculated as:
F(z,t)=12ρV2(z,t)CDAwhere z is the height above ground, ρ is the air density, V(z,t) is the wind speed at height z, and the product CDA refers to the aerodynamic characteristics of the body. It can be shown that the spectral density of this aerodynamic force is related to the spectral density of the (fluctuating part) of the wind speed through:
SF(z,f)=[2ˉF(z)ˉV(z)]2Sv(z,f)where f is the frequency, ˉF(z) is the mean force at height z, and ˉV(z) is the mean wind speed at height z.
The wind speed turbulence, v(t), may be modelled according to Harris' spectral density, SV(f):
fSV(f)σ2V=0.6Y(2+Y2)5/6with: Y=1800f/ˉV10σ2V=6.66casˉV210
where σ2V is the wind speed variance, cas is the surface drag coefficient and ˉV10 is the mean wind speed at 10m height.
cas = 6.5e-3 # NBR-6123 category II
V10 = 20. # mean speed at 10m (m/s)
sV2 = 6.66*cas*(V10**2) # wind speed variance
fs = 64. # samplig rate
N = 8192 # length of sample
M = N//2 + 1 # length of periodogram
df = fs/M # frequency step
f = np.linspace(0, fs/2, M) # frequency axis
Y = 1800*f[1:]/V10 # avoiding zero division
SV0 = np.zeros((2, M))
SV0[0,1:] = 0.6*sV2*Y/((2 + Y**2)**(5/6))/f[1:]
SV0[1,1:] = SV0[0,1:] # (replicating)
plt.figure(6, figsize=(8, 3))
plt.loglog(f[1:], SV0[0,1:]);
plt.grid(True)
Prazo: 03 de junho de 2020.