Class ComponentSrkCPAMM

All Implemented Interfaces:
Serializable, Cloneable, ComponentCPAInterface, ComponentEosInterface, ComponentInterface, ThermodynamicConstantsInterface

public class ComponentSrkCPAMM extends ComponentSrkCPA
Component class for the Maribo-Mogensen electrolyte CPA (e-CPA) model.

This class extends ComponentSrkCPA to add support for:

  • Temperature-dependent ion-solvent interaction parameters
  • Born radius calculations using empirical correlations
  • Ion-specific parameters from the Maribo-Mogensen thesis
  • Complete thermodynamic derivatives for electrolyte contributions

The ion-solvent interaction energy follows:

ΔU_iw(T) = u⁰_iw + uᵀ_iw × (T - 298.15)
Version:
$Id: $Id
Author:
Even Solbraa
See Also:
  • Field Details

    • serialVersionUID

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

      private static final double EPSILON_0
      Vacuum permittivity [F/m].
      See Also:
    • E_CHARGE

      private static final double E_CHARGE
      Elementary charge [C].
      See Also:
    • N_A

      private static final double N_A
      Avogadro's number [1/mol].
      See Also:
    • K_B

      private static final double K_B
      Boltzmann constant [J/K].
      See Also:
    • R

      private static final double R
      Gas constant [J/(mol·K)].
      See Also:
    • u0_iw

      private double u0_iw
      Ion-solvent interaction parameter at reference temperature [K].
    • uT_iw

      private double uT_iw
      Temperature coefficient of ion-solvent interaction [K/K].
    • bornRadius

      private double bornRadius
      Born radius [Å].
    • hasMMParameters

      private boolean hasMMParameters
      Flag indicating if this component has MM ion parameters.
  • Constructor Details

    • ComponentSrkCPAMM

      public ComponentSrkCPAMM(String name, double moles, double molesInPhase, int compIndex, PhaseInterface phase)
      Constructor for ComponentSrkCPAMM.
      Parameters:
      name - Name of component
      moles - Total number of moles of component
      molesInPhase - Number of moles in phase
      compIndex - Index number of component in phase object component array
      phase - Phase object
  • Method Details

    • initMMParameters

      private void initMMParameters(String name)
      Initialize Maribo-Mogensen parameters from the ion database.

      For ions, the following parameters are set:

      • Ion-solvent interaction energy ΔU_iw from MM thesis Table 6.11
      • Born radius from empirical correlations
      • Lennard-Jones diameter σ
      • SRK b parameter: b = (α × σ³ + β) following Furst correlation
      • SRK a parameter: set to ~0 for ions (no van der Waals attraction)
      Parameters:
      name - component name
    • clone

      public ComponentSrkCPAMM clone()

      clone.

      Specified by:
      clone in interface ComponentInterface
      Overrides:
      clone in class ComponentSrkCPA
      Returns:
      a ComponentInterface object
    • getIonSolventInteractionEnergy

      public double getIonSolventInteractionEnergy(double temperature)
      Get the ion-solvent interaction energy at a given temperature.
      ΔU_iw(T) = u⁰_iw + uᵀ_iw × (T - 298.15)
      
      Parameters:
      temperature - temperature in Kelvin
      Returns:
      interaction energy in Kelvin
    • getIonSolventInteractionEnergydT

      public double getIonSolventInteractionEnergydT()
      Get the temperature derivative of ion-solvent interaction energy.
      Returns:
      dΔU_iw/dT in K/K
    • getBornRadius

      public double getBornRadius()
      Get the Born radius.
      Returns:
      Born radius in Ångströms
    • getBornRadiusMeters

      public double getBornRadiusMeters()
      Get the Born radius in meters.
      Returns:
      Born radius in meters
    • setBornRadius

      public void setBornRadius(double radius)
      Set the Born radius.
      Parameters:
      radius - Born radius in Ångströms
    • getU0_iw

      public double getU0_iw()
      Get the u⁰_iw parameter.
      Returns:
      u⁰_iw in Kelvin
    • setU0_iw

      public void setU0_iw(double u0_iw)
      Set the u⁰_iw parameter.
      Parameters:
      u0_iw - value in Kelvin
    • getUT_iw

      public double getUT_iw()
      Get the uᵀ_iw parameter.
      Returns:
      uᵀ_iw in K/K
    • setUT_iw

      public void setUT_iw(double uT_iw)
      Set the uᵀ_iw parameter.
      Parameters:
      uT_iw - value in K/K
    • hasMMParameters

      public boolean hasMMParameters()
      Check if this component has Maribo-Mogensen parameters.
      Returns:
      true if MM parameters are available
    • getBornContribution

      public double getBornContribution()
      Calculate the Born solvation contribution for this ion.
      X_Born,i = z_i² / R_Born,i
      
      Returns:
      Born contribution factor [1/Å]
    • getMMPhase

      private PhaseElectrolyteCPAMM getMMPhase(PhaseInterface phase)
      Check if phase is an electrolyte MM phase.
      Parameters:
      phase - the phase to check
      Returns:
      the MM phase or null
    • dFDebyeHuckeldN

      public double dFDebyeHuckeldN(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Debye-Hückel contribution to dF/dN_i.

      For the Debye-Hückel term: F^DH = -κ³V / (12πRT·N_A)

      The full derivative at constant T, P is: dF^DH/dn_i = (∂F^DH/∂κ)(∂κ/∂n_i) + (∂F^DH/∂V)(∂V/∂n_i)

      For ions: ∂κ/∂n_i has contribution from z_i² term. For all components: adding moles changes V which affects κ through the dilution effect.

      Parameters:
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      dF^DH/dn_i contribution
    • dFBorndN

      public double dFBorndN(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Born contribution to dF/dN_i.

      For the extensive Born term: F^Born = (N_Ae²/8πε₀RT) * (1/ε - 1) * X_Born

      The complete derivative is: dF^Born/dn_i = (∂F/∂X_Born) × (∂X_Born/∂n_i) + (∂F/∂ε) × (∂ε/∂n_i)

      Parameters:
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      dF^Born/dn_i contribution
    • dFDebyeHuckeldNdT

      public double dFDebyeHuckeldNdT(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Temperature derivative of Debye-Hückel contribution to dF/dN_i.
      Parameters:
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      d²F^DH/(dn_i dT) contribution
    • dFBorndNdT

      public double dFBorndNdT(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Temperature derivative of Born contribution to dF/dN_i.

      The full derivative d²F^Born/(dn_i dT) includes temperature derivatives of both the FBornX term and the FBornD term.

      Parameters:
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      d²F^Born/(dn_i dT) contribution
    • dFDebyeHuckeldNdV

      public double dFDebyeHuckeldNdV(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Volume derivative of Debye-Hückel contribution to dF/dN_i.
      Parameters:
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      d²F^DH/(dn_i dV) contribution
    • dFBorndNdV

      public double dFBorndNdV(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Volume derivative of Born contribution to dF/dN_i.
      Parameters:
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      d²F^Born/(dn_i dV) contribution
    • dFDebyeHuckeldNdN

      public double dFDebyeHuckeldNdN(int j, PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Composition derivative of Debye-Hückel contribution to dF/dN_i.
      Parameters:
      j - index of second component
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      d²F^DH/(dn_i dn_j) contribution
    • dFBorndNdN

      public double dFBorndNdN(int j, PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Composition derivative of Born contribution to dF/dN_i.

      d²F^Born/(dn_i dn_j) includes cross derivatives of FBornX and FBornD terms.

      Parameters:
      j - index of second component
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      d²F^Born/(dn_i dn_j) contribution
    • dFShortRangedN

      public double dFShortRangedN(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Short-range ion-solvent contribution to dF/dN_i.

      F^SR = W / (R * T) where W = Σ_i Σ_j (n_i * n_j * wij * R / V)

      For component k: dF^SR/dn_k = Σ_j (n_j * wij[k][j] + n_j * wij[j][k]) / (T * V) The wij mixing rule parameters are obtained from the phase's initMixingRuleWij().

      Parameters:
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      dF^SR/dn_i contribution
    • dFShortRangedNdT

      public double dFShortRangedNdT(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Temperature derivative of short-range contribution to dF/dN_i using wij mixing rule.
      Parameters:
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      d²F^SR/(dn_i dT) contribution
    • dFShortRangedNdV

      public double dFShortRangedNdV(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Volume derivative of short-range contribution to dF/dN_i using wij mixing rule.
      Parameters:
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      d²F^SR/(dn_i dV) contribution
    • dFShortRangedNdN

      public double dFShortRangedNdN(int j, PhaseInterface phase, int numberOfComponents, double temperature, double pressure)
      Composition derivative of short-range contribution to dF/dN_i using wij mixing rule.
      Parameters:
      j - index of second component
      phase - the phase
      numberOfComponents - number of components
      temperature - temperature in K
      pressure - pressure in bar
      Returns:
      d²F^SR/(dn_i dn_j) contribution
    • dFdN

      public double dFdN(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)

      dFdN.

      Specified by:
      dFdN in interface ComponentEosInterface
      Overrides:
      dFdN in class ComponentSrkCPA
      Parameters:
      phase - a PhaseInterface object
      numberOfComponents - a int
      temperature - a double
      pressure - a double
      Returns:
      a double
    • dFdNdT

      public double dFdNdT(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)

      dFdNdT.

      Specified by:
      dFdNdT in interface ComponentEosInterface
      Overrides:
      dFdNdT in class ComponentSrkCPA
      Parameters:
      phase - a PhaseInterface object
      numberOfComponents - a int
      temperature - a double
      pressure - a double
      Returns:
      a double
    • dFdNdV

      public double dFdNdV(PhaseInterface phase, int numberOfComponents, double temperature, double pressure)

      dFdNdV.

      Specified by:
      dFdNdV in interface ComponentEosInterface
      Overrides:
      dFdNdV in class ComponentSrkCPA
      Parameters:
      phase - a PhaseInterface object
      numberOfComponents - a int
      temperature - a double
      pressure - a double
      Returns:
      a double
    • dFdNdN

      public double dFdNdN(int j, PhaseInterface phase, int numberOfComponents, double temperature, double pressure)

      dFdNdN.

      Specified by:
      dFdNdN in interface ComponentEosInterface
      Overrides:
      dFdNdN in class ComponentSrkCPA
      Parameters:
      j - a int
      phase - a PhaseInterface object
      numberOfComponents - a int
      temperature - a double
      pressure - a double
      Returns:
      a double