**process neu_sehitoglu
#
Description#
This post-processor implements the thermo-mechanical fatigue model proposed by Neu and Sehitoglu [U10]. This model is a bit of a departure from the rest of the fatigue analysis post-processing in that it does not re-use components for LCF, oxidation and creep damages, but rather implements the specific forms defined in the referenced paper.
The damage is a linear summation of three components as per standard practice in thermo-mechanical fatigue studies.
And the number of cycles to failure can be found from the cumulated damage over a number of studied cycles, \(N_c\):
The interesting part of the Neu and Sehitoglu is their assignment of a damage phase factor, which accounts for the tendency for creep damage in in-phase loading (such as found in rotating machinery or pressure vessels at high temperature), and oxidation cracking in out-of-phase loading (such as around notches in constrained geometries).
So the coefficients xi_ox
and xi_cr
control the width of
oxidation and creep effects about pure out-of-phase and pure in-phase
loading respectively.
Fatigue part
The fatigue part can be determined in several ways. In general we look at the strain range as being the maximum shear strain range in from the cycle calculated as follows:
with the \(\Delta e_1\) and \(\Delta e_3\) terms being the 1st
and 3rd ordered eigenvalue of the strain increment from across the
cycle. Note that the default method does not take the critical plane of
all loading points in the cycle, but rather just the points of the major
temperature cycle. If the *use_loading
or *use_unloading
option is given, we use only one term above instead of the average.
Normally for a stabilized cycle the loading and unloading parts should
be symmetric.
In the above strain range calculation, we also allow for either the
total mechanical strain to be used (model neu_sehitoglu
) or the
plastic strain range (model neu_sehitoglu_evi
), and currently
there is no HCF (stress based) part taken into account.
Lifetime is predicted via:
where we have the coefficients eps_f
and c
. If temperature
dependent coefficients are given for the fatigue part, the values
calculated at the cycle average temperature are used.
Oxidation part
The oxidation damage is calculated via the following equation:
Which uses a term for the critical oxide depth:
And an assumed parabolic oxidation rate:
For the oxidation part the coefficients to be entered are D_0
,
Q
, B
, beta
, delta_0
, a
, h_cr
. Note
that increasing D_0
or B
increases the damage effect, bigger
Q
will emphasize an abrupt change in high temperature degrading
(but require a change in B
to compensate), while decreasing either
delta_0
or h_cr
will increase the oxide damage. These later
parameters should be calibrated from primary metallurgical parameters
from specialized oxidation tests. If the model is being used empirically
then there is quite a great deal of redundancy in these parameters and
the user should use caution.
Creep part
The creep damage equation is:
with \(J(\ten \sigma)\) being the von Mises equivalent stress. The creep damage will occur only in tensile loading under uniaxial conditions if \(\alpha_1 = 1/3\) and \(\alpha_2 = 1\) (these are the defaults).
For the creep part the coefficients to be entered are alpha1
,
alpha2
, A
, K
, m
, dH
which should be
obvious names from the above equation.
Output#
A large output set is generated by this processor, but with only one solution map for the whole history analyzed. The following summarizes the output variables:
the number of cycles detected for validation. There may be zones where the number is incorrect in totally unloaded portions of a model. the life prediction based on the history so far, and log base 10 of that lifetime for flatter contour plots. the “damage” so far in the loading history, with 0 being undamaged, and 1 full failure. D is total, Dox oxidation part, Dcr the creep part. extrapolations of the lifetime to account for the trend in evolving strain ranges. the number of cycles forward in the extrapolation. average value of the plastic strain range (or effective range used for LCF calculations). “phase factors” for the oxidation and creep effects as defined by sehitoglu. zero means that effect is not considered because of the type of loading.
Syntax#
Basic options for this post are:
**process neu_sehitoglu
[ *extrapolation_cycles
n1 n2 n3 ]
[ *extrapolation_sequence
n1 n2 n3 ]
[ *max_cycles
maxc ]
[ *model_coef
]
\(~\,\) ...
[ *R
R-value ]
[ *skip_first
skip ]
[ *small_strain_rate
sm-rate ]
[ *use_loading
]
[ *use_unloading
]
*extrapolation_cycles
gives absolute cycle numbers which will be used to extrapolate the trend in fatigue life. This is used when cycles are not yet stabilized.
*extrapolation_sequence
gives a series of cycles ending with the last detected cycle which will be used to extrapolate the trend in fatigue life. This is used when cycles are not yet stabilized.
*max_cycles
limits output cycle number as essentially infinite life. This is convenient to limit the ranges for contour plotting.
*R
sets the gas constant in case of different units. The default value is 8.3144e-3 KJ/(mol K).
skip_first
causes the first skip cycles to be left from consideration in order to limit damage prediction from large initial transient cycles.
*small_strain_rate
gives a small strain rate which will be used in several locations to limit divide by zero conditions, including the strain rate effect and prediction of the constraint average.
*use_loading
indicates that only the loading portion of the strain range will be used for fatigue. This would normally be detected as the heat-up side of a TMF cycle.
*use_unloading
indicates that only the unloading portion of the strain range will be used for fatigue.
Additional controls are allowed for the part. Currently these are:
\(~\,\) [ *width
wid ]
\(~\,\) [ *major_tensor
tens-name ]
\(~\,\) [ *range_tensor
tens-name ]
*width
gives a size control for detecting cycles. If too few cycles are detected the number is probably too large; too many cycles detected and the size is probably too small (default \(10^{-4}\)). Units will be that of the major tensor.
*major_tensor
select the name of the variable to be used for cycle detection (default
sig
).*range_tensor
select the name of the variable to be used for strain range calculations (default
eto
).
For the TMF cycle tool (default) the following additional commands are
available (however *major_tensor
and range_tensor
are
disallowed).
\(~\,\) [ *total_strain_for_range
]
\(~\,\) [ *mechanical_strain_for_range
]
\(~\,\) [ *temperature_unit celcius|fahrenheit|kevin
]
*total_strain_for_range
detect the cycles based on the total strain. Note for fully constrained test cases this will always be zero so the mechanical range should be used. Conversely for basically unconstrained conditions using the total strain will be a better choice.
*temperature_unit
use the mechanical strain for the range calculation.
Note
If the coefficients D_0, Q, B, beta
are not entered the oxidation
part will be skipped without mention. Likewise if
alpha1, alpha2, A, K
are not entered the creep damage will be
skipped. Partially entering these coefficients will cause an error
message.
Example#
The following example is from Post_test/INP/sehitoglu1.inp
***local_post_processing
**file integ
**elset ALL_ELEMENT
**output_number 1-99999999
**process neu_sehitoglu_evi
*total_strain_for_range
*model_coef
eps_f 0.20
c -0.64
b 1.0
sig0_E 0.0
xi_ox 1.0
xi_cr 0.20
a 0.0
D_0 2000.
Q 200.
B 7.00e-03
beta 1.5
delta_0 2.00e-07
h_cr 500.
alpha1 0.33
alpha2 1.0
A 1.00e+08
K temperature
1.00e+06 0.
1.00e+06 450.
20.0 600.
20.0 1200.
m 2.0
dH 200.