Python interface to the NeqSim engine — fluid properties, process simulation, and PVT analysis from Python and Jupyter notebooks.
Quick Start · Process Simulation · PVT Simulation · Examples · Docs · Community
What is NeqSim Python?
NeqSim Python is part of the NeqSim project — a Python interface to the NeqSim Java library for estimation of fluid behavior and process design for oil and gas production.
It provides Python toolboxes such as thermoTools and processTools that streamline the use of NeqSim, plus direct access to the full Java API via the jneqsim gateway.
| Capability | What you get |
|---|---|
| Thermodynamics | 60+ EOS models (SRK, PR, CPA, GERG-2008, …), flash calculations, phase envelopes |
| Physical properties | Density, viscosity, thermal conductivity, surface tension |
| Process simulation | 33+ equipment types — separators, compressors, heat exchangers, valves, pumps, reactors |
| PVT simulation | CME, CVD, differential liberation, separator tests, swelling, viscosity |
| Pipeline & flow | Steady-state multiphase pipe flow (Beggs & Brill), pipe networks |
🚀 Quick Start
Install
| pip (requires Java 11+) | conda (Java included) |
conda install -c conda-forge neqsim |
Prerequisites: Python 3.9+ and Java 11+. The conda package automatically installs OpenJDK — no separate Java setup needed. For pip, install Java from Adoptium.
Try it now
from neqsim.thermo import fluid # Create a natural gas fluid fl = fluid('srk') fl.addComponent('methane', 0.85) fl.addComponent('ethane', 0.10) fl.addComponent('propane', 0.05) fl.setTemperature(25.0, 'C') fl.setPressure(60.0, 'bara') fl.setMixingRule('classic') from neqsim.thermo import TPflash, printFrame TPflash(fl) printFrame(fl)
🔧 Process Simulation
NeqSim Python provides multiple ways to build process simulations:
1. Python Wrappers — recommended for beginners & notebooks
Simple functions with a global process — great for prototyping:
from neqsim.thermo import fluid from neqsim.process import stream, compressor, separator, runProcess, clearProcess clearProcess() feed = fluid('srk') feed.addComponent('methane', 0.9) feed.addComponent('ethane', 0.1) feed.setTemperature(30.0, 'C') feed.setPressure(50.0, 'bara') feed.setTotalFlowRate(10.0, 'MSm3/day') inlet = stream('inlet', feed) sep = separator('separator', inlet) comp = compressor('compressor', sep.getGasOutStream(), pres=100.0) runProcess() print(f"Compressor power: {comp.getPower()/1e6:.2f} MW")
2. ProcessContext — recommended for production code
Context manager with explicit process control — supports multiple independent processes:
from neqsim.thermo import fluid from neqsim.process import ProcessContext feed = fluid('srk') feed.addComponent('methane', 0.9) feed.addComponent('ethane', 0.1) feed.setTemperature(30.0, 'C') feed.setPressure(50.0, 'bara') with ProcessContext("Compression Train") as ctx: inlet = ctx.stream('inlet', feed) sep = ctx.separator('separator', inlet) comp = ctx.compressor('compressor', sep.getGasOutStream(), pres=100.0) ctx.run() print(f"Compressor power: {comp.getPower()/1e6:.2f} MW")
3. ProcessBuilder — fluent API for configuration-driven design
Chainable builder pattern:
from neqsim.thermo import fluid from neqsim.process import ProcessBuilder feed = fluid('srk') feed.addComponent('methane', 0.9) feed.addComponent('ethane', 0.1) feed.setTemperature(30.0, 'C') feed.setPressure(50.0, 'bara') process = (ProcessBuilder("Compression Train") .add_stream('inlet', feed) .add_separator('separator', 'inlet') .add_compressor('compressor', 'separator', pressure=100.0) .run()) print(f"Compressor power: {process.get('compressor').getPower()/1e6:.2f} MW")
4. Direct Java Access — full control via jneqsim
Explicit process management using the Java API — for advanced features see the NeqSim Java repo:
from neqsim import jneqsim from neqsim.thermo import fluid feed = fluid('srk') feed.addComponent('methane', 0.9) feed.addComponent('ethane', 0.1) feed.setTemperature(30.0, 'C') feed.setPressure(50.0, 'bara') # Create equipment using Java classes inlet = jneqsim.process.equipment.stream.Stream('inlet', feed) sep = jneqsim.process.equipment.separator.Separator('separator', inlet) comp = jneqsim.process.equipment.compressor.Compressor('compressor', sep.getGasOutStream()) comp.setOutletPressure(100.0) # Create and run process explicitly process = jneqsim.process.processmodel.ProcessSystem() process.add(inlet) process.add(sep) process.add(comp) process.run() print(f"Compressor power: {comp.getPower()/1e6:.2f} MW")
Choosing an Approach
| Use Case | Recommended Approach |
|---|---|
| Learning & prototyping | Python wrappers |
| Jupyter notebooks | Python wrappers |
| Production applications | ProcessContext |
| Multiple parallel processes | ProcessContext |
| Configuration-driven design | ProcessBuilder |
| Advanced Java features | Direct Java access |
🧪 PVT Simulation
NeqSim includes a pvtsimulation package for common PVT experiments (CCE/CME, CVD, differential liberation, separator tests, swelling, viscosity, etc.) and tuning workflows.
📂 Examples
Explore ready-to-run examples in the examples folder:
- Process simulation — processApproaches.py (all four approaches)
- Flash calculations, phase envelopes, hydrate prediction
- Compressor trains, heat exchangers, separation processes
- Jupyter notebooks in examples/jupyter/
- Google Colab examples
⚙️ Technical Notes
JPype bridges Python and Java. See the JPype installation guide for platform-specific details. Ensure Python and Java are both 64-bit (or both 32-bit) — mixing architectures will crash on import.
The full list of Python dependencies is on the dependencies page.
🏗️ Contributing
We welcome contributions — bug fixes, new examples, documentation improvements, and more.
- CONTRIBUTING.md — Code of conduct and PR process
- NeqSim Python Wiki — Guides and usage patterns
📚 Documentation & Resources
| Resource | Link |
|---|---|
| NeqSim homepage | equinor.github.io/neqsimhome |
| Python wiki | neqsim-python/wiki |
| JavaDoc API | JavaDoc |
| Discussion forum | GitHub Discussions |
| NeqSim Java | equinor/neqsim |
| MATLAB binding | equinor/neqsimmatlab |
| Releases | GitHub Releases |
Versioning
NeqSim uses SemVer for versioning.
Authors
Even Solbraa (esolbraa@gmail.com), Marlene Louise Lund
NeqSim development was initiated at NTNU. A number of master and PhD students have contributed — we greatly acknowledge their contributions.