Build, verify and debug
constitutive models.

Turn equations, experiments, and research into traceable material models your team can inspect, test, and reuse.

The AI workspace for computational mechanics.
From constitutive equation to verified implementation.

Material Jacobian check DDSDDE 11 22 33 12 13 23 11 22 33 12 13 23 36 components Uniaxial response σ ε first yield elastic slope analytical against finite difference 4.1e-11 Newton convergence quadratic PASS 10 of 10 probe states
The goal

From constitutive equation
to 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, and a solver log. Engineers move between them by hand. ddsdde is built to own that path from end to end.

01

Paper

A published model, a derivation, or equations you type yourself.

02

Extraction

Equations, parameters, state variables and assumptions, each with a source.

03

Implementation

UMAT or VUMAT code, with every line traced to the equation behind it.

04

Verification

The Jacobian against a numerical reference. The physics against results the code cannot influence.

05

Simulation

A single-element Abaqus job, with the results it should produce written beside it.

06

Diagnosis

The message and status files read for a cause when a job will not converge.

Separately these look like utilities. Together they close a loop: a paper becomes a structured model, the model becomes code, the code is tested, failures are diagnosed, and the evidence is packaged into a report. Stages 04 and 06 are marked because that is where the product is defensible. Generated code is cheap. Evidence that it is right is not.

Every new feature must make implementation faster, verification stronger, or debugging more reliable. If it does none of those, it does not belong in the first product. The rule this roadmap is held to
20Subroutine types, from UMAT to VEXTERNALDB
346Arguments, each with meaning, units and access
19Worked examples, simple through research grade
436Reference pages, searchable and offline
27Verification tests, each with a stated criterion
10States the material Jacobian is checked at
Three facts, instantly

The manual answers this
in twenty minutes.

ddsdde answers it in zero. Put the cursor on an argument and the panel on the right fills in.

1

What it is

The physical quantity, in plain words. DDSDDE is the material Jacobian — the change in stress divided by the change in strain. Not a symbol to memorise.

2

Its units

Abaqus has no unit system, so a wrong unit produces no error. It produces a wrong answer that looks entirely plausible. Every argument carries its dimension.

3

Read or write

Whether Abaqus supplies the value or you must calculate it. This is the most frequent cause of a subroutine that compiles cleanly and returns incorrect results.

ddsddeelastic_umat.fWorkspace   ·   Abaqus Docs
F elastic_umat.f ×
src materials elastic_umat.f UMAT
40! Material response and consistent tangent
41SUBROUTINE UMAT(STRESS, STATEV,
42 & DDSDDEOUTMaterial JacobianDerivative of the stress update with respect to the strain increment.REAL(NTENS, NTENS) · Stress unitsYour UMAT writes this array. Abaqus uses it in equilibrium iterations., SSE, SPD, SCD,
43 & RPL, DDSDDT, DRPLDE, DRPLDT,
44 & STRAN, DSTRAN, TIME, DTIME,
45 & TEMP, DTEMP, PREDEF, DPRED,
46 & CMNAME, NDI, NSHR, NTENS, ...)
47 
48DIMENSION STRESS(NTENS),
49 & DDSDDE(NTENS, NTENS)
Select an argument. Understand its contract.
Fortran · UMATLn 42, Col 18   UTF-8   Fixed form
Illustrative IDE view · selected argument and its contract. Code excerpt abbreviated.

Hold Shift and click any argument to open its full reference — type, ordering, sign convention and the mistakes people make with it.

The interface

Three panels. Nothing else.

A file tree, an editor, and the inspector. The top bar carries one control. Everything else lives on a keyboard shortcut, the way you already work.

ddsdde umat_j2.f Abaqus Docs EXPLORER examples/ elastic_umat.f umat_j2.f vumat_neo.f creep_power.f umat_j2.f 42SUBROUTINEUMAT(STRESS,STATEV, 431DDSDDE,SSE,SPD,SCD,RPL,DDSDDT, 44 45C ---- elastic trial stress ---- 46DOK1 = 1, NTENS 47STRIAL(K1) = STRESS(K1) 48END DO UMAT line 42 CURSOR ON Shift+click for docs DDSDDE OUT (NTENS,NTENS) Material Jacobian of the constitutive model. Units: Pa Manual: Abaqus Sub. Ref. 1.1.44 STRESS IN/OUT STATEV IN/OUT DSTRAN IN NTENS IN ddsdde umat_j2.f Fortran 77 Ln 42, Col 18

Scroll the figure sideways to read it.

Put the cursor on an argument and the panel on the right shows what it is, its units, and whether you read it or write it. The green OUT badge on DDSDDE means Abaqus does not supply that value — you must calculate it.
Abaqus Docs Search the reference… Follow cursor × EXAMPLES All examples Simple · 4 Intermediate · 5 Advanced · 5 Research grade · 5 SUBROUTINES ▾ UMAT Full reference STRESS DDSDDE STATEV ▸ VUMAT ▸ UEL ▸ UHARD FULL REFERENCE UMAT The Jacobian and convergence An incorrect Jacobian changes the convergence rate. It does not change the answer. Slow convergence and repeated cutbacks point at the tangent; a wrong answer points at the stress update. Worked example: integration Δσ = (Δt λ / 2 + λ*) tr(Δε) + … T = Δt / 2 + κ Variables to be defined DDSDDE(NTENS,NTENS) Material Jacobian. You must set this on every call.

Scroll the figure sideways to read it.

Press Ctrl+Shift+D, or Shift-click any argument in the editor. 436 pages: a full reference per subroutine, one page per argument, 28 Fortran intrinsics, and 19 worked examples graded from simple to research.
elastic_umat.f 18C reference: elastic 19DDSDDE(K1,K1) = XLAM 20 + 2.0D0*XMU umat_j2.f 96C algorithmic tangent 97EFFG = XMU*(SYIELD 98 + HARD*DEQPL)/SEQ The accent bar marks the pane that has focus. The inspector, the status bar, Ctrl+O and Ctrl+S all follow it. Ctrl+\ split right Ctrl+Shift+\ split down Alt+1 / Alt+2 focus pane

Scroll the figure sideways to read it.

Split right or down, drag the divider to resize, and move the current file across from the command palette.

These figures are drawn from the interface source rather than photographed, so they stay sharp on any display and follow your system light or dark setting.

Inside the IDE · Workspace

Give the model
a place to live.

Open Workspace in the editor toolbar to organize the material model: its equations, parameter ordering, state variables, generated code, checks and report. Follow a number back to its source and keep the assumptions beside the implementation.

01 · DEFINE

Understand the material

Review source proposals in Paper. Inspect the model assumptions and equations, then check the PROPS order and STATEV map in Parameters and State.

02 · CHECK

Connect code to evidence

Inspect generated code and use the Jacobian and Tests panels for supported model workflows. See the measurement and acceptance criterion beside each verdict.

03 · EXPLAIN

Make the work reviewable

Investigate Abaqus job diagnostics in Failures and export the model’s evidence from Report. Give a colleague the inputs, assumptions and results needed to assess the work.

Workspace follows the structured model. To test an existing UMAT already open in the editor, use Verify. Model generation and Workspace checks depend on the supported model family.

Inside the IDE · Verify

Your UMAT.
Put it to the test.

Click Verify in the editor toolbar to check the active UMAT, including unsaved edits. Design tests around the physics in that file, watch the prescribed deformation, and inspect the computed stress and state history. No Fortran compiler installation required for supported source.

▦ ddsddeyour_material.f90Verify   Workspace   Abaqus Docs
  1. Inspect the source

    A local compatibility check identifies unsupported Fortran syntax before execution. The snapshot includes the code currently in your editor.

  2. Design relevant checks

    Explicitly send the source and your context to Anthropic using your key. AI proposes loading paths, source evidence and expected behavior. Review extracted inputs and supply any missing material values.

  3. Run and see the response

    The built-in interpreter executes supported source locally. Play through the recorded increments, inspect the block’s displacement constraints, and compare stress–strain curves or state values with references.

  4. Keep the evidence

    Read pass, fail or inconclusive results with their measurements and tolerances. Export the source fingerprint, reviewed plan, recorded histories and results.

Does the tangent agree?

Compare DDSDDE with numerical stress derivatives. An internally consistent derivative alone does not prove the material law is correct.

Does the physics agree?

Check final stress or the full stress history against independent references. Test recovery after a closed cycle only in a reversible elastic regime.

Does the state make sense?

Check source-supported bounds and irreversible state evolution. The planner is instructed to select applicable checks, with evidence and an explanation for each.

What the visual test represents: a homogeneous unit block with prescribed affine displacement, labelled boundary conditions and adjustable display magnification. Current support is a bounded Fortran subset for self-contained 3D small-strain UMATs. Resolved fiber–matrix geometry, contact and friction require additional solver support. A passing test covers its selected cases; it is not component certification.

Get ddsdde
From a paper

Read the paper.
Check every claim.

Point ddsdde at a paper and it proposes a model: equations, parameters, state variables and assumptions. Nothing it proposes enters your model. Every claim carries a quote, and every quote is checked against the paper before you see it.

1

Proposals, not values

A field holds a proposed value, the quote offered for it, and a confidence. It becomes a value when you accept it. A proposal with no quote is rejected before it reaches you, because nothing can check a claim with no evidence behind it.

2

Grounded, or blocked

Each quote is searched for in the paper, allowing for paraphrase and for the damage a PDF reader does. A claim the paper does not contain cannot be accepted. Numbers get a second check: the value itself must appear, in one of the forms a paper prints it.

3

Your key, your paper

The request goes from your machine with your own key. ddsdde runs no service and never sees the document. Many of these papers are unpublished or commercially sensitive, and a tool that uploads them is a tool you cannot use.

A confident claim about a sentence the paper does not contain. This is the failure nothing downstream can catch, so it is caught here.
extraction
BLOCKED — these cannot be accepted until you check them symbols[5].value [evidence/confabulated] The evidence does not appear in the document, and it was offered with a confidence of 0.88. -> Treat this as invented until you have found it in the paper yourself. claimed: "The Young's modulus of the material is 210000 MPa as given in Table 2" symbols[6].value [value/not-in-document] The value 0.7 for Poisson's ratio appears nowhere in the document, in any of the usual written forms. -> The paper says 0.3.
What the paper does not say is reported as plainly as what it does. Silence is an answer, and inventing over it is the expensive mistake.
review
7 symbols, 2 equations, 3 assumptions, 62 fields 9 blocked, 3 to check, 52 safe to accept The paper does not state: Young's modulus looked in Sections 1-3, Table 1 the density looked in the whole paper st conf page field value ok 0.95 p2 symbols[0].value 250 ok 0.95 p2 symbols[1].value 180 ok 0.90 p2 symbols[2].value 12 !! 0.88 - symbols[5].value 210000 !! 0.85 p2 symbols[6].value 0.7 NO 0.80 - symbols[0].descr... no quote given

An accepted field records that the paper said it, with the page. A field you corrected records that you said it. Six months later that is the difference between what a paper states and what somebody typed.

What this does not do: judge whether the model read the right table, attributed the right symbol, or understood the physics. It reduces the reading you must do from the whole extraction to the parts that failed a mechanical check. A paper gives equations, not an algorithm — the order they are evaluated in stays your decision, and ddsdde says so rather than inventing one.

Model to verified code

Write the equations.
Check the answer.

ddsdde keeps the model as structure, not as text. From that structure it writes the subroutine. Then it grades what it wrote. The material Jacobian is checked against a numerical reference. The physics is checked against results that do not depend on the code being tested.

1

The model

Equations, parameters and state variables, each with a source. A value records whether a person typed it, a paper supplied it, or a model inferred it. In a design review you can ask where a number came from.

2

The subroutine

Fixed-form Fortran 77, inside column 72, with the PROPS order and the STATEV map written at the top. Every line cites the equation it came from. Hardening laws are compiled from your own notation, and their derivatives are worked out for you.

3

The Jacobian

DDSDDE is compared against a finite-difference reference at ten states, from first yield to full reversal. A disagreement is named, not merely flagged, and the report says what it costs the solver.

4

The physics

Twenty-seven tests with verdicts. Moduli, yield onset, plastic volume, flow direction, hardening slope, reversal, dissipation, step-size independence, relaxation, void growth. Each states its criterion before it runs — and skips, with the reason printed, when the model does not claim that property.

Generated from the model. Saturating hardening.
umat_voce.for
C Local Newton on the consistency condition. The residual C and its derivative are built from the declared hardening C law, so any scalar law works without anyone writing a C derivative by hand. DEQPL = 0.D0 TOLER = 1.D-8 * SYIELD DO KNEWT = 1, 30 SYIELD = SY0 + QINF * (1.D0 - EXP(-(BSAT * (EQPLAS + DEQPL)))) C Slope at the end of the increment, differentiated C symbolically from the law above. HARDP = QINF * (EXP(-(BSAT * (EQPLAS + DEQPL))) * BSAT) RESID = SEQ - 3.D0 * XMU * DEQPL - SYIELD IF (ABS(RESID) .GT. TOLER) THEN DEQPL = DEQPL + RESID / (3.D0 * XMU + HARDP) END IF END DO
The same subroutine, graded before anyone compiled it.
verification
DDSDDE sweep PASS 10/10 probes, worst 5.2e-11 convergence quadratic verification PASS 16 pass, 0 fail, 2 n/a PASS elastic/moduli 2.5e-10 PASS yield/onset 1.1e-16 PASS flow/incompressibility 5.4e-17 PASS flow/normality 0.0e+00 PASS hardening/reverse-yield 6.7e-10 PASS thermo/dissipation 9.0e-15 PASS discretisation/proportional 1.2e-15 PASS tangent/consistency 5.2e-11 n/a hardening/tangent-modulus No plastic modulus declared. A saturating law has no single tangent modulus to check against.
Mistakes the checks name, rather than only detect
What went wrongHow it is recognised
The material Jacobian
Elastic stiffness returned after yield The matrix does not change between an elastic state and a plastic one, while the stress does NAMED
Continuum tangent instead of the algorithmic one The error falls in proportion to the increment, so it vanishes in the limit NAMED
Shear components in Explicit order inside a Standard subroutine Swapping the last two shear slots reconstructs the reference matrix NAMED
Engineering shear treated as tensor shear Halving the shear diagonal reconstructs the reference matrix NAMED
A sign error in the plastic correction The whole discrepancy is a single rank-one term, which is the shape of the flow-direction contribution NAMED
The stress update, where finite differences cannot help
PROPS read in the wrong order Yield begins at the wrong stress, and the ratio matches no standard conversion factor NAMED
State variables never written back An inelastic increment leaves STATEV untouched NAMED
Plastic strain accumulated with a sign Peak stress falls between cycles under symmetric loading NAMED
Flow direction formed from the total stress Plastic flow changes volume, and the direction is not normal to the surface NAMED

The two halves are separate on purpose. A Jacobian can be a perfect derivative of a stress update that is wrong. A stress update can be correct while the Jacobian costs the solver ten iterations an increment. The last four rows above pass every Jacobian check.

What these checks prove: the algorithm is correct, and the Jacobian matches the stress update. What they do not prove: that your compiler built what you read. ddsdde writes a single-element input deck with the expected results, so that last step takes one run.

Written up

The reference behind
every claim on this page.

Each of these answers one question completely — the conventions, the failure modes, and the numbers. They are worth reading whether or not you ever run ddsdde.

Coverage

Every argument. Every type.

All 346 arguments carry a description, a unit and an access direction. UMAT has the most depth, because UMAT is the primary target of this release.

Documented subroutine types
TypePurposeArguments
Abaqus/Standard — material behaviour
UMATMechanical constitutive model37COMPLETE
UMATHTHeat transfer constitutive model27COMPLETE
CREEPCreep and swelling law25COMPLETE
UHARDIsotropic hardening law22COMPLETE
USDFLDSolution-dependent field variables25COMPLETE
UEXPANThermal expansion11COMPLETE
UTRSTime-temperature shift10COMPLETE
Abaqus/Standard — elements, loads and utilities
UELUser-defined element25COMPLETE
UELMATUser element with library material21COMPLETE
DLOADDistributed load11COMPLETE
DFLUXDistributed heat flux12COMPLETE
UFIELDPredefined field variables at nodes11COMPLETE
URDFILRead the results file6COMPLETE
UEXTERNALDBExternal database access6COMPLETE
Abaqus/Explicit
VUMATMechanical constitutive model20COMPLETE
VUELUser-defined element24COMPLETE
VDLOADDistributed load11COMPLETE
VDFLUXDistributed heat flux15COMPLETE
VDISPPrescribed boundary motion22COMPLETE
VEXTERNALDBExternal database access5COMPLETE

COMPLETE means every argument carries a description, a unit and an access direction. It does not mean the data is free of errors. Report an incorrect entry and it gets corrected.

Worked examples

From first UMAT
to research grade.

Nineteen model topics, ordered so each one prepares you for the next. The linked worked guides explain the physics, implementation details, a verification procedure, and the mistakes that cost people weeks.

Simple
  • Isotropic linear elasticity
  • Orthotropic composite ply
  • Field-driven degradation
  • Hydrostatic pressure load
Intermediate
Advanced
Research
  • Phase field fracture
  • Hydrogen embrittlement
  • Crystal plasticity
  • Multiscale FE²
  • Co-simulation state

Browse the worked example guides →
Each example cites the papers and repositories to read. ddsdde summarises them; it does not redistribute their code.

The editor

Fortran, done right.

Built on Monaco — the editor inside Visual Studio Code. If you come from VS Code, your key bindings already work.

The bigger picture

Material behavior.
Engineering consequences.

Before a new part flies, generates power, or leaves a factory, engineers need to understand how its material responds. DDSDDE helps turn those material rules into code they can inspect and check.

Conceptual illustration of a turbine, energy pressure vessel, manufactured bracket, and composite material
Illustrative applications — not simulation results or customer deployments.
  1. 01 / Understand

    Measure how the material stretches, yields, or changes.

  2. 02 / Implement

    Write those rules as material code. This is part of DDSDDE’s focus.

  3. 03 / Check

    Compare the implementation against reference behavior.

  4. 04 / Apply

    Use validated models in component simulations and physical test programs.

Aerospace

Can a lighter component withstand demanding loads? Material models help engineers compare designs and plan the next physical test.

Nuclear & energy

How does a material change over long service? Models support specialist assessments of behavior under heat, sustained load, and environmental exposure.

Advanced manufacturing

Will a new process produce a dependable part? Material implementations connect measured properties to simulated component response.

New to simulation? Start here.

FEA divides a virtual component into small pieces to estimate its response. Abaqus is a tool that performs those simulations. A constitutive model describes the material’s response; UMAT / VUMAT is custom code that supplies that rule to Abaqus.

The opportunity is more understandable, reproducible material implementations. Code verification does not replace experimental validation, full-system analysis, or certification. Industry background: NASA computational materials · DOE materials aging. These sources describe the field, not endorsements of DDSDDE.

Download

Free while in beta.

One installer, no configuration. Nothing to license, nothing to compile, nothing sent to a server.

Windows may show a SmartScreen message — click More info, then Run anyway. The installer is not code-signed yet.

  • Windows10 / 11 x64 · 15 MB
  • macOSon the roadmap
  • Linuxon the roadmap
  • Abaqus licencenot required
  • Fortran compilernot required
  • Anthropic API keyoptional

Built on Tauri v2. Questions and defect reports go to flm2127@columbia.edu.

Close the manual.

Every argument, every subroutine, every worked example — in the window where you are already writing the code.