Universidade Federal do Rio Grande do Sul (UFRGS)
Programa de Pós-Graduação em Engenharia Civil (PPGEC)
NAME:
CARD:
# 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 *
Um adepto do "bungee jump" se atira de uma plataforma no instante t=0 preso ao cabo flexível de comportamento elástico linear. O arrasto aerodinâmico pode ser desconsiderado ao longo da queda. Demais dados do problema são:
Pergunta-se:
m1 = 70. # massa da pessoa em (kg)
L1 = 20. # comprimento do cabo sem tensão (m)
k1 = 70. # rigidez axial do cabo (N/m)
g = 9.81 # gravidade local (m/s2)
zt = 0.03 # damping ratio of critical (non dim)
Questão 1.1: aplicação direta da fórmula da frequência de um sistema massa-mola:
fn=12π√kmwn = np.sqrt(k1/m1)
fn = wn/(2*np.pi)
print('Frequência natural do sistema saltador-cabo é aproximadamente {0:3.2f}rad/s = {1:4.3f}Hz.\n'.format(wn, fn))
Frequência natural do sistema saltador-cabo é aproximadamente 1.00rad/s = 0.159Hz.
Questão 1.2: pode ser resolvida por balanço de energia, ou considerando-se a resposta a condições iniciais de velocidade (da massa) superpostas à uma carga impulsiva a partir do deslocamento u(t0)=20m.
A velocidade do saltador no instante que o cabo começa a ser tensionado é dada por:
v0=√2gh=√2⋅20⋅9.81≈19.81m/sJá o instante em que o tensionamento do cabo tem início é dado por:
t0=√2hg=√2⋅209.81≈2.02sA amplitude total do delocamento é a soma da amplitude devida à velocidade inicial com o deslocamento devido à carga impulsiva. O formato retangular da carga impulsiva implica que o fator de amplificação dinâmica, A, da resposta estática, uest, é igual a 2. Portanto:
umax=u(t0)+v0ωn+AuestSubstituindo valores:
umax=20+19.811.00+2⋅70⋅9.8170=20+19.81+19.62=59.43mcontados a partir da plataforma, ou 39.43m a partir dos 20m de cabo.
O tempo até esse deslocamento máximo é aproximadamente 1/4 do período natural de vibração livre, contado após o instante t0 em que o cabo começa a ser tensionado. Podemos dizer que o tempo total até o instante em que umax é atingido pode então ser calculado como:
tmax=t0+Tn4≈2.02+14⋅0.159≈3.6sO código abaixo apresenta esses resultados na forma de uma simulação. Contudo, o tempo t0 é definido como sendo zero para poder aplicar a velocidade inicial na função que integra por Duhamel.
Td = 64
N = 4096
t = np.linspace(0, Td, N)
F = MRPy(g*np.ones(t.shape), Td=Td) # força dividida pela massa do sistema
u = F.sdof_Duhamel(fn, zt, V0=19.81) # solução por Duhamel
F.plot_time(fig=1, axis_t=[0, Td, 0, 20], figsize=(8,3)); # peso do saltador aplicado em t = 0s
u.plot_time(fig=2, axis_t=[0, Td, -20, 40], figsize=(8,3)); # resposta dinâmica
imax = np.argmax(u[0]) # posição do pico de resposta
print('Pico de deslocamento é {0:4.1f}m.'.format(u[0].max()))
print('Tempo até o pico é {0:4.1f}s.\n'.format(t[imax]+2.02))
Pico de deslocamento é 30.4m. Tempo até o pico é 4.0s.
O resultado numérico mostra que a solução não é tão simples quanto foi considerada na estimativa manual. O pico de deslocamento, descontado os 20m de cabo, deveria ser 39.43m. No entanto, o cálculo numérico resultou num valor um pouco acima de 30m.
Questão 1.3: A aceleração é a segunda derivada da resposta em deslocamento. Considerando uma resposta harmônica (parte flutuante) com amplitude máxima 30.4m, amplitude média 9.81m, e frequência 1rad/s, isso dá uma aceleração:
amax=ω2numax=12⋅(30.4−9.81)=20.6m/s2Portanto o saltador será submetido a aproximadamente 2g de aceleração. Este resultado também pode ser comprovado por derivação numérica:
a = u.zero_mean().differentiate(band=[0, 0.3]).differentiate(band=[0, 3])
a.plot_time(fig=3, axis_t=[0, Td, -30, 30], figsize=(8,3));
print('Pico de aceleração é {0:4.1f}m/s2.'.format(a[0].max()))
Pico de aceleração é 20.6m/s2.
Questão 1.4: A maior tração no cabo é simplesmente o maior elongamento vezes a constante elástica:
Tmax=umaxk≈30.4⋅70=2.13kNIsso corresponde a aproximadamente 3 vezes o peso do saltador!
Questão 1.5: Este cálculo pode ser feito utilizando-se a expressão de estimativa de amortecimento por decremento logarítmico. Considerando-se um decaimento de 1/3 da amplitude inicial (parte flutuante apenas) tem-se:
ζ=ln(3/1)2πN=3%Portanto N≈6 ciclos. Este resultado pode ser conferido no gráfico do deslocamento simulado na solução da questão 1.2, correspondendo ao pico que ocorre próximo aos 40 segundos desse gráfico.
Uma placa de trânsito é sujeita à força dinâmica do vento (na própria direção do vento). A placa pode ser entendida como uma viga engastada na extremidade inferior e livre na extremidade superior. O poste que sustenta a placa tem seção tubular. Demais dados do problema são
Pergunta-se:
m2 = 50. # massa da placa e parte do poste (kg)
L2 = 4. # comprimento do poste do engaste até o CG da placa (m)
zt = 0.01 # amortecimento (razão do crítico)
E = 2.05e11 # modulo de elasticidade do aço (N/m2)
De = 0.040 # diâmetro interno do poste
Di = 0.035 # diâmetro externo do poste
Questão 2.1: Inicialmente precisamos calcular a rigidez à flexão do poste:
EI=Eπ(d4ext−d4int)64≈10660Nm2A rigidez vista de um grau de liberdade correspondente ao deslocamento transversal no topo do poste é dada por:
k=3EIL3≈499.7N/mConsiderando-se a massa da placa dada e desprezando-se a massa do poste tem-se a frequência natural do sistema:
fn=12π√kmObserve que a massa do poste é da ordem de 10% da massa da placa e portanto está sendo desprezada.
EI = E*np.pi*(De**4 - Di**4)/64
k2 = 3*EI/(L2**3)
wn = np.sqrt(k2/m2)
fn = wn/(2*np.pi)
print('Frequência natural do sistema placa-poste é aproximadamente {0:3.2f}rad/s = {1:4.3f}Hz.\n'.format(wn, fn))
Frequência natural do sistema placa-poste é aproximadamente 3.16rad/s = 0.503Hz.
Questão 2.2: O deslocamento médio da placa, na direção do vento, depende da força de arrasto média:
ˉu=ˉFk=100499.7≈20cmQuestão 2.3: Para o cálculo da resposta dinâmica é necessário levar o problema para o domínio da frequência, de tal forma que o espectro da parte flutuante da resposta em deslocamento, SU(ω), é dada por:
SU(ω)=|H(ω)|2SF(ω)onde |H(ω)|2 é a função de admitância mecânica:
|H(ω)|2=1k2[1(1−β2)2+(2ζβ)2]e SF(ω) é o espectro da força do vento. A seguir vamos construir estas funções numericamente para efetuar o cálculo.
fs = 32
f = np.linspace(0, fs/2, 9601) # domínio da frequência
SF = np.zeros(f.shape) # aloca espaço para o espectro da força do vento
kF = (f <= 10)
SF[kF] = 10. # ruído branco de 0 a 10Hz, desvio é 10N
plt.figure(4, figsize=(8,3))
plt.plot(f, SF)
plt.grid(True)
plt.axis([0, 16, 0, 20])
plt.xlabel('Frequency (Hz)');
plt.ylabel('Load power density (N^2/Hz)');
A admitância mecânica pode ser definida como uma "função lambda":
H2 = lambda w: 1/( (1 - (w/wn)**2)**2 + (2*zt*(w/wn))**2 )/(k2**2)
Podemos calcular o espectro da resposta em deslocamento como:
SU = H2(2*np.pi*f)*SF
plt.figure(5, figsize=(8,3))
plt.semilogy(f, SU)
plt.grid(True)
plt.axis([0, 4, 1e-8, 1e0])
plt.xlabel('Frequency (Hz)');
plt.ylabel('Displacement power density (m^2/Hz)');
O valor r.m.s. do deslocamento, σU, pode ser calculado integrando-se a função acima:
sU = np.sqrt(np.trapz(SU[kF], f[kF]))
print('Valor r.m.s. da parte flutuante da resposta em deslocamento é {0:3.2f}cm.\n'.format(100*sU))
Valor r.m.s. da parte flutuante da resposta em deslocamento é 3.98cm.
Questão 2.4: Considerando-se a "fórmula de Davenport" para processos gaussianos banda larga, podemos estimar o fator de pico, g, a partir dos momentos da densidade espectral:
g=√2ln(ν0T)+0.5772√2ln(ν0T)onde T é o tempo de observação, adotado como 600s (10 minutos) na NBR-6123, e ν0 é a taxa de cruzamento do nível zero para o positivo (zero upcrossing rate), calculada a partir do espectro como:
ν0=√∫∞0f2SU(f)df∫∞0SU(f)dfEsses cálculos podem ser feitos com o auxílio do Python:
u_sim = MRPy.from_periodogram(SU, fs)
f1 = u_sim.plot_time()
sU = np.std(u_sim) # r.m.s. da parte flutuante
pU = np.max(np.abs(u_sim)) # pico
gU = pU/sU # fator de pico
print(sU, pU, gU)
0.03978063761835978 0.15150366616027375 3.8084775717710198
sU2 = np.trapz( SU[kF], f[kF])
sU4 = np.trapz(f[kF]*f[kF]*SU[kF], f[kF])
nu = np.sqrt(sU4/sU2)
lnu = np.sqrt(2*np.log(600*nu))
g = lnu + 0.5772/lnu
print(' Zero upcrossing rate: {0:4.3f}Hz'.format(nu))
print(' Peak factor: {0:4.3f} '.format(g ))
Zero upcrossing rate: 0.503Hz Peak factor: 3.550
Como esperado, a taxa de cruzamento do nível zero é uma frequência muito próxima à frequência natural do sistema sujeito a um processo banda larga. O deslocamento máximo em 10 minutos portanto é:
umax=ˉu+gσU=0.2+3.55⋅0.0398≈34.1cmQuestão 2.5: O número de ciclos que ocorrerão no tempo de 10 minutos, considerada a resposta a um processo banda larga, será aproximadamente a taxa de cruzamentos de zero vezes este tempo de observação:
N=ν0T=0.503⋅600≈302ciclosTodas as questões acima podem ser conferidas por meio de simulação utilizando-se o módulo MRPy
, tal como
mostrado a seguir.
F = MRPy.from_periodogram(SF, fs)
F.plot_time(fig=6, axis_t=[0, 600, -50, 50], figsize=(8,3));
u = F.sdof_Duhamel(fn, zt)/m2 + 0.2
u.plot_time(fig=7, axis_t=[0, 600, 0, 0.4], figsize=(8,3));
print('Valor r.m.s. da parte flutuante da resposta em deslocamento é {0:3.2f}cm.\n'.format(100*u.std()))
Valor r.m.s. da parte flutuante da resposta em deslocamento é 3.92cm.
Ou seja, uma rápida simulação com a MRPy
aproxima o valor r.m.s. anteriormente calculado.
O pico previsto também está sendo aproximadamente observado no gráfico acima.
Sugerimos fazer novas simulações para verificar a repetibilidade desses resultados.
F0 = 127.0*np.sqrt(2) # amplitude
f0 = 1.0 # frequencia da excitação
Td = 8.0 # duração
t = np.linspace(0, Td, 2048)
F = F0*np.sin(2*np.pi*f0*t)
plt.figure(1, clear=True)
plt.plot(t, F)
plt.grid(True)
sF = np.std(F)
print(F0, sF, sF*sF)
179.60512242138307 126.96899035480573 16121.12451171875
F = MRPy(F, Td=Td)
SF, fs = F.periodogram() # spectral density estimator
f = F.f_axis()
plt.figure(2, figsize=(10,4), clear=True)
plt.semilogy(f, SF[0])
plt.axis([0, 4, 1e-3, 1e01])
plt.grid(True)
sF2 = np.trapz(SF[0], dx=1/Td)
print(sF2)
0.49975585937500006