Skip to the content.

Process Automation API

A stable, string-addressable API for interacting with running NeqSim process simulations. Variables are accessed through dot-notation paths like "separator.gasOutStream.temperature", removing the need to navigate Java objects directly.

Package: neqsim.process.automation

Key Classes

Class Description
ProcessAutomation Main facade for reading/writing simulation variables
SimulationVariable Descriptor for a single variable (address, type, unit)

Quick Start

Single ProcessSystem

import neqsim.process.automation.ProcessAutomation;
import neqsim.process.automation.SimulationVariable;

ProcessSystem process = new ProcessSystem();
// ... add equipment and run ...
process.run();

ProcessAutomation auto = new ProcessAutomation(process);

// List all units
List<String> units = auto.getUnitList();

// List variables for a unit
List<SimulationVariable> vars = auto.getVariableList("HP Sep");
for (SimulationVariable v : vars) {
    System.out.println(v.getAddress() + " [" + v.getType() + "] " + v.getDefaultUnit());
}

// Read a value
double temp = auto.getVariableValue("HP Sep.gasOutStream.temperature", "C");

// Set an input
auto.setVariableValue("Compressor.outletPressure", 120.0, "bara");

// Re-run to propagate changes
process.run();

Multi-Area ProcessModel

When backed by a ProcessModel, addresses use area-qualified syntax:

ProcessModel model = new ProcessModel();
model.add("Separation", separationProcess);
model.add("Compression", compressionProcess);
model.run();

ProcessAutomation auto = new ProcessAutomation(model);

// List all areas
List<String> areas = auto.getAreaList();
// ["Separation", "Compression"]

// List units in a specific area
List<String> sepUnits = auto.getUnitList("Separation");

// Area-qualified addresses
double temp = auto.getVariableValue("Separation::HP Sep.gasOutStream.temperature", "C");
auto.setVariableValue("Compression::Compressor.outletPressure", 120.0, "bara");

Convenience Delegates on ProcessSystem

ProcessSystem exposes convenience methods that delegate to ProcessAutomation:

// These are equivalent:
process.getAutomation().getUnitList();
process.getUnitNames();

process.getAutomation().getVariableList("HP Sep");
process.getVariableList("HP Sep");

process.getAutomation().getVariableValue("HP Sep.gasOutStream.temperature", "C");
process.getVariableValue("HP Sep.gasOutStream.temperature", "C");

process.getAutomation().setVariableValue("Compressor.outletPressure", 120.0, "bara");
process.setVariableValue("Compressor.outletPressure", 120.0, "bara");

Convenience Delegates on ProcessModel

ProcessModel has matching delegates with area-qualified addresses:

model.getUnitNames();                                    // all units, area-qualified
model.getAreaNames();                                    // area names
model.getUnitNames("Separation");                        // units in one area
model.getVariableList("Separation::HP Sep");             // variables for a unit
model.getVariableValue("Separation::HP Sep.gasOutStream.temperature", "C");
model.setVariableValue("Compression::Compressor.outletPressure", 120.0, "bara");

Address Format

Variables use dot-notation addresses:

Pattern Example Description
unit.property Compressor.power Direct equipment property
unit.port.property HP Sep.gasOutStream.temperature Stream port property
Area::unit.property Compression::Compressor.power Area-qualified (ProcessModel)
Area::unit.port.property Separation::HP Sep.gasOutStream.temperature Full path

Stream Port Names

Equipment Ports
Stream (direct properties only)
Separator gasOutStream, liquidOutStream
ThreePhaseSeparator gasOutStream, liquidOutStream, waterOutStream
Compressor / Expander / Pump outletStream
Heater / Cooler outletStream
ThrottlingValve outletStream
HeatExchanger outStream0 (hot out), outStream1 (cold out)
Mixer outletStream
Splitter splitStream_0, splitStream_1, …
DistillationColumn condenserStream, reboilerStream

Stream Properties

Each stream port exposes:

Property Default Unit Description
temperature K Temperature
pressure bara Pressure
flowRate kg/hr Mass flow rate
molarFlowRate mole/sec Molar flow rate

SimulationVariable

Each variable exposed by getVariableList() returns a SimulationVariable descriptor:

SimulationVariable var = vars.get(0);
var.getAddress();      // "HP Sep.gasOutStream.temperature"
var.getName();         // "temperature"
var.getType();         // VariableType.OUTPUT or VariableType.INPUT
var.getDefaultUnit();  // "K"
var.getDescription();  // "Gas outlet temperature"

Variable Types

Type Access Description
OUTPUT Read-only Calculated result (temperature, pressure, flow, power)
INPUT Read-write Settable parameter (outlet pressure, efficiency, Cv)

Supported Equipment

The automation API covers 20+ equipment types:

Equipment Key Properties
Stream temperature, pressure, flowRate, molarFlowRate
Separator temperature, pressure, liquidLevel + stream ports
ThreePhaseSeparator Same as Separator + waterLevel + waterOutStream
Tank temperature, pressure, liquidLevel + stream ports
Compressor outletPressure (INPUT), power, polytropicEfficiency, isentropicEfficiency, speed
CompressorTrain Same as Compressor (applied to first stage)
Expander outletPressure (INPUT), power, isentropicEfficiency
Pump outletPressure (INPUT), power
Heater / Cooler outletTemperature (INPUT), duty
HeatExchanger uAvalue (INPUT), duty + two outlet streams
ThrottlingValve outletPressure, Cv (INPUT), percentValveOpening (INPUT)
Pipeline pressure/temperature at inlet/outlet
Ejector outletPressure (INPUT) + stream ports
GibbsReactor temperature, pressure, outletTemperature (INPUT)
DistillationColumn numberOfTrays, condenserTemperature, reboilerTemperature
Recycle errorFlow, errorTemperature, errorPressure, flowTolerance (INPUT)
ComponentSplitter splitFactor_0, splitFactor_1, … (INPUT)
Mixer temperature, pressure + outletStream
Splitter splitFactor_0, splitFactor_1, … (INPUT) + split streams
Generic TwoPortEquipment Fallback with outletStream port

Unit Conversion

The API handles unit conversion for common properties:

// Temperature in different units
double tempC = auto.getVariableValue("HP Sep.gasOutStream.temperature", "C");
double tempK = auto.getVariableValue("HP Sep.gasOutStream.temperature", "K");
double tempF = auto.getVariableValue("HP Sep.gasOutStream.temperature", "F");

// Pressure
double pBara = auto.getVariableValue("Compressor.outletStream.pressure", "bara");

// Flow rates
double massFlow = auto.getVariableValue("feed.flowRate", "kg/hr");
double molarFlow = auto.getVariableValue("feed.molarFlowRate", "mole/sec");

Error Handling

The API throws IllegalArgumentException for invalid addresses or read-only writes:

try {
    auto.getVariableValue("nonexistent.temperature", "C");
} catch (IllegalArgumentException e) {
    System.out.println("Unit not found: " + e.getMessage());
}

try {
    // Cannot set a calculated output
    auto.setVariableValue("Compressor.power", 1000.0, "kW");
} catch (IllegalArgumentException e) {
    System.out.println("Read-only variable: " + e.getMessage());
}

Python Usage

from neqsim import jneqsim

# Get automation from ProcessSystem
process = jneqsim.process.processmodel.ProcessSystem()
# ... build and run ...

auto = process.getAutomation()
units = list(auto.getUnitList())
vars = list(auto.getVariableList("HP Sep"))
temp = auto.getVariableValue("HP Sep.gasOutStream.temperature", "C")
auto.setVariableValue("Compressor.outletPressure", 120.0, "bara")

# Or use convenience methods directly
process.getVariableValue("HP Sep.gasOutStream.temperature", "C")
process.setVariableValue("Compressor.outletPressure", 120.0, "bara")

See Also