Sei sulla pagina 1di 12

Cerchi di Mohr 3D (Arbelo)

... simboli utilizzati per


- indici del riferimento principale
- tensioni e direzioni principali
In[1]:=  = 3;
PrincipalIndices[n_] := Part[{, , }(* RomanNumeral/@{1,2,3}*), Mod[n, 3, 1]];
EigenVal = σ;

EigenVec = e ;
EigenPair = EigenValPrincipalIndices[#] , EigenVecPrincipalIndices[#]  &;

... componenti nel riferimento usuale e1 , e2 , e3  dello stato di tensione nel generico punto

In[6]:= {T} ^= Array[T10 #1+#2 &, {, }](*/.{T21 T12 ,T31 T13 ,T32 T23 }*) ; MatrixForm[{T}]
Out[6]//MatrixForm=
T11 T12 T13
T21 T22 T23
T31 T32 T33

... componenti nel riferimento principale dello stato di tensione nel generico punto e della normale
generica

In[7]:= {T⋱ } ^= DiagonalMatrixArrayEigenValPrincipalIndices[#] &, {};


MatrixForm{T ⋱ }

{n} ^= ArraynPrincipalIndices[#] &, {};

MatrixForm{n }
Out[7]//MatrixForm=
σ 0 0
0 σ 0
0 0 σ
Out[8]//MatrixForm=
n
n
n

... componente normale (TN ) e tangenziale (TS )


2 Arbelo.nb

 
In[9]:= nSist = {n }.{T⋱ }.{n}  TN ,
 
{T⋱ }.{n}.{T⋱ }.{n}  T2S + T2N ,
 
{n}.{n}  1;
Column[nSist]
 
var = List @@ {n }.{n};
tmp = MapThreadRule,
var, ToExpressionMap"n ." <> # &, ToString /@ Array[PrincipalIndices, {}];
tmpInv = tmp /. (Rule[n_, m_]  Rule[m, n]);
Out[10]=

n2 σ + n2 σ + n2 σ  TN


n2 σ2 + n2 σ2 + n2 σ2  T2N + T2S
n2 + n2 + n2  1

... relazione, assegnate le tensioni principali, tra le componenti della normale e tensioni TN e TS
In[14]:= nSol = First[Solve[nSist /. tmp, var /. tmp]] /. tmpInv;
Column[nSol // FullSimplify]
Out[15]=
T2S +(TN -σ ) (TN -σ )
n2 
(σ -σ ) (σ -σ )
T2S +(TN -σ ) (TN -σ )
n2 -
(σ -σ ) (σ -σ )
T2S +(TN -σ ) (TN -σ )
n2 -
(σ -σ ) (-σ +σ )

... tenendo conto che


In[16]:= Greater @@ (EigenVal# & /@ Array[PrincipalIndices, {}])
Out[16]=

σ > σ > σ

... si ha
In[17]:= tmp = FullSimplify[Map[GreaterEqual[#, 0] &, var /. nSol],
Greater @@ (EigenVal# & /@ Array[PrincipalIndices, {}])];
Column[tmp]
Out[18]=

T2S + (TN - σ ) (TN - σ ) ≥ 0


T2S + (TN - σ ) (TN - σ ) ≥ 0
T2S + (TN - σ ) (TN - σ ) ≤ 0

... e cioè le componenti di tensioni TN e TS sono non interne alle regioni (cerchi!) del piano (TN , TS )
definite dalle prime due disequazioni e non esterne alla regione definita dalla terza disequazione.
Il centro ed il raggio dei cerchi definiti dalle disequazioni valgono
In[19]:= i_ := EigenValPrincipalIndices[i+1] + EigenValPrincipalIndices[i+2]   2, 0
i_ := AbsEigenValPrincipalIndices[i+1] - EigenValPrincipalIndices[i+2]   2
Arbelo.nb 3

In[21]:= tmp = Map[{# , # } &, Array[# &, {}]];


MatrixForm[tmp]
Out[22]//MatrixForm=
1 1
 (σ + σ ), 0 Abs[- σ + σ ]
2 2
1 1
 (σ + σ ), 0 Abs[- σ + σ ]
2 2
1 1
 (σ + σ ), 0 Abs[σ - σ ]
2 2

... un esempio numerico a caso


In[26]:= {T } ^=
1 / 2 ((tmp = Table[2 RandomInteger[{- 4, 4}], {i, }, {j, }]) + Transpose[tmp]) // N;
{T } ^= {{3, 0, 1}, {0, 2, 4}, {1, 4, 1}} // N (* esempio dato a lezione *);
MatrixForm{T  }
Out[28]//MatrixForm=
3. 0. 1.
0. 2. 4.
1. 4. 1.

In[29]:= ruleT = MapThreadRule, Flatten[{T}], Flatten{T  };


Row[ruleT, ","]
Out[30]=

T11  3., T12  0., T13  1., T21  0., T22  2., T23  4., T31  1., T32  4., T33  1.

... autovalori (ordinati in senso decrescente σ > σ > σ ) e corrispondenti autovettori


In[31]:= {tmpσ, tmpe} = Eigensystem{T  } // Chop;
tmp = Sort[{tmpσ, tmpe} // Transpose, #1〚1〛 > #2〚1〛 &];
ruleEigenPair = Flatten[Array[MapThread[Rule, {EigenPair[#], tmp〚#〛}] &, {}]];
EigenPair[n_] := EigenPair[n] /. ruleEigenPair

In[35]:= MatrixForm{T  }
MatrixForm[Array[EigenPair[#] &, {}]]
Out[35]//MatrixForm=
3. 0. 1.
0. 2. 4.
1. 4. 1.
Out[36]//MatrixForm=
5.6977 {- 0.24402, - 0.712112, - 0.658294}
2.93418 {0.96058, - 0.270717, - 0.0632247}
- 2.63188 {- 0.133188, - 0.647772, 0.750101}
4 Arbelo.nb

Grafico
In[57]:= offset = 2 {- 1, - 1 / 2};
grCircle = Graphics
{Red, Thick, Circle @@ {1 , 1 },
PointSize[Medium], Point[1 ], Style[Text[" ", 1 , offset]]},
{Green, Thick, Circle @@ {2 , 2 },
PointSize[Medium], Point[2 ], Style[Text[" ", 2 , offset]]},
{Blue, Thick, Circle @@ {3 , 3 },
PointSize[Medium], Point[3 ], Style[Text[" ", 3 , offset]]},
Gray, PointSize[Medium],
Pointtmp = EigenValPrincipalIndices[1] , 0, Style[Text["σ ", tmp, offset]],
Gray, PointSize[Medium], Pointtmp = EigenVal PrincipalIndices[2] , 0,
Style[Text["σ ", tmp, offset]], Gray, PointSize[Medium],
Pointtmp = EigenValPrincipalIndices[3] , 0, Style[Text["σ ", tmp, offset]],
Gray, StyleText"{T} = " MatrixForm{T  }, EigenValPrincipalIndices[1] , 2  /.
ruleEigenPair, Axes  True,
AxesLabel  {" TN ", " TS "}, PlotLabel  "Cerchi di Mohr"
Out[58]=
Cerchi di Mohr
TS 3. 0. 1.
{T} = 0. 2. 4.
4
1. 4. 1.

σ   σ  σ
TN
-2 2 4

-2

-4

In[59]:= d1 = Disk @@ {1 , 1 } /. ruleEigenPair;


d2 = Disk @@ {2 , 2 } /. ruleEigenPair;
d3 = Disk @@ {3 , 3 } /. ruleEigenPair;

In[62]:= regionArbelo =
(({x, y} - d3〚1〛).({x, y} - d3〚1〛) ≥ d3〚2〛 ^ 2) &&
(({x, y} - d1〚1〛).({x, y} - d1〚1〛) ≥ d1〚2〛 ^ 2) &&
(({x, y} - d2〚1〛).({x, y} - d2〚1〛) ≤ d2〚2〛 ^ 2);
Arbelo.nb 5

In[63]:= grArbelo = {grCircle, RegionPlot[ImplicitRegion[regionArbelo, {x, y}],


Axes  True, AxesLabel  {"TN ", "TS "}], grCircle};

In[64]:= Show[grArbelo, Frame  True]


Out[64]=
Cerchi di Mohr
TS 3. 0. 1.
{T} = 0. 2. 4.
4
1. 4. 1.

σ   σ  σ
0 TN

-2

-4

-2 0 2 4

In[65]:= PrincipalIndices =.

In[66]:= mMrange =
{Min[#], Max[#]} &[(EigenVal# & /@ Array[PrincipalIndices, {}]) /. ruleEigenPair]
Out[66]=

{- 2.63188, 5.6977}
6 Arbelo.nb

Manipulate

cMax = x
., y ., y
 - 2 .x  - 2   2 ^ 2 /. ruleEigenPair;
. .
k = FromSphericalCoordinates[{1, ϑ, ϕ}];
(*k={kk〚3〛,kk〚2〛,kk〚1〛};*)
l1 = MapThreadRule,

., y
x
.
, {(EigenVal# &[PrincipalIndices[1]]), 0} + t
. {Sqrt[1 - k〚1〛 ^ 2], - k〚1〛} /.
ruleEigenPair;
tSol = DeleteCasesSolvecMax /. l1, t
. // Chop, t
.  0 // Flatten;
s1 =
{(EigenVal# &[PrincipalIndices[1]]), 0}, {(EigenVal# &[PrincipalIndices[1]]), 0} +

. /. tSol {Sqrt[1 - k〚1〛 ^ 2], - k〚1〛} /. ruleEigenPair;


t
r1 = Normx
., y  /. (l1 /. tSol) - 1 /. ruleEigenPair;
.
l2 = MapThreadRule,

., y
x
.
, {(EigenVal# &[PrincipalIndices[3]]), 0} + t
. {Sqrt[1 - k〚3〛 ^ 2], k〚3〛} /.
ruleEigenPair;
tSol = DeleteCasesSolvecMax /. l2, t
. // Chop, t
.  0 // Flatten;
s2 =
{(EigenVal# &[PrincipalIndices[3]]), 0}, {(EigenVal# &[PrincipalIndices[3]]), 0} +

. /. tSol {Sqrt[1 - k〚3〛 ^ 2], k〚3〛} /. ruleEigenPair;


t
r2 = Normx ., y  /. (l2 /. tSol) - 3 /. ruleEigenPair;
.
lTn = k.{T ⋱ }.k /. ruleEigenPair;
lTs = Sqrt{T ⋱ }.k.{T⋱ }.k - lTn ^ 2 /. ruleEigenPair;
RowShow[grArbelo,
Graphics[{Purple, PointSize[Large], Point[{lTn, lTs}], Point[{lTn, - lTs}]}],
Graphics[{Red,
{Thick, Dotted, Circle[1 /. ruleEigenPair, r1]}, {Thick, Dashed, Line[s1]}}],
Graphics[{Blue,
{Thick, Dotted, Circle[3 /. ruleEigenPair, r2]}, {Thick, Dashed, Line[s2]}}],
AxesLabel  {" TN = " <> ToString[lTn], " TS = " <> ToString[lTs]},
Axes  True, PlotRange  {mMrange,
{- Plus @@ Abs[mMrange] / 2, Plus @@ Abs[mMrange] / 2}}, ImageSize  {400, 300}],

ColumnShow , ImageSize  {150, 150},


Style"n = " <> ToString[N[k]], 12, Bold, Alignment  Center,
Style["Coordinate sferiche (1, ϕ, ϑ)\n", 12, Bold],
Row[{Control[{{ϕ, π / 4, "ϕ"}, - π, π}], Control[{{ϑ, π / 4, "ϑ"}, 0, π}]}, Spacer[20]],
ControlPlacement  Top, ContinuousAction  False
Arbelo.nb 7

Out[67]=

Coordinate sferiche (1, ϕ, ϑ)

ϕ ϑ

Cerchi di Mohr
TS = 3.6087 3. 0. 1.
{T} = 0. 2. 4.
4
1. 4. 1.

σ   σ  σ
TN = 0.84203
-2 2 4


-2 n = {0.5, 0.5, 0.707107}

-4

Cerchio di Mohr 2D
... simboli utilizzati per
- indici del riferimento principale
- tensioni e direzioni principali
In[68]:=  = 3;
PrincipalIndices[n_] := Part[{, , }(* RomanNumeral/@{1,2,3}*), Mod[n, 3, 1]];
EigenVal = σ;

EigenVec = e ;
EigenPair = EigenValPrincipalIndices[#] , EigenVecPrincipalIndices[#]  &;

... componenti nel riferimento usuale e1 , e2 , e3  dello stato di tensione nel generico punto

In[73]:= {T} ^= Array[T10 #1+#2 &, {, }](*/.{T21 T12 ,T31 T13 ,T32 T23 }*) ; MatrixForm[{T}]
Out[73]//MatrixForm=
T11 T12 T13
T21 T22 T23
T31 T32 T33

... componenti nel riferimento principale dello stato di tensione nel generico punto e della normale
generica
8 Arbelo.nb

In[74]:= {T⋱ } ^= DiagonalMatrixArrayEigenValPrincipalIndices[#] &, {};


MatrixForm{T ⋱ }

{n} ^= ArraynPrincipalIndices[#] &, {};

MatrixForm{n }
Out[74]//MatrixForm=
σ 0 0
0 σ 0
0 0 σ
Out[75]//MatrixForm=
n
n
n

... componente normale (TN ) e tangenziale (TS )


 
In[76]:= nSist = {n }.{T⋱ }.{n}  TN ,
 
{T⋱ }.{n}.{T⋱ }.{n}  T2S + T2N ,
 
{n}.{n}  1;
Column[nSist]
 
var = List @@ {n }.{n};
tmp = MapThreadRule,
var, ToExpressionMap"n ." <> # &, ToString /@ Array[PrincipalIndices, {}];
tmpInv = tmp /. (Rule[n_, m_]  Rule[m, n]);
Out[77]=

n2 σ + n2 σ + n2 σ  TN


n2 σ2 + n2 σ2 + n2 σ2  T2N + T2S
n2 + n2 + n2  1

... relazione, assegnate le tensioni principali, tra le componenti della normale e tensioni TN e TS
In[81]:= nSol = First[Solve[nSist /. tmp, var /. tmp]] /. tmpInv;
Column[nSol // FullSimplify]
Out[82]=
T2S +(TN -σ ) (TN -σ )
n2 
(σ -σ ) (σ -σ )
T2S +(TN -σ ) (TN -σ )
n2  -
(σ -σ ) (σ -σ )
T2S +(TN -σ ) (TN -σ )
n2 -
(σ -σ ) (-σ +σ )

... si assuma per la tensione lo stato piano (ad es. Ti3 = 0)


Arbelo.nb 9

In[83]:= {T} ^= Array[T10 #1+#2 &, {, }] /. {T21  T12 , T13  0, T31  0, T23  0, T32  0, T33  0} ;
MatrixForm[{T}]
Out[83]//MatrixForm=
T11 T12 0
T12 T22 0
0 0 0

T11 T12 T13 T11 T12 0


T21 T22 T23  T12 T22 0
T31 T32 T33 0 0 0
... e calcoliamone gli autovalori e gli autovettori
In[84]:= σRuleT = MapThreadRule, ArrayEigenValPrincipalIndices[4-#] &, {}, Eigenvalues[{T}]
eRuleT = MapThreadRule, ArrayEigenVecPrincipalIndices[4-#] &, {}, Eigenvectors[{T}]
Out[84]=
1
σ  0, σ  T11 + T22 - T211 + 4 T212 - 2 T11 T22 + T222 ,
2
1
σ  T11 + T22 + T211 + 4 T212 - 2 T11 T22 + T222 
2
Out[85]=

  - T11 + T22 + T211 + 4 T212 - 2 T11 T22 + T222


e  {0, 0, 1}, e   - , 1, 0,
2 T12

 - T11 + T22 - T211 + 4 T212 - 2 T11 T22 + T222


e  - , 1, 0
2 T12

... si vede che una tensione principale è nulla e che la direzione principale corrispondente coincide
con la direzione della colonna che contiene tutti zero (nel caso in esame la e3 ). Pertanto si ha che le
tensione normale TN e la tensione tangenziale TS soddisfano l’equazione
In[86]:= eqCircle =
FullSimplifyFullSimplifyn2 /. nSol /. σ  0  0, Assumptions  σ σ ≠ 0 /.
σRuleT // ExpandAll
Out[86]=

T212 - T11 T22 + T11 TN + T22 TN - T2N  T2S

che è, nel piano (σ := TN , τ := TS ) , descrive un cerchio di centro e raggio


1
In[87]:= = (T11 + T22 ), 0;
2
1
= (T11 - T22 )2 + 4 T12 2 ;
2
... infatti

In[89]:= eqCircleστ = ({σ, τ} - ).({σ, τ} - )  2  // FullSimplify // ExpandAll


Out[89]=

σ2 + τ2 - σ T11 + T11 T22  T212 + σ T22


10 Arbelo.nb

In[90]:= Subtract @@ (eqCircle /. {TN  σ, TS  τ}) + Subtract @@ eqCircleστ


Out[90]=

... un esempio numerico a caso


In[118]:=

 = 2;
{T } ^=
1 / 2 ((tmp = Table[2 RandomInteger[{- 4, 4}], {i, }, {j, }]) + Transpose[tmp]) // N;
MatrixForm{T  }
Out[120]//MatrixForm=
8. 1.
1. 4.

In[121]:=

ruleT = MapThreadRule, Flatten[{T}〚1 ;; 2, 1 ;; 2〛], Flatten{T  };


Row[ruleT, ","]
Out[122]=

T11  8., T12  1., T12  1., T22  4.

... autovalori (ordinati in senso decrescente σ > σ ) e corrispondenti autovettori


In[123]:=

{tmpσ, tmpe} = Eigensystem{T  } // Chop;


tmp = Sort[{tmpσ, tmpe} // Transpose, #1〚1〛 > #2〚1〛 &];
ruleEigenPair = Flatten[Array[MapThread[Rule, {EigenPair[#], tmp〚#〛}] &, {}]];
EigenPair[n_] := EigenPair[n] /. ruleEigenPair
In[127]:=

MatrixForm{T  }
MatrixForm[Array[EigenPair[#] &, {}]]
Out[127]//MatrixForm=
8. 1.
1. 4.
Out[128]//MatrixForm=
8.23607 {- 0.973249, - 0.229753}
3.76393 {0.229753, - 0.973249}
Arbelo.nb 11

Grafico
In[134]:=

 = {T11 , - T12 } /. ruleT;


ℬ = {T22 , T12 } /. ruleT;
 = {T22 , - T12 } /. ruleT;
offset = 2 {- 1, - 1 / 2};
grCircle = Graphics
{Green, Thick, Circle @@ {, },
PointSize[Medium], Point[], Style[Text["", , offset]]},
Gray, PointSize[Medium],
Pointtmp = EigenValPrincipalIndices[1] , 0, Style[Text["σ ", tmp, offset]],
Gray, PointSize[Medium],
Pointtmp = EigenValPrincipalIndices[2] , 0, Style[Text["σ ", tmp, offset]],
{Blue, PointSize[Medium], Point[], Style[Text["", , offset]]},
{Blue, PointSize[Medium], Point[ℬ], Style[Text["ℬ", ℬ, offset]]},
{Blue, Thin, Dashed, Line[{, ℬ}]},
{Magenta, PointSize[Large], Point[], Style[Text["", , offset]]},
{Gray, Thick, Dashed, Arrow[{,  - 2  EigenPair[1]〚2〛}]},
{Gray, Thick, Dashed, Arrow[{,  - 2  EigenPair[2]〚2〛}]},
Gray, StyleText"{T} = " MatrixForm{T  }, EigenValPrincipalIndices[1] ,  /.
ruleEigenPair /. ruleT, Axes  True, AxesLabel  {" σ", " τ"},
ImageSize  Medium, PlotLabel  "Cerchio di Mohr"
Out[138]=
Cerchio di Mohr
τ

8. 1.
{T} =
1. 4.
2


1

σ  σ
σ
4 5 6 7 8

 
-1

-2
12 Arbelo.nb

In[139]:=

Manipulate
ln = {Cos[ϑ], Sin[ϑ]} // N;
lt = {- Sin[ϑ], Cos[ϑ]} // N;
sn = {T }.ln.ln;
tn = {T }.ln.lt;
Column

Style"{n } = " <> ToString[ln // Chop], 10, Bold,
Row[{Style["σn = " <> ToString[sn // Chop], 10, Bold, Orange],
Style["\t τn = " <> ToString[tn // Chop], 10, Bold, Orange]}],
Show[grCircle, Graphics[{Orange, PointSize[Large],
Point[{sn, - tn}], Style[Text["{σn ,τn }", {sn, - tn}, offset]]}],
Graphics[{Orange, Dashed, Arrow[{, {sn, - tn}}]}]], Alignment  Center,
Style["Coordinate polari (1, ϑ)\n", 12, Bold],
Control[{{ϑ, 0, "ϑ"}, 0, π}], ControlPlacement  Top
Out[139]=

Coordinate polari (1, ϑ)


{n} = {0.615386, 0.788226}
σn = 6.48493 τn = -2.18285
Cerchio di Mohr
τ

8. 1.
{σn ,τn } {T} =
1. 4.
2


1

σ  σ
σ
4 5 6 7 8

 
-1

-2

Potrebbero piacerti anche