AutoMOOSE: An Agentic AI for Autonomous Phase-Field Simulation
Organizations: Department of Mechanical and Industrial Engineering, University of Illinois Chicago, Chicago, IL 60607, USA · Center for Nanoscale Materials, Argonne National Laboratory, Lemont, IL 60439, USA
Abstract
Phase-field modeling links thermodynamics and kinetics to microstructural evolution, but multiphysics frameworks such as MOOSE require expertise to construct inputs, manage campaigns, diagnose failures, and validate results. We introduce AutoMOOSE, an open-source multi-agent framework that orchestrates the simulation lifecycle from a single natural-language prompt. Six specialized agents--Architect, Input Writer, Runner, Reviewer, Visualization, and a physics-grounded Skeptic--generate, execute, analyze, and adversarially test simulations against conservation laws, asymptotic limits, and scaling relations. We validate AutoMOOSE in two domains: non-conserved copper grain growth governed by Allen-Cahn dynamics and conserved Fe-Cr spinodal decomposition governed by Cahn-Hilliard dynamics. On a prospectively specified 25-task grain-growth benchmark spanning temperature, grain count, resolution, and model formulation, AutoMOOSE generates valid inputs for all 25 tasks, completes 19 simulations with measurable coarsening, and delivers 15 results that satisfy Burke-Turnbull kinetics () and survive Skeptic falsification. The failures trace to two identifiable generator defects. An ensemble of 1000 simulations recovers the prescribed activation energy to within 1% after finite-size extrapolation ( eV versus eV). In the conserved domain, an agent-generated CALPHAD-based Fe-Cr simulation limits relative mass drift to , dissipates free energy to a stable plateau, and evolves toward the equilibrium tie-line. Controlled ablations show that the full pipeline converts stochastic raw generation--3-7 successful tasks out of 8 across repeated trials--into consistent success on all 8 tasks. AutoMOOSE therefore provides a practical route from natural-language specification to reproducible, physics-validated phase-field simulation campaigns.
Figures & tables
| Backend | Weights | Hosting | Pipeline (end-to-end) |
|---|---|---|---|
| Claude Sonnet 4.6 | Closed | Provider API | completes |
| Qwen2.5-32B-Instruct | Open | Self-hosted (Perlmutter, vLLM, 4 A100) | completes |
| Sub-agent | MOOSE blocks | Key parameters set | Depends on |
|---|---|---|---|
| (a) Mesh | [Mesh] | / / , / / , elem_type (QUAD4 or HEX8), parallel_type ; enforces | , , dim from |
| (b) Variables | [GlobalParams] , [Variables] , [ICs] , [AuxVariables] | op_num , fields, Voronoi or Random IC; bound_value (LinearizedInterface) | , from (a) |
| (c) Kernels | [Kernels] , [AuxKernels] | GrainGrowth or GrainGrowthLinearizedInterface module [ 7 ] ; BndsCalcAux , FeatureFloodCountAux | op_num , from (b) |
| (d) Materials | [Materials] , [UserObjects] | , , via Eq. ( 4 ) [ 5 ] ( GBEvolution ) or parsed / / ( LinearizedInterface ); PolycrystalVoronoi , GrainTracker | from ; mesh from (a) |
| (e) Postprocessors | [Postprocessors] | TimestepSize , NumDOFs , NumElements | Variables from (b) , UserObjects from (d) |
| (f) Executioner | [Executioner] , [BCs] , [Adaptivity] , [Outputs] | PJFNK [ 25 ] , bdf2 , IterationAdaptiveDT , , , periodic BCs, AMR, CSV | , from |
| Tool | Class | Description |
|---|---|---|
| health_check | Verify server and backend availability | |
| list_plugins | Enumerate registered plugins and their status | |
| generate_input | Render a MOOSE .i file via the plugin registry | |
| run_simulation | Launch a single MOOSE job; return run identifier | |
| run_sweep | Fan out a parametric sweep; return run identifiers | |
| get_run_status | Query the terminal or running state of a job |
| Agent | Stage | 1 st -attempt | Key metric |
|---|---|---|---|
| Architect | Intent parsing | 1/1 | Correct sweep intent, formulation, BCs |
| Input Writer | .i file generation | 4/4 | 6/12 blocks exact match (Section 3.4 ) |
| Runner | Parallel execution | 4/4 | s ( vs. serial, scheduling only) |
| Reviewer | Completion screen | — | 3/3 failed runs flagged (Section 3.7 ) |
| Visualization | Kinetics extraction | 4/4 | – at K (Section 3.5 ) |
| End-to-end | 4/4 | Prompt kinetics analysis: min | |
| (K) | Timesteps | DOFs (peak) | Wall time (s) | |
| 300 | 31 | 15 | 260,124 | 509 |
| 450 | 85 | 13 | 261,862 | 4,165 |
| 600 | 306 | 6 | 261,086 | 13,768 |
| 750 | 602 | 3 | 260,832 | 22,820 |
| Serial total | 41,261 | |||
| Concurrent (bounded by slowest run) | 22,820 | |||
| Regime | G1 | G2 | G3 | G4 | G5 | Valid & runs | Full | |
|---|---|---|---|---|---|---|---|---|
| Core ( , sweep) | 8 | 8 | 8 | 8 | 6 | 8 | 8/8 | 6/8 |
| Resolution / domain | 4 | 4 | 4 | 4 | 4 | 4 | 4/4 | 4/4 |
| Formulation (Lin. Interface) | 4 | 4 | 0 | 4 | 3 | 4 | 0/4 | 0/4 |
| Robustness (seeds) | 4 | 4 | 4 | 4 | 2 | 4 | 4/4 | 2/4 |
| 3D | 2 | 2 | 0 | 0 | 0 | 1 | 0/2 | 0/2 |
| High- stress | 2 | 2 | 2 | 2 | 2 | 2 | 2/2 | 2/2 |
| Invariant | Value |
|---|---|
| Relative Cr-mass drift | |
| Free-energy decrease | 0.4% |
| Energy monotone (transient increasing steps) | within tol. (15) |
| Final Cr range | |
| Cr-rich precipitates (final) | 1 |
| Structural completeness (all 12 blocks present & valid) | |||
|---|---|---|---|
| Set | blocks present | blocks valid | |
| AutoMOOSE-generated | 1000 | 12/12 | 12/12 |
| Human reference | 100 | 12/12 | 12/12 |
| Content agreement, 100 matched pairs (per block, over 100 pairs) | |||
| Block | exact | approx | differs |
| Mesh, UserObjects, ICs, Modules | 100 | 0 | 0 |
| Block | Key parameter / setting | Human | AutoMOOSE |
| [Mesh] | nx/ny = 44 vs. 12 ; uniform_refine | ✓ | |
| [GlobalParams] | op_num = 8 vs. 15 ; var_name_base | ✓ | |
| [UserObjects] | PolycrystalVoronoi + GrainTracker | ✓ | ✓ |
| [ICs] | PolycrystalColoringIC | ✓ | ✓ |
| [Modules] | GrainGrowth phase-field module | ✓ | ✓ |
| [AuxVariables] | bnds , unique_grains , var_indices | ✓ | ✓ |
| AutoMOOSE | Human-written | |||||
|---|---|---|---|---|---|---|
| (K) | ( ns -1 ) | ( ns -1 ) | ||||
| 300 | 15 | suppressed | 15 | suppressed | ||
| 450 | 13 | 13 | ||||
| 600 | 6 | 7 | ||||
| 750 | 3 | 4 | ||||
| Quantity | AutoMOOSE | Human-written |
|---|---|---|
| Slope (K) | ||
| (eV) | ||
| Input (eV) | ||
| Class | Error | Root cause | Correction |
|---|---|---|---|
| I | Duplicate object name in registry | GrainTracker declared in both [UserObjects] and [Postprocessors] | Remove [Postprocessors] entry |
| II | Duplicate key in [Executioner] | solve_type = PJFNK emitted twice by Executioner sub-agent | Deduplicate output template |
| III | Unused parameter abort | interval not recognised in [Outputs/exodus] | Remove interval parameter |
| Condition | G1 strict | G1 lenient |
|---|---|---|
| Raw entries: mean (min–max) over 3 independent runs. | ||
| AutoMOOSE plugin | 8/8 | 8/8 |
| raw Opus 4.8 (claude-opus-4-8) | 5.0 (3–7)/8 | 5.3 (3–8)/8 |
| raw Sonnet 4.6 (claude-sonnet-4-6) | 0.3 (0–1)/8 | 2.0 (1–3)/8 |
| raw GPT-4o (gpt-4o) | 0/8 | 0/8 |
| File | Lines | Language | Role |
| plugin.py | 655 | Python | GrainGrowth plugin: implements generate_input(**params) str and parse_results(csv) dict . Replace to add new physics. |
| server.py | 375 | Python | FastAPI backend: agent orchestration, sweep threading, Server-Sent Events (SSE) log streaming, record.json writer, Model Context Protocol (MCP) server (ports 8000 and 8001). |
| App.jsx | 1,143 | React | Browser frontend: Chat, Configure, Input File, Live Log, Results, and Run Sidebar panels (Vite/Tailwind build). |
| mcp_server.py | 210 | Python | Standalone MCP server exposing 10 tools (Table S15 ); supports stdio and SSE transports. |
| plugin_registry.py | 48 | Python | Dynamic plugin loader; scans plugins/ and registers generate_input / parse_results contracts at startup. |
| skeptic.py | — | Python | Skeptic agent ( ): physics-grounded falsification battery (grain-growth invariants – , conserved-dynamics invariants – ); dispatches the invariant set appropriate to the governing equations and emits a credible/falsified verdict with diagnosis. |
| Tool | Stage | Description and key arguments |
|---|---|---|
| health_check | — | Server status, MOOSE executable path, API key validity. |
| list_plugins | — | Registered plugins with status and supported formulations. |
| generate_input | Renders .i file from parameter dict. Args: params: dict , plugin: str . | |
| run_simulation | Launches single MOOSE run. Args: input_file , n_mpi , run_id . | |
| run_sweep | Dispatches parallel sweep; returns run_id list. Args: sweep_param , values , base_params . | |
| get_run_status | Real-time status (queued/running/done/failed). Args: run_id . |
| Eq. | Expression | Component (SP) | Role |
|---|---|---|---|
| ( 8 ) | All agents | Pipeline abstraction | |
| ( 9 ) | All agents (SP S1.1 ) | Shared simulation plan | |
| ( 10 ) | DAG block order | (SP S1.2 , rule 1) | Dependency-consistent block generation |
| ( 11 ) | mpiexec -n | (SP S1.3 ) | Execution command |
| ( 12 ) | + Sweep Orchestrator | Parallel sweep wall-clock bound | |
| ( 13 ) | (SP S1.4 ) | Nonlinear convergence criterion |
| Prov. | N 0 | T | valid/tot | yield | cells/grain | Res. | SE ( ) | Gate |
|---|---|---|---|---|---|---|---|---|
| auto | 20 | 350 | 0/40 | 0.00 | 32.3 | – | fail | |
| auto | 20 | 400 | 0/40 | 0.00 | 32.3 | – | fail | |
| auto | 20 | 450 | 8/40 | 0.20 | 32.3 | 6.670 0.771 | fail | |
| auto | 20 | 500 | 20/40 | 0.50 | 32.3 | 9.973 0.637 | fail | |
| auto | 20 | 550 | 29/40 | 0.72 | 32.3 | 15.326 0.960 | pass | |
| auto | 50 | 350 | 0/40 | 0.00 | 20.4 | – | fail |
| ID | Regime | G1 | G2 | G3 | G4 | G5 | Verdict | ||
|---|---|---|---|---|---|---|---|---|---|
| GG01 | Core | 20 16 | 0.83 | ✓ | ✓ | ✓ | ✗ | ✓ | near |
| GG02 | Core | 20 15 | 0.85 | ✓ | ✓ | ✓ | ✗ | ✓ | near |
| GG03 | Core | 30 13 | 0.97 | ✓ | ✓ | ✓ | ✓ | ✓ | cred. |
| GG04 | Core | 30 12 | 0.96 | ✓ | ✓ | ✓ | ✓ | ✓ | cred. |
| GG05 | Core | 30 12 | 0.95 | ✓ | ✓ | ✓ | ✓ | ✓ | cred. |
| GG06 | Core | 30 13 | 0.97 | ✓ | ✓ | ✓ | ✓ | ✓ | cred. |
Computational Materials Science
Computational materials science uses computation and data-driven models to predict, explain, and design materials and their properties.
See all 141 papers