Class PhaseElectrolyteCPAMM
- All Implemented Interfaces:
Serializable, Cloneable, PhaseCPAInterface, PhaseEosInterface, PhaseInterface, ThermodynamicConstantsInterface
The residual Helmholtz free energy is computed as:
A^res = A^SRK + A^Association + A^Debye-Hückel + A^Born
Key features of this model:
- SRK cubic equation of state with CPA association term
- Debye-Hückel theory for long-range electrostatic interactions (simpler than MSA)
- Born solvation term with empirical Born radius correlations
- Temperature-dependent ion-solvent interaction parameters
References:
- Maribo-Mogensen, B. (2014). PhD Thesis, DTU Chemical Engineering.
- Maribo-Mogensen et al., Ind. Eng. Chem. Res. 2012, 51, 5353-5363
- Version:
- $Id: $Id
- Author:
- Even Solbraa
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumDielectric constant mixing rule options for mixed solvents. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final doubleAvogadro's number [1/mol].private static final doubleBoltzmann constant [J/K].protected booleanFlag to enable/disable Born term.protected doubleBorn X factor: Σ(n_i * z_i² / R_Born,i) [mol/m].protected booleanFlag to enable/disable Debye-Hückel term.Current dielectric mixing rule.private static final doubleElementary charge [C].protected doubleIon-solvent short-range interaction parameter W [J/mol].protected doubleTemperature derivative of W [J/(mol·K)].protected doubleDebye screening length inverse (kappa) [1/m].protected doubleTemperature derivative of kappa [1/(m·K)].private static final org.apache.logging.log4j.LoggerLogger object for class.protected doubleMixture dielectric constant including ion contributions [-].protected doublePacking fraction η = (π N_A / 6V) Σ n_i σ_i³ [-].protected doubleVolume derivative of packing fraction [1/m³].private static final longSerialization version UID.protected booleanFlag to enable/disable short-range ion-solvent term.protected doubleSolvent static permittivity (dielectric constant) [-].protected doubleTemperature derivative of solvent permittivity [1/K].protected doubleSecond temperature derivative of solvent permittivity [1/K²].private static final doubleVacuum permittivity [F/m] = [C²/(J·m)].protected double[][]Ion-solvent binary interaction parameters wij.protected double[][]Temperature derivatives of ion-solvent wij parameters. wijT[i][j] = d(wij)/dT.Fields inherited from class PhaseSrkCPA
activeAccosComp, assSiteNumber, cpamix, cpaon, cpaSelect, crossAccociationScheme, dFCPAdT, dFCPAdTdT, dFCPAdTdV, dFCPAdV, dFCPAdVdV, dFCPAdVdVdV, FCPA, gcpa, gcpav, gcpavv, gcpavvv, hcpatot, Klkni, moleculeNumber, oldTotalNumberOfAccociationSites, selfAccociationScheme, totalNumberOfAccociationSitesFields inherited from class Phase
beta, calcMolarVolume, chemSyst, componentArray, diElectricConstant, mixingRuleType, molarVolume, numberOfComponents, numberOfMolesInPhase, phaseVolume, physicalPropertyHandler, pressure, pt, refPhase, temperature, thermoPropertyModelName, useVolumeCorrection, ZFields inherited from interface ThermodynamicConstantsInterface
atm, avagadroNumber, boltzmannConstant, electronCharge, faradayConstant, gravity, molarMassAir, normalStateTemperature, pi, planckConstant, R, referencePressure, referenceTemperature, standardStateTemperature, vacumPermittivity -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddComponent(String name, double moles, double molesInPhase, int compNumber) Add component to component array and update moles variables.doublecalcBornRadius(double sigma, int charge) Calculate Born radius using Maribo-Mogensen empirical correlations.doubleCalculate Born solvation factor X_Born.doubleCalculate ionic packing fraction. η_ion = (π/6V) * Σ(n_i * σ_i³) for ionic species onlydoubleCalculate ionic strength sum X_DH = Σ(n_i z_i²).doubleCalculate ion-solvent short-range interaction parameter W using wij mixing rule parameters.doubleCalculate temperature derivative of W using wijT mixing rule parameters.doubleCalculate Debye screening parameter kappa.doubleCalculate temperature derivative of kappa.doubleCalculate mixture permittivity including ion effects.doubleCalculate packing fraction (reduced density) η.doubleCalculate volume derivative of packing fraction.doublecalcSolventPermittivity(double T) Calculate solvent static permittivity using the selected mixing rule.doublecalcSolventPermittivitydn(int k, double T) Calculate composition derivative of solvent permittivity for component k.doublecalcSolventPermittivitydndn(int k, int l, double T) Calculate second composition derivative of solvent permittivity.doublecalcSolventPermittivitydndT(int k, double T) Calculate mixed composition-temperature derivative of solvent permittivity.private doublecalcSolventPermittivitydnLichtenecker(int k, double T) Lichtenecker composition derivative.private doublecalcSolventPermittivitydnLooyenga(int k, double T) Looyenga composition derivative.private doublecalcSolventPermittivitydnMolarAvg(int k, double T) Molar average composition derivative.private doublecalcSolventPermittivitydnVolumeAvg(int k, double T) Volume average composition derivative.doublecalcSolventPermittivitydT(double T) Calculate temperature derivative of solvent permittivity using the selected mixing rule.doublecalcSolventPermittivitydTdT(double T) Calculate second temperature derivative of solvent permittivity.private doublecalcSolventPermittivitydTLichtenecker(double T) Lichtenecker temperature derivative.private doublecalcSolventPermittivitydTLooyenga(double T) Looyenga temperature derivative.private doublecalcSolventPermittivitydTMolarAvg(double T) Molar average temperature derivative.private doublecalcSolventPermittivitydTOster(double T) Oster temperature derivative.private doublecalcSolventPermittivitydTVolumeAvg(double T) Volume average temperature derivative.private doublecalcSolventPermittivityLichtenecker(double T) Calculate solvent permittivity using Lichtenecker-Rother mixing rule.private doublecalcSolventPermittivityLooyenga(double T) Calculate solvent permittivity using Looyenga mixing rule.private doublecalcSolventPermittivityMolarAvg(double T) Calculate solvent permittivity using molar average mixing rule.private doublecalcSolventPermittivityOster(double T) Calculate solvent permittivity using Oster mixing rule.private doublecalcSolventPermittivityVolumeAvg(double T) Calculate solvent permittivity using volume average mixing rule.clone()clone.doubledFBorndT()Temperature derivative of Born term. dF^Born/dTdoubleSecond temperature derivative of Born term. d²F^Born/dT²doubledFBorndV()Volume derivative of Born term. dF^Born/dV (Born term is almost independent of V)doubleTemperature derivative of Debye-Hückel term at constant V. dF^DH/dTdoubleSecond temperature derivative of Debye-Hückel term. d²F^DH/dT²doubleMixed temperature-volume derivative of Debye-Hückel term. d²F^DH/dTdVdoubleVolume derivative of Debye-Hückel term. dF^DH/dV = ∂F^DH/∂VdoubleSecond volume derivative of Debye-Hückel term. d²F^DH/dV²doubleThird volume derivative of Debye-Hückel term. d³F^DH/dV³doubledFdT()Calculate derivative of F per Temperature, i.e., dF/dT.doubledFdTdT()dFdTdT.doubledFdTdV()Calculate derivative of F per Temperature and Volume, i.e., dF/dT * 1/dV.doubledFdV()Calculate derivative of F per Volume, i.e., dF/dV.doubledFdVdV()dFdVdV.doubledFdVdVdV()dFdVdVdV.doubleTemperature derivative of short-range term.doubleSecond temperature derivative of short-range term.doubleMixed temperature-volume derivative of short-range term.doubleVolume derivative of short-range term.doubleSecond volume derivative of short-range term.doubleThird volume derivative of short-range term.doubleFBorn()Born solvation contribution to Helmholtz free energy (extensive).doubleFBornD()Derivative of Born term with respect to dielectric constant.doubleFBornDD()Second derivative of Born term with respect to dielectric constant.doubleFBornDX()Mixed derivative of Born term with respect to dielectric constant and X_Born.doubleFBornN()Partial derivative of F^Born with respect to n_T (at constant X_Born).doubleFBornX()Derivative of Born term with respect to X_Born.doubleFBornXT()Temperature derivative of FBornX.doubleDebye-Hückel contribution to Helmholtz free energy (extensive).doublePartial derivative of F^DH with respect to n_T (at constant κ).doublePartial derivative of F^DH with respect to X_DH = Σ(n_i z_i²).doubleShort-range ion-solvent contribution to Helmholtz free energy.doublegetBornX()Get the Born X parameter (sum of z_i²/R_Born,i for all ions).doubleGet Debye screening length.Get the current dielectric constant mixing rule.doublegetF()getF.doubleGet the ion-solvent interaction parameter W.doublegetKappa()Get Debye screening parameter.doubleGet mixture permittivity.doubleGet the packing fraction.doubleGet the volume derivative of packing fraction.doubleGet solvent permittivity.doubleGet temperature derivative of solvent permittivity.doublegetWij(int i, int j) Get the ion-solvent interaction parameter wij at current temperature.doublegetWijT(int i, int j) Get the temperature derivative of ion-solvent interaction parameter wij.voidinit.voidInitialize volume-dependent electrolyte properties.voidInitialize the ion-solvent wij mixing rule parameters from component ΔU_iw values.booleanCheck if short-range ion-solvent term is enabled.voidsetBornOn(boolean on) Enable or disable Born term.voidsetDebyeHuckelOn(boolean on) Enable or disable Debye-Hückel term.voidSet the dielectric constant mixing rule.voidsetShortRangeOn(boolean on) Enable or disable short-range ion-solvent term.Methods inherited from class PhaseSrkCPA
calcDelta, calcPressure, calcRootVolFinder, calcXsitedV, croeneckerProduct, dFCPAdT, dFCPAdTdT, dFCPAdTdV, dFCPAdV, dFCPAdVdV, dFCPAdVdVdV, FCPA, getCpaMixingRule, getCrossAssosiationScheme, getdFdNtemp, getGcpa, getGcpav, getHcpatot, getTotalNumberOfAccociationSites, initCPAMatrix, initCPAMatrixOld, initOld2, molarVolume, molarVolume2, molarVolumeChangePhase, molarVolumeOld, setGcpav, setHcpatot, setMixingRule, setTotalNumberOfAccociationSites, solveX, solveX2, solveX2Old, solveXOldMethods inherited from class PhaseEos
calcA, calcAi, calcAij, calcAiT, calcAT, calcATT, calcB, calcBi, calcBij, calcf, calcg, calcPressuredV, dFdN, dFdNdN, dFdNdT, dFdNdV, dFdxdxMatrix, dFdxdxMatrixSimple, dFdxMatrix, dFdxMatrixSimple, displayInteractionCoefficients, equals, F, fb, FB, fBB, FBB, FBD, FBT, fBV, FBV, FD, FDT, FDV, Fn, FnB, FnV, FT, FTT, FTV, fv, FV, fVV, FVV, fVVV, FVVV, gb, gBB, gBV, geta, geta, getA, getAresTV, getAT, getATT, getb, getb, getB, getCpres, getCvres, getdPdrho, getdPdTVn, getdPdVTn, getdrhodN, getdrhodP, getdrhodT, getdTVndSVnJaobiMatrix, getdUdSdSVn, getdUdSdVn, getdUdSVn, getdUdVdVSn, getdUdVSn, getdVdrho, getEosMixingRule, getf_loc, getg, getGradientVector, getGresTP, getHresdP, getHresTP, getJouleThomsonCoefficient, getMixingRule, getMixingRuleName, getPressureAttractive, getPressureRepulsive, getSoundSpeed, getSresTP, getSresTV, getUSVHessianMatrix, gV, gVV, gVVV, resetMixingRule, setMixingRuleGEModelMethods inherited from class Phase
addComponent, addMoles, addMolesChemReac, calcA, calcAT, calcDiElectricConstant, calcDiElectricConstantdT, calcDiElectricConstantdTdT, calcMolarVolume, calcR, getActivityCoefficient, getActivityCoefficient, getActivityCoefficient, getActivityCoefficientSymetric, getActivityCoefficientUnSymetric, getAiT, getAlpha0_EOSCG, getAlpha0_GERG2008, getAlpha0_Leachman, getAlpha0_Leachman, getAlpha0_Vega, getAlphares_EOSCG, getAlphares_GERG2008, getAlphares_Leachman, getAlphares_Leachman, getAlphares_Vega, getAntoineVaporPressure, getBeta, getBi, getComponent, getComponent, getcomponentArray, getComponentNames, getComponents, getComponentWithIndex, getComposition, getCompressibilityX, getCompressibilityY, getCorrectedVolume, getCp, getCp, getCp0, getCv, getCv, getDensity, getDensity, getDensity_AGA8, getDensity_EOSCG, getDensity_GERG2008, getDensity_Leachman, getDensity_Leachman, getDensity_Vega, getDiElectricConstant, getEnthalpy, getEnthalpy, getEnthalpydP, getEnthalpydT, getEntropy, getEntropy, getEntropydP, getEntropydT, getExcessGibbsEnergy, getExcessGibbsEnergySymetric, getFlowRate, getFugacity, getFugacity, getGamma, getGibbsEnergy, getHelmholtzEnergy, getHID, getInfiniteDiluteFugacity, getInfiniteDiluteFugacity, getInitType, getInternalEnergy, getInternalEnergy, getIsobaricThermalExpansivity, getIsothermalCompressibility, getJouleThomsonCoefficient, getLogActivityCoefficient, getLogInfiniteDiluteFugacity, getLogInfiniteDiluteFugacity, getLogPureComponentFugacity, getLogPureComponentFugacity, getMass, getMeanIonicActivity, getMixGibbsEnergy, getMixingRuleType, getModelName, getMolalMeanIonicActivity, getMolarComposition, getMolarMass, getMolarMass, getMolarVolume, getMolarVolume, getMoleFraction, getNumberOfComponents, getNumberOfIonicComponents, getNumberOfMolecularComponents, getNumberOfMolesInPhase, getOsmoticCoefficient, getOsmoticCoefficientOfWater, getOsmoticCoefficientOfWaterMolality, getpH, getpH, getPhase, getPhysicalProperties, getPhysicalPropertyModel, getPressure, getPressure, getProperties_EOSCG, getProperties_GERG2008, getProperties_Leachman, getProperties_Leachman, getProperties_Vega, getPseudoCriticalPressure, getPseudoCriticalTemperature, getPureComponentFugacity, getPureComponentFugacity, getRefPhase, getRefPhase, getSoundSpeed, getTemperature, getTemperature, getThermalConductivity, getThermalConductivity, getThermoPropertyModelName, getTotalVolume, getType, getViscosity, getViscosity, getVolume, getVolume, getWaterDensity, getWtFrac, getWtFrac, getWtFraction, getWtFractionOfWaxFormingComponents, getZ, getZvolcorr, groupTBPfractions, hasComponent, hasPlusFraction, hasTBPFraction, initPhysicalProperties, initPhysicalProperties, initRefPhases, initRefPhases, isConstantPhaseVolume, isMixingRuleDefined, normalize, removeComponent, resetPhysicalProperties, setAttractiveTerm, setBeta, setComponentArray, setConstantPhaseVolume, setEmptyFluid, setInitType, setMolarVolume, setMoleFractions, setNumberOfComponents, setParams, setPhysicalProperties, setPhysicalPropertyModel, setPpm, setPressure, setProperties, setRefPhase, setRefPhase, setTemperature, setTotalVolume, setType, useVolumeCorrection, useVolumeCorrectionMethods inherited from class Object
finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface PhaseCPAInterface
calc_g, calc_hCPA, calc_lngV, calc_lngVV, calc_lngVVVMethods inherited from interface PhaseEosInterface
calcPressuredV, dFdN, dFdNdN, dFdNdT, dFdNdV, displayInteractionCoefficients, F, getAresTV, getEosMixingRule, getMixingRuleName, getMolarVolume, getPressureAttractive, getPressureRepulsive, getSresTVMethods inherited from interface PhaseInterface
addMoles, addMolesChemReac, addMolesChemReac, calcA, calcAi, calcAij, calcAiT, calcAT, calcB, calcBi, calcBij, calcMolarVolume, calcR, fb, FB, fBB, FBB, FBD, FBT, fBV, FBV, FD, FDT, FDV, Fn, FnB, FnV, FT, FTT, FTV, fv, FV, fVV, FVV, gb, gBB, gBV, geta, getA, getActivityCoefficient, getActivityCoefficient, getActivityCoefficient, getActivityCoefficientSymetric, getActivityCoefficientUnSymetric, getAlpha0_EOSCG, getAlpha0_GERG2008, getAlpha0_Leachman, getAlpha0_Leachman, getAlpha0_Vega, getAlphares_EOSCG, getAlphares_GERG2008, getAlphares_Leachman, getAlphares_Leachman, getAlphares_Vega, getAntoineVaporPressure, getAT, getATT, getb, getB, getBeta, getComponent, getComponent, getcomponentArray, getComponentNames, getComponents, getComponentWithIndex, getComposition, getCompressibilityX, getCompressibilityY, getCorrectedVolume, getCp, getCp, getCp0, getCpres, getCv, getCv, getDensity, getDensity, getDensity_AGA8, getDensity_EOSCG, getDensity_GERG2008, getDensity_Leachman, getDensity_Leachman, getDensity_Vega, getdPdrho, getdPdTVn, getdPdVTn, getdrhodN, getdrhodP, getdrhodT, getEnthalpy, getEnthalpy, getEnthalpydP, getEnthalpydT, getEntropy, getEntropy, getEntropydP, getEntropydT, getExcessGibbsEnergy, getExcessGibbsEnergySymetric, getFlowRate, getFugacity, getFugacity, getg, getGamma, getGamma2, getGibbsEnergy, getGresTP, getHelmholtzEnergy, getHresTP, getInfiniteDiluteFugacity, getInitType, getInternalEnergy, getInternalEnergy, getIsobaricThermalExpansivity, getIsothermalCompressibility, getJouleThomsonCoefficient, getJouleThomsonCoefficient, getLogActivityCoefficient, getLogInfiniteDiluteFugacity, getLogInfiniteDiluteFugacity, getLogPureComponentFugacity, getMass, getMeanIonicActivity, getMixGibbsEnergy, getMixingRule, getMixingRuleType, getModelName, getMolalMeanIonicActivity, getMolarComposition, getMolarMass, getMolarMass, getMolarVolume, getMoleFraction, getNumberOfComponents, getNumberOfIonicComponents, getNumberOfMolecularComponents, getNumberOfMolesInPhase, getOsmoticCoefficient, getOsmoticCoefficientOfWater, getOsmoticCoefficientOfWaterMolality, getpH, getpH, getPhase, getPhaseFraction, getPhaseTypeName, getPhysicalProperties, getPhysicalPropertyModel, getPressure, getPressure, getProperties_EOSCG, getProperties_GERG2008, getProperties_Leachman, getProperties_Leachman, getProperties_Vega, getPseudoCriticalPressure, getPseudoCriticalTemperature, getPureComponentFugacity, getPureComponentFugacity, getRefPhase, getRefPhase, getSoundSpeed, getSoundSpeed, getSresTP, getTemperature, getTemperature, getThermalConductivity, getThermalConductivity, getTotalVolume, getType, getViscosity, getViscosity, getVolume, getVolume, getWaterDensity, getWtFrac, getWtFrac, getWtFraction, getWtFractionOfWaxFormingComponents, getZ, getZvolcorr, gV, gVV, hasComponent, hasComponent, hasPlusFraction, hasTBPFraction, init, init, initPhysicalProperties, initPhysicalProperties, initPhysicalProperties, initRefPhases, isAsphalteneRich, isConstantPhaseVolume, isMixingRuleDefined, normalize, removeComponent, resetMixingRule, resetPhysicalProperties, setAttractiveTerm, setBeta, setComponentArray, setConstantPhaseVolume, setEmptyFluid, setInitType, setMixingRule, setMixingRuleGEModel, setMolarVolume, setMoleFractions, setNumberOfComponents, setParams, setPhaseTypeName, setPhysicalProperties, setPhysicalProperties, setPhysicalPropertyModel, setPpm, setPressure, setProperties, setRefPhase, setRefPhase, setTemperature, setTotalVolume, setType, useVolumeCorrection, useVolumeCorrection
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
private static final org.apache.logging.log4j.Logger loggerLogger object for class. -
VACUUM_PERMITTIVITY
private static final double VACUUM_PERMITTIVITYVacuum permittivity [F/m] = [C²/(J·m)].- See Also:
-
ELECTRON_CHARGE
private static final double ELECTRON_CHARGEElementary charge [C].- See Also:
-
AVOGADRO
private static final double AVOGADROAvogadro's number [1/mol].- See Also:
-
BOLTZMANN
private static final double BOLTZMANNBoltzmann constant [J/K].- See Also:
-
solventPermittivity
protected double solventPermittivitySolvent static permittivity (dielectric constant) [-]. -
solventPermittivitydT
protected double solventPermittivitydTTemperature derivative of solvent permittivity [1/K]. -
solventPermittivitydTdT
protected double solventPermittivitydTdTSecond temperature derivative of solvent permittivity [1/K²]. -
mixturePermittivity
protected double mixturePermittivityMixture dielectric constant including ion contributions [-]. -
kappa
protected double kappaDebye screening length inverse (kappa) [1/m]. -
kappadT
protected double kappadTTemperature derivative of kappa [1/(m·K)]. -
bornX
protected double bornXBorn X factor: Σ(n_i * z_i² / R_Born,i) [mol/m]. -
ionSolventW
protected double ionSolventWIon-solvent short-range interaction parameter W [J/mol]. Calculated from wij mixing rule parameters which are populated from ΔU_iw values. -
ionSolventWdT
protected double ionSolventWdTTemperature derivative of W [J/(mol·K)]. -
packingFraction
protected double packingFractionPacking fraction η = (π N_A / 6V) Σ n_i σ_i³ [-]. -
packingFractiondV
protected double packingFractiondVVolume derivative of packing fraction [1/m³]. -
wij
protected double[][] wijIon-solvent binary interaction parameters wij. These are populated from the ΔU_iw parameters from Maribo-Mogensen thesis Table 6.11. Format: wij[i][j] where i is ion index and j is solvent index. Units: Kelvin (energy/R). -
wijT
protected double[][] wijTTemperature derivatives of ion-solvent wij parameters. wijT[i][j] = d(wij)/dT. Units: K/K (dimensionless). -
debyeHuckelOn
protected boolean debyeHuckelOnFlag to enable/disable Debye-Hückel term. -
bornOn
protected boolean bornOnFlag to enable/disable Born term. -
shortRangeOn
protected boolean shortRangeOnFlag to enable/disable short-range ion-solvent term. Disabled by default - the current implementation needs further development to properly scale the ΔU_iw parameters from Maribo-Mogensen Table 6.11. The short-range contribution is intended to balance the Born solvation term but requires careful parameter fitting with the other electrolyte terms. Enable this via setShortRangeOn(true) for experimental testing. -
dielectricMixingRule
Current dielectric mixing rule.
-
-
Constructor Details
-
PhaseElectrolyteCPAMM
public PhaseElectrolyteCPAMM()Constructor for PhaseElectrolyteCPAMM.
-
-
Method Details
-
init
public void init(double totalNumberOfMoles, int numberOfComponents, int initType, PhaseType pt, double beta) init.
initType used in component.init()
Calls component.init(initType)
- Specified by:
initin interfacePhaseInterface- Overrides:
initin classPhaseSrkCPA- Parameters:
totalNumberOfMoles- Total number of moles in all phases of Stream.numberOfComponents- Number of components in system.initType- a int. Use 0 to init, and 1 to reset.pt- Type of phase.beta- Mole fraction of this phase in system.
-
clone
clone.
- Specified by:
clonein interfacePhaseInterface- Overrides:
clonein classPhaseSrkCPA- Returns:
- a
PhaseInterfaceobject
-
addComponent
Add component to component array and update moles variables.
- Specified by:
addComponentin interfacePhaseInterface- Overrides:
addComponentin classPhaseSrkCPA- Parameters:
name- Name of component.moles- Total number of moles of component.molesInPhase- Number of moles in phase.compNumber- Index number of component in phase object component array.
-
initElectrolyteProperties
public void initElectrolyteProperties()Initialize volume-dependent electrolyte properties. Called during molar volume iteration. -
initMixingRuleWij
public void initMixingRuleWij()Initialize the ion-solvent wij mixing rule parameters from component ΔU_iw values.Following the Maribo-Mogensen thesis, the ion-solvent short-range interaction is parameterized as: ΔU_iw(T) = u⁰_iw + uᵀ_iw × (T - 298.15)
These are stored in the wij/wijT arrays which follow the standard mixing rule convention. The W parameter used in the short-range Helmholtz term is then calculated as: W = Σ_i Σ_j (n_i × n_j × wij(T)) for ion i and solvent j.
-
getWij
public double getWij(int i, int j) Get the ion-solvent interaction parameter wij at current temperature.- Parameters:
i- first component indexj- second component index- Returns:
- wij value [K]
-
getWijT
public double getWijT(int i, int j) Get the temperature derivative of ion-solvent interaction parameter wij.- Parameters:
i- first component indexj- second component index- Returns:
- dwij/dT [K/K]
-
setDielectricMixingRule
Set the dielectric constant mixing rule.- Parameters:
rule- the mixing rule to use
-
getDielectricMixingRule
Get the current dielectric constant mixing rule.- Returns:
- the current mixing rule
-
calcSolventPermittivity
public double calcSolventPermittivity(double T) Calculate solvent static permittivity using the selected mixing rule.This method dispatches to the appropriate mixing rule implementation based on the
dielectricMixingRulesetting.- Parameters:
T- temperature [K]- Returns:
- solvent permittivity [-]
-
calcSolventPermittivityMolarAvg
private double calcSolventPermittivityMolarAvg(double T) Calculate solvent permittivity using molar average mixing rule.ε_mix = Σ(x_i × ε_i) / Σ(x_i)
- Parameters:
T- temperature [K]- Returns:
- solvent permittivity [-]
-
calcSolventPermittivityVolumeAvg
private double calcSolventPermittivityVolumeAvg(double T) Calculate solvent permittivity using volume average mixing rule.ε_mix = Σ(φ_i × ε_i) where φ_i = (n_i × V_i) / Σ(n_j × V_j) is the volume fraction
This gives better accuracy for water-glycol mixtures (2.4% avg error vs 4.2% for molar average) based on Ma et al. (2010) data.
- Parameters:
T- temperature [K]- Returns:
- solvent permittivity [-]
-
calcSolventPermittivityLooyenga
private double calcSolventPermittivityLooyenga(double T) Calculate solvent permittivity using Looyenga mixing rule.ε_mix^(1/3) = Σ(φ_i × ε_i^(1/3))
The Looyenga equation has theoretical basis for polar molecule mixtures and works well for water-organic systems.
- Parameters:
T- temperature [K]- Returns:
- solvent permittivity [-]
-
calcSolventPermittivityOster
private double calcSolventPermittivityOster(double T) Calculate solvent permittivity using Oster mixing rule.The Oster equation is specifically designed for water-alcohol mixtures. It accounts for the non-ideal mixing behavior of polar solvents.
ε_mix = ε₁×φ₁ + ε₂×φ₂ + k×φ₁×φ₂×(ε₁ - ε₂)
where k is an interaction parameter (typically -0.2 to -0.5 for water-alcohol).
- Parameters:
T- temperature [K]- Returns:
- solvent permittivity [-]
-
calcSolventPermittivityLichtenecker
private double calcSolventPermittivityLichtenecker(double T) Calculate solvent permittivity using Lichtenecker-Rother mixing rule.ln(ε_mix) = Σ(φ_i × ln(ε_i))
This is equivalent to: ε_mix = ε₁^φ₁ × ε₂^φ₂ × ...
- Parameters:
T- temperature [K]- Returns:
- solvent permittivity [-]
-
calcSolventPermittivitydT
public double calcSolventPermittivitydT(double T) Calculate temperature derivative of solvent permittivity using the selected mixing rule.- Parameters:
T- temperature [K]- Returns:
- dε/dT [1/K]
-
calcSolventPermittivitydTMolarAvg
private double calcSolventPermittivitydTMolarAvg(double T) Molar average temperature derivative.- Parameters:
T- temperature [K]- Returns:
- dε/dT [1/K]
-
calcSolventPermittivitydTVolumeAvg
private double calcSolventPermittivitydTVolumeAvg(double T) Volume average temperature derivative.- Parameters:
T- temperature [K]- Returns:
- dε/dT [1/K]
-
calcSolventPermittivitydTLooyenga
private double calcSolventPermittivitydTLooyenga(double T) Looyenga temperature derivative.d(ε^(1/3))/dT = Σ(φ_i × (1/3) × ε_i^(-2/3) × dε_i/dT) dε/dT = 3 × ε^(2/3) × d(ε^(1/3))/dT
- Parameters:
T- temperature [K]- Returns:
- dε/dT [1/K]
-
calcSolventPermittivitydTLichtenecker
private double calcSolventPermittivitydTLichtenecker(double T) Lichtenecker temperature derivative.d(ln ε)/dT = Σ(φ_i × (1/ε_i) × dε_i/dT) dε/dT = ε × d(ln ε)/dT
- Parameters:
T- temperature [K]- Returns:
- dε/dT [1/K]
-
calcSolventPermittivitydTOster
private double calcSolventPermittivitydTOster(double T) Oster temperature derivative.- Parameters:
T- temperature [K]- Returns:
- dε/dT [1/K]
-
calcSolventPermittivitydTdT
public double calcSolventPermittivitydTdT(double T) Calculate second temperature derivative of solvent permittivity.Currently only implemented for molar average. Other mixing rules use an approximate second derivative based on the molar average.
- Parameters:
T- temperature [K]- Returns:
- d²ε/dT² [1/K²]
-
calcSolventPermittivitydn
public double calcSolventPermittivitydn(int k, double T) Calculate composition derivative of solvent permittivity for component k.For molar average: dε/dn_k = (ε_k - ε_mix) / n_solvent
- Parameters:
k- component indexT- temperature [K]- Returns:
- dε/dn_k [-]
-
calcSolventPermittivitydnMolarAvg
private double calcSolventPermittivitydnMolarAvg(int k, double T) Molar average composition derivative.ε = Σ(n_i × ε_i) / Σ(n_i) dε/dn_k = (ε_k - ε) / n_solvent
- Parameters:
k- component indexT- temperature [K]- Returns:
- dε/dn_k [-]
-
calcSolventPermittivitydnVolumeAvg
private double calcSolventPermittivitydnVolumeAvg(int k, double T) Volume average composition derivative.ε = Σ(φ_i × ε_i) where φ_i = (n_i × V_i) / Σ(n_j × V_j) dε/dn_k = V_k × (ε_k - ε) / Σ(n_j × V_j)
- Parameters:
k- component indexT- temperature [K]- Returns:
- dε/dn_k [-]
-
calcSolventPermittivitydnLooyenga
private double calcSolventPermittivitydnLooyenga(int k, double T) Looyenga composition derivative.ε^(1/3) = Σ(φ_i × ε_i^(1/3)) d(ε^(1/3))/dn_k = V_k × (ε_k^(1/3) - ε^(1/3)) / Σ(n_j × V_j) dε/dn_k = 3 × ε^(2/3) × d(ε^(1/3))/dn_k
- Parameters:
k- component indexT- temperature [K]- Returns:
- dε/dn_k [-]
-
calcSolventPermittivitydnLichtenecker
private double calcSolventPermittivitydnLichtenecker(int k, double T) Lichtenecker composition derivative.ln(ε) = Σ(φ_i × ln(ε_i)) d(ln ε)/dn_k = V_k × (ln(ε_k) - ln(ε)) / Σ(n_j × V_j) dε/dn_k = ε × d(ln ε)/dn_k
- Parameters:
k- component indexT- temperature [K]- Returns:
- dε/dn_k [-]
-
calcSolventPermittivitydndT
public double calcSolventPermittivitydndT(int k, double T) Calculate mixed composition-temperature derivative of solvent permittivity.- Parameters:
k- component indexT- temperature [K]- Returns:
- d²ε/(dn_k dT) [-/K]
-
calcSolventPermittivitydndn
public double calcSolventPermittivitydndn(int k, int l, double T) Calculate second composition derivative of solvent permittivity.For molar average: ε = Σ(n_i × ε_i) / Σ(n_i) dε/dn_k = (ε_k - ε) / n_solvent d²ε/(dn_k dn_l) = -dε/dn_k / n_solvent - dε/dn_l / n_solvent = -(ε_k - ε)/n_solvent² - (ε_l - ε)/n_solvent² = (2ε - ε_k - ε_l) / n_solvent²- Parameters:
k- first component indexl- second component indexT- temperature [K]- Returns:
- d²ε/(dn_k dn_l) [-]
-
calcMixturePermittivity
public double calcMixturePermittivity()Calculate mixture permittivity including ion effects. Following Maribo-Mogensen Eq. 5.27: ε = ε_solvent * (1 - η_ion) / (1 + η_ion/2) where η_ion is the ionic packing fraction.- Returns:
- mixture permittivity [-]
-
calcIonicPackingFraction
public double calcIonicPackingFraction()Calculate ionic packing fraction. η_ion = (π/6V) * Σ(n_i * σ_i³) for ionic species only- Returns:
- ionic packing fraction [-]
-
calcKappa
public double calcKappa()Calculate Debye screening parameter kappa. From Maribo-Mogensen Eq. 4.14:κ² = (e² / (ε₀ε_r k_B T)) * Σ(ρ_i * z_i²)
where ρ_i is number density [1/m³].- Returns:
- kappa [1/m]
-
calcKappadT
public double calcKappadT()Calculate temperature derivative of kappa.- Returns:
- dκ/dT [1/(m·K)]
-
calcBornX
public double calcBornX()Calculate Born solvation factor X_Born. X_Born = Σ(n_i * z_i² / R_Born,i)Born radius correlations from Maribo-Mogensen Table 6.6:
- Cations: R_Born = 0.5*σ + 0.1 Å
- Anions: R_Born = 0.5*σ + 0.85 Å
- Returns:
- X_Born [mol/m]
-
calcBornRadius
public double calcBornRadius(double sigma, int charge) Calculate Born radius using Maribo-Mogensen empirical correlations.- Parameters:
sigma- Lennard-Jones diameter [m]charge- ionic charge (sign indicates cation/anion)- Returns:
- Born radius [m]
-
calcPackingFraction
public double calcPackingFraction()Calculate packing fraction (reduced density) η.The packing fraction is defined as:
η = (π N_A / 6V) × Σ n_i σ_i³
This is used in the short-range term following the Furst electrolyte model.
- Returns:
- packing fraction η [-]
-
calcPackingFractiondV
public double calcPackingFractiondV()Calculate volume derivative of packing fraction.dη/dV = -η/V
- Returns:
- dη/dV [1/m³]
-
getPackingFraction
public double getPackingFraction()Get the packing fraction.- Returns:
- packing fraction η [-]
-
getPackingFractiondV
public double getPackingFractiondV()Get the volume derivative of packing fraction.- Returns:
- dη/dV [1/m³]
-
calcIonSolventW
public double calcIonSolventW()Calculate ion-solvent short-range interaction parameter W using wij mixing rule parameters.Following the standard mixing rule convention, W is calculated as:
W = Σ_i Σ_j (n_i × n_j × wij(T) × R / V)
where wij contains the ΔU_iw values from Maribo-Mogensen thesis Table 6.11, populated via
initMixingRuleWij().- Returns:
- W [J/mol]
-
calcIonSolventWdT
public double calcIonSolventWdT()Calculate temperature derivative of W using wijT mixing rule parameters.- Returns:
- dW/dT [J/(mol·K)]
-
FDebyeHuckel
public double FDebyeHuckel()Debye-Hückel contribution to Helmholtz free energy (extensive). From Maribo-Mogensen Eq. 4.19, the intensive form is:A^DH / (V k_B T) = -κ³ / (12π)
Converting to extensive F = A/(RT):A^DH = -κ³ V k_B T / (12π) F^DH = A^DH / (RT) = -κ³ V k_B / (12π R) = -κ³ V / (12π N_A)
where V is the total volume [m³]. This is extensive (scales with n).- Returns:
- F^DH contribution to Helmholtz energy [-]
-
dFDebyeHuckeldT
public double dFDebyeHuckeldT()Temperature derivative of Debye-Hückel term at constant V. dF^DH/dTF^DH = -κ³V/(12π N_A), so dF^DH/dT = -V/(12π N_A) * dκ³/dT
- Returns:
- dF^DH/dT [-/K]
-
dFDebyeHuckeldV
public double dFDebyeHuckeldV()Volume derivative of Debye-Hückel term. dF^DH/dV = ∂F^DH/∂VF^DH = -κ³V/(12π N_A), so dF/dV = -κ³/(12π N_A)
- Returns:
- dF^DH/dV [1/m³]
-
FBorn
public double FBorn()Born solvation contribution to Helmholtz free energy (extensive). From Maribo-Mogensen Eq. 4.23, converted to extensive form:F^Born = (N_A * e² / (8π * ε₀ * R * T)) * (1/ε_r - 1) * X_Born
where X_Born = Σ(n_i * z_i² / R_Born,i). This is extensive (scales with n).- Returns:
- F^Born contribution [-]
-
dFBorndT
public double dFBorndT()Temperature derivative of Born term. dF^Born/dT- Returns:
- dF^Born/dT [-/K]
-
dFBorndV
public double dFBorndV()Volume derivative of Born term. dF^Born/dV (Born term is almost independent of V)- Returns:
- dF^Born/dV [1/m³]
-
FBornD
public double FBornD()Derivative of Born term with respect to dielectric constant.F^Born = prefactor * (1/ε - 1) * X_Born ∂F^Born/∂ε = prefactor * (-1/ε²) * X_Born
This is used for the composition derivative via chain rule: dF^Born/dn_i includes (∂F^Born/∂ε) * (∂ε/∂n_i).- Returns:
- ∂F^Born/∂ε [-]
-
FBornX
public double FBornX()Derivative of Born term with respect to X_Born.F^Born = prefactor * (1/ε - 1) * X_Born ∂F^Born/∂X_Born = prefactor * (1/ε - 1)
- Returns:
- ∂F^Born/∂X_Born [-]
-
FBornDD
public double FBornDD()Second derivative of Born term with respect to dielectric constant.∂²F^Born/∂ε² = prefactor * 2 * X_Born / ε³
- Returns:
- ∂²F^Born/∂ε² [-]
-
FBornDX
public double FBornDX()Mixed derivative of Born term with respect to dielectric constant and X_Born.∂²F^Born/(∂ε ∂X_Born) = prefactor * (-1/ε²)
- Returns:
- ∂²F^Born/(∂ε ∂X_Born) [-]
-
FShortRange
public double FShortRange()Short-range ion-solvent contribution to Helmholtz free energy.Following the NRTL/Huron-Vidal framework used by Maribo-Mogensen, the short-range term is:
F^SR = (1/n_T) × Σ_i Σ_j (n_i × n_j × τ_ij)
where τ_ij = ΔU_ij / T and ΔU_ij are the wij parameters from MM thesis (in Kelvin = energy/R).
Including the packing fraction correction from Furst:
F^SR = W / (n_T × T × (1 - η))
where W = Σ_i Σ_j (n_i × n_j × wij) with wij in Kelvin.
- Returns:
- F^SR contribution [-]
-
dFShortRangedT
public double dFShortRangedT()Temperature derivative of short-range term.dF^SR/dT = dW/dT / (n_T × T × (1 - η)) - W / (n_T × T² × (1 - η))
- Returns:
- dF^SR/dT [-/K]
-
dFShortRangedV
public double dFShortRangedV()Volume derivative of short-range term.dF^SR/dV = W × dη/dV / (n_T × T × (1 - η)²)
Note: W itself doesn't depend on V in this formulation.
- Returns:
- dF^SR/dV [1/m³]
-
dFShortRangedVdV
public double dFShortRangedVdV()Second volume derivative of short-range term.- Returns:
- d²F^SR/dV² [1/m⁶]
-
dFShortRangedVdVdV
public double dFShortRangedVdVdV()Third volume derivative of short-range term.- Returns:
- d³F^SR/dV³ [1/m⁹]
-
dFShortRangedTdT
public double dFShortRangedTdT()Second temperature derivative of short-range term.- Returns:
- d²F^SR/dT² [-/K²]
-
dFShortRangedTdV
public double dFShortRangedTdV()Mixed temperature-volume derivative of short-range term.- Returns:
- d²F^SR/dTdV [1/(m³·K)]
-
dFDebyeHuckeldVdV
public double dFDebyeHuckeldVdV()Second volume derivative of Debye-Hückel term. d²F^DH/dV²- Returns:
- d²F^DH/dV² [1/m⁶]
-
dFDebyeHuckeldVdVdV
public double dFDebyeHuckeldVdVdV()Third volume derivative of Debye-Hückel term. d³F^DH/dV³- Returns:
- d³F^DH/dV³ [1/m⁹]
-
dFDebyeHuckeldTdT
public double dFDebyeHuckeldTdT()Second temperature derivative of Debye-Hückel term. d²F^DH/dT²- Returns:
- d²F^DH/dT² [-/K²]
-
dFDebyeHuckeldTdV
public double dFDebyeHuckeldTdV()Mixed temperature-volume derivative of Debye-Hückel term. d²F^DH/dTdV- Returns:
- d²F^DH/dTdV [1/(m³·K)]
-
dFBorndTdT
public double dFBorndTdT()Second temperature derivative of Born term. d²F^Born/dT²- Returns:
- d²F^Born/dT² [-/K²]
-
getF
-
dFdT
public double dFdT()Calculate derivative of F per Temperature, i.e., dF/dT.
- Specified by:
dFdTin interfacePhaseInterface- Overrides:
dFdTin classPhaseSrkCPA- Returns:
- a double
-
dFdV
public double dFdV()Calculate derivative of F per Volume, i.e., dF/dV.
- Specified by:
dFdVin interfacePhaseInterface- Overrides:
dFdVin classPhaseSrkCPA- Returns:
- a double
-
dFdVdV
public double dFdVdV()dFdVdV.
- Specified by:
dFdVdVin interfacePhaseInterface- Overrides:
dFdVdVin classPhaseSrkCPA- Returns:
- a double
-
dFdVdVdV
-
dFdTdT
public double dFdTdT()dFdTdT.
- Specified by:
dFdTdTin interfacePhaseInterface- Overrides:
dFdTdTin classPhaseSrkCPA- Returns:
- a double
-
dFdTdV
public double dFdTdV()Calculate derivative of F per Temperature and Volume, i.e., dF/dT * 1/dV.
- Specified by:
dFdTdVin interfacePhaseInterface- Overrides:
dFdTdVin classPhaseSrkCPA- Returns:
- a double
-
getSolventPermittivity
public double getSolventPermittivity()Get solvent permittivity.- Returns:
- solvent permittivity [-]
-
getSolventPermittivitydT
public double getSolventPermittivitydT()Get temperature derivative of solvent permittivity.- Returns:
- d(solvent permittivity)/dT [1/K]
-
getMixturePermittivity
public double getMixturePermittivity()Get mixture permittivity.- Returns:
- mixture permittivity [-]
-
getKappa
public double getKappa()Get Debye screening parameter.- Specified by:
getKappain interfacePhaseInterface- Overrides:
getKappain classPhaseEos- Returns:
- kappa [1/m]
-
getDebyeLength
public double getDebyeLength()Get Debye screening length.- Returns:
- 1/kappa [m]
-
getBornX
public double getBornX()Get the Born X parameter (sum of z_i²/R_Born,i for all ions).- Returns:
- Born X parameter [1/m]
-
getIonSolventW
public double getIonSolventW()Get the ion-solvent interaction parameter W.- Returns:
- W parameter [J/mol]
-
FDebyeHuckelX
public double FDebyeHuckelX()Partial derivative of F^DH with respect to X_DH = Σ(n_i z_i²). F^DH = -κ³V/(12πRTn_T), where κ² ∝ X_DH- Returns:
- ∂F^DH/∂X_DH
-
calcIonicStrengthSum
public double calcIonicStrengthSum()Calculate ionic strength sum X_DH = Σ(n_i z_i²).- Returns:
- ionic strength sum [mol]
-
FDebyeHuckelN
public double FDebyeHuckelN()Partial derivative of F^DH with respect to n_T (at constant κ).- Returns:
- ∂F^DH/∂n_T at constant κ
-
FBornN
public double FBornN()Partial derivative of F^Born with respect to n_T (at constant X_Born).- Returns:
- ∂F^Born/∂n_T at constant X_Born
-
FBornXT
public double FBornXT()Temperature derivative of FBornX.- Returns:
- ∂²F^Born/(∂X_Born ∂T)
-
setDebyeHuckelOn
public void setDebyeHuckelOn(boolean on) Enable or disable Debye-Hückel term.- Parameters:
on- true to enable
-
setBornOn
public void setBornOn(boolean on) Enable or disable Born term.- Parameters:
on- true to enable
-
setShortRangeOn
public void setShortRangeOn(boolean on) Enable or disable short-range ion-solvent term.- Parameters:
on- true to enable
-
isShortRangeOn
public boolean isShortRangeOn()Check if short-range ion-solvent term is enabled.- Returns:
- true if short-range term is enabled
-