Peng-Robinson 1978 (PR78)¶
Peng-Robinson cubic equation of state with the 1978 correlation of the alpha function for compounds with acentric factor above 0.491, which improves the vapor pressure of heavy hydrocarbons. Mixing rules and kij databank as in the Peng-Robinson package.
DWSIM.Thermodynamics.PropertyPackages.PengRobinson1978PropertyPackage
Assembly DWSIM.Thermodynamics.dll · Object ← PropertyPackage ← PengRobinson1978PropertyPackage
Name in the flowsheet Peng-Robinson 1978 (PR78) · FluentAPI PropertyPackages.PengRobinson1978
Scope¶
The Peng-Robinson equation of state with the 1978 revision of the alpha function, for mixtures that contain heavy hydrocarbons: crude oil and petroleum fractions, condensates, gas with C10+ ends, refinery columns. For compounds with acentric factor up to 0.491 it is the 1976 equation; above that, the slope of α(T) follows a cubic in ω that was fitted to the vapor pressures of heavy compounds:
- ω ≤ 0.491: m = 0.37464 + 1.54226ω - 0.26992ω2
- ω > 0.491: m = 0.379642 + 1.48503ω - 0.164423ω2 + 0.016666ω3
with a = 0.45724 (R2Tc2/Pc)[1 + m(1 - Tr1/2)]2 and b = 0.07780 RTc/Pc. The mixing rules, the fugacity coefficients, the enthalpy and entropy departures and the root selection are those of the Peng-Robinson package.
The 1976 m(ω) gives too high a vapor pressure for compounds with large acentric factors (alkanes heavier than n-decane, petroleum pseudocomponents), so they come out too volatile and dew points too low. The example shows the effect at 1 atm: with 2 % n-hexadecane (ω = 0.726 in the compound database) or 1 % n-eicosane (ω = 0.907) in methane, PR78 places the dew point 2 to 4 K above Peng-Robinson and within about 1.3 K of the one given by the vapor pressure correlation of the compound database.
Parameters. Tc, Pc and ω from the compound database (for petroleum
pseudocomponents, from the characterization). The kij table is the Peng-Robinson databank; a
missing pair has kij = 0. The values are edited in the package editor or with
ConfigurePR(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.
Limitations¶
- The same as for Peng-Robinson: liquid volumes from the equation itself are poor, polar and associating liquids are outside the model, and missing kij are zero.
- For mixtures of light compounds only (all ω up to 0.491) the results are those of Peng-Robinson.
- A stream with a single compound (mole fraction above 0.99999) is flashed on the vapor pressure curve of the compound database, so the 1978 alpha function shows only in mixtures.
Example¶
This code runs on every build of this site, and the output below is what it printed.
def dew_points(package):
fs = (Flowsheet.Create("PR78Example")
.WithCompounds("Methane", "N-hexadecane", "N-eicosane")
.WithPropertyPackage(package))
# methane saturated with a heavy alkane: at 1 atm the dew point is where
# the vapor pressure of the alkane equals its partial pressure
c16 = (fs.AddMaterialStream("CH4 + C16")
.WithPressure(Q.Bar(1.01325)).WithVaporFraction(1.0)
.SetCompoundMolarFlow("Methane", 0.98)
.SetCompoundMolarFlow("N-hexadecane", 0.02))
c20 = (fs.AddMaterialStream("CH4 + C20")
.WithPressure(Q.Bar(1.01325)).WithVaporFraction(1.0)
.SetCompoundMolarFlow("Methane", 0.99)
.SetCompoundMolarFlow("N-eicosane", 0.01))
fs.Solve()
return fs, c16.Object.GetTemperature() - 273.15, c20.Object.GetTemperature() - 273.15
fs, t16, t20 = dew_points(PropertyPackages.PengRobinson1978)
_, t16_pr, t20_pr = dew_points(PropertyPackages.PengRobinson)
# ideal gas and ideal solution with the vapor pressure correlation of the databank, for reference
_, t16_id, t20_id = dew_points(PropertyPackages.Raoult)
print("Dew point at 1 atm, C PR78 PR Raoult")
print(f"2 % n-hexadecane in CH4 {t16:7.2f} {t16_pr:7.2f} {t16_id:8.2f}")
print(f"1 % n-eicosane in CH4 {t20:7.2f} {t20_pr:7.2f} {t20_id:8.2f}")
Output
Dew point at 1 atm, C PR78 PR Raoult
2 % n-hexadecane in CH4 157.70 155.69 158.61
1 % n-eicosane in CH4 189.66 185.66 190.97
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 | Peng-Robinson 1978 EOS |
| Liquid fugacity | Peng-Robinson 1978 EOS |
| Vapor enthalpy, entropy, Cp/Cv | Peng-Robinson 1978 EOS |
| Liquid enthalpy, entropy, Cp/Cv | Peng-Robinson 1978 EOS |
| Vapor density | Peng-Robinson 1978 EOS |
| Liquid density | Peng-Robinson 1978 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 |
empty | kij (Value) of the pairs of the flowsheet compounds, from the Peng-Robinson databank or entered in the package editor |
Settings common to every property package, as saved for the example
| Element | Value |
|---|---|
Type |
69 characters |
ComponentName |
Peng-Robinson 1978 (PR78) |
ComponentDescription |
|
Tag |
Peng-Robinson 1978 (PR78) |
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¶
PengRobinson1978PropertyPackage(bool)
| Parameter | Type | Description |
|---|---|---|
comode |
Boolean |
Properties¶
DisplayDescription
DisplayName
ImplementsAnalyticalDerivatives
MobileCompatible
Methods¶
AUX_CM(object)
| Parameter | Type | Description |
|---|---|---|
Vx |
Object |
AUX_CM(Phase)
| Parameter | Type | Description |
|---|---|---|
Phase |
Phase |
AUX_VAPDENS(double, double)
| Parameter | Type | Description |
|---|---|---|
T |
Double |
|
P |
Double |
AUX_Z(double[], double, double, PhaseName)
| Parameter | Type | Description |
|---|---|---|
Vx |
Double[] |
|
T |
Double |
|
P |
Double |
|
state |
PhaseName |
CalcIsothermalCompressibility(IPhase)
| Parameter | Type | Description |
|---|---|---|
p |
IPhase |
CalcJouleThomsonCoefficient(IPhase)
| Parameter | Type | Description |
|---|---|---|
p |
IPhase |
DisplayEditingForm()
DW_CalcCompPartialVolume(Phase, double, double)
| Parameter | Type | Description |
|---|---|---|
phase |
Phase |
|
T |
Double |
|
P |
Double |
DW_CalcCp_ISOL(Phase, double, double)
| Parameter | Type | Description |
|---|---|---|
Phase1 |
Phase |
|
T |
Double |
|
P |
Double |
DW_CalcCv_ISOL(Phase, double, double)
| Parameter | Type | Description |
|---|---|---|
Phase1 |
Phase |
|
T |
Double |
|
P |
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 |
DW_CalcdKdT(double[], double[], double, double, string)
| Parameter | Type | Description |
|---|---|---|
Vx |
Double[] |
|
Vy |
Double[] |
|
T |
Double |
|
P |
Double |
|
type |
String |
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 |
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 |
DW_CalcEnergyFlowMistura_ISOL(double, double)
| Parameter | Type | Description |
|---|---|---|
T |
Double |
|
P |
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). |
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). |
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). |
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). |
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) |
DW_CalcFugCoeff(double[], double, double): 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 |
|---|---|---|
Vz |
Double[] |
Vector of doubles containing the molar composition of the mixture. |
T |
Double |
Temperature in K |
V |
Double |
Volume in m3/mol |
DW_CalcK_ISOL(Phase, double, double)
| Parameter | Type | Description |
|---|---|---|
Phase1 |
Phase |
|
T |
Double |
|
P |
Double |
DW_CalcMassaEspecifica_ISOL(Phase, double, double, double)
| Parameter | Type | Description |
|---|---|---|
Phase1 |
Phase |
|
T |
Double |
|
P |
Double |
|
pvp |
Double |
DW_CalcMM_ISOL(Phase, double, double)
| Parameter | Type | Description |
|---|---|---|
Phase1 |
Phase |
|
T |
Double |
|
P |
Double |
DW_CalcOverallProps()
DW_CalcP(double[], double, double): Calculates system pressure for the specified temperature, volume and composition.
Calculates system pressure for the specified temperature, volume and composition.
| Parameter | Type | Description |
|---|---|---|
Vz |
Double[] |
Vector of doubles containing the molar composition of the mixture. |
T |
Double |
Temperature in K |
V |
Double |
Volume in m3/mol |
DW_CalcPhaseProps(Phase)
| Parameter | Type | Description |
|---|---|---|
Phase |
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. |
DW_CalcPVAP_ISOL(double)
| Parameter | Type | Description |
|---|---|---|
T |
Double |
DW_CalcTensaoSuperficial_ISOL(Phase, double, double)
| Parameter | Type | Description |
|---|---|---|
Phase1 |
Phase |
|
T |
Double |
|
P |
Double |
DW_CalculateCriticalPoints()
DW_CalcViscosidadeDinamica_ISOL(Phase, double, double)
| Parameter | Type | Description |
|---|---|---|
Phase1 |
Phase |
|
T |
Double |
|
P |
Double |
RET_KIJ(string, string)
| Parameter | Type | Description |
|---|---|---|
id1 |
String |
|
id2 |
String |
ReturnCriticalPoints()
RunPostMaterialStreamSetRoutine()
SupportsComponent(ICompoundConstantProperties)
| Parameter | Type | Description |
|---|---|---|
comp |
ICompoundConstantProperties |
Fields¶
ClassId