Skip to content

Bilinear1D

Uniaxial Bilinear Material Using J2 Plasticity

The Bilinear1D material implements a simple plasticity model that employs both linear isotropic and kinematic hardening rules. Further details can be found Section 1.4.4 of Computational Inelasticity . Alternatively, refer to the corresponding section in Constitutive Modelling Cookbook for implementation details.

It is suitable for simple hysteresis modelling. For more complex behaviour, one shall use other models.

Syntax

Text Only
1
2
3
4
5
6
7
material Bilinear1D (1) (2) (3) [4] [5] [6]
# (1) int, unique material tag
# (2) double, elastic modulus
# (3) double, initial yield stress
# [4] double, hardening ratio, default: 0.0
# [5] double, beta, default: 1.0
# [6] double, density, default: 0.0

History Variable Layout

location value
initialize_history(0) back_stress
initialize_history(1) equivalent_plastic_strain

Remarks

  1. The parameter beta is employed for mixed hardening rule: zero \(0.0\) for kinematic hardening and unity \(1.0\) for isotropic hardening, anything falls in the range indicates a mixed hardening response.
  2. Negative hardening ratio (softening) is supported. However, the yield surface will always be non-negative.

Usage

Isotropic Hardening

Text Only
1
2
3
material Bilinear1D 1 1000.0 10.0 0.2 1.0
materialTest1D 1 0.001 20 40 60 80 100 100
exit

Example 1

Isotropic Softening

Text Only
1
2
3
material Bilinear1D 1 1000.0 10.0 -0.02 1.0
materialTest1D 1 0.001 20 40 60 80 100 100
exit

Example 2

Kinematic Hardening

Text Only
1
2
3
material Bilinear1D 1 1000.0 10.0 0.1 0.0
materialTest1D 1 0.001 20 40 60 80 100 100
exit

Example 3

Combined Hardening

Text Only
1
2
3
material Bilinear1D 1 1000.0 10.0 0.1 0.5
materialTest1D 1 0.001 20 40 60 80 100 100
exit

Example 4

Accuracy

There is no local iteration required. The result is accurate.

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

young_modulus = 2e5
yield_stress = 4e2
hardening_ratio = 0.05

with ErrorLine(
    f"material Bilinear1D 1 {young_modulus} {yield_stress} {hardening_ratio} .5",
    ref_strain=yield_stress / young_modulus,
    ref_stress=yield_stress,
) as error_map:
    error_map.contour("bilinear1d", center=-5, size=10, type={"abs"})

accuracy analysis