Mohr’s Circles

Mohr’s circles is a graphical way to find the principal normal stresses and the maximal shear stress of a given stress state

Symetric stress tensor

Assumptions :

We assume an isotropic material

2D

Manipulate[
Module[{tauYX,thetaP,thetaS,princNormStress1,princNormStress2,maxShear},
tauYX=-tauXY;
thetaP= ArcTan[tauXY/((sigmaX-sigmaY)/2)]/2;
thetaS= ArcTan[-(sigmaX-sigmaY)/2/tauXY]/2;
princNormStress1 = .5 (sigmaX + sigmaY) +Sqrt[(Abs[sigmaX-sigmaY]/2)^2+tauXY^2];
princNormStress2 = .5 (sigmaX + sigmaY) -Sqrt[(Abs[sigmaX-sigmaY]/2)^2+tauXY^2];
maxShear = Sqrt[(Abs[sigmaX-sigmaY]/2)^2+tauXY^2];
Column[{Grid[{
{"σ X" , N@sigmaX "MPa"},
{"σ y" , N@sigmaY "MPa"},
{"τ xy" , N@tauXY "MPa"},
{"Principal normal stresses" ,N@princNormStress1 "MPa" , N@princNormStress2"MPa" },
{"Angle of principal stresses", N@thetaP*(180/Pi)"°" },
{"Maximal shear stress", N@maxShear"MPa"},
{"Angle of maximal shear", N@thetaS*(180/Pi)"°" }}],
Graphics[{{PointSize->Large,Pink, Point[{{sigmaX,tauYX},{sigmaY,tauXY}}],Green,Point[{{princNormStress1,0},{princNormStress2,0}}],Blue,Point[{.5 (sigmaX + sigmaY) ,Sqrt[(Abs[sigmaX-sigmaY]/2)^2+tauXY^2]}]},Circle[{(sigmaX+sigmaY)/2,0},Sqrt[(Abs[sigmaX-sigmaY]/2)^2+tauXY^2]],Pink,Line[{{sigmaX,tauYX},{sigmaY,tauXY}}]},PlotRange->500,Axes->True, ImageSize->Medium, AxesLabel->{"Normal","Shear"}]
}]

]
,{{sigmaX,185},-100,300,5},{{sigmaY,60},-100,sigmaX,5},{{tauXY,135},0,300,5}]

Maximal shear stress is the radius of the Mohr' s circle

3D

Diagonalization

mymatrix = {{145,-89,-102},{-89,72,39},{-102,39,183}};
MatrixForm@mymatrix

MatrixForm@DiagonalMatrix@N@Eigenvalues@mymatrix

3D Mohr’s circles

Manipulate[
Module[{maxShear},
maxShear=(sigma1-sigma3)/2 ;

Column[{Grid[{
{"σ1" , N@sigma1 "MPa"},
{"σ2" , N@sigma2 "MPa"},
{"σ3" , N@sigma3 "MPa"},
{"Maximal normal stress" ,N@sigma1"MPa" },
{"Minimal normal stress" ,N@sigma2"MPa" },
{"Maximal shear stress", N@maxShear"MPa"}}],

Graphics[{{Circle[{(sigma3 +sigma1)/2,0},(sigma1-sigma3)/2],Orange,Disk[{(sigma3 +sigma1)/2,0},(sigma1-sigma3)/2],Gray,Disk[{(sigma3 +sigma2)/2,0},(sigma2-sigma3)/2],Gray,Disk[{(sigma1+sigma2)/2,0},Sqrt[(Abs[sigma1-sigma2]/2)^2]]},{PointSize->Large,Green,Point[{{sigma1,0},{sigma2,0},{sigma3,0}}],Blue,Point[{(sigma3+sigma1)/2 ,(sigma1-sigma3)/2 }]}},PlotRange->200,Axes->True, ImageSize->Medium, AxesLabel->{"Normal","Shear"}]
}]

]
,{{sigma1,60},-100,100,5},{{sigma2,10},sigma3,sigma1,5},{{sigma3,-45},-100,sigma2,5}]

The maximal shear stress depends on the difference between the smallest and largest principal normal stresses.

Projections

Projection along z axis

Manipulate[
Module[{tensor,tensorX,tensorY,tensorZ,principalS,newtensor,thetaP,thetaS,maxShear},
tensor={{110,120,310},{120,-220,230},{310,230,330}};

tensorX={{tensor[[2,2]],tensor[[2,3]]},{tensor[[3,2]],tensor[[3,3]]}};
tensorY={{tensor[[1,1]],tensor[[1,3]]},{tensor[[3,1]],tensor[[3,3]]}};
tensorZ={{tensor[[1,1]],tensor[[1,2]]},{tensor[[2,1]],tensor[[2,2]]}};
If[projection=="x",newtensor=tensorX,If[projection=="y",newtensor=tensorY,If[projection=="z",newtensor=tensorZ]]];


principalS=Sort@N@Eigenvalues@newtensor;
thetaP= ArcTan[newtensor[[1,2]]/((newtensor[[1,1]]-newtensor[[2,2]])/2)]/2;
thetaS= ArcTan[-(newtensor[[1,1]]-newtensor[[2,2]])/2/newtensor[[1,2]]]/2;
maxShear = Sqrt[(Abs[newtensor[[1,1]]-newtensor[[2,2]]]/2)^2+newtensor[[1,2]]^2];

Column[{Grid[{
{"Principal normal stresses" ,N@principalS[[1]] "MPa" , N@principalS[[2]]"MPa" },
{"Angle of principal stresses", N@thetaP*(180/Pi)"°" },
{"Maximal shear stress", N@maxShear"MPa"},
{"Angle of maximal shear", N@thetaS*(180/Pi)"°" }}],
Graphics[{{PointSize->Large,Pink, Point[{{newtensor[[1,1]],newtensor[[1,2]]},{newtensor[[2,2]],-newtensor[[2,1]]}}],Green,Point[{{principalS[[1]],0},{principalS[[2]],0}}],Blue,Point[{.5 (newtensor[[1,1]] + newtensor[[2,2]]) ,Sqrt[(Abs[newtensor[[1,1]]-newtensor[[2,2]]]/2)^2+newtensor[[1,2]]^2]}]},Circle[{(newtensor[[1,1]]+newtensor[[2,2]])/2,0},Sqrt[(Abs[newtensor[[1,1]]-newtensor[[2,2]]]/2)^2+newtensor[[1,2]]^2]],Pink,Line[{{newtensor[[1,1]],newtensor[[1,2]]},{newtensor[[2,2]],-newtensor[[1,2]]}}]},PlotRange->600,Axes->True, ImageSize->Medium, AxesLabel->{"Normal","Shear"}]
}]
],{projection,{"x","y","z"}}]

Additionning the three different principal stress rotation angles along the x,y and z axis, we get the three principal normal stresses of our stress state just as if used the eigenvalues of our 3x3 matrix

Sources

www.engapplets.vt.edu
http://www.bu.edu/moss/mechanics-of-materials-stress-transformation/