Petroleum engineering fundamentals have been settled for decades. Peng-Robinson (1976). Kesler-Lee (1976). Peneloux (1982). Whitson & Brulé (2000). Reservoir engineers routinely use specialised PVT software to characterise fluid compositions and generate keywords for dynamic simulation.
In practice, the internal workflow of these tools is rarely examined. The standard approach is to QC and match to available laboratory data through regression then export to the simulator. Which correlations are applied, how the cubic is solved, what the reported Z-factor represents — these are not part of the routine workflow in general.
Several of these details directly affect simulation results yet are not documented in standard references. The publicly available Volve field dataset is used here to make that connection explicit, building the workflow from first principles in Python and verifying every result against commercial software output exactly.
Part 1 covers characterisation — converting MW and SG into critical properties. Everything here is deterministic. No regression, no fitting, no adjustable parameters.
A typical PVT report provides a composition in this format:
| Component | Mole % | MW (g/mol) | SG |
|---|---|---|---|
| N₂ | 0.410 | 28.013 | — |
| CO₂ | 3.799 | 44.010 | — |
| C1 | 39.916 | 16.043 | — |
| C2 | 6.072 | 30.070 | — |
| C3 | 5.449 | 44.097 | — |
| iC4 | 0.771 | 58.124 | — |
| nC4 | 2.816 | 58.124 | — |
| iC5 | 1.050 | 72.151 | — |
| nC5 | 1.697 | 72.151 | — |
| C6 | 2.342 | 84.000 | — |
| C7-C15 | 19.774 | 150.0 | 0.784 |
| C16+ | 15.903 | 480.0 | 0.968 |
For N₂ through C6, the critical properties are known physical constants sourced directly from the component library. No calculation needed. For C7-C15 and C16+, only MW and SG are available from the laboratory report. Tc, Pc, ω and Tb must be estimated from correlations.
That is the characterisation challenge.
Several correlation sets are available for pseudocomponent characterisation in commercial software. The default is Kesler-Lee (1976). The workflow is sequential where each step feeds the next.
Tb is estimated from MW and SG via the Watson characterisation factor:
Output is in Rankine — convert to Kelvin by multiplying by 5/9. This approach is valid across the full MW range of petroleum pseudocomponents, including C7-C15 (MW=150).
where Tb is in Rankine. Output converted to Kelvin.
Output is in psia — convert to bar by multiplying by 0.068948.
The acentric factor uses two forms depending on the reduced boiling temperature Tbr = Tb/Tc.
For Tbr ≤ 0.8 (lighter fractions — vapor-pressure definition):
For Tbr > 0.8 (heavier fractions — Watson-K petroleum form):
For the Volve pseudocomponents, both C7-C15 and C16+ fall in the heavier fraction form (Tbr > 0.8).
The Watson characterisation factor encodes the paraffinicity of the fraction:
where Tb is in Rankine. Higher Kw indicates more paraffinic character. For the Volve C7-C15 fraction (MW=150, SG=0.784), Kw ≈ 11.8 — consistent with a mixed paraffinic/naphthenic North Sea crude.
| Component | Tb (K) | Tc (K) | Pc (bar) | ω | Ref Tc | Ref Pc | Ref ω |
|---|---|---|---|---|---|---|---|
| N₂ | — | 126.20 | 33.944 | 0.0400 | 126.20 | 33.944 | 0.0400 |
| CO₂ | — | 304.70 | 73.866 | 0.2250 | 304.70 | 73.866 | 0.2250 |
| C1 | — | 190.60 | 46.042 | 0.0130 | 190.60 | 46.042 | 0.0130 |
| C2 | — | 305.43 | 48.839 | 0.0986 | 305.43 | 48.839 | 0.0986 |
| C3 | — | 369.80 | 42.455 | 0.1524 | 369.80 | 42.455 | 0.1524 |
| iC4 | — | 408.10 | 36.477 | 0.1848 | 408.10 | 36.477 | 0.1848 |
| nC4 | — | 425.20 | 37.966 | 0.2010 | 425.20 | 37.966 | 0.2010 |
| iC5 | — | 460.40 | 33.893 | 0.2270 | 460.40 | 33.893 | 0.2270 |
| nC5 | — | 469.60 | 33.701 | 0.2510 | 469.60 | 33.701 | 0.2510 |
| C6 | — | 507.50 | 30.104 | 0.2990 | 507.50 | 30.104 | 0.2990 |
| C7-C15 | 460.2 | 640.54 | 22.835 | 0.4867 | 640.54 | 22.835 | 0.4867 |
| C16+ | 861.7 | 993.22 | 6.939 | 1.3738 | 993.22 | 6.939 | 1.3738 |
For the pseudocomponents the Kesler-Lee correlations reproduce the commercial software values exactly. For the pure components the values come directly from the component library — same source in both cases.
The binary interaction parameters (BIPs) are not calculated from MW and SG — they come from the Katz-Firoozabadi default set, verified to match exactly. The non-zero interactions are N₂ and CO₂ against all hydrocarbons (0.10), a small negative N₂-CO₂ pair (−0.012), and gravity-dependent C1-heavy hydrocarbon pairs. All other hydrocarbon-hydrocarbon pairs are zero.
These are deterministic defaults from the characterisation stage with no manual input required.
| Pair | kij | Source |
|---|---|---|
| N₂ — CO₂ | −0.012 | KF default |
| N₂ — all HC | 0.100 | KF default |
| CO₂ — all HC | 0.100 | KF default |
| C1 — C6 | 0.0279 | f(SGC6) |
| C1 — C7-C15 | 0.04176 | f(SGC715) |
| C1 — C16+ | 0.06752 | f(SGC16) |
| C2/C3 — C6/C7+ | 0.010 | KF default |
| All other HC-HC | 0.000 | KF default |
The software computes Peneloux volume shifts automatically at the characterisation stage — before any experimental data is entered. They are a deterministic output of the critical properties, stored as dimensionless shift parameters (sShift) and dimensional equivalents (cShift in cm³/mol).
The concept is textbook Peneloux (1982). How they are used in the EOS is covered in Part 2 and the implementation differs from the textbook approach.
| Component | sShift (—) | cShift (cm³/mol) |
|---|---|---|
| N₂ | −0.131 | −3.158 |
| CO₂ | −0.043 | −1.140 |
| C1 | −0.144 | −3.863 |
| C2 | −0.103 | −4.177 |
| C3 | −0.078 | −4.367 |
| iC4 | −0.062 | −4.486 |
| nC4 | −0.054 | −3.928 |
| iC5 | −0.042 | −3.670 |
| nC5 | −0.030 | −2.729 |
| C6 | −0.007 | −0.795 |
| C7-C15 | +0.047 | +8.588 |
| C16+ | +0.491 | +454.2 |
At the end of characterisation the 12-component fluid is fully defined:
| Quantity | Source |
|---|---|
| ZI (mole fractions) | Lab measurement |
| MW, SG pseudocomponents | Lab measurement |
| Tc, Pc, ω — pure components | Component library |
| Tc, Pc, ω — pseudocomponents | Kesler-Lee (1976) correlations |
| BIPs | Katz-Firoozabadi |
| Volume shifts | Peneloux, computed from Tc/Pc/Vcrit |
This is the complete input to the EOS engine. Everything is deterministic from raw laboratory data — no fitting, regression, or adjustable parameters.
Part 2 builds the PR3 EOS engine — cubic solver, fugacity coefficients, bubble point pressure. All results verified against commercial software output of 200.84 bar exactly.
The full Jupyter notebook for this post is available at: github.com/eskoantg/PVTi_cross_check
This series is an independent, educational and methodological implementation based on published correlations and equations. Verification is performed against a widely used commercial PVT simulator. No proprietary source code or licensed documentation was accessed or reproduced. Volve field data is used under Equinor's open data licence.