NeqSim Process Modeling Skill
Build executable NeqSim process simulations from engineering descriptions. This skill
is the process-flowsheet layer between thermodynamic fluid setup and downstream
specialists such as mechanical design, safety, plant data, and reporting.
Use When
- Building a
ProcessSystem or ProcessModel flowsheet from a process description.
- Connecting equipment such as streams, separators, compressors, coolers, heaters,
heat exchangers, pumps, valves, pipes, mixers, splitters, recycles, adjusters, and
distillation columns.
- Extracting process results with units, compositions, duties, powers, phase splits,
mass balances, energy balances, or equipment profiles.
- Preparing a steady-state process base case for mechanical design, relief sizing,
flow assurance, dynamic simulation, plant-data comparison, or optimization.
Core Workflow
- Define the fluid using the EOS and component sequence from
neqsim-api-patterns.
- Create feed streams with explicit temperature, pressure, and flow units.
- Add equipment in topological order to a
ProcessSystem.
- Connect by outlet stream objects, for example separator gas outlet to
compressor inlet or valve outlet to downstream separator.
- Run once after assembly unless recycle initialization requires a staged solve.
- Validate results using conservation checks, phase sanity checks, equipment
limits, and applicable standards.
- Report outputs with units and include assumptions for missing design data.
Modeling Choices
| Situation |
Recommended Pattern |
| Single train, linear or branched flowsheet |
One ProcessSystem |
| Multiple areas with cross-area streams |
Multiple ProcessSystem objects in a ProcessModel |
| Production / gathering / commingling / export manifold or inlet header |
Manifold (process.equipment.manifold.Manifold) — NOT Mixer/Splitter |
| PFD/P&ID or unstructured text input |
Use neqsim-process-extraction first |
| Distillation or fractionation |
Load neqsim-distillation-design |
| Startup, shutdown, controllers, inventory dynamics |
Load neqsim-dynamic-simulation |
| Turndown or control valve operability |
Load neqsim-controllability-operability |
| Platform-scale separation/recompression |
Load neqsim-platform-modeling |
Manifolds: always model a well/production/gathering/commingling/export
manifold (or an inlet/outlet header) with the Manifold class, not a plain
Mixer or Splitter. Add the routed inlet streams with addStream(...). A
manifold ALWAYS has split outlets — route downstream from a split stream, never
from getMixedStream(). If the manifold feeds a single destination, give it
one split (setSplitFactors([1.0])) and route its getSplitStream(0). For a
distributing manifold set setSplitFactors([f0, f1, ...]) (fractions summing to
- and read each branch with
getSplitStream(i). getMixedStream() returns only
the internal commingled stream (all inlets combined, before the split) — use it
for inspection, not for wiring downstream. The Manifold also carries
header/branch inner diameters (setHeaderInnerDiameter, setBranchInnerDiameter)
for hydraulics and mechanical design.
Data Basis for an Optimization-Ready Model
A model built only to run has fixed operating points. A model built to
optimize additionally needs a bounded decision space, equipment constraints,
and an objective. Gather this basis up front (and record every assumed value):
- Fluid & feed — composition(s) + PVT/assay (C7+); feed rate, T, P, water
cut/GOR per feed; EOS + mixing rule.
- Geometry & hydraulics — line sizes (ID, schedule/wall, length, elevation,
roughness, insulation), manifold/header sizes, separator/scrubber dimensions
(ID, T/T length, orientation, nozzle sizes), heat-exchanger area/UA.
- Valves & chokes — control-valve Cv/Kv, rated travel, characteristic,
opening; choke Cv-vs-opening (bean/trim) for wells and let-down; ESD sizes.
- Rotating equipment — compressor maps (head/eff vs flow at several speeds) +
design/max speed; pump curves (+ NPSHr); driver rating (GT/motor); anti-surge
config (surge line, control-line margin, recycle-valve Cv).
- Design limits → constraints — separator design gas-load K + residence time;
compressor rated power, surge/stonewall margins, max discharge T; pump power +
NPSHa; line erosional-velocity limit; design P/T; valve max Cv; MAWP; PSV set P.
- Decision space & control — manipulable setpoints with physical bounds
(stage pressures, temperatures, compressor discharge P or speed, split/routing);
compressor control mode (solve-speed vs predictive — see
neqsim-agentic-process-optimization); pre-wired adjusters (do not also optimize).
- Objective & economics — objective (max throughput / min power / max value /
min emissions); product specs as constraints (RVP, dew point, cricondenbar,
Wobbe); prices / power & fuel cost / CO2 price for value objectives.
Source geometry and Cv from the line list, valve/choke datasheets, and instrument
index; maps from vendor curve sheets; limits from datasheets + piping class. For
the governed enterprise checklist and readiness gates use
enterprise-process-model-build-verify (target_fidelity="optimization_ready").
For MCP runProcess compressor protection, keep embedded compressor
antiSurge as screening control only. Use root-level antiSurgeSystems when
the model must bind CompressorAntiSurgeApplication to explicit named hot/cold
recycle valves, cooler, suction mixer, and recycle blocks. Multi-area systems
must include area. Follow neqsim-compressor-antisurge-recycle for the JSON
contract, screening-map provenance, commissioning evidence, and the mandatory
NOT_CERTIFIED_FOR_PROTECTION boundary.
Per-Area Three-Phase Flash Control (Speed-Up)
Switch the multiphase (three-phase) flash off on areas that are known to be
two-phase only. On a multi-area plant this is usually the cheapest speed-up
available, because the extra phase-stability analysis otherwise runs on every
flash of every unit of every recycle iteration.
plant.setMultiPhaseCheck(true); // baseline for all areas
plant.setMultiPhaseCheck("Export train A", false); // dry gas: no third phase
compressionTrain.setMultiPhaseCheck(false); // a single ProcessSystem
ProcessSystem.setMultiPhaseCheck(boolean) returns the number of distinct
fluids updated; getMultiPhaseCheck() returns TRUE/FALSE/null (unset).
ProcessModel.setMultiPhaseCheck(String areaName, boolean) returns -1 for an
unknown area name — check it, do not assume the call landed.
- The setting is re-applied at the start of each run, so a
ThreePhaseSeparator
temporarily enabling the check cannot leak three-phase mode into the area.
- Default is unset: fluids keep whatever flag they were built with.
Only disable it where the absence of a third phase is known from the process,
not assumed. Free water, an aqueous glycol/MEG phase, or a liquid CO2 phase
will be silently missed. Keep the check ON for inlet separation, produced-water,
glycol/MEG, and CO2-rich areas.
Per-Area Property-Initialization Level (Speed-Up)
Every Stream.run() ends with initProperties(), which evaluates mass density,
viscosity, thermal conductivity and diffusivity. Selecting DENSITY_ONLY skips
the transport-property correlations and is roughly an order of magnitude cheaper
per stream.
plant.setPropertyInitLevel(Stream.PropertyInitLevel.DENSITY_ONLY); // whole plant
plant.setPropertyInitLevel("Subsea", Stream.PropertyInitLevel.FULL); // one area
compressionTrain.setPropertyInitLevel(Stream.PropertyInitLevel.DENSITY_ONLY);
feedStream.setPropertyInitLevel(Stream.PropertyInitLevel.FULL); // one stream
- Same API shape as
setMultiPhaseCheck: ProcessSystem.setPropertyInitLevel
returns the number of streams updated, ProcessModel.setPropertyInitLevel(area, level) returns -1 for an unknown area, the setting propagates into nested
ModuleInterface sub-processes, is applied to units added afterwards, and is
re-applied at the start of every run.
- Default is unset (
null): each stream keeps PropertyInitLevel.FULL.
⚠ DENSITY_ONLY makes transport properties read back as ZERO, not throw.
getViscosity(), getThermalConductivity() and the diffusion coefficients
return 0.0. That silently corrupts pipeline pressure drop, heat-exchanger UA,
mechanical design, and every flow-assurance calculation. Use it only for
mass/energy-balance solves, and set the level back to FULL (or call
getFluid().initProperties() on the stream) before reading transport
properties.
Both switches are re-applied by run(UUID), run_step(UUID),
runSequential(UUID), runParallel(UUID), runHybrid(UUID),
runDataflow(UUID) and runTransient(double, UUID).
Required Checks
- Temperatures and pressures use explicit units in setters.
- Fluids have a mixing rule before simulation.
- Branching streams use cloned fluids or well-defined equipment outlet streams.
- Phase-separating equipment exposes conventional gas/liquid product accessors;
domain aliases return those same objects rather than separate streams.
getInletStreams() and getOutletStreams() contain every externally connected,
live stream. Their entries remain object-identical across reruns so downstream
equipment never retains a stale product reference.
- After solving a phase separator or column, verify the gas outlet contains a gas
phase, the liquid outlet contains an oil/liquid/aqueous phase, and total plus
per-component balances close. Getter existence alone is not product validation.
- Every equipment item has a unique name inside the process.
- Recycles and adjusters are added after their connected equipment.
- Pick the separator class by orientation, or set it explicitly. Gas-capacity
results depend on orientation because a horizontal vessel derates the gas area by
the design liquid level (default 80% → gas area
(1−0.8)=0.2×, a 5× over-read
of gas velocity / getGasLoadFactor() if used for a vertical vessel):
Separator and ThreePhaseSeparator default to horizontal — use for the
horizontal 1st/2nd/3rd-stage separators (VA-tag).
GasScrubber, GasScrubberSimple, NeqGasScrubber (2-phase) and
ThreePhaseGasScrubber (3-phase) default to vertical — prefer these for
vertical scrubbers (VG-tag); their constructor calls setOrientation("vertical").
- Either way you can override with
separator.setOrientation("vertical"|"horizontal").
Verified: with the correct orientation, getGasLoadFactor() matches a hand
Souders-Brown v·sqrt(ρg/(ρl−ρg)). setInternalDiameter() itself propagates
correctly through run() — the trap is orientation, not diameter.
- Every suction/export scrubber in a recompression/export-compression train has its
liquid knock-out (
scrubber.getLiquidOutStream()) closed back to the separator
operating at the matching pressure — never leave it unconnected (it is silently
dropped, under-counting oil/condensate recovery). See neqsim-platform-modeling
Section 4 for the seed + TP-setter + Recycle pattern.
- Overall mass balance MUST be verified before accepting any solution. Sum the mass
flow (
kg/hr) of all feed streams and all product/export streams; the closure error
must be < 0.1 % (abs(sum_in - sum_out) / sum_in). A larger imbalance means a stream
was dropped (e.g. an unconnected scrubber liquid), a recycle did not converge, or a
splitter fraction is wrong — fix the flowsheet and re-run; do NOT report results from an
unbalanced model. For multi-area ProcessModels, also confirm plant.run() converged.
- Results include the verified mass balance, expected pressure ordering, and physically
reasonable phase splits.
- For industrial engineering use, assess every exact
method@version with
EngineeringMethodQualificationRegistry: require an independent benchmark, approved structured applicability
envelope, intended use, controlled service inputs, uncertainty basis and explicit extrapolation policy. A converged
calculation outside the envelope remains investigation evidence, not a qualified engineering result.
- Use
EngineeringNumericalHealthAnalyzer to capture convergence, mass/energy closure, residual, and sensitivity
evidence for every process state that governs an engineering decision. Required but absent evidence must remain
INCOMPLETE; never replace unavailable closure data with zero.
- Use
Dexpi20XmlWriter for native Plant/P&ID exchange and Dexpi20ProcessModelWriter for native Process/PFD/BFD
exchange. A Proteus document with a changed header is not native DEXPI 2.0. Preserve the conformance report and still
require a named-CAE round-trip before project qualification.
- Keep an explicitly registered terminal product as
new Stream(productName, upstreamOutlet) when the product must
remain a named topology node. NeqSim reports the wrapped outlet as that stream's inlet and the DEXPI Process exporter
maps the node to a sink. Zero-flow and isolated empty streams must not be deleted merely to avoid invalid empty port
collections.
- An isolated
new Stream(name) with no fluid runs as an inactive topology placeholder. Do not connect downstream
thermodynamic equipment to that placeholder until a real fluid state is assigned.
- Use
Cfihos20HandoverExporter only with an exact project-controlled CFIHOS 2.0 Core or Extended RDL delivery.
Verify its digest from controlled bytes, map canonical nodes/properties/documents to exact RDL identifiers, record
mapping approval, and close the generated gap register. Its CSVs are staging data; Principal transformation,
target-system validation, contractual completeness, and information acceptance remain external decisions.
- Compressor, pump, heat exchanger, separator, and pipeline cases identify applicable
standards through
neqsim-standards-lookup.
Process Safety Is Part of a Capacity or Tie-in Study
A capacity, debottlenecking or tie-in study that reports only throughput is
incomplete, and in an oil-and-gas setting it will not pass review. More flow
through a plant changes its relief demand, its blowdown inventory and its
overpressure exposure. Run these checks in the same study, not as a follow-on:
- Overpressure protection per vessel. For every vessel whose duty changes,
tabulate design pressure, PSV set pressure and the measured operating
pressure. Flag a set point above design (accumulation beyond the ASME VIII
110 % single-device allowance) and a set point far below design (it probably
protects a lower-rated downstream section — confirm which). Allow a rounding
tolerance of about 1 % before calling a set point above design a
non-conformance: design pressure and set pressure usually come from different
documents.
- Relief adequacy against the governing case. Size the relief with
neqsim-relief-flare-network (API 520 Part I critical gas flow) and compare
with the installed orifice. A PSV sized at a few percent of normal flow is
normal for a thermal or blocked-outlet case — it means the protection against
sustained gas blowby rests on the shutdown system, not the valve. Say so
explicitly rather than implying the PSV covers full flow.
- Inflow bounding. The maximum flow into each pressure step is set by the
upstream chokes and control valves. Without a choke
Cv the blowby and
overpressure cases cannot be closed from first principles — record that as a
gap rather than assuming a number.
- Blowdown. Restriction-orifice sizes give the depressurisation time
(
neqsim-depressurization-mdmt); without them, state that time-to-blowdown is
unknown.
- The safety meaning of an over-capacity vessel. A separator or scrubber
above its Souders-Brown gas-load limit carries liquid over into downstream
equipment. That is a safety finding, not only a production one: liquid to
a compressor, liquid to a dehydration bed, liquid to the flare KO drum. If a
capacity calculation shows an exceedance, follow the carry-over path and say
what it reaches.
Ordering rule. Establish the capacity answer first, then the safety
consequence of it — the safety question depends on which unit is loaded and by
how much. Reporting capacity without step 5 is the most common way a
throughput-increase study is quietly wrong.
Data-retrieval expectations (verified on an NCS platform): design pressure
and relief-device orifice/rated capacity are typically not tag attributes in
an engineering register — they live in the mechanical and relief data sheets and
often need OCR. Budget for that. Vessel geometry on a tag record may be an
L×W×H envelope rather than an internal diameter; where a data sheet exists it
governs the tag field, and the difference can move a utilisation result by tens
of percent.
Related Skills
neqsim-api-patterns — fluid setup, equipment APIs, and result extraction.
neqsim-input-validation — pre-simulation physical bounds and component checks.
neqsim-troubleshooting — flash and process convergence recovery.
neqsim-process-extraction — JSON builder and route extraction from documents.
neqsim-notebook-patterns — executable notebook structure and devtools setup.
neqsim-process-safety — barrier, HAZOP, LOPA and SIL framing for the safety
step above.
neqsim-relief-flare-network — PSV sizing per API 520/521 and flare loads.
neqsim-depressurization-mdmt — blowdown time and low-temperature screening.
1---2name: neqsim-process-modeling3description: Process modeling and flowsheet construction patterns for NeqSim. USE WHEN: building executable NeqSim process simulations, ProcessSystem flowsheets, or runnable process models with streams, separators, compressors, heat exchangers, valves, pumps, distillation columns, recycles, adjusters, topology checks, result extraction, and engineering validation.4---56# NeqSim Process Modeling Skill78Build executable NeqSim process simulations from engineering descriptions. This skill9is the process-flowsheet layer between thermodynamic fluid setup and downstream10specialists such as mechanical design, safety, plant data, and reporting.1112## Use When1314- Building a `ProcessSystem` or `ProcessModel` flowsheet from a process description.15- Connecting equipment such as streams, separators, compressors, coolers, heaters,16 heat exchangers, pumps, valves, pipes, mixers, splitters, recycles, adjusters, and17 distillation columns.18- Extracting process results with units, compositions, duties, powers, phase splits,19 mass balances, energy balances, or equipment profiles.20- Preparing a steady-state process base case for mechanical design, relief sizing,21 flow assurance, dynamic simulation, plant-data comparison, or optimization.2223## Core Workflow24251. **Define the fluid** using the EOS and component sequence from26 `neqsim-api-patterns`.272. **Create feed streams** with explicit temperature, pressure, and flow units.283. **Add equipment in topological order** to a `ProcessSystem`.294. **Connect by outlet stream objects**, for example separator gas outlet to30 compressor inlet or valve outlet to downstream separator.315. **Run once after assembly** unless recycle initialization requires a staged solve.326. **Validate results** using conservation checks, phase sanity checks, equipment33 limits, and applicable standards.347. **Report outputs with units** and include assumptions for missing design data.3536## Modeling Choices3738| Situation | Recommended Pattern |39|-----------|---------------------|40| Single train, linear or branched flowsheet | One `ProcessSystem` |41| Multiple areas with cross-area streams | Multiple `ProcessSystem` objects in a `ProcessModel` |42| Production / gathering / commingling / export **manifold** or inlet header | `Manifold` (`process.equipment.manifold.Manifold`) — NOT `Mixer`/`Splitter` |43| PFD/P&ID or unstructured text input | Use `neqsim-process-extraction` first |44| Distillation or fractionation | Load `neqsim-distillation-design` |45| Startup, shutdown, controllers, inventory dynamics | Load `neqsim-dynamic-simulation` |46| Turndown or control valve operability | Load `neqsim-controllability-operability` |47| Platform-scale separation/recompression | Load `neqsim-platform-modeling` |4849**Manifolds:** always model a well/production/gathering/commingling/export50manifold (or an inlet/outlet header) with the `Manifold` class, not a plain51`Mixer` or `Splitter`. Add the routed inlet streams with `addStream(...)`. **A52manifold ALWAYS has split outlets — route downstream from a split stream, never53from `getMixedStream()`.** If the manifold feeds a single destination, give it54one split (`setSplitFactors([1.0])`) and route its `getSplitStream(0)`. For a55distributing manifold set `setSplitFactors([f0, f1, ...])` (fractions summing to561) and read each branch with `getSplitStream(i)`. `getMixedStream()` returns only57the internal commingled stream (all inlets combined, before the split) — use it58for inspection, not for wiring downstream. The `Manifold` also carries59header/branch inner diameters (`setHeaderInnerDiameter`, `setBranchInnerDiameter`)60for hydraulics and mechanical design.6162## Data Basis for an Optimization-Ready Model6364A model built only to *run* has fixed operating points. A model built to65**optimize** additionally needs a bounded decision space, equipment constraints,66and an objective. Gather this basis up front (and record every assumed value):6768- **Fluid & feed** — composition(s) + PVT/assay (C7+); feed rate, T, P, water69 cut/GOR per feed; EOS + mixing rule.70- **Geometry & hydraulics** — **line sizes** (ID, schedule/wall, length, elevation,71 roughness, insulation), **manifold/header sizes**, separator/scrubber dimensions72 (ID, T/T length, orientation, nozzle sizes), heat-exchanger area/UA.73- **Valves & chokes** — **control-valve Cv/Kv, rated travel, characteristic,74 opening**; **choke Cv-vs-opening (bean/trim)** for wells and let-down; ESD sizes.75- **Rotating equipment** — compressor maps (head/eff vs flow at several speeds) +76 design/max speed; pump curves (+ NPSHr); driver rating (GT/motor); anti-surge77 config (surge line, control-line margin, recycle-valve Cv).78- **Design limits → constraints** — separator design gas-load K + residence time;79 compressor rated power, surge/stonewall margins, max discharge T; pump power +80 NPSHa; line erosional-velocity limit; design P/T; valve max Cv; MAWP; PSV set P.81- **Decision space & control** — manipulable setpoints with **physical bounds**82 (stage pressures, temperatures, compressor discharge P or speed, split/routing);83 **compressor control mode** (solve-speed vs predictive — see84 `neqsim-agentic-process-optimization`); pre-wired adjusters (do not also optimize).85- **Objective & economics** — objective (max throughput / min power / max value /86 min emissions); product specs as constraints (RVP, dew point, cricondenbar,87 Wobbe); prices / power & fuel cost / CO2 price for value objectives.8889Source geometry and Cv from the line list, valve/choke datasheets, and instrument90index; maps from vendor curve sheets; limits from datasheets + piping class. For91the governed enterprise checklist and readiness gates use92`enterprise-process-model-build-verify` (`target_fidelity="optimization_ready"`).9394For MCP `runProcess` compressor protection, keep embedded compressor95`antiSurge` as screening control only. Use root-level `antiSurgeSystems` when96the model must bind `CompressorAntiSurgeApplication` to explicit named hot/cold97recycle valves, cooler, suction mixer, and recycle blocks. Multi-area systems98must include `area`. Follow `neqsim-compressor-antisurge-recycle` for the JSON99contract, screening-map provenance, commissioning evidence, and the mandatory100`NOT_CERTIFIED_FOR_PROTECTION` boundary.101102## Per-Area Three-Phase Flash Control (Speed-Up)103104Switch the multiphase (three-phase) flash off on areas that are known to be105two-phase only. On a multi-area plant this is usually the cheapest speed-up106available, because the extra phase-stability analysis otherwise runs on every107flash of every unit of every recycle iteration.108109```java110plant.setMultiPhaseCheck(true); // baseline for all areas111plant.setMultiPhaseCheck("Export train A", false); // dry gas: no third phase112compressionTrain.setMultiPhaseCheck(false); // a single ProcessSystem113```114115- `ProcessSystem.setMultiPhaseCheck(boolean)` returns the number of distinct116 fluids updated; `getMultiPhaseCheck()` returns `TRUE`/`FALSE`/`null` (unset).117- `ProcessModel.setMultiPhaseCheck(String areaName, boolean)` returns `-1` for an118 unknown area name — check it, do not assume the call landed.119- The setting is re-applied at the start of each run, so a `ThreePhaseSeparator`120 temporarily enabling the check cannot leak three-phase mode into the area.121- Default is unset: fluids keep whatever flag they were built with.122123**Only disable it where the absence of a third phase is known from the process,124not assumed.** Free water, an aqueous glycol/MEG phase, or a liquid CO2 phase125will be silently missed. Keep the check ON for inlet separation, produced-water,126glycol/MEG, and CO2-rich areas.127128## Per-Area Property-Initialization Level (Speed-Up)129130Every `Stream.run()` ends with `initProperties()`, which evaluates mass density,131viscosity, thermal conductivity and diffusivity. Selecting `DENSITY_ONLY` skips132the transport-property correlations and is roughly an order of magnitude cheaper133per stream.134135```java136plant.setPropertyInitLevel(Stream.PropertyInitLevel.DENSITY_ONLY); // whole plant137plant.setPropertyInitLevel("Subsea", Stream.PropertyInitLevel.FULL); // one area138compressionTrain.setPropertyInitLevel(Stream.PropertyInitLevel.DENSITY_ONLY);139feedStream.setPropertyInitLevel(Stream.PropertyInitLevel.FULL); // one stream140```141142- Same API shape as `setMultiPhaseCheck`: `ProcessSystem.setPropertyInitLevel`143 returns the number of streams updated, `ProcessModel.setPropertyInitLevel(area,144 level)` returns `-1` for an unknown area, the setting propagates into nested145 `ModuleInterface` sub-processes, is applied to units added afterwards, and is146 re-applied at the start of every run.147- Default is unset (`null`): each stream keeps `PropertyInitLevel.FULL`.148149> **⚠ `DENSITY_ONLY` makes transport properties read back as ZERO, not throw.**150> `getViscosity()`, `getThermalConductivity()` and the diffusion coefficients151> return `0.0`. That silently corrupts pipeline pressure drop, heat-exchanger UA,152> mechanical design, and every flow-assurance calculation. Use it only for153> mass/energy-balance solves, and set the level back to `FULL` (or call154> `getFluid().initProperties()` on the stream) before reading transport155> properties.156157Both switches are re-applied by `run(UUID)`, `run_step(UUID)`,158`runSequential(UUID)`, `runParallel(UUID)`, `runHybrid(UUID)`,159`runDataflow(UUID)` and `runTransient(double, UUID)`.160161## Required Checks162163- Temperatures and pressures use explicit units in setters.164- Fluids have a mixing rule before simulation.165- Branching streams use cloned fluids or well-defined equipment outlet streams.166- Phase-separating equipment exposes conventional gas/liquid product accessors;167 domain aliases return those same objects rather than separate streams.168- `getInletStreams()` and `getOutletStreams()` contain every externally connected,169 live stream. Their entries remain object-identical across reruns so downstream170 equipment never retains a stale product reference.171- After solving a phase separator or column, verify the gas outlet contains a gas172 phase, the liquid outlet contains an oil/liquid/aqueous phase, and total plus173 per-component balances close. Getter existence alone is not product validation.174- Every equipment item has a unique name inside the process.175- Recycles and adjusters are added after their connected equipment.176- **Pick the separator class by orientation, or set it explicitly.** Gas-capacity177 results depend on orientation because a horizontal vessel derates the gas area by178 the design liquid level (default 80% → gas area `(1−0.8)=0.2×`, a **5× over-read**179 of gas velocity / `getGasLoadFactor()` if used for a vertical vessel):180 - `Separator` and `ThreePhaseSeparator` default to **horizontal** — use for the181 horizontal 1st/2nd/3rd-stage separators (VA-tag).182 - `GasScrubber`, `GasScrubberSimple`, `NeqGasScrubber` (2-phase) and183 `ThreePhaseGasScrubber` (3-phase) default to **vertical** — prefer these for184 vertical scrubbers (VG-tag); their constructor calls `setOrientation("vertical")`.185 - Either way you can override with `separator.setOrientation("vertical"|"horizontal")`.186 Verified: with the correct orientation, `getGasLoadFactor()` matches a hand187 Souders-Brown `v·sqrt(ρg/(ρl−ρg))`. `setInternalDiameter()` itself propagates188 correctly through `run()` — the trap is orientation, not diameter.189- Every suction/export scrubber in a recompression/export-compression train has its190 liquid knock-out (`scrubber.getLiquidOutStream()`) closed back to the separator191 operating at the matching pressure — never leave it unconnected (it is silently192 dropped, under-counting oil/condensate recovery). See `neqsim-platform-modeling`193 Section 4 for the seed + TP-setter + `Recycle` pattern.194- **Overall mass balance MUST be verified before accepting any solution.** Sum the mass195 flow (`kg/hr`) of all feed streams and all product/export streams; the closure error196 must be `< 0.1 %` (`abs(sum_in - sum_out) / sum_in`). A larger imbalance means a stream197 was dropped (e.g. an unconnected scrubber liquid), a recycle did not converge, or a198 splitter fraction is wrong — fix the flowsheet and re-run; do NOT report results from an199 unbalanced model. For multi-area `ProcessModel`s, also confirm `plant.run()` converged.200- Results include the verified mass balance, expected pressure ordering, and physically201 reasonable phase splits.202- For industrial engineering use, assess every exact `method@version` with203 `EngineeringMethodQualificationRegistry`: require an independent benchmark, approved structured applicability204 envelope, intended use, controlled service inputs, uncertainty basis and explicit extrapolation policy. A converged205 calculation outside the envelope remains investigation evidence, not a qualified engineering result.206- Use `EngineeringNumericalHealthAnalyzer` to capture convergence, mass/energy closure, residual, and sensitivity207 evidence for every process state that governs an engineering decision. Required but absent evidence must remain208 `INCOMPLETE`; never replace unavailable closure data with zero.209- Use `Dexpi20XmlWriter` for native Plant/P&ID exchange and `Dexpi20ProcessModelWriter` for native Process/PFD/BFD210 exchange. A Proteus document with a changed header is not native DEXPI 2.0. Preserve the conformance report and still211 require a named-CAE round-trip before project qualification.212- Keep an explicitly registered terminal product as `new Stream(productName, upstreamOutlet)` when the product must213 remain a named topology node. NeqSim reports the wrapped outlet as that stream's inlet and the DEXPI Process exporter214 maps the node to a sink. Zero-flow and isolated empty streams must not be deleted merely to avoid invalid empty port215 collections.216- An isolated `new Stream(name)` with no fluid runs as an inactive topology placeholder. Do not connect downstream217 thermodynamic equipment to that placeholder until a real fluid state is assigned.218- Use `Cfihos20HandoverExporter` only with an exact project-controlled CFIHOS 2.0 Core or Extended RDL delivery.219 Verify its digest from controlled bytes, map canonical nodes/properties/documents to exact RDL identifiers, record220 mapping approval, and close the generated gap register. Its CSVs are staging data; Principal transformation,221 target-system validation, contractual completeness, and information acceptance remain external decisions.222- Compressor, pump, heat exchanger, separator, and pipeline cases identify applicable223 standards through `neqsim-standards-lookup`.224225## Process Safety Is Part of a Capacity or Tie-in Study226227A capacity, debottlenecking or tie-in study that reports only throughput is228incomplete, and in an oil-and-gas setting it will not pass review. **More flow229through a plant changes its relief demand, its blowdown inventory and its230overpressure exposure.** Run these checks in the same study, not as a follow-on:2312321. **Overpressure protection per vessel.** For every vessel whose duty changes,233 tabulate design pressure, PSV set pressure and the measured operating234 pressure. Flag a set point above design (accumulation beyond the ASME VIII235 110 % single-device allowance) and a set point far below design (it probably236 protects a lower-rated downstream section — confirm which). Allow a rounding237 tolerance of about 1 % before calling a set point above design a238 non-conformance: design pressure and set pressure usually come from different239 documents.2402. **Relief adequacy against the governing case.** Size the relief with241 `neqsim-relief-flare-network` (API 520 Part I critical gas flow) and compare242 with the installed orifice. A PSV sized at a few percent of normal flow is243 normal for a thermal or blocked-outlet case — it means the protection against244 sustained gas blowby rests on the **shutdown system**, not the valve. Say so245 explicitly rather than implying the PSV covers full flow.2463. **Inflow bounding.** The maximum flow into each pressure step is set by the247 upstream chokes and control valves. Without a choke `Cv` the blowby and248 overpressure cases cannot be closed from first principles — record that as a249 gap rather than assuming a number.2504. **Blowdown.** Restriction-orifice sizes give the depressurisation time251 (`neqsim-depressurization-mdmt`); without them, state that time-to-blowdown is252 unknown.2535. **The safety meaning of an over-capacity vessel.** A separator or scrubber254 above its Souders-Brown gas-load limit carries liquid over into downstream255 equipment. That is a **safety** finding, not only a production one: liquid to256 a compressor, liquid to a dehydration bed, liquid to the flare KO drum. If a257 capacity calculation shows an exceedance, follow the carry-over path and say258 what it reaches.259260**Ordering rule.** Establish the capacity answer first, then the safety261consequence of it — the safety question depends on which unit is loaded and by262how much. Reporting capacity without step 5 is the most common way a263throughput-increase study is quietly wrong.264265**Data-retrieval expectations** (verified on an NCS platform): design pressure266and relief-device orifice/rated capacity are typically **not** tag attributes in267an engineering register — they live in the mechanical and relief data sheets and268often need OCR. Budget for that. Vessel *geometry* on a tag record may be an269L×W×H envelope rather than an internal diameter; **where a data sheet exists it270governs the tag field**, and the difference can move a utilisation result by tens271of percent.272273## Related Skills274275- `neqsim-api-patterns` — fluid setup, equipment APIs, and result extraction.276- `neqsim-input-validation` — pre-simulation physical bounds and component checks.277- `neqsim-troubleshooting` — flash and process convergence recovery.278- `neqsim-process-extraction` — JSON builder and route extraction from documents.279- `neqsim-notebook-patterns` — executable notebook structure and devtools setup.280- `neqsim-process-safety` — barrier, HAZOP, LOPA and SIL framing for the safety281 step above.282- `neqsim-relief-flare-network` — PSV sizing per API 520/521 and flare loads.283- `neqsim-depressurization-mdmt` — blowdown time and low-temperature screening.