Feature Reference
Complete reference for every feature in Jacobi — the subroutine IDE built for computational mechanics engineers writing UMAT, VUMAT, UEL, UHARD, and CREEP subroutines for Abaqus.
What is Jacobi?
Jacobi is a desktop IDE purpose-built for engineers who write Abaqus user subroutines. It replaces the manual edit → compile → submit → wait → inspect loop with an instant single-point RVE test that tells you in seconds whether your constitutive model is physically correct — and exactly which line of Fortran is wrong if it isn't.
Get running in 60 seconds
Jacobi requires gfortran on your PATH. Everything else is self-contained.
.f, .f90, .for, and .f95. It immediately detects which Abaqus subroutine type the file contains.brew install gcc. On Linux: apt install gfortran.Fortran Editor
Jacobi uses Monaco (the VS Code engine) with a custom Fortran grammar, Abaqus-aware hover documentation, and live diagnostics.
Syntax highlighting
Full tokenization of Fortran 77, 90, and 95 — keywords, intrinsics, strings, comments, preprocessor directives, and numeric literals including REAL*8, D-notation, and complex literals.
! J2 plasticity UMAT — return-mapping algorithm SUBROUTINE UMAT(STRESS, STATEV, DDSDDE, SSE, SPD, SCD, & RPL, DDSDDT, DRPLDE, DRPLDT, & STRAN, DSTRAN, TIME, DTIME, TEMP, DTEMP, & PREDEF, DPRED, CMNAME, NDI, NSHR, NTENS, & NSTATV, PROPS, NPROPS, COORDS, DROT, & PNEWDT, CELENT, DFGRD0, DFGRD1, & NOEL, NPT, LAYER, KSPT, KSTEP, KINC) IMPLICIT NONE INCLUDE 'ABA_PARAM.INC' REAL*8 STRESS(NTENS), STATEV(NSTATV), DDSDDE(NTENS,NTENS) REAL*8 PROPS(NPROPS), DSTRAN(NTENS) ! Material constants from PROPS array REAL*8 EMOD, ANU, SYIELD0, HMOD EMOD = PROPS(1) ! Young's modulus (MPa) ANU = PROPS(2) ! Poisson's ratio SYIELD0 = PROPS(3) ! Initial yield stress (MPa) HMOD = PROPS(4) ! Linear hardening modulus (MPa)
Static analysis
Jacobi runs a full static pass on every keystroke. Diagnostics appear as Monaco squiggles and in the Problems panel.
| Diagnostic | Severity | Example trigger |
|---|---|---|
| Undefined variable used before assignment | error | X = Y + 1 where Y is never assigned |
| Variable declared but never used | warn | REAL*8 TEMP declared, never referenced |
| Possible typo — variable not in scope | error | EMDOD instead of EMOD |
| Missing IMPLICIT NONE | warn | No IMPLICIT NONE at top of subroutine |
| UMAT/VUMAT interface argument count mismatch | error | Wrong number of arguments in SUBROUTINE line |
| Variable assigned but value never read | warn | DLAM = 0.0 overwritten before use |
Themes
20 editor themes — 18 dark, 2 light. Switch instantly via the command palette (Ctrl+Shift+P) and the selection persists across sessions.
Switch via Ctrl+Shift+P → type "theme" → select any option. The setting persists across sessions.
Command Palette
Every action in Jacobi is accessible via the command palette. Press Ctrl+Shift+P anywhere.
File Open File… Ctrl+O Save File Ctrl+S Build Build (compile + run) F5 View Zoom In / Out / Reset Ctrl++ / Ctrl+- / Ctrl+0 Theme (20 entries, one per theme) Dark+, Monokai, Dracula, One Dark Pro, Nord, GitHub Dark …
Subroutine Templates
Generate a correctly-structured Fortran scaffold for any Abaqus subroutine type. All arguments, array dimensions, and common patterns pre-filled.
IMPLICIT NONE, all argument declarations typed correctly, and TODO comments at the key implementation sites.& continuation) regardless of file extension. If you need fixed-form, save with a .f extension and reformat.Build System
One-key compilation with gfortran. Error messages are parsed and displayed as Monaco squiggles with click-to-jump navigation.
Running a build
Press F5 or click Build in the toolbar. The Build Console opens in the bottom panel showing the raw gfortran output.
▶ Building umat_plasticity.f90… gfortran -O2 -Wall -fcheck=all -o /tmp/jacobi_out umat_plasticity.f90 ✓ Compiled successfully (0.42s) ─── or, on error ─── umat_plasticity.f90:47:18: error: 'DLMA' is not a member of DLMA = DLMA + DF / DENOM ^ → Click to jump to line 47
Error navigation
Every error line in the Build Console is clickable — clicking it moves the cursor to the exact file and line in the editor. The squiggle appears on the offending token, not just the line.
Integrated Terminal
A full PowerShell (Windows) or bash (macOS/Linux) terminal embedded in the bottom panel. Runs in the directory of the active file.
PS C:\subs> gfortran --version GNU Fortran (GCC) 13.2.0 PS C:\subs> gfortran -c umat_plasticity.f90 -o umat.o (no output = success) PS C:\subs> nm umat.o | grep umat 0000000000000000 T umat_
Open via the Terminal tab in the bottom panel, or Ctrl+`.
Single-Point RVE Test Runner
The heart of Jacobi. Each test generates a standalone Fortran program that calls your subroutine with known inputs, then checks the outputs against analytical solutions from the computational mechanics literature.
Configuring material parameters
Before running, set your material constants in the parameter bar at the top of the Tests tab. These values are injected into the Fortran driver's PROPS array.
| Parameter | Description | Used by |
|---|---|---|
E | Young's modulus (MPa) | UMAT, VUMAT, UEL |
nu | Poisson's ratio | UMAT, VUMAT, UEL |
sy | Initial yield stress (MPa). Also used as σ_ref in CREEP tests | UMAT, VUMAT, UHARD, CREEP |
Steps | Number of strain increments in the sweep | All |
dEps/step | Strain increment per step. Also sets DTIME = dEps × 1000 for CREEP | All |
UMAT Tests — 15 Physics Checks
Auto-detected when your file contains a SUBROUTINE UMAT signature. Tests cover elastic constants, plasticity, tangent stiffness, and thermodynamic consistency.
Elastic constants
| ID | Test | What is tested | Reference |
|---|---|---|---|
| A | Uniaxial stiffness | DDSDDE(1,1) · DSTRAN(1) vs analytical C₁₁₁₁ |
de Souza Neto §4.3.2 |
| B | Lateral confinement | DDSDDE(1,2) vs C₁₁₂₂ = Eν/((1+ν)(1−2ν)) |
de Souza Neto §4.3.2 |
| C | Shear modulus | DDSDDE(4,4) vs G = E/2(1+ν) |
de Souza Neto §4.3.2 |
| D | Bulk modulus | Volumetric sum vs K = E/3(1−2ν) | de Souza Neto §4.3.1 |
Plasticity
| ID | Test | What is tested | Reference |
|---|---|---|---|
| E | J2 hydrostatic neutrality | Hydrostatic compression stays elastic — STRESS components equal | de Souza Neto §8.2.1 |
| F | Von Mises yield onset | √(3J₂) reaches SYIELD at the correct strain step | de Souza Neto §7.2.1 |
| G | Elastic unloading slope | After yielding, unloading slope returns to C₁₁₁₁ | de Souza Neto §7.3.1 |
| K | Plastic incompressibility | tr(dε_p) = dεp₁₁+dεp₂₂+dεp₃₃ ≈ 0 in plastic regime | de Souza Neto §8.2.3 |
| L | Yield surface return accuracy | f(σ,q) ≈ 0 after return-mapping — closest-point projection | Simo & Hughes §3.6.1 |
| M | Flow direction normality | dεp₂₂/dεp₁₁ → −0.5 (Prandtl-Reuss, J2 associativity) | de Souza Neto §8.2.3 |
| N | Drucker stability | σ:dεp ≥ 0 — non-negative plastic dissipation | de Souza Neto §6.2 |
| O | Cyclic / Bauschinger | Compressive re-yield ≥ 0.9·σ_y0 — hardening sign on reverse load | de Souza Neto §12.2 |
Tangent stiffness
| ID | Test | What is tested | Reference |
|---|---|---|---|
| H | Zero increment consistency | DSTRAN=0 → |DSTRESS| < 1e-8 and DDSDDE unchanged | de Souza Neto §7.5 |
| I | DDSDDE FD check | DDSDDE vs dSTRESS/dDSTRAN via finite difference — consistent tangent | de Souza Neto §7.6.1, Simo & Hughes §3.5.3 |
| J | DDSDDE symmetry | DDSDDE(i,j) = DDSDDE(j,i) — major symmetry of C | de Souza Neto §4.3.2 |
VUMAT Tests
For Abaqus/Explicit user material subroutines. VUMAT operates on a block of material points (NBLOCK), uses engineering shear strain (γ/2, not γ), and updates stressNew and enerInternNew in-place.
| Test | Testing | Reference |
|---|---|---|
| A — Uniaxial elastic modulus | stressNew(1) = stressOld(1) + C₁₁₁₁·strainInc(1) | de Souza Neto §8.2.1 |
| B — Shear modulus G | stressNew(4..6) from strainInc(4..6) — note: engineering shear γ/2 | de Souza Neto §4.3.2 |
| C — Bulk modulus K | Mean stress from volumetric strain | de Souza Neto §4.3.1 |
| D — Elastic unloading slope | Slope of stressNew(1) during unloading after plastic loading = E | Lubliner §4.3 |
| Energy — 2nd law | enerInternNew(k) ≥ enerInternOld(k) every increment | de Souza Neto §6.1 |
UEL Tests
Tests a 4-node plane-strain element (NDOFEL=8) with 2×2 Gauss integration. The three classical element validation tests from the FEM literature.
| Test | Testing | Reference |
|---|---|---|
| A — AMATRX symmetry | max|AMATRX(i,j) − AMATRX(j,i)| < 1e-10 | Cook, Malkus & Plesha §3.5 |
| B — Rigid body null space | max|RHS| < 1e-6 under unit rigid-body translation (K·u_rigid = 0) | Bathe (1996) §4.3 |
| C — Patch test | Element reproduces constant strain field exactly — completeness check | Irons & Razzaque (1972) |
| D — Positive diagonals | min(AMATRX(i,i)) > 0 — necessary for positive definiteness | Cook §2.4 |
UHARD Tests
Tests the isotropic hardening law. UHARD must return SYIELD (current yield stress) and HARD(1) (dσ_y/dε̄_p, the tangent hardening modulus used in the return-mapping denominator).
| Test | Testing | Reference |
|---|---|---|
| A — Initial yield | SYIELD at EQPLAS=0 equals σ_y0 from material parameters | Abaqus Manual §26.2.1 |
| B — Monotonicity | SYIELD non-decreasing across all steps (Drucker stability) | Lubliner §5.3 |
| C — HARD(1) FD consistency | HARD(1) vs central-difference (SYIELD(ε+δ)−SYIELD(ε−δ))/2δ | Simo & Hughes §3.5.2 |
CREEP Tests
Tests against a Norton-Bailey power law (Δε_cr = A·σ̄ⁿ·DTIME). The driver sets A=1e-10, n=3, and uses σ_ref from the material parameter bar.
| Test | Testing | Reference |
|---|---|---|
| A — Non-negativity | DECRA(1) ≥ 0 for any QTILD ≥ 0 | Lemaitre & Chaboche §6.1.1 |
| B — Norton-Bailey accuracy | DECRA(1) vs A·QTILD^n·DTIME — relative error < 0.01% | Abaqus Benchmark §3.2.6 |
| C — Rate sensitivity | DECRA(1) at 2σ / DECRA(1) at σ = 2^n exactly | Bailey (1935) |
| D — Zero stress | DECRA(1) = 0 when QTILD = 0 | Norton (1929) |
SUBROUTINE CREEP(DECRA, DESWA, STATEV, SERD, EC, ESW, P, QTILD, & TEMP, DTEMP, PREDEF, DPRED, TIME, DTIME, ...) IMPLICIT REAL*8(A-H,O-Z) A_CR = PROPS(1) ! Coefficient A N_CR = PROPS(2) ! Stress exponent n IF (QTILD .LE. 0.0D0) THEN DECRA(1) = 0.0D0 ! Test D: zero stress → zero creep DECRA(5) = 0.0D0 RETURN END IF ! Norton-Bailey: Δε_cr = A * σ_bar^n * DTIME DECRA(1) = A_CR * QTILD**N_CR * DTIME DECRA(5) = A_CR * N_CR * QTILD**(N_CR - 1.0D0) * DTIME END SUBROUTINE
Test History
Every test run is automatically saved with its material parameters, pass/fail results, and AI analysis text. Browse previous runs via the History tab.
Use Export Test Report in the AI Analysis section to generate a self-contained HTML report you can share with a colleague or attach to a paper submission. The report includes all charts, test results, and the AI diagnostic text.
AI Diagnostics Claude Sonnet
After running tests, click Analyze with AI. Jacobi sends only the failing tests to Claude Sonnet — with measured values, expected values, and canonical textbook references embedded — and receives a structured per-failure diagnosis.
What the AI receives
The prompt is built dynamically from your actual results. If 3 of 15 UMAT tests fail, the AI sees only those 3, each with:
- The test name and its canonical reference (e.g. de Souza Neto §7.6.1 eq 7.7.5)
- Your measured value vs the expected value
- The suspect Fortran variable name (e.g.
DDSDDE(1,1))
What the AI returns
For each failing test, the response is structured in three parts:
## Test I — DDSDDE finite-difference check Physical meaning: Your DDSDDE is the elastic stiffness C_e in all cases. In the plastic regime, Abaqus/Standard uses DDSDDE to form the global stiffness matrix. Returning C_e instead of the algorithmic consistent tangent C_ep causes only linear convergence instead of quadratic — your jobs will take 5-10× more iterations to converge. Reference: de Souza Neto §7.6.1, Simo & Hughes (1998) §3.5.3. Most likely variable: DDSDDE(I,J) in your plastic branch. You are probably assigning the elastic values and not applying the plastic correction: C_ep = C_e - (C_e:n ⊗ n:C_e) / (H + n:C_e:n) Suggested fix: ! After computing DLAM and the flow direction RNORM, add: FACN = 1.0D0 / (HMOD + 3.0D0*GMOD) DO I = 1, NTENS DO J = 1, NTENS DDSDDE(I,J) = DDSDDE(I,J) - 2.0D0*GMOD*2.0D0*GMOD * FACN & * DEVS(I) * DEVS(J) / SMISES**2 END DO END DO
AI Code Completion Copilot-style
Ghost-text completions appear as you type in the editor, trained on Fortran patterns and Abaqus UMAT conventions. Press Tab to accept.
! You type: SMISES = SQRT(1.5D0* ! AI suggests (ghost text in grey): SMISES = SQRT(1.5D0*DOT_PRODUCT(DEVS,DEVS))
Completions are context-aware — they read the current subroutine type, declared variables, and surrounding code before generating.
Calibration Panel
Fit material parameters (E, ν, σ_y, H) to experimental data using least-squares optimisation. Paste stress-strain CSV data and the panel solves for the best-fit PROPS values.
Step Inspector
Full per-increment state viewer. Shows every STRESS, STATEV, DDSDDE, DSTRAN, and STRAN value at every increment of the last test run. Useful for tracking down subtle integration errors that summary pass/fail metrics miss.
Step 12 EQPLAS = 0.0120 Phase: plastic STRESS [ 312.4 -156.2 -156.2 0.0 0.0 0.0 ] MPa DSTRAN [ 1.00e-4 -4.30e-5 -4.30e-5 0 0 0 ] STATEV [ 0.0120 312.4 0.0 … ] (EQPLAS) (SYIELD) DDSDDE (6×6): 221.4 110.7 110.7 0 0 0 110.7 221.4 110.7 0 0 0 ... ← plastic tangent, not elastic (C_ep ≠ C_e) ✓
STATEV Manager
Documents your solution-dependent state variables. Map each STATEV(i) slot to a name, unit, and description. The mapping is saved with the project and shown in the Step Inspector.
STATEV(1) EQPLAS Equivalent plastic strain [—] STATEV(2) SYIELD Current yield stress [MPa] STATEV(3) ALPHA1 Backstress component 11 [MPa] STATEV(4) ALPHA2 Backstress component 22 [MPa] STATEV(5) ALPHA3 Backstress component 33 [MPa] STATEV(6) ALPHA4 Backstress component 12 [MPa]
Hardening Curve Editor
Visual editor for piecewise-linear hardening data. Plot your σ_y vs ε̄_p table, interpolate, and export directly as Fortran DATA statements or as Abaqus *PLASTIC keyword input.
.inp File Viewer
Parse and display Abaqus .inp files — nodes, elements, sections, boundary conditions, steps, and material blocks. Useful for checking that the UMAT is being called with the correct PROPS, NSTATV, and NTENS values.
Convergence Log
Parses Abaqus .msg and .dat files to visualise Newton iteration counts, residual norms, and cutbacks. Helps correlate test failures (especially DDSDDE) with real-simulation convergence behaviour.
Subroutine Reference
All Abaqus subroutine types recognised by Jacobi. Hover any subroutine name in the editor to see its full argument list and description.
Abaqus/Standard
Abaqus/Explicit
Keyboard Shortcuts
File & Editor
Build & Test
Editor (Monaco standard)
Export & Reports
After running tests and clicking Analyze with AI, use Export Test Report to generate a self-contained HTML document containing:
- Material parameters used
- All 35 test results with pass/fail and measured values
- Charts for every test with a numeric output
- The full AI diagnostic text, including suggested Fortran fixes
- Literature references for each test
The HTML file is fully self-contained (no external dependencies) and can be attached to a paper, sent to a reviewer, or archived alongside the subroutine source.