−Table of Contents
Yield Stress
The class YieldStress
manages the yield stress used in the plastic criterion, whether plastic (isotropic hardening), visco-plastic (Perzyna as additive, Cowper-Symonds as multiplicative or ZerilliArmstrong, JohnsonCook, … as flow stress models)
σyield=σyield(ˉεvp,˙ˉεvp,grainSize,...)
The laws implemented in Metafor are described below
IsotropicHardening
In order to simplify most of the test cases, the IsotropicHardening
classes (Isotropic hardening) derive from the YieldStress
class.
σyield=σisoHard(ˉεvp)
Consequently, isotropic hardening is directly referred in the material as a YieldStress
.
GsIsoHYieldStress
Yield Stress defined by an isotropic hardening:
σyield=σisoHard(ˉεvp)+σgrainSize(ˉεvp,˙ˉεvp,grainSize)
Parameters
Name | Metafor Code | Dependency |
---|---|---|
Number of the isotropic hardening law | IH_NUM | |
Number of the grain size evolution law | GS_NUM |
PerzynaYieldStress
Yield Stress defined by an isotropic hardening and a visco-plastic Perzyna yield stress:
σyield=σisoHard(ˉεvp)+K(˙ˉεvp)M(ˉεvp)N
Parameters
Name | Metafor Code | Dependency |
---|---|---|
Number of the isotropic hardening law | IH_NUM | |
K | PERZYNA_K | TM/TO |
M | PERZYNA_M | TM/TO |
N | PERZYNA_N | TM/TO |
GsPerzynaYieldStress
Yield Stress defined by an isotropic hardening, a visco-plastic Perzyna yield stress and a “grain size” stress:
σyield=σisoHard(ˉεvp)+K(˙ˉεvp)M(ˉεvp)N+σgrainSize(ˉεvp,˙ˉεvp,grainSize)
Parameters
Name | Metafor Code | Dependency |
---|---|---|
Number of the isotropic hardening law | IH_NUM | |
Number of the grain size evolution law | GS_NUM | |
K | PERZYNA_K | TM/TO |
M | PERZYNA_M | TM/TO |
N | PERZYNA_N | TM/TO |
JohnsonCookYieldStress
Johnson-Cook visco-plastic law:
σyield=(A+B(ˉεvp)n)(1+Cln(˙ˉεvp˙ε0)+C2(ln(˙ˉεvp˙ε0))2)(1−(T−TroomTmelt−Troom)m)
Parameters
Name | Metafor Code | Dependency |
---|---|---|
A | JC_A | TM/TO |
B | JC_B | TM/TO |
n | JC_N | TM/TO |
m | JC_M | TM/TO |
Room temperature Troom | JC_TROOM | TM/TO |
Melting temperature Tmelt | JC_TMELT | TM/TO |
C | JC_C | TM/TO |
C2 | JC_C2 | TM/TO |
˙ε0 | JC_EPSP0 | TM/TO |
JohnsonCookMecYieldStress
Isotherm version of the Johnson-Cook visco-plastic law :
σyield=(A+B(ˉεvp)n)(1+Cln(˙ˉεvp˙ε0)+C2(ln(˙ˉεvp˙ε0))2)
Parameters
Name | Metafor Code | Dependency |
---|---|---|
A | JC_A | TM/TO |
B | JC_B | TM/TO |
n | JC_N | TM/TO |
C | JC_C | TM/TO |
C2 | JC_C2 | TM/TO |
˙ε0 | JC_EPSP0 | TM/TO |
PowJohnsonCookYieldStress
Power version of the Johnson-Cook visco-plastic law (PP implementation):
σyield=(A+B(ˉεvp)n)(1+˙ˉεvp˙ε0)C(1−(T−TroomTmelt−Troom)m)
Parameters
Name | Metafor Code | Dependency |
---|---|---|
A | JC_A | TM/TO |
B | JC_B | TM/TO |
n | JC_N | TM/TO |
m | JC_M | TM/TO |
Room temperature Troom | JC_TROOM | TM/TO |
Melting temperature Tmelt | JC_TMELT | TM/TO |
C | JC_C | TM/TO |
˙ε0 | JC_EPSP0 | TM/TO |
ZerilliArmstrongYieldStress
Zerilli-Armstong visco-plastic law:
σyield=σ0+C5(ˉεvp)n1+C2(ˉεvp)n2exp(−C3T+C4Tln˙ˉεvp)
For FCC metals, C5=0. For BCC metals, n2=0.
Careful: this law is thermomechanical, and the temperature is the absolute one. To have proper results, finite elements must be thermomechanical, and so must be the integration scheme.
Parameters
Name | Metafor Code | Dependency |
---|---|---|
σ0 | ZA_SIGMA0 | TM/TO |
C5 | ZA_C5 | TM/TO |
n1 | ZA_N1 | TM/TO |
C2 | ZA_C2 | TM/TO |
n2 | ZA_N2 | TM/TO |
C3 | ZA_C3 | TM/TO |
C4 | ZA_C4 | TM/TO |
CowperSymondsYieldStress
Cowper-Symonds visco-plastic law.
σyield=σ0(1+(˙¯εvpD)1p)
where σ0 is the static yield stress, whose evolution is often given by a piecewise linear function.
Parameters
Name | Metafor Code | Dependency |
---|---|---|
Number of the hardening law | IH_NUM | |
D | CS_D | TM/TO |
p | CS_P | TM/TO |
ViscoKocksMeckingYieldStress
Description
Visco-plastic extension of the “Kocks-Mecking” isotropic hardening law.
σy=σ0y+σv[1−exp(−Θ0σvˉεvp)]siσy≤σtry
σy=σtry+ΘIV(ˉεvp−ˉεvptr)siσy>σtry
where σtry is a transition yield stress, computed to guarantee continuity between both phases:
σtry=σ0y+σv(Θ0−ΘIV)Θ0
and where ˉεvptr is the corresponding plastic strain:
ˉεvptr=σvΘ0ln(Θ0ΘIV)
The viscous component of the yield stress is hidden in the calculation of the saturation stress:
σv=σv0(˙ˉεvp˙ˉεvp0)(kTA)
k : Boltzman's constant = 1.381e−23J/K
T : Temperature K (CAREFUL in Kelvin : requires the definition of the temperature in the material)
A : Activation energy (material constant)
˙ˉεvp0 : reference plastic strain rate (= 1.e7)
Parameters
Name | Metafor Code | Dependency |
---|---|---|
σ0 | IH_SIGMA0 | TM/TO |
Θ0 | KM_THETA0 | TM/TO |
ΘIV | KM_THETA4 | TM/TO |
σv0 | KM_SIGV0 | - |
˙ˉεvp0 | KM_DEVPL0 | - |
k : Boltzman's constant | KM_BOLTZMANN | - |
A | KM_A | - |
ViscoKocksMecking2YieldStress
Description
Second visco-plastic extension of the “Kocks-Mecking” isotropic hardening law, to match the Ta6V better.
No fourth step
The basic equation is still: σy=σ0y+σv[1−exp(−Θ0σvˉεvp)]
Both plastic strain rate and temperature dependency are hidden in the calculation of the Voce stress σv. If this Voce stress is plotted as a function of the g parameter, defined as:
g=kTμb3ln(˙ˉεvp0˙ˉεvp)
where
b : is the norm of the Burgers vector
k : is the Boltzmann's constant
(for Ta6V, kb3 1.135, in “Mpa”)
T : Temperature K (CAREFUL in Kelvin : requires the definition of the temperature in the material)
μ : Elastic shear modulus of the material (requires a new definition of Young's modulus and Poisson ratio in the KM2 law!!!)
˙ˉεvp0: reference plastic strain rate (= 1.e7)
the following figure is obtained:
KocksMecking usually predicts a linear evolution (KM data). However, the Ta6V trial data are the colored dots. The evolution is more in broken lines, defined as follow:
G12 and G23 are defined as the transition values between the three areas:
σvμ=A1g+B1sig<G12σvμ=A2g+B2siG12<g<G23σvμ=A3g+B3siG23<g
Finally, the apparition of plasticity was observed to depend on strain rate and temperature (here, the temperature dependency is explicitly defined, but it could be done implicitly):
σ0=A+BT+(C+DT)ln(˙ˉεvp)
Parameters
Name | Metafor Code | Dependency |
---|---|---|
A | IH_SIGEL_A | - |
B | IH_SIGEL_B | - |
C | IH_SIGEL_C | - |
D | IH_SIGEL_D | - |
A1 | KM2_SIGVOCE_A1 | - |
B1 | KM2_SIGVOCE_B1 | - |
G12 | KM2_SIGVOCE_G12 | - |
A2 | KM2_SIGVOCE_A2 | - |
B2 | KM2_SIGVOCE_B2 | - |
G23 | KM2_SIGVOCE_G23 | - |
A3 | KM2_SIGVOCE_A3 | - |
B3 | KM2_SIGVOCE_B3 | - |
kb3 | KM2_BOLTZMANN_BURGER3 | - |
Young's Modulus | KM2_ELASTIC_MODULUS | - |
Poisson ratio | KM2_POISSON_RATIO | - |
Θ0 | KM_THETA0 | TM/TO |
˙ˉεvp0 | KM_DEVPL0 | - |
SellarsTegartYieldStress
Yield Stress used for hot rolling defined by :
- a viscous power term :
S0=√3KK(√3˙ˉεvp)M0
- a viscous asinh Term :
Ss=Asasinh((˙ˉεvpZs)Ms)
- for the Yield Stress computed by (using a Voce hardening term):
σyield=S0+(Ss−S0)(1−e−Cˉεvp)R
Parameters
Name | Metafor Code | Dependency |
---|---|---|
KK | SELLARSTEGART_KK | TM/TO |
M0 | SELLARSTEGART_M0 | TM/TO |
As | SELLARSTEGART_AS | TM/TO |
Zs | SELLARSTEGART_MS | TM/TO |
Ms | SELLARSTEGART_ZS | TM/TO |
C | SELLARSTEGART_R | TM/TO |
R | SELLARSTEGART_C | TM/TO |
PythonYieldStress
User defined Yield Stress by a pythonDirector : Python Director allows user to define their own Yield Stress law. Four functions has to be defined in the Python Class : a constructor (init), a destructor (del) that must never be called, and the computation functions : getYieldStress (returning YieldStress) and getYieldHardening (returning h). See the example below of a Perzyna law :
class MyYieldStress(PythonYieldStress): def __init__(self, _no, _svm0, _h, _K, _m): print("MyYieldStress: __init__") PythonYieldStress.__init__(self,_no) self.svm0 = _svm0 self.h = _h self.K = _K self.m = _m def __del__(self): print("MyIsoH : __del__") print("callToDestructor of MyYieldStress not allowed. Add MyIsoH.__disown__()") input('') exit(1) def getYieldStress(self, evpl, deltaEvpl, dTime, yieldGPState, pLaw): #print "MyYieldStress compute Yield Stress" if dTime > 0.0: dEvpl = deltaEvpl/dTime else: dEvpl = 0.0 sigH = self.svm0+evpl*self.h sigV = self.K*pow(dEvpl, self.m) #yieldGPState.setVpStress(sigV) return sigH+sigV def getYieldHardening(self, epl, deltaEvpl, dTime, yieldGPState, pLaw) : if dTime > 0.0: dEvpl = deltaEvpl/dTime h = self.h + (self.K*pow(dEvpl, self.m-1))/dTime else: dEvpl = 0.0 h = self.h return h