Tips for fatigue analysis: Remove preload stresses and get averaged outer surface stresses

Overview

This post is not intended for giving the general procedure for fatigue analysis; instead, it attempts to provide some supplement to regular fatigue analysis with a few practical tips. The content is highlighted below:

1) Remove the preload stresses from operating stresses while keeping their effects on geometry and stiffness - for linear cases.

2) Remove the preload stresses from operating stresses while keeping their effects on geometry and stiffness - for non-linear cases.

3)  A tool to extract and calculate averaged nodal stresses / strains and invariants from elemental output for the outer surface of the objects.

Background

There are cases in the industry applications in which only the stress change due to load change is desired for design evaluation, instead of the total stresses. Recently, I have just encountered such an example with an experienced OEM user. He needs only to get the stress changes caused by the operating load as the cyclic load for running the fatigue analysis with a third-party code, while the preload effect on the geometry and stiffness still needs to be considered. The model is subjected to a large preload, which generates quite high stresses; however, the operating load is a relatively small addition to that. Here, a method to separate out the high constant pre-load is needed.  Considering the generality existing in this simple case that can be helpful to other users, I’d like to post the methods that we suggested to the user that meet his need.

Application cases

There are at least 3 ways to handle the case for different scenarios, as described below:

1) linear case

If the nonlinearity during the operating process is negligible, this can be readily achieved by doing a perturbation static step, following the preload step. Obviously, this only applies to small operating loading case in which nonlinearity is not significant. Since the result for a perturbation step is the changes relative to the latest general step, i.e. the preload step for the current case, this way the response from the high constant load is automatically subtracted. 

*STEP, NLGEOM=Yes      

 - Pre-load

*STATIC

*END STEP

**

*STEP, Perturbation       

- Operating load

*STATIC

*END STEP

2) Nonlinear case

1)    If the nonlinearity due to the small operating cyclic load is also essential and the operating load step also needs to be a general step, then one can generate the additional stress field by subtracting the preload stresses from the total current stresses in Abaqus/Viewer:

Tools-> Create Field Output->from fields....   

And then save the generated additional stress field to a file (.rpt)  

Report -> Field Output … 

This requires that the 3-rd party code be able to read a text file like Abqus.rpt or a similar one with modified format.

3) Save the nonlinear case stress change into ODB file

Alternatively, if it is desired to save the additional stress field due to operating load suggested in 2) to an odb file, a python script is available for the task and attached here for handy test use. Refer to the section 9.10.4 Computations with FieldOutput objects in the Abaqus Scripting User’s Manual for details. It gives an example script that illustrates how you can operate on FieldOutput objects and save the computed field to the output database. Specially, it can do the following:

  • Retrieves two specified fields from the output database.
  • Computes a new field by subtracting the fields that were retrieved.

 

A tool to calculate the averaged nodal tensors and Invariants

In addition,  most codes for fatigue analysis need only (and can handle) the superficial nodal stresses / strains. However, these unique nodal stress/strain values are not directly available from standard Abaqus output to the output database. Reading the whole models from their elemental integration output to get these needed quantities is usually slow and not necessary. Especially, when dealing with very large models, the process may become unendurably lengthy. For this reason, a C++ ODB API application tool, that can be used to extract and calculate the averaged nodal values from the elemental output was developed and attached here. USers need to define a NSET to include the nodes in the outer surface if only the surface nodal results are desired. More details can be found from SIMULIA Knowledge Base at  https://www.3ds.com/support/knowledge-base/ by searching‘C++ ODB API application to reduce output database size’.

Note that Abaqus/Viewer cannot display unique tensors at nodes - the averaging feature is intended for third party programs.  

Notes for the tools included

The Python script is an example only; the user assumes the responsibility for verifying its correctness.

Also, compiling of the C++ ODB API application tool needs C++ compiler compatible for the corresponding Abaqus version and platform used.