# ArmstrongFrederick

Armstrong-Frederick Steel Model

## References

1. [10.1016/S0749-6419(01)00049-3](https://doi.org/10.1016/S0749-6419\(01\)00049-3)
2. [10.1115/1.3264257](https://doi.org/10.1115/1.3264257)
3. [10.1179/096034007X207589](https://doi.org/10.1179/096034007X207589)

## Theory

Implementation can be found in a separate [document](https://github.com/TLCFEM/suanPan-manual/blob/dev/docs/Library/Material/Material3D/vonMises/ArmstrongFrederick.pdf).

A von Mises type yield function is used. The associated plasticity is assumed. Both isotropic and kinematic hardening rules are employed.

Although the plastic flow is associative, the hardening rules are not. As the result, the consistent tangent modulus is not symmetric.

### Isotropic Hardening

An exponential function is added to the linear hardening law.

$$
k=\sigma\_y+k\_s(1-e^{-mp})+k\_lp,
$$

where $$\sigma\_y$$ is the initial elastic limit (yielding stress), $$k\_s$$ is the saturation stress, $$k\_l$$ is the linear hardening modulus, $$m$$ is a constant that controls the speed of hardening, $$\mathrm{d}p=\sqrt{\dfrac{2}{3}\mathrm{d}\varepsilon^p:\mathrm{d}\varepsilon^p}$$ is the rate of accumulated plastic strain $$p$$.

### Kinematic Hardening

The Armstrong-Frederick type rule is used. Multiple back stresses are defined,

$$
\beta=\sum\beta^i
$$

in which

$$
\mathrm{d}\beta^i=\sqrt{\dfrac{2}{3}}a^i\~\mathrm{d}\varepsilon^p-b^i\beta\~\mathrm{d}p,
$$

where $$a^i$$ and $$b^i$$ are material constants. Note here a slightly different definition is adopted as in the original literature $$\dfrac{2}{3}$$ is used instead of $$\sqrt{\dfrac{2}{3}}$$. This is purely for a slightly more tidy derivation and does not affect anything.

## Syntax

The following applies to `v3.6` and later. Check the older syntax in the older version of the documentation.

```
material ArmstrongFrederick (1) (2) (3) (4) (5) (6) (7) [(8) (9)...] [10]
# (1) int, unique material tag
# (2) double, elastic modulus
# (3) double, poissons ratio
# (4) double, yield stress
# (5) double, linear hardening modulus
# (6) double, saturation stress
# (7) double, m, saturation rate
# (8) double, a, kinematic hardening parameter
# (9) double, b, kinematic hardening parameter
# [10] double, density, default: 0.0
```

## History Layout

| location                | parameter                                                         |
| ----------------------- | ----------------------------------------------------------------- |
| `initial_history(0)`    | accumulated plastic strain                                        |
| `initial_history(1-6)`  | back stress for the first pair of $$a^1$$ and $$b^1$$             |
| `initial_history(7-12)` | back stress for the second pair of $$a^2$$ and $$b^2$$ if defined |
| ...                     | more back stresses                                                |

## Example

Here a few examples are shown.

### Isotropic Hardening Only

There is no difference between the classic J2 plasticity model and this AF steel model if only isotropic hardening is defined.

```
material ArmstrongFrederick 1 2E2 .2 .1 1. .05 1000.
```

![Example 1](/files/-MQ5s-NOIT-f5ubjdSNX)

### Kinematic Hardening Only

If $$a\neq0$$ and $$b=0$$, there is no difference between the classic J2 plasticity model and this AF steel model. A linear kinematic hardening rule is implied. Normally at least one set of $$a^1$$ and $$b^1$$ is defined.

```
material ArmstrongFrederick 1 2E2 .2 .1 0. 0. 0. 50. 500.
```

![Example 2](/files/-MQ5s-NRxWZIic1YG_gm)

By definition, if one set of $$a^1$$ and $$b^1$$ is defined, then the maximum stress can be computed as

$$
\sigma\_{max}=\sigma\_y+\sqrt{\dfrac{3}{2}}\dfrac{a^1}{b^1}.
$$

In this case, it is

$$
\sigma\_{max}=0.1\~\mathrm{GPa}+\sqrt{\dfrac{3}{2}}\dfrac{50}{500}~~\mathrm{GPa}=222.47~~\mathrm{MPa}.
$$

The cyclic response is shown as follows.

![Example 3](/files/-MQ5s-NT0Fzqm0iQap3K)

Of course, multiple sets of $$a^i$$ and $$b^i$$ can be defined.

```
material ArmstrongFrederick 1 2E2 .2 .1 0. 0. 0. 50. 500. 100. 600.
```

Accordingly, the maximum stress is

$$
\sigma\_{max}=\sigma\_y+\sqrt{\dfrac{3}{2}}\sum\dfrac{a^i}{b^i}=0.1+\sqrt{\dfrac{3}{2}}\left(
\dfrac{50}{500}+\dfrac{100}{600}\right)=426.60\~\mathrm{MPa}.
$$

![Example 3](/files/-MQ5s-NVeQcomWG2Os2q)

The cyclic response is shown as follows.

![Example 5](/files/-MQ5s-NWd88HrcXpNGNY)

### Zero Elastic Range

It is possible to define a zero plastic range response, although the initial stiffness cannot be explicitly assigned.

```
material ArmstrongFrederick 1 2E2 .2 0. 0. 0. 0. 40.82482305 500.
```

The corresponding maximum stress is $$100\~\mathrm{MPa}$$.

![Example 6](/files/-MQ5s-NY4J3o6Bwglotx)

With some linear isotropic hardening,

```
material ArmstrongFrederick 1 2E2 .2 0. .1 0. 0. 40.82482305 500.
```

![Example 7](/files/-MQ5s-NZrMLY7KOACAgE)

## Iso-error Map

The following example iso-error maps are obtained via the following script.

```py
from plugins import ErrorMap
# note: the dependency `ErrorMap` can be found in the following link
# https://github.com/TLCFEM/suanPan-manual/blob/dev/plugins/scripts/ErrorMap.py

young_modulus = 2e2
yield_stress = 0.2
hardening_ratio = 0.01

with ErrorMap(
    f"material ArmstrongFrederick 1 {young_modulus} .2 0. {hardening_ratio * young_modulus} 0. 0. 40.82482305 500.",
    ref_strain=yield_stress / young_modulus,
    ref_stress=yield_stress,
    contour_samples=30,
) as error_map:
    error_map.contour("af.uniaxial", center=(-5, 0), size=3, type={"rel", "abs"})
    error_map.contour("af.biaxial", center=(-5, -5), size=3, type={"rel", "abs"})
```

![absolute error uniaxial](/files/phMgTd5g73b1tiqB1dzF) ![absolute error biaxial](/files/ulnbXqE67VXsVhIuOlbk) ![relative error uniaxial](/files/DjofET51Q6ECsaR1J4Zj) ![relative error biaxial](/files/Zcgki4GQPbZPuGk6AkVQ)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tlcfem.gitbook.io/suanpan-manual/material/material3d/vonmises/armstrongfrederick.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
