Repository navigation
Description
Purpose
Create a durable engineering campaign for continuously improving NeqSim electrolyte calculations, including thermodynamic models, flash and stability algorithms, chemical-reaction equilibrium, data regression, and coupled process applications.
The campaign must turn literature and public experimental data into verified, reusable NeqSim improvements. It is not a sequence of isolated dataset fits: every increment must improve a clearly stated validity range without degrading previously supported fluids, neutral systems, or established APIs.
Maintain at most one active implementation PR for this campaign. Use this issue as the persistent roadmap and run ledger for scope, evidence, accepted data, active work, blockers, merged increments, and the next dependency-ready hypothesis.
Engineering outcomes
Improve reliable calculation of:
- gas–water–salt and gas–oil–water–ion phase equilibrium;
- hydrate equilibrium in brines, hydrocarbon liquids, mixed inhibitors, acid gases, and reactive aqueous systems;
- mineral-scale saturation and precipitation in gas–oil–water systems;
- aqueous chemical equilibrium with ions, charge balance, acid/base reactions, water dissociation, complex formation, and salt speciation;
- CO2 and H2S absorption in alkanolamines, including MEA, MDEA and promoted/mixture systems where supported by public data;
- reactive absorbers and process calculations using the same thermodynamic and reaction basis as standalone equilibrium calculations;
- electrolyte-model parameters, mixing rules, activity/fugacity formulations, properties, initialization, convergence, diagnostics, and performance;
- Java and Python usability, documentation, examples, and reproducible benchmarks.
Owned scope
- electrolyte CPA and other NeqSim electrolyte-capable thermodynamic models;
- aqueous activity/fugacity coefficients, standard states, dielectric/electrostatic terms, association, ion–molecule and ion–ion interactions;
- parameter provenance, regression, uncertainty, validity ranges, and missing-parameter behavior;
- electrolyte-aware phase stability, TP/multiphase/reactive/solid/hydrate flashes and continuation/fallback behavior;
- reaction-set construction, speciation, electroneutrality, elemental conservation, reaction-equilibrium residuals, and phase/reaction coupling;
- hydrate chemical-potential calculations with salts, thermodynamic inhibitors, hydrocarbons, oil, and reactive brines;
- mineral precipitation/dissolution, saturation indices, solid-phase selection, and complementarity;
- alkanolamine acid-gas VLE/speciation/loading/heat effects and equilibrium support needed by rigorous absorber calculations;
- electrolyte-specific diagnostics, deterministic repeated execution, stale-state protection, cloning, serialization and thread safety;
- focused performance work that preserves the accepted physical and numerical path;
- validation datasets, regression tools, tests, documentation, and executable examples.
Coordination boundaries
Coordinate instead of duplicating:
- generic TP-flash and multiphase solver work: #2937;
- reactive absorber equipment and column architecture: #205;
- neutral-salt input/API behavior: #448;
- generic hybrid EOS/aqueous model architecture: #2862.
A generic flash defect belongs to #2937. An electrolyte-specific reproducer, thermodynamic-model change, reaction coupling, or parameter/data improvement belongs here. If one increment touches both areas, use one coordinated PR and update both ledgers; never open competing implementation PRs.
The current electrolyte/hydrate increment is draft PR #3142. The first campaign run must inspect its exact current head, CI, reviews, diff, scientific evidence, and overlap before selecting new work.
Frozen validation matrix
Every applicable implementation increment must freeze a deterministic subset of this matrix before editing and retain the smallest public reproducer.
A. Brine and aqueous speciation
- water + NaCl over dilute to concentrated conditions and a justified temperature/pressure range;
- mixed ions including Na+, K+, Ca2+, Mg2+, Cl-, sulfate and carbonate species where model support and public data exist;
- water dissociation, acid/base systems, CO2/H2O/carbonate/bicarbonate, and H2S species where applicable;
- charge-neutral and deliberately difficult initial compositions;
- repeated, changed-state, and nearby concentration/T/P paths.
B. Multiphase hydrocarbon/electrolyte systems
- GAS+AQUEOUS, OIL+AQUEOUS, and GAS+OIL+AQUEOUS;
- methane-rich, CO2-rich, H2S-containing, condensate/oil, water, single salt, and mixed brine;
- phase appearance/disappearance, trace ions, high water cut, low water cut, and difficult initial guesses;
- ordinary versus explicit multiphase paths where both are applicable.
C. Hydrates and inhibitors
- methane and representative natural-gas hydrate dissociation points;
- salts alone and salts with MEG, methanol, and mixed inhibitors;
- CO2/H2S-containing systems and reactive brines;
- gas–oil–water–salt cases when public validation data are available;
- hydrate temperature at fixed pressure and hydrate pressure at fixed temperature.
D. Mineral scale
- at minimum CaCO3, BaSO4, SrSO4, CaSO4 and FeCO3 as public data and NeqSim component support permit;
- saturation index without precipitated solid;
- equilibrium precipitation/dissolution with non-negative solid amount;
- mixed brines, acid-gas speciation, pressure/temperature change, and gas/oil/water phase coupling.
E. Alkanolamines and acid-gas removal
- CO2 and, where supported, H2S in aqueous MEA and MDEA;
- promoted or mixed amines only when the reaction set and parameter provenance are explicit;
- acid-gas partial pressure versus loading, speciation, heat of absorption/enthalpy and physical properties where data exist;
- lean/rich conditions and T/P/concentration ranges relevant to absorber and regenerator calculations;
- standalone equilibrium plus at least one process-level mass/energy-balance case when absorber support is available.
F. Controls
- neutral PR/SRK/CPA hydrocarbon systems;
- neutral hydrocarbon–water systems;
- non-reactive process calculations;
- cold start, warm continuation, identical repeat, changed composition/model/mixing rule, clone, and parallel execution.
Scientific acceptance gates
For each applicable case, record equations, conventions, units, reference state, model and mixing rule, reaction set, parameter source, data license, validity range, and uncertainty.
Required checks:
- total and elemental material balance;
- aqueous electroneutrality;
- finite, non-negative and normalized phase fractions/compositions within case-specific tolerances;
- phase-equilibrium chemical-potential or log-fugacity/activity residual;
- reaction-equilibrium residual, for example max absolute
ln(Q/K), with a frozen tolerance; - stable phase topology and lower defensible total Gibbs energy;
- hydrate water chemical-potential residual and agreement with independent dissociation data;
- mineral complementarity: absent solids remain undersaturated/non-precipitating and present solids satisfy saturation equilibrium with non-negative amounts;
- deterministic repeated execution and no stale state after T/P/composition/model/reaction-set changes;
- physically plausible nearby-state trends and no discontinuity introduced merely by solver history;
- mass and energy closure for process examples;
- no unexplained regression outside the fitted range.
Do not silently tune to one dataset. Separate calibration and validation data, report residual definitions and parameter covariance/sensitivity where practical, and retain cross-dataset or hold-out evidence. A parameter improvement must not be accepted solely because it reduces its training objective.
Performance and compatibility gates
- benchmark the complete calculation as well as any optimized kernel;
- report iterations, retries/fallbacks, residuals, and failure rate, not wall time alone;
- preserve public API and serialized compatibility unless a reviewed migration is justified;
- neutral/non-ionic systems must show no statistically or practically material slowdown; target no more than about 1% median overhead in representative controls unless a larger cost is explicitly justified by new requested behavior;
- electrolyte calculations must not gain speed by weakening convergence, stability, balance, or diagnostics;
- preserve Java/Python composability, cloning, deterministic calculation identity, and thread safety.
Literature and data workflow
Each run may search peer-reviewed literature, authoritative public databases, standards, theses, and open benchmark datasets. Prefer primary sources and stable public data.
For every adopted dataset or correlation:
- record the full citation/DOI or stable URL and license/access conditions;
- preserve original units and reported uncertainty;
- store only redistributable data in the repository;
- document digitization or preprocessing;
- map species, apparent/true composition basis, standard states, and reaction conventions explicitly;
- split regression and validation evidence;
- compare current master before proposing code or parameters;
- explain discrepancies instead of silently fitting them away.
Commercial simulator output may be supporting evidence only when legally shareable and independently described; never infer or copy proprietary algorithms or parameters.
Scheduled-run protocol
Every scheduled run must:
- read this issue and its newest comments;
- inspect current
master, repository instructions, related open/recent PRs and issues, and the previous run ledger; - inspect and repair the sole active campaign PR first, including CI and review feedback, before starting another increment;
- search for existing or superseding implementation and avoid duplicate work;
- choose the largest coherent dependency-ready increment with a frozen scope, baseline, public reproducer, acceptance criteria, stop boundary, documentation impact, and validation target;
- search current relevant literature/data when it can materially improve the selected increment;
- reproduce the limitation on unmodified current master before editing;
- implement the smallest reusable model/solver/data/API improvement with focused regression coverage;
- run the applicable NeqSim formatting, documentation, focused/broader test, scientific-validation and performance gates;
- publish or update at most one draft implementation PR; do not merge, enable auto-merge, force-push, weaken checks, or mark ready for review;
- add a concise run-ledger comment here with date, exact master/base/head SHAs, active PR, question, data/references, files, tests, numerical evidence, documentation impact, blocker, and next dependency;
- stop without a PR when no unique evidence-qualified improvement is ready.
Repository-wide scheduled campaigns may have no more than ten open autonomous implementation PRs in total.
Initial dependency-ordered queue
- Complete or repair electrolyte CPA hydrate/reactive-brine PR Fix electrolyte CPA hydrate equilibrium, including reactive brines #3142 and establish its exact supported case matrix.
- Freeze a common electrolyte benchmark harness with balance, electroneutrality, phase/reaction residual, phase-topology, repeatability, and timing metrics.
- Audit species/reaction construction and stale-state behavior for CO2/H2O/carbonate and water dissociation.
- Validate and improve simple/mixed-brine activity and phase-equilibrium parameters against public data.
- Extend hydrate validation from simple brines to inhibitors, acid gases, oil, and reactive systems.
- Establish mineral saturation/precipitation architecture and public scale benchmarks.
- Improve MEA/MDEA CO2/H2S equilibrium, properties and parameter provenance.
- Connect the validated equilibrium basis to rigorous reactive-absorber calculations under Implement reactive absorber #205.
- Continue ranked, evidence-based parameter/model/solver improvements without losing the frozen controls.
Definition of done
This is a long-running roadmap. Individual increments are complete only after the implementation, focused tests, applicable broader tests, scientific benchmark, documentation-impact assessment, repository publication gates, and exact-head CI/review audit are recorded.
The campaign is complete only when the supported scope and validity ranges are documented; the frozen matrix passes on current master; outstanding limitations are either resolved or explicitly accepted; and a final audit shows no dependency-ready evidence-qualified improvement remains.
Activity
EvenSol commentedon Aug 22, 2026
2026-08-22 run ledger — #3142 merged; reactive-clone ownership defect frozen
Authoritative current master:
884810a814f9Completed electrolyte increment: PR #3142, exact head
4af3a935664e, squash-merged asdd89babf2474.Active #3144 implementation PR: none.
Merged-master verification
Current master is one unrelated field-economics commit ahead of #3142; comparison shows no later electrolyte, reaction, TP-flash, hydrate, or scale file changes.
#3142 delivered the requested electrolyte-CPA hydrate configurations and reactive CO2/brine coupling. Recorded focused evidence from the exact merged head includes:
1.3e-12;0.0500000002 mol, Na+ and Cl- at0.0100000000 mol, charge residual3.0e-10 mol, with bicarbonate production;Exact-head pre-commit, Spotless, documentation search, PaperLab, CodeQL, Javadoc, Java 21 Ubuntu/Windows fast tests, and all four Java 21 slow shards passed. Both Java 8 aggregate jobs failed on the same unrelated
FieldDevelopmentNPVTest.testSubseaTiebackWithAdjusterfloating-point boundary (10.000000000000002versus an inclusive 10.0 limit); the six #3142 changed files do not include field-development code. No review submissions, PR comments, or unresolved review threads existed.Documentation impact:
docs/thermo/hydrate_models.mdwas updated with supported non-reactive and reactive configurations and examples.Frozen next increment — clone-independent reactive electrolyte state
Engineering question: Does
SystemInterface.clone()produce an independently usable reactive electrolyte system, or can chemical-equilibrium work on the clone read or mutate the original system?Authoritative source inspection at
884810a814f9confirms a structural ownership defect:SystemThermo.clone()deep-clones the phase array but leaves thechemicalReactionOperationsfield shallow-copied bysuper.clone(); the old intended clone line remains commented out.ChemicalReactionOperations.clone()itself is shallow and retains itssystem, reactive-component array, reaction list, matrices, LP/Newton solver state, and kinetics references.CalcSaltSatauration.createTrialSystem()already works around this locally by callingtrialSystem.chemicalReactionInit()immediately after cloning, explicitly to bind chemical reactions to the clone.Repository issue/PR search found no separate active clone fix; this belongs to #3144 because it affects reactive electrolyte correctness, scale trials, process stream cloning, thread safety, and stale-state isolation.
Frozen reproducer
Use
SystemElectrolyteCPAstatoil, mixing rule 10, at 298.15 K and 10 bara with CO2, water, Na+, and Cl-. Initialize reactions and flash the original, clone it, change only the clone temperature/pressure or CO2 loading, and solve/flash the clone.Fail-before-fix gates:
ChemicalReactionOperationsidentity;Acceptance criteria
Implementation direction: after phase arrays are cloned, rebuild
ChemicalReactionOperationsagainst the cloned system when the source owns reaction operations; do not rely on the current shallowChemicalReactionOperations.clone(). Add a focused clone-isolation regression nearSystemThermoplus CO2/brine and salt-saturation controls. Update clone Javadocs/API documentation to state reactive-state independence.Validation and blocker
A local checkout at exact master was established. Java 17.0.19 and Maven wrapper 3.9.16 start successfully with task-specific writable Maven directories. Focused Maven execution is currently blocked before compilation because the clean dependency repository cannot resolve the canonical
https://repo.maven.apache.org/maven2/host (temporary DNS failure). Consequently no Java edit, formatter run, commit, branch, or PR was published; the mandatory direct Spotless/documentation gates were not bypassed.Next dependency: reproduce the clone mutation with the focused JUnit test on current master, implement clone-owned reaction reconstruction, run direct Spotless/documentation/pre-commit gates and focused/broader electrolyte/scale tests, then open the sole #3144 draft PR.
EvenSol commentedon Aug 22, 2026
2026-08-22 blocker update — Maven/Spotless network bootstrap fixed
Authoritative master:
884810a814f918aea948f6bb05a37f92b8077394(unchanged from the preceding ledger; connector comparison tomasteris identical).Active #3144 implementation PR: none; base/head: not applicable.
Question: Was the reported Maven Central failure a Central outage or a runtime proxy/DNS routing defect?
Diagnosis: direct resolver lookup for
repo.maven.apache.orgfailed, while HTTPS reached Central successfully through the runtime proxy. Maven/Java did not automatically consume the shell proxy variables. Spotless's embedded Eclipse/P2 downloader also bypassed Mavensettings.xmland attempted direct DNS forftp.fau.de.Shared fix: updated the
work-with-neqsimworkflow with a reusable private Maven bootstrap and updatedneqsim-scheduled-campaignto require it before Maven/Spotless work. The bootstrap:https://repo.maven.apache.org/maven2/;HTTP_PROXY/HTTPS_PROXYandNO_PROXYinto a private mode-0600Maven settings file;Verification:
maven-dependency-plugin:3.8.1:getfetchedorg.apache.commons:commons-lang3:3.17.0: PASS;./mvnw --version: PASS;python3 devtools/run_spotless.py checkdownloaded Central and Eclipse/P2 dependencies and reached formatting evaluation: network-resolution PASS;SystemElectrolyteCPATest.java; therefore Spotless itself is not claimed as passed for that tree;Documentation impact: no NeqSim repository or user API change. Shared NeqSim workflow instructions and quality gates now document the bootstrap.
Remaining limitation: this repairs proxied/DNS-restricted runtimes that expose standard proxy variables; it cannot bypass a genuinely unavailable or unauthorized network.
Next dependency: the Maven DNS blocker is cleared. Resume the frozen clone-independent reactive-electrolyte-state reproducer and implementation on exact current master, then run the mandatory final-tree Spotless/documentation/focused/broader gates before any PR publication.
EvenSol commentedon Aug 22, 2026
2026-08-22 run ledger — draft PR #3151: clone-owned reactive state
Authoritative master/base:
59f485417abb9cc34a3bd8c6779fc188b070ec25Exact head:
d26c707ba707120fc80f4163b62ee83f6949ba0dActive campaign work: draft PR #3151; mergeable, CI in progress, no comments/reviews/threads at the post-publication audit. #3142 remains merged. One other autonomous NeqSim PR (#3150) is open, so the repository campaign cap is satisfied.
Scientific/software question: can a cloned reactive electrolyte system solve independently, or does its shallow-copied
ChemicalReactionOperationsretain the source system/components/matrices/solvers? Current master reproduced shared object identity. The patch reinitializes reaction operations after phases are cloned; neutral systems retain the null fast path.Frozen qualified case:
SystemElectrolyteCPAstatoil, mixing rule 10, database-selected water dissociation; 298.15 K/10 bara, 0.98 mol water + 0.01 mol Na+ + 0.01 mol Cl-, with changed clone states at 293.15–306.15 K, 7–18 bara and 0.008–0.012 mol NaCl. No model parameter, reaction constant, flash equation, hydrate algorithm, absorber equipment, or salt-input API change.Files:
src/main/java/neqsim/thermo/system/SystemThermo.javasrc/main/java/neqsim/thermo/system/SystemInterface.javasrc/test/java/neqsim/thermo/system/SystemThermoReactiveCloneTest.javaEvidence: distinct reaction graphs; exact source immutability; fresh-reference agreement; deterministic repeat/changed state; H/O/Na/Cl and total phase-state closure; non-negative/normalized phases; aqueous charge; max
|ln(Q/K)|; serialization; two-clone concurrency; neutral SRK control. Representative 303.15 K/14 bara maxima: element error4.1e-10 mol, charge6.6e-21 mol-equivalent, beta-sum error1.9e-14,|ln(Q/K)|=1.9e-14; clone/fresh phase amounts agree within2e-8 mol, source unchanged exactly.Commands/tests: Spotless apply/check, documentation-search audit, and
git diff --checkpassed. Focused clone regression 4/4; selected reaction/electrolyte/serialization/neutral command reported 39 tests, 0 failures/errors, 1 existing skip; explicit slow hydrate 4/4; explicit slow scale 6/6. Thepre-commitpackage was unavailable, so its three current local hook commands were run directly; the wrapper itself is not claimed. Exact-head CI is pending.Performance: seven alternating master/head JVM pairs; paired-median head/master ratios were
0.923for neutral clone and0.916for clone+TP flash. Wide sign-changing fork variation means “no detectable slowdown,” not a speedup; phase counts/checksums were unchanged.References/data/license: no fitted parameter or experimental dataset. Software contract: Oracle
Object.clone(). NeqSim source and submitted changes are Apache-2.0. Regression evidence is separate from calibration.Documentation impact:
SystemInterface.clone()Javadoc now states phase/component/initialized reaction ownership; no guide/example is required for this internal ownership correction.Limitation / changed blocker: a broader CO2/brine case was rejected rather than weakening gates. Ordinary 303.15 K/14 bara reactive TP flash showed pre-existing elemental distortion; a reactive hydrate clone/fresh pair at 120 bara agreed with each other but ended at max
|ln(Q/K)|=0.1011. #3151 does not claim CO2 reaction closure. Coordinate the generic flash aspect with #2937; the electrolyte reaction-coupling residual remains the next #3144 dependency.Open draft work remains IN PROGRESS until exact-head CI/review completes; do not classify ready to merge yet.
fix(thermo): isolate reactive state in system clones (#3151)
EvenSol commentedon Aug 22, 2026
2026-08-22 run ledger — draft PR #3156 opened
bd07729f105efb48b14c641697e0f99fe9af6898f44ea9890243f4b8c7a62625c372b7fdbe02b63bSystemInterfacewhile keeping the initial element/charge inventory fixed across outer solves?SystemElectrolyteCPAstatoil, 303.15 K, 14 bara, mixing rule 10, reactions + multiphase enabled; 7.0 CH4 / 0.5 CO2 / 2.3 H2O / 0.1 Na+ / 0.1 Cl- mol.2.0and maximum element error0.488081974 molin the one-mole diagnostic; solver variables were not synchronized to public component/system state, and each outer solve rebuilt its element target.FormulaMatrix.java,ModifiedRANDSolver.java,ReactiveMultiphaseTPflash.java, focusedReactiveElectrolyteStateConsistencyTest.java, anddocs/thermo/reactive_flash.md. The flash now freezes extensive feed elements/charge, preserves feed scale, synchronizes ionic total/component/phase state, enforces1e-8normalized ionic element residual on every acceptance path, exposes residual diagnostics, and retains established neutral acceptance/writeback behavior.9.999999955559398 mol; beta sum1.0; combined residual5.823048851993917e-7; element residual8.677387968605933e-9; maximum C/H/O/Na/Cl error1.7508681793287906e-7 mol(5.37e-9relative); charge-2.9997306138236003e-10 mol; gas ions1e-30 mol; normalized/non-negative phases and component phase sums verified.git diff --check. Existing neutral Gibbs-decrease control caught and prevented an over-broad writeback before publication. One cold complete calculation was 20.69 s / 522 iterations on invalid master versus 22.33 s / 535 on corrected head (+7.9%/+2.5%; single run, not statistically conclusive). Neutral/ordinary TP dispatch is unchanged.-DskipTests packagereached attached Javadoc but this runtime lacksjavac/javadoc; VALIDATION BLOCKED BY INFRASTRUCTURE, pending exact-head CI. Pre-commit, PaperLab, and Spotless passed on the exact head; build/test/Javadoc, documentation search, and CodeQL remain in progress. No reviews, comments, or threads yet. PR remains in progress, not READY TO MERGE.EvenSol commentedon Aug 22, 2026
Electrolyte campaign run ledger — 2026-08-22
master; no [Campaign] Electrolyte thermodynamics, reactive equilibrium and phase-behavior roadmap #3144 implementation PR was active. Coordination boundaries remain [Campaign] TP-flash stability, multiphase equilibrium and performance roadmap #2937 (generic flash), Implement reactive absorber #205 (absorber equipment), and handle NACl #448 (salt API).885e3986c195ba5ed4da95b772b3ca0407e22716; new draft #3158; exact headd1af8184688891d64ef05027d4291c70b84e4c95.ln(Q/K)for trace ions without changing the model, reaction constants, flash solver, or standard-state convention? Exact-masterChemicalReaction.calcK()underflowed to0.0for H3O+/OH- each at1e-200 mol.|ln(Q/K)| <= 2e-6.ChemicalReaction.java,ChemicalReactionOperations.java, newChemicalReactionUnderflowDiagnosticTest.java,SystemThermoReactiveCloneTest.java, anddocs/thermo/reactive_flash.md. Adds direct log-space quotient/residual methods plus immutable reaction-map and maximum-residual Java/JPype APIs; no serialized state or default solve-path dispatch.0.0; log-spaceln(Q)=-939.570271423658; nearby1e-190 molstate-893.518569563777; ordinary aqueous max|ln(Q/K)|=1.42108547152020e-14. Existing clone regression retains total/element balance, electroneutrality, non-negative normalized phase state, deterministic changed-state/serialization/concurrency coverage.pre-commitpackage is absent locally. Optional three-species diagnostic kernel averaged 72.9 ms/call over 250 calls in this constrained runtime; complete neutral/electrolyte solve paths have zero new diagnostic calls and therefore no added default-path work.NaNbehavior.fix(thermo): reject stale reaction topology
EvenSol commentedon Aug 22, 2026
Electrolyte campaign run ledger — 2026-08-22
c63eaa00320ba309dc5a27ab888fe37091c32b54; draft headc8c8c3f9e55423740875c155741a19fe9e7df938. The baseline reproducer was run on3c2a7234c20a1579c858613aecee2f7690a2aef0; connector comparison proves every touched file is identical on the publication base.chemicalReactionInit(), adding 0.001 mol CO2 left the same water-only operations object active,isChemicalSystem()==true, and no HCO3-. The increment must fail fast after add/remove/rename, preserve amount-only updates, and refresh only through reaction-init/database/mixing-rule lifecycle.SystemThermo.java,SystemInterface.java,ChemicalReactionOperations.java, newSystemThermoChemicalReactionStaleStateTest.java,docs/thermo/reactive_flash.md, anddocs/thermo/hydrate_models.md.2.0e-10 mol(tolerance1e-9); aqueous charge residual3.0e-10 mol(tolerance1e-9); diagnostic map non-empty. Add/remove/rename, retained operations, amount-only identity, clear, clone independence, serialization, electrolyte EOS, and Pitzer/GE are covered.isChemicalSystem()gains one predictable boolean check. No statistically powered paired slowdown claim is made.pre-commitwas unavailable; localpomJava8.xmlfailed before assertions becauseorg.ejml.simple.ConstMatrixwas absent from that classpath, so hosted Java 8 remains required. No reaction tables or K parameters changed. Next run: inspect every exact-head CI/review thread and repair only branch-attributable findings; after merge, investigate evidence-backed model-specific active-reaction/parameter selection across electrolyte EOS and GE models.fix(thermo): reject stale reaction topology (#3165)
feat(thermo): expose reaction parameter provenance
EvenSol commentedon Aug 22, 2026
Campaign ledger — 2026-08-22
fc01e56e228e61ecf0dafbbe2c28d40e4d43eb0e; implementation reproduced and validated from242b9539d68d5a6a16faacd783bf60b2238e4ca7; exact headce62a8dd483cf71c93f4b85b60f72a99d2c7e02c.STANDARD, Kent-Eisenberg →KENT_EISENBERG; this is an implementation fact, not cross-model validation.CO2wateridentifier cites Plummer–Busenberg 1982 (DOI); Kent–Eisenberg 1976 remains the apparent-constant source; Huttenhuis et al. 2008 (DOI) documents activity-based mole-fraction/infinite-dilution conventions and validity ranges relevant to future MDEA work. No external values were copied or fitted; existing repository data remains under Apache-2.0.ChemicalReactionDataSource; updatedChemicalReaction,ChemicalReactionList,ChemicalReactionFactory,ChemicalReactionOperations,SystemInterface,SystemKentEisenberg; newChemicalReactionProvenanceTest; updateddocs/thermo/reactive_flash.md.pomJava8.xml; broader Kent/Pitzer/CPA/CO2-water/stale-state/clone/underflow matrix 53/53; Maven Javadoc BUILD SUCCESS; direct Spotless apply/check, docs search (655 Markdown + 1 HTML), and whitespace checks passed. The localpre-commitexecutable was absent; mandatory Spotless actions ran directly. Hosted exact-head CI is in progress; no CI pass is claimed.CO2watercoefficients[253.235548,-12865.665607,-39.440767,0], Kent[231.465,-12092.1,-36.7816,0], both Tref 298.15 K, unchanged. Typed selection 11.5 ns/call vs legacy string selection 12.0 ns/call; complete CPA reaction init 19.8 ms median; neutral SRK clone+TP-flash 76.2 µs median with no new neutral call path.EvenSol commentedon Aug 22, 2026
2026-08-23 — first exact-head READY TO MERGE classification for draft #3168
fc01e56e228e61ecf0dafbbe2c28d40e4d43eb0e; head:ce62a8dd483cf71c93f4b85b60f72a99d2c7e02c; implementation base242b9539d68d5a6a16faacd783bf60b2238e4ca7.docs/thermo/reactive_flash.mdand additive Javadocs document source selection, diagnostics, current mappings, and the scientific stop boundary.STANDARD; no model-specific reaction set or parameter table is yet scientifically validated.Readiness classification was recorded on #3168; the PR remains draft and no merge/auto-merge/ready transition was performed.
feat(thermo): expose reaction parameter provenance (#3168)
EvenSol commentedon Aug 23, 2026
Electrolyte campaign run ledger — 2026-08-23
5a851750f8d12b3a598a87da0acadb3faef8b4e6; draft head4d817bfe294f12392ca496711a55f5e06e64b080; branchcodex/electrolyte-reaction-model-audit; compare is 3 commits ahead / 0 behind with exactly 3 intended added files.SystemElectrolyteCPAstatoil,SystemPitzer, andSystemKentEisenberg; 298.15 K / 1.01325 bara; 0.01 mol CO2 + 0.99 mol water; explicitchemicalReactionInit(). Current mapping remains CPA/Pitzer ->STANDARD, Kent-Eisenberg ->KENT_EISENBERG. No reaction activation, coefficient, standard state, EOS/GE model, flash/stability, hydrate, absorber, or salt-input behavior is changed.ChemicalReactionModelAuditprovides immutable side-effect-free snapshots of model name, typed reaction source, active reactions, stoichiometry, stored reference, Tref, and K(T) coefficients plus EOS-vs-GE comparison; newChemicalReactionModelAuditTest; newdocs/thermo/reaction_model_audit.md.10.1016/0016-7037(82)90056-4) and identifies Pitzer activity-coefficient treatment as the relevant GE-model context. Repository data/code remain Apache-2.0. This increment is regression/audit infrastructure, not parameter validation.VALIDATION PENDING CI. The connector-only run did not execute local Maven/Spotless/pre-commit/Javadoc/docs tests, so none are claimed as passed. Exact-head workflow query immediately after publication had not yet produced runs; no reviews, review submissions, conversation comments, or inline threads existed at that audit point. Hosted CI must establish Java 8, Spotless, pre-commit, Javadoc, documentation search, focused/broader tests, and static checks before any readiness classification.EvenSol commentedon Aug 23, 2026
Electrolyte campaign follow-up ledger — 2026-08-23
5a851750f8d12b3a598a87da0acadb3faef8b4e6; inspected head4d817bfe294f12392ca496711a55f5e06e64b080; repaired exact headf5996963b5c6e6786421ed3c9cee77dde18cb225; branchcodex/electrolyte-reaction-model-audit. Final compare is 5 ahead / 0 behind with the same 3 scoped files.10.1016/0016-7037(82)90056-4, plus the Pitzer activity-coefficient framework. No external numerical data were copied, processed, fitted, or redistributed; repository material remains Apache-2.0. Regression evidence remains separate from scientific parameter validation.4d817…reproduced a Spotless failure in both new Java files. The successful hosted Spotless artifact supplied the exact formatting patch. A code-quality review also identified stored-list representation exposure. Onf5996963b5c6e6786421ed3c9cee77dde18cb225,getReactions()returns a fresh unmodifiable copy and the focused regression verifies distinct list identities plus rejected mutation. The review was answered and its only thread resolved.ChemicalReactionModelAudit.java(exact Spotless format plus defensive list view) andChemicalReactionModelAuditTest.java(exact Spotless format plus copy-identity regression). Documentation source remains unchanged and still accurately describes a read-only opt-in API.f5996963b5c6e6786421ed3c9cee77dde18cb225results, every new review/thread, mergeability, and final diff; repair only branch-attributable failures or classify readiness if all gates pass. After maintainer merge, proceed to independent public/licensed model-family validation before any reaction-table or parameter split.458 remaining items
EvenSol commentedon Nov 6, 2026
#3144 ledger update — draft PR #4896 is the sole active campaign implementation PR. Initial implementation
118ea2cc1afb52fed4ae6d8203424dd0304f692d; current exact append-only head7d36d1bbbf44b8868c46fba1bbf2ae462204139e; unchanged basede81c1f81c226988a2326c27ed1873094ed86e11.This raises positively identified autonomous implementation occupancy from 8/10 to 9/10. It converts the #4234 source-semantics diagnosis into an explicit, fixed-topology PHREEQC reactive NaCl/carbonate mode with frozen pH/water-activity and coupled reactive-flash evidence. Legacy/default selection remains unchanged and fail-closed; no empirical offset, invented parameter, tolerance relaxation, or unsupported qualification is present.
Continuity: four append-only commits (implementation, generated inventory, exact hosted Spotless patch, regenerated inventory), six changed paths, zero behind base. Preserve exact head; keep draft; do not rebase, replace, close, abandon, merge, or mark ready from this workflow. Initial pre-commit failed only formatting; the hosted Spotless artifact was applied exactly. Replacement pre-commit, Spotless, coverage, PaperLab, skill lint, Java 8/21 model specifications, and Java 21 Javadoc pass. Fast/slow tests and CodeQL remain in progress on the identical Java/docs parent; duplicate exact-head runs await approval because the final inventory commit is bot-authored.
Scientific receipt and next dependency are recorded on #4234. #4044 remains awaiting independent Henry-data scientific/provenance review and does not block this distinct work.
EvenSol commentedon Nov 7, 2026
#3144 ledger — #4896 merged; KCl follow-on remains evidence-gated
Current master:
d8c9354ab490564c3c2220b8f735c645cd575c79.PR #4896 merged on the preserved exact feature head
7d36d1bbbf44b8868c46fba1bbf2ae462204139eas6de7d5b720269fa1aa20da63f532338c6db2f250. Its tested parent completed all eight hosted workflow groups successfully. The campaign now has no active implementation PR.Global autonomous implementation occupancy is 3/10, with all existing heads preserved:
0d9cd4decb36e89b4c483e86663b87e295c4eb07ab8846137dce2bca481d93b8b6bb40845776bedadae9c144d7880cf76ecf8f43986c4ed8ad53fe6fCapacity is therefore available but is not the scientific gate. Fresh #4234 reconciliation confirms:
2.855e-6–4.374e-6, with maximum|G/A| = 6.606e-5; the material model contrast remains aqueous-side;A follow-on KCl PR is not dependency-ready: forcing #4896 into K10/K15 would violate its fixed topology; the alternate Pitzer hydrate route still requires an unqualified caller-supplied CO2-K-Cl zeta, and the K10/K15 low endpoints are below its 274.19 K CO2 Henry-reference floor. The next safe dependency is source-qualified K+-bearing reactive-carbonate semantics with independent frozen PHREEQC validation plus defensible low-temperature dissolved-CO2 evidence, or an independently cleared K+/Cl- association formalism with full derivatives, validity range and held-out cross-paper validation.
No new branch, PR, parameter, offset, tolerance, default or qualification was created. #4044 remains independently review-gated for Henry-data closure only and does not block unrelated electrolyte work. Detailed numerical evidence: #4234 comment 6703162841.
feat(pitzer): add audited calcium sulfate and sulfide acid-base param…
fix(thermo): preserve characterized fractions in inactive phase roles
EvenSol commentedon Nov 7, 2026
#3144 ledger — #4903 exact-head reactive-brine increment; KCl diagnosis retained
Scientific checkpoint: #4234 (comment)
Draft implementation checkpoint: #4903 (comment)
9e0087c5d19290949e2dda1cde43228dab53a336; tested synthetic merge7c4d60111e7576827656a59c280b6a6f549698bd; based8c9354ab490564c3c2220b8f735c645cd575c79.c7deef24d25ac8904fcaabf7bc8992c44ecb00ae. The PR is mergeable, 3 commits ahead / 1 behind, and remains draft. No sync, rebase, replacement, readiness transition, close or merge was performed.Classification: scientifically bounded exact-head increment; final two platform jobs and independent electrolyte/Pitzer plus petroleum-characterization review pending. Keep draft.
EvenSol commentedon Nov 7, 2026
#3144 ledger — repaired #4903 head and new low-temperature KCl evidence
ac18ad65f6f72b1f20a66cb2642e41aeb7fa578b(based8c9354ab490564c3c2220b8f735c645cd575c79); current master is982b4b3c1e5d036ca71af7b73c66c5d2bb790057. No rebase, replacement, ready transition, close, or merge was performed.exp(900)as an overflow sentinel #4044 remains independently review-gated for Henry-data closure only and does not block this distinct KCl evidence work.Classification: material scientific evidence found; current implementation remains bounded and draft; final Java 8 CI plus independent scientific/provenance review and like-for-like low-temperature CO2–KCl reproduction remain open.
[AI-Assisted] feat(pitzer): automate reactive brines and preserve cha…
EvenSol commentedon Nov 7, 2026
Campaign ledger — low-temperature KCl/CO2 diagnostic — 2026-11-07
25d2be2464211812a1eb4b67c285391ca8db7c6b.183f9c993daad47059fa6129f5b52d124a9469bd.EvenSol commentedon Nov 7, 2026
Exact-head hosted validation and dependency triage — 7 November 2026
25d2be2464211812a1eb4b67c285391ca8db7c6bon base183f9c993daad47059fa6129f5b52d124a9469bd. This checkpoint makes no branch, source, parameter, tolerance, offset, readiness, close, rebase, or merge change.NeqSimXtreamLegacyCompatibilityTestmethods error while cloning a legacy PFCT viscosity object becausecspViscosityCorrectionFactorsis null. The failure is outside [AI-Assisted] test(electrolyte): retain low-temperature CO2-KCl evidence #4915's six-file test/data/docs/collector scope and occurs identically on both platforms; there is no electrolyte assertion failure.62ff24ee8a7a81f8b3828b970ce6b44bcb1c9a07; its Ubuntu Java 21 fast suite, all eight slow shards, aggregate slow suite, Code Health and other completed gates pass. Its Windows fast job is still running.EvenSol commentedon Nov 7, 2026
Targeted provenance reconciliation — 7 November 2026
A fresh primary/peer-reviewed source pass did not locate an accessible copy or catalog record for the 1995 Burgass MSc method/uncertainty record. It did sharpen the observable boundary:
Implication: the molecular-only mapping reported by #4915 now has a documented modern methodological analogue, but selecting it for the 1995 data would still be an inference. Its exact-head residual range remains −0.1922 to −0.2317 percentage points, and the native/pseudo-salt mappings remain retained. No source value, tolerance, parameter, offset or qualification is changed.
Next evidence action is unchanged but more precise: obtain the original Burgass sample-analysis/mass-balance definition, or a contemporaneous Heriot-Watt procedure explicitly tied to Tables 6.2–6.5. Modern hydrate-HET uncertainty and elevated-temperature KCl solubility should remain controls, not substitutes.
EvenSol commentedon Nov 7, 2026
Current-head K10/K15 artifact decomposition — 7 November 2026
This checkpoint reads the completed hosted evidence artifacts for exact PR head
a5abb611122007ba13bc7db83e67c8f84fda455don base/master2f6ea706cde0760adea991fac4e9dd5c4d33c290. It changes no branch file, source value, model, parameter, offset, tolerance or qualification.Artifact provenance
Core run https://github.com/equinor/neqsim/actions/runs/42403013961 produced complete selected evidence:
electrolyte-assessment-evidence-0(artifact 13587346212): 110-row full Dholabhai family, fixture SHA-25607b4a213e10bc49ae3251dd6c1efd95410cf17894e4d69980dd6e6baafe17201.electrolyte-assessment-evidence-1(artifact 13587010595): 110-row matched measured-state aqueous/guest partition plus the four Burgass–Tohidi low-temperature states.electrolyte-assessment-evidence-4(artifact 13586776251): 28-row K10/K15/pure-water/cross-salt diagnostic plus 10-row Archer water-activity sequence.All producer manifests report passed tests, complete selected evidence, and zero failures/errors/skips.
Current-head K10/K15 roots
Across all eight K10/K15 points, MAE is
0.183089024509208 K; maximum absolute error is0.348203156258705 K. K10 MAE is0.140825437271701 K; K15 MAE is0.225352611746715 K.Contribution separation at measured states
The independent measured-state artifact evaluates brine and matched salt-free states at the source temperature and pressure:
0.0484252267–0.0793532790;2.8552489e-6–4.3737959e-6;|guest/aqueous|:5.1265e-5–6.6061e-5;diagnostic_not_qualified.The guest/hydrate term is therefore negligible relative to the aqueous contrast. The unresolved K10/K15 bias is bounded to aqueous water chemical potential/activity, dissolved CO2 delivery, and ion-specific aqueous association/model semantics—not the hydrate guest term.
The four Burgass–Tohidi low-temperature states remain unchanged: all three observable mappings underpredict the printed source by
0.1922–0.3124percentage points; water activity is0.91448–0.95820; inventory and molecular fugacity close to numerical precision. The source denominator and original method/uncertainty remain unresolved, so no mapping is selected.Platform and portfolio state
Both Java 21 fast suites, all eight slow shards and the aggregate slow suite pass after #4914 merged. Only the two Java 8 broad suites remain active. Review state remains 0 submissions / 0 threads. Portfolio occupancy is 5/10 positively identified autonomous implementation capabilities, with #4915 still the sole active #3144 PR.
Classification: exact-head scientific decomposition and Java 21 platform validation passed; Java 8 broad suites, original Burgass method/uncertainty, and independent electrolyte/hydrate review remain pending. Keep draft.
[AI-Assisted] test(electrolyte): retain low-temperature CO2-KCl solub…
EvenSol commentedon Nov 8, 2026
Post-merge validation and scientific gate — 8 November 2026
PR #4915 merged from preserved exact head
a5abb611122007ba13bc7db83e67c8f84fda455das merge commita2899775547a540c1fb7c5bb9a3d2fc08f917d55. Currentmasteris97c03ecf50d16a6dab7bd812364f49d5f4c5c444; no branch was rebased, replaced, restarted, force-updated, or closed for capacity.All eight exact-head workflow groups completed successfully. Core run https://github.com/equinor/neqsim/actions/runs/42403013961 is fully green: both Java 21 fast suites, all eight slow shards and aggregate, model specifications, Javadocs, and both Java 8 broad suites (Ubuntu and Windows) passed. Code Health, CodeQL, pre-commit, Spotless, documentation coverage, devtools tests, and engineering-capability coverage also passed. There are no submitted reviews or review threads on #4915.
The merged no-fit benchmark preserves four Burgass–Tohidi low-temperature KCl/CO2 states and the retained Dholabhai/Archer/He–Morse/Yasunishi/Burgass/Carroll/NaCl/CaCl2/mixed-salt controls. Exact-head K10/K15 results remain MAE
0.183089024509208 K, maximum absolute error0.348203156258705 K. At measured states the aqueous contribution is0.0484252267–0.0793532790, while the guest/hydrate contribution is only2.8552489e-6–4.3737959e-6(|guest/aqueous| = 5.1265e-5–6.6061e-5). The unresolved bias is therefore localized to aqueous water chemical potential/activity, dissolved-CO2 delivery, and ion-specific aqueous association/model semantics—not the hydrate guest term.Technical benchmark status is complete on merged default-branch evidence. Scientific qualification is not complete: the original Burgass sample-analysis/mass-balance definition, the 1995 “mole %” denominator, and source uncertainty remain unavailable. The modern salt-free-aqueous convention is an analogue, not proof of the 1995 convention. Therefore no mapping, empirical temperature offset, new parameter, tolerance relaxation, production-model change, or accuracy claim is justified.
The one-active-PR gate for #3144 is now clear. Three open AI-assisted implementation PRs are positively identified globally (#4872, #4876, #4877), so occupancy is 3/10. Spare capacity does not override the scientific/provenance gate; no speculative follow-on PR is opened. Next action is to recover the original Burgass method/uncertainty record or a contemporaneous Heriot-Watt procedure explicitly tied to Tables 6.2–6.5, then perform a like-for-like observable comparison before any physical correction. #4044 remains independently review-gated only for Henry-data closure.
[AI-Assisted] test: expand Burgass CO2 brine diagnostic
EvenSol commentedon Nov 8, 2026
Campaign progress — published draft PR #4925 on the exact append-only head
e75b0169e773d660d5c97d0920a68d535647e376(base97c03ecf50d16a6dab7bd812364f49d5f4c5c444, tree642fd162c10ef8461825fdb3ff7a31be32a225b7). Portfolio occupancy is now 7/10 positively identified autonomous implementation PRs; #4925 is the sole active #3144 campaign PR.Scientific increment: the accessible Burgass/Tohidi dissolved-CO2 diagnostic now covers all 16 KCl states in Table 6.4 and the four NaCl/KCl/CaCl2 Table 6.5 states. The source says Table 6.5 was excluded from parameter optimization, so those four rows are retained as no-fit mixed-salt holdouts. All 16 KCl states underpredict the reported “mole %” under each of the three defensible denominator mappings; the mixed-salt holdouts bracket zero. This rules out a single denominator choice as a complete explanation, but does not identify a hydrate-model root cause.
No production equations, Pitzer/CPA interactions, hydrate parameters, flash tolerances or empirical temperature offsets changed. Exact local validation includes Java 17 and actual Java 8 focused tests, 20 rows + reservoir regression, Javadocs, Spotless/docs/pre-commit gates, and source/PMD/SpotBugs against the exact base baseline with 0 new finding groups. Hosted exact-head CI and independent scientific/provenance review are pending.
Remaining evidence gap: the source “mole %” denominator, original Burgass measurement method details, and uncertainty remain unavailable. Next action is to use this expanded aqueous/guest-fugacity evidence alongside the existing K10/K15 water-activity and hydrate-contribution split; do not fit or qualify until the missing source basis or an independent measurement series resolves that boundary.
PR: #4925