Industrial Agentic Engineering with NeqSim
AI Agents for Engineering Task Solving in Industry
Quick Start · Use Cases · AI / MCP · Java · Python · Contribute · Docs
NeqSim (Non-Equilibrium Simulator) is a comprehensive Java library for fluid property estimation, process simulation, and engineering design. It covers the full process engineering workflow — from thermodynamic modeling and PVT analysis through equipment sizing, pipeline flow, safety studies, and field development economics.
Developed at NTNU and maintained by Equinor, NeqSim is used for real-world oil & gas, carbon capture, hydrogen, and energy applications.
Use it from Java, Python, Jupyter notebooks, .NET, MATLAB, or let an AI agent drive it via natural language.
| Domain | What NeqSim provides |
|---|---|
| Thermodynamics | 60+ equation-of-state models (SRK, PR, CPA, GERG-2008, …), flash calculations (TP, PH, PS, dew, bubble), phase envelopes |
| Physical properties | Density, viscosity, thermal conductivity, surface tension, diffusion coefficients |
| Process simulation | 33+ equipment types — separators, compressors, heat exchangers, valves, distillation columns, pumps, reactors |
| Pipeline & flow | Steady-state and transient multiphase pipe flow (Beggs & Brill, two-fluid model), pipe networks |
| PVT simulation | CME, CVD, differential liberation, separator tests, swelling tests, saturation pressure |
| Safety | Depressurization/blowdown, PSV sizing (API 520/521), source term generation, safety envelopes |
| Standards | ISO 6976 (gas quality), NORSOK, DNV, API, ASME compliance checks |
| Mechanical design | Wall thickness, weight estimation, cost analysis for pipelines, vessels, wells (SURF) |
| Field development | Production forecasting, concept screening, NPV/IRR economics, Monte Carlo uncertainty |
See the full documentation, Java Wiki, or ask questions in Discussions.
pip install neqsimfrom neqsim import jneqsim
# Create a natural gas fluid
fluid = jneqsim.thermo.system.SystemSrkEos(273.15 + 25.0, 60.0) # 25°C, 60 bara
fluid.addComponent("methane", 0.85)
fluid.addComponent("ethane", 0.10)
fluid.addComponent("propane", 0.05)
fluid.setMixingRule("classic")
# Run a flash calculation
ops = jneqsim.thermodynamicoperations.ThermodynamicOperations(fluid)
ops.TPflash()
fluid.initProperties()
print(f"Gas density: {fluid.getPhase('gas').getDensity('kg/m3'):.2f} kg/m³")
print(f"Gas viscosity: {fluid.getPhase('gas').getViscosity('kg/msec'):.6f} kg/(m·s)")
print(f"Z-factor: {fluid.getPhase('gas').getZ():.4f}")Maven Central (simplest — no authentication needed):
<dependency>
<groupId>com.equinor.neqsim</groupId>
<artifactId>neqsim</artifactId>
<version>3.6.1</version>
</dependency>import neqsim.thermo.system.SystemSrkEos;
import neqsim.thermodynamicoperations.ThermodynamicOperations;
SystemSrkEos fluid = new SystemSrkEos(273.15 + 25.0, 60.0);
fluid.addComponent("methane", 0.85);
fluid.addComponent("ethane", 0.10);
fluid.addComponent("propane", 0.05);
fluid.setMixingRule("classic");
ThermodynamicOperations ops = new ThermodynamicOperations(fluid);
ops.TPflash();
fluid.initProperties();
System.out.println("Density: " + fluid.getDensity("kg/m3") + " kg/m³");@solve.task hydrate formation temperature for wet gas at 100 bara
The agent scopes the task, builds a NeqSim simulation, validates results, and generates a Word + HTML report — no coding required.
Calculate fluid properties
from neqsim import jneqsim
fluid = jneqsim.thermo.system.SystemSrkEos(273.15 + 15.0, 100.0)
fluid.addComponent("methane", 0.90)
fluid.addComponent("CO2", 0.05)
fluid.addComponent("nitrogen", 0.05)
fluid.setMixingRule("classic")
ops = jneqsim.thermodynamicoperations.ThermodynamicOperations(fluid)
ops.TPflash()
fluid.initProperties()
print(f"Density: {fluid.getDensity('kg/m3'):.2f} kg/m³")
print(f"Molar mass: {fluid.getMolarMass('kg/mol'):.4f} kg/mol")
print(f"Phases: {fluid.getNumberOfPhases()}")Simulate a process flowsheet
from neqsim import jneqsim
fluid = jneqsim.thermo.system.SystemSrkEos(273.15 + 30.0, 80.0)
fluid.addComponent("methane", 0.80)
fluid.addComponent("ethane", 0.12)
fluid.addComponent("propane", 0.05)
fluid.addComponent("n-butane", 0.03)
fluid.setMixingRule("classic")
Stream = jneqsim.process.equipment.stream.Stream
Separator = jneqsim.process.equipment.separator.Separator
Compressor = jneqsim.process.equipment.compressor.Compressor
ProcessSystem = jneqsim.process.processmodel.ProcessSystem
feed = Stream("Feed", fluid)
feed.setFlowRate(50000.0, "kg/hr")
separator = Separator("HP Separator", feed)
compressor = Compressor("Export Compressor", separator.getGasOutStream())
compressor.setOutletPressure(150.0, "bara")
process = ProcessSystem()
process.add(feed)
process.add(separator)
process.add(compressor)
process.run()
print(f"Compressor power: {compressor.getPower('kW'):.0f} kW")
print(f"Gas out temp: {compressor.getOutletStream().getTemperature() - 273.15:.1f} °C")Predict hydrate formation temperature
from neqsim import jneqsim
fluid = jneqsim.thermo.system.SystemSrkEos(273.15 + 5.0, 80.0)
fluid.addComponent("methane", 0.90)
fluid.addComponent("ethane", 0.06)
fluid.addComponent("propane", 0.03)
fluid.addComponent("water", 0.01)
fluid.setMixingRule("classic")
fluid.setMultiPhaseCheck(True)
ops = jneqsim.thermodynamicoperations.ThermodynamicOperations(fluid)
ops.hydrateFormationTemperature()
print(f"Hydrate T: {fluid.getTemperature() - 273.15:.2f} °C")Run pipeline pressure-drop calculations
from neqsim import jneqsim
fluid = jneqsim.thermo.system.SystemSrkEos(273.15 + 40.0, 120.0)
fluid.addComponent("methane", 0.95)
fluid.addComponent("ethane", 0.05)
fluid.setMixingRule("classic")
Stream = jneqsim.process.equipment.stream.Stream
PipeBeggsAndBrills = jneqsim.process.equipment.pipeline.PipeBeggsAndBrills
feed = Stream("Inlet", fluid)
feed.setFlowRate(200000.0, "kg/hr")
pipe = PipeBeggsAndBrills("Export Pipeline", feed)
pipe.setPipeWallRoughness(5e-5)
pipe.setLength(50000.0) # 50 km
pipe.setDiameter(0.508) # 20 inch
pipe.setNumberOfIncrements(20)
pipe.run()
outlet = pipe.getOutletStream()
print(f"Outlet pressure: {outlet.getPressure():.1f} bara")
print(f"Outlet temp: {outlet.getTemperature() - 273.15:.1f} °C")More examples
Explore 30+ Jupyter notebooks in examples/notebooks/:
- Phase envelope calculation
- TEG dehydration process
- Vessel depressurization / blowdown
- Heat exchanger thermal-hydraulic design
- Production bottleneck analysis
- Risk simulation and visualization
- Data reconciliation and parameter estimation
- Reservoir-to-export integrated workflows
- Multiphase transient pipe flow
LLMs reason well but hallucinate physics. NeqSim is exact on thermodynamics but needs context. Together, they form a complete engineering system. The LLM reasons. NeqSim computes. Provenance proves it.
The NeqSim MCP Server lets any MCP-compatible client (VS Code Copilot, Claude Desktop, Cursor, etc.) run real calculations. Install in seconds:
# Docker (no Java needed)
docker pull ghcr.io/equinor/neqsim-mcp-server:latest| Ask the LLM | MCP Tool |
|---|---|
| "Dew point of 85% methane, 10% ethane, 5% propane at 50 bara?" | runFlash |
| "How does density change from 0 to 50 °C at 80 bara?" | runBatch |
| "Phase envelope for this natural gas" | getPhaseEnvelope |
| "Simulate gas through a separator then compressor to 120 bara" | runProcess |
Every response includes provenance metadata (EOS model, convergence, assumptions, limitations). See the MCP Server docs and setup guide.
@solve.task TEG dehydration sizing for 50 MMSCFD wet gas
The agent creates a task folder, runs NeqSim simulations, validates results, and generates a Word + HTML report — no coding required. See the tutorial or workflow reference.
<dependency>
<groupId>com.equinor.neqsim</groupId>
<artifactId>neqsim</artifactId>
<version>3.6.1</version>
</dependency>The Quick Start above shows the core pattern (create fluid → flash → read properties). For process simulation, add equipment to a ProcessSystem and call run() — see the Java Getting Started Guide for full examples.
GitHub Packages setup (latest snapshots)
- Configure authentication in your Maven
settings.xml:
<servers>
<server>
<id>github</id>
<username>YOUR_GITHUB_USERNAME</username>
<password>${env.GITHUB_TOKEN}</password>
</server>
</servers>- Add to your
pom.xml:
<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/equinor/neqsim</url>
</repository>
</repositories>Learn more: Java Getting Started Guide · JavaDoc · Wiki · Colab demo
pip install neqsimNeqSim Python gives you direct access to the full Java API via the jneqsim gateway. All Java classes are available — thermodynamics, process equipment, PVT, standards, everything.
from neqsim import jneqsim
# All Java classes accessible through jneqsim
SystemSrkEos = jneqsim.thermo.system.SystemSrkEos
ProcessSystem = jneqsim.process.processmodel.ProcessSystem
Stream = jneqsim.process.equipment.stream.Stream
# ... 200+ classes availableExplore 30+ ready-to-run Jupyter notebooks in examples/notebooks/.
| Language | Repository |
|---|---|
| Python | pip install neqsim |
| MATLAB | equinor/neqsimmatlab |
| .NET (C#) | equinor/neqsimcapeopen |
git clone https://github.com/equinor/neqsim.git
cd neqsim
./mvnw install # Linux/macOS
mvnw.cmd install # Windows./mvnw test # all tests
./mvnw test -Dtest=SeparatorTest # single class
./mvnw test -Dtest=SeparatorTest#testTwoPhase # single method
./mvnw checkstyle:check spotbugs:check pmd:check # static analysisThe repository includes a ready-to-use dev container — just open the repo in VS Code with container support:
git clone https://github.com/equinor/neqsim.git
cd neqsim
code .graph TB
subgraph core["NeqSim Core (Java 8+)"]
THERMO["Thermodynamics<br/>60+ EOS models"]
PROCESS["Process Simulation<br/>33+ equipment types"]
PVT["PVT Simulation"]
MECH["Mechanical Design<br/>& Standards"]
end
subgraph access["Access Layers"]
PYTHON["Python / Jupyter<br/>pip install neqsim"]
JAVA["Java / Maven<br/>Direct API"]
MCP["MCP Server (Java 17+)<br/>LLM integration"]
AGENTS["AI Agents<br/>VS Code Copilot"]
end
PYTHON --> THERMO
PYTHON --> PROCESS
JAVA --> THERMO
JAVA --> PROCESS
MCP --> THERMO
MCP --> PROCESS
AGENTS --> MCP
AGENTS --> PYTHON
| I want to… | Use | Requires |
|---|---|---|
| Quick property lookup via LLM | MCP Server + any LLM client | Java 17+ (or Docker) |
| Python scripting / Jupyter notebooks | pip install neqsim |
Python 3.8+, JVM |
| Embed in a Java application | Maven dependency | Java 8+ |
| Full engineering study with reports | @solve.task agent in VS Code |
VS Code + GitHub Copilot |
| .NET / MATLAB integration | Language bindings | See linked repos |
| Component | Java Version | Notes |
|---|---|---|
| NeqSim core library | 8+ | All thermodynamics, process equipment, PVT |
| MCP server | 17+ | Quarkus-based; thin wrapper around core |
| Python users | No Java coding | JVM bundled via jpype |
| Running prebuilt MCP jar | 17+ | Download from releases |
| Module | Package | Purpose |
|---|---|---|
| Thermodynamics | thermo/ |
60+ EOS implementations, flash calculations, phase equilibria |
| Physical properties | physicalproperties/ |
Density, viscosity, thermal conductivity, surface tension |
| Fluid mechanics | fluidmechanics/ |
Single- and multiphase pipe flow, pipeline networks |
| Process equipment | process/equipment/ |
33+ unit operations (separators, compressors, HX, valves, ...) |
| Chemical reactions | chemicalreactions/ |
Equilibrium and kinetic reaction models |
| Parameter fitting | statistics/ |
Regression, parameter estimation, Monte Carlo |
| Process simulation | process/ |
Flowsheet assembly, dynamic simulation, recycle/adjuster coordination |
For details see docs/modules.md.
We welcome contributions of all kinds — bug fixes, new models, examples, documentation, and notebook recipes. AI-assisted PRs are first-class contributions — see CONTRIBUTING.md.
New here? Three commands to get started:
git clone https://github.com/equinor/neqsim.git && cd neqsim
pip install -e devtools/ # one-time: registers the `neqsim` command
neqsim onboard # interactive setup (Java, Maven, build, Python, agents)Tip: Using a virtual environment (
python -m venv .venvthen activate it) avoids PATH issues on all platforms. See devtools/README.md ifneqsimis not found, or usepython -m neqsim_clias a fallback.
Or skip local setup entirely: Open in GitHub Codespaces — everything pre-installed in the browser.
Then explore and contribute:
neqsim try # interactive playground — experiment with NeqSim instantly
neqsim contribute # guided wizard — picks the right path for you
neqsim doctor # quick diagnostic if something isn't working- CONTRIBUTING.md — Code of conduct, PR process, AI-assisted contributions
- VISION_AGENTS.md — What belongs in the agentic system (core vs. community)
- Developer setup guide — Build, test, and project structure
- Contributing structure — Where to place code, tests, and resources
Skills are markdown files containing engineering knowledge (code patterns, design rules, troubleshooting tips) that AI agents load automatically when solving related tasks. Contributing a skill is the easiest way to make the agentic system smarter — no Java required.
| # | First Contribution | Difficulty | What to do |
|---|---|---|---|
| 1 | Contribute a skill | Easy | Write a SKILL.md with domain knowledge — neqsim new-skill "name" (guide, example skill) |
| 2 | Add a NIST validation benchmark | Easy | Compare NeqSim flash results to NIST data in docs/benchmarks/ |
| 3 | Create a Jupyter notebook example | Medium | Add a worked example to examples/notebooks/ |
| 4 | Add an MCP example to the catalog | Easy | Add a new entry in ExampleCatalog.java |
| 5 | Fix a broken doc link | Easy | Search docs/**/*.md for dead links and fix them |
| 6 | Add a unit test for existing equipment | Medium | Add tests under src/test/java/neqsim/ |
Browse and install community-contributed skills — or publish your own:
neqsim skill list # browse the catalog
neqsim skill install <name> # install a skill
neqsim skill publish user/repo-name # publish yours (creates a draft PR)See the Skills Guide for the full walkthrough, community-skills.yaml for the catalog, and .github/skills/README.md for the quick contribution guide.
All tests and ./mvnw checkstyle:check must pass before a PR is merged.
| Resource | Link |
|---|---|
| User documentation | equinor.github.io/neqsim |
| Benchmark gallery | docs/benchmarks/ — validation against NIST, published data |
| Reference manual index | REFERENCE_MANUAL_INDEX.md (350+ pages) |
| MCP tool contract | MCP_CONTRACT.md — stable API for agent builders |
| JavaDoc API | JavaDoc |
| Jupyter notebooks | examples/notebooks/ (30+ examples) |
| Discussion forum | GitHub Discussions |
| Releases | GitHub Releases |
| NeqSim homepage | equinor.github.io/neqsimhome |
Even Solbraa (esolbraa@gmail.com), Marlene Louise Lund
NeqSim development was initiated at NTNU. A number of master and PhD students have contributed to its development — we greatly acknowledge their contributions.
