Reference

From equations to a verified implementation

A constitutive model lives in fragments: equations in a paper, a derivation, a parameter table, Fortran, an input deck, a single-element test, a solver log. The work is moving between them without losing anything.

The hard part of implementing a constitutive model is not the algebra. It is that the assumptions, the units, the state variables and the conventions all live in different places, and nothing checks that they still agree.

Six stages, and what goes wrong at each

1. Reading the model out of the source

A paper states equations; it rarely states an algorithm. It also routinely omits things it considers obvious — the elastic constants, the integration scheme, whether a rate is objective. The first job is to write down what the source actually says and, separately, what it assumes.

The failure here is filling a gap without recording that you did. A parameter you supplied from experience is not a parameter the paper gave you, and six months later nothing distinguishes them.

2. Choosing state variables

State is what the material must remember. Choosing it badly is expensive later, so three questions are worth asking up front:

  • Is it a scalar or a tensor? A tensor state variable must be rotated with the material in finite strain; a scalar must not.
  • Is it monotone? Accumulated plastic strain is a path length and cannot decrease. Adding the plastic multiplier with a sign rather than as a magnitude lets cycling unwind the hardening, and the symptom is a material that softens under load reversal.
  • Is it derivable? Anything you can recompute from the others is not state. Storing it invites the two copies to disagree.

3. The update algorithm

The order the equations are evaluated in is your decision, not the paper's. For rate-independent plasticity the standard shape is an elastic predictor, a yield test, and a return mapping — but the details matter.

For a linear hardening law the plastic multiplier has a closed form. For anything else — Voce, a power law, Johnson-Cook, a table fit — it does not. The increment then needs a local Newton solve, and its Jacobian is the derivative of the hardening law. That derivative must be evaluated at the end of the increment, not at its start. Using the initial slope costs the quadratic convergence rate without changing the answer.

4. The consistent tangent

Differentiate the return mapping, not the rate equations. This is the subject of its own page, because it is the part that most often looks finished and is not.

5. Verification

Two independent questions, and conflating them is the most common way a model ships broken.

QuestionHow it is answeredWhat a pass means
Is the tangent the derivative of the stress update?Perturb the strain increment, re-run the update, compareNewton will converge quadratically. Says nothing about whether the update is right
Is the stress update physically correct?Closed-form results, geometric identities, thermodynamic requirements, step-size independenceThe material behaves. Says nothing about how fast the solver will get there

A tangent can be a flawless derivative of a wrong stress update, and that combination passes the first check and fails the second. It is the state of affairs hardest to find by inspection, and it is why the two need separate tests.

6. Diagnosis, when the job does not converge

An Abaqus job that fails leaves four files and no answer. The shape of the convergence history is evidence in itself. A job taking eleven equilibrium iterations an increment produces the right stress, no warning, and a bad tangent. See the Abaqus page.

Units, and why Abaqus cannot help you

Abaqus has no unit system. It multiplies the numbers you give it. A modulus entered in GPa alongside a yield stress in MPa produces an analysis that runs, converges, and is out by a factor of a thousand.

The defence is to record the unit alongside every parameter and check consistency yourself. A modulus in the tens is almost always a prefix slip; a yield stress in the hundreds of thousands is the same slip the other way.

Assumptions are part of the model

Every model has a range outside which it is wrong. Writing those ranges down with their consequences is what separates a model somebody can use from one somebody will misuse:

AssumptionWhat breaks when it does not hold
Small strain, additive splitAbove roughly five per cent strain the stress is increasingly wrong. A finer mesh does not help; a finite-strain formulation does
IsotropyTexture from prior forming is not represented. Predicted anisotropy after large plastic strain will be wrong
Rate independenceAt high rate the flow stress is underpredicted. Rate sensitivity and saturating hardening are often fitted to the same data and confused for each other
IsothermalThermal softening and shear-band localisation are absent
Associated flowPressure-sensitive or dilatant materials — soils, concrete, many polymers — need a different flow rule

Producing a record somebody can check

The last stage is the one most often skipped and the one that makes the work reusable. A record worth having states, for every number: what it is, where it came from, what checked it, and what it was checked against. A verdict without its acceptance criterion is not evidence — it is an assertion.

It also states what was not checked. A report that omits the section for a test nobody ran reads exactly like a report where the test passed.