Skip to main content

NeqSim is a tool for thermodynamic and process calculations

Project description

NeqSim Logo

Run tests Publish package

NeqSim Python

NeqSim Python is part of the NeqSim project. NeqSim Python is a Python interface to the NeqSim Java library for estimation of fluid behavior and process design for oil and gas production. NeqSim Python toolboxes (eg. thermoTools and processTools) are implemented to streamline use of neqsim in Python. Examples of use are given in the examples folder.

Installation

NeqSim Python can be installed via pip or conda.

Using pip

pip install neqsim

Using Conda

NeqSim is available on conda-forge. Install with:

conda install -c conda-forge neqsim

Or add conda-forge to your channels and install:

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install neqsim

Note: The conda package automatically includes Java (OpenJDK) as a dependency, so no separate Java installation is required.

Prerequisites

  • Python 3.9 or higher
  • Java 11 or higher (automatically installed with conda, or install separately for pip)

Getting Started

See the NeqSim Python Wiki for how to use NeqSim Python via Python or in Jupyter notebooks. Also see examples of use of NeqSim for Gas Processing in Colab. Learn and ask questions in Discussions for use and development of NeqSim.

Process Simulation

NeqSim Python provides multiple ways to build process simulations:

1. Python Wrappers (Recommended for beginners)

Simple functions with a global process - great for notebooks and 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)

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)

Chainable builder pattern - ideal for configuration-driven design:

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)

Explicit process management using jneqsim - for advanced features see neqsim java API:

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

See the examples folder for more process simulation examples, including processApproaches.py which demonstrates all four approaches.

PVT Simulation (PVTsimulation)

NeqSim also includes a pvtsimulation package for common PVT experiments (CCE/CME, CVD, differential liberation, separator tests, swelling, viscosity, etc.) and tuning workflows.

  • Documentation: docs/pvt_simulation.md
  • Direct Java access examples: examples/pvtsimulation/README.md

Prerequisites

Java version 8 or higher (Java JDK) needs to be installed. The Python package JPype is used to connect Python and Java. Read the installation requirements for Jpype. Be aware that mixing 64 bit Python with 32 bit Java and vice versa crashes on import of the jpype module. The needed Python packages are listed in the NeqSim Python dependencies page.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests.

Discussion forum

Questions related to neqsim can be posted in the github discussion pages.

Versioning

NeqSim use SemVer for versioning.

Licence

NeqSim is distributed under the Apache-2.0 licence.

Acknowledgments

A number of master and PhD students at NTNU have contributed to development of NeqSim. We greatly acknowledge their contributions.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neqsim-3.6.0.tar.gz (84.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

neqsim-3.6.0-py3-none-any.whl (84.5 MB view details)

Uploaded Python 3

File details

Details for the file neqsim-3.6.0.tar.gz.

File metadata

  • Download URL: neqsim-3.6.0.tar.gz
  • Upload date:
  • Size: 84.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for neqsim-3.6.0.tar.gz
Algorithm Hash digest
SHA256 2453e4ba3beca609532f533ad5aa3e6819ab730a36f90b181fdde079ff71f5d5
MD5 1fa0d092c77bc9cdeffcda3d68d8841f
BLAKE2b-256 9f1114ee0fe90b8e4dd7efb7de62482f60e783af46a3d7b1e15ab75a66a8e24b

See more details on using hashes here.

Provenance

The following attestation bundles were made for neqsim-3.6.0.tar.gz:

Publisher: publish-to-test-pypi.yml on equinor/neqsim-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neqsim-3.6.0-py3-none-any.whl.

File metadata

  • Download URL: neqsim-3.6.0-py3-none-any.whl
  • Upload date:
  • Size: 84.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for neqsim-3.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 48424867af30292b5c28bdb9c96d8dedb47eddf7db9c4115065db55743e1623b
MD5 4753b0888bfb72dcef683910a47a23e6
BLAKE2b-256 9c62cf876bed01f2317ff6de0fe6f61f6a0cf9fd13c3784730061ace333c2d0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for neqsim-3.6.0-py3-none-any.whl:

Publisher: publish-to-test-pypi.yml on equinor/neqsim-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page