Skip to content

Soave-Redlich-Kwong (SRK)

Soave-Redlich-Kwong cubic equation of state (1972) with the van der Waals one-fluid mixing rules and binary interaction parameters kij from the databank. For gases, hydrocarbons and gas processing.

DWSIM.Thermodynamics.PropertyPackages.SRKPropertyPackage
Assembly DWSIM.Thermodynamics.dll · Object ← PropertyPackage ← SRKPropertyPackage
Name in the flowsheet Soave-Redlich-Kwong (SRK) · FluentAPI PropertyPackages.SoaveRedlichKwong

Scope

A cubic equation of state for gases, hydrocarbons and gas processing: natural gas, LPG, refinery gases, compression, and vapor-liquid equilibrium of nonpolar mixtures from low to high pressure. Like Peng-Robinson, it gives the fugacity coefficients of both phases from one equation.

The Soave-Redlich-Kwong (1972) equation is P = RT/(V - b) - a(T)/[V(V + b)], with b = 0.08664 RTc/Pc and a = 0.42747 (R2Tc2/Pc) α(T), α = [1 + m(1 - Tr1/2)]2, m = 0.48 + 1.574ω - 0.176ω2. Mixtures use the van der Waals one-fluid rules with binary interaction parameters kij. The liquid takes the smallest root of the cubic in Z and the vapor the largest. Enthalpy and entropy are the ideal-gas values plus the departure functions of the equation.

Parameters. Tc, Pc and ω come from the compound database; the kij come from an SRK databank shipped with DWSIM (a separate table from the Peng-Robinson one). A pair without a value has kij = 0. The values can be edited in the package editor, or set from code with ConfigureSRK(c => c.WithKij(...)), and are saved with the flowsheet.

Liquid density. By default from the experimental data of the compound or the Rackett equation; the equation-of-state density with the Peneloux volume translation is an option of the package settings.

Derivatives. Analytical temperature and composition derivatives of the fugacity coefficients are available to the vapor-fraction flashes and the rigorous column solvers.

Limitations

  • Liquid volumes from the equation itself are poor, as for every two-parameter cubic; keep the default liquid density method unless the volume translation is wanted.
  • Polar and associating liquids (water, alcohols, glycols) are outside the model; see NRTL, UNIQUAC or the CPA models of ThermoPack.
  • A missing kij is zero; propane with n-butane, the pair of the example, has kij = 0 in the saved configuration below. Check the pairs with CO2, H2S, N2 and H2.
  • A stream with a single compound (mole fraction above 0.99999) is flashed on the vapor pressure curve of the compound database.

Example

This code runs on every build of this site, and the output below is what it printed.

fs = (Flowsheet.Create("SRKExample")
      .WithCompounds("Propane", "N-butane")
      .WithPropertyPackage(PropertyPackages.SoaveRedlichKwong))

# temperature and vapor fraction given: the flash finds the pressure
bubble = (fs.AddMaterialStream("Bubble point")
          .WithTemperature(Q.Celsius(25.0)).WithVaporFraction(0.0)
          .SetCompoundMolarFlow("Propane", 0.6)
          .SetCompoundMolarFlow("N-butane", 0.4))
dew = (fs.AddMaterialStream("Dew point")
       .WithTemperature(Q.Celsius(25.0)).WithVaporFraction(1.0)
       .SetCompoundMolarFlow("Propane", 0.6)
       .SetCompoundMolarFlow("N-butane", 0.4))

fs.Solve()

b, d = bubble.Object, dew.Object
print(f"Bubble pressure      = {b.GetPressure() / 1e5:.3f} bar")
print(f"Propane in vapor     = {b.Phases[2].Compounds['Propane'].MoleFraction:.4f} (first bubble, mole fraction)")
print(f"Dew pressure         = {d.GetPressure() / 1e5:.3f} bar")
print(f"Vapor density        = {d.Phases[2].Properties.density:.2f} kg/m3 (Z = {d.Phases[2].Properties.compressibilityFactor:.4f})")
print(f"Liquid density       = {b.Phases[3].Properties.density:.1f} kg/m3")

Output

Bubble pressure      = 6.557 bar
Propane in vapor     = 0.8293 (first bubble, mole fraction)
Dew pressure         = 4.506 bar
Vapor density        = 9.98 kg/m3 (Z = 0.9051)
Liquid density       = 527.8 kg/m3

DWSIM 10.2.11.0, generated 2026-10-08.

Property methods

How the package calculates each property, as it reports it in PropertyMethodsInfo (the property package editor shows the same list).

Property Method
Vapor fugacity Soave-Redlich-Kwong EOS
Liquid fugacity Soave-Redlich-Kwong EOS
Vapor enthalpy, entropy, Cp/Cv Soave-Redlich-Kwong EOS
Liquid enthalpy, entropy, Cp/Cv Soave-Redlich-Kwong EOS
Vapor density Soave-Redlich-Kwong EOS
Liquid density Soave-Redlich-Kwong EOS (+VT) / Experimental / Rackett / COSTALD
Vapor viscosity Experimental / Lucas / Jossi-Stiel-Thodos
Liquid viscosity Experimental / Letsou-Stiel
Vapor thermal conductivity Experimental / Ely-Hanley
Liquid thermal conductivity Experimental / Latini
Surface tension Experimental / Brock-Bird
Solid density Experimental Data / User-Defined
Solid enthalpy, entropy, Cp/Cv Experimental Solid Cp / From Liquid Phase Enthalpy + Enthalpy of Fusion

Default flash algorithm: Universal.

Configuration saved with the flowsheet

The package writes its settings to the simulation file (SaveData) and reads them back on load (LoadData). The elements below are the ones this package adds to those of every property package, as written for the example.

Element Content in the example What it holds
InteractionParameters 1 InteractionParameter entry (Compound1, Compound2, Value) kij (Value) of the pairs of the flowsheet compounds, from the databank or entered in the package editor
First InteractionParameter of InteractionParameters in the example
<InteractionParameter Compound1="Propane" Compound2="N-butane" Value="0" />
Settings common to every property package, as saved for the example
Element Value
Type DWSIM.Thermodynamics.PropertyPackages.SRKPropertyPackage
ComponentName Soave-Redlich-Kwong (SRK)
ComponentDescription
Tag Soave-Redlich-Kwong (SRK)
UseHenryConstants true
AutoEstimateMissingNRTLUNIQUACParameters true
UseImmiscibleListForLiquid2InitialEstimates true
SingleCompoundCheckThreshold 0.99999
OverrideKvalFugCoeff false
OverrideEnthalpyCalculation false
OverrideEntropyCalculation false
LiquidDensityCalculationMode_Subcritical Rackett_and_ExpData
LiquidDensityCalculationMode_Supercritical Rackett_and_ExpData
LiquidDensity_CorrectExpDataForPressure true
LiquidDensity_UsePenelouxVolumeTranslation true
LiquidViscosityCalculationMode_Subcritical ExpData
LiquidViscosityCalculationMode_Supercritical Letsou_Stiel
LiquidViscosity_CorrectExpDataForPressure true
LiquidViscosity_MixingRule MoleAverage
VaporPhaseFugacityCalculationMode Ideal
SolidPhaseFugacityCalculationMethod FromLiquidFugacity
SolidPhaseFugacity_UseIdealLiquidPhaseFugacity false
SolidPhaseEnthalpy_UsesCp false
EnthalpyEntropyCpCvCalculationMode LeeKesler
LiquidEnthalpyEntropyCpCvCalculationMode_EOS EOS
LiquidFugacity_UsePoyntingCorrectionFactor true
ActivityCoefficientModels_IgnoreMissingInteractionParameters false
IgnoreVaporFractionLimit false
IgnoreSalinityLimit false
CalculateAdditionalMaterialStreamProperties true
FlashCalculationApproach NestedLoops
DisplayMissingCompoundPropertiesWarning false
ForcedSolids []
PropertyOverrides {}
FlashSettings 36 Setting entries

Learn more

API members

Public members declared by this class. Inherited members are documented on the base classes.

Constructors

SRKPropertyPackage()
public SRKPropertyPackage()
Public Sub New()

SRKPropertyPackage(bool)
Parameter Type Description
comode Boolean
public SRKPropertyPackage(bool comode)
Public Sub New(comode As Boolean)

Properties

DisplayDescription
public override string DisplayDescription { get; }
Public Overrides ReadOnly Property DisplayDescription As String

DisplayName
public override string DisplayName { get; }
Public Overrides ReadOnly Property DisplayName As String

ImplementsAnalyticalDerivatives
public override bool ImplementsAnalyticalDerivatives { get; }
Public Overrides ReadOnly Property ImplementsAnalyticalDerivatives As Boolean

MobileCompatible
public override bool MobileCompatible { get; }
Public Overrides ReadOnly Property MobileCompatible As Boolean

Popular
public override bool Popular { get; }
Public Overrides ReadOnly Property Popular As Boolean

Methods

AUX_CM(object)
Parameter Type Description
Vx Object
public double AUX_CM(object Vx)
Public Function AUX_CM(Vx As Object) As Double

AUX_CM(Phase)
Parameter Type Description
Phase Phase
public double AUX_CM(Phase Phase)
Public Function AUX_CM(Phase As Phase) As Double

AUX_VAPDENS(double, double)
Parameter Type Description
T Double
P Double
public override double AUX_VAPDENS(double T, double P)
Public Overrides Function AUX_VAPDENS(T As Double, P As Double) As Double

AUX_Z(double[], double, double, PhaseName)
Parameter Type Description
Vx Double[]
T Double
P Double
state PhaseName
public override double AUX_Z(double[] Vx, double T, double P, PhaseName state)
Public Overrides Function AUX_Z(Vx As Double(), T As Double, P As Double, state As PhaseName) As Double

CalcIsothermalCompressibility(IPhase)
Parameter Type Description
p IPhase
public override double CalcIsothermalCompressibility(IPhase p)
Public Overrides Function CalcIsothermalCompressibility(p As IPhase) As Double

CalcJouleThomsonCoefficient(IPhase)
Parameter Type Description
p IPhase
public override double CalcJouleThomsonCoefficient(IPhase p)
Public Overrides Function CalcJouleThomsonCoefficient(p As IPhase) As Double

ConfigParameters()
public override void ConfigParameters()
Public Overrides Sub ConfigParameters()

DisplayEditingForm()
public override void DisplayEditingForm()
Public Overrides Sub DisplayEditingForm()

DW_CalcCompPartialVolume(Phase, double, double)
Parameter Type Description
phase Phase
T Double
P Double
public override void DW_CalcCompPartialVolume(Phase phase, double T, double P)
Public Overrides Sub DW_CalcCompPartialVolume(phase As Phase, T As Double, P As Double)

DW_CalcCp_ISOL(Phase, double, double)
Parameter Type Description
Phase1 Phase
T Double
P Double
public override double DW_CalcCp_ISOL(Phase Phase1, double T, double P)
Public Overrides Function DW_CalcCp_ISOL(Phase1 As Phase, T As Double, P As Double) As Double

DW_CalcCv_ISOL(Phase, double, double)
Parameter Type Description
Phase1 Phase
T Double
P Double
public override double DW_CalcCv_ISOL(Phase Phase1, double T, double P)
Public Overrides Function DW_CalcCv_ISOL(Phase1 As Phase, T As Double, P As Double) As Double

DW_CalcdKdComposition(double[], double[], double, double, State, string): Composition (mole-number) derivative of the equilibrium K-values, d(K_i)/dn_j, with respect to the mole numbers of...

Composition (mole-number) derivative of the equilibrium K-values, d(K_i)/dn_j, with respect to the mole numbers of the phase indicated by withRespectTo (State.Liquid perturbs Vx, State.Vapor perturbs Vy), on a total-moles = 1 basis. Returns an (nc x nc) matrix. Base implementation is a finite difference; EOS/activity packages override it using the analytical d(ln phi)/dn (or d(ln gamma)/dx) building blocks.

Parameter Type Description
Vx Double[]
Vy Double[]
T Double
P Double
withRespectTo State
type String
public override double[,] DW_CalcdKdComposition(double[] Vx, double[] Vy, double T, double P, State withRespectTo, string type = "LV")
Public Overrides Function DW_CalcdKdComposition(Vx As Double(), Vy As Double(), T As Double, P As Double, withRespectTo As State, type As String = "LV") As Double(,)

DW_CalcdKdT(double[], double[], double, double, string)
Parameter Type Description
Vx Double[]
Vy Double[]
T Double
P Double
type String
public override double[] DW_CalcdKdT(double[] Vx, double[] Vy, double T, double P, string type = "LV")
Public Overrides Function DW_CalcdKdT(Vx As Double(), Vy As Double(), T As Double, P As Double, type As String = "LV") As Double()

DW_CalcdLnFugCoeffdn(double[], double, double, State): Composition (mole-number) derivative of the natural logarithm of the fugacity coefficients, d(ln phi_i)/dn_j, for...

Composition (mole-number) derivative of the natural logarithm of the fugacity coefficients, d(ln phi_i)/dn_j, for the given phase, evaluated on a total-moles = 1 basis. Returns an (nc x nc) matrix. Base implementation is a finite difference in mole numbers; EOS/activity packages override this with the closed-form partial-molar expression.

Parameter Type Description
Vx Double[]
T Double
P Double
st State
public override double[,] DW_CalcdLnFugCoeffdn(double[] Vx, double T, double P, State st)
Public Overrides Function DW_CalcdLnFugCoeffdn(Vx As Double(), T As Double, P As Double, st As State) As Double(,)

DW_CalcdLnFugCoeffdT(double[], double, double, State): Temperature derivative of the natural logarithm of the fugacity coefficients, d(ln phi_i)/dT, for the given phase.

Temperature derivative of the natural logarithm of the fugacity coefficients, d(ln phi_i)/dT, for the given phase. Base implementation is a forward finite difference; EOS/activity packages override this with a closed-form expression. Distinct from DW_CalcdFugCoeffdT, which returns d(phi)/dT (not the logarithm).

Parameter Type Description
Vx Double[]
T Double
P Double
st State
public override double[] DW_CalcdLnFugCoeffdT(double[] Vx, double T, double P, State st)
Public Overrides Function DW_CalcdLnFugCoeffdT(Vx As Double(), T As Double, P As Double, st As State) As Double()

DW_CalcEnergyFlowMistura_ISOL(double, double)
Parameter Type Description
T Double
P Double
public override double DW_CalcEnergyFlowMistura_ISOL(double T, double P)
Public Overrides Function DW_CalcEnergyFlowMistura_ISOL(T As Double, P As Double) As Double

DW_CalcEnthalpy(Array, double, double, State): Calculates the enthalpy of a mixture.

Calculates the enthalpy of a mixture.

Parameter Type Description
Vx Array Vector of doubles containing the molar composition of the mixture.
T Double Temperature (K)
P Double Pressure (Pa)
st State State enum indicating the state of the mixture (liquid or vapor).
public override double DW_CalcEnthalpy(Array Vx, double T, double P, State st)
Public Overrides Function DW_CalcEnthalpy(Vx As Array, T As Double, P As Double, st As State) As Double

DW_CalcEnthalpyDeparture(Array, double, double, State): Calculates the enthalpy departure of a mixture.

Calculates the enthalpy departure of a mixture.

Parameter Type Description
Vx Array Vector of doubles containing the molar composition of the mixture.
T Double Temperature (K)
P Double Pressure (Pa)
st State State enum indicating the state of the mixture (liquid or vapor).
public override double DW_CalcEnthalpyDeparture(Array Vx, double T, double P, State st)
Public Overrides Function DW_CalcEnthalpyDeparture(Vx As Array, T As Double, P As Double, st As State) As Double

DW_CalcEntropy(Array, double, double, State): Calculates the entropy of a mixture.

Calculates the entropy of a mixture.

Parameter Type Description
Vx Array Vector of doubles containing the molar composition of the mixture.
T Double Temperature (K)
P Double Pressure (Pa)
st State State enum indicating the state of the mixture (liquid or vapor).
public override double DW_CalcEntropy(Array Vx, double T, double P, State st)
Public Overrides Function DW_CalcEntropy(Vx As Array, T As Double, P As Double, st As State) As Double

DW_CalcEntropyDeparture(Array, double, double, State): Calculates the entropy departure of a mixture.

Calculates the entropy departure of a mixture.

Parameter Type Description
Vx Array Vector of doubles containing the molar composition of the mixture.
T Double Temperature (K)
P Double Pressure (Pa)
st State State enum indicating the state of the mixture (liquid or vapor).
public override double DW_CalcEntropyDeparture(Array Vx, double T, double P, State st)
Public Overrides Function DW_CalcEntropyDeparture(Vx As Array, T As Double, P As Double, st As State) As Double

DW_CalcFugCoeff(Array, double, double, State): Calculates fugacity coefficients for the specified composition at the specified conditions.

Calculates fugacity coefficients for the specified composition at the specified conditions.

Parameter Type Description
Vx Array Vector of doubles containing the molar composition of the mixture.
T Double Temperature in K
P Double Pressure in Pa
st State Mixture state (Liquid or Vapor)
public override double[] DW_CalcFugCoeff(Array Vx, double T, double P, State st)
Public Overrides Function DW_CalcFugCoeff(Vx As Array, T As Double, P As Double, st As State) As Double()

DW_CalcK_ISOL(Phase, double, double)
Parameter Type Description
Phase1 Phase
T Double
P Double
public override double DW_CalcK_ISOL(Phase Phase1, double T, double P)
Public Overrides Function DW_CalcK_ISOL(Phase1 As Phase, T As Double, P As Double) As Double

DW_CalcMassaEspecifica_ISOL(Phase, double, double, double)
Parameter Type Description
Phase1 Phase
T Double
P Double
pvp Double
public override double DW_CalcMassaEspecifica_ISOL(Phase Phase1, double T, double P, double pvp = 0)
Public Overrides Function DW_CalcMassaEspecifica_ISOL(Phase1 As Phase, T As Double, P As Double, pvp As Double = 0) As Double

DW_CalcMM_ISOL(Phase, double, double)
Parameter Type Description
Phase1 Phase
T Double
P Double
public override double DW_CalcMM_ISOL(Phase Phase1, double T, double P)
Public Overrides Function DW_CalcMM_ISOL(Phase1 As Phase, T As Double, P As Double) As Double

DW_CalcOverallProps()
public override void DW_CalcOverallProps()
Public Overrides Sub DW_CalcOverallProps()

DW_CalcPhaseProps(Phase)
Parameter Type Description
Phase Phase
public override void DW_CalcPhaseProps(Phase Phase)
Public Overrides Sub DW_CalcPhaseProps(Phase As Phase)

DW_CalcProp(string, Phase): Provides a wrapper function for CAPE-OPEN CalcProp/CalcSingleProp functions.

Provides a wrapper function for CAPE-OPEN CalcProp/CalcSingleProp functions.

Parameter Type Description
property String The property to be calculated.
phase Phase The phase where the property must be calculated for.
public override void DW_CalcProp(string property, Phase phase)
Public Overrides Sub DW_CalcProp([property] As String, phase As Phase)

DW_CalcPVAP_ISOL(double)
Parameter Type Description
T Double
public override double DW_CalcPVAP_ISOL(double T)
Public Overrides Function DW_CalcPVAP_ISOL(T As Double) As Double

DW_CalcTensaoSuperficial_ISOL(Phase, double, double)
Parameter Type Description
Phase1 Phase
T Double
P Double
public override double DW_CalcTensaoSuperficial_ISOL(Phase Phase1, double T, double P)
Public Overrides Function DW_CalcTensaoSuperficial_ISOL(Phase1 As Phase, T As Double, P As Double) As Double

DW_CalcViscosidadeDinamica_ISOL(Phase, double, double)
Parameter Type Description
Phase1 Phase
T Double
P Double
public override double DW_CalcViscosidadeDinamica_ISOL(Phase Phase1, double T, double P)
Public Overrides Function DW_CalcViscosidadeDinamica_ISOL(Phase1 As Phase, T As Double, P As Double) As Double

GetModel()
public override object GetModel()
Public Overrides Function GetModel() As Object

IntegralSimpsonCp(double, double, double, string)
Parameter Type Description
a Double
b Double
Epsilon Double
subst String
public double IntegralSimpsonCp(double a, double b, double Epsilon, string subst)
Public Function IntegralSimpsonCp(a As Double, b As Double, Epsilon As Double, subst As String) As Double

IntegralSimpsonCp_T(double, double, double, string)
Parameter Type Description
a Double
b Double
Epsilon Double
subst String
public double IntegralSimpsonCp_T(double a, double b, double Epsilon, string subst)
Public Function IntegralSimpsonCp_T(a As Double, b As Double, Epsilon As Double, subst As String) As Double

RET_KIJ(string, string)
Parameter Type Description
id1 String
id2 String
public double RET_KIJ(string id1, string id2)
Public Function RET_KIJ(id1 As String, id2 As String) As Double

RET_VC()
public double[] RET_VC()
Public Function RET_VC() As Double()

RET_VKij()
public override double[,] RET_VKij()
Public Overrides Function RET_VKij() As Double(,)

RET_VS()
public double[] RET_VS()
Public Function RET_VS() As Double()

ReturnCriticalPoints()
public ArrayList ReturnCriticalPoints()
Public Function ReturnCriticalPoints() As ArrayList

RunPostMaterialStreamSetRoutine()
public override void RunPostMaterialStreamSetRoutine()
Public Overrides Sub RunPostMaterialStreamSetRoutine()

SupportsComponent(ICompoundConstantProperties)
Parameter Type Description
comp ICompoundConstantProperties
public override bool SupportsComponent(ICompoundConstantProperties comp)
Public Overrides Function SupportsComponent(comp As ICompoundConstantProperties) As Boolean

Fields

ClassId
public const string ClassId = "920D043C-F640-4cca-B301-228E773D4E35"
Public Const ClassId As String = "920D043C-F640-4cca-B301-228E773D4E35"

m_pr
public SRK m_pr
Public m_pr As SRK