Skip to the content.

Industrial S/M Optimization Benchmark Evidence

This page records the first executed increment of the industrial optimization baseline. It is measurement evidence for roadmap #3154, not a performance improvement claim and not qualification of the flowsheets for design or operations.

The measured source is unmodified NeqSim master commit f3a2cf5f0891322ab2462817f0c06d0d9409f1f6. The harness is additive test code. It does not change process calculations, thermodynamics, scheduling, recycle convergence, caching, or optimizer search behavior.

Engineering question and stop boundary

Can the frozen small guide case and a deterministic 25–50 unit multi-train case emit attributable, repeatable records for convergence, equipment work, balances, utilization, invalid proposals, constraint changes, and reversible line-up actions using current public APIs?

This increment stops after executing and versioning cases S and M. It does not add plant-wide constraint or shared-resource identity, total-power or common-shaft constraints, separator/piping evidence adapters, solver orchestration, or execution-layer instrumentation.

Cases and acceptance criteria

Case Fixed definition Acceptance criteria
S SRK guide fluid; feed, HP separator, and compressor; 5,000 kg/hr; 100 bara discharge; synthetic 165 kW installed power basis Solved and finite; mass residual at most 0.1 kg/hr; unchanged product exactly repeatable; installed-power change binds; NaN proposal is rejected before feed mutation.
M SRK rich gas; 27 units; three compression trains; 90,000 kg/hr; one 5% tail recycle; 120 bara discharge 25–50 units and at least one recycle; all executed modes solved; mass residual at most 0.1 kg/hr; five unchanged repetitions per fork exactly repeat product; restored product within 0.1 kg/hr of cold state.

All rates use a mass basis in kg/hr, pressures use bara, compressor power uses kW, and pipe velocity uses m/s. The fluids and installed limits are deterministic synthetic benchmark inputs; no proprietary plant data is used. Capacity evidence from default equipment constraints can still have unset provenance or validity, which is recorded rather than inferred.

How to run

The class is tagged slow. NeqSim excludes slow tests by default, so both the selected group and an empty exclusion list are mandatory. A zero-test Maven result is not valid benchmark evidence.

First prepare Maven as required by the NeqSim development workflow. Then use the checked-in runner; it executes five independent Maven/JVM forks, rejects a zero-test or malformed report, preserves each exact harness report under forks[].rawReport, derives the statistics, and validates the final aggregate before writing it.

eval "$(python3 /path/to/work-with-neqsim/scripts/prepare_maven.py)"
python devtools/industrial_sm_benchmark.py run \
  --baseline-commit "$(git rev-parse HEAD)" \
  --forks 5 \
  --raw-dir target/industrial-sm-benchmark \
  --output target/industrial-sm-baseline.json

Validate a previously generated or checked-in aggregate without running Maven:

python devtools/industrial_sm_benchmark.py validate \
  --input docs/process/optimization/benchmarks/industrial-sm-baseline-f3a2cf5f.json

The aggregate uses schema 2.0. It records the generator, raw schema, fork count, wall time, canonical byte count and SHA-256 digest for every preserved raw report. Validation recomputes the full aggregate from those reports and fails if any field or statistic differs. Each raw report contains deterministic calculation identities, case and topology counts, every mode, per-equipment calls and timing, run status, mass-balance residuals, constraint evidence, the heap-before/after proxy, observation size, failure or restoration outcome, and unsupported metrics with reasons.

Reference environment

The CPU model is captured here because portable Java 8 does not expose it. Exact JVM, OS, processor count, heap, and JVM input arguments are also stored in the machine-readable record.

Measured baseline

Observation Samples Median Median absolute deviation Range
Maven-fork-inclusive S/M harness wall time 5 forks 49,955.003 ms 5,482.386 ms 41,493.165–67,879.749 ms
S cold process solve 5 forks 110.738 ms 20.099 ms 90.192–147.210 ms
S unchanged process solve 5 forks 0.192 ms 0.005 ms 0.144–0.197 ms
M cold process solve 5 forks 422.029 ms 147.526 ms 274.503–822.562 ms
M unchanged process solve 25 runs 140.867 ms 44.528 ms 59.881–602.387 ms

The five Maven-fork-inclusive samples are 67879.749, 41493.165, 55437.389, 48105.170, and 49955.003 ms. They include Maven startup and any compile work and therefore are not a pure process-solve performance metric. The exact preserved raw reports and derived measurements are in industrial-sm-baseline-f3a2cf5f.json.

Every unchanged M run reproduced the cold product mass rate exactly within double precision. Across the five forks, the restored-line-up product differed from cold by a median 0.0258211 kg/hr; the largest observed difference was 0.0258211 kg/hr, below the 0.1 kg/hr acceptance criterion. The largest unit mass-balance residual across 50 M mode records was 0.0222922 kg/hr. Serialized M utilization observations ranged from 24,429 to 24,733 bytes. All 70 successful mode records retain their per-equipment execution maps; total equipment calls range from 1 to 63 per mode.

Case S rejected a non-finite external proposal before it mutated the feed. Case M observed the default export-pipe velocity constraint, then a controlled installed feed-pipe velocity constraint after the limit change, and completed a train-unavailable action plus full replay restoration.

The earlier industrial-sm-baseline-5a851750.json is retained as historical evidence but is superseded. It normalized harness fields without a checked-in aggregation contract and cannot satisfy the reproducibility gate used by later roadmap increments.

Measured gaps and handoffs

The record marks these metrics unavailable rather than zero:

Execution counts, dirty/dependency scheduling, cache attribution, allocation, and end-to-end performance remain coordinated with #2939. The ordered M transition from piping through compressor to separator or total power remains incomplete; it depends on the next #3154 stable plant constraint/resource identity increment. No missing metric or transition is represented as a passed gate.