suanPan-manual
  • Introduction
  • Basic
    • Obtain Application
    • Configure Application
    • Perform Analysis
    • Model Syntax
    • Model Structure
    • Tweak Performance
    • Compile Application
    • Build Documentation
    • Architecture Design
    • On Clusters
  • Example
    • Developer
      • element template
      • material template
    • Solid
      • wave propagation
    • Geotechnical
      • triaxial compression of sand
      • slope analysis
    • Structural
      • Statics
        • bending of a cantilever beam
        • bifurcation of a cantilever beam
        • double-edge notched specimen
        • lees frame
        • notched beam under cyclic loading
        • rc section analysis
        • truss roof
        • uniform tension of a rubber specimen
        • thin-walled section analysis for frame structures
        • calibration of subloading surface model
      • Dynamics
        • bouncing of a ball
        • mass-spring-dashpot system
        • dynamic analysis of a portal frame
        • elemental damping
        • particle collision
        • response history analysis of an elastic coupled wall
        • multi-support excitation
        • triple pendulum
        • computing response spectrum
        • integrate with python
        • process ground motion
      • Hybrid
        • vibration of a displaced beam
      • Buckling
        • buckling analysis of a cantilever beam
      • Contact
        • contact between beam and block
        • contact in 3d space
      • Optimization
        • evolutionary structural optimization
      • Isogeometric Analysis
        • linear analysis of a single element
    • Miscellaneous
      • batch execution for automation
  • Command Collection
    • Define
      • amplitude
      • bc
      • domain
      • element
      • expression
      • file
      • generate
      • group
      • import
      • initial
      • load
      • material
      • modifier
      • node
      • recorder
      • section
    • Configure
      • analyze
      • converger
      • criterion
      • integrator
      • precheck
      • step
    • Process
      • benchmark
      • clear
      • command
      • enable
      • exit
      • materialtest
      • materialtestbyload
      • sectiontest
      • peek
      • plot
      • protect
      • pwd
      • reset
      • save
      • set
      • upsampling
      • sdof_response
      • response_spectrum
  • Amplitude
    • Amplitude
    • Special
      • NZStrongMotion
    • Universal
      • Combine
      • Constant
      • Decay
      • Linear
      • Modulated
      • Tabular
      • TabularSpline
      • Trig
  • Constraint
    • MPC
    • ParticleCollision
    • RigidWall
    • RestitutionWall
    • FixedLength
    • MaxForce
    • NodeLine
    • NodeFacet
    • Embed2D
    • Embed3D
    • LJPotential2D
    • MaximumGap2D
    • MinimumGap2D
    • MaximumGap3D
    • MinimumGap3D
  • Converger
    • Converger
    • Absolute
      • AbsDisp
      • AbsError
      • AbsIncreDisp
      • AbsIncreAcc
      • AbsIncreEnergy
      • AbsResidual
    • Other
      • FixedNumber
      • Logic
    • Relative
      • RelDisp
      • RelError
      • RelIncreDisp
      • RelIncreAcc
      • RelIncreEnergy
      • RelResidual
  • Criterion
    • Criterion
    • MaxDisplacement
    • MaxHistory
    • MaxResistance
    • MinDisplacement
    • MinResistance
    • StrainEnergyEvolution
  • Element
    • Beam
      • B21
      • B21E
      • B21H
      • B31
      • B31OS
      • EB21
      • EB31OS
      • F21
      • F21H
      • F31
      • NMB21
      • NMB21E
      • NMB31
      • MVLEM
      • Orientation
    • Cube
      • C3D20
      • C3D4
      • C3D8
      • C3D8I
      • CIN3D8
      • DC3D4
      • DC3D8
    • Membrane
      • Couple Stress
      • Phase Field
        • DCP3
        • DCP4
      • Axisymmetric
        • CAX3
        • CAX4
        • CAX8
      • Plane
        • CP3
        • CP4
        • CP4I
        • CP5
        • CP6
        • CP7
        • CP8
      • Mixed
        • PS
        • QE2
      • Drilling
        • Allman
        • GCMQ
        • GQ12
      • Infinite
        • CINP4
      • Geotechnical
        • PCPE4DC
        • PCPE4UC
        • PCPE8DC
        • PCPE8UC
      • Membrane
    • Modifier
      • Modifier
      • ElementalLee
      • ElementalNonviscous
      • LinearViscosity
    • Patch
      • Patch
      • PatchCube
      • PatchQuad
    • Plate
      • DKT3
      • DKT4
      • Mindlin
    • Shell
      • DKTS3
      • DKTS4
      • S4
      • SGCMS
      • ShellBase
    • Special
      • Contact2D
      • Contact3D
      • Damper01
      • Damper02
      • Embedded2D
      • Embedded3D
      • Joint
      • Mass
      • SingleSection
      • Spring01
      • Spring02
      • Tie
      • TranslationConnector
    • Truss
      • T2D2
      • T2D2S
      • T3D2
      • T3D2S
  • Group
    • CustomNodeGroup
    • NodeGroup
    • ElementGroup
    • GroupGroup
  • Integrator
    • Implicit
      • Linear
      • BatheTwoStep
      • GeneralizedAlpha
      • OALTS
      • GSSSS
      • Newmark
        • LeeNewmark
        • LeeElementalNewmark
        • LeeNewmarkFull
        • LeeNewmarkIterative
        • Newmark
        • RayleighNewmark
        • WilsonPenzienNewmark
        • NonviscousNewmark
    • Explicit
      • Tchamwa
      • BatheExplicit
      • GeneralizedAlphaExplicit
  • Material
    • Guide
      • Metal
      • Customisation
    • Material1D
      • Concrete
        • ConcreteCM
        • ConcreteExp
        • ConcreteTsai
        • ConcreteTable
        • ConcreteK4
      • Degradation
        • Degradation
        • CustomStrainDegradation
        • CustomStressDegradation
        • Dhakal
        • TrilinearStrainDegradation
      • Elastic
        • BilinearElastic1D
        • Elastic1D
        • AsymmElastic1D
        • MultilinearElastic1D
        • PolyElastic1D
        • NLE1D01
        • Sinh1D
        • Tanh1D
        • CustomElastic1D
      • Hysteresis
        • AFC
        • AFCN
        • BilinearOO
        • BilinearPO
        • BoucWen
        • BWBN
        • Flag
        • MPF
        • MultilinearOO
        • MultilinearPO
        • RambergOsgood
        • SimpleHysteresis
        • SlipLock
        • SteelBRB
        • Trivial
        • Gap01
      • Viscosity
        • Kelvin
        • Maxwell
        • NonlinearViscosity
        • BilinearViscosity
        • CustomViscosity
        • Viscosity01
        • Viscosity02
        • CoulombFriction
        • Nonviscous01
      • vonMises
        • Subloading1D
        • ArmstrongFrederick1D
        • AFCO1D
        • Bilinear1D
        • BilinearMises1D
        • CustomGurson1D
        • CustomMises1D
        • ExpGurson1D
        • ExpMises1D
        • Mises1D
        • Multilinear1D
        • NonlinearGurson1D
        • VAFCRP1D
    • Material2D
      • AxisymmetricElastic
      • Concrete21
      • Concrete22
      • DuncanSelig
      • Elastic2D
      • Rebar2D
    • Material3D
      • CamClay
        • BilinearCC
        • ExpCC
        • NonlinearCamClay
        • ParabolicCC
      • Concrete
        • CDP
        • CDPM2
        • Rebar3D
        • TableCDP
        • CustomCDP
      • Damage
        • IsotropicDamage
        • LinearDamage
      • DruckerPrager
        • BilinearDP
        • ExpDP
        • CustomDP
        • NonlinearDruckerPrager
      • Elastic
        • BlatzKo
        • IsotropicElastic3D
        • IsotropicNonlinearElastic3D
        • MooneyRivlin
        • NLE3D01
        • OrthotropicElastic3D
        • Yeoh
      • Hoffman
        • BilinearHoffman
        • ExpHoffman
        • CustomHoffman
        • NonlinearHill
        • NonlinearHoffman
        • TimberPD
      • Sand
        • SimpleSand
        • DafalisaManzari
      • vonMises
        • ArmstrongFrederick
        • BilinearJ2
        • BilinearPeric
        • CustomGurson
        • TableGurson
        • CustomJ2
        • ExpGurson
        • ExpJ2
        • MultilinearJ2
        • NonlinearGurson
        • NonlinearJ2
        • NonlinearPeric
        • PolyJ2
        • VAFCRP
        • Subloading
    • MaterialOS
      • ElasticOS
    • Wrapper
      • Axisymmetric
      • Laminated
      • Parallel
      • PlaneStrain
      • PlaneSymmetric
      • PlaneStress
      • Rotation2D
      • Rotation3D
      • Sequential
      • Stacked
      • Uniaxial
      • OS146
      • OS146S
      • Substepping
  • Recorder
    • Recorder
    • OutputType
  • Section
    • Code
      • EU
      • NZ
      • US
    • Section1D
      • Circle1D
      • Fibre1D
      • Rectangle1D
      • TrussSection
    • Section2D
      • Bar2D
      • Box2D
      • Circle2D
      • CircularHollow2D
      • Fibre2D
      • HSection2D
      • ISection2D
      • Rectangle2D
      • TSection2D
    • Section3D
      • Bar3D
      • Box3D
      • Circle3D
      • CircularHollow3D
      • Fibre3D
      • ISection3D
      • Rectangle3D
      • TSection3D
    • SectionOS
      • Cell3DOS
      • Fibre3DOS
    • SectionNM
      • SectionNM
      • NM2D1
      • NM2D2
      • NM2D3
      • NM2D3K
      • NM3D1
      • NM3D2
      • NM3D3
      • NM3D3K
  • Solver
    • BFGS
    • MPDC
    • Newton
    • AICN
    • Ramm
  • Step
    • Overview
    • ArcLength
    • Buckle
    • Dynamic
    • Frequency
    • Optimization
    • Static
  • Developer
    • Prerequisites
    • C Style Interface
      • material
    • CPP Style Interface
      • material
      • element
      • constraint
Powered by GitBook
On this page
  • Smooth Transition
  • Isotropic Hardening
  • Kinematic Hardening
  • Ratcheting
  • Test Data
  • Caveats
Edit on GitHub
  1. Example
  2. Structural
  3. Statics

calibration of subloading surface model

Previousthin-walled section analysis for frame structuresNextDynamics

Last updated 3 months ago

The subloading surface framework provides advantageous features that conventional plasticity models do not offer when it comes to modelling cyclic behaviour.

In this example, we demonstrate the performance and how to calibrate the model.

We mainly use the data presented in .

To make life easier, we first define some utility functions.

from dataclasses import dataclass
from os import system
from h5py import File
import matplotlib.pyplot as plt


@dataclass
class Curve:
    name: str
    x: list[float]
    y: list[float]


def execute(name: str, content: str):
    with open("example.sp", "w") as f:
        f.write(content)

    system("suanpan -np -f example.sp")

    with File("RESULT.h5") as f:
        return Curve(name, f["dataset"][:, 0], f["dataset"][:, 1])


def plot(title: str, curves: list[Curve]):
    for curve in curves:
        plt.plot(curve.x, curve.y, label=curve.name)
    plt.legend()
    plt.tight_layout()
    plt.grid()
    plt.title(title)
    plt.show()

Smooth Transition

We consider a very basic, elastic-perfectly plastic response. We choose a moderate value 400 MPa400~\text{MPa}400 MPa for initial yield stress.

The evolution rate uuu of yield ratio controls the curvature. A higher value uuu results in a faster approaching, making the response closer to conventional elastic-perfectly plastic. However, the conventional bi-linear response is not realistic, and the stiffness shows a discontinuity/jump at the yielding point.

The introduction of yield ratio zzz ensures a controllable smooth transition from the conventional 'elastic' region to the 'plastic' one.

plot(
    "$u$ controls smooth transition",
    [
        execute(
            "$u=200$",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
0 0 0 0 \
2E2 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "$u=500$",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
0 0 0 0 \
5E2 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "$u=1000$",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
0 0 0 0 \
1E3 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "$u=2000$",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
0 0 0 0 \
2E3 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "$u=5000$",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
0 0 0 0 \
5E3 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "$u=10000$",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
0 0 0 0 \
1E4 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
    ],
)

Isotropic Hardening

On top of the initial yield stress, a saturation can be added. The response exponentially approaches the saturation stress, this can be accompanied with a linear hardening as well.

Here, we choose a linear hardening modulus 2000 MPa2000~\text{MPa}2000 MPa, which is 0.10.10.1 of elastic modulus. However, this hardening modulus is measured with plastic strain, the total response would present a different slope. We further choose a saturation of 200 MPa200~\text{MPa}200 MPa, so the total stress shall be 600 MPa600~\text{MPa}600 MPa, in absence of linear hardening.

We shall see that misosm^s_\text{iso}misos​ controls saturation speed.

plot(
    "isotropic hardening",
    [
        execute(
            "without linear hardening",
            """
material Subloading1D 1 2E5 \
400 0 200 50 \
0 0 0 0 \
2E3 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "with linear hardening",
            """
material Subloading1D 1 2E5 \
400 2000 200 50 \
0 0 0 0 \
2E3 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "only linear hardening",
            """
material Subloading1D 1 2E5 \
400 2000 0 0 \
0 0 0 0 \
2E3 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "$m^s_{iso}=250$",
            """
material Subloading1D 1 2E5 \
400 0 200 250 \
0 0 0 0 \
2E3 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "$m^s_{iso}=500$",
            """
material Subloading1D 1 2E5 \
400 0 200 500 \
0 0 0 0 \
2E3 0 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
    ],
)

Kinematic Hardening

Similarly, kinematic hardening also saturated to aia^iai. In additional to that, since it is defined that the saturation itself is not a constant, itself can be saturated again. We choose a ai=100 MPaa^i=100~\text{MPa}ai=100 MPa with potentially another 150 MPa150~\text{MPa}150 MPa saturation, resulting in 500 MPa500~\text{MPa}500 MPa to 650 MPa650~\text{MPa}650 MPa in total, depending on the configuration.

plot(
    "kinematic hardening",
    [
        execute(
            "without linear hardening",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
100 0 0 0 \
2E3 300 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "only linear hardening",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
0 2000 0 0 \
2E3 300 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "with linear hardening",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
100 2000 0 0 \
2E3 300 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "further saturation",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
100 0 150 100 \
2E3 300 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
        execute(
            "faster further saturation",
            """
material Subloading1D 1 2E5 \
400 0 0 0 \
100 0 150 500 \
2E3 500 0 0

materialTest1D 1 1E-4 200

exit
""",
        ),
    ],
)

Ratcheting

The original subloading surface model shows excessive plastic strain accumulation under cyclic loading. The extended version addresses such an issue with the assist of the elastic core. It is controlled by $z_e$ and $c_e$, the former controls the size, while the latter controls the rate.

To illustrate, we choose a bilinear hardening model as the basis.

plot(
    "ratcheting, plastic strain accumulation",
    [
        execute(
            "without elastic core, no closed hysteresis loop",
            """
material Subloading1D 1 2E5 \
400 8000 0 0 \
0 0 0 0 \
5E2 0 0 0

materialTestByLoad1D 1 10 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50

exit
""",
        ),
        execute(
            "with elastic core, smaller plastic strain accumulation",
            """
material Subloading1D 1 2E5 \
400 8000 0 0 \
0 0 0 0 \
5E2 0 1E2 0.5

materialTestByLoad1D 1 10 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50

exit
""",
        ),
        execute(
            "with elastic core, even smaller",
            """
material Subloading1D 1 2E5 \
400 8000 0 0 \
0 0 0 0 \
5E2 0 1E3 0.8

materialTestByLoad1D 1 10 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50

exit
""",
        ),
    ],
)

Test Data

plot(
    "example calibration",
    [
        execute(
            "Fig. 12.3 10.1007/978-3-030-93138-4",
            """
material Subloading1D 1 1.6E5 \
507 0 294 170 \
254 0 147 170 \
1E4 30 6 0.5

materialTestByLoad1D 1 8.3 100 100 100 100 100 100 100 100 100 100 100

exit
""",
        ),
    ],
)
plot(
    "example calibration",
    [
        execute(
            "Fig. 12.4 10.1007/978-3-030-93138-4",
            """
material Subloading1D 1 2E5 \
232 0 70 30 \
209 0 63 30 \
1E3 2 143 0.7

materialTestByLoad1D 1 5 50 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80

exit
""",
        ),
    ],
)

Caveats

It is not recommanded to define a large linear isotropic hardening.

Since the loading phase always incurs accumulation of plasticity, stable one sided cycles will accumulate plasticity, which further results in larger yield surface if the linear isotropic hardening is present.

The following shows an example with a small amount of linear isotropic hardening.

plot(
    "linear isotropic hardening",
    [
        execute(
            "slight linear isotropic hardening, many cycles",
            """
material Subloading1D 1 2E5 \
200 2E2 0 0 \
0 0 0 0 \
1E3 0 1E2 0.7

materialTest1D 1 1E-4 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50

exit
""",
        ),
        execute(
            "slight linear isotropic hardening, few cycles",
            """
material Subloading1D 1 2E5 \
200 2E2 0 0 \
0 0 0 0 \
1E3 0 1E2 0.7

materialTest1D 1 1E-4 50 20 20 20 20 20 50

exit
""",
        ),
        execute(
            "no linear isotropic hardening",
            """
material Subloading1D 1 2E5 \
200 0 0 0 \
0 0 0 0 \
1E3 0 1E2 0.7

materialTest1D 1 1E-4 50 20 20 20 20 20 50

exit
""",
        ),
    ],
)

However, when a significant linear isotropic hardening is defined, the accumulated plasticity will yield significantly larger yield surface.

plot(
    "linear isotropic hardening",
    [
        execute(
            "some linear isotropic hardening, many cycles",
            """
material Subloading1D 1 2E5 \
200 5E3 0 0 \
0 0 0 0 \
1E3 0 1E2 0.7

materialTest1D 1 1E-4 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50

exit
""",
        ),
        execute(
            "some linear isotropic hardening, few cycles",
            """
material Subloading1D 1 2E5 \
200 5E3 0 0 \
0 0 0 0 \
1E3 0 1E2 0.7

materialTest1D 1 1E-4 50 20 20 20 20 20 50

exit
""",
        ),
        execute(
            "no linear isotropic hardening",
            """
material Subloading1D 1 2E5 \
200 0 0 0 \
0 0 0 0 \
1E3 0 1E2 0.7

materialTest1D 1 1E-4 50 20 20 20 20 20 50

exit
""",
        ),
    ],
)

We show a few example calibrations based on test data shown in the .

Subloading1D
this monograph
monograph
png
png
png
png
png
png
png
png