CEE 471, Fall 2019: HW9 Solutions
CEE 471, Fall 2019: HW9 Solutions
Problem 1:
We consider a thin plate as shown in Figure (1) of width w, length l and height h made out of a
material with Young’s modulus E and Poisson’s ratio ν. It is fixed to the ground and subjected to a point
load P = P e1 on its upper right corner.
P = P e1
e
l=1 e
w=1
Clamped: u = 0
Recall that the potential energy of an linear elastic isotropic material is given by
Z Z
λ 2
E{u} = µ trε2 + (trε) dV − t · u dS, (1)
Ω0 2 ∂Ω0
when of body-forces are not considered. As the Poisson’s ratio is zero, εi3 = 0 for i=1,2,3. Hence we
construct a 2D finite-element approximation of the displacement field
Ne X
X Nn
u (X) = θ(e) (X) un(e) Nn(e) (X) ,
e=1 n=1
Ne X
X Nn
v (X) = θ(e) (X) vn(e) Nn(e) (X) . (2)
e=1 n=1
The scalars Ne and Nn denote the total number of elements and the number of nodes per element, while
(e) (e)
un and vn are the horizontal and vertical displacements of node n of element E(e) . θ(e) corresponds to
the characteristic function for element E(e) and is given by
(
(e) 1 if X ∈ E(e)
θ (X) = ,
0 otherwise
• Element E(1)
(1) y (1) 2x (1) 2x y
N1 (x, y) = 1 − , N2 (x, y) = and N3 (x, y) = − +
l w w l
• Element E(2)
(2) x y (2) x y (2) y
N1 (x, y) = 1 − − , N2 (x, y) = − and N3 (x, y) =
w 2l w 2l l
• Element E(3)
(3) y (3) 2x y (3) 2x
N1 (x, y) = 1 − , N2 (x, y) = −2 + + and N3 (x, y) = 2 − .
l w l w
Note that the numbering of nodes is done in an anticlockwise manner. This is important to maintain
a positive jacobian. Now making use of the fixed boundary condition at y = 0, we prescribe the following
values
(1) (1) (2) (2) (2) (2) (3) (3)
u1 = v1 = u1 = v1 = u2 = v2 = u1 = v1 = 0
and denote for simplicity
(1) (1) (1) (2) (3) (1) (2) (3) (3) (3)
α1 = u3 , α2 = v3 , α3 = u2 = u3 = u3 , α4 = v2 = v3 = v3 , α5 = u2 and α6 = v2 .
2
Here we have made use of the condition of displacement continuity at all nodes among different elements.
Then the displacement field becomes
2x y 2x y 2x 2x y
u (x, y) = − + α1 + α3 θ(1) + α3 θ(2) + 2 − α3 + −2 + + α5 θ(3)
w l w l w w l
and
2x y 2x y 2x 2x y
v (x, y) = − + α2 + α4 θ(1) + α4 θ(2) + 2 − α4 + −2 + + α6 θ(3) ,
w l w l w w l
where the argument of the indicator functions has been dropped for convenience. It follows that
∂u α3 − α1 (1) α5 − α3 (3)
ε11 = =2 θ +2 θ , (3)
∂x w w
∂v α2 (1) α4 (2) α6 (3)
ε22 = = θ + θ + θ , (4)
∂y l l l
1 ∂u ∂v α1 α4 − α2 α3 (2) α5 α6 − α4
ε12 = + = + θ(1) + θ + + θ(3) . (5)
2 ∂y ∂x 2l w 2l 2l w
In this problem it is sufficient to spell out
2 h
α3 − α1 (1) α5 − α3 (3) α2 (1) α4 (2) α6 (3) i2
tr ε2 = 2 θ +2 θ + θ + θ + θ
w w l l l
2
α1 α4 − α2 (1) α3 (2) α5 α6 − α4 (3)
+2 + θ + θ + + θ , (6)
2l w 2l 2l w
Eν E
as λ = = 0 MPa and µ = = 5 MPa.
(1 + ν) (1 − 2ν) 2 (1 + ν)
It must be noticed first that in Expression (6) the terms of the form θ(i) (x, y)θ(j) (x, y) with i 6= j are
zero over any subvolume in Ω0 . Hence they do not contribute to the integral over Ω0 in Equation (1).
Also note that terms of the form θ(i) (x, y)θ(i) (x, y) are equal to θ(i) (x, y). Then upon splitting the integral
over Ω0 in Equation (1) onto the sum of the integrals over each element E(e) and recognizing that the
respective integrants are constant, we have
" 2 # 2
R (α3 − α1 )2
α 2
2 α1 α 4 − α2 (1) α3 + 2α4 2
Ω0
2
tr ε dV = 4 + 2 +2 + |E | + |E(2) |
w2 l 2l w 2l2
" 2 #
(α5 − α3 )2 α42 α5 α6 − α4
+ 4 + 2 +2 + |E(3) |,
w2 l 2l w
1
wlh and |E(2) | = 2|E(1) |.
where |E(e) | denotes the volume of element E(e) . They are |E(1) | = |E(3) | =
4
As far as the traction term in energy is concerned, we simply have from Equation (1)
Z
t · u dS = P α5 .
∂Ω0
It follows that
278.49
99.33
290.91
u= µm
9.76
376.05
−118.85
Plugging into Equations (3)-(5) for ε and using linear elasticity under the plane stress assumption and
ν = 0 — σ11 = 2µ ε11 , σ12 = 2µ ε12 and σ22 = 2µ ε22 — yields
1.0
Element # Strain (×10−6 ) Stress (MPa)
ε11 = 24.83 σ11 = 248.3
0.8
1 ε22 = 99.33 σ22 = 993.3
e=1
ε12 = 49.67 σ12 = 496.7 e=3
0.6 e=2
ε11 = 0.0 σ11 = 0.0
2 ε22 = 9.76 σ22 = 97.6 0.4
ε12 = 145.5 σ12 = 1455.0
ε11 = 170.3 σ11 = 1703.0 0.2
Problem 2:
We begin by finding the solution of the linearized beam equation under an axial load which is given
by
EIθ00 + P θ = 0 (7)
4
with the boundary conditions θ0 (0) = 0 and θ0 (L) = 0. The boundary conditions are defined such that
moment vanishes at the two ends of the beam. The solution of the second order linear homogeneous
equation (7) is given by (for P > 0)
θ = K1 cos(λx) + K2 sin(λx)
with λ2 = P/EI. Applying the boundary conditions, we obtain K2 = 0 and either K1 = 0 or λ = nπ/L
where n is an integer. Hence the bifurcation solution is simply given by
nπ
θ = K1 cos x (8)
L
The critical load is the one corresponding to the lowest value of n and hence becomes
π2
Pcr = EI
L2
To do a stability analysis, we need to compute the second variation of energy corresponding to the solution
of nonlinear version of the equation (7). As it is difficult to compute its exact solution, we will obtain
an approximate solution with Rayleigh-Ritz method. We choose the following ansatz for the approximate
solution πx
θapp = Acos (9)
L
This choice is guided by the solution (8) of the linearized equation. The energy functional is defined as
Z l
1 2
E{θ} = EI (θ0 (x)) + P cos θ(x)dx.
0 2
Then substituting θapp in the energy functional and differentiating with respect to A renders
Z l πx Z l πx πx
π2
A EI 2 sin2 +P cos sin Acos dx = 0
0 L L 0 L L
Expanding the sine function in the second term as a Taylor series
πx
sin(y) = y − y 3 /3! + HOT with y = Acos
L
and integrating, we obtain
L 1 π2
A P1 − P 1 − A 2 =0 where P1 = Pcr = EI
2 8 L2
which again yields two solutions: either A = 0 or P = P1 /(1 − A2 /8). To check the stability of these two
solutions, we compute the second derivative of energy functional with respect to the degree of freedom A
d2 E app L 3 2
= P1 + P −1 + A (10)
dA2 2 8
Substituting the first solution, A = 0, in this expression yields
d2 E app L
= (P1 − P )
dA2 2
and is hence stable if P < P1 . Substituting the second solution, P = P1 /(1 − A2 /8), into (10) yields
d2 E app A2
= P1 L
dA2 8 − A2
√
and hence is stable for A < 8. ♣
5
HW9_Calculations
December 6, 2019
[3]: alph
[3]:
α1
α2
α3
α4
α5
α6
1
[4]: x = Symbol('x',real=True)
y = Symbol('y',real=True)
a1 = Symbol('a_1',real=True)
a2 = Symbol('a_2',real=True)
a3 = Symbol('a_3',real=True)
l = Symbol('l',real=True)
w = Symbol('w',real=True)
h = Symbol('h',real=True)
[5]: # Triangle 1
sys1_1 = solve_linear_system(Matrix([[1.,0,l,1], [1.,0,0,0], [1,0.
,→5*w,l,0]]),a1,a2,a3)
# Triangle 2
sys1_2 = solve_linear_system(Matrix([[1.,0.5*w,l,1], [1.,0,0,0],␣
,→[1,w,0,0]]),a1,a2,a3)
# Triangle 3
sys1_3 = solve_linear_system(Matrix([[1.,0.5*w,l,1], [1.,w,0,0],␣
,→[1,w,l,0]]),a1,a2,a3)
[6]: # Triangle 1
N1_1 = N1_1.subs(sys1_1)
N3_1 = N3_1.subs(sys2_1)
# Triangle 2
N1_2 = N1_2.subs(sys1_2)
# Triangle 3
N1_3 = N1_3.subs(sys1_3)
N3_3 = N3_3.subs(sys2_3)
2
1.2.1 Look for the displacement field u and v
[21]: N3_1
[21]:
2.0x
w
[8]: # Triangle 1
u1_1 = N1_1*alph[0] + N3_1*alph[2]
v1_1 = N1_1*alph[1] + N3_1*alph[3]
# Triangle 2
u1_2 = N1_2*alph[2]
v1_2 = N1_2*alph[3]
# Triangle 3
u1_3 = N1_3*alph[2] + N3_3*alph[-2]
v1_3 = N1_3 * alph[3] + N3_3*alph[-1]
[22]: mu = 1.e7/2
nu = 0.
lmbda = 0.
P = 10.
# l = w = 1
# h = 0.01
[23]: eqns = []
for i in range(len(alph)):
eqns.append(U.diff(alph[i]))
3
[24]: eqns[0].subs(subs_list)
eps_1[0,0]
[24]:
2.0α1 2.0α3
− +
w w
[27]: alph_new
[27]:
8.0·10−6 l3 (256.0l6 +192.0l4 w2 +24.0l2 w4 −w6 )
hw(512.0l8 +640.0l−5 6 w 2 +176.0l4 w 4 +24.0l2 w 6 +w 8 )
6.4·10 l6 (16.0l2 +5.0w2 )
h(512.0l8 +640.0l6 w2 +176.0l4 w4 +24.0l2 w6 +w8 )
−5
3.2·10 l (2.0l +w )
3 2 2
4 2
hw(16.0l +16.0l w +w ) 2 4
−6
4.0·10 l w 2 2
4 2
h(32.0l +8.0l w +w ) 2 4
8.0·10−6 l(256.0l8 +256.0l6 w2 +104.0l4 w4 +19.0l2 w6 +w8 )
hw(512.0l8 +640.0l6 w2 +176.0l4 w4 +24.0l2 w6 +w8 )
8.0·10−6 l2 (128.0l6 +56.0l4 w2 +16.0l2 w4 +w6 )
− h(512.0l8 +640.0l6 w2 +176.0l4 w4 +24.0l2 w6 +w8 )
[39]: u = np.array([alph_new],float).flatten()
u_def = u * 5.e2
4
[41]: xnodes_def = np.array([0.,1.,1+u_def[-2],0.5+u_def[-4],u_def[0]])
ynodes_def = np.array([0.,0.,1+u_def[-1],1+u_def[-3],1+u_def[1]])
triangles_def = tri.Triangulation(xnodes_def, ynodes_def, triangles = conn)
ax.text(0.4,0.55,r'$e = 2$',fontsize=26,transform=ax.
,→transAxes,bbox=dict(facecolor='wheat',edgecolor='k'))
ax.text(0.7,0.6,r'$e = 3$',fontsize=26,transform=ax.
,→transAxes,bbox=dict(facecolor='wheat',edgecolor='k'))
ax.tick_params(pad=10)
ax.xaxis.set_minor_locator(AutoMinorLocator(20))
ax.yaxis.set_minor_locator(AutoMinorLocator(20))
h,l = ax.get_legend_handles_labels()
ax.legend(loc='lower center',handles = [h[0],h[2]],labels =␣
,→[l[0],l[2]],fontsize=30,ncol=4,fancybox=False,facecolor='wheat',edgecolor='k',shadow=True)
fig.tight_layout()
fig.savefig(r'plotP1.eps')
5
[ ]: alph_subs = {alph[i]:alph_new[i] for i in range(len(alph))}
# Element 1:
eps1 = eps_1.subs(alph_subs).subs(subs_list)
# Element 2:
eps2 = eps_2.subs(alph_subs).subs(subs_list)
# Element 3:
eps3 = eps_3.subs(alph_subs).subs(subs_list)
6
[ ]: eps1*10**6
[ ]: eps2*10**6
[ ]: eps3*10**6
[ ]: eps1*10**7
[ ]: eps2*10**7
[ ]: eps3*10**7