Index

Explicit vs. Implicit Solvent Models

Electrolyte equations of state model mixtures containing charged species (ions). For such a mixture to be in thermodynamic equilibrium, a fundamental constraint must be imposed: the total electrical charge must sum to zero. This is the condition of electroneutrality.

How a model handles charged species defines its approach:

  • Explicit Solvent Models: These models work directly with individual ions as components (e.g., Na⁺, Cl⁻). While conceptually straightforward at the model level (ions are uniquely defined) performing phase equilibrium calculations requires explicitly satisfying the electroneutrality constraint alongside all other equilibrium conditions (like equality of chemical potentials). This adds a layer of complexity to equilibrium calculations.

  • Implicit Solvent Models: To circumvent the complexity of the electroneutrality constraint, this approach groups ions into electrically neutral pairs, representing them as a single salt component (e.g., NaCl). The remaining components (such as water) are implicitly treated as the solvent. Consequently, any model that operates with salt components rather than individual ions falls under this category.

Algorithms that solve phase equilibria by working directly with explicit solvent models are referred to as using the Electrochemical Ionic Approach, whereas algorithms that first transform the problem into an implicit solvent formulation are known to use the Mean Ionic Approach.

In Clapeyron.jl, we mainly implement explicit solvent models. However, to provide flexibility and connect the two methodologies, we offer the MeanIonicApproach model wrapper, which can transform an explicit solvent model into an equivalent implicit solvent representation.

Main models

Clapeyron.ESElectrolyteType
ESElectrolyte(solvents::Array{String,1},
    ions::Array{String,1};
    idealmodel::IdealModel = BasicIdeal,
    neutralmodel::EoSModel = pharmaPCSAFT,
    ionmodel::IonModel = DH,
    RSPmodel::RSPModel = ConstRSP,
    charge::Vector{Int} = Int[],
    ideal_userlocations = String[],
    neutralmodel_userlocations = String[],
    ionmodel_userlocations = String[],
    RSPmodel_userlocations = String[],
    verbose::Bool=false)

Description

This function provides the necessary framework to create an electrolyte model by combining ideal, neutral and ion models:

model = ESElectrolyte(["water"],["sodium","chloride"];
            idealmodel = BasicIdeal,
            neutralmodel = pharmaPCSAFT,
            ionmodel = DH,
            RSPmodel = ConstRSP)

Any of the available models in Clapeyron can be combined in the above. Note that neutral (solvent) species and ions are defined separately. Within Clapeyron, we will only support ion-based electrolyte models; as such, any salt-based approach (i.e. where the salt is treated as a separate species) will not be supported.

source
Clapeyron.MeanIonicApproachType
MeanIonicApproach(model::ESElectrolyteModel;salts = nothing)

Given en explicit solvent model, returns an implicit solvent model, where are the charged components are paired to form binary salts. If no salts argument is specified, the salt pairings will be created via Clapeyron.auto_binary_salts.

Example

´´´julia-repl julia> system = ePCSAFT(["water","acetonitrile"],["sodium","chloride"]) Explicit Electrolyte Model with 4 components: "water" "acetonitrile" "sodium" (+1) "chloride" (-1) Neutral Model: pharmaPCSAFT{BasicIdeal, Float64} Ion Model: hsdDH{ConstRSP} RSP Model: ConstRSP

julia> salt_system = MeanIonicApproach(system) MeanIonicApproach{ePCSAFT{BasicIdeal, pharmaPCSAFT{BasicIdeal, Float64}, hsdDH{ConstRSP}}} with 3 components: "water" "acetonitrile" "sodium.chloride" ´´´

source

Ion Models

Clapeyron.BornType
Born(solvents::Array{String,1},
    ions::Array{String,1};
    RSPmodel = ConstRSP,
    userlocations = String[],
    RSPmodel_userlocations = String[],
    verbose = false)

Input parameters

  • sigma_born: Single Parameter (Float64) - Born Diameter [m]

Input models

  • RSPmodel: Relative Static Permittivity Model

Description

This function is used to create a Born model. The Born term gives the excess Helmholtz energy to account for the electrostatic interactions between ions in solution.

References

  1. Born, M. (1920). Z. Phys. 1, 45.
source
Clapeyron.DHType
DH(solvents::Array{String,1},
    ions::Array{String,1};
    RSPmodel = ConstRSP,
    userlocations = String[],
    RSPmodel_userlocations = String[],
    verbose = false)

Input models

  • RSPmodel: Relative Static Permittivity Model

Description

This function is used to create a Debye-Hückel model. The Debye-Hückel term gives the excess Helmholtz energy to account for the electrostatic interactions between ions in solution.

References

  1. Debye, P., Huckel, E. (1923). Phys. Z. 24, 185.
source
Clapeyron.MSAType
MSA(solvents::Array{String,1},
    ions::Array{String,1};
    RSPmodel = ConstRSP,
    userlocations = String[],
    RSPmodel_userlocations = String[],
    verbose = false)

Input models

  • RSPmodel: Relative Static Permittivity Model

Description

This function is used to create a Mean Spherical Approximation model. The MSA term gives the excess Helmholtz energy to account for the electrostatic interactions between ions in solution.

References

  1. Blum, L. (1974). Solution of a model for the solvent-electrolyte interactions in the mean spherical approximation. The Journal of Chemical Physics, 61(5), 2129–2133. doi:10.1063/1.1682224
source
Clapeyron.DHBornType
DHBorn(solvents::Array{String,1},
    ions::Array{String,1};
    RSPmodel = ConstRSP,
    userlocations = String[],
    RSPmodel_userlocations = String[],
    verbose = false)

Input parameters

  • sigma: Single Parameter (Float64) - Diameter of closest approach [m]
  • sigma_born: Single Parameter (Float64) - Born Diameter [m]
  • charge: Single Parameter (Float64) - Charge [-]

Input models

  • RSPmodel: Relative Static Permittivity Model

Description

This function is used to create a Debye-Hückel-Born model. The Debye-Hückel-Born term gives the excess Helmholtz energy to account for the electrostatic interactions between ions in solution.

References

  1. Debye, P., Huckel, E. (1923). Phys. Z. 24, 185.
  2. Born, M. (1920). Z. Phys. 1, 45.
source
Clapeyron.MSABornType
MSABorn(solvents::Array{String,1},
    ions::Array{String,1};
    RSPmodel = ConstRSP,
    userlocations = String[],
    RSPmodel_userlocations = String[],
    verbose = false)

Input parameters

  • sigma: Single Parameter (Float64) - Hard-sphere diameter [m]
  • sigma_born: Single Parameter (Float64) - Born Diameter [m]
  • charge: Single Parameter (Float64) - Charge [-]

Input models

  • RSPmodel: Relative Static Permittivity Model

Description

This function is used to create a Mean Spherical Approximation-Born model. The MSA-Born term gives the excess Helmholtz energy to account for the electrostatic interactions between ions in solution.

References

  1. Blum, L. (1974). Solution of a model for the solvent‐electrolyte interactions in the mean spherical approximation, 61, 2129–2133.
  2. Born, M. (1920). Z. Phys. 1, 45.
source
Clapeyron.GCMSABornType
GCMSABorn(solvents::Array{String,1},
     ions::Array{String,1};
     RSPmodel=ConstRSP,
     SAFTlocations=String[],
     userlocations=String[],
     verbose=false)

Input parameters

  • sigma: Single Parameter (Float64) - Hard-sphere diameter [m]
  • sigma_born: Single Parameter (Float64) - Born Diameter [m]
  • charge: Single Parameter (Float64) - Charge [-]

Input models

  • RSPmodel: Relative Static Permittivity Model

Description

This function is used to create a group-contribution Mean Spherical Approximation-Born model used in SAFT-gamma E Mie

source

Electrolyte Models

Clapeyron.ePCSAFTType
ePCSAFT(solvents::Array{String,1}, 
    ions::Array{String,1}; 
    idealmodel::IdealModel = BasicIdeal,
    neutralmodel::EoSModel = pharmaPCSAFT,
    ionmodel::IonModel = DH,
    RSPmodel::RSPModel = ConstRSP,
    charge = String[], 
    ideal_userlocations = String[],
    neutralmodel_userlocations = String[],
    ionmodel_userlocations = String[],
    RSPmodel_userlocations = String[],
    assoc_options::AssocOptions = AssocOptions(),
    verbose::Bool = false,
    reference_state = nothing)

Description

This function is used to create an ePCSAFT model which is a combination of the PC-SAFT and Debye-Hückel model. It is based on the ePC-SAFT Revised variant.

Input parameters

PC-SAFT Parameters

  • Mw: Single Parameter (Float64) - Molecular Weight [g·mol⁻¹]
  • segment: Single Parameter (Float64) - Number of segments (no units)
  • sigma: Single Parameter (Float64) - Segment Diameter [Å]
  • epsilon: Single Parameter (Float64) - Reduced dispersion energy [K]
  • k: Pair Parameter (Float64) (optional) - Binary Interaction Parameter (no units)
  • epsilon_assoc: Association Parameter (Float64) - Reduced association energy [K]
  • bondvol: Association Parameter (Float64) - Association Volume [m³]

Debye-Hückel Parameters

  • sigma: Single Parameter (Float64) - Diameter of closest approach [m]
  • charge: Single Parameter (Float64) - Charge [-]

Input models

  • idealmodel: Ideal Model
  • neutralmodel: Neutral EoS Model
  • ionmodel: Ion Model

References

  1. Held, C., Reschke, T., Mohammad, S., Luza, A., Sadowski, G. (2014). ePC-SAFT Revised. Chemical Engineering Research and Design, 92(12), 2884-2897.
source
Clapeyron.eSAFTVRMieFunction
eSAFTVRMie(solvents::Array{String,1}, 
    ions::Array{String,1}; 
    idealmodel::IdealModel = BasicIdeal,
    neutralmodel::EoSModel = SAFTVRMie15,
    ionmodel::IonModel = DHBorn,
    RSPmodel::RSPModel = ZuoFurst,
    charge = String[], 
    ideal_userlocations = String[],
    neutralmodel_userlocations = String[],
    ionmodel_userlocations = String[],
    RSPmodel_userlocations = String[],
    assoc_options::AssocOptions = AssocOptions(),
    verbose::Bool = false,
    reference_state = nothing)

Description

This function is used to create an eSAFTVRMie model which is a combination of the SAFTVR-Mie, Debye-Hückel and Born models.

Input parameters

SAFT-VR Mie Parameters

  • Mw: Single Parameter (Float64) - Molecular Weight [g·mol⁻¹]
  • segment: Single Parameter (Float64) - Number of segments (no units)
  • sigma: Single Parameter (Float64) - Segment Diameter [Å]
  • epsilon: Single Parameter (Float64) - Reduced dispersion energy [K]
  • lambda_a: Pair Parameter (Float64) - Atractive range parameter (no units)
  • lambda_r: Pair Parameter (Float64) - Repulsive range parameter (no units)
  • k: Pair Parameter (Float64) (optional) - Binary Interaction Parameter (no units)
  • epsilon_assoc: Association Parameter (Float64) - Reduced association energy [K]
  • bondvol: Association Parameter (Float64) - Association Volume [m³]

Debye-Hückel Parameters

  • sigma: Single Parameter (Float64) - Diameter of closest approach [m]
  • charge: Single Parameter (Float64) - Charge [-]

Born Parameters

  • sigma_born: Single Parameter (Float64) - Born Diameter [m]
  • charge: Single Parameter (Float64) - Charge [-]

Input models

  • idealmodel: Ideal Model
  • neutralmodel: Neutral EoS Model
  • ionmodel: Ion Model

References

  1. Selam, M., Economou, I., Castier, M. (2018). A thermodynamic model for strong aqueous electrolytes based on the eSAFT-VR Mie equation of state. Fluid Phase Equilibria, 464, 47-63.
source
Clapeyron.SAFTVREMieFunction
SAFTVREMie(solvents::Array{String,1}, 
    ions::Array{String,1}; 
    idealmodel::IdealModel = BasicIdeal,
    neutralmodel::EoSModel = SAFTVRMie,
    ionmodel::IonModel = MSABorn,
    RSPmodel::RSPModel = Schreckenberg,
    charge = String[], 
    ideal_userlocations = String[],
    neutralmodel_userlocations = String[],
    ionmodel_userlocations = String[],
    RSPmodel_userlocations = String[],
    assoc_options::AssocOptions = AssocOptions(),
    verbose::Bool = false,
    reference_state = nothing)

Description

This function is used to create an SAFT-VRE Mie model which is a combination of the SAFT-VR Mie, MSA and Born models.

Input parameters

SAFT-VR Mie Parameters

  • Mw: Single Parameter (Float64) - Molecular Weight [g·mol⁻¹]
  • segment: Single Parameter (Float64) - Number of segments (no units)
  • sigma: Single Parameter (Float64) - Segment Diameter [Å]
  • epsilon: Single Parameter (Float64) - Reduced dispersion energy [K]
  • lambda_a: Pair Parameter (Float64) - Atractive range parameter (no units)
  • lambda_r: Pair Parameter (Float64) - Repulsive range parameter (no units)
  • k: Pair Parameter (Float64) (optional) - Binary Interaction Parameter (no units)
  • epsilon_assoc: Association Parameter (Float64) - Reduced association energy [K]
  • bondvol: Association Parameter (Float64) - Association Volume [m³]

MSA Parameters

  • sigma: Single Parameter (Float64) - Diameter of closest approach [m]
  • charge: Single Parameter (Float64) - Charge [-]

Born Parameters

  • sigma_born: Single Parameter (Float64) - Born Diameter [m]
  • charge: Single Parameter (Float64) - Charge [-]

Input models

  • idealmodel: Ideal Model
  • neutralmodel: Neutral EoS Model
  • ionmodel: Ion Model

References

  1. Eriksen, D.K., Lazarou, G., Galindo, A., Jackson, G., Adjiman, C.S., & Haslam, A.J. (2016). Development of intermolecular potential models for electrolyte solutions using an electrolyte SAFT-VR Mie equation of state. Molecular Physics, 114(18), 2724-2749.
source
Clapeyron.SAFTgammaEMieFunction
SAFTgammaEMie(solvents::Array{String,1}, 
    ions::Array{String,1}; 
    idealmodel::IdealModel = BasicIdeal,
    neutralmodel::EoSModel = SAFTgammaMie,
    ionmodel::IonModel = GCMSABorn,
    RSPmodel::RSPModel = Schreckenberg,
    userlocations::Vector{String} = [],
    ideal_userlocations::Vector{String} = [],
    assoc_options::AssocOptions = AssocOptions(),
    verbose::Bool = false)

Description

This function is used to create an SAFT-gammaE Mie model which is a combination of the SAFT-gamma Mie, MSA and Born models.

Input parameters

SAFT-VR Mie Parameters

  • Mw: Single Parameter (Float64) - Molecular Weight [g·mol⁻¹]
  • vst: Single Parameter (Float64) - Number of segments (no units)
  • S: Single Parameter (Float64) - Shape factor for segment (no units)
  • sigma: Single Parameter (Float64) - Segment Diameter [Å]
  • epsilon: Single Parameter (Float64) - Reduced dispersion energy [K]
  • lambda_a: Pair Parameter (Float64) - Atractive range parameter (no units)
  • lambda_r: Pair Parameter (Float64) - Repulsive range parameter (no units)
  • epsilon_assoc: Association Parameter (Float64) - Reduced association energy [K]
  • bondvol: Association Parameter (Float64) - Association Volume

MSA Parameters

  • sigma: Single Parameter (Float64) - Diameter of closest approach [m]
  • charge: Single Parameter (Float64) - Charge [-]

Born Parameters

  • sigma_born: Single Parameter (Float64) - Born Diameter [m]
  • charge: Single Parameter (Float64) - Charge [-]

Input models

  • idealmodel: Ideal Model
  • neutralmodel: Neutral EoS Model
  • ionmodel: Ion Model

References

  1. Haslam, A.J., González-Pérez, A., Di Lecce, S., Khalit, S.H., Perdomo, F.A., Kournopoulos, S., Kohns, M., Lindeboom, T., Wehbe, M., Febra, S., Jackson, G., Adjiman, C.S. & Galind, A. (2020). Expanding the Applications of the SAFT-γ Mie Group-Contribution Equation of State: Prediction of Thermodynamic Properties and Phase Behavior of Mixtures. Journal of Chemical Engineering Data, 65(12), 5862–5890
source

Relative Static Permittivity Models

Clapeyron.ConstRSPType
ConstRSP(solvents::Array{String,1},
    ions::Array{String,1};
    userlocations::Vector{String}=[],
    value::Float64 = 78.38484961,
    verbose::Bool=false)

ConstRSP(val::Float64)

Input parameters

  • value::Float64: Constant Relative Static Permittivity [-]

Description

This function is used to create a constant Relative Static Permittivity model, given by value.

source
Clapeyron.LinMixRSPType
LinMixRSP(solvents::Array{String,1},
     ions::Array{String,1};
     userlocations::Vector{String}=[],
     verbose::Bool=false)

Input parameters

  • dielectric_constant::Float64: Constant Relative Static Permittivity [-]

Description

This function is used to create a Linear Mixing-Rule Relative Static Permittivity model, for a mixture of solvents, where each solvent has a dielectric_constant.

source
Clapeyron.SchreckenbergType
Schreckenberg(solvents::Array{String,1},
     ions::Array{String,1};
     userlocations::Vector{String}=[],
     verbose::Bool=false)

Input parameters

  • d_T::Float64: Single Parameter - Temperature dependent parameter [K]
  • d_V::Float64: Single Parameter - Volume dependent parameter [m³·mol⁻¹]

Description

This function is used to create a Schreckenberg model. The Schreckenberg term estimates the dielectric constant for a mixture of solvents.

References

  1. Schreckenberg, J., Dufal, S., Haslam, A.J., Adjiman, C.S., Jackson, G., Galindo, A. (2014). Modelling of the thermodynamic and solvation properties of electrolyte solutions with the statistical associating fluid theory for potentials of variable range. Molecular Physics, 112(17), 2339-2364.
source
Clapeyron.ZuoFurstType
ZuoFurst(solvents::Array{String,1},
     ions::Array{String,1};
     userlocations = nothing,
     verbose::Bool=false)

Description

This function is used to create a Zuo-First model. The Zuo-First expression estimates the dielectric constant of water for a range of temperatures.

References

  1. Zuo, Y-X., Fürst, W. (1997). Prediction of vapor pressure for nonaqueous electrolyte solutions using an electrolyte equation of state, Fluid Phase Equilibria, 138(1-2), 87-104.
source