AI News HubLIVE
In-site rewrite6 min read

Show HN: Jacobi–IDE for Abaqus subroutine with analytical tests and AI diagnosis

Jacobi is an IDE for writing physics simulation subroutines (UMAT, VUMAT, etc.) for Abaqus and other solvers. It runs tests against analytical solutions and uses Claude for AI diagnosis, helping developers get correct constitutive behavior faster.

SourceHacker News AIAuthor: white_tiger

Jacobi — Abaqus Subroutine IDE

Physics Simulation Subroutines

Jacobi

An IDE for physics simulation subroutines. Write Fortran, C++, or Python, test against closed-form analytical solutions, get an AI diagnosis — built for Abaqus today, designed for the full simulation ecosystem.

Download for Windows

gfortran required

Windows 10 / 11

Open source

✓ AI Completion ✓ Test Marketplace ✓ AI Diagnosis ✓ Hover Docs ✓ Go-to-Definition ✓ 12 Templates ✓ 20 Themes ✓ Static Analysis COMSOL Nastran

jacobi — test runner

$ jacobi run elastic_j2.f

Compiling with gfortran -O2 -Wall...

Running 12 physics tests

✓ A Uniaxial C₁₁₁₁ err: 0.021%

✓ B Lateral C₁₁₂₂ err: 0.008%

✓ C Shear G err: 0.000%

✓ D Bulk K err: 0.031%

✓ E J2 neutrality 20/20 steps

✓ F Yield onset step 8 ✓

✓ G Elastic unload C₁₁₁₁ ok

✗ K Incompressibility 1.2e‑6 > tol

✓ L Yield return err: 0.04%

✓ H Zero increment |dσ|=1e‑14

✗ I DDSDDE FD 3.4% > 1% tol

✓ J DDSDDE symmetry |C-Cᵀ|=8e‑15

10 passed · 2 failed — sending to Claude...

Claude: Plastic flow has volumetric

component. Check NHAT...

$

30+

Physics tests across UMAT, VUMAT, UEL, UHARD, and CREEP subroutine types

8

Bundled community tests in the marketplace — install, run, or author your own

<5s

Full cycle &mdash; source to test results to AI diagnosis

20

Editor color themes from Tokyo Night to Rosé Pine to GitHub Dark

Why Jacobi

Subroutine development without the guesswork

Writing a constitutive subroutine means implementing a return-mapping algorithm, assembling a consistent tangent, and satisfying physical constraints the solver never explicitly checks. When a simulation diverges, the error message tells you nothing.

Jacobi runs your subroutine against fifteen closed-form analytical solutions and tells you exactly which one failed and by how much. Then Claude &mdash; with full numerical context &mdash; explains the physical cause and where in your code to look.

It is not a general-purpose editor. It does one thing: get your subroutine to physically correct behavior faster — across solvers, across languages.

Solver-agnostic from the ground up

Jacobi targets the physics simulation ecosystem, not a single solver. The current release ships deep Abaqus integration. The architecture &mdash; subroutine loading, test harness, AI diagnosis, language support &mdash; is designed to extend. COMSOL, Nastran, and LS-DYNA integrations are in development.

The long-range goal: run any simulation from within Jacobi using your existing solver license, switching solvers without modifying your subroutine code.

ABAQUS COMSOL NASTRAN LS-DYNA OPENFOAM

Subroutine support

Physics test suite

AI diagnosis

Direct solve &mdash; run simulations via your solver license, switch solvers without code changes

Active

In development

Roadmap

Language Fortran C / C++ Python MATLAB

Three steps from source to diagnosis

01

Write your UMAT

Open any .f, .f90, .cpp, or .c file in the Monaco editor. Fortran and C/C++ syntax highlighting, static analysis, AI inline completion, and subroutine detection run automatically. No project setup required.

Monaco + Claude

02

Run the test suite

Click Run Tests. Jacobi compiles a single-element driver, links your subroutine, applies prescribed strain increments across 15 scenarios, and compares each result to its closed-form analytical answer.

gfortran driver

03

Get AI diagnosis

All fifteen numerical results &mdash; stresses, strains, errors, pass/fail &mdash; are sent to Claude. You get a physics-first explanation of every failure, with the specific variable and equation at fault, plus textbook references.

Claude Haiku

What's in v0.1

Everything you need to ship a correct subroutine

🧪

Test Marketplace

8 bundled community tests for UMAT. Browse, install, run against your open file. Author your own, export as .jtest, share with your team.

📖

Hover Documentation

Hover any Abaqus argument — STRESS, DDSDDE, STATEV — to see its type, dimensions, I/O direction, and a physics description. Fortran intrinsics documented inline too.

🔍

Go-to-Definition

F12 or single-click any variable, parameter, or subroutine to jump to where it's defined. Works within the file with Monaco's full navigation experience.

📄

12 Subroutine Templates

UMAT, VUMAT, UEL, UHARD, CREEP, UMATHT and more — each pre-filled with the full signature, correct IMPLICIT declarations, and inline physics comments.

📐

Calibration & Step Inspector

Fit material parameters to experimental data in the Calibration Panel. Step Inspector shows the full per-increment state — stress, strain, STATEV — after every test run.

📂

.inp & Convergence Tools

Parse Abaqus .inp files to browse steps, materials, and boundary conditions. Import .msg/.dat logs to visualize convergence history.

AI Inline Completion

Ghost text that knows Fortran mechanics

As you type, Jacobi sends the prefix and suffix of your code to Claude. The model is prompted with your subroutine type, fixed vs. free form flag, and surrounding context. What comes back appears as translucent ghost text &mdash; Tab to accept.

This isn't token-prediction autocomplete. The model understands that DDSDDE must be symmetric, that NHAT should be deviatoric for J2, and that STATEV indexing is subroutine-specific.

Alt+\ to trigger manually

Don't want ghost text on every keystroke? Trigger on demand. The suggestion appears inline in the editor, no popup, no distraction.

Subroutine-aware context

Jacobi detects which subroutine the cursor is in (UMAT, VUMAT, USDFLD, CREEP) and tells Claude, so completions respect each signature's conventions.

Your key, direct to Anthropic

Enter your Anthropic key once. Every call goes directly from the desktop app to the Anthropic API &mdash; no proxy, no telemetry, fractions of a cent per request.

elastic_j2_umat.f AI ●

18C Compute von Mises stress 19 SMISES = SQRT(1.5D0*( 20 & S112+S222+S332 21 & +2.D0*(S122+S132+S232))) 22 IF (SMISES .GT. SYIELD) THEN 23C Return-mapping: radial direction 24 DLAM = (SMISES-SYIELD)/(3.D0*GMOD) 25 DO I=1,3 26 NHAT(I) = S1(I)/(SMISES/1.5D0)▁ 27 STRESS(I) = STRESS(I) - 2.D0*GMOD*DLAM*NHAT(I) 28 END DO

Claude is suggesting&hellip; &mdash; Tab to accept &middot; Esc to dismiss

AI Diagnosis

Claude reads your test results, not just your code

After the test suite finishes, Jacobi assembles the full numerical context &mdash; every stress component, error magnitude, pass/fail flag, and derived quantity &mdash; and sends it to Claude Haiku along with your material parameters.

What comes back is a physics-first diagnosis. Not &ldquo;check line 42&rdquo; &mdash; but &ldquo;your plastic flow normal has a volumetric component that shouldn&rsquo;t be there for J2, here&rsquo;s why, here&rsquo;s where.&rdquo;

Continuum mechanics grounding

Diagnoses reference return-mapping algorithms, Voigt notation, isochoric flow, and consistent tangent derivation &mdash; not generic debugging advice.

Textbook citations included

Every diagnosis cites the specific chapter: de Souza Neto, Simo & Hughes, Belytschko &mdash; so you can go to the source if needed.

Your API key, your data

Add your Anthropic key once in the toolbar. Calls go directly from the app to the Anthropic API &mdash; no proxy, no server, fractions of a cent per run.

J

Claude &mdash; UMAT Diagnosis ● live

Test results passed to Claude

PASSA &mdash; Uniaxial C₁₁₁₁err 0.021%

FAILK &mdash; Incompressibility1.2e‑6

FAILI &mdash; DDSDDE FD check3.4%

K &mdash; Plastic incompressibility failure

J2 plasticity requires isochoric plastic flow: tr(d&epsilon;p) = 0. Your |&epsilon;pv| = 1.2e‑6 after yield means the return step is shifting hydrostatic stress.

Most likely cause: STRESS(1)+STRESS(2)+STRESS(3) is modified inside the plastic correction. For J2 the flow normal is purely deviatoric &mdash; only shear terms should change.

de Souza Neto, Perić & Owen &sect;8.2.3 &bull; Simo & Hughes &sect;3.6

What gets checked, and how

Each test calls your subroutine directly, applies a prescribed strain increment, and compares the result to the closed-form analytical answer. Tolerances match standard FE solver convergence criteria. All 15 results are fed to Claude for diagnosis.

AUniaxial strain &mdash; C₁₁₁₁σ₁₁ = C₁₁₁₁ &middot; ε₁₁Normal stiffnessPASS

BLateral confinement &mdash; C₁₁₂₂σ₂₂ = C₁₁₂₂ &middot; ε₁₁Poisson couplingPASS

CSimple shear &mdash; Gτ₁₂ = G &middot; γ₁₂Shear modulusPASS

DHydrostatic loading &mdash; Kσm = K &middot; εvBulk modulusPASS

EJ2 hydrostatic neutralityσvm = 0 under PNo pressure yieldPASS

FVon Mises yield onsetεy = σy / 2GOnset detectionPASS

GElastic unloading slopedσ/dε|unload = C₁₁₁₁Unload linearityPASS

KPlastic incompressibilitytr(dεp) = 0Isochoric flowFAIL

LYield surface return accuracy|σvm&minus;σy|/σy<1%Return precisionPASS

HZero increment consistency|Δσ| < 1e‑6Null incrementPASS

IDDSDDE finite-difference check|C &minus; dσ/dε| < 1%Tangent accuracyFAIL

JDDSDDE symmetry|Cij&minus;Cji|<1e‑6Matrix symmetryPASS

Track progress run by run

47

Total runs

83%

Pass rate

3

Files tested

Tests passed vs. failed per run (last 8)

run 1

run 2

run 3

run 4

run 5

run 6

run 7

now

Passed

Failed

Recent runs

elastic_j2_umat.f10/12 passed &middot; AI diagnosis: NHAT computation

10 PASS2 FAIL

kinematic_hardening.f9012/12 passed &middot; All tests green

12 PASS

drucker_prager.f7/12 passed &middot; AI diagnosis: cap yield surface

7 PASS5 FAIL

elastic_j2_umat.f11/12 passed &middot; FD tolerance fixed

11 PASS1 FAIL

Code Editor

Write Fortran the way it was meant to be written

Monaco editor &mdash; the same engine as VS Code &mdash; with full Fortran syntax highlighting, fixed-form and free-form ruler support, and jump-to-error navigation from the test results panel.

Static analysis flags uninitialized variables and undefined symbols inline, before compilation. 20 built-in themes including Tokyo Night, Rosé Pine, Kanagawa, and GitHub Dark.

Fixed & free form

20 themes

Live diagnostics

gfortran squiggles

Subroutine detection

AI ghost text

Hover docs

Go-to-definition

Integrated terminal

elastic_j2_umat.f &mdash; Jacobi

1C J2 Isotropic Plasticity UMAT 2 SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,...) 3 IMPLICIT REAL*8 (A-H,O-Z) 4 EMOD = PROPS(1) 5 ANU = PROPS(2) 6 SYIELD = PROPS(3) 7 GMOD = EMOD / (2.D0*(1.D0+ANU)) 8 SMISES = SQRT(1.5D0*(S112+S222+S332 9 & +2.D0*(S122+S132+S232))) 10 IF (SMISES .GT. SYIELD) THEN 11 DLAM = (SMISES-SYIELD) / (3.D0*GMOD) 12 DO I = 1, 3 13 STRESS(I) = STRESS(I) - 2.D0*GMOD*DLAM*NHAT(I) 14 END DO 15 END IF

σvm = 0peak stress

FEM Visualization

Deformation you can see, not just numbers

Uniaxial

Extension with Poisson contraction

Mesh stretches in load direction, contracts laterally at rate &nu;. Jet colormap tracks σ₁₁ through elastic and plastic regimes.

Shear

Parallelogram distortion

Pure shear without volumetric change. Verifies the G = E/2(1+&nu;) relationship geometrically.

Hydrostatic

Uniform isotropic compression

Equal strain in all directions. Von Mises stress stays zero &mdash; the J2 neutrality test, visualized.

Scrub

Frame-by-frame load history

Drag the step slider to inspect any point in the loading history. Ghost outline marks the original configuration.

Download

Get Jacobi

A single installer. No configuration. Requires gfortran on your PATH for test execution. Add your Anthropic API key in the toolbar to enable AI diagnosis and inline completion.

Download for Windows

v0.1.0 beta &middot; Windows 10/11 x64

Windows may show a SmartScreen warning — click More info → Run anyway.

Install gfortran first: winlibs.com (recommended) or MinGW-w64.

Windows

Windows 10 / 11 &mdash; x86_64 &mdash; ~15 MB

macOS

Coming soon

&minus;

Linux

Coming soon

&minus;

Built on Tauri v2. AI features require an Anthropic API key. Questions? Get in touch.

Using Jacobi? We're collecting early feedback to prioritize what to buil

[truncated for AI cost control]