Open-source process engineering toolkit — thermodynamics, process simulation, and AI-assisted design in one library.
Quick Start · Use Cases · Java · Python · AI / MCP · Docs · Community
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 |
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 are excellent at engineering reasoning but hallucinate physics. NeqSim is exact on thermodynamics but needs context. Together, they form a complete engineering system.
| Aspect | Manual Coding | Commercial Simulators | Agentic NeqSim |
|---|---|---|---|
| Learning curve | Steep (learn API) | Moderate (learn GUI) | Low (natural language) |
| Standards compliance | Manual lookup | Some built-in | Agent loads applicable standards |
| Reproducibility | Good (code) | Poor (GUI state lost) | Excellent (notebook + task folder) |
| Report generation | Manual | Manual export | Automated Word + HTML |
| Physics rigor | Full control | Vendor-validated | Full (same NeqSim engine) |
The NeqSim MCP Server lets any MCP-compatible client (VS Code Copilot, Claude Desktop, Cursor, etc.) run real calculations:
| Ask the LLM | What happens |
|---|---|
| "Dew point of 85% methane, 10% ethane, 5% propane at 50 bara?" | Flash calculation via NeqSim |
| "Get density, viscosity, and thermal conductivity at 25°C, 80 bara" | Physical property lookup |
| "Simulate gas through a separator then compressor to 120 bara" | Full process simulation |
With VS Code + GitHub Copilot Chat:
@solve.task hydrate formation temperature for wet gas at 100 bara
Without Copilot (script-based):
pip install -e devtools/
python devtools/new_task.py "hydrate formation temperature" --type AThe workflow creates a task folder, researches the topic, builds and runs simulations, validates results, and generates a professional report. See the step-by-step tutorial or the full workflow reference.
From Maven Central (simplest):
<dependency>
<groupId>com.equinor.neqsim</groupId>
<artifactId>neqsim</artifactId>
<version>3.6.1</version>
</dependency>From GitHub Packages (latest snapshots):
Show GitHub Packages setup
- 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>import neqsim.thermo.system.SystemSrkEos;
import neqsim.process.equipment.stream.Stream;
import neqsim.process.equipment.separator.Separator;
import neqsim.process.equipment.compressor.Compressor;
import neqsim.process.processmodel.ProcessSystem;
// Define fluid
SystemSrkEos fluid = new 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");
// Build flowsheet
Stream feed = new Stream("Feed", fluid);
feed.setFlowRate(50000.0, "kg/hr");
Separator separator = new Separator("HP Sep", feed);
Compressor compressor = new Compressor("Comp", separator.getGasOutStream());
compressor.setOutletPressure(150.0);
ProcessSystem process = new ProcessSystem();
process.add(feed);
process.add(separator);
process.add(compressor);
process.run();
System.out.println("Power: " + compressor.getPower("kW") + " kW");- Complete Java Getting Started Guide — Prerequisites, IDE setup, EOS selection, flash types, project structure, and contributor conventions
- NeqSim JavaDoc — Full API reference
- Java Wiki & examples — Usage patterns and guides
- NeqSim Colab demo (Java) — Try interactively
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 .NeqSim is built on seven modules:
| 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.
- CONTRIBUTING.md — Code of conduct and PR process
- Developer setup guide — Build, test, and project structure
- Contributing structure — Where to place code, tests, and resources
- Interactive Colab demo — Getting started as a developer
All tests and ./mvnw checkstyle:check must pass before a PR is merged.
| Resource | Link |
|---|---|
| User documentation | equinor.github.io/neqsim |
| Reference manual index | REFERENCE_MANUAL_INDEX.md (350+ pages) |
| 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.
