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 — 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 — with full numerical context — 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.

Platform

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 — subroutine loading, test harness, AI diagnosis, language support — 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 — run simulations via your solver license, switch solvers without code changes
Active
In development
Roadmap
Language Fortran C / C++ Python MATLAB
Workflow

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 — stresses, strains, errors, pass/fail — 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 — 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 — 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 & S11**2+S22**2+S33**2 21 & +2.D0*(S12**2+S13**2+S23**2))) 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…  —  Tab to accept  ·  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 — every stress component, error magnitude, pass/fail flag, and derived quantity — and sends it to Claude Haiku along with your material parameters.

What comes back is a physics-first diagnosis. Not “check line 42” — but “your plastic flow normal has a volumetric component that shouldn’t be there for J2, here’s why, here’s where.”

Continuum mechanics grounding

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

Textbook citations included

Every diagnosis cites the specific chapter: de Souza Neto, Simo & Hughes, Belytschko — 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 — no proxy, no server, fractions of a cent per run.

J
Claude — UMAT Diagnosis ● live
Test results passed to Claude
PASSA — Uniaxial C₁₁₁₁err 0.021%
FAILK — Incompressibility1.2e‑6
FAILI — DDSDDE FD check3.4%
K — Plastic incompressibility failure

J2 plasticity requires isochoric plastic flow: tr(dεp) = 0. Your |ε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 — only shear terms should change.
de Souza Neto, Perić & Owen §8.2.3  •  Simo & Hughes §3.6
Test Suite

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.

Elastic Constants 4 tests
J2 Plasticity 5 tests
Tangent Stiffness 3 tests
AUniaxial strain — C₁₁₁₁σ₁₁ = C₁₁₁₁ · ε₁₁Normal stiffnessPASS
BLateral confinement — C₁₁₂₂σ₂₂ = C₁₁₂₂ · ε₁₁Poisson couplingPASS
CSimple shear — Gτ₁₂ = G · γ₁₂Shear modulusPASS
DHydrostatic loading — Kσm = K · ε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 accuracyvm−σy|/σy<1%Return precisionPASS
HZero increment consistency|Δσ| < 1e‑6Null incrementPASS
IDDSDDE finite-difference check|C − dσ/dε| < 1%Tangent accuracyFAIL
JDDSDDE symmetry|Cij−Cji|<1e‑6Matrix symmetryPASS
Test History & Analytics

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 · AI diagnosis: NHAT computation
10 PASS2 FAIL
kinematic_hardening.f9012/12 passed · All tests green
12 PASS
drucker_prager.f7/12 passed · AI diagnosis: cap yield surface
7 PASS5 FAIL
elastic_j2_umat.f11/12 passed · FD tolerance fixed
11 PASS1 FAIL
Code Editor

Write Fortran the way it was meant to be written

Monaco editor — the same engine as VS Code — 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 — 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*(S11**2+S22**2+S33**2
 9     &        +2.D0*(S12**2+S13**2+S23**2)))
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 ν. Jet colormap tracks σ₁₁ through elastic and plastic regimes.

Shear

Parallelogram distortion

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

Hydrostatic

Uniform isotropic compression

Equal strain in all directions. Von Mises stress stays zero — 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  ·  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 — x86_64 — ~15 MB
macOS
Coming soon
Linux
Coming soon
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 build next.
Share feedback Report a bug