Contribution2.mws
Local and Residual Stresses and Strains for Plate with Circular Hole
by: Jorge Alberto Rodrguez Durn, D.Sc.
Pontifical Catholic University of Rio de Janeiro, PUCRio
email: duran@mec.pucrio.br
2002 Jorge Alberto Rodrguez Durn
NOTE: This worksheet demonstrates the use of Maple for calculating local and residual stresses and strains distributions from a hole in plate under monotonic nominal loading and unloading using Neuber rule and RambergOsgood type stressstrain relation.
Introduction:
By obvious design considerations there are many cases in mechanical engineering where stress raisers are unavoidable. Independently the nominal stresses are very low, material on stress raisers could undergo plastic deformation. Then, local stresses (
s
) and strains (
e
) can not be then calculated by elastic stress concentration factor (kt). One of the most popular approximate methods for calculating local stresses and strains is using Neuber rule
e.s
= (kt.Sn)^2 / E, where (
Sn
) are the nominal stresses and (E) is the modulus of elasticity. Neuber rule requires an equation to describe the material stressstrain relation and RambergOsgood equation is often used with this aim. A graphical or numerical solution is needed to find the local stresses and strains which satisfies both equations.
The former process is for monotonic loading but can be extended to cyclic case using stress and strain amplitudes in Neuber rule and cyclic curve (which can also be modeled using a RambergOsgood type relation). Local amplitude strains calculated by this way are very important in
e
N fatigue design approach. In the present work, local and residual stresses and strains distributions in a monotonic plate containing a hole (see Figure 1), loaded until different values of Sn and then unloaded, are calculated using Maple capabilities. Stress concentrations in the plate of Figure 1, as found by mathematical theory of elasticity, are well known
(Inglis 1913). Equivalent Von Mises stresses were calculated from this solution and used with Neuber rule and RambergOsgood type stress strain curve to obtain the local and residual stresses and strains distributions.
Parameters of procedure "local__residual"
are n, Sini, Sfin, Sp, a, b, A, material and type: n is the number of points to solve the Neuber system, Sini and Sfin are the initial and final value of the nominal stress Sn (in MPa), respectively, Sp is the spacement between S values, a and b are the initial and final values of c=r/R (Figure 1), respectively, A is the angle theta where solutions will be obtained, material is the trademark of material which properties are considered and type is the type of graphic to plot (stress or strain).
Figure 1  Stress in plate containing hole
Program
Warning, the name changecoords has been redefined
> 
local_residual:=proc(n,Sini,Sfin,Sp,a,b,A,material,type)

> 
local E,nm,Hm,nc,Hc,Sy,mat,st,sr,t,s1,s2,vonmisesT,m,c_list,sn_list,vm_c,kt_S,ROm,ROc,j,J,M,TU,H,sres,Nm,Jm,max_s,smax,emax,co_m_s,co_m_e,Nc,Jr,deltas,eres,co_r_s,co_r_e,G1,G2,GT,Mater,Ma,typ,G3,G4,D:

> 
#1020 Steel (mmonotonic, ccyclic)

> 
E:=2.05*10^5:nm:=0.18:Hm:=804:nc:=0.18:Hc:=941:Sy:=285:

> 
mat:=convert(material,string):

> 
typ:=convert(type,string):

> 
st:=sn/2*(1+(1/c)^2)sn/2*(1+3*(1/c)^4)*cos(2*theta):

> 
sr:=sn/2*(1(1/c)^2)+sn/2*(14*(1/c)^2+3*(1/c)^4)*cos(2*theta):

> 
t:=sn/2*(1+2*(1/c)^23*(1/c)^4)*sin(2*theta):

> 
s1:=(sr+st)/2+.5*((stsr)^2+4*(t)^2)^.5:

> 
s2:=(sr+st)/2.5*((stsr)^2+4*(t)^2)^.5:

> 
vonmisesT:=eval(1/sqrt(2)*sqrt((s1s2)^2+s2^2+s1^2),theta=A); #Equivalent stress as function of sn and c in theta=A

> 
c_list:=[seq(m*x+1,x=0..n)]:

> 
sn_list:=[seq(Sp*x+Sini,x=0..ceil((SfinSini)/Sp))]:

> 
vm_c:=[seq(eval(vonmisesT,c=c_list[i]),i=1..nops(c_list))]: #List of equivalent stresses at differents distances (c_list)

> 
kt_S:=[evalf(seq(eval(vm_c,sn=sn_list[i]),i=1..nops(sn_list)),5)]; #Nested list of equivalent elastic stresses at differents distances (c_list) for differents nominal stresses (sn_list)

> 
ROm:=[seq(sigmai/E+(sigmai/Hm)^(1/nm),i=1..n)]:

> 
ROc:=[seq(Dsi/E+2*(Dsi/(2*Hc))^(1/nc),i=1..n)]:

> 
for j from 1 to nops(sn_list) do #First Cycle

> 
J:=textplot([(b0.5),0.6,"Sn = "],align=LEFT):

> 
M:=textplot([(b0.4),0.6,"MPa"],align=RIGHT):

> 
TU:=convert(sn_list[j],string):

> 
H[j]:=textplot([(b0.5),0.6,TU],align=RIGHT):

> 
Ma:=textplot([(b0.4),0.2,"Material = "],align=LEFT):

> 
Mater:=textplot([(b0.4),0.2,mat],align=RIGHT):

> 
if kt_S[j,1] < Sy then #Condition 1

> 
max_s[j]:=[seq([kt_S[j,i]/E,kt_S[j,i]],i=1..n)]:deltas[j]:=[seq([0,0],i=1..n)]:

> 
Nm[j]:=[seq((kt_S[j,i])^2/(E*sigmai),i=1..n)]: #Neuber Monotonic

> 
Jm[j]:=[seq(fsolve({ROm[i]=epsiloni,Nm[j][i]=epsiloni},{epsiloni,sigmai}),i=1..n)]: #Stress and Strain distribution (Maximum values) from the hole border

> 
max_s[j]:=[seq(eval([epsiloni,sigmai],Jm[j][i]),i=1..n)]: #Extracting values from solutions

> 
Nc[j]:=[seq((kt_S[j,i])^2/(E*Dsi),i=1..n)]: #Neuber Cyclic. Note that value of kt*DS is the same as kt*S (loading and unloading), and in both cases stresses (S and DS) are equivalent von mises stresses

> 
Jr[j]:=[seq(fsolve({ROc[i]=Dei,Nc[j][i]=Dei},{Dei,Dsi}),i=1..n)]: #Ranges of Stress and Strain distribution from hole border after unloading

> 
deltas[j]:=[seq(eval([Dei,Dsi],Jr[j][i]),i=1..n)]: #Extracting values from solutions

> 
fi: #end of Condition 1

> 
smax[j]:=[seq(max_s[j][i][2],i=1..n)];emax[j]:=[seq(max_s[j][i][1],i=1..n)]:

> 
co_m_s[j]:=[seq([c_list[i],smax[j][i]/Sy],i=1..n)]: #Couples of values of smax/Sy and c

> 
co_m_e[j]:=[seq([c_list[i],E*emax[j][i]/Sy],i=1..n)]: #Couples of values of E.emax/Sy and c

> 
sres[j]:=[seq(smax[j][i]deltas[j][i][2],i=1..n)];eres[j]:=[seq(emax[j][i]deltas[j][i][1],i=1..n)]:

> 
co_r_s[j]:=[seq([c_list[i],sres[j][i]/Sy],i=1..n)]: #Couples of values of residual stresses/Sy and c

> 
co_r_e[j]:=[seq([c_list[i],E*eres[j][i]/Sy],i=1..n)]: #Couples of values of residual strains/yielding strain and c

> 
G1:=plot(co_m_s[j],color=red,thickness=2,axes=boxed,labels=["r / R","Local Stress / Sy"],labeldirections=[horizontal,vertical],title="Normalized Stress distribution from the hole border \n Red = Maximum Stresses, Blue = Residual Stresses");

> 
G2:=plot(co_r_s[j],color=blue,thickness=2,axes=boxed);

> 
G3:=plot(co_m_e[j],color=red,thickness=2,axes=boxed,labels=["r / R","Local Strain.E / Sy"],labeldirections=[horizontal,vertical],title="Normalized Strain distribution from the hole border \n Red = Maximum Strains, Blue = Residual Strains");

> 
G4:=plot(co_r_e[j],color=blue,thickness=2,axes=boxed);

> 
od: #End of First Cycle

> 
for j from 1 to nops(sn_list) do

> 
D[j]:=display([GT[j],H[j],J,M,Ma,Mater]):

> 
display([seq(D[j],j=1..nops(sn_list))],insequence=true);

Examples of Application
The following are some examples of application of procedure local_residual. It is necessary to type the material properties directly in the body of procedure, although a routine for reading this data from a file could be introduced by users, since data file exists in some directory of computer. It is worth mentioning that procedure local_residual should be used only for ductile materials because the equivalent von Mises stress is a failure criteria indicated only for this type of materials.
The examples are for a 1020 steel which properties (tensile yield strength
Sy
, Young's modulus
E
, monotonic and cyclic strength coefficient
Hm
and
Hc
respectively, monotonic and cyclic strain hardening exponent
nm
and
nc
, respectively) were experimentally determined at PUCRio facilities.
Because the equivalent von Mises stress used to represent the stress state different of uniaxial is always a tensile stress, the stress distribution in theta = 0 radians is positive, as can be seen in the following examples. In the same way, as the product
kt.Sn
is below the yield strength of material in that angle, no residual stresses will be present.
> 
local_residual(100,50,200,10,1,2,0,Steel_1020,stress);

> 
local_residual(100,50,200,10,1,2,0,Steel_1020,strain);

The following two graphics show the stress and strain distribution (local maximum and residuals) in theta = Pi/2 radians. Note as the local stress distribution starts to diminish from values of kt.Sn > Sy, while strain distribution is always rising. This is the waited behavior according to Neuber rule. Residual stress and strain only appear, of course, when kt.Sn > Sy which means that material undergo plastic deformation.
> 
local_residual(10,50,200,10,1,2,Pi/2,Steel_1020,stress);

> 
local_residual(100,50,200,10,1,2,Pi/2,Steel_1020,strain);

Disclaimer:
While every effort has been made to validate the solutions in this worksheet, Waterloo Maple Inc. and the contributors are not responsible for any errors contained and are not liable for any damages resulting from the use of this material.