In [1]:
from scipy.optimize import bisect
%config InlineBackend.figure_format = 'svg'
from IPython.core.display import Image
In [2]:
image01 = Image(filename="figures/01.png")
display(image01)
A simple structure, which can be modeled as a single degree of freedom system, consists of a uniform cantilever beam of lenght $L={}$10 m that supports a body of negligible dimensions, whose mass $m={}$10000 kg is much larger than the beam mass.
The body is at rest when it is subjected to an impulsive loading
with $p_0={}$3 kN and $t_0 = {}$0.20s.
The maximum tip deflection, that occurs after the end of the loading (i.e., in the free vibration phase of the response) is $\delta_\text{max}={}$7.50 mm.
In [3]:
L = 10.0000 # metre
m = 10000.0000 # kilogram
p_0 = 3000.0000 # Newton
t_0 = 0.2000 # second
d_m = 0.0075 # metre
The natural frequency of the SDOF system is $\omega_n^2 = \displaystyle\frac km$.
Considering the direct flexibility of a cantilever loaded at the tip, we can deduce that in our problem $k=\displaystyle\frac{3EJ}{L^3}$ so that we have that $\omega_n^2 = \displaystyle\frac{3EJ}{mL^3}$.
In our problem $L$ and $m$ are assigned, so we define wn as a function of EJ:
In [4]:
def wn(EJ):
return sqrt(3*EJ/L/L/L/m)
The natural period of vibration of the SDOF system is $T_n = \displaystyle\frac{2\pi}{\omega_n}$, and we can define Tn as a function of EJ:
In [5]:
def Tn(EJ):
return 2*pi/wn(EJ)
The system parameter $\beta$, frequency ratio, can be expressed in terms of $T_n$ and the impulse duration $t_0$,
$\beta = \displaystyle\frac{T_n}{2t_0}$ and, again, we can define beta as a function of EJ:
In [6]:
def beta(EJ):
return Tn(EJ)/2.0/t_0
Finally, we have the expression for the maximum deflection, valid when the maximum occurs in the free response phase,
$\delta_\text{max}$ is a function of $\beta$ and $EJ$, but $\beta=\beta(EJ)$, hence we can define dmax as a function of EJ only:
In [7]:
def dmax(EJ):
b = beta(EJ)
return p_0*L*L*L*2*b*cos(pi/2/b)/3/EJ/(b*b-1)
The interval in which the above expression is valid (i.e., the max response is in the free vibration phase)
is $\beta\ge1$, so preliminarily we plot $\beta$ against $EJ$ to have an idea of the interval of EJ values
for which dmax results are correct.
In [8]:
ej = logspace(3,12,91)
loglog(ej,beta(ej), (1000,10**12), (1,1))
xlabel("EJ", size='x-large')
ylabel("$\\beta$", size='x-large')
grid()
It looks like the max value of EJ for which dmax is correct is approximately $10^9$,
but it's easy to be more correct,
In [9]:
EJ_max = bisect(lambda x: beta(x)-1, 10**8,10**10)
print EJ_max, log10(EJ_max)
We have that $\beta\ge1$ when $EJ<10^{8.915}$, so we can plot dmax and its measured values as follows
In [10]:
ej = logspace(3,8.9,58)
loglog(ej,dmax(ej), (1000,1000000000),(0.0075, 0.0075))
xlabel("$EJ$")
ylabel(r'$\delta_{max}$')
grid()
Looks like EJ should be close to $10^8$... we can zoom in
In [11]:
ej = logspace(7,8.9,191)
loglog(ej,dmax(ej),(10**7, 10**9),(0.0075, 0.0075))
xlabel("$EJ$") ; ylabel(r'$\delta_{max}$')
grid(which='both', axis='x') ; grid(axis='y')
I admit that the last graph is almost superfluous, but we can start the root finding procedure using a smaller interval...
In [12]:
EJ = bisect(lambda x: dmax(x)-0.00750, 7*10**7, 9*10**7)
Finally we can print the required value of EJ, as well as the natural period of vibration
and the frequency ratio.
In [13]:
print "EJ = %6.3f MN × m^2" % (EJ/10**6,)
print "T_n = %6.3f s" % (Tn(EJ),)
print "beta = %6.3f" % (beta(EJ),)
In [13]: