## Linear Elastic Materials: Examples and Problems

### Example 1

The state of strain inside a continuum is represented by the small strain matrix:

Assume that the material is steel with Young’s modulus of 210 GPa and Poisson’s ratio of 0.3. Assume that the material follows the von Mises yield criterion with MPa. Find the principal strains and the principal strains directions, the principal stresses and their directions, and comment on whether this state of strain is possible before yielding of the material.

##### Solution

The principal strains (eigenvalues) are

and the corresponding principal directions (eigenvectors) of the strains are:

To apply the linear elastic constitutive relations, the strain matrix will be converted into a vector of strains, as follows:

Using Equation 7, the corresponding stress vector is:

The corresponding stress matrix is:

The principal stresses (eigenvalues) of the stress matrix are:

the principal directions (the corresponding eigenvalues of the stress matrix) are:

Since the material is an isotropic linear elastic material, the eigenvectors of the stress and the strain matrix coincide. The maximum principal stress is 714.53 MPa; however, the von Mises stress is equal to 1031.19 MPa, which is higher than  MPa. This indicates that the material cannot sustain the stress matrix above, and in fact, the strain state above is impossible to occur before yielding or failure of the steel metal.

View Mathematica Code

str={{0.002,0.001,0.002},{0.001,-0.003,0.001},{0.002,0.001,0.0015}};
a=Eigensystem[str];
a//MatrixForm
str//MatrixForm
Ee=210000;
Nu=0.3;
G=Ee/2/(1+Nu);
Strainvector={str[[1,1]],str[[2,2]],str[[3,3]],2*str[[1,2]],2*str[[1,3]],2*str[[2,3]]};
Cc={{1/Ee,-Nu/Ee,-Nu/Ee,0,0,0},{-Nu/Ee,1/Ee,-Nu/Ee,0,0,0},{-Nu/Ee,-Nu/Ee,1/Ee,0,0,0},{0,0,0,1/G,0,0},
{0,0,0,0,1/G,0},{0,0,0,0,0,1/G}};
Dd=FullSimplify[Inverse[Cc]];
stressvector=Dd.Strainvector
Stressmatrix={{stressvector[[1]],stressvector[[4]],stressvector[[5]]},{stressvector[[4]],stressvector[[2]],stressvector[[6]]},
{stressvector[[5]],stressvector[[6]],stressvector[[3]]}};
Stressmatrix//MatrixForm
b=Eigensystem[Stressmatrix];
b//MatrixForm
VonMises[sigma_]:=Sqrt[1/2*((sigma[[1,1]]-sigma[[2,2]])^2+(sigma[[2,2]]-sigma[[3,3]])^2+(sigma[[3,3]]-
sigma[[1,1]])^2+6*(sigma[[1,2]]^2+sigma[[1,3]]^2+sigma[[2,3]]^2))];
VonMises[Stressmatrix]

View Python Code

import sympy as sp
import numpy as np
from sympy import *
from numpy.linalg import *
from scipy.linalg import *
sp.init_printing(use_latex = "mathjax")
def vonMises(M):
return sp.sqrt(1/2*((M[0,0] - M[1,1])**2+(M[1,1] - M[2,2])**2+
(M[2,2] - M[0,0])**2+6*(M[0,1]**2+M[0,2]**2+M[1,2]**2)))
e = np.array([[0.002, 0.001, 0.002], [0.001, -0.003, 0.001], [0.002, 0.001, 0.0015]])
display("\u03b5 =", e)
eigen = eig(e) # eigen values and vectors
print("eigenvectors and eigenvalues\n",eigen)
# first index is eigen values
print("Eigenvalues (principal strains)= \n",eigen[0])
# Columns are normalized eigenvectors. Transpose is used to convert them into rows
print("Eigenvectors (principal directions) = \n",eigen[1].T)
Ee = 210000
Nu = 0.3
G = Ee/2/(1+Nu)
strainvector = Matrix([e[0,0], e[1,1], e[2,2], 2*e[0,1], 2*e[0,2], 2*e[1,2]])
display("strainvector:", strainvector)
CC = Matrix([[1/Ee, -Nu/Ee, -Nu/Ee, 0, 0, 0],
[-Nu/Ee, 1/Ee, -Nu/Ee, 0, 0, 0],
[-Nu/Ee, -Nu/Ee, 1/Ee, 0, 0, 0],
[0, 0, 0, 1/G, 0, 0],
[0, 0, 0, 0, 1/G, 0],
[0, 0, 0, 0, 0, 1/G]])
display("CC: ",CC)
Dd = CC.inv()
display("D: ", Dd)
stressvector = Dd * strainvector
display("stressvector: ", stressvector)
stressmatrix = Matrix([[stressvector[0], stressvector[3], stressvector[4]],
[stressvector[3], stressvector[1], stressvector[5]],
[stressvector[4], stressvector[5], stressvector[2]]])
display("stressmatrix: ", stressmatrix)
#convert the stress matrix to a numpy object for faster calculations of the eigenvalues and eigenvectors.
stressmatrix=np.array(stressmatrix).astype(np.float64)
eigen = eig(stressmatrix) # eigen values and vectors
print("eigenvectors and eigenvalues\n",eigen)
# first index is eigen values
print("Eigenvalues (principal stresses)= \n",eigen[0])
# Columns are normalized eigenvectors. Transpose is used to convert them into rows
print("Eigenvectors (principal directions) = \n",eigen[1].T)
vonMises(stressmatrix)
display("vonMises stress: ", vonMises(stressmatrix))


### Example 2

In a confined compression test of a linear elastic isotropic material, the confining stress was -500MPa while the vertical stress was -100 MPa. The axial strains measured along the directions of the vectors , , and were -0.003, 0.001, and -0.003, respectively. Find Young’s modulus and Poisson’s ratio.

##### SOLUTION:

Using the constitutive relationships for linear elastic isotropic materials:

Solving the two equations:

View Python Code

from sympy import *
import sympy as sp
sp.init_printing(use_latex = "mathjax")
E, e1, e2, v, s1, s2, s3 = symbols("E \u03b5_{11} \u03b5_{22} \u03bd sigma_1 sigma_2 sigma_3")
Eq1 = Eq(e1, s1/E - v*s2/E -v*s3/E)
display(Eq1)
Eq1 = Eq1.subs({s1:-500, s2:-100, s3:-500, e1:-0.003})
display(Eq1)
Eq2 = Eq(e2, -v*s1/E + s2/E - v*s3/E)
display(Eq2)
Eq2 = Eq2.subs({s1:-500, s2:-100, s3:-500, e2:0.001})
display(Eq2)
Sol = solve((Eq1, Eq2), (E,v))
display("E = ", Sol[E])
display("\u03bd = ", Sol[v])


### Example 3

Consider a transversely isotropic linear elastic piece of material with the isotropy plane being the plane of and . The values of Young’s modulus and Poisson’s ratio in the plane of isotropy are equal to 100 MPa and 0.2, respectively. In a uniaxial tension test, when the material was stretched in the direction of by a stress of a value 1 MPa the strain measured in the direction of the vector was recorded to be –0.0005. In another uniaxial tension test, when the material was stretched in the direction of by a stress of a value 1 MPa, the strain measured in the direction of was 0.002. Find an estimate for the material constants , , and .

##### SOLUTION:

The Young’s modulus in the direction of can be obtained from the second experiment:

From the first experiment, the value of Poisson’s ratio can be obtained as follows:

The value of Poisson’s ratio can be obtained from the symmetry of the coefficients matrix:

View Python Code

from sympy import *
import sympy as sp
sp.init_printing(use_latex = "mathjax")
E33, E11, e33, v13, v31, s11, s33 = symbols("E_{33} E_{11} \u03b5_{33} \u03bd_{13} \u03bd_{31} \u03c3_{11} \u03c3_{33}")
Eq1 = Eq(e33, s33/E33)
display(Eq1)
Eq1 = Eq1.subs({e33:0.002, s33:1})
display(Eq1)
sol = solve(Eq1, E33)
display(Eq(E33, sol[0]))
Eq2 = Eq(e33, -v13*s11/E11)
display(Eq2)
Eq2 = Eq2.subs({e33:-0.0005, s11:1, E11:100})
display(Eq2)
sol = solve(Eq2, v13)
display(Eq(v13, sol[0]))
Eq3 = Eq(v13/E11, v31/E33)
display(Eq3)
Eq3 = Eq3.subs({v13:0.05, E33:500, E11:100})
display(Eq3)
sol = solve(Eq3, v31)
display(Eq(v31, sol[0]))


### Example 4

Consider an orthotropic material whose major axes of orthotropy lie in the directions of the vectors:

The material properties in the coordinate systems defined by the orthotropy axes are: , , , , , , , , and . Consider the coordinate system defined by the basis set where

If the material is in a state of uniaxial stress such that the only nonzero stress component is , find the engineering strain matrix in the coordinate systems defined by the basis sets and .

##### Solution

Since the material is orthotropic, the coefficients matrix depends on the coordinate system involved. The values of the material coefficients are given in the coordinate system defined by . Therefore, it is best to apply the constitutive relationship in the coordinate system of .

The stress matrix in the coordinate system of is given by:

The rotation matrix required for the coordinate transformation is:

The stress matrix in the coordinate system defined by is given by:

The relationship between the vector representations of the stress and the strain in the coordinate system of can be used to find the strains in the coordinate system of (See Equation 2) as follows:

Therefore, the strain matrix in the coordinate system of is given by:

On the other hand, the strain matrix in the coordinate system of is given by:

It is very important to notice that, while a uniaxial state of stress was applied in the coordinate system defined by , shear strain was developed in the same coordinate system. This is because the uniaxial state of stress was applied in a coordinate system different from the orthotropy axes coordinate system!

View Mathematica Code

E11=100;E22=200;E33=350;G12=50;G13=70;G23=90;
nu31=0.2;nu32=0.1;nu21=0.05;
nu13=nu31/E33*E11;nu12=nu21/E22*E11;nu23=nu32/E33*E22;
Ss={{1/E11,-nu21/E22,-nu31/E33,0,0,0} ,{-nu12/E11,1/E22,-nu32/E33,0,0,0} ,
{-nu13/E11,-nu23/E22,1/E22,0,0,0},{0,0,0,1/G12,0,0},{0,0,0,0,1/G13,0}, {0,0,0,0,0,1/G23}};
s={{1,0,0},{0,0,0},{0,0,0}};
Q=RotationMatrix[-45Degree,{0,0,1}]
sdash=Q.s.Transpose[Q];
sdash//MatrixForm
mat=sdash
sigmavector={mat[[1,1]],mat[[2,2]],mat[[3,3]],mat[[1,2]],mat[[1,3]],mat[[2,3]]}
sigmavector//MatrixForm
strvector=Ss.sigmavector;
strvector//MatrixForm
strdash={{strvector[[1]],strvector[[4]]/2,strvector[[5]]/2},{strvector[[4]]/2,strvector[[2]],strvector[[6]]/2},
{strvector[[5]]/2,strvector[[6]]/2,strvector[[3]]}} ;
strdash//MatrixForm
str=Transpose[Q].strdash.Q;
str//MatrixForm

View Python Code

from sympy import *
import sympy as sp
sp.init_printing(use_latex = "mathjax")
E11, E22, E33, G12, G13, G23, nu31, nu32, nu21 = 100, 200, 350, 50, 70, 90, 0.2, 0.1, 0.05
nu13 = nu31/E33*E11
nu12 = nu21/E22*E11
nu23 = nu32/E33*E22
Ss = Matrix([[1/E11, -nu21/E22, -nu31/E33, 0, 0, 0],
[-nu12/E11, 1/E22, -nu32/E33, 0, 0, 0],
[-nu13/E11, -nu23/E22, 1/E22, 0, 0, 0],
[0, 0, 0, 1/G12, 0, 0],
[0, 0, 0, 0, 1/G13, 0],
[0, 0, 0, 0, 0, 1/G23]])
s = Matrix([[1,0,0], [0,0,0], [0,0,0]])
display("stress matrix in B: ", s)
#this rotates clockwise, so use - of the angle
Q = rot_axis3(pi/4)
display("rotation matrix required: ", Q)
sdash = Q*s*Transpose(Q)
display("stress matrix in B': ", sdash)
sigmavector = Matrix([[sdash[0,0]], [sdash[1,1]], [sdash[2,2]], [sdash[0,1]], [sdash[0,2]], [sdash[1,2]]])
strvector = Ss*sigmavector
strdash = Matrix([[strvector[0], strvector[3]/2, strvector[4]/2],
[strvector[3]/2, strvector[1], strvector[4]/2],
[strvector[4]/2, strvector[5]/2, strvector[2]]])
display("strain matrix in  B': ", strdash)
strain = Transpose(Q) * strdash * Q
display("strain matrix in B: ", strain)


### Example 5

The in-plane strain components , , and of a specimen are 0.001, -0.002, and 0.003, respectively. If Young’s modulus is 10,000MPa and Poisson’s ratio is 0.2, find the stress and strain matrices if the material is in the state of plane strain and if the material is in the state of plane stress.

##### SOLUTION:

For the state of plane strain, the strain matrix has the following form:

Equation 11 can be used to find the stress components , , and as follows:

In a plane strain condition, the movement in the direction of is restrained, and thus, a restraining stress component  develops according to the relationship:

Thus, the stress matrix has the following form:

View Mathematica Code for the State of Plane Strain:

Ee=10000;Nu=0.2;
Cc=Ee/(1+Nu)*{{(1-Nu)/(1-2Nu),Nu/(1-2Nu),0} ,{Nu/(1-2Nu),(1-Nu)/(1-2Nu),0},{0,0,1/2}};
Cc//MatrixForm
strvector={0.001,-0.002,0.003};
stressvector=Cc.strvector;
stressvector//MatrixForm
s=Table[0,{i,1,3},{j,1,3}];
s[[1,1]]=stressvector[[1]];
s[[2,2]]=stressvector[[2]];
s[[1,2]]=stressvector[[3]];
s[[2,1]]=s[[1,2]];
s[[3,3]]=Nu (s[[1,1]]+s[[2,2]]);
s//MatrixForm

View Python Code

from sympy import *
import sympy as sp
sp.init_printing(use_latex = "mathjax")
Ee, Nu = 10000, 0.2
Cc = Matrix([[(1 - Nu)/(1 - 2*Nu), Nu/(1 - 2*Nu), 0],
[Nu/(1 - 2*Nu), (1 - Nu)/(1 - 2*Nu), 0],
[0, 0, 1/2]])
scalar = Ee/(1+Nu)
Cc = scalar * Cc
strvector  = Matrix([0.001, -0.002, 0.003])
stressvector = Cc * strvector
s = Matrix([[stressvector[0], stressvector[2], 0],
[stressvector[2], stressvector[1], 0],
[0, 0, 0]])
s[2,2] = Nu*(s[0,0] + s[1,1])
display("stress matrix: ", s)


In a plane stress condition, a nonzero strain component can develop, and thus, the strain matrix has the form:

The relationship between the stresses and the strains in a plane stress condition (Equation 10) can be utilized to find the values of the non-zero stress components, as follows:

Thus, the stress matrix has the following form:

In a plane stress condition, develops according to the relationship:

View Mathematica Code for the State of Plane Strain:

Ee=10000;Nu=0.2;
Cc=Ee/(1+Nu)*{{1/(1-Nu),Nu/(1-Nu),0},{Nu/(1-Nu),1/(1-Nu),0},{0,0,1/2}};
Cc//MatrixForm
strvector={0.001,-0.002,0.003};
stressvector=Cc.strvector;
stressvector//MatrixForm
s=Table[0,{i,1,3},{j,1,3}];
s[[1,1]]=stressvector[[1]];
s[[2,2]]=stressvector[[2]];
s[[1,2]]=stressvector[[3]];
s[[2,1]]=s[[1,2]];
s[[3,3]]=0;
s//MatrixForm
str=Table[0,{i,1,3} ,{j,1,3}];
str[[1,1]]=strvector[[1]];
str[[2,2]]=strvector[[2]];
str[[1,2]]=str[[2,1]]=strvector[[3]]/2;
str[[3,3]]=-Nu/Ee*(s[[1,1]]+s[[2,2]]);
str//MatrixForm

View Python Code

from sympy import *
import sympy as sp
sp.init_printing(use_latex = "mathjax")
e33 = symbols("\u03b5_{33}")
Ee, Nu = 10000, 0.2
Cc = Matrix([[1/(1 - Nu), Nu/(1 - Nu), 0],
[Nu/(1 - Nu), 1/(1 - Nu), 0],
[0, 0, 1/2]])
scaler = Ee/(1+Nu)
Cc = scaler * Cc
strvector  = Matrix([0.001, -0.002, 0.003])
stressvector = Cc * strvector
s = Matrix([[stressvector[0], stressvector[2], 0],
[stressvector[2], stressvector[1], 0],
[0, 0, 0]])
display("stress matrix: ", s)
strain = Matrix([[strvector[0], strvector[2]/2, 0],
[strvector[2]/2, strvector[1], 0],
[0, 0, -Nu/Ee * (s[0,0] + s[1,1])]])
display("strain matrix: ", strain)
display(Eq(e33, strain[2,2]))


### Example 6

The position function in dimensions of m of a plate adheres to the following form:

If the plate has dimensions 2m in the direction of , and 1m in the direction of , with the bottom left corner coinciding with the origin of the coordinate system, then:

• Show that this is a state of plane strain.
• Find the engineering small strain matrix, and the Green strain matrix and show that the engineering small strain is adequate to describe the motion.
• Draw the vector plot of the displacement function.
• If Young’s modulus and Poisson’s ratio are equal to 210 GPa and 0.3, respectively, then find the equilibrium body forces to which this plate is subjected.
• Draw the contour plot of the von Mises stress and the normal out-of-plane stress component.
##### SOLUTION:

Unlike the previous examples, this example shows a nonlinear displacement function resulting in a strain field that varies according to position. I.e., every material point will have a different local strain matrix. The displacement function for this plate has the following form:

The following figures shows the vector plot of the displacement function as drawn by Mathematica:

The gradient of the displacement tensor is:

The engineering and the Green strain matrices are:

The difference between the engineering and the Green strain matrices is very small and can be ignored. Thus, the engineering strain can be used to adequately describe the motion (i.e., the displacement is not associated with large rotations). In addition, the displacement component and the other displacement components are independent of the coordinate . Therefore, the strain components , i.e., a state of plane strain.

In order to calculate the stresses, the vector representation of the strain will be used:

Using the constitutive equation for the linear elastic isotropic material (Equation 7), the vector representation of the stress is:

Since the displacement is small, the coordinates can be used instead of the coordinates to find the equilibrium body forces:

The von Mises Stress:

The contour plot of the von Mises stress shows that the areas with the maximum von Mises stresses are the right and left bottom corners of the plate. Compare with the vector plot of the displacement (shown above) and note that the maximum displacements are not necessarily correlated with the maximum strain or stress. Since the plate is under a state of plane strain, the restraining stress component is non-zero. The contour plot of is shown below as well (Units are in MPa).

View Mathematica Code

Clear[Ee,Nu]
x1=X1+0.001*X2+0.0002*X1^2;
x2=1.001*X2-0.0002*X2^2;
x3=X3;
X={X1,X2,X3};
x={x1,x2,x3};
u=x-X;
u//MatrixForm
uplane=Table[u[[i]],{i,1,2}]
VectorPlot[uplane,{X1,0,2},{X2,0,1},AspectRatio->Automatic,PlotLabel->”u”,VectorStyle->Black]
Expand[strGreen]//MatrixForm
str//MatrixForm
Strainvector={str[[1,1]],str[[2,2]],str[[3,3]],2*str[[1,2]],2*str[[1,3]],2*str[[2,3]]};
Strainvector//MatrixForm
Ee=210000;
Nu=0.3;
G=Ee/2/(1+Nu);
Cc={{1/Ee,-Nu/Ee,-Nu/Ee,0,0,0},{-Nu/Ee,1/Ee,-Nu/Ee,0,0,0},{-Nu/Ee,-Nu/Ee,1/Ee,0,0,0}
,{0,0,0,1/G,0,0},{0,0,0,0,1/G,0},{0,0,0,0,0,1/G}};
Dd=FullSimplify[Inverse[Cc]];
stressvector=FullSimplify[Chop[Dd.Strainvector]];
stressvector//MatrixForm
Stressmatrix={{stressvector[[1]],stressvector[[4]],stressvector[[5]]},{stressvector[[4]],stressvector[[2]],stressvector[[6]]},
{stressvector[[5]],stressvector[[6]],stressvector[[3]]}};
Stressmatrix=FullSimplify[Chop[Stressmatrix]];
Stressmatrix//MatrixForm
X={X1,X2,X3};
s=Stressmatrix;
-Sum[D[s[[i,1]],X[[i]]],{i,1,3}]
-Sum[D[s[[i,2]],X[[i]]],{i,1,3}]
-Sum[D[s[[i,3]],X[[i]]],{i,1,3}]
VonMises[sigma_]:=Sqrt[1/2*((sigma[[1,1]]-sigma[[2,2]])^2+(sigma[[2,2]]-sigma[[3,3]])^2+(sigma[[3,3]]-
sigma[[1,1]])^2+6*(sigma[[1,2]]^2+sigma[[1,3]]^2+sigma[[2,3]]^2))];
a=FullSimplify[Chop[VonMises[Stressmatrix]]]
ContourPlot[a,{X1,0,2},{X2,0,1},AspectRatio->Automatic,ContourLabels->All,PlotLabel->”vonMises”,ColorFunction->”GrayTones”]
ContourPlot[Stressmatrix[[3,3]],{X1,0,2},{X2,0,1},AspectRatio->Automatic,ContourLabels->All,PlotLabel->”s33″,ColorFunction->”GrayTones”]

View Python Code

from sympy import *
import sympy as sp
import numpy as np
import matplotlib.pyplot as plt
sp.init_printing(use_latex = "mathjax")
def vonMises(M):
return sp.sqrt(1/2*((M[0,0] - M[1,1])**2+(M[1,1] - M[2,2])**2+
(M[2,2] - M[0,0])**2+6*(M[0,1]**2+M[0,2]**2+M[1,2]**2)))

def plotVector(f, limits, title):
fx, fy = [lambdify((X1,X2),fi) for fi in f]
x1, xn, y1, yn = limits
dx, dy = 10/100*(xn-x1),10/100*(yn-y1)
xrange = np.arange(x1,xn,dx)
yrange = np.arange(y1,yn,dy)
X, Y = np.meshgrid(xrange, yrange)
dxplot, dyplot = fx(X,Y), fy(X,Y)
fig = plt.figure()
ax.quiver(X, Y, dxplot, dyplot)
plt.title(title)

def plotContour(f, limits, title):
x1, xn, y1, yn = limits
dx, dy = 10/100*(xn-x1),10/100*(yn - y1)
xrange = np.arange(x1,xn,dx)
yrange = np.arange(y1,yn,dy)
X, Y = np.meshgrid(xrange, yrange)
lx, ly = len(xrange), len(yrange)
F = lambdify((X1,X2),f)
# if F is constant, then generates array
# if F generates array, doesn't change anything
Z = F(X,Y)*np.ones(lx*ly).reshape(lx, ly)
fig = plt.figure()
cp = ax.contourf(X,Y,Z)
fig.colorbar(cp)
plt.title(title)

x, x1, x2, x3, X1, X2, X3, u, pb1, pb2, pb3= symbols("x x_1 x_2 x_3 X_1 X_2 X_3 u pb_1 pb_2 pb_3")
x1 = X1 + 0.001*X2 + 0.0002*X1**2
x2 = 1.001*X2 - 0.0002*X2**2
x3 = X3
display("displacement function: ")
X = Matrix([[X1], [X2], [X3]])
x = Matrix([[x1], [x2], [x3]])
u = x - X
display(u)
limits = [0,2,0,1]
uplane = u[:2]
display(uplane)
plotVector(uplane, limits, "u")
gradu = Matrix([[diff(ui,Xj) for Xj in X] for ui in u])
strain = 1/2 * (gradu + Transpose(gradu))
display("engineering strain matrix: ", strain)
display("Green strain matrix: ", strGreen)
strainvector = Matrix([[strain[0,0]], [strain[1,1]], [strain[2,2]], [2 * strain[0,1]], [2 * strain[0,2]                       ], [2 * strain[1, 2]]])
display("small strain vector: ", strainvector)
Ee = 210000
Nu = 0.3
G = Ee/2/(1+Nu)
Cc = Matrix([[1/Ee, -Nu/Ee, -Nu/Ee, 0, 0, 0],
[-Nu/Ee, 1/Ee, -Nu/Ee, 0, 0, 0],
[-Nu/Ee, -Nu/Ee, 1/Ee, 0, 0, 0],
[0, 0, 0, 1/G, 0, 0],
[0, 0, 0, 0, 1/G, 0],
[0, 0, 0, 0, 0, 1/G]])
Dd = Inverse(Cc)
stressvector = Dd * strainvector
display("stressvector: ", stressvector)
stressmatrix = Matrix([[stressvector[0], stressvector[3], stressvector[4]],
[stressvector[3], stressvector[1], stressvector[5]],
[stressvector[4], stressvector[5], stressvector[2]]])
display("stressmatrix: ", stressmatrix)
s = stressmatrix
sum1 = -sum(diff(s[i,0], X[i]) for i in range(3))
display(Eq(pb1, sum1))
sum2 = -sum(diff(s[i,1], X[i]) for i in range(3))
display(Eq(pb2, sum2))
sum3 = sum(diff(s[i,2], X[i]) for i in range(3))
display(Eq(pb3, sum3))
a = vonMises(stressmatrix)
display("von Mises stress: ", a)
plotContour(a,limits,"vonMises")
plotContour(s[2,2],limits, "s33")


### Example 7

The in plane displacements of a plate of dimensions of 5m and 1m in the directions of and , respectively, with the bottom left corner situated at the origin are according to the relationship:

If the plate is in the state of plane stress, draw the contour plot of the change of thickness of the plate, assuming that Young’s modulus is 1000 MPa, Poisson’s ratio is 0.4, and the thickness of the plate is 1mm.

##### SOLUTION:

Since the plate is in a state of plane stress, while a strain compoenent develops according to the equation:

The in plane strain components can be obtained from the in plane gradient of the displacement function, as follows:

The stresses can be obtained using the plane stress constitutive relation (Equation 10):

Thus, the strain component is:

The change in thickness in mm can be obtained using the formula:

The required contour plot is shown below:

View Mathematica Code

X={X1,X2,X3};
u={0.02X1+0.02X1*X2,0.0015X2*X1^2+0.02X2};
VectorPlot[u,{X1,0,5},{X2,0,1},AspectRatio->Automatic]
esmall//MatrixForm
strvector={esmall[[1,1]],esmall[[2,2]],2*esmall[[1,2]]};
strvector//MatrixForm
Ee=1000;Nu=0.4;Cc=Ee/(1+Nu)*{{1/(1-Nu),Nu/(1-Nu),0},{Nu/(1-Nu),1/(1-Nu),0},{0,0,1/2}};
stressvector=Cc.strvector;
stressvector//MatrixForm
strain=Table[0,{i,1,3},{j,1,3}];
strain[[1;;2,1;;2]]=esmall;
strain[[3,3]]=-Nu/Ee*(stressvector[[1]]+stressvector[[2]]);
strain//MatrixForm
thickness=1;
delta=FullSimplify[strain[[3,3]]*thickness]
ContourPlot[delta,{X1,0,5},{X2,0,1},ContourLabels->All,AspectRatio->Automatic,PlotLabel->”delta Thickness mm”]

View Python Code

from sympy import *
import sympy as sp
import numpy as np
import matplotlib.pyplot as plt
sp.init_printing(use_latex = "mathjax")
E, e33, v, s11, s22, X1, X2, X3= symbols("E \u03b5_{33} \u03bd \u03c3_{11} \u03c3_{22} X_1 X_2 X_3")

def plotVector(f, limits, title):
fx, fy = [lambdify((X1,X2),fi) for fi in f]
x1, xn, y1, yn = limits
dx, dy = 10/100*(xn-x1),10/100*(yn-y1)
xrange = np.arange(x1,xn,dx)
yrange = np.arange(y1,yn,dy)
X, Y = np.meshgrid(xrange, yrange)
dxplot, dyplot = fx(X,Y), fy(X,Y)
fig = plt.figure()
ax.quiver(X, Y, dxplot, dyplot)
plt.title(title)

def plotContour(f, limits, title):
x1, xn, y1, yn = limits
dx, dy = 10/100*(xn-x1),10/100*(yn - y1)
xrange = np.arange(x1,xn,dx)
yrange = np.arange(y1,yn,dy)
X, Y = np.meshgrid(xrange, yrange)
lx, ly = len(xrange), len(yrange)
F = lambdify((X1,X2),f)
# if F is constant, then generates array
# if F generates array, doesn't change anything
Z = F(X,Y)*np.ones(lx*ly).reshape(lx, ly)
fig = plt.figure()
cp = ax.contourf(X,Y,Z)
fig.colorbar(cp)
plt.title(title)

X = Matrix([[X1], [X2], [X3]])
u = Matrix([[0.02*X1 + 0.02*X1*X2], [0.0015*X2*X1**2 + 0.02*X2]])
limits = [0,5,0,1]
plotVector(u,limits, "u")
gradu = Matrix([[diff(ui,Xj) for Xj in X[:2]] for ui in u])
display("plane gradient for displacement function: ", gradu)
esmall = 1/2 * (gradu + Transpose(gradu))
strvector = Matrix([esmall[0,0], esmall[1,1], 2*esmall[0,1]])
Ee = 1000
Nu = 0.4
Cc = Matrix([[1/(1-Nu), Nu/(1-Nu), 0],
[Nu/(1-Nu), 1/(1-Nu), 0],
[0,0,1/2]])
Cc = Ee/(1+Nu) * Cc
stressvector = Cc * strvector
display("stressvector: ", stressvector)
strain = Matrix([[esmall[0,0], esmall[0,1], 0],
[esmall[1,0], esmall[1,1], 0],
[0, 0, -Nu/Ee * (stressvector[0] + stressvector[1])]])
thickness = 1
delta = strain[2,2] * thickness
display("strain component: ")
display(Eq(e33, v/E*(s11+s22)))
display(Eq(e33, delta))
plotContour(delta, limits, "delta thickness mm")


### Example 8

A cylindrical pressure vessel is made out of a steel material. The material’s Young modulus and Poisson’s ratio are 210 GPa and 0.3 respectively. The pressure vessel is used to hold a gas with an internal pressure of 3 MPa. The vessel’s average diameter is 2 m, and its thickness is 10mm. Find the von Mises stress, the change in diameter, and the change in thickness of the cylinder in the following two conditions:

• Condition 1: Capped ends.
• Condition 2: Restrained ends.
##### SOLUTION:

As shown in the sketch, the orthonormal basis vectors are chosen in this example such that is aligned with the longitudinal axis of the pipe and is vertical. The analyzed part of the pressure wall is taken to be perpendicular to .

For condition 1: The normal stress component in the longitudinal direction is:

The normal stress component in the direction of the vector is:

All the remaining components of the stress matrix are zero. Thus, the stress matrix has the following form:

The von Mises Stress is:

The strain-stress relationship (Equation 6) can be used to find the vector representation of the strain:

The strain component gives the relative change of diameter as follows:

Therefore the change in diameter is:

The component provides the relative change in the thickness of the pressure vessel. Therefore:

View Mathematica Code for Condition 1:

P=3;r=1000;t=10;Ee=210000;Nu=0.3;
s=Table[0,{i,1,3},{j,1,3}];
s[[1,1]]=P*r/2/t
s[[2,2]]=P*r/t
VonMises[sigma_]:=Sqrt[1/2*((sigma[[1,1]]-sigma[[2,2]])^2+(sigma[[2,2]]-sigma[[3,3]])^2+(sigma[[3,3]]-
sigma[[1,1]])^2+6*(sigma[[1,2]]^2+sigma[[1,3]]^2+sigma[[2,3]]^2))];
a=VonMises[s]
G=Ee/2/(1+Nu);
Ss={{1/Ee,-Nu/Ee,-Nu/Ee,0,0,0},{-Nu/Ee,1/Ee,-Nu/Ee,0,0,0},{-Nu/Ee,-Nu/Ee,1/Ee,0,0,0},{0,0,0,1/G,0,0},
{0,0,0,0,1/G,0},{0,0,0,0,0,1/G}};
stressvector={s[[1,1]],s[[2,2]],s[[3,3]],s[[1,2]],s[[1,3]],s[[2,3]]}
strainvector=Ss.stressvector;
strainvector//MatrixForm
deltathickness=strainvector[[3]]*t

View Python Code

from sympy import *
import sympy as sp
sp.init_printing(use_latex = "mathjax")
def vonMises(M):
return sp.sqrt(1/2*((M[0,0] - M[1,1])**2+(M[1,1] - M[2,2])**2+
(M[2,2] - M[0,0])**2+6*(M[0,1]**2+M[0,2]**2+M[1,2]**2)))

P, r, t, Ee, Nu =  3, 1000, 10, 210000, 0.3
s = Matrix([[P*r/2/t, 0, 0],
[0, P*r/t, 0],
[0, 0, 0]])
display("stress matrix: ", s)
a = vonMises(s)
display("von Mises Stress: ", a)
G = Ee/2/(1+Nu)
Ss = Matrix([[1/Ee ,-Nu/Ee, -Nu/Ee, 0, 0, 0],
[-Nu/Ee, 1/Ee, -Nu/Ee, 0, 0, 0],
[-Nu/Ee, -Nu/Ee, 1/Ee, 0, 0, 0],
[0, 0, 0, 1/G, 0, 0],
[0, 0, 0, 0, 1/G, 0],
[0, 0, 0, 0, 0, 1/G]])
stressvector = Matrix([[s[0,0]], [s[1,1]], [s[2,2]], [s[0,1]], [s[0,2]], [s[1,2]]])
strainvector = Ss * stressvector
display("strainvector: ", strainvector)
deltadiameter = strainvector[1] * 2 * r
display("change in diameter: ", deltadiameter)
deltathickness = strainvector[2] * t
display("change in thickness: ", deltathickness)


For condition 2, the normal stress in the longitudinal direction () is not known since the vessel is restrained in the longitudinal direction. The circumferential stress (normal stress in the direction of the vector ) is given by:

Thus, the stress matrix has the form:

Since for condition 2, the pipe is restrained from expanding or contracting, therefore, . Therefore:

The von Mises Stress is thus given by:

The strain-stress relationship (Equation 6) can be used to find the vector representation of the strain:

The strain component gives the relative change of diameter as follows:

Therefore the change in diameter is:

The component provides the relative change in the thickness of the pressure vessel. Therefore:

View Mathematica Code for Condition 2:

P=3;r=1000;t=10;Ee=210000;Nu=0.3;
s=Table[0,{i,1,3},{j,1,3}];
s[[2,2]]=P*r/t
s[[1,1]]=Nu*s[[2,2]]
VonMises[sigma_]:=Sqrt[1/2*((sigma[[1,1]]-sigma[[2,2]])^2+(sigma[[2,2]]-
sigma[[3,3]])^2+(sigma[[3,3]]-sigma[[1,1]])^2+6*(sigma[[1,2]]^2+sigma[[1,3]]^2+sigma[[2,3]]^2))];
a=VonMises[s]
G=Ee/2/(1+Nu);
Ss={{1/Ee,-Nu/Ee,-Nu/Ee,0,0,0},{-Nu/Ee,1/Ee,-Nu/Ee,0,0,0},{-Nu/Ee,-Nu/Ee,1/Ee,0,0,0},{0,0,0,1/G,0,0},
{0,0,0,0,1/G,0},{0,0,0,0,0,1/G}};
stressvector={s[[1,1]],s[[2,2]],s[[3,3]],s[[1,2]],s[[1,3]],s[[2,3]]}
strainvector=Ss.stressvector;
strainvector//MatrixForm
deltathickness=strainvector[[3]]*t

View Python Code

from sympy import *
import sympy as sp
sp.init_printing(use_latex = "mathjax")
def vonMises(M):
return sp.sqrt(1/2*((M[0,0] - M[1,1])**2+(M[1,1] - M[2,2])**2+
(M[2,2] - M[0,0])**2+6*(M[0,1]**2+M[0,2]**2+M[1,2]**2)))

P, r, t, Ee, Nu =  3, 1000, 10, 210000, 0.3
s = Matrix([[0, 0, 0],
[0, P*r/t, 0],
[0, 0, 0]])
s[0,0] = Nu * s[1,1]
display("stress matrix: ", s)
a = vonMises(s)
display("von Mises Stress: ", a)
G = Ee/2/(1+Nu)
Ss = Matrix([[1/Ee ,-Nu/Ee, -Nu/Ee, 0, 0, 0],
[-Nu/Ee, 1/Ee, -Nu/Ee, 0, 0, 0],
[-Nu/Ee, -Nu/Ee, 1/Ee, 0, 0, 0],
[0, 0, 0, 1/G, 0, 0],
[0, 0, 0, 0, 1/G, 0],
[0, 0, 0, 0, 0, 1/G]])
stressvector = Matrix([[s[0,0]], [s[1,1]], [s[2,2]], [s[0,1]], [s[0,2]], [s[1,2]]])
strainvector = Ss * stressvector
display("strainvector: ", strainvector)
deltadiameter = strainvector[1] * 2 * r
display("change in diameter: ", deltadiameter)
deltathickness = strainvector[2] * t
display("change in thickness: ", deltathickness)


### Problems

1. What does a negative Poisson’s ratio mean? Conduct a literature search and write a small paragraph supporting or opposing that materials with negative Poisson’s ratio exist (cite any references used).

2. What does a Poisson’s ratio>0.5 mean? Conduct a literature search and write a small paragraph supporting or opposing that materials with Poisson’s ratio>0.5 exist (cite any references used).

3. Assuming a linear elastic material such that the relationship between the stress and the strain is described by the following matrix:

Assuming that the material is isotropic (i.e., the relationship above applies in any coordinate system) and starting from a state of stress described by the matrix:

Show that:

(Hint: use a procedure similar to the one shown below the definition of the shear modulus).

4. Show the following relationships for linear elastic isotropic materials:

where: are the components of the deviatoric stress tensor
are the components of the deviatoric strain tensor

and are Lamé’s constants.

5. A state of stress of a linear isotropic material is represented by a positive definite symmetric stress matrix. Find the volumetric strain in terms of the principal stresses, Young’s modulus and Poisson’s ratio. Comment on whether the volume increases, decreases, stays constant or whether the information provided is not enough to answer this question.

6. In a confined compression test of a linear elastic isotropic material, the testing apparatus was such that the confining pressure was equal to 50% of the applied vertical compressive stress . Find the relationship between and the volumetric strain in terms of Young’s modulus and Poisson’s ratio. Also, find the maximum shear stress, and the von Mises stress in terms of .

7. In a confined compression test of a linear elastic isotropic material, the testing apparatus was such that the specimen was restrained from expanding (or contracting) laterally. Find the relationship between the vertical compressive stress and the vertical strain in terms of Young’s modulus and Poisson’s ratio.

8. Find the value of Poisson’s ratio at which both the shear modulus and the bulk modulus are equal to each other in value.

9. A cylindrical sample is subjected to a confined compression test in which the horizontal stress is kept constant at –200 MPa, while the magnitude of the compressive vertical stress is increased to reach the value of –600 MPa. Find the volumetric strain if the shear and bulk moduli are 22.72 GPa and 20.833 GPa, respectively. (Answer: –1.6%)

10. A linear elastic isotropic material with Young’s modulus of 210GPa and Poisson’s ratio of 0.3 is in a state of strain described by the infinitesimal strain matrix:

• Find the principal strains and their directions.

• Find the principal stresses and their directions.

• Are the principal stresses and the principal strains aligned?

11. Consider a linear elastic orthotropic material in a state of strain described by the infinitesimal strain matrix as in the previous problem. Assume the following material properties: , , , , .

• Find the principal stresses and their directions.

• Are the principal stresses and the principal strains aligned?

12. Using sound mathematical arguments show that the principal stresses and the principal strains are always aligned for linear elastic isotropic materials. (Hint: use the fact that Equations 6 and 7 are valid in any coordinate system)

13. The in-plane displacement function of the two dimensional plate shown below is given by:

Assuming that the plate is of a linear elastic isotropic material with Young’s modulus and Poisson’s ratio =0.2, draw the contour plot of the stress components , , , , , and the hydrostatic stress for each of the following two cases:

• the plate is in a state of plane stress.

• the plate is in a state of plane strain.

14. A cylindrical pressure vessel with an average diameter of 1m and a wall thickiness of 10mm is made of a material with Young’s modulus of 2.1 GPa and Poisson’s ratio 0.3. A constant pressure P of 1.3MPa is maintained inside the vessel

• Assuming that the length of the pressure vessel is 5m, find the increase in length. (Answer: 31mm)

• Find the increase in the diameter of the pressure vessel. (Answer: 26.3mm)

• Find the change in thickness of the pressure vessel. (Answer: –0.14mm)

• Find the volumetric strain throughout the pressure vessel wall. (Answer: 1.9%)

15. An elastic cylindrical pressure vessel with average diameter , thickness , length , Young’s modulus , Poisson’s ratio is subjected to an internal pressure . Assume that the thickness is very small compared to the diameter. Find the circumferential stress, the longitudinal stress, the circumferential strain, and the longitudinal strain in the following two conditions:

• Condition 1: The pressure vessel has two caps on its ends.

• Condition 2: The pressure vessel is infinitely long and, thus, cannot expand or contract in the longitudinal direction.