Class FurstElectrolyteConstants

java.lang.Object
neqsim.thermo.util.constants.FurstElectrolyteConstants
All Implemented Interfaces:
Serializable

public final class FurstElectrolyteConstants extends Object implements Serializable

FurstElectrolyteConstants class.

Version:
$Id: $Id
Author:
esol
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final double
    Reference dielectric constant for water at 298.15 K.
    static double[]
    Constant furstParams.
    static double[]
    Constant furstParamsCPA.
    static double[]
    Parameters for electrolytes in ethanol solvent.
    static double[]
    Parameters for electrolytes in MDEA (methyldiethanolamine) solvent.
    static double[]
    Parameters for electrolytes in MEA (monoethanolamine) solvent.
    static double[]
    Parameters for electrolytes in MEG (monoethylene glycol) solvent.
    static double[]
    Parameters for electrolytes in methanol solvent.
    static double[]
    Temperature-dependent Wij parameters for electrolyte interactions.
    static double[]
    Parameters for electrolytes in TEG (triethylene glycol) solvent.
    static double[]
    Parameters for gas-ion short-range interactions (salting out effect).
    private static Map<String,double[]>
    Ion-specific Wij parameters for problematic electrolytes.
    private static final long
    Serialization version UID.
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    private
    Dummy constructor, not for use.
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    Clear all ion-specific Wij parameters.
    static double
    getFurstParam.
    static double
    getFurstParamCPA.
    static double
    Get electrolyte parameter for ethanol solvent.
    static double
    Get gas-ion interaction parameter.
    static double
    getFurstParamMDEA.
    static double
    Get electrolyte parameter for MEA (monoethanolamine) solvent.
    static double
    Get electrolyte parameter for MEG solvent.
    static double
    Get electrolyte parameter for methanol solvent.
    static double
    Get temperature-dependent Wij parameter for electrolyte interactions.
    static double
    Get electrolyte parameter for TEG (triethylene glycol) solvent.
    static double[]
    Get ion-specific Wij parameters for a cation-anion pair.
    static double
    getMixtureDielectricConstant(double[] moleFractions, double[] dielectricConstants)
    Compute mixture dielectric constant from component contributions.
    static double
    getPredictiveWij(double epsilon, double stokesDiameter, boolean isDivalent)
    Compute predictive Wij parameter for a cation-solvent pair based on dielectric constant.
    static double
    getPredictiveWijIntercept(double epsilon, boolean isDivalent)
    Compute predictive Wij intercept parameter based on solvent dielectric constant.
    static double
    getPredictiveWijSlope(double epsilon, boolean isDivalent)
    Compute predictive Wij slope parameter based on solvent dielectric constant.
    static boolean
    Check if ion-specific Wij parameters exist for a cation-anion pair.
    private static void
    Initialize ion-specific Wij parameter map.
    static void
    setFurstParam(int i, double value)
    setFurstParam.
    static void
    setFurstParamCPA(int i, double value)
    setFurstParamCPA.
    static void
    setFurstParamEtOH(int i, double value)
    Set electrolyte parameter for ethanol solvent.
    static void
    setFurstParamGasIon(int i, double value)
    Set gas-ion interaction parameter.
    static void
    setFurstParamMDEA(int i, double value)
    Set electrolyte parameter for MDEA solvent.
    static void
    setFurstParamMEA(int i, double value)
    Set electrolyte parameter for MEA (monoethanolamine) solvent.
    static void
    setFurstParamMEG(int i, double value)
    Set electrolyte parameter for MEG solvent.
    static void
    setFurstParamMeOH(int i, double value)
    Set electrolyte parameter for methanol solvent.
    static void
    Setter for the field furstParams.
    static void
    setFurstParamTDep(int i, double value)
    Set temperature-dependent Wij parameter for electrolyte interactions.
    static void
    setFurstParamTEG(int i, double value)
    Set electrolyte parameter for TEG (triethylene glycol) solvent.
    static void
    setIonSpecificWij(String cation, String anion, double wijCatWater, double wijCatAnion)
    Set an ion-specific Wij parameter pair.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Serialization version UID.
      See Also:
    • furstParams

      public static double[] furstParams
      Constant furstParams.
    • furstParamsCPA

      public static double[] furstParamsCPA
      Constant furstParamsCPA.

      Parameters fitted to multi-salt osmotic coefficient and mean ionic activity coefficient data (Robinson & Stokes, 1965) at 25°C using Nelder-Mead optimization.

      Fitting dataset: NaCl, KCl, LiCl, NaBr, KBr, NaI, KI, NaF (1:1 halides), CaCl2, MgCl2, BaCl2, SrCl2 (2:1 chlorides). Concentration range: 0.1-6 molal.

      Performance (December 2024 fitting):

      • Halides: 1-10% combined error (excellent)
      • Divalent chlorides: 3-8% combined error (very good)
      • Nitrates: 15-18% (limited by linear correlation)
      • Na2SO4: ~40% (requires ion-specific parameters)

      Linear correlations for Wij short-range interaction parameters:

      • Wij(cation-water) = furstParamsCPA[2] * stokesDiameter + furstParamsCPA[3]
      • Wij(cation-anion) = furstParamsCPA[4] * (stokesDiam + paulingDiam)^4 + furstParamsCPA[5]

      For divalent (2+) cations:

      • Wij(2+ cation-water) = furstParamsCPA[6] * stokesDiameter + furstParamsCPA[7]
      • Wij(2+ cation-anion) = furstParamsCPA[8] * (stokesDiam + paulingDiam)^4 + furstParamsCPA[9]
    • furstParamsCPA_MDEA

      public static double[] furstParamsCPA_MDEA
      Parameters for electrolytes in MDEA (methyldiethanolamine) solvent.

      MDEA has dielectric constant ~21.2 at 25°C (vs 78.4 for water). This lower dielectric significantly affects the MSA long-range term and ion solvation energies.

      Structure same as furstParamsCPA: [0-1] LR parameters, [2-5] SR parameters for 1+ cations, [6-9] SR parameters for 2+ cations.

      Parameters fitted 2024-12 for multiple ions at 20 mol% MDEA. Most salts give reasonable γ± (6/8 pass). NaBr and CaCl2 have numerical instability issues at this composition.

      Known limitations:

      • Numerical instability (NaN) for NaBr and CaCl2
      • Stability window: 15-35 mol% MDEA for most salts
    • furstParamsCPA_MEG

      public static double[] furstParamsCPA_MEG
      Parameters for electrolytes in MEG (monoethylene glycol) solvent.

      MEG has dielectric constant 37.7 at 25°C (vs 78.4 for water). This lower dielectric significantly affects the MSA long-range term and ion solvation energies.

      Structure same as furstParamsCPA: [0-1] LR parameters, [2-5] SR parameters for 1+ cations, [6-9] SR parameters for 2+ cations.

      Parameters fitted 2024-12 for multiple ions (Na+, K+, Li+, Ca++, Mg++, Ba++) at 30 mol% MEG. Validated for Cl- and Br- salts. Gives γ± in range 0.1-6.0 for all tested salts (8/8 pass).

      Known limitations:

      • Individual ion γ may vary significantly (e.g., K+ low, Na+ high) while γ± is reasonable
      • Accuracy may degrade at very high MEG concentrations (>70 mol%)
    • furstParamsCPA_MeOH

      public static double[] furstParamsCPA_MeOH
      Parameters for electrolytes in methanol solvent.

      Methanol has dielectric constant 32.7 at 25°C (vs 78.4 for water). Structure same as furstParamsCPA.

      Parameters fitted 2024-12 for multiple ions (Na+, K+, Li+, Ca++, Mg++, Ba++) at 30 mol% methanol. Validated for Cl- and Br- salts. Uses positive slope similar to MEG to balance across ion sizes.

      Known limitations:

      • Individual ion γ may vary significantly while γ± is reasonable
      • Some divalent salts may have numerical issues at high concentrations
    • furstParamsCPA_EtOH

      public static double[] furstParamsCPA_EtOH
      Parameters for electrolytes in ethanol solvent.

      Ethanol has dielectric constant 24.5 at 25°C (vs 78.4 for water, 32.7 for methanol). Structure same as furstParamsCPA.

      Parameters fitted 2024-12 for multiple ions (Na+, K+, Li+, Ca++, Mg++, Ba++) at 30 mol% ethanol. Validated for Cl- and Br- salts. Uses positive slope similar to MEG to balance across ion sizes.

      Known limitations:

      • Individual ion γ may vary significantly while γ± is reasonable
      • Some divalent salts may have numerical issues at high concentrations
    • furstParamsCPA_MEA

      public static double[] furstParamsCPA_MEA
      Parameters for electrolytes in MEA (monoethanolamine) solvent.

      MEA (H2N-CH2-CH2-OH) is a primary alkanolamine with dielectric constant ~31 at 25°C, similar to methanol (32.7). MEA is widely used in CO2 capture applications where salt precipitation and ionic equilibria are important.

      Structure same as furstParamsCPA: [0-1] LR parameters, [2-5] SR parameters for 1+ cations, [6-9] SR parameters for 2+ cations.

      Parameters fitted 2024-12 for multiple ions at 20 mol% MEA. All tested salts (8/8) give reasonable γ± in range 0.08-6.0. Larger slope needed due to MEA's low dielectric constant.

      Known limitations:

      • Individual ion γ vary significantly (e.g., Na+ high, K+ low) while γ± is reasonable
      • Negative osmotic coefficients at high MEA concentrations (physically impossible)
    • furstParamsCPA_TEG

      public static double[] furstParamsCPA_TEG
      Parameters for electrolytes in TEG (triethylene glycol) solvent.

      TEG (HOCH2CH2OCH2CH2OCH2CH2OH) has dielectric constant ~23.7 at 25°C, similar to ethanol (24.5). TEG is widely used for gas dehydration where salt precipitation and ionic equilibria may be relevant.

      Structure same as furstParamsCPA: [0-1] LR parameters, [2-5] SR parameters for 1+ cations, [6-9] SR parameters for 2+ cations.

      WARNING: These are initial estimates based on water parameters. They have NOT been fitted against experimental data for TEG-water-electrolyte systems. Similar issues to MEG parameters are expected.

    • furstParamsCPA_TDep

      public static double[] furstParamsCPA_TDep
      Temperature-dependent Wij parameters for electrolyte interactions.

      The full Wij(T) is: Wij(T) = wij[0] + wij[1]*(1/T - 1/298.15) + wij[2]*f(T) where f(T) = (298.15-T)/T + ln(T/298.15)

      wij[1] relates to the enthalpy of ion-solvent interaction (∂G/∂T) wij[2] relates to the heat capacity contribution (∂²G/∂T²)

      Structure: [0-1] cation-water slope/intercept for wij[1], [2-3] cation-water for wij[2], [4-5] cation-anion for wij[1], [6-7] cation-anion for wij[2], [8-11] same for divalent cations

      Parameters derived from temperature dependence of osmotic coefficients. Positive wij[1] means Wij increases with temperature (weaker interaction at high T). Literature: Pitzer (1991), Archer (1992) for NaCl(aq) 273-373 K.

    • EPSILON_WATER_REF

      public static final double EPSILON_WATER_REF
      Reference dielectric constant for water at 298.15 K.
      See Also:
    • furstParamsGasIon

      public static double[] furstParamsGasIon
      Parameters for gas-ion short-range interactions (salting out effect).

      Gases like CO2 and CH4 experience a "salting out" effect in electrolyte solutions - their solubility decreases with increasing salt concentration. This is modeled through short-range Wij interactions between gas molecules and ions.

      The Setchenow equation gives: ln(S/S0) = -k_s * m where k_s is typically 0.1-0.12 L/mol for CO2 and 0.12-0.15 L/mol for CH4 in NaCl solutions.

      Structure: [0] W_CO2-cation, [1] W_CO2-anion, [2] W_CH4-cation, [3] W_CH4-anion.

      Calibration 2024-12: These parameters compensate for excessive salting out from the SR2 term's packing fraction derivative (FSR2eps * epsi). The positive Wij values reduce the net dFSR2dN contribution for CO2/CH4. Validation results for CO2 in NaCl at 298 K: 0.5 mol/kg: ~5%, 1.0 mol/kg: ~10%, 2.0 mol/kg: ~18%, matching k_s ~ 0.1 L/mol.

      Limitation: These parameters are calibrated for Na+/Cl- solutions. Other ion pairs may show different salting-out behavior due to varying implicit contributions from the FSR2eps*epsi term. For accurate predictions with ions like K+, MDEA+, HCO3-, or Ca++, ion-specific parameters should be fitted.

    • ionSpecificWij

      private static Map<String,double[]> ionSpecificWij
      Ion-specific Wij parameters for problematic electrolytes.

      These parameters override the generalized linear correlations for specific ion pairs that exhibit non-standard behavior (e.g., nitrates, sulfates with certain cations).

      Fitted to Robinson & Stokes (1965) data where generalized correlations give >15% error.

  • Constructor Details

    • FurstElectrolyteConstants

      private FurstElectrolyteConstants()
      Dummy constructor, not for use. Class is to be considered static.
  • Method Details

    • setFurstParam

      public static void setFurstParam(int i, double value)

      setFurstParam.

      Parameters:
      i - a int
      value - a double
    • getFurstParam

      public static double getFurstParam(int i)

      getFurstParam.

      Parameters:
      i - a int
      Returns:
      a double
    • getFurstParamCPA

      public static double getFurstParamCPA(int i)

      getFurstParamCPA.

      Parameters:
      i - index into furstParamsCPA array
      Returns:
      the parameter value
    • setFurstParamCPA

      public static void setFurstParamCPA(int i, double value)

      setFurstParamCPA.

      Parameters:
      i - index into furstParamsCPA array
      value - the parameter value to set
    • getFurstParamMDEA

      public static double getFurstParamMDEA(int i)

      getFurstParamMDEA.

      Parameters:
      i - a int
      Returns:
      a double
    • setFurstParamMDEA

      public static void setFurstParamMDEA(int i, double value)
      Set electrolyte parameter for MDEA solvent.
      Parameters:
      i - index into furstParamsCPA_MDEA array
      value - the parameter value to set
    • getFurstParamMEG

      public static double getFurstParamMEG(int i)
      Get electrolyte parameter for MEG solvent.
      Parameters:
      i - index into furstParamsCPA_MEG array
      Returns:
      the parameter value
    • setFurstParamMEG

      public static void setFurstParamMEG(int i, double value)
      Set electrolyte parameter for MEG solvent.
      Parameters:
      i - index into furstParamsCPA_MEG array
      value - the parameter value to set
    • getFurstParamMeOH

      public static double getFurstParamMeOH(int i)
      Get electrolyte parameter for methanol solvent.
      Parameters:
      i - index into furstParamsCPA_MeOH array
      Returns:
      the parameter value
    • setFurstParamMeOH

      public static void setFurstParamMeOH(int i, double value)
      Set electrolyte parameter for methanol solvent.
      Parameters:
      i - index into furstParamsCPA_MeOH array
      value - the parameter value to set
    • getFurstParamEtOH

      public static double getFurstParamEtOH(int i)
      Get electrolyte parameter for ethanol solvent.
      Parameters:
      i - index into furstParamsCPA_EtOH array
      Returns:
      the parameter value
    • setFurstParamEtOH

      public static void setFurstParamEtOH(int i, double value)
      Set electrolyte parameter for ethanol solvent.
      Parameters:
      i - index into furstParamsCPA_EtOH array
      value - the parameter value to set
    • getFurstParamMEA

      public static double getFurstParamMEA(int i)
      Get electrolyte parameter for MEA (monoethanolamine) solvent.
      Parameters:
      i - index into furstParamsCPA_MEA array
      Returns:
      the parameter value
    • setFurstParamMEA

      public static void setFurstParamMEA(int i, double value)
      Set electrolyte parameter for MEA (monoethanolamine) solvent.
      Parameters:
      i - index into furstParamsCPA_MEA array
      value - the parameter value to set
    • getFurstParamTEG

      public static double getFurstParamTEG(int i)
      Get electrolyte parameter for TEG (triethylene glycol) solvent.
      Parameters:
      i - index into furstParamsCPA_TEG array
      Returns:
      the parameter value
    • setFurstParamTEG

      public static void setFurstParamTEG(int i, double value)
      Set electrolyte parameter for TEG (triethylene glycol) solvent.
      Parameters:
      i - index into furstParamsCPA_TEG array
      value - the parameter value to set
    • getFurstParamTDep

      public static double getFurstParamTDep(int i)
      Get temperature-dependent Wij parameter for electrolyte interactions.

      Index mapping for wij[1] (enthalpy term):

      • [0-1]: 1+ cation-solvent slope, intercept
      • [4-5]: 1+ cation-anion prefactor, intercept
      • [8-9]: 2+ cation-solvent slope, intercept
      • [12-13]: 2+ cation-anion prefactor, intercept

      Index mapping for wij[2] (heat capacity term):

      • [2-3]: 1+ cation-solvent slope, intercept
      • [6-7]: 1+ cation-anion prefactor, intercept
      • [10-11]: 2+ cation-solvent slope, intercept
      • [14-15]: 2+ cation-anion prefactor, intercept
      Parameters:
      i - index into furstParamsCPA_TDep array
      Returns:
      the parameter value
    • setFurstParamTDep

      public static void setFurstParamTDep(int i, double value)
      Set temperature-dependent Wij parameter for electrolyte interactions.
      Parameters:
      i - index into furstParamsCPA_TDep array
      value - the parameter value to set
    • setFurstParams

      public static void setFurstParams(String type)

      Setter for the field furstParams.

      Parameters:
      type - a String object
    • getFurstParamGasIon

      public static double getFurstParamGasIon(int i)
      Get gas-ion interaction parameter.
      Parameters:
      i - index: 0-3=legacy fixed params, 4=CO2-ion slope, 5=CO2-ion intercept, 6=CH4-ion slope, 7=CH4-ion intercept
      Returns:
      the Wij parameter value
    • setFurstParamGasIon

      public static void setFurstParamGasIon(int i, double value)
      Set gas-ion interaction parameter.
      Parameters:
      i - index: 0-3=legacy fixed params, 4=CO2-ion slope, 5=CO2-ion intercept, 6=CH4-ion slope, 7=CH4-ion intercept
      value - the Wij parameter value to set
    • getPredictiveWijSlope

      public static double getPredictiveWijSlope(double epsilon, boolean isDivalent)
      Compute predictive Wij slope parameter based on solvent dielectric constant.

      This method provides a universal correlation for the cation-solvent Wij slope parameter based on the solvent's dielectric constant. The correlation is fitted to reproduce the behavior of water, methanol, ethanol, MEG, MEA, and MDEA at 298.15 K.

      The functional form is: slope = a0 + a1 * (1/epsilon - 1/epsilon_water)

      Parameters:
      epsilon - the solvent dielectric constant at the temperature of interest
      isDivalent - true if the cation is divalent (2+), false for monovalent (1+)
      Returns:
      the Wij slope parameter (multiplies ion Stokes diameter)
    • getPredictiveWijIntercept

      public static double getPredictiveWijIntercept(double epsilon, boolean isDivalent)
      Compute predictive Wij intercept parameter based on solvent dielectric constant.

      This method provides a universal correlation for the cation-solvent Wij intercept parameter based on the solvent's dielectric constant. The correlation is fitted to reproduce the behavior of water, methanol, ethanol, MEG, MEA, and MDEA at 298.15 K.

      The functional form is: intercept = b0 + b1 * (1/epsilon - 1/epsilon_water)

      Parameters:
      epsilon - the solvent dielectric constant at the temperature of interest
      isDivalent - true if the cation is divalent (2+), false for monovalent (1+)
      Returns:
      the Wij intercept parameter
    • getPredictiveWij

      public static double getPredictiveWij(double epsilon, double stokesDiameter, boolean isDivalent)
      Compute predictive Wij parameter for a cation-solvent pair based on dielectric constant.

      This is the main entry point for the predictive mixed-solvent electrolyte model. It computes the short-range Wij interaction parameter between a cation and a neutral solvent molecule using only the solvent's dielectric constant as a descriptor.

      W_ij = slope(epsilon) * d_cation + intercept(epsilon)

      For mixed solvents, compute the mixture dielectric constant first (e.g., mole-fraction weighted average), then call this method.

      Parameters:
      epsilon - the solvent (or mixture) dielectric constant
      stokesDiameter - the cation's Stokes diameter [m]
      isDivalent - true if the cation is divalent (2+)
      Returns:
      the Wij short-range interaction parameter
    • getMixtureDielectricConstant

      public static double getMixtureDielectricConstant(double[] moleFractions, double[] dielectricConstants)
      Compute mixture dielectric constant from component contributions.

      Uses a simple mole-fraction weighted average for the dielectric constant. This is a reasonable approximation for polar solvent mixtures at moderate concentrations.

      Parameters:
      moleFractions - array of mole fractions for each solvent component
      dielectricConstants - array of dielectric constants for each solvent component
      Returns:
      the mixture dielectric constant
    • getIonSpecificWij

      public static double[] getIonSpecificWij(String cation, String anion)
      Get ion-specific Wij parameters for a cation-anion pair.
      Parameters:
      cation - the cation name (e.g., "Na+")
      anion - the anion name (e.g., "NO3-")
      Returns:
      array {Wij_cation_water, Wij_cation_anion} or null if not specified
    • hasIonSpecificWij

      public static boolean hasIonSpecificWij(String cation, String anion)
      Check if ion-specific Wij parameters exist for a cation-anion pair.
      Parameters:
      cation - the cation name
      anion - the anion name
      Returns:
      true if ion-specific parameters exist
    • initializeIonSpecificWij

      private static void initializeIonSpecificWij()
      Initialize ion-specific Wij parameter map.

      Parameters fitted to Robinson & Stokes (1965) experimental data at 25°C.

    • setIonSpecificWij

      public static void setIonSpecificWij(String cation, String anion, double wijCatWater, double wijCatAnion)
      Set an ion-specific Wij parameter pair.
      Parameters:
      cation - the cation name (e.g., "Na+")
      anion - the anion name (e.g., "NO3-")
      wijCatWater - Wij for cation-water interaction
      wijCatAnion - Wij for cation-anion interaction
    • clearIonSpecificWij

      public static void clearIonSpecificWij()
      Clear all ion-specific Wij parameters.