Skip to the content.

Task Log

Purpose: Persistent memory across sessions. Every solved task gets an entry here so future sessions can find prior solutions instead of starting from scratch.

How to use: Search this file for keywords before starting a new task. If a similar task was solved before, start from that solution.

Entry Format

### YYYY-MM-DD — Short task title
**Type:** A (Property) | B (Process) | C (PVT) | D (Standards) | E (Feature) | F (Design) | G (Workflow)
**Keywords:** comma, separated, search, terms
**Solution:** Where the code lives (test file, notebook, source file)
**Notes:** Key decisions, gotchas, or results worth remembering

Privacy Rule

Task log entries are public/reusable memory. Do not include company/operator names, field/facility/asset names, equipment tag numbers, internal document names, private system names, access diagnostics, or task folder slugs containing those details. Use generic descriptors such as confidential offshore gas platform, private task folder (redacted), operator-specific technical requirement, or confidential compressor route.


Log

2026-06-21 — Closed-form uncertainty propagation for linear production allocation

Type: E (Feature) Keywords: production allocation, uncertainty propagation, first-order propagation, variance propagation, Sigma_v = J Sigma_b J^T, independent metering, AllocationUncertaintyEstimator, SourceAllocator, neqsim.process.allocation, closed form, cached factorisation Solution: src/main/java/neqsim/process/allocation/AllocationUncertaintyEstimator.java (new, ~540 lines) + src/test/java/neqsim/process/allocation/AllocationUncertaintyEstimatorTest.java (4 JUnit cases); SourceAllocator.getSources() and getCustodyOutlets() added (unmodifiable views). Doc: new “Uncertainty propagation” section in docs/process/production-allocation.md. CHANGELOG_AGENT_NOTES.md entry. Paper §2.8 in neqsim-paperlab/papers/production_allocation_2026/paper.md (local-only — gitignored). Notes: Closed-form first-order Gaussian propagation that reuses the cached (I − A_k)⁻¹ factorisation already built by SourceAllocator.allocate(). For independent per-source metering with variance σ²_{s,k}, the per-source per-custody flow variance is Var(alloc(s,j,k)) = f_w(j,k)² · (J_k)_{w,e_s}² · σ²_{s,k} — one extra multi-RHS solve per component, no Monte-Carlo. GOTCHAS: (1) The estimator MUST reuse the allocator’s registered names — initial helpers auto-detected and silently re-named “Well-A” → “WellAStream”, causing Unknown custody: ExportGas. Fixed by exposing getSources()/getCustodyOutlets() on SourceAllocator and consulting them before auto-detect. (2) Spotless apply silently dropped a local-variable declaration during a multi-line edit; always read the file back and re-run tests after Spotless. (3) PowerShell breaks -DspotlessFiles=.*(A|B).* even when quoted because | is a pipe — run ./mvnw spotless:apply unrestricted instead. (4) Correlated metering and frozen-split-factor uncertainty are listed as future work in the paper §2.8 and in the doc’s Scope subsection. PR #2325 updated (commit 3f8485ff1c). 11/11 tests pass.

2026-05-12 — Scientific paper: linear recovery-factor allocation proxy network (PaperLab)

Type: G (Workflow) Keywords: scientific paper, neqsim-paperlab, production allocation, recovery factor proxy, split factor network, routing matrix, (I-A)v=b superposition, spectral radius, Neumann series, commingled production, custody allocation, method comparison, pro-rata, uniform recovery factor, component tagging, mass closure, Peng-Robinson, computers chemical engineering Solution: neqsim-paperlab/papers/production_allocation_2026/paper.md (method paper, 100% PaperLab quality score), plan.json, refs.bib (19 refs), claims_manifest.json + approved_claims.json, benchmark_config.json, build_word.py, algorithm/allocation_benchmark.py (the data generator), 5 figures, 3 tables, results/raw/allocation_results.json, submission/paper.docx. Documents the neqsim.process.allocation method (from PR #2325 / issue #2317). Notes: Two-well 15-component PR-EOS commingled HP(75)/MP(8.6)/LP(1.9) separation example based on a public Colab allocation notebook. Benchmark results: linear proxy matches an independent component-tagging reference to 4e-16 with 0.0% mass-closure error; pro-rata & uniform reach 1.71 max relative error, isolated re-sim 1.03; proxy cost flat (~1.0 s) vs isolated re-sim 65.6 s at 64 sources; frozen-factor drift 0.47→7.0 %pts over the oil-rate sweep. GOTCHAS: (1) NeqSim renames TBP fractions added via addTBPfraction("C6",...) to "C6_PC" — derive the component slate from the live fluid via getComponentName(), never assume the input name; strip _PC only for display labels. (2) PaperLab quality gate enforces ≤85 chars per highlight and ≤200-word abstract — trim before build_word.py. (3) build_word.py is generic across papers (parses paper.md + refs.bib + figures/) — copy verbatim from an existing paper folder. (4) Mirror the gibbs_minimization_2026 paper folder structure exactly (plan.json/claims/approved_claims/benchmark_config schema).

2026-06-18 — Linear recovery-factor production allocation (proxy network) — issue #2317

Type: E (Feature) / B (Process) Keywords: production allocation, source allocation, back-allocation, recovery factor, split factor, custody metering, proxy network, commingled production, well allocation, ProcessSystem allocation, mass closure, (I-A)v=b, neqsim.process.allocation, SourceAllocator Solution: New package src/main/java/neqsim/process/allocation/SourceAllocator (facade), RecoveryFactorExtractor (freezes per-unit per-component split factors from a converged base case), AllocationNetwork (builds routing matrices + identifies source/custody terminal streams), LinearAllocationSolver (EJML SimpleMatrix multi-RHS solve of (I-A_k)v=b with iterative Neumann fallback + negative clipping), ProductionAllocationResult (queries + JSON + mass-closure renormalisation), plus UnitSplit, AllocationSource, CustodyOutlet, ProductType, package-info. Test: src/test/java/neqsim/process/allocation/SourceAllocatorTest.java (7 tests pass). Doc: docs/process/production-allocation.md. Notes: Generic for any oil/gas field topology. Each non-Stream unit with outlets is a network node; Stream objects are edges. Split factor f_u(s,k) = outlet-s component-k molar flow / total inlet component-k molar flow, frozen from the converged base case, so allocation is a linear superposition of source injections — exact for the linearised model and robust to recycles/reflux (loop gain <1 guarantees convergence). Custody outlets MUST be tagged at the producing equipment’s actual outlet stream (e.g. separator.getGasOutStream()), not a downstream wrapper Stream (object identity via IdentityHashMap). Auto-detection (autoDetectSources/autoDetectCustodyOutlets with phase-beta product inference) returns canonical streams. Component names must match the NeqSim database (nC10, not n-decane). Mass closure on by default. Java 8, full JavaDoc, Spotless applied, 7/7 tests pass.

2026-06-20 — Flexible-riser annulus integrity safety review (production & gas-lift risers)

Type: D (Standards) Keywords: flexible riser annulus integrity, riser annulus venting, annulus vacuum monitoring system, AVMS, armour wire CO2 corrosion, de Waard-Milliams, dry vs flooded annulus, blocked vent screening, free-volume test, nitrogen annulus test, API 17J, ISO 13628-2, API 17B, ISO 13628-11, API 17TR2, DNV-RP-F206, ISO 16530-1, NORSOK D-010, NORSOK M-506, well integrity, riser integrity safety review Solution: Private task folder (redacted) — 3 NeqSim notebooks: (1) main analysis — bore CO2 partial pressure for production vs gas-lift risers, de Waard-Milliams dry-vs-flooded armour-wire corrosion, annulus vent-capacity margin, blocked-vent time-to-pressure screening, 9-riser status table, 5×5 ISO 31000 risk register; (2) benchmark validation vs published de Waard-Milliams nomogram (+ ideal-vs-fugacity conservatism check); (3) Monte-Carlo uncertainty (N=250, full NeqSim flashes) + tornado. results.json + Word/HTML report. Anchored on an operator flexible-riser annulus test report (source document, redacted). Notes: Annulus = the flexible-riser armour-wire annulus (between pressure sheath and outer sheath) monitored by an AVMS — NOT downhole casing. Key results: production-bore pCO2 ≈ 0.42 bara, gas-lift-bore pCO2 ≈ 2.26 bara; dry (vented) armour corrosion ~50× lower than a hypothetical flooded annulus via a water-availability factor (F_W_dry ≈ 0.02); vent-capacity margin > 100× measured permeation; blocked-vent time-to-2-bara on the order of weeks; all 9 risers screened “Dry/OK”. Documentation gap flagged: source report lists “Design diffusion rate: Not found”. GOTCHAS: (1) The NeqSim Runner does NOT set __vsc_ipynb_file__ and runs with cwd = step2_analysis/, so a NOTEBOOK_DIR.parent TASK_DIR resolution writes results.json/figures into step2_analysis/ — use a _find_task_dir() that walks up to the ancestor containing both step1_scope_and_research and step2_analysis. (2) The runner regenerates runner_output/job-*/output/ duplicate notebook copies every run — delete runner_output/ before running consistency_checker.py, else it scans duplicates and reports false numerical mismatches. (3) consistency_checker.py buckets genuinely-distinct sweep values sharing a unit (vent margins 3000/750/300/150× at different permeation rates; de Waard reference points at 20/40/60 °C) into generic other/method_deviation/emission_factor groups → false-positive CRITICALs; reword prose or move sweeps to tables/results.json. (4) step3_report/generate_report.py format_benchmark_html / add_benchmark_word_table / paper formatter crash ('bool'/'str' object has no attribute 'get') if benchmark_validation contains a scalar (e.g. overall_pass) or test dicts use reference/pass instead of description/status — hardened all three to skip non-dict values and map reference→description, pass bool→status (fix applied to devtools/task_template/step3_report/generate_report.py). (5) Execution order matters: NB01 OVERWRITES figure_discussion to a fresh list, NB02/NB03 APPEND — always run 01→02→03 to land the full 8 discussions. (6) Reframed the ideal-vs-fugacity cross-check as a conservatism test (ideal Dalton pCO2 ≥ real-gas fugacity, departure grows with pressure as expected) rather than a 10% exact-match test, since the corrosion screen uses the higher ideal pCO2 → conservative. Validated: TaskResultValidator 0 errors / 0 warnings; 8 figures + benchmark + uncertainty + risk all present.

2026-06-20 — Subsea oil field reservoir-to-inlet-separator model with wells, gathering system, and Seeq live-data comparison

Type: B (Process) Keywords: reservoir to inlet separator, subsea oil field, FPSO, gas-lift wells, producer wells, gathering system, commingled flowline, Vogel IPR, drawdown, BHP, API RP 14E erosional velocity, three-phase inlet separator, inlet heater duty, Seeq SPy, digital twin, live data comparison, parity, GERG-2008 benchmark, ISO 20765-2, SRK, Monte Carlo, P10 P50 P90, tornado, ISO 31000 risk register Solution: Private task folder (redacted) — main model script (castberg_res_to_inletsep.py, 10 wells → commingled gathering → topside inlet separator + inlet heater), Seeq comparison (seeq_compare.py, offline-cached fallback with USE_SEEQ_LIVE flag + SPy signal map), GERG-2008 benchmark (benchmark_validation.py), Monte-Carlo uncertainty/risk (uncertainty_risk_analysis.py), finalize_results.py, summary notebook, and Word/HTML report. Notes: End-to-end NeqSim model: per-well Vogel IPR + drawdown → arrival P/T with API RP 14E erosional-velocity check → Mixer commingling → topside ThreePhaseSeparator + inlet heater. Validated outputs: inlet sep 13.5 barg / 55 °C, gas 4.07 MSm3/d, oil 793 m3/h, water 215 m3/h, heater duty 34.4 MW, mass-balance error 0.0%. Seeq comparison (cached signals) max abs deviation 7.84% (separator temperature), all 4 compared signals within ±10%. Benchmark SRK vs GERG-2008 inlet-gas density max dev 2.21% (PASS, <5%). Monte-Carlo n=220 full-NeqSim sims → inlet-sep gas rate P10/P50/P90 = 3.49/4.25/4.92 MSm3/d; 8-risk ISO 31000 register, overall Medium. GOTCHAS: (1) NEVER addComponent after setMixingRule (ArrayIndexOutOfBounds) — route make-up water through a separate pure-water stream into the Mixer. (2) Seeq live pull is optional/offline by default — cache realistic signals in references/seeq_cached_signals.json; a stale seed field-oil-rate value (5400 vs ~820 Sm3/h) produced a spurious parity error until corrected. (3) results.json standards_applied requires keys code/edition/status/scope with status ∈ {PASS, FAIL, INFO, N/A}. (4) The report’s format_benchmark_html requires benchmark_validation to be a dict of named test entries (each a dict with description/status), NOT a top-level block with a points list — a flat schema crashes HTML generation with 'str' object has no attribute 'get'. (5) consistency_checker.py reports known false positives when notebook discussion prose co-locates distinct quantities sharing a unit (separator pressure 13.5 barg vs benchmark point 160 bara; benchmark dev 2.2% vs ±10% band vs temp dev 7.8%) — these are different physical quantities, not inconsistencies. Validated: TaskResultValidator 0 errors / 0 warnings; notebook executes all cells with embedded figures.

2026-06-20 — Offshore FPSO inlet system / 1st-stage separator simulation-backed HAZOP

Type: D (Standards) Keywords: HAZOP, IEC 61882, NORSOK Z-013, inlet separator, first-stage separation, three-phase separator, guide-words, risk matrix, gas blow-by, hydrate margin, settle-out pressure, API 521, API 14C, HAZOPTemplate, process safety Solution: Private task folder (redacted) — HAZOP analysis script (HAZOPTemplate worksheet + 3 figures + results.json), hazop_worksheet.md, and Word/HTML report. Reuses fluid/topology/operating point from a prior RVP task on the same fluid. Notes: Simulation-backed IEC 61882 HAZOP of the first-stage inlet separation node (inlet separator + inlet heaters + gas/oil/water outlets). 12 deviations across all seven guide-words scored on a 5×5 NORSOK Z-013 matrix before/after safeguards → residual risk {2 Low, 9 Medium, 1 High, 0 Critical}. Four deviations are backed by NeqSim calculations: settle-out bubble point ≈152 barg ≫ 16 barg PSV set (MORE PRESSURE, API 521 PSV-capacity action); gas hydrate-equilibrium T ≈6.6 °C at 13.5 barg with margin sweep falling to ≈+5 °C at 10 °C feed (LESS TEMPERATURE); settle-out/downstream pressure ratios ≈6.3 (oil) and ≈3.6 (water) for gas blow-by (HIGH LEVEL); ~70 °C heater-skin headroom (MORE TEMPERATURE). GOTCHAS: (1) the requested NPV-named source task did not exist — substituted an existing RVP task on the same fluid as source of record (documented in task_spec/notes). (2) Hydrate calc must rebuild a SystemSrkCPAstatoil wet-gas fluid from light hydrate formers only + small water + mixing rule 10 + setHydrateCheck(true); TBP pseudo-components (e.g. C7_PC) are not in the CPA database and must be skipped. (3) results.json standards_applied entries require keys code/scope/status with status ∈ {PASS, FAIL, INFO, N/A}. Use the working .venv (not .venv-1, which has a corrupt numpy/jpype). Validated: TaskResultValidator 0 errors; consistency_checker PASS.

2026-06-17 — Closing the three turbomachinery capability gaps (validated dynamics, map library, geometry-based maps)

Type: E (Feature) / B (Process) Keywords: anti-surge validation, dynamic benchmark, AntiSurgeDynamicBenchmark, recycle valve transient, surge margin, compressor map library, OEM curve library, TurboMachineryChartLibrary, reference map, geometry-based map generation, mean-line, radial inflow turbine, RadialExpanderGeometryMap, blade geometry, nozzle angle, velocity ratio, Dixon Hall, Whitfield Baines, ExpanderChartKhader, CompressorChartKhader2015 Solution: New classes src/main/java/neqsim/process/equipment/expander/RadialExpanderGeometryMap.java (Gap 3 — geometry/mean-line map generator), src/main/java/neqsim/process/equipment/compressor/TurboMachineryChartLibrary.java (Gap 2 — shipped reference-map library), src/main/java/neqsim/process/util/scenario/AntiSurgeDynamicBenchmark.java (Gap 1 — reproducible dynamic anti-surge benchmark). Tests: src/test/java/neqsim/process/equipment/expander/RadialExpanderGeometryMapTest.java (5), src/test/java/neqsim/process/equipment/compressor/TurboMachineryChartLibraryTest.java (4), src/test/java/neqsim/process/util/scenario/AntiSurgeDynamicBenchmarkTest.java (3) — all 12 pass. Notes: Closed the three honest gaps identified in the capability rating vs commercial software. Gap 1 (validated dynamics)AntiSurgeDynamicBenchmark drives the production AntiSurgeController + a real ThrottlingValve against a transparent first-order gas-path surrogate $m_{k+1}=m_k-\dot d\,\Delta t + a(u_k/100)\Delta t$; the closed loop holds the surge margin ≥0 while the open-loop reference surges (min margin <0), giving a deterministic, inspectable, tunable benchmark scenario. Gap 2 (vendor-certified map libraries)TurboMachineryChartLibrary ships named, vendor-neutral reference maps (GENERIC_CENTRIFUGAL_3SPEEDCompressorChartKhader2015 with generated surge curve; GENERIC_CRYO_EXPANDER and GEOMETRY_RADIAL_IFRExpanderChartKhader) via getCompressorChart/getExpanderChart/list…Charts; Khader normalisation makes each map composition-aware/reusable across fluids. Gap 3 (geometry-based map generation)RadialExpanderGeometryMap is a mean-line radial-inflow (IFR) turbine model that builds an ExpanderChartKhader from blade geometry (impeller diameter, radius ratio, degree of reaction, nozzle angle per IGV) using a classic incidence + nozzle/rotor loss accounting; peak η sits near $\nu_{opt}=\sqrt{1-R}\sin\alpha_2$ with the characteristic concave roll-off. GOTCHA: CompressorChartKhader2015.getPolytropicHead/Efficiency call fluid.getSoundSpeed(), so the working fluid must be TPflashed + initThermoProperties() before querying the library map (unflashed fluid → NaN head). All Java 8 compatible (explicit types, anonymous Executable/Comparator); JavaDoc complete with KaTeX; validated .\mvnw.cmd test → 12/12 pass.

2026-06-17 — Turboexpander off-design state-of-the-art enhancements (P1–P6)

Type: E (Feature) / B (Process) Keywords: turboexpander, expander performance map, ExpanderChartKhader, composition-aware, IGV control, inlet guide vanes, efficiency penalty curve, anti-surge controller, runTransient, recycle valve, seal-gas envelope, axial thrust, thrust bearing, critical speed, operating envelope, hydrate margin, OEM map ingestion, Khader 2015 Solution: New classes src/main/java/neqsim/process/equipment/expander/ExpanderChartKhader.java (P1), TurboExpanderMapIngestion.java (P4), TurboExpanderOperatingEnvelope.java (P6), src/main/java/neqsim/process/controllerdevice/AntiSurgeController.java (P3), src/main/java/neqsim/process/mechanicaldesign/expander/TurboExpanderSealGasEnvelope.java (P5); modified TurboExpanderCompressor.java (P1+P2 — chart hook, IGV control mode + efficiency penalty curve). Tests: src/test/java/neqsim/process/equipment/expander/TurboExpanderEnhancementsTest.java (6 tests), src/test/java/neqsim/process/controllerdevice/AntiSurgeControllerTest.java (2 tests) — all 8 pass. Notes: Implemented the 6 prioritized NIPs from the turboexpander review to bring the expander side to compressor-side fidelity. P1ExpanderChartKhader is a composition-aware 2-D map η_s,head = f(U/C, IGV) modeled on CompressorChartKhader2015: head normalized by reference-fluid sound speed² then scaled by the actual process-fluid cs², bilinear interpolation over U/C and IGV with edge clamping. TurboExpanderCompressor.computeExpanderEfficiency() uses the chart when defined, else falls back to the parabolic U/C × design-eff law. P2 — IGV promoted to a controllable DOF: setIgvControlMode(true) makes IGVopening a true input (model no longer recomputes it), coupled to setIgvEfficiencyPenaltyCurve() (η loss vs opening). P3AntiSurgeController extends ControllerDeviceBaseClass, reads Compressor.getDistanceToSurge(), reverse-acting PI with anti-windup drives a recycle ThrottlingValve via setPercentValveOpening() in runTransient. P4TurboExpanderMapIngestion builds auditable CompressorChartKhader2015 + ExpanderChartKhader from digitized OEM anchor points (certified design + Case B) with validateExpanderChart(tolerance). P5TurboExpanderSealGasEnvelope checks axial thrust vs ΔP and thrust-bearing limit, seal-gas heater duty (28 kW, 30 °C set-point), and critical-speed margin; converts thermodynamic feasibility into mechanical allowability. P6TurboExpanderOperatingEnvelope sweeps inlet-P × flow producing feasibility/surge-margin/cold-end-T/hydrate-margin grids with toJson(). GOTCHA: P3 controller fully overrides runTransient (controlled var comes directly from the compressor, not a transmitter); P5 made a standalone companion class rather than editing the 1000-line TurboExpanderCompressorMechanicalDesign. All Java 8 compatible; JavaDoc complete; validated .\mvnw.cmd test → 8/8 pass.

2026-06-17 — Offshore gas-plant turboexpander future-operation review (NeqSim capability assessment)

Type: B (Process) / G (Workflow) Keywords: turboexpander, brake compressor, off-design, cold-end validation, hydrate margin, turndown, capability assessment, NIP, state of the art, future operation review Solution: Private task folder (redacted) — step1 docs (task_spec.md, notes.md, capability_assessment.md, neqsim_improvements.md with 6 NIPs), step2 notebook (3 figures, results.json) Notes: Answered the user’s two questions: (1) Yes, NeqSim can do a detailed technical review of future operation for a single-shaft turboexpander/brake-compressor. The notebook anchors to the certified design (60.4→44.7 bara, 3.9→−11.56 °C, 6550 rpm) and colder Case B (59.45→36.5 bara, −19.84→−41.38 °C, 8160 rpm) points. Machine-specific cold-end validation: at nominal η_s=0.85 the model reproduces certified expander outlet T within ~2–3 °C (design −14.68 vs −11.56; Case B −43.18 vs −41.38), with the 0.80–0.90 band bracketing certified — the small offset tracks the assumed gas (MW 18.84 vs certified 19.1–19.5), not the model. Integrated single-shaft MapTurboExpanderCompressor (BALANCED_SPEED) gives self-balancing speed, surge distance (1.21), turndown limit (~57 bara on the illustrative map), and SRK-CPA cold-end hydrate margins (design −26.8 °C, Case B −55.1 °C below hydrate-form T → dehydration/dry-seal-gas integrity-critical). (2) 6 prioritized improvements to reach state of the art (neqsim_improvements.md): NIP-1 true expander efficiency map η=f(U/C,%N,IGV) (fixes solver instability <75% load); NIP-2 IGV as controllable input + efficiency-penalty curve; NIP-3 dynamic anti-surge control in runTransient; NIP-4 mechanical/thrust/seal-gas envelope; NIP-5 OEM map ingestion; NIP-6 multi-variable feasibility/surge/hydrate contour envelope. Scope caveat: OEM performance curves are scanned images sized far larger than the illustrative composition-aware compressor map, so integrated speed/surge numbers are methodological; the flow-independent cold-end validation is machine-specific. GOTCHA: back-calculating expander η from a small ΔT window is over-sensitive to assumed composition (gave spurious 0.54) — report model-vs-certified ΔT at nominal η instead. Notebook validated end-to-end via nbconvert (160 KB).

2026-06-17 — IGV schedule + anti-surge recycle curve fits; MapTurboExpanderCompressor.toJson/feasibility

Type: E (Feature) / B (Process) Keywords: turboexpander, IGV, inlet guide vanes, anti-surge recycle, hot-gas bypass, turndown, U/C ratio, curve fit, OperatingStatus, toJson, EC-OD, off-design Solution: src/main/java/neqsim/process/equipment/expander/MapTurboExpanderCompressor.java (added OperatingStatus enum, getOperatingStatus(), isFeasible(), toMap(), toJson()), src/test/java/.../MapTurboExpanderCompressorTest.java (added testInfeasibleTurndownPath, testToJsonReportsKeyResults — 4 tests pass), examples/notebooks/ExpanderCompressorModelComparison.ipynb (new Section 11: IGV schedule + recycle curve fits) Notes: Closed reporting gaps on the map-based machine: toJson()/toMap() now emit shaft speed, operating status (BALANCED / UNDER_POWER_SURGE / OVER_POWER_MAX_SPEED), feasibility, and power-balance residual. Notebook Section 11 adds two fitted off-design correlations for the reference single-shaft machine (design 60.4→44.7 bara, 6550 rpm; Case B 59.45→36.5 bara, 8160 rpm): (1) IGV schedule — sweeping expander throughput 100→75% shows IGVopening falls linearly with flow (0.258→0.200), confirming nozzle continuity $A\propto Q/C$; U/C and η hold near optimum to ~80% load then roll off. NOTE: curve-fit TurboExpanderCompressor speed solver hits its bounds (1000/9000 rpm) below ~75% load → restrict sweeps to the valid range. (2) Recycle correlation — make-up power below the turndown limit (55.75 bara) fitted as makeup% = a·exp(b·ΔP). Both grounded in Bloch & Soares (2001) and the TAMU Tutorial on Cryogenic Turboexpanders. Validated end-to-end via nbconvert (495 KB).

2026-04-09 — MapTurboExpanderCompressor + all expander/compressor model comparison

Type: E (Feature) / B (Process) Keywords: turboexpander, expander-compressor, companding, EC-OD, River City Engineering, Mafi-Trench, single shaft, power balance, compressor map, CompressorChartKhader2015, off-design Solution: src/main/java/neqsim/process/equipment/expander/MapTurboExpanderCompressor.java (new map-based single-shaft machine), src/test/java/neqsim/process/equipment/expander/MapTurboExpanderCompressorTest.java, examples/notebooks/ExpanderCompressorModelComparison.ipynb (compares Expander, Compressor+map, CompressorChartKhader2015, TurboExpanderCompressor, MapTurboExpanderCompressor) Notes: New MapTurboExpanderCompressor couples a real Expander + Compressor on a common shaft and solves shaft speed by power balance (BALANCED_SPEED mode) reusing the compressor performance map — the open analogue of EC-OD’s rigorous map method, complementing the existing curve-fit/IGV TurboExpanderCompressor. Notebook gotchas: (1) compressor map flow range must match the feed’s actual inlet volumetric flow (130000 kg/hr ≈ 3525 m³/hr lands mid-map; 423000 kg/hr was far off-map and gave negative head/efficiency); (2) CompressorChartKhader2015.setCurves requires strictly increasing flow per speed line — a duplicate point (3591.5, 3591.5) threw NonMonotonicSequenceException. Both integrated models agree closely (discharge 52.4 vs 52.1 bara, shaft power balanced). Notebook also includes a turndown / feasibility analysis: as expander inlet pressure falls, recovered power drops ~linearly (isentropic enthalpy-drop law) while the brake-compressor min-speed power demand stays ~constant (1.019 MW); their crossover gives the minimum feasible inlet pressure (~55.5 bara, expansion ratio ≈1.33). Below it the shaft pegs at min map speed with negative power-balance residual → compressor surge (EC-OD recycle line). Related to Bloch & Soares (2001), Agahi & Ershaghi, Whitfield & Baines (U/C≈0.7). Notebook validated end-to-end via nbconvert.

2026-06-16 — Offshore gas platform process model: lumped + high-fidelity expansion

Type: B (Process) Keywords: ProcessModel, multi-area, E300 shared-pseudo, parallel compressor trains, anti-surge per train, TEG dehydration regeneration, SRK-CPA water saturation, test separator, verification benchmark, two-fidelity flag Solution: private task folder (redacted) — eot_sla Python package (one ProcessSystem builder per area composed into a ProcessModel) plus a stand-alone TEG regeneration sub-model module Notes:

2026-06-09 — Distillation column energy-balance bug: phase-split out-stream enthalpy

Type: E (Feature / bug fix) Keywords: distillation, DistillationColumn, SimpleTray, reboiler duty, energy balance, phaseToSystem, getEnthalpy, single phase, phase type, TEG regeneration Solution: Fix in src/main/java/neqsim/process/equipment/distillation/SimpleTray.java (scalePhaseSystemToNormalizedMoles); regression test src/test/java/neqsim/process/equipment/distillation/TegRegenerationEnergyBalanceTest.java Notes: Single-stage TEG regeneration column reported reboiler duty ~6 kW and global energy imbalance ~ -20 kW (reference rig value 24.38 kW). Root cause: SystemThermo.phaseToSystem builds a single-phase out-stream by copying the selected phase’s moles into every phase slot, relying on setNumberOfPhases(1) + setPhaseType. SimpleTray.scalePhaseSystemToNormalizedMoles then re-scaled all slots and ended with init(0); init(1), which re-expanded the system to its max phases AND reset slot 0 to the default (gas) type — so getEnthalpy() summed a spurious second phase and evaluated a liquid outlet on the vapour EOS root. Gas outlets “accidentally” worked (default slot-0 type is gas). Fix: capture PhaseType getType() at method entry, then after scaling do setNumberOfPhases(1); setPhaseType(0, extractedType); init(3). Note setPhaseType(int, String) rejects names like “aqueous” via byName, so use the PhaseType enum overload. After fix: Qreb=24.57 kW, global imbalance 0.008 kW, all 90 existing distillation tests still pass.

2026-06-04 — Gravity dump-flood seawater injection: choke cavitation, free-fall & flow-assurance screen

Type: B (Process / Flow assurance) + E (Feature) Keywords: gravity injection, dump flood, seawater injection, depleted reservoir, hydrostatic head, choke cavitation, ISA-75, IEC 60534, vapour pressure, free-fall, vapour cavity, downhole choke, ICD, water hammer, Joukowsky, API 14E erosional velocity, FIV, sulphate scale, BaSO4, SrSO4, ElectrolyteScaleCalculator, subsea water treatment, GravityDumpFloodInjectionAnalyzer Solution: task_solve/2026-06-04_gravity_dump_flood_seawater_injection_choke_cavitation_fa/ (notebook step2_analysis/01_choke_cavitation_screen.ipynb) + new Java class src/main/java/neqsim/process/equipment/pipeline/GravityDumpFloodInjectionAnalyzer.java + test Notes: A 2630 m sub-seabed seawater column (ρ≈1013 kg/m³ at 2.5 °C) delivers ~261 bar static head — exceeding a depleted reservoir at 180–200 bara (static sandface ~299 bara). To land sandface on P_res the tubing-top pressure would be NEGATIVE (−61 to −81 bara) ⇒ a wellhead/seabed choke CANNOT throttle it: the column free-falls and a near-vacuum vapour cavity opens to ~617 m below seabed (P_res 200). Water true vapour pressure is ~7.5 mbar (NOT the “0.01 bar” liquid assumption), so a surface choke drives σ→0 (full flashing/cavitation/erosion/FIV). The ~100–120 bar surplus MUST be dissipated DOWNHOLE (downhole choke / ICD / small-ID tail-pipe; 6” friction only ~1.6 bar, need <100 mm ID). Water hammer on the liquid-full column ≈13 bar (6”, wave 1365 m/s, reflection 2L/a≈3.85 s ⇒ close slower). API 14E erosional velocity Ve≈3.83 m/s. Sulphate scale from seawater SO4 + formation Ba/Sr: BaSO4 SI up to 3.48 (strongly scaling) ⇒ rising backpressure over life. Implemented the missing unified GravityDumpFloodInjectionAnalyzer (head balance + free-fall/vapour-cavity onset + required downhole back-pressure + friction tail-pipe sizing + ISA-75 σ), Java 8, Serializable, 3 JUnit tests green; cross-validates the notebook (head 261.24 vs 261.44 bar). Total solution: subsea seawater treatment (filtration + electrolytic disinfection + sulphate removal, e.g. Seabox/SWIT NOV, qualified ~3000 m) as the water-quality front-end + downhole flow control. Consistency-checker FAIL is the known false-positive pattern (parametric sweep arrays + two depletion cases lumped into other).

2026-06-02 — Kent-Eisenberg validation: CO₂/H₂S partial pressures over aqueous MDEA

Type: C (PVT/thermo validation) Keywords: Kent-Eisenberg, MDEA, amine, CO2, H2S, acid gas loading, partial pressure, validation, electrolyte chemistry, SystemKentEisenberg Solution: task_solve/2026-06-02_kent_eisenberg_model_validation_co2_h2s_amine/step2_analysis/kent_eisenberg_validation.ipynb Notes: SystemKentEisenberg is MDEA-only (protonation + bicarbonate/carbonate + bisulfide, NO carbamate; for MEA/DEA use AmineSystem). MUST call chemicalReactionInit() + createDatabase(True) BEFORE setMixingRule(4), else acid gas is treated as physical Henry-law solubility and pCO₂ is over-predicted by 1–2 orders. Robust partial pressure = liquid-phase fugacity p_i = x_i·φ_i·P at a single-liquid TP flash (avoids unstable bubble-point search). Known limitation: CO₂ @ 40 °C (313.15 K) does not converge the electrolyte equilibrium solve in this build (free-CO₂ x→1, pressure-independent) — flagged non-converged and excluded; CO₂ @ 50 °C and H₂S @ 40/50 °C converge. Consistency checks use Spearman ρ≥0.98 for monotonicity (tolerant of ~2% solver noise at top loading). Literature comparison is a labelled PLACEHOLDER (Jou/Mather/Otto 1982 anchors) — deviations illustrative only; NeqSim still over-predicts pCO₂ vs open-literature MDEA range.

2026-05-30 — Agentic dynamics: pluggable integrators + EventScheduler wired into runTransient

Type: E (Feature) Keywords: dynamic simulation, runTransient, IntegratorStrategy, BDFIntegrator, implicit euler, EventScheduler, ESD trip, setpoint ramp, ProcessSystem, ProcessModel, measurement device, differential pressure transmitter, composition analyzer, flow ratio meter, transient runnable serialization Solution: src/main/java/neqsim/process/dynamics/{IntegratorStrategy,ExplicitEulerIntegrator,BDFIntegrator,EventScheduler}.java; src/main/java/neqsim/process/measurementdevice/{DifferentialPressureTransmitter,CompositionAnalyzer,FlowRatioMeter}.java; wiring in ProcessSystem.runTransient(double,UUID) and new ProcessModel.runTransient(double,UUID) / setEventScheduler / setIntegratorStrategy; tests in src/test/java/neqsim/process/processmodel/RunTransientEventSchedulerTest.java. Notes: EventScheduler must be a transient field on ProcessSystem because Runnable payloads (lambdas, anonymous classes) are not Serializable; otherwise ProcessSystem.deepCopy inside captureInitialState throws NotSerializableException on the first runTransient call. Multi-area plants: install scheduler once on ProcessModel, it is propagated to every child area. For stiff dynamics use setIntegratorStrategy(new BDFIntegrator()); check lastStepFellBack() after each step to detect Newton-divergence fallback. Skill neqsim-dynamic-simulation updated with three new sections.

2026-05-30 — Agentic synthesis: SeparationDuty + FlowsheetSynthesisEngine

Type: E (Feature) Keywords: flowsheet synthesis, separation duty, candidate topology generation, total annual cost, recovery target, purity target, unit operation selection, agentic process design Solution: src/main/java/neqsim/process/synthesis/{SeparationDuty,FlowsheetSynthesisEngine,FlowsheetCandidate}.java; tests in src/test/java/neqsim/process/synthesis/. Notes: Engine generates candidate flowsheet topologies (separator trains, columns, flash cascades) for a given SeparationDuty and scores them on TAC / recovery / energy, returning a ranked List<FlowsheetCandidate> with JSON-serializable spec for downstream agents. Reusable lesson: keep the duty spec orthogonal to the synthesis engine so future synthesis strategies (genetic, RL, LLM-guided) plug in cleanly.

2026-05-30 — Agentic automation: typed writes with rollback + audit log

Type: E (Feature) Keywords: ProcessAutomation, typed write validation, setVariableValue, transactional rollback, write history audit, diagnostics taxonomy, VALUE_OUT_OF_BOUNDS, INVALID_TYPE, READ_ONLY_VARIABLE, UNIT_CONVERSION_FAILED Solution: src/main/java/neqsim/process/automation/ProcessAutomation.java plus diagnostics in AutomationDiagnostics; tests under src/test/java/neqsim/process/automation/. Notes: setValuesWithRollback(Map updates, String unit) reverts every write in the batch if any single update fails validation. getWriteHistory() returns a timestamped audit list with old/new value, unit, status, and error category. Reusable lesson: for agentic write paths, validate before mutating and capture the pre-write value for every variable so a single failure does not leave the model in an inconsistent state.

2026-05-08 — Safety-system barrier performance analyzer

Type: E (Feature) / G (Workflow) Keywords: safety critical systems, barrier performance, major accident risk, deluge, firewater, fire gas detection, passive fire protection, SIS voting, STID, performance standards Solution: src/main/java/neqsim/process/safety/barrier/SafetySystemPerformanceAnalyzer.java; tests in src/test/java/neqsim/process/safety/barrier/SafetySystemPerformanceAnalyzerTest.java Notes: Added an analyzer that bridges the existing BarrierRegister, FireDetector/GasDetector, and neqsim.process.logic.sis.SafetyInstrumentedFunction models. Reusable lesson: assess active/passive safety-system barriers as a reporting layer over existing evidence, instruments, and SIS logic instead of creating parallel detector or SIF abstractions.

2026-05-08 — Recompressor barrier verification technical safety screen

Type: F (Design) / G (Workflow) Keywords: barrier verification, technical safety, closed flare, recompressor, HAZOP, FMEA, LOPA, bow-tie, risk matrix, STID, tagreader Solution: private task folder (redacted) Notes: Completed a separate barrier and technical-safety screening study using prior NeqSim source-term results and a real STID retrieval package curated into a barrier-linked evidence inventory. Reusable lesson: broad document retrieval should be converted into a small traceable evidence map, and current barrier credit should still be withheld until status, effectiveness, independence, proof-test/SRS evidence, event replay, and material/MDMT records are verified.

2026-05-08 — Closed-flare recompressor blowdown verification screen

Type: F (Design) / G (Workflow) Keywords: closed flare, recompressor, blowdown, trapped inventory, depressurization, MDMT, flare load, tagreader, STID, technical safety Solution: private task folder (redacted); reusable code in src/main/java/neqsim/process/safety/inventory/TrappedInventoryCalculator.java; tests in src/test/java/neqsim/process/safety/inventory/TrappedInventoryCalculatorTest.java Notes: Reused a private, consistency-checked recompressor inventory and dynamic blowdown source-term task, screened transient flare load versus documented capacity context, and generated Word/HTML report outputs. Added TrappedInventoryCalculator to bridge documented equipment/pipe volume evidence to NeqSim blowdown inputs. Reusable lesson: distinguish small transient blowdown loads from sustained closed-flare/recompression operating margin, and treat low blowdown temperatures as an MDMT follow-up until material/wall data are verified.

2026-05-07 — Confidential gas precompression inlet velocity screen

Type: B (Process) / G (Workflow) Keywords: STID, tagreader, P&ID, pressure drop, gas velocity, scrubber, compressor suction, Word report, PipeBeggsAndBrills Solution: private task folder (redacted) Notes: Retrieved route P&IDs and equipment design documents from STID, extracted line/nozzle diameters, read 24-hour historian averages with tagreader, used NeqSim gas properties plus a PipeBeggsAndBrills straight-pipe check, and generated a Word report. Reusable lesson: reject inconsistent historian unit metadata, document the adopted flow-unit interpretation, and separate measured route pressure loss from straight-pipe friction and local equipment/minor losses.

2026-05-07 — Confidential STID UniSim power extraction

Type: B (Process) / G (Workflow) Keywords: STID, UniSim, HYSYS, process simulation, total power, compressor duty, document retrieval Solution: private task folder (redacted) Notes: Searched multiple installation scopes for the newest runnable .usc case, inspected zip attachments before selecting the latest case file, ran the selected UniSim case through COM, and reported total mechanical power as compressor plus pump duty. Reusable pattern: keep STID identifiers and asset-specific power values private, while recording the selection and power-accounting method publicly.

2026-05-06 — Confidential separator carry-over cooler scaling screen

Type: B (Process) / G (Workflow) Keywords: separator carry-over, cooler scaling, anti-surge recycle, STID, tagreader, NaCl source term, compressor calibration, plate heat exchanger Solution: private task folder (redacted) Notes: Built a NeqSim gas-path screening model from separator gas outlet through a suction cooler, scrubber, and recompressor with measured fixed anti-surge recycle. STID and tagreader manifests were kept in the private task folder. Reusable pattern: model anti-surge recycle as a measured stream when compressor maps are unavailable, then evaluate NaCl risk first as a water carry-over source term and halite saturation threshold before claiming a deposition/fouling rate.

2026-04-29 — Route-level piping hydraulic builder for STID line lists

Type: E (Feature) / G (Workflow) Keywords: PipingRouteBuilder, STID, E3D, line list, piping route, pressure drop, PipeBeggsAndBrills, fittings, K-value, equivalent length Solution: src/main/java/neqsim/process/equipment/pipeline/routing/PipingRouteBuilder.java, src/test/java/neqsim/process/equipment/pipeline/routing/PipingRouteBuilderTest.java, docs/process/piping_route_builder.md Notes: Added a high-level builder that converts serial line-list rows with from/to nodes, pipe length, hydraulic diameter, wall thickness, roughness, elevation change, and fitting/valve K values into a ProcessSystem of Beggs-and-Brill pipe segments. Future STID/E3D/P&ID hydraulic tasks should extract route rows first, then use PipingRouteBuilder instead of hand-assembling pipe units; export route.toJson() for traceability and reuse.

2026-04-28 — Confidential upstream compressor pressure-drop analysis

Type: B (Process) Keywords: upstream compressor, precompression, pressure drop, STID, tagreader, piping hydraulics, separator outlet, scrubber, route hydraulics, debottlenecking Solution: private task folder (redacted) Notes: STID P&IDs/stress isometrics and a saved pressure workbook were combined with NeqSim PR gas properties and Darcy/K-value hydraulics. Base model pressure drop matched the plant snapshot within about 0.1 bar. Main reusable lesson: extract serial route rows first, preserve private source references only inside the task folder, and keep public logs to generic route-pressure-drop decisions and method choices.

2026-04-21 — Confidential scrubber performance deliverable

Type: F (Design) / G (Workflow) Keywords: scrubber, GasScrubberMechanicalDesign, operator-specific conformity, ConformityReport, mesh pad, demisting cyclones, inlet momentum, k-factor, historic peak Solution:

2026-07-04 — Compressor Sealing

Type: B (Process) Keywords: bics, components, compressor, connected, equipment, flow, floating production, model, pr78 Solution: private task folder (redacted) Notes: The unified NeqSim model replicates a confidential floating production process in a single connected ProcessSystem. Public log keeps only reusable modeling lessons; asset-specific validation metrics remain in the private task folder.

2026-04-16 — Confidential full process model with plant data integration

Type: B (Process) Keywords: compression, converged, data, full process, plant data integration, liquid recycle, recycle convergence Solution: private task folder (redacted) Notes: A confidential full process model with recycles converged. Scrubber liquids were recycled to appropriate separation stages and parallel train behavior was modeled explicitly. Exact asset names and performance figures are kept in the private task folder.

2026-04-16 — CO2 injection hydrogen accumulation in wells

Type: B (Process) Keywords: accumulation, hydrogen, injection, wells, CO2, CCS Solution: private task folder (redacted) Notes: Task folder created; analysis in progress.

2026-04-16 — CO2 injection hydrogen accumulation risk assessment

Type: B (Process) Keywords: accumulation, assessment, bara, classic, component, conditions, critical, dense, drops, equation Solution: private task folder (redacted) Notes: The confidential CO2 injection well case operates safely in dense single phase under the screened normal operating envelope.

2026-04-13 — Elemental sulfur deposition in gas turbine fuel

Type: B (Process) Keywords: approximately, assumed, causes, cooling, deposition, drop, elemental sulfur, fuel gas Solution: private task folder (redacted) Notes: NeqSim thermodynamic modelling showed a low-temperature S8 deposition risk for an assumed confidential fuel-gas case. Public log retains only the reusable JT-cooling and sulfur-solidification workflow.

2026-04-13 — FLNG feedgas process design and analysis

Type: F (Design) Keywords: achieved, amine, benzene, both, case, cases, comp, component, design, essentially Solution: task_solve/2026-04-13_flng_feedgas_process_design_and_analysis/step2_analysis/01_flng_process.ipynb Notes: 1. CO2 removal to 50 ppm achieved for both Lean and Rich cases via amine unit (modelled as component splitter). 2.

2026-04-10 — Crude oil blending into export blend

Type: B (Process) Keywords: blend, blending, crude, decreases, e300, exceed, fluid, fraction, gravity Solution: private task folder (redacted) Notes: The confidential crude blend API gravity decreases monotonically with increasing heavy-stream fraction. Public log keeps the reusable interpolation and specification-screening method; exact stream names are private.

2026-04-10 — Out of Zone Injection - NeqSim Implementation Discussion

Type: E (Feature) Keywords: discussion, implementation, injection, zone Solution: task_solve/2026-04-10_out_of_zone_injection_neqsim_implementation_discussion/ Notes: Task folder created; analysis in progress.

2026-04-09 — MIMEE NeqSim Code Review - Methane Emissions

Type: E (Feature) Keywords: code, emissions, methane, mimee, review Solution: task_solve/2026-04-09_mimee_neqsim_code_review_methane_emissions/step2_analysis/01_reference_implementation.ipynb, task_solve/2026-04-09_mimee_neqsim_code_review_methane_emissions/step2_analysis/02_detailed_method_comparison.ipynb, task_solve/2026-04-09_mimee_neqsim_code_review_methane_emissions/step2_analysis/04_gas_composition_sensitivity.ipynb Notes: Key results: deviation average percent: 38.0; deviation range percent: 8.4% to 80.1%; offshore norge equivalent temp C: 60-65; crossover temp C: ~40; neqsim factor at 20C g per m3 bar: 25.21.

2026-04-08 — Condensation UniSim NeqSim comparison

Type: D (Standards) Keywords: characterization, comparison, component, components, compositions, condensation, e300, feed Solution: private task folder (redacted) Notes: The E300 import successfully reproduces the UniSim 31-component fluid characterization in NeqSim. Molecular weights match to within 0.3% for all 12 streams tested (feed, gas, oil compositions). The feed flash vapour fraction differs by 3.

2026-04-08 — R510 SG condensation UniSim to NeqSim conversion

Type: B (Process) Keywords: condensation, conversion, r510, unisim Solution: task_solve/2026-04-08_r510_sg_condensation_unisim_to_neqsim_conversion/step2_analysis/01_unisim_neqsim_comparison.ipynb Notes: Task folder created; analysis in progress.

2026-04-08 — Early phase sprint paper

Type: B (Process) Keywords: early, paper, phase, sprint, field development Solution: private task folder (redacted) Notes: Task folder created; analysis in progress.

2026-04-07 — Compressor dry gas seal condensation analysis

Type: B (Process) Keywords: alkane, caused, causes, components, compressor, condensation, continuous, dry gas seal, envelope Solution: private task folder (redacted) Notes: A confidential dry gas seal case identified two condensation mechanisms. Public log keeps only the reusable phase-envelope, JT expansion, and seal-gas workflow; equipment tags and exact pressures remain private.

2026-04-07 — Injection compressor dry gas seal failure analysis

Type: B (Process) Keywords: compressor, failure, injection, seal, dry gas seal Solution: private task folder (redacted) Notes: Task folder created; analysis in progress.

2026-04-06 — Advanced Electrolyte EOS Development and Scientific Paper

Type: A (Property) Keywords: advanced, average, calculation, corrected, counter, cross, development, dilution, discovered, electrolyte Solution: task_solve/2026-04-06_advanced_electrolyte_eos_development_and_scientific_paper/step2_analysis/01_electrolyte_model_comparison.ipynb Notes: Discovered fundamental reference state bug in getActivityCoefficient(k): counter-ions retained in reference, weakening DH ~3x. Corrected 2-arg calculation reduces average MAE from 16.9% to 4.2%. Cross-ion Cl- W0 consistency improved from 6x to 1.

2026-04-06 — TEG Dehydration Sizing for 50 MMSCFD Wet Gas

Type: B (Process) Keywords: dehydration, mmscfd, sizing Solution: task_solve/2026-04-06_teg_dehydration_sizing_for_50_mmscfd_wet_gas/step2_analysis/01_TEG_dehydration_sizing.ipynb Notes: Task folder created; analysis in progress.

2026-04-05 — Wax Formation Models Comparison and Improvement

Type: D (Standards) Keywords: comparison, formation, improvement, models Solution: task_solve/2026-04-05_wax_formation_models_comparison_and_improvement/ Notes: Task folder created; analysis in progress.

2026-03-30 — NeqSim Library Review - High Impact Fixes and Updates

Type: E (Feature) Keywords: fixes, high, impact, library, review, updates Solution: task_solve/2026-03-30_neqsim_library_review_high_impact_fixes_and_updates/ Notes: Task folder created; analysis in progress.

2026-03-27 — Hydrogen blending in export gas quality analysis

Type: B (Process) Keywords: binding, blending, compositions, constraint, density, export, fraction, hydrogen, index, lean Solution: private task folder (redacted) Notes: Relative density — not the Wobbe index — is the binding constraint for H2 blending in the screened export-gas cases. Lean gas tolerates lower H2 addition than medium or rich gas before violating EN 16726 relative-density limits.

2026-03-27 — Process model from existing simulator

Type: B (Process) Keywords: compression, compressors, condensate, existing simulator, export, feed, model Solution: private task folder (redacted) Notes: The confidential process model runs successfully in NeqSim with PR EOS. Public log keeps the reusable simulator-conversion and compression-train workflow, while asset names and exact capacities remain private.

2026-03-26 — CO2 injection hydrogen accumulation in wells

Type: B (Process) Keywords: accumulation, bara, bulk, component, enrichment, factors, hydrogen, injection, mixing, phase Solution: private task folder (redacted) Notes: Hydrogen accumulation in the gas phase is a REAL thermodynamic phenomenon. At T=4 C the two-phase region spans 42-58 bara. H2 enrichment factors reach 5-8x (3.9-5.9 mol% H2 in gas vs 0.75% in bulk). K_H2 = 11.9 at 50 bara.

2026-03-24 — NeqSim Pseudo-Component Characterization Documentation

Type: E (Feature) Keywords: characterization, component, documentation, pseudo Solution: task_solve/2026-03-24_neqsim_pseudo_component_characterization_documentation/ Notes: Task folder created; analysis in progress.

2026-03-24 — Probabilistic NPV Monte Carlo analysis

Type: G (Workflow) Keywords: analytical, appraisal, carlo, field, function, influential, model, monte, musd Solution: private task folder (redacted) Notes: A confidential field NPV study used Monte Carlo and value-of-information screening. Public log keeps the reusable economic workflow; field name, exact valuation figures, and recommendations remain private.

2026-03-23 — FLNG Class A Concept Study Offshore Tanzania 3000m

Type: G (Workflow) Keywords: benchmarks, c3mr, capex, challenges, class, concept, contr, depth, economic, faces Solution: task_solve/2026-03-23_flng_class_a_concept_study_offshore_tanzania_3000m/step2_analysis/01_reservoir_fluid_pvt.ipynb, task_solve/2026-03-23_flng_class_a_concept_study_offshore_tanzania_3000m/step2_analysis/02_flng_process_simulation.ipynb, task_solve/2026-03-23_flng_class_a_concept_study_offshore_tanzania_3000m/step2_analysis/03_capex_economics.ipynb Notes: The FLNG Tanzania concept at 3000m water depth faces significant economic challenges. Total CAPEX of $6201M ($1772/tonne) is at the upper end of FLNG benchmarks.

2026-03-23 — CO2 injection hydrogen accumulation analysis

Type: B (Process) Keywords: accumulation, beckm, concern, confirmed, cross, engineering, feasibility, four, gerg, hydrogen Solution: private task folder (redacted) Notes: Hydrogen accumulation in the gas phase is a confirmed engineering concern for the confidential CO2 injection case, validated by four independent EOS models and cross-referenced with private feasibility-study findings.

2026-03-21 — compressor_train_analysis

Type: B (Process) Keywords: above, assessed, baseline, booster, capex, compressor, compressordesignfeasibilityreport, extends, feasibility Solution: private task folder (redacted) Notes: The booster compressor + precooler installation screened as feasible for a confidential production case. Public log keeps only the reusable compressor-feasibility workflow; asset name and exact economic uplift remain private.

2026-03-20 — H2 properties data comparison

Type: D (Standards) Keywords: aard, agrees, closely, compared, comparison, data, densitometer, density, enhanced, experimental Solution: task_solve/2026-03-20_h2_properties_data_comparison/step2_analysis/01_h2_density_comparison.ipynb Notes: Overall AARD: REFPROP=1.8408%, NeqSim Std GERG-2008=2.0790%, NeqSim GERG-2008-H2=2.2120%, NeqSim SRK=1.9948%. NeqSim standard GERG-2008 agrees closely with REFPROP (AARD=0.6221%).

2026-03-19 — Utsira Nord Floating Wind Class A Concept Study

Type: G (Workflow) Keywords: class, commercial, concept, cost, costs, current, farm, floati, floating, foundation Solution: task_solve/2026-03-19_utsira_nord_floating_wind_class_a_concept_study/step2_analysis/01_design_basis_and_site.ipynb, task_solve/2026-03-19_utsira_nord_floating_wind_class_a_concept_study/step2_analysis/02_wind_resource_and_aep.ipynb, task_solve/2026-03-19_utsira_nord_floating_wind_class_a_concept_study/step2_analysis/03_electrical_system_design.ipynb Notes: The project LCOE of ~2141 NOK/MWh (202 EUR/MWh) reflects the pre-commercial cost level of floating offshore wind. At current costs, the project requires substantial government CfD/subsidy support (~2000 NOK/MWh) to achieve economic viability.

2026-03-18 — umoe_composites_300bar_cng_tank_filling_temperature

Type: B (Process) Keywords: approximately, classic, composites, filling, hours, lean, limit, maximum, methane, mixing Solution: task_solve/2026-03-18_umoe_composites_300bar_cng_tank_filling_temperature/step2_analysis/01_filling_simulation.ipynb, task_solve/2026-03-18_umoe_composites_300bar_cng_tank_filling_temperature/step2_analysis/02_literature_review.ipynb, task_solve/2026-03-18_umoe_composites_300bar_cng_tank_filling_temperature/step2_analysis/03_benchmark_validation.ipynb Notes: Filling the Umoe Composites 300 bar Type IV tank from 20.0 to 300.0 bar at 247.5 Sm3/day takes approximately 52 hours. The maximum gas temperature reaches 31.0 C, which is within the ISO 11119-3 limit of 85.0 C with a margin of 54.0 C.

2026-03-12 — turboexpander modification evaluation for future operation

Type: B (Process) Keywords: across, barg, below, class, declining, decreases, drops, evaluation, feasible, future Solution: task_solve/2026-03-12_turboexpander_modification_evaluation_for_future_operation/step2_analysis/01_tex_performance.ipynb, task_solve/2026-03-12_turboexpander_modification_evaluation_for_future_operation/step2_analysis/02_seal_gas_condensation.ipynb, task_solve/2026-03-12_turboexpander_modification_evaluation_for_future_operation/step2_analysis/03_uncertainty_risk.ipynb Notes: TEX PERFORMANCE: Feasible 2025-2029 (inlet P > 48 barg). Infeasible from 2030 when pressure ratio drops below ~1.05. Speed DECREASES from ~6950 to ~4500 rpm — no overspeed risk. TEX provides 5-8 degC advantage over JT valve through 2029.

2026-03-11 — TPG4230 Field Development and Operations Learning Material

Type: G (Workflow) Keywords: aspects, assurance, chain, characterization, complete, compress, course, covering, covers, design Solution: task_solve/2026-03-11_tpg4230_field_development_and_operations_learning_material/step2_analysis/Module_01_Introduction_and_Value_Chain.ipynb, task_solve/2026-03-11_tpg4230_field_development_and_operations_learning_material/step2_analysis/Module_02_Flow_Performance.ipynb, task_solve/2026-03-11_tpg4230_field_development_and_operations_learning_material/step2_analysis/Module_03_Oil_Gas_Processing.ipynb Notes: The learning material covers all key aspects of field development: reservoir fluid characterization, production flow performance, oil and gas processing, flow assurance, separator design, gas compression and pipeline hydraulics, production scheduling…

2026-03-07 — Ultima Thule Field Development - Class A Study

Type: G (Workflow) Keywords: class, development, field, study, thule, ultima Solution: task_solve/2026-03-07_UltimaThule_ClassA_study/ Notes: Task folder created; analysis in progress.

2025-07-24 — Process Optimization Enhancements: NIP-03, NIP-06, NIP-08, NIP-09 Implementation

Type: E (Feature) Keywords: process optimization, rate-based absorber, SQP optimizer, multiphase flow, Hagedorn-Brown, Mukherjee-Brill, multi-variable adjuster, Onda correlation, Billet-Schultes, mass transfer, enhancement factor, damped successive substitution Solution: src/main/java/neqsim/process/equipment/absorber/RateBasedAbsorber.java, src/main/java/neqsim/process/util/optimizer/SQPoptimizer.java, src/main/java/neqsim/process/equipment/pipeline/PipeHagedornBrown.java, src/main/java/neqsim/process/equipment/pipeline/PipeMukherjeeAndBrill.java, examples/notebooks/process_optimization_enhancements.ipynb Notes: Implemented four NIPs from process optimization review. NIP-06: RateBasedAbsorber with Onda 1968 and Billet-Schultes 1999 mass transfer correlations, Hatta/Van Krevelen enhancement factors (6 tests). NIP-08: SQPoptimizer with active-set SQP for constrained process optimization (5 tests). NIP-03: PipeHagedornBrown and PipeMukherjeeAndBrill multiphase flow correlations (8 tests). NIP-09: MultiVariableAdjuster convergence fix — replaced Broyden accelerator with damped successive substitution (α=0.1) after Broyden caused oscillation/divergence due to wrong Jacobian sign. All 23 tests pass. Docs updated: absorbers.md, sqp_optimizer.md, multiphase_flow_correlations.md, adjusters.md, CHANGELOG_AGENT_NOTES.md.

2026-04-17 — cDFT Surface Tension: Kernel Correction, Mixture Extension, Paper

Type: E (Feature) Keywords: cDFT, surface tension, interfacial tension, density functional theory, kernel range, mixture IFT, Peng-Robinson, SRK, predictive, lambda correlation, acentric factor, critical correction, Miqueu, gradient theory, Parachor, Fluid Phase Equilibria Solution: src/main/java/neqsim/thermo/util/LCSF/surfacetension/CDFTSurfaceTension.java, task_solve/2026-04-17_cdft_surface_tension_paper_kernel_correction_and_mixture_extension/, neqsim-paperlab/papers/cdft_surface_tension_2026/ Notes: Implemented predictive cDFT surface tension from cubic EOS. Three proposals: (A) kernel range correction λ(ω) = 0.749 − 0.740ω reduces AAD from 41.5% to 9.5% for 8 pure components (beats GT 12.8%, Parachor 17.6%; Miqueu GT 2.2% still best). (B) Mixture solver with shared-δ tanh profiles and cross kernels achieves 37.6% AAD for CH4/C3H8 at 277.6K (vs 61.7% Parachor). (C) Paper manuscript for Fluid Phase Equilibria with 4 figures, 3 tables. 27+ tests across 6 test classes. Key insight: critical exponent correction (1−Tr)^(−0.24) essential near Tc.

2026-04-18 — Systematic “hardcoded phase 0” bug elimination in two-phase flow

Type: E (Feature/Bugfix) Keywords: two-phase flow, mass transfer, heat transfer, friction factor, Reynolds number, velocity, phase index, interphase transport, Krishna-Standart, film model, non-equilibrium, pipeline condensation, stratified flow, slug flow, droplet flow, stirred cell Solution: src/main/java/neqsim/fluidmechanics/flownode/ (multiple files across 3 rounds) Notes: Found and fixed 29 bugs across 3 audit rounds. Root cause: methods accepting int phase/int phaseNum parameters internally called getReynoldsNumber(), getVelocity(), or calcWallFrictionFactor(0, node) without passing the phase index through. These default to phase 0 (gas), making liquid-phase (1) calculations use incorrect gas-phase Reynolds numbers, velocities, and friction factors. Fixed files: NonEquilibriumFluidBoundary, ReactiveKrishnaStandartFilmModel, KrishnaStandartFilmModel, TwoPhaseFixedStaggeredGridSolver, InterphaseStratifiedFlow, TwoPhaseFlowNode, InterphaseDropletFlow, InterphaseSlugFlow, InterphaseTransportCoefficientBaseClass, MultiPhaseFlowNode, InterphasePipeFlow, InterphaseStirredCellFlow. Also added NaN guards, divide-by-zero protections, convergence fixes, and dead code cleanup. All fluidmechanics tests pass.

2026-06-18 — TwoFluidPipe transient & pressure gradient benchmark and fixes

Type: E (Feature) Keywords: TwoFluidPipe, transient, multiphase, two-fluid model, pressure gradient, benchmark, McAdams viscosity, Beggs Brill, holdup, friction factor, Haaland, pipeline Solution: src/main/java/neqsim/process/equipment/pipeline/TwoFluidPipe.java, src/test/java/neqsim/process/equipment/pipeline/TwoFluidPipeBenchmarkTest.java Notes: Fixed transient inlet BC override (isTransientMode flag), outlet pressure capture bug, improved viscosity model (McAdams quality-based harmonic averaging). Added 19 benchmark tests in 8 categories validating against PipeBeggsAndBrills and literature. Single-phase gas ratio 0.98, two-phase GLR sweep 0.81–1.33, vertical riser gravity 1.04 bar matches ρgH, D⁻⁵ diameter scaling ratio 33.7. Transient holdup evolution 0.19→0.09 after flow step-change now works correctly.

2026-03-14 — Fix IEC 60534 gas valve sizing: use standard volumetric flow (issue #1918)

Type: D (Standards) Keywords: valve sizing, IEC 60534, Cv, Kv, gas valve, standard flow, actual flow, control valve, throttling valve, choked flow, N9 Solution: src/main/java/neqsim/process/mechanicaldesign/valve/ControlValveSizing_IEC_60534.java, src/main/java/neqsim/process/mechanicaldesign/valve/ControlValveSizing_IEC_60534_full.java, src/test/java/neqsim/process/mechanicaldesign/valve/ControlValveSizingTest.java Notes: Gas valve Cv was severely underestimated (~98% too low at 50 bara) because IEC 60534 equation was applied with actual volumetric flow instead of standard volumetric flow (273.15 K, 101.325 kPa). Fix: convert Q_actual to Q_std = Q_actual × (P₁/P_std) × (T_std/T₁) / Z before applying the IEC formula. Fixed in sizeControlValveGas(), calculateFlowRateFromKvAndValveOpeningGas(), and calculateValveOpeningFromFlowRateGas() in both base and _full classes. Added regression test matching Python fluids library result (Cv ≈ 16.2 for 10000 kg/hr methane at 50 bara). Liquid valves were not affected.

2026-03-10 — Process architecture improvements: stream introspection, named controllers, connections, unified elements

Type: E (Feature) Keywords: architecture, ProcessElementInterface, ProcessConnection, MultiPortEquipment, getInletStreams, getOutletStreams, controller map, named controllers, runTransient, controller scan, getAllElements, DEXPI, topology, stream introspection, connections Solution: src/main/java/neqsim/process/ProcessElementInterface.java, src/main/java/neqsim/process/equipment/MultiPortEquipment.java, src/main/java/neqsim/process/processmodel/ProcessConnection.java, src/main/java/neqsim/process/equipment/ProcessEquipmentInterface.java, src/main/java/neqsim/process/equipment/ProcessEquipmentBaseClass.java, src/test/java/neqsim/process/processmodel/ProcessArchitectureTest.java Notes: Six backward-compatible architecture improvements motivated by DEXPI integration friction. (1) Stream introspection: getInletStreams()/getOutletStreams() on ProcessEquipmentInterface with default empty lists; overridden in TwoPortEquipment, Separator, ThreePhaseSeparator, Mixer, Splitter — all return unmodifiable lists. (2) Named controller map: addController(tag, ctrl), getController(tag), getControllers() on ProcessEquipmentBaseClass alongside legacy setController(). (3) ProcessElementInterface: unified marker extending NamedInterface + Serializable; adopted by ProcessEquipmentInterface, MeasurementDeviceInterface, ControllerDeviceInterface. (4) Controller scan in runTransient: explicit loop over system-level controllerDevices after equipment loop. (5) ProcessConnection: typed connection metadata (MATERIAL/ENERGY/SIGNAL) with ProcessSystem.connect() and getConnections(). (6) MultiPortEquipment: abstract base class for multi-inlet/outlet equipment. 173 tests passing (14 architecture + 42 DEXPI + 117 core process). Documentation updated in process_system.md, extending_process_equipment.md, controllers.md, dynamic_simulation_guide.md, CODE_PATTERNS.md, CONTEXT.md.

2026-03-10 — DEXPI review: multi-outlet nozzles, stream identity matching, namespace support

Type: E (Feature) Keywords: DEXPI, multi-outlet, nozzle, separator, stream identity, connection, pass-through, namespace, absorber, stripper, column subtype, instrument rename, DexpiStreamUtils, DexpiXmlWriter, DexpiEquipmentFactory, DexpiSimulationBuilder Solution: src/main/java/neqsim/process/processmodel/dexpi/DexpiStreamUtils.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiXmlWriter.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiEquipmentFactory.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiSimulationBuilder.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiXmlReader.java Notes: Implemented all 11 recommendations from DEXPI code review. (1) DexpiStreamUtils: shared outlet-stream resolution utility replacing duplicated reflection-based code. (2) Reflection removal: outlet access via TwoPortEquipment/Separator casts instead of Method.invoke. (3) Multi-outlet nozzles: writer creates 2 outlet nozzles for Separator, 3 for ThreePhaseSeparator. (4) Stream identity matching: connections built by matching System.identityHashCode of inlet/outlet streams; registerPassThroughStreams handles wrapper Streams that delegate getFluid(). (5) Column subtype: DexpiEquipmentFactory detects “absorb”/”strip” in DEXPI class to configure condenser/reboiler flags. (6) Namespace-aware parsing: setNamespaceAware(boolean) on builder and reader. (7) Instrument renaming: applyAutoInstrumentation now calls setName() on transmitters and controllers (ControllerDeviceBaseClass cast). 4 new tests (cyclic topology, multi-outlet separator, 2 round-trip profile); 68 tests total, all passing.

2026-03-10 — DEXPI round-trip export, cycle detection, and column support

Type: E (Feature) Keywords: DEXPI, P&ID, round-trip, export, XML writer, connection, nozzle, reverse mapping, cycle detection, distillation column, simulation results, instrument wiring, DexpiXmlWriter, DexpiXmlWriterTest Solution: src/main/java/neqsim/process/processmodel/dexpi/DexpiXmlWriter.java, src/test/java/neqsim/process/processmodel/dexpi/DexpiXmlWriterTest.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiTopologyResolver.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiEquipmentFactory.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiSimulationBuilder.java Notes: Completed 7 round-trip (DEXPI↔NeqSim) improvements. DexpiXmlWriter gains Connection/Nozzle export (buildConnections, appendNozzle, appendConnectionSystem), native equipment reverse mapping (reverseMapComponentClass maps Separator→VesselForStorage, Compressor→CompressorUnit, etc.), and simulation results export (appendSimulationResults writes temperature/pressure/flow as GenericAttributes). DexpiTopologyResolver gains hasCycle() via DFS-based detection. DexpiEquipmentFactory gains createColumn() for DistillationColumn instantiation with NumberOfTrays and FeedTray sizing attributes. DexpiSimulationBuilder instrument tag wiring replaced setName() calls with logging-based tag association (ControllerDeviceInterface/MeasurementDeviceInterface lack setName). Fixed instanceof ordering bug: Cooler extends Heater, so Cooler must be checked before Heater in reverseMapComponentClass. 15 new tests (11 in DexpiXmlWriterTest, 2 cycle-detection, 2 column-creation); 64 tests total, all passing.

2026-03-10 — DEXPI topology resolver, equipment factory, and simulation builder

Type: E (Feature) Keywords: DEXPI, P&ID, topology, nozzle, connection, equipment factory, simulation builder, mapping loader, sizing, DexpiTopologyResolver, DexpiEquipmentFactory, DexpiSimulationBuilder, DexpiMappingLoader, GenericAttribute, Kahn, topological sort Solution: src/main/java/neqsim/process/processmodel/dexpi/DexpiTopologyResolver.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiEquipmentFactory.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiSimulationBuilder.java, src/main/java/neqsim/process/processmodel/dexpi/DexpiMappingLoader.java Notes: Resolved 7 critical gaps in DEXPI implementation. DexpiTopologyResolver parses Nozzle/Connection/Equipment XML elements into a directed graph, collapses inline piping components (valves, reducers) to equipment-level edges, and produces topological ordering via Kahn’s algorithm. DexpiEquipmentFactory converts DexpiProcessUnit placeholders to real NeqSim equipment (Separator, Compressor, Pump, HeatExchanger, Heater, Cooler, Valve, Expander, Mixer, Splitter) with sizing attributes applied. DexpiSimulationBuilder is a fluent builder API: setFluidTemplate/setFeedPressure/setFeedTemperature/setFeedFlowRate/setAutoInstrument → build() returns runnable ProcessSystem. DexpiMappingLoader provides thread-safe cached loading of .properties mapping files from classpath. DexpiMetadata expanded with 10 sizing constants. DexpiProcessUnit gains sizingAttributes map and dexpiId. Equipment mapping expanded from ~30 to ~65 entries; piping component mapping from ~15 to ~28. 49 tests across 7 test classes (all passing).

2026-03-10 — DynamicProcessHelper utility for steady-state to dynamic conversion

Type: E (Feature) Keywords: dynamic, transient, simulation, DynamicProcessHelper, transmitter, PID, controller, instrument, auto-instrument, pressure, level, flow, temperature, control loop, PC, LC, FC, TC, runTransient, setCalculateSteadyState Solution: src/main/java/neqsim/process/util/DynamicProcessHelper.java, src/test/java/neqsim/process/util/DynamicProcessHelperTest.java, docs/process/dynamic-simulation.md Notes: Utility that converts a sized steady-state ProcessSystem into a dynamic simulation. Auto-creates transmitters (PT, LT, TT) and PID controllers (PC, LC, WLC) by scanning equipment and matching stream identity to downstream valves. Handles Separator, ThreePhaseSeparator, Compressor, Heater, Cooler. Convenience methods for addFlowController() and addTemperatureController(). Default PID tuning with per-type customization. Key gotcha: transmitters implement MeasurementDeviceInterface (NOT ProcessEquipmentInterface), so ProcessSystem.add(MeasurementDeviceInterface) must be used. 10 tests passing.

2026-03-10 — Implement InstrumentDesign framework

Type: E (Feature) Keywords: instrument, design, ISA, SIL, I/O, DCS, SIS, instrumentation, ISA-5.1, IEC 61508, IEC 61511, API 670, safety, compressor, separator, heat exchanger, pipeline, valve, tag number, cabinet sizing, cost estimation Solution: src/main/java/neqsim/process/instrumentdesign/ Notes: Mirrors ElectricalDesign pattern. Base class InstrumentDesign with InstrumentSpecification (ISA-5.1 data sheets) and InstrumentList (I/O counting, cost aggregation, tag generation). Equipment-specific designs for separator (PT×2 + PSH + TT + LT×2 + LSH + LSLL + ZT×2; three-phase adds interface LT + water ZT), compressor (API 617/670 suite: ~18 instruments including VT×4 vibration probes, anti-surge FT/FCV, bearing TTs, lube oil PT/PSLL), heat exchanger (auto-detects shell-and-tube/air cooler/electric heater), pipeline (pig detection ZS×2, leak detection PSLL, metering FT), and valve (ZT + ZC; safety valves add XV + ZSO/ZSC). System-level SystemInstrumentDesign aggregates across ProcessSystem and sizes DCS (~16 ch/card, ~16 cards/cab), SIS (~8 ch/card, ~8 cards/cab), and marshalling cabinets. Integrated via ProcessEquipmentInterface.getInstrumentDesign() and ProcessSystem.getSystemInstrumentDesign(). 12 tests passing.

2026-03-09 — H₂S/CO₂ Distribution Between Gas, Oil, Water — EOS Model Comparison

Type: A (Property) Keywords: H2S, CO2, acid gas, distribution, solubility, water, oil, gas, produced water, brine, salinity, SRK, PR, CPA, electrolyte CPA, chemical reactions, three-phase, salting-out, pH, NACE MR0175, sour service, model selection, decision matrix, Duan Sun, Carroll Mather, Soreide Whitson, Monte Carlo, benchmark Solution: task_solve/2026-03-09_h2s_co2_distribution_gas_oil_water_produced_water_eos_comparison/ Notes: Systematic comparison of 4 EOS models (SRK, PR, SRK-CPA, Electrolyte-CPA) across 10 scenarios for acid gas partitioning. Critical findings: (1) SRK/PR give near-zero CO₂ solubility in water — unsuitable for acid gas-water systems; (2) Only Electrolyte-CPA correctly predicts three phases (gas/oil/aqueous); (3) chemicalReactionInit() is mandatory for pH, salting-out, and ionic speciation; (4) H₂S shows retrograde solubility (max 60-70°C); (5) Water content is dominant sensitivity (1.42% swing in Monte Carlo). Benchmark: 5/5 tests PASS (13.8-25.0% deviation vs Duan & Sun 2003, Carroll & Mather 1991). Monte Carlo N=300: H₂S aqueous P10/P50/P90 = 0.51/0.92/1.35%. Decision matrix maps 12 applications to recommended models. 6 NIPs proposed (acid gas report, produced water builder, pH calculator, salting-out DB, compliance checker, model advisor).

2026-03-09 — CO2 Corrosion Analyzer with Electrolyte CPA pH

Type: E (Feature) Keywords: corrosion, CO2, pH, electrolyte CPA, de Waard-Milliams, NORSOK M-506, chemical reaction equilibrium, H3O+, carbonic acid, HCO3-, CCS, pipeline, corrosion rate, scale, FeCO3, inhibitor, brine, NaCl, severity, aqueous speciation Solution: src/main/java/neqsim/pvtsimulation/flowassurance/CO2CorrosionAnalyzer.java, src/test/java/neqsim/pvtsimulation/flowassurance/CO2CorrosionAnalyzerTest.java, examples/notebooks/CO2_Corrosion_Analysis_ElectrolyteCPA.ipynb Notes: Facade class coupling electrolyte CPA EOS (SystemElectrolyteCPAstatoil) with de Waard-Milliams corrosion model and ScalePredictionCalculator. Key insight: must call chemicalReactionInit()createDatabase(true)setMixingRule(10)init(0) to enable aqueous chemical equilibrium (CO2 + 2H2O → HCO3- + H3O+). Without this, pH returns 7.0 (no H3O+ component). The analyzer auto-creates the electrolyte system, runs flash with chemical reactions, extracts rigorous pH from H3O+ activity, and feeds it into the corrosion model. Supports temperature/pressure sweeps, brine (Na+/Cl-), inhibitor efficiency, and JSON reporting. 12/12 tests passing.

2026-03-09 — Water Solubility in Gas and Liquid CO2 Phase Behaviour

Type: A (Property) Keywords: water, solubility, CO2, CPA, SRK, PR, equation of state, phase equilibrium, CCS, carbon capture, dehydration, pipeline, gas phase, liquid phase, supercritical, mutual solubility, Wiebe, Gaddy, Bamberger, Spycher, King, Song, Kobayashi, benchmark, validation, ISO 27913, ppmv, water content Solution: task_solve/2026-03-09_water_solubility_in_gas_and_liquid_co2_phase_behaviour/ Notes: Investigated water solubility in CO2 across gas, liquid, and supercritical conditions (5-200 bar, 10-80 C) using CPA EOS (SystemSrkCPAstatoil, mixing rule 10). Key findings: gas-phase water content decreases with pressure (Raoult’s law dilution), liquid CO2 has low solubility (1000-3000 ppmv), characteristic minimum at CO2 saturation pressure. Benchmark: 9/13 points within 30% tolerance, mean error 25.2%. CPA under-predicts at 60 C (40-50% error vs Bamberger data). CPA outperforms SRK/PR at high pressures. Monte Carlo (N=300): P10/P50/P90 = 2986/3616/4253 ppmv for CCS conditions — dehydration always required (100% exceed 500 ppmv ISO limit). Tornado: EOS model uncertainty dominates (1729 ppmv swing), then pressure (1068), then temperature (945). Overall risk: Medium (2 high, 3 medium, 2 low).

2026-03-09 — Sulfur Deposition Analysis

Type: B (Process) Keywords: sulfur, S8, deposition, desublimation, Joule-Thomson, JT cooling, backflow, letdown, valve, H2S, pressure reduction, solid flash, GibbsReactor, SulfurDepositionAnalyser, preheating, mitigation Solution: private task folder (redacted) Notes: Analysed elemental sulfur deposition in a backflow letdown system (70→15 bara). JT cooling gives ~-20°C outlet (JT coeff 0.46-0.58 K/bar). 100% of Monte Carlo scenarios (N=300) produce solid S8. Primary mechanism is desublimation, not chemical reaction. Air ingress (O2) contributes via H2S oxidation at Gibbs equilibrium. Preheating helps but S8 solid persists even at 100°C preheat with >0.01 ppb S8 feed. Used SRK EOS, ThrottlingValve, TPSolidflash, GibbsReactor, SulfurDepositionAnalyser. 9/9 benchmarks PASS (JT coefficients within 15%, S8 solubility within literature order-of-magnitude). Overall risk: High (5 high, 4 medium, 1 low risks).

2026-03-08 — Mercury Removal in LNG Pre-Treatment — NeqSim Chemisorption Model

Type: B (Process), F (Design) Keywords: mercury, Hg, removal, guard bed, chemisorption, CuS, sorbent, adsorber, NTU, Ergun, packed bed, LNG, pre-treatment, mass transfer zone, breakthrough, transient, bed lifetime, mechanical design, ASME VIII, cost estimation, CAPEX, OPEX, sorbent replacement, fuel gas strategy Solution: src/main/java/neqsim/process/equipment/adsorber/MercuryRemovalBed.java, src/test/java/neqsim/process/equipment/adsorber/MercuryRemovalBedTest.java, task_solve/2026-03-08_mercury_removal_lng_pretreatment/ Notes:

2026-03-08 — NeqSim-based Monte Carlo uncertainty and risk evaluation for NPV

Type: G (Workflow) Keywords: uncertainty, Monte Carlo, risk, NPV, GIP, resource estimate, tornado, sensitivity, ISO 31000, risk matrix, NeqSim simulation, SRK EOS, SimpleReservoir, Beggs & Brill, SURFCostEstimator, triangular distribution, P10 P50 P90, field development Solution: task_solve/2026-03-07_npv_calculation_of_field_development_subsea_tieback/step2_analysis/03_uncertainty_risk_analysis.ipynb, step3_report/generate_report.py (Sections 9-10) Notes:

2026-03-04 — Sulfur deposition and corrosion analysis system

Type: E (Feature) Keywords: sulfur, S8, H2S, deposition, precipitation, solubility, Gibbs reactor, Claus, FeS, corrosion, NACE, sour gas, solid flash, TPSolidflash, SulfurDepositionAnalyser, GibbsReactor, SO2, pipeline, subsea, onshore Solution: src/main/java/neqsim/process/equipment/reactor/SulfurDepositionAnalyser.java, src/test/java/neqsim/process/equipment/reactor/SulfurDepositionAnalyserTest.java, examples/sulfurtask/SulfurDepositionAnalysis.ipynb, docs/chemicalreactions/sulfur_deposition_analysis.md Notes:

2026-03-07 — CNG tank filling and emptying temperature estimation (workflow test)

Type: B (Process) Keywords: CNG, tank, filling, emptying, depressurization, pressurization, temperature, wall temperature, MDMT, heat transfer, transient wall, VesselDepressurization, X80 steel, energy balance, Churchill-Chu, natural convection Solution: task_solve/2026-03-07_cng_tank_filling_and_emptying_temperature_estimation/step2_analysis/CNG_Tank_Temperature_Estimation.ipynb Notes:

2025-07-17 — CNG tank temperature estimation improvements and Jupyter notebooks

Type: E (Feature) Keywords: CNG, tank, filling, emptying, depressurization, VU-flash, heat transfer, Churchill-Chu, Gnielinski, natural convection, mixed convection, transient wall, VesselDepressurization, temperature estimation, MDMT Solution: src/main/java/neqsim/process/equipment/tank/VesselDepressurization.java, examples/CNGtankmodelling/CNG_FillingSimulation.ipynb, examples/CNGtankmodelling/CNG_EmptyingSimulation.ipynb, examples/CNGtankmodelling/CNG_GasProperties_HTC.ipynb Notes:

2026-03-01 — Well mechanical design and cost estimation system

Type: F (Design) Keywords: well, subsea, casing, tubing, mechanical design, NORSOK D-010, API 5CT, cost estimation, drilling, completion, barrier verification, WellMechanicalDesign, WellDesignCalculator, WellCostEstimator Solution: src/main/java/neqsim/process/mechanicaldesign/subsea/WellMechanicalDesign.java, WellDesignCalculator.java, WellCostEstimator.java, src/test/java/.../WellMechanicalDesignTest.java Notes:

2026-03-01 — Task log and context system created

Type: E (Feature) Keywords: context, documentation, workflow, onboarding, task-solving Solution: CONTEXT.md, docs/development/TASK_SOLVING_GUIDE.md, docs/development/TASK_LOG.md Notes: Created a 3-file context system to make repo-based task solving faster:


2026-03-10 — Electrical design: equipment-specific classes and system integration

Type: E (Feature) Keywords: electrical design, separator, heater, cooler, pipeline, heat tracing, cathodic protection, system electrical design, load list, transformer sizing, emergency generator Solution: src/main/java/neqsim/process/electricaldesign/separator/SeparatorElectricalDesign.java, heatexchanger/HeatExchangerElectricalDesign.java, pipeline/PipelineElectricalDesign.java, system/SystemElectricalDesign.java Notes:

2026-04-16 — Review Dynamic Process and Control Functionality

Type: G (Workflow) Keywords: dynamic simulation, transient, PID controller, MPC, HYSYS Dynamics, K-Spice, safety chain, HIPPS, ESD, blowdown, VU-flash, DynamicProcessHelper, ProcessEventBus, alarm, runTransient, control, measurement device, valve, split-range, override, bumpless transfer, sequence control, SFC, distillation dynamics, heat exchanger dynamics, rotor inertia Solution: task_solve/2026-04-16_review_dynamic_process_and_control_functionality/step1_scope_and_research/analysis.md Notes: Comprehensive 45-feature comparison across 7 categories against 5 commercial simulators. NeqSim scores 63/90 (70%) vs HYSYS 79/90 (88%). Leads in 8 areas (VU-flash, safety chain, Monte Carlo risk, auto-instrumentation, water hammer, DEXPI export, event bus, specialised analysers). 10 NIPs proposed with 4-phase roadmap. Key gaps: explicit Euler only (no implicit/adaptive), no dynamic HX/column, no bumpless transfer, no split-range/override, no sequence control.