Skip to the content.

Electrolyte Scale Prediction (Davies)

neqsim.process.chemistry.scale.ElectrolyteScaleCalculator computes saturation indices (SI = log(IAP/Ksp)) for the four common oilfield mineral scales using the Davies activity-coefficient model. It supersedes the simpler Oddo–Tomson ScalePredictionCalculator for brackish-to-high-salinity brines where ionic strength corrections become significant.

Theory

The saturation index of a sparingly soluble mineral $M_aA_b$ is

\[\mathrm{SI} = \log_{10}\frac{(\gamma_M[M])^a(\gamma_A[A])^b}{K_{sp}(T,P)}\]

Activity coefficients $\gamma_i$ are computed from the Davies equation:

\[\log_{10}\gamma_i = -A z_i^2 \left( \frac{\sqrt{I}}{1+\sqrt{I}} - 0.3\,I \right)\]

with ionic strength $I = \tfrac{1}{2}\sum_i c_i z_i^2$ and the Debye-Huckel constant $A(T)$ evaluated from water dielectric and density.

Solubility products $K_{sp}$ are temperature- and pressure-corrected using NIST critically evaluated data (Plummer & Busenberg 1982 for CaCO3; Monnin 1999 for sulfates).

API

Method Purpose
setTemperatureCelsius(double) Operating temperature
setPressureBara(double) Operating pressure (affects sulfate Ksp)
setPH(double) pH of the aqueous phase
setCO2PartialPressureBar(double) CO2 partial pressure (drives carbonate equilibrium)
setCations(Ca, Ba, Sr, Mg, Na, K, Fe) Cation concentrations [mg/L]
setAnions(Cl, SO4, HCO3, CO3) Anion concentrations [mg/L]
getCaCO3SaturationIndex() SI for calcite
getBaSO4SaturationIndex() SI for barite
getCaSO4SaturationIndex() SI for anhydrite
getSrSO4SaturationIndex() SI for celestite
getIonicStrength() I [mol/L]
getDebyeHueckelA() A(T)

Cation and anion setters take mg/L (the produced-water analysis convention). Internally they are converted to mol/L using molar masses 40.08 (Ca), 137.33 (Ba), 87.62 (Sr), 24.31 (Mg), 22.99 (Na), 39.10 (K), 55.85 (Fe), 35.45 (Cl), 96.06 (SO4), 61.02 (HCO3), 60.01 (CO3).

SI interpretation

SI Risk
< -0.5 Undersaturated, dissolution possible
-0.5 to 0 Near saturation, low scale risk
0 to 0.5 Slightly oversaturated, monitor
0.5 to 1.0 Moderate scaling, inhibitor recommended
> 1.0 Severe scaling, immediate action

These thresholds align with NACE TM0374 (laboratory test for scale inhibitors) and NORSOK M-001 (materials selection guidance for produced water systems).

Worked example — North Sea injection-water mixing

A formation brine high in barium and strontium meets sulfate-rich seawater injection. Predict barite and celestite scale risk at the wellbore (80 °C, 120 bara, pH 6.5):

ElectrolyteScaleCalculator scale = new ElectrolyteScaleCalculator()
    .setTemperatureCelsius(80.0)
    .setPressureBara(120.0)
    .setPH(6.5)
    .setCO2PartialPressureBar(4.0)
    .setCations(1500.0,  // Ca
                 5.0,    // Ba
                80.0,    // Sr
               800.0,    // Mg
             12000.0,    // Na
               400.0,    // K
                 0.0)    // Fe
    .setAnions(20000.0,  // Cl
                 100.0,  // SO4
                 400.0,  // HCO3
                   0.0); // CO3

System.out.printf("Ionic strength I = %.3f mol/L%n", scale.getIonicStrength());
System.out.printf("SI(CaCO3) = %+.2f%n", scale.getCaCO3SaturationIndex());
System.out.printf("SI(BaSO4) = %+.2f%n", scale.getBaSO4SaturationIndex());
System.out.printf("SI(CaSO4) = %+.2f%n", scale.getCaSO4SaturationIndex());
System.out.printf("SI(SrSO4) = %+.2f%n", scale.getSrSO4SaturationIndex());

Typical output for this brine:

Ionic strength I = 0.682 mol/L
SI(CaCO3) = +0.43
SI(BaSO4) = +1.95   <-- severe barite risk
SI(CaSO4) = -1.42
SI(SrSO4) = +0.62

Even with only 5 mg/L Ba, the very low Ksp of barite (~10⁻¹⁰) drives a high SI when seawater (≈2700 mg/L SO4 diluted into the formation) arrives. Standard mitigation is downhole or topside dosing of a phosphonate inhibitor (see ScaleInhibitorPerformance).

Coupling with deposition

ElectrolyteScaleCalculator is a thermodynamic indicator only — it tells you if scale is favoured. To estimate how much deposits where, pair it with ScaleDepositionAccumulator which integrates deposition along a pipe segment using SI × velocity × time × kinetic factor.

Validation

The class is regression-tested in ChemistryAdvancedModelsTest against the NACE TM0374 reference brines and synthetic mixing cases.