Material models

This page helps you choose a material model based on your requirements. Each linked model page (see Stable models) provides the equations, constructor, state behavior, implementation notes, provenance, acknowledgements, and references.

Which model should I use?

The table below is a non-exhaustive overview of frequent problem classes and suitable material formulations; applicability should still be checked for each case.

Problem classReach for
Linear elasticityHooke/Hooke2D
Small-strain plasticityJ2Plasticity
Finite-strain rubber / elastomerNeoHooke, MooneyRivlin, Ogden, ArrudaBoyce
Semi-crystalline / crosslinked polymer with damageVEPD_Detrez2010
Thermoplastic / glassy polymerVEVP_MOAMMM, VEVP_Zhao2021_AD
2D plane strain/stress for any modelPlaneStrain, PlaneStress wrappers

See the Stable models table below for the full list and related variants.

Stable models

The dt column indicates whether the material is rate-dependent and actively uses the time step size dt for material state updates.

ConstructorPageUse when you needdt2D support
HookeLinear Elasticity3D isotropic linear elasticityNoPlaneStrain / PlaneStress; prefer Hooke2D
Hooke2DLinear ElasticityDirect 2D linear elasticityNoDirect
NeoHookeNeo–HookeanCompressible finite-strain hyperelasticityNoPlaneStrain / PlaneStress
ArrudaBoyceArruda–BoyceLimited-chain finite-strain hyperelasticityNoPlaneStrain / PlaneStress
MooneyRivlinMooney–RivlinTwo-invariant finite-strain hyperelasticityNoPlaneStrain / PlaneStress
OgdenOgdenPrincipal stretch finite-strain hyperelasticity with arbitrary term countNoPlaneStrain / PlaneStress
J2PlasticityJ2 PlasticitySmall-strain von Mises plasticityNoPlaneStrain / PlaneStress
VEPD_Detrez2010VEPD Detrez 2010Finite-strain viscoelastic-plastic-damage responseYesPlaneStrain / PlaneStress
VEVP_Zhao2021_ADVEVP Zhao 2021Finite-strain viscoelastic-viscoplastic glassy-polymer responseYesPlaneStrain / PlaneStress
VEVP_Zhao2021_ATVEVP Zhao 2021Related Zhao formulation with trial-state stress and analytical tangentYes3D and PlaneStrain only
VEVP_MOAMMMVEVP MOAMMMFinite-strain viscoelastic-viscoplastic response with Drucker-Prager plasticityYesPlaneStrain / PlaneStress

Using MaterialModelsBase.jl models

FerriteSolidMechanics.jl focuses on established material models provided as a whole, but also supports modularly composed materials from the following packages by Knut Andreas Meyer (which also offer extended tooling for them, such as parameter differentiation for calibration and stress-state-driven point simulations): MaterialModelsBase.jl specifies an interface for constitutive models, and MechanicalMaterialModels.jl provides an existing library of material models (such as elasto-(visco)plasticity and viscoelasticity).

Any material implementing this interface can be used directly through the FromMaterialModelsBase wrapper. FerriteSolidMechanics' own constitutive interface deliberately follows similar conventions. Trial/commit state management, threaded/MPI assembly, stress output, and try_stiffness_matrix-based adaptive stepping (local convergence failures surface as MaterialModelsBaseConvergenceError) therefore all work as for bundled material models.

The bridge targets MaterialModelsBase.jl 0.4; a different version may require an update. The extension activates when MaterialModelsBase is loaded:

using Pkg
Pkg.add(url="https://github.com/KnutAM/Newton.jl") # dependency of MechanicalMaterialModels
Pkg.add(url="https://github.com/KnutAM/MaterialModelsBase.jl")
Pkg.add(url="https://github.com/KnutAM/MechanicalMaterialModels.jl")
using FerriteSolidMechanics
import MaterialModelsBase   # activates the extension; prefer `import` over `using` (both packages export `material_response`)
using MechanicalMaterialModels: Plastic, LinearElastic, Voce, ArmstrongFrederick, NortonOverstress

mmmMaterial = Plastic(;
    elastic    = LinearElastic(E=210.0e3, ν=0.3),
    yield      = 100.0,
    isotropic  = Voce(Hiso=50.0e3, κ∞=100.0),
    kinematic  = ArmstrongFrederick(Hkin=200.0e3, β∞=200.0),
    overstress = NortonOverstress(tstar=1.0, nexp=2.0)
)

mat = FromMaterialModelsBase(mmmMaterial)  # kinematics=SmallStrain() is the default
fem = create_assembler(mat, dh, ch)        # then solve exactly as with bundled models

For finite-strain MaterialModelsBase materials pass FromMaterialModelsBase(mmmMaterial; kinematics=FiniteStrain()), which uses the deformation gradient F and expects the material to return (P, ∂P∂F, new_state) (first Piola–Kirchhoff stress, its tangent, and updated state). Note that FerriteSolidMechanics' PlaneStrain/PlaneStress material wrappers are unrelated to MaterialModelsBase's stress-state types of the same names. Whether a material model used through FromMaterialModelsBase can be combined with these 2D wrappers is currently untested. Hooking into the wrappers states the requirements for a wrappable material model.

  • Material model API lists the constructor docstrings of all bundled models, the PlaneStrain / PlaneStress wrappers, and the wrapper extension points.
  • Wrappers explains how 3D material models are embedded into 2D plane strain and plane stress analyses.
  • Experimental models lists comparison variants under FerriteSolidMechanics.Experimental.
  • Developer guide explains the material interface (material_response + kinematics, trial/commit state handling, and the optional element-level assembly hook) needed to support these features in custom materials.