CH NEO-ZÜRICH EDITION
WEATHER · OVERCAST 20°C
BLEND OF THE DAY · 07/ROGUE
EST. 2027
THE AEC CYBER MORNING NEWS

PAZ Kaffi

DESIGN · DEMOLITION · CAFFEINE · DISPATCH
EDITION 0726 · 26 July 2026
BROADCAST 04:42 CET
2,400 BROADSHEETS PRINTED
READ TIME · 47 MIN
The Constitutive Model: What a Material Promises, Written as Code You Can Falsify
SYSTEMS
FRAME · 06:55
26-07-2026

The Constitutive Model: What a Material Promises, Written as Code You Can Falsify

What a UMAT really is, why return mapping conserves volume, and the one question to ask your engineer before signing off any FEA result.

A finite-element solver does not know what concrete is. It knows a mesh, a set of boundary conditions, and one function you hand it: given a strain increment, return a stress increment and the tangent matrix that relates them. That function is the constitutive model. Everything else in the simulation — the geometry, the contact, the fancy adaptive time-stepping — is bookkeeping around it.

Which is why a small Windows beta posted to Hacker News this month is worth a foundation essay rather than a news item. Jacobi (v0.1.0 beta, Windows 10/11 x64, gfortran required on PATH) is an IDE for exactly one thing: writing an Abaqus UMAT subroutine and proving it obeys physics before you trust it. It ships fifteen closed-form analytical tests and verifies each quantity three independent ways — the analytical answer, your compiled subroutine at a single material point, and the same subroutine inside a real single Abaqus element. The interesting part is not the tool. It is what the tool assumes: that a constitutive model is a falsifiable claim, and that most of the ones running in production have never been falsified.

←TODAY: Jacobi’s published test table shows two of fifteen checks failing on a demo J2 plasticity UMAT — plastic incompressibility (K, tr(dεᵖ)=0) and the DDSDDE finite-difference check (I, |C − dσ/dε| < 1%).
→3012: Material behaviour becomes a versioned, tested, citable object; a facade panel carries the constitutive model it was designed against, not a PDF datasheet.
Fulcrum: The unit test here does more than assure quality — it is the only place the physics gets written down in a form a stranger can check.

What it is: the function that turns geometry into force

A constitutive model is a mathematical statement of how a material responds to being deformed. Feed it a strain state ε, it returns a stress state σ. In the linear elastic case that is Hooke’s law and the whole model fits in two numbers, E and ν. In the interesting cases — plasticity, damage, viscoelasticity, soil, fibre composites, biological tissue — it is a path-dependent algorithm with internal state that remembers everything the material has been through.

In Abaqus that algorithm lives in a Fortran subroutine called UMAT. It receives STRESS, an array of internal state variables STATEV, material constants PROPS, and the strain increment. It must return the updated stress and DDSDDE — the consistent tangent, ∂σ/∂ε, the Jacobian that Newton–Raphson uses to converge. Get DDSDDE wrong and the answer may still be right; the solver just takes forty iterations instead of four, or diverges at the load step where it mattered. Get the stress update wrong and the answer is confidently, silently false.

Why it works: return mapping and the geometry of yielding

The mechanism under classical plasticity is beautifully geometric, and it is the reason this desk cares. Define a yield surface in stress space — for J2 (von Mises) plasticity, a cylinder of radius √(2/3)·σᵧ whose axis is the hydrostatic line σ₁=σ₂=σ₃. Elastic states live inside. Stress states outside are physically inadmissible.

So the algorithm does this: take an elastic trial step, ignoring plasticity entirely. If the trial stress lands outside the cylinder, project it back — the return mapping. For J2 the projection is radial, perpendicular to the cylinder axis, which is exactly why the plastic strain increment has zero trace. That is Jacobi’s test K, tr(dεᵖ) = 0: plastic flow in metals conserves volume, because the projection direction carries no hydrostatic component. Nothing about that is a modelling convenience — the geometry of the yield surface forces it.

The consistent tangent, meanwhile, is not the elastic stiffness. Simo and Taylor showed in 1985 that differentiating the algorithm rather than the continuum equations is what restores quadratic convergence in Newton–Raphson — the algorithmic tangent, not the continuum one. Jacobi’s test I checks your hand-derived DDSDDE against a finite-difference estimate of dσ/dε to within 1%, with a companion test J enforcing symmetry |Cᵢⱼ − Cⱼᵢ| < 1e–6. That is a numerical gradient check, the same discipline anyone who has debugged a backpropagation implementation already knows.

The rest of the fifteen tests are the ones a first-year continuum mechanics course would set: uniaxial strain recovers C₁₁₁₁, lateral confinement recovers C₁₁₂₂, simple shear recovers G, hydrostatic loading recovers K, von Mises stress must stay identically zero under pure pressure (test E — J2 neutrality), yield onset must land at εᵧ = σᵧ/2G, the unloading slope must return to C₁₁₁₁, a zero strain increment must produce |Δσ| < 1e–6. Each is a closed-form answer. Each takes one line of algebra and, historically, nobody wrote the assertion down.

Origins: from Tresca to the return map

The lineage is long and unusually clean. Tresca proposed a maximum-shear yield criterion in 1864 after squeezing metals through dies. Von Mises published the distortion-energy criterion in 1913; Hencky gave it its physical reading in 1924. Prandtl and Reuss supplied the flow rule in the 1920s. Hill’s The Mathematical Theory of Plasticity (1950) consolidated it.

The computational half arrives with the finite element method — Wilkins introduced radial return in 1964 — and matures with Simo and Hughes’s Computational Inelasticity (1998), still the reference for anyone writing a UMAT today. Abaqus itself dates to 1978, from Hibbitt, Karlsson & Sorensen. So the interface a UMAT presents — arrays in, arrays out, fixed-form Fortran — is roughly as old as the discipline, which is why the test harness is arriving in 2026 and not 1996.

Swiss readers have a parallel lineage worth holding: the SIA 260–267 series encodes material behaviour as normative rules rather than as code, and as PAZ’s own Swiss — En Ingenieria panel argues, a norm that tight is already a data schema. Somebody just has to admit it. A constitutive model is the same admission at the level of the material point.

In practice: where a studio actually meets this

Most architecture offices never write a UMAT, and should not start. But you commission people who do, and you inherit their results. A timber composite with an anisotropic damage model, a soil–structure interaction on a Zurich excavation, a facade gasket modelled as hyperelastic — in each case somebody chose a constitutive model and calibrated it, and the credibility of the entire structural argument rests on that choice, not on the mesh density everyone argues about in the meeting.

The practical move is to ask for the model, not the result. Which yield criterion. Which hardening law and its parameters. What test data it was calibrated against and over what strain range — because a model fitted to 0–2% strain and then run to 8% is extrapolation wearing a lab coat. Jacobi’s unit checker, cross-checking every PROPS and STATEV entry against four unit systems (SI-mm, SI-m, kN, US-in), exists because unit errors in material constants are the single most common silent failure in this workflow.

Atelier: The Büro-level shift is that physics validation is becoming reviewable the way code review is — a test table with a verdict column, rather than a consultant’s assurance. The Büro question is no longer whether your engineer used Abaqus but whether the material law they wrote has any assertions attached to it at all. Monday move: on your next structural or facade analysis package, add one line to the request — name the constitutive model, its calibration data range, and whether the tangent was verified numerically. It costs nothing to ask and it changes what comes back.

One trade-off, stated plainly: fifteen analytical tests verify that a model is internally consistent and dimensionally sane. They say nothing about whether it describes your material. A UMAT can pass every check on that table while calibrated against the wrong steel. Consistency is necessary but not sufficient, and a green test panel is very good at making people forget the difference.

There is a second claim in Jacobi’s pitch that deserves scepticism rather than enthusiasm — that validated constitutive models constitute a training corpus for a physics foundation model, the way text was for language models, with forty years of FEA output as the untapped seam. The analogy is seductive and probably backwards. Constitutive models are already compressed knowledge; they are the theory, and the data sits upstream of them. A model trained to predict them learns to imitate the compression rather than the mechanics. Compare PAZ’s own Attention — En Ingenieria panel: attention wins where relationships between irregular tokens matter more than order, at O(n²·d) cost. A return-mapping algorithm has no token set to attend over. It is a projection with a proof.

This is where the desk’s long view bites. The parametric work my generation regrets was never the ugly form — it was the form whose logic nobody could reconstruct after the plugin went dark. A generated material law with no derivation is a beautiful guess you cannot defend in a structural review. Demand the written objective, the named method, the listed assumptions, so that a twenty-five-year-old could rebuild the behaviour from the principle rather than from the binary.

The maths you can run before lunch

Hack: Check whether your plastic flow actually conserves volume — the geometric consequence of a radial return, and Jacobi’s failing test K. Take the deviatoric part of a trial stress, project onto it, and confirm the trace of the plastic strain increment is machine zero. If it drifts, your flow direction has picked up a hydrostatic component and the material is quietly changing volume when it shouldn’t.

import numpy as np
s = np.array([[220.,40.,0.],[40.,-90.,0.],[0.,0.,-30.]])  # trial stress, MPa
dev = s - np.trace(s)/3.0*np.eye(3)
n_hat = dev/np.linalg.norm(dev)                            # radial return direction
print(np.trace(n_hat))                                     # want ~1e-16, not 1e-3

Swap in your own stress state, or the flow direction your UMAT computes at the step where the solver started limping. The trace is the whole diagnosis. Run it, read the exponent, and if it isn’t near machine epsilon, go find the line where the deviator was assembled.

Source: Hacker News

FILED FROM
CO-SIGNERS
PAZ Academy
CONFIDENCE
HIGH
REPRINTS
© PAZ - PARAMETRIC ACADEMY ZURICH · ALL RIGHTS RESERVED

SOURCE ·

PAZ Kaffi · multidisciplinary editorial, led by PAZ Academy

⚑ REPORT AN ERROR · SUBMIT A CORRECTION
◂ BACK TO FRONT PAGE · PAZ KAFFI

© 2026 PAZ Academy.