CO2 Transport (Span-Wagner / PR)¶
DWSIM Plus
Available with a DWSIM Plus (Patreon) subscription.
Property package for CO2-rich streams in pipelines, compression and shipping: the Span-Wagner reference equation of state for pure CO2, and Peng-Robinson with binary parameters for the usual pipeline impurities for CO2 with impurities.
DWSIM.Extensions.PropertyPackages.CCUS.Transport.CO2TransportPropertyPackage
Assembly DWSIM.Extensions.PropertyPackages.CCUS.dll · Object ← PropertyPackage ← CO2TransportPropertyPackage
Name in the flowsheet CO2 Transport (Span-Wagner/PR) · FluentAPI PropertyPackages.Plus.CO2Transport
Scope¶
The package is for CO2-rich streams in pipeline transport, compression trains and ship transport: dense-phase and gas-phase properties, phase envelopes of CO2 with impurities, and the detection of two-phase flow. It switches between two equations of state on the CO2 content of the stream:
- Pure CO2 (mole fraction above 0.9999): the Span-Wagner (1996) reference equation of state, a 42-term Helmholtz energy formulation (7 polynomial, 27 exponential and 8 Gaussian terms) with Tc = 304.1282 K, Pc = 73.773 bar and ρc = 467.6 kg/m3. Density, fugacity, enthalpy and entropy come from the Helmholtz energy and its derivatives.
- CO2 with impurities: Peng-Robinson with binary parameters for the usual pipeline impurities, which the package editor lists with their sources.
| Pair | kij | Pair | kij |
|---|---|---|---|
| CO2-N2 | 0.0070 | CO2-CH4 | 0.0919 |
| CO2-O2 | 0.1140 | CO2-H2 | 0.0920 |
| CO2-Ar | 0.1150 | CO2-CO | 0.0490 |
| CO2-H2S | 0.0974 | CO2-NO2 | 0.0500 |
| CO2-H2O | 0.1896 | N2-O2 | -0.0119 |
| CO2-SO2 | 0.0440 | N2-Ar | -0.0060 |
| N2-H2 | -0.0200 |
The CO2-H2O value comes from Spycher, Pruess and Ennis-King (2003). Pairs not in the
table have kij = 0. The package also offers IsTwoPhase(T, P) and
MinimumOperatingPressure(T, safetyFactor) for pipeline checks on the stream composition.
Recommended envelope. Temperature 216 to 1100 K and pressure up to 800 MPa (the range of Span-Wagner); CO2 purity above 90 mol% for pipeline work; impurities N2, O2, Ar, H2S, H2O, SO2, CH4, H2, CO and NO2.
Validation. The pure CO2 density from Span-Wagner matches the NIST WebBook data: 228.8 kg/m3 at 350 K and 100 bar (supercritical, +0.003 %) and 938.2 kg/m3 at 280 K and 100 bar (liquid, +0.001 %). The validation cases also cover the saturated liquid and vapor densities from 220 to 300 K, the region near the critical point, a CO2/N2/O2 pipeline mixture and a compression from 10 to 100 bar.
Limitations¶
- A stream with more than 0.01 mol% of impurities leaves Span-Wagner for Peng-Robinson; the mixture properties carry the accuracy of a cubic equation of state and of the general methods listed under the property methods below.
- The viscosity and thermal conductivity of the streams come from the general correlations of DWSIM listed there.
Example¶
This code runs on every build of this site, and the output below is what it printed.
fs = (Flowsheet.Create("CO2TransportExample")
.WithCompounds("Carbon dioxide", "Nitrogen", "Argon", "Methane")
.WithPropertyPackage(PropertyPackages.Plus.CO2Transport))
def pure(name): # pure CO2: Span-Wagner
return fs.AddMaterialStream(name).SetCompoundMolarFlow("Carbon dioxide", 100.0)
def mixture(name): # 96 % CO2 with N2, Ar and CH4: Peng-Robinson
return (fs.AddMaterialStream(name)
.SetCompoundMolarFlow("Carbon dioxide", 96.0).SetCompoundMolarFlow("Nitrogen", 2.0)
.SetCompoundMolarFlow("Argon", 1.0).SetCompoundMolarFlow("Methane", 1.0))
dense = pure("CO2, 110 bar").At(Q.Celsius(25.0), Q.Bar(110.0))
gas = pure("CO2, 30 bar").At(Q.Celsius(25.0), Q.Bar(30.0))
pipeline = mixture("Mixture, 110 bar").At(Q.Celsius(25.0), Q.Bar(110.0))
dew25 = mixture("Mixture, dew point at 25 C").WithTemperature(Q.Celsius(25.0)).WithVaporFraction(1.0)
bubble60 = mixture("Mixture, bubble point at 60 bar").WithPressure(Q.Bar(60.0)).WithVaporFraction(0.0)
dew60 = mixture("Mixture, dew point at 60 bar").WithPressure(Q.Bar(60.0)).WithVaporFraction(1.0)
fs.Solve()
for b in (dense, gas, pipeline):
s = b.Object
i = 2 if s.Phases[2].Properties.molarfraction else 3 # vapor or liquid
p = s.Phases[i].Properties
print(f"{s.GraphicObject.Tag:16}: {'vapor' if i == 2 else 'liquid'}, density {p.density:.1f} kg/m3, "
f"viscosity {p.viscosity * 1e6:.1f} uPa s")
print(f"Mixture dew pressure at 25 C = {dew25.Object.Phases[0].Properties.pressure / 1e5:.1f} bar")
print(f"Mixture at 60 bar: two phases from {bubble60.Object.Phases[0].Properties.temperature - 273.15:.1f} C "
f"(bubble) to {dew60.Object.Phases[0].Properties.temperature - 273.15:.1f} C (dew)")
Output
CO2, 110 bar : liquid, density 832.6 kg/m3, viscosity 76.7 uPa s
CO2, 30 bar : vapor, density 64.1 kg/m3, viscosity 15.5 uPa s
Mixture, 110 bar: liquid, density 735.2 kg/m3, viscosity 75.0 uPa s
Mixture dew pressure at 25 C = 70.5 bar
Mixture at 60 bar: two phases from 9.5 C (bubble) to 18.7 C (dew)
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 | Span-Wagner EOS (pure CO2) / Peng-Robinson EOS with the package kij (mixtures) |
| Liquid fugacity | Span-Wagner EOS (pure CO2) / Peng-Robinson EOS with the package kij (mixtures) |
| Vapor enthalpy, entropy, Cp/Cv | Span-Wagner EOS (pure CO2) / Ideal Gas (mixtures) |
| Liquid enthalpy, entropy, Cp/Cv | Span-Wagner EOS (pure CO2) / Ideal Gas less the heats of vaporization (mixtures) |
| Vapor density | Span-Wagner EOS (pure CO2) / Ideal Gas (mixtures) |
| Liquid density | Span-Wagner EOS (pure CO2) / Peng-Robinson EOS with the package kij (mixtures) |
| Vapor viscosity | Fenghour, Wakeham and Vesovic 1998 (pure CO2) / Experimental / Lucas / Jossi-Stiel-Thodos (mixtures) |
| Liquid viscosity | Fenghour, Wakeham and Vesovic 1998 (pure CO2) / Experimental / Letsou-Stiel (mixtures) |
| Vapor thermal conductivity | Vesovic et al. 1990 (pure CO2) / Experimental / Ely-Hanley (mixtures) |
| Liquid thermal conductivity | Vesovic et al. 1990 (pure CO2) / Experimental / Latini (mixtures) |
| 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.
This package adds no elements of its own.
Settings common to every property package, as saved for the example
| Element | Value |
|---|---|
Type |
76 characters |
ComponentName |
CO2 Transport (Span-Wagner/PR) |
ComponentDescription |
Span-Wagner EOS for pure CO2, PR for CO2-rich mixtures. |
Tag |
CO2 Transport (Span-Wagner/PR) |
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¶
-
User guide
-
Used with
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
CO2TransportPropertyPackage(bool)
| Parameter | Type | Description |
|---|---|---|
comode |
Boolean |
Properties¶
FlashBase: DWSIM's flash, with the starting pressure of a bubble-point or two-phase TV flash of a mixture taken from Wilson...
DWSIM's flash, with the starting pressure of a bubble-point or two-phase TV flash of a mixture taken from Wilson K-values (see TransportFlash).
ImplementsAnalyticalDerivatives
ImplementsCrossPlatformEditor
MobileCompatible
Methods¶
AUX_LIQDENS(double, Array, double, double, bool)
| Parameter | Type | Description |
|---|---|---|
T |
Double |
|
Vx |
Array |
|
P |
Double |
|
Pvp |
Double |
|
EXPERIMENT |
Boolean |
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 |
CalculateCO2ThermalConductivity(double, double)
| Parameter | Type | Description |
|---|---|---|
T |
Double |
|
P |
Double |
CalculateCO2Viscosity(double, double)
| Parameter | Type | Description |
|---|---|---|
T |
Double |
|
P |
Double |
Clone()
DW_CalcCompPartialVolume(Phase, double, double)
| Parameter | Type | Description |
|---|---|---|
phase |
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_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_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. |
GetEditingForm(): Returns the binary interaction parameter editor of this package.
Returns the binary interaction parameter editor of this package.
IsTwoPhase(double, double)
| Parameter | Type | Description |
|---|---|---|
T |
Double |
|
P |
Double |
MinimumOperatingPressure(double, double)
| Parameter | Type | Description |
|---|---|---|
T |
Double |
|
safetyFactor |
Double |
PopulateCrossPlatformEditor(object): The package has no adjustable parameters: the panel lists the binary interaction parameters, the supported...
The package has no adjustable parameters: the panel lists the binary interaction parameters, the supported components and the model, mirroring the Windows editor.
| Parameter | Type | Description |
|---|---|---|
container |
Object |
ReturnInstance(string)
| Parameter | Type | Description |
|---|---|---|
typename |
String |
RunPostMaterialStreamSetRoutine()
SaveData()
SupportsComponent(ICompoundConstantProperties)
| Parameter | Type | Description |
|---|---|---|
comp |
ICompoundConstantProperties |
Fields¶