pyrestoolbox 3.8.3__tar.gz → 3.8.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/Cargo.lock +1 -1
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/Cargo.toml +1 -1
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/PKG-INFO +1 -1
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyproject.toml +1 -1
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/classes/classes.py +2 -2
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/changelist.rst +8 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/examples.ipynb +17 -17
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/gas.rst +77 -16
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/index.rst +1 -1
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/nodal_examples.ipynb +12 -12
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/oil.rst +2 -2
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/gas/gas.py +53 -52
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/matbal/matbal.py +3 -3
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/nodal/nodal.py +4 -4
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/validate/validate.py +2 -2
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/critical_properties/mod.rs +4 -2
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/gas_viscosity/mod.rs +3 -1
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/.github/complexity-baseline.json +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/.github/scripts/check_complexity.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/.github/workflows/build-wheels.yml +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/.github/workflows/tests.yml +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/.gitignore +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/LICENSE +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/MANIFEST.in +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/README.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/ResToolbox/privacy_policy.md +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/build_pure_python.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/clippy.toml +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/mcp/Dockerfile +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/mcp/README.md +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/mcp/pyproject.toml +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/mcp/pyrestoolbox_mcp/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/mcp/pyrestoolbox_mcp/serialize.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/mcp/pyrestoolbox_mcp/server.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/mcp/tests/test_server.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/_accelerator.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/_lib_dielectric.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/_lib_maoduan_viscosity.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/_lib_pitzer_params.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/_lib_salting_library.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/_lib_vle_engine.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/appelo_volumes.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/brine.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/iapws_viscosity.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/jones_dole_viscosity.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/kestin_nacl_viscosity.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/pr_vphi.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/viscosity_route.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/brine/vphi_route.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/classes/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/constants/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/constants/constants.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/dca/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/dca/dca.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/brine.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/dca.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/img/bot.png +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/img/bot_PVTO.png +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/img/bot_img.png +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/img/dry_gas.png +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/img/grid_sat_df.png +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/img/influence.png +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/img/properties_df.png +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/img/sgof.png +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/img/swof.png +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/layer.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/library.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/matbal.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/nodal.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/nodal_hydrate_demo.ipynb +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/plyasunov.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/recommend.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/sensitivity.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/docs/simtools.rst +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/gas/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/gas/_hydrate.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/layer/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/layer/layer.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/library/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/library/component_library.xlsx +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/library/library.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/matbal/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/nodal/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_compressibility.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_constants.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_correlations.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_density.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_harmonize.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_pvt_class.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_rate.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_separator.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_tables.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/oil/_utils.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/plyasunov/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/plyasunov/iapws_if97.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/plyasunov/plyasunov_model.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/plyasunov/water_properties.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/recommend/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/recommend/recommend.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/sensitivity/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/sensitivity/sensitivity.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/shared_fns/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/shared_fns/shared_fns.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/simtools/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/simtools/_aquifer.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/simtools/_decks.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/simtools/_pvt_tables.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/simtools/_relperm.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/simtools/_vfp.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/simtools/simtools.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/pyrestoolbox/validate/__init__.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/setup.cfg +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/setup.py +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/bessel.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/brine_visc/mod.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/brine_visc/salt.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/brine_visc/water.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/dca/hyperbolic.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/dca/mod.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/dca/ransac.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/gwr.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/lib.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/matbal/mod.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/matbal/objective.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/oil/density.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/oil/mod.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/pseudopressure.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/spycher_pruess/mod.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/spycher_pruess/solubility.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vle/alpha.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vle/bip.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vle/components.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vle/eos.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vle/flash.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vle/fugacity.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vle/k_init.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vle/mod.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vle/rachford_rice.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/constants.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/friction.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/holdup_bb.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/holdup_gray.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/holdup_wg.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/ift.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/march.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/mod.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/pvt_helpers.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/vlp/static_column.rs +0 -0
- {pyrestoolbox-3.8.3 → pyrestoolbox-3.8.4}/src/zfactor/mod.rs +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyrestoolbox"
|
|
7
|
-
version = "3.8.
|
|
7
|
+
version = "3.8.4"
|
|
8
8
|
description = "pyResToolbox - A collection of Reservoir Engineering Utilities"
|
|
9
9
|
license = {text = "GPL-3.0-or-later"}
|
|
10
10
|
authors = [{name = "Mark W. Burgoyne", email = "mark.w.burgoyne@gmail.com"}]
|
|
@@ -25,7 +25,7 @@ Enum classes for method selection and class_dic registry.
|
|
|
25
25
|
Enums
|
|
26
26
|
-----
|
|
27
27
|
z_method Z-factor calculation method (DAK, HY, BNS)
|
|
28
|
-
c_method Critical property method (PMC, SUT,
|
|
28
|
+
c_method Critical property method (PMC, SUT, BNS)
|
|
29
29
|
pb_method Bubble point method (STAN, VALMC, VELAR)
|
|
30
30
|
rs_method Solution GOR method (VELAR, STAN, VALMC)
|
|
31
31
|
bo_method Oil FVF method (MCAIN, STAN)
|
|
@@ -60,8 +60,8 @@ class z_method(Enum): # Gas Z-Factor calculation model
|
|
|
60
60
|
class c_method(Enum): # Gas critical properties calculation method
|
|
61
61
|
PMC = 0
|
|
62
62
|
SUT = 1
|
|
63
|
-
BUR = 2
|
|
64
63
|
BNS = 3
|
|
64
|
+
BUR = 3 # Legacy alias for BNS
|
|
65
65
|
|
|
66
66
|
class pb_method(Enum): # Bubble point calculation method
|
|
67
67
|
STAN = 0
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
Changelist in 3.8.4:
|
|
2
|
+
|
|
3
|
+
- **GAS: associated-gas hydrocarbon pseudo-criticals for BNS (``ag``).** Burgoyne, Nielsen & Stanko (2025) fitted two hydrocarbon Tc/Pc correlations, for gas condensates and for associated gas; only the condensate one was exposed. Every gas function that takes ``he`` (except ``gas_sg``, ``gas_hydrate`` and the recommenders, which use no critical properties) now also takes ``ag`` (keyword, appended last): ``gas_tc_pc``, ``gas_z``, ``gas_ug``, ``gas_cg``, ``gas_bg``, ``gas_den``, ``gas_thermal``, ``gas_ponz2p``, ``gas_grad2sg``, ``gas_dmp``, ``gas_rate_radial``, ``gas_rate_linear``, ``GasPVT`` and ``gas_matbal``. ``ag=True`` makes ``cmethod='BNS'`` return the associated-gas values (SG 0.75: Tc 397.7 against 401.2 degR, Pc 653.9 against 663.4 psia), and the hydrocarbon-inert BIPs follow the selected Tc, as in the regression. Other cmethods ignore it and a user ``tc``/``pc`` takes precedence. The resolved values reach the Rust paths through the existing hydrocarbon Tc/Pc override, so the Rust code is unchanged. With ``ag=True``, results match the reference BNS implementation (``AG=True``) to 5e-15 in Z and viscosity and 7e-13 Btu/lb-mol in enthalpy; with ``ag=False`` (the default) every result is bit-identical to 3.8.3 on both paths.
|
|
4
|
+
|
|
5
|
+
- **GAS: BNS hydrocarbon SG floor aligned with the reference implementation (results move slightly in one corner).** When the inert fractions imply a hydrocarbon lighter than methane, the hydrocarbon SG is floored at methane. pyrestoolbox used 16.043/28.97 (Python and Rust) where the reference BNS code uses 16.0425/28.97, the methane MW of the method's own correlations. Both now use 16.0425/28.97. Only floored cases move (for SG 0.65 with 20% CO2, 10% H2S, 2% N2 and 10% H2: Z by up to 1.2e-5, viscosity 2.2e-5, enthalpy 1.4e-4 relative); everything else is bit-identical. With this, Python and Rust match the reference BNS implementation to about 1e-14 in Z and viscosity for every composition, with ``ag`` on or off.
|
|
6
|
+
|
|
7
|
+
- **GAS: 'BNS' is the one documented name for the tuned Peng-Robinson method.** The docs and example notebooks used 'BUR' and 'BNS' interchangeably; they now use 'BNS' throughout. 'BUR' is still accepted as a silent alias for ``zmethod`` and ``cmethod``, and ``c_method.BUR`` is now an alias of ``c_method.BNS`` (it was a separate member that every code path treated as BNS), matching ``z_method``. Invalid-method errors list only canonical names. The ``gas_rate_radial`` and ``gas_rate_linear`` parameter tables now document ``h2`` and ``he``, and the stale ``'WYW'`` was dropped from the examples notebook's zmethod list.
|
|
8
|
+
|
|
1
9
|
Changelist in 3.8.3:
|
|
2
10
|
|
|
3
11
|
- **GAS: helium in the BNS Z-factor, viscosity and thermal model, in Python and Rust.** Every gas function that takes ``h2`` now also takes ``he`` (keyword, appended last so positional calls are unchanged): ``gas_z``, ``gas_ug``, ``gas_den``, ``gas_bg``, ``gas_cg``, ``gas_thermal``, ``gas_tc_pc``, ``gas_ponz2p``, ``gas_grad2sg``, ``gas_dmp``, ``gas_rate_radial``, ``gas_rate_linear``, ``gas_sg``, ``GasPVT``, ``gas_matbal``, ``gas_hydrate`` (water-content step only), ``recommend_gas_methods`` and ``recommend_methods``. Helium is a sixth BNS component with zero BIPs, regressed to 29,400 NIST points for pure helium (60-300 degF, 14.7-14,990 psia) with the LBC coefficients held: density 0.31% mean / 0.84% max, viscosity 0.70% / 3.1%. **Its critical temperature is a deliberately non-standard 6.35 degR (NIST 9.35 degR)**, because the BNS Tc also sets the Stiel-Thodos dilute viscosity, which is about 25% low at the true Tc; the docs carry a warning so it is not "corrected". A positive ``he`` forces BNS, as ``h2`` does. With ``he=0`` every result is unchanged (Rust within 3e-15, Python within 3e-15 except ``gas_cg``, whose finite-difference derivative moves by up to 8e-12); with helium, Python and Rust agree with the reference BNS implementation to about 1e-14 in Z and viscosity. The Rust ``gas_dmp_rust`` and ``gas_ponz2p_rust`` now take the inert fractions as one ``[co2, h2s, n2, h2, he]`` list (internal API). ``MW_HE`` (4.003, the BNS value) is added to ``constants``.
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"Gas property calculations supporting hydrocarbon + impurity mixtures (CO2, H2S, N2, H2).\n",
|
|
20
20
|
"\n",
|
|
21
21
|
"### Calculation Methods\n",
|
|
22
|
-
"- **zmethod**: `'DAK'` (default), `'HY'`, `'
|
|
23
|
-
"- **cmethod**: `'PMC'` (default), `'SUT'`, `'
|
|
22
|
+
"- **zmethod**: `'DAK'` (default), `'HY'`, `'BNS'`\n",
|
|
23
|
+
"- **cmethod**: `'PMC'` (default), `'SUT'`, `'BNS'`"
|
|
24
24
|
]
|
|
25
25
|
},
|
|
26
26
|
{
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"metadata": {},
|
|
65
65
|
"outputs": [],
|
|
66
66
|
"source": [
|
|
67
|
-
"gas.gas_z(p=2350, sg=0.68, degf=180, co2=1.0, zmethod='
|
|
67
|
+
"gas.gas_z(p=2350, sg=0.68, degf=180, co2=1.0, zmethod='BNS', cmethod='BNS')"
|
|
68
68
|
]
|
|
69
69
|
},
|
|
70
70
|
{
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"source": [
|
|
83
83
|
"gsg = gas.gas_sg(hc_mw=19.0, co2=0.05, h2s=0.10, n2=0, h2=0.20)\n",
|
|
84
84
|
"print('Gas SG:', gsg)\n",
|
|
85
|
-
"gas.gas_z(p=2350, sg=gsg, degf=180, co2=0.05, h2s=0.10, n2=0, h2=0.20, zmethod='
|
|
85
|
+
"gas.gas_z(p=2350, sg=gsg, degf=180, co2=0.05, h2s=0.10, n2=0, h2=0.20, zmethod='BNS', cmethod='BNS')"
|
|
86
86
|
]
|
|
87
87
|
},
|
|
88
88
|
{
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
"cell_type": "markdown",
|
|
106
|
-
"source": "### gas_sg - Mixture Gas Specific Gravity\n\nCalculate SG of a gas mixture containing impurities. Essential for BNS
|
|
106
|
+
"source": "### gas_sg - Mixture Gas Specific Gravity\n\nCalculate SG of a gas mixture containing impurities. Essential for BNS method inputs.",
|
|
107
107
|
"metadata": {}
|
|
108
108
|
},
|
|
109
109
|
{
|
|
@@ -141,14 +141,14 @@
|
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
"cell_type": "code",
|
|
144
|
-
"source": "#
|
|
144
|
+
"source": "# BNS critical properties for a gas with 10% CO2 and 5% H2S\ngas.gas_tc_pc(sg=0.75, co2=0.10, h2s=0.05, cmethod='BNS')",
|
|
145
145
|
"metadata": {},
|
|
146
146
|
"execution_count": null,
|
|
147
147
|
"outputs": []
|
|
148
148
|
},
|
|
149
149
|
{
|
|
150
150
|
"cell_type": "code",
|
|
151
|
-
"source": "#
|
|
151
|
+
"source": "# BNS auto-selects when H2 is present\ngas.gas_tc_pc(sg=0.6, h2=0.30)",
|
|
152
152
|
"metadata": {},
|
|
153
153
|
"execution_count": null,
|
|
154
154
|
"outputs": []
|
|
@@ -192,12 +192,12 @@
|
|
|
192
192
|
},
|
|
193
193
|
{
|
|
194
194
|
"cell_type": "markdown",
|
|
195
|
-
"source": "
|
|
195
|
+
"source": "BNS Z-Factor across a pressure range for different gas compositions. The BNS model uses a tuned 5-component Peng Robinson EOS that natively handles CO2, H2S, N2, and H2 at any concentration up to pure inerts.",
|
|
196
196
|
"metadata": {}
|
|
197
197
|
},
|
|
198
198
|
{
|
|
199
199
|
"cell_type": "code",
|
|
200
|
-
"source": "import matplotlib.pyplot as plt\n\n# Compare Z-factor across pressures for different gas compositions using
|
|
200
|
+
"source": "import matplotlib.pyplot as plt\n\n# Compare Z-factor across pressures for different gas compositions using BNS\npressures = list(range(500, 10001, 500))\n\n# Pure methane (BNS)\nz_ch4 = gas.gas_z(p=pressures, sg=0.5539, degf=200, zmethod='BNS', cmethod='BNS')\n\n# 15% CO2 blend\nz_co2 = gas.gas_z(p=pressures, sg=0.7, degf=200, co2=0.15, zmethod='BNS', cmethod='BNS')\n\n# 20% H2 blend (auto-selects BNS)\nsg_h2 = gas.gas_sg(hc_mw=19.0, co2=0, h2s=0, n2=0, h2=0.20)\nz_h2 = gas.gas_z(p=pressures, sg=sg_h2, degf=200, h2=0.20, zmethod='BNS', cmethod='BNS')\n\n# Pure CO2\nz_pureco2 = gas.gas_z(p=pressures, sg=1.5196, degf=200, co2=1.0, zmethod='BNS', cmethod='BNS')\n\nplt.plot(pressures, z_ch4, label='Pure CH4')\nplt.plot(pressures, z_co2, label='15% CO2 blend')\nplt.plot(pressures, z_h2, label='20% H2 blend')\nplt.plot(pressures, z_pureco2, label='Pure CO2')\nplt.xlabel('Pressure (psia)')\nplt.ylabel('Z-Factor')\nplt.title('BNS Z-Factor: CO2 and H2 Blends')\nplt.legend()\nplt.grid(True)\nplt.show()",
|
|
201
201
|
"metadata": {},
|
|
202
202
|
"execution_count": null,
|
|
203
203
|
"outputs": []
|
|
@@ -229,12 +229,12 @@
|
|
|
229
229
|
},
|
|
230
230
|
{
|
|
231
231
|
"cell_type": "markdown",
|
|
232
|
-
"source": "
|
|
232
|
+
"source": "BNS viscosity uses a tuned LBC (Lohrenz-Bray-Clark) method instead of the default Lee-Gonzalez-Eakin, enabling viscosity calculations for CO2-rich and H2-rich gases.",
|
|
233
233
|
"metadata": {}
|
|
234
234
|
},
|
|
235
235
|
{
|
|
236
236
|
"cell_type": "code",
|
|
237
|
-
"source": "#
|
|
237
|
+
"source": "# BNS/LBC viscosity for pure CO2\nprint('Pure CO2 viscosity:', gas.gas_ug(p=2000, sg=1.5196, degf=200, co2=1.0, zmethod='BNS', cmethod='BNS'))\n\n# Viscosity of a 20% H2 blend (BNS auto-selects)\nsg_h2mix = gas.gas_sg(hc_mw=19.0, co2=0, h2s=0, n2=0, h2=0.20)\nprint('20% H2 blend viscosity:', gas.gas_ug(p=2000, sg=sg_h2mix, degf=200, h2=0.20))\n\n# Viscosity comparison across pressure range for conventional vs H2 blend\npressures = list(range(500, 8001, 500))\nug_conv = gas.gas_ug(p=pressures, sg=0.7, degf=200)\nug_h2 = gas.gas_ug(p=pressures, sg=sg_h2mix, degf=200, h2=0.20, zmethod='BNS', cmethod='BNS')\nug_co2 = gas.gas_ug(p=pressures, sg=1.5196, degf=200, co2=1.0, zmethod='BNS', cmethod='BNS')\n\nplt.plot(pressures, ug_conv, label='Conventional gas (LEG)')\nplt.plot(pressures, ug_h2, label='20% H2 blend (LBC)')\nplt.plot(pressures, ug_co2, label='Pure CO2 (LBC)')\nplt.xlabel('Pressure (psia)')\nplt.ylabel('Viscosity (cP)')\nplt.title('Gas Viscosity: Conventional vs BNS/LBC Method')\nplt.legend()\nplt.grid(True)\nplt.show()",
|
|
238
238
|
"metadata": {},
|
|
239
239
|
"execution_count": null,
|
|
240
240
|
"outputs": []
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
},
|
|
268
268
|
{
|
|
269
269
|
"cell_type": "code",
|
|
270
|
-
"source": "# Gas compressibility for pure CO2 and H2 blend using
|
|
270
|
+
"source": "# Gas compressibility for pure CO2 and H2 blend using BNS\nprint('Cg pure CO2:', gas.gas_cg(p=2000, sg=1.5196, degf=200, co2=1.0, zmethod='BNS', cmethod='BNS'))\n\nsg_h2 = gas.gas_sg(hc_mw=19.0, co2=0, h2s=0, n2=0, h2=0.20)\nprint('Cg 20% H2 blend:', gas.gas_cg(p=2000, sg=sg_h2, degf=200, h2=0.20, zmethod='BNS', cmethod='BNS'))",
|
|
271
271
|
"metadata": {},
|
|
272
272
|
"execution_count": null,
|
|
273
273
|
"outputs": []
|
|
@@ -300,7 +300,7 @@
|
|
|
300
300
|
},
|
|
301
301
|
{
|
|
302
302
|
"cell_type": "code",
|
|
303
|
-
"source": "# Bg for pure CO2 using
|
|
303
|
+
"source": "# Bg for pure CO2 using BNS\nprint('Bg pure CO2:', gas.gas_bg(p=3000, sg=1.5196, degf=200, co2=1.0, zmethod='BNS', cmethod='BNS'))\n\n# Bg for 20% H2 blend\nsg_h2 = gas.gas_sg(hc_mw=19.0, co2=0, h2s=0, n2=0, h2=0.20)\nprint('Bg 20% H2 blend:', gas.gas_bg(p=3000, sg=sg_h2, degf=200, h2=0.20, zmethod='BNS', cmethod='BNS'))",
|
|
304
304
|
"metadata": {},
|
|
305
305
|
"execution_count": null,
|
|
306
306
|
"outputs": []
|
|
@@ -323,7 +323,7 @@
|
|
|
323
323
|
},
|
|
324
324
|
{
|
|
325
325
|
"cell_type": "code",
|
|
326
|
-
"source": "# Gas density for pure CO2 using
|
|
326
|
+
"source": "# Gas density for pure CO2 using BNS\nprint('Pure CO2 density:', gas.gas_den(p=2000, sg=1.5196, degf=200, co2=1.0, zmethod='BNS', cmethod='BNS'))\n\n# Gas density for 20% H2 blend - much lighter than conventional gas\nsg_h2 = gas.gas_sg(hc_mw=19.0, co2=0, h2s=0, n2=0, h2=0.20)\nprint('20% H2 blend density:', gas.gas_den(p=2000, sg=sg_h2, degf=200, h2=0.20, zmethod='BNS', cmethod='BNS'))\n\n# Conventional gas density for comparison\nprint('Conventional gas density:', gas.gas_den(p=2000, sg=0.75, degf=200))",
|
|
327
327
|
"metadata": {},
|
|
328
328
|
"execution_count": null,
|
|
329
329
|
"outputs": []
|
|
@@ -414,7 +414,7 @@
|
|
|
414
414
|
},
|
|
415
415
|
{
|
|
416
416
|
"cell_type": "code",
|
|
417
|
-
"source": "# Pseudopressure for pure CO2 using
|
|
417
|
+
"source": "# Pseudopressure for pure CO2 using BNS\nprint('dmp pure CO2:', gas.gas_dmp(p1=1000, p2=3000, degf=200, sg=1.5196, co2=1.0, zmethod='BNS', cmethod='BNS'))\n\n# Pseudopressure for 20% H2 blend (BNS auto-selects)\nsg_h2 = gas.gas_sg(hc_mw=19.0, co2=0, h2s=0, n2=0, h2=0.20)\nprint('dmp 20% H2 blend:', gas.gas_dmp(p1=1000, p2=3000, degf=200, sg=sg_h2, h2=0.20))",
|
|
418
418
|
"metadata": {},
|
|
419
419
|
"execution_count": null,
|
|
420
420
|
"outputs": []
|
|
@@ -463,7 +463,7 @@
|
|
|
463
463
|
},
|
|
464
464
|
{
|
|
465
465
|
"cell_type": "code",
|
|
466
|
-
"source": "# Radial gas flow rate for pure CO2 using
|
|
466
|
+
"source": "# Radial gas flow rate for pure CO2 using BNS\nprint('Pure CO2 rate:', gas.gas_rate_radial(\n k=5, h=50, pr=2000, pwf=750, r_w=0.3, r_ext=1500, degf=180,\n sg=1.5196, co2=1.0, zmethod='BNS', cmethod='BNS', D=0.01, S=5\n))\n\n# Radial gas flow rate for 20% H2 blend\nsg_h2 = gas.gas_sg(hc_mw=19.0, co2=0, h2s=0, n2=0, h2=0.20)\nprint('20% H2 blend rate:', gas.gas_rate_radial(\n k=5, h=50, pr=2000, pwf=750, r_w=0.3, r_ext=1500, degf=180,\n sg=sg_h2, h2=0.20, zmethod='BNS', cmethod='BNS', D=0.01, S=5\n))",
|
|
467
467
|
"metadata": {},
|
|
468
468
|
"execution_count": null,
|
|
469
469
|
"outputs": []
|
|
@@ -496,7 +496,7 @@
|
|
|
496
496
|
},
|
|
497
497
|
{
|
|
498
498
|
"cell_type": "code",
|
|
499
|
-
"source": "# Linear gas flow rate for pure CO2 using
|
|
499
|
+
"source": "# Linear gas flow rate for pure CO2 using BNS\nprint('Pure CO2 linear rate:', gas.gas_rate_linear(\n k=0.1, area=50, length=200, pr=2000, pwf=250, degf=180,\n sg=1.5196, co2=1.0, zmethod='BNS', cmethod='BNS'\n))\n\n# Linear gas flow rate for 20% H2 blend\nsg_h2 = gas.gas_sg(hc_mw=19.0, co2=0, h2s=0, n2=0, h2=0.20)\nprint('20% H2 blend linear rate:', gas.gas_rate_linear(\n k=0.1, area=50, length=200, pr=2000, pwf=250, degf=180,\n sg=sg_h2, h2=0.20, zmethod='BNS', cmethod='BNS'\n))",
|
|
500
500
|
"metadata": {},
|
|
501
501
|
"execution_count": null,
|
|
502
502
|
"outputs": []
|
|
@@ -22,7 +22,7 @@ pyResToolBox uses class objects to track calculation options through the functio
|
|
|
22
22
|
|
|
23
23
|
+ 'DAK': Dranchuk & Abou-Kassem (1975) using from Equations 2.7-2.8 from 'Petroleum Reservoir Fluid Property Correlations' by W. McCain et al. - Slowest, Most Accurate
|
|
24
24
|
+ 'HY': Hall & Yarborough (1973) - Second Fastest
|
|
25
|
-
+ '
|
|
25
|
+
+ 'BNS': Tuned Peng Robinson EOS model, Burgoyne, Nielsen & Stanko (2025), `SPE-229932-MS <https://doi.org/10.2118/229932-MS>`_, extended with helium in 3.8.3 - Fast, reliable, and able to handle wide range of mixture types including CO2, H2S, N2, H2 and He at concentrations up to pure inerts. More information about the method can be found `here <https://github.com/mwburgoyne/5_Component_PengRobinson_Z-Factor>`_
|
|
26
26
|
* - cmethod
|
|
27
27
|
- c_method
|
|
28
28
|
- Method for calculating gas critical properties. Defaults to 'PMC'
|
|
@@ -30,7 +30,7 @@ pyResToolBox uses class objects to track calculation options through the functio
|
|
|
30
30
|
|
|
31
31
|
+ 'SUT': Sutton with Wichert & Aziz non-hydrocarbon corrections
|
|
32
32
|
+ 'PMC': Piper, McCain & Corredor (1999) correlation, using equations 2.4 - 2.6 from 'Petroleum Reservoir Fluid Property Correlations' by W. McCain et al.
|
|
33
|
-
+ '
|
|
33
|
+
+ 'BNS': Correlation tuned to return the critical properties of the pure hydrocarbon component of a mixture, required for the 'BNS' (tuned Peng Robinson) Z-Factor method. Gas-condensate correlation by default; set ``ag=True`` for the associated-gas correlation (see *Associated gas in BNS*). More information about the method can be found `here <https://github.com/mwburgoyne/5_Component_PengRobinson_Z-Factor>`_
|
|
34
34
|
* - hydmethod
|
|
35
35
|
- hyd_method
|
|
36
36
|
- Method for calculating gas hydrate formation temperature. Defaults to 'TOWLER'.
|
|
@@ -77,6 +77,16 @@ Calculating gas Z-Factor of pure methane using DAK and PMC for critical properti
|
|
|
77
77
|
- **SUT / PMC**: ``tc`` and ``pc`` are the *mixture* pseudo-critical values. They replace the correlation output entirely.
|
|
78
78
|
- **BNS**: ``tc`` and ``pc`` are the *inert-free hydrocarbon* pseudo-critical values. They replace only the hydrocarbon pseudo-component in the EOS; inert Tc/Pc (CO2, H2S, N2, H2, He) remain the BNS internal per-component constants.
|
|
79
79
|
|
|
80
|
+
Associated gas in BNS
|
|
81
|
+
---------------------
|
|
82
|
+
|
|
83
|
+
BNS characterises the hydrocarbon part of the gas as one pseudo-component whose Tc and Pc come from the hydrocarbon specific gravity. Burgoyne, Nielsen & Stanko (2025) fitted two such correlations: one for gas condensates (the default) and one for associated gas, which gives a lower Pc at every specific gravity and a Tc within about 1.5% of the condensate value (lower below a hydrocarbon SG of about 1.2, higher above). Set ``ag=True`` to use the associated-gas correlation. It applies only with ``cmethod='BNS'`` and is ignored by other methods; a user-supplied ``tc`` or ``pc`` takes precedence. The hydrocarbon-inert binary interaction parameters are functions of the hydrocarbon Tc, so they follow the selected correlation, as in the regression behind the method. Results match the reference implementation (``AG=True`` in the `5_Component_PengRobinson_Z-Factor <https://github.com/mwburgoyne/5_Component_PengRobinson_Z-Factor>`_ repository) to about 1e-14 in Z and viscosity.
|
|
84
|
+
|
|
85
|
+
>>> gas.gas_tc_pc(sg=0.75, cmethod='BNS')
|
|
86
|
+
(401.2348975509288, 663.436579436262)
|
|
87
|
+
>>> gas.gas_tc_pc(sg=0.75, cmethod='BNS', ag=True)
|
|
88
|
+
(397.7239050745307, 653.8703430787151)
|
|
89
|
+
|
|
80
90
|
Helium in BNS
|
|
81
91
|
~~~~~~~~~~~~~
|
|
82
92
|
|
|
@@ -126,7 +136,7 @@ Calculating gas Z-Factor of pure CO2
|
|
|
126
136
|
|
|
127
137
|
.. code-block:: python
|
|
128
138
|
|
|
129
|
-
>>> gas.gas_z(p=2350, sg=0.68, degf = 180, co2 = 1.0, zmethod='
|
|
139
|
+
>>> gas.gas_z(p=2350, sg=0.68, degf = 180, co2 = 1.0, zmethod='BNS', cmethod='BNS')
|
|
130
140
|
0.5258309021348752
|
|
131
141
|
|
|
132
142
|
Calculating gas sg, and then gas Z-Factor of a mixture of 5% CO2, 10% H2S, 0% N2 and 20% H2 (remainder natural gas with MW = 19).
|
|
@@ -134,7 +144,7 @@ Calculating gas sg, and then gas Z-Factor of a mixture of 5% CO2, 10% H2S, 0% N2
|
|
|
134
144
|
.. code-block:: python
|
|
135
145
|
|
|
136
146
|
>>> gsg = gas.gas_sg(hc_mw = 19.0, co2 = 0.05, h2s = 0.10, n2 = 0, h2 = 0.20)
|
|
137
|
-
>>> gas.gas_z(p=2350, sg=gsg, degf = 180, co2 = 0.05, h2s = 0.10, n2 = 0, h2 = 0.20, zmethod='
|
|
147
|
+
>>> gas.gas_z(p=2350, sg=gsg, degf = 180, co2 = 0.05, h2s = 0.10, n2 = 0, h2 = 0.20, zmethod='BNS', cmethod='BNS')
|
|
138
148
|
0.9048153036714465
|
|
139
149
|
|
|
140
150
|
|
|
@@ -234,10 +244,13 @@ For ``cmethod='BNS'``, the returned values describe the *inert-free hydrocarbon*
|
|
|
234
244
|
- Molar fraction of Nitrogen. Defaults to zero if undefined
|
|
235
245
|
* - h2
|
|
236
246
|
- float
|
|
237
|
-
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to '
|
|
247
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to 'BNS'
|
|
238
248
|
* - he
|
|
239
249
|
- float
|
|
240
250
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
251
|
+
* - ag
|
|
252
|
+
- bool
|
|
253
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
241
254
|
* - cmethod
|
|
242
255
|
- string or c_method
|
|
243
256
|
- Method for calculating gas critical parameters. `Calculation Methods and Class Objects`_.
|
|
@@ -326,10 +339,13 @@ A float or list / array can be used for p, returning corresponding 1-D array of
|
|
|
326
339
|
- Molar fraction of Nitrogen. Defaults to zero if undefined
|
|
327
340
|
* - h2
|
|
328
341
|
- float
|
|
329
|
-
- Molar fraction of Hydrogen. Defaults to zero if undefined. zmethod and cmethod get
|
|
342
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. zmethod and cmethod get overridden to 'BNS' if positive fraction.
|
|
330
343
|
* - he
|
|
331
344
|
- float
|
|
332
345
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
346
|
+
* - ag
|
|
347
|
+
- bool
|
|
348
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
333
349
|
* - tc
|
|
334
350
|
- float
|
|
335
351
|
- Critical gas temperature (deg R, or K if metric=True). Uses cmethod correlation if not specified. For BNS, overrides only the hydrocarbon pseudo-component Tc (inert Tc stay at BNS internal constants)
|
|
@@ -371,7 +387,7 @@ pyrestoolbox.gas.gas_ug
|
|
|
371
387
|
|
|
372
388
|
gas_ug(p, sg, degf, zmethod ='DAK', cmethod = 'PMC', co2 = 0, h2s = 0, n2 = 0, h2 = 0, tc = 0, pc = 0, zee = 0, ugz = False, metric = False, he = 0) -> float or np.array
|
|
373
389
|
|
|
374
|
-
Returns gas viscosity (cP) using Lee, Gonzalez & Eakin (1966) correlation unless the '
|
|
390
|
+
Returns gas viscosity (cP) using Lee, Gonzalez & Eakin (1966) correlation unless the 'BNS' method for Z-Factor is selected in which case a tuned LBC method is used.
|
|
375
391
|
A float or list / array can be used for p, returning corresponding 1-D array of gas viscosities. The cmethod will be used to calculate critical gas parameters unless tc and/or pc are explicitly set to be non-zero. This option enables users to use pre-calculate gas critical properties and so avoid repeated duplicated critical property calculations when compute time is an issue
|
|
376
392
|
Furnishing a positive value for zee means it will be used instead of calculating Z, and setting ugz to True will return the viscosity * Z product instead of viscosity alone
|
|
377
393
|
|
|
@@ -409,10 +425,13 @@ Furnishing a positive value for zee means it will be used instead of calculating
|
|
|
409
425
|
- Molar fraction of Nitrogen. Defaults to zero if undefined
|
|
410
426
|
* - h2
|
|
411
427
|
- float
|
|
412
|
-
- Molar fraction of Hydrogen. Defaults to zero if undefined. Overrides methods to '
|
|
428
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. Overrides methods to 'BNS' if positive fraction.
|
|
413
429
|
* - he
|
|
414
430
|
- float
|
|
415
431
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
432
|
+
* - ag
|
|
433
|
+
- bool
|
|
434
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
416
435
|
* - tc
|
|
417
436
|
- float
|
|
418
437
|
- Critical gas temperature (deg R, or K if metric=True). Uses cmethod correlation if not specified. For BNS, overrides only the hydrocarbon pseudo-component Tc (inert Tc stay at BNS internal constants)
|
|
@@ -492,10 +511,13 @@ A float or list / array can be used for p, returning corresponding 1-D array of
|
|
|
492
511
|
- Molar fraction of Nitrogen. Defaults to zero if undefined
|
|
493
512
|
* - h2
|
|
494
513
|
- float
|
|
495
|
-
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to '
|
|
514
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to 'BNS'
|
|
496
515
|
* - he
|
|
497
516
|
- float
|
|
498
517
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
518
|
+
* - ag
|
|
519
|
+
- bool
|
|
520
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
499
521
|
* - tc
|
|
500
522
|
- float
|
|
501
523
|
- Critical gas temperature (deg R, or K if metric=True). Uses cmethod correlation if not specified. For BNS, overrides only the hydrocarbon pseudo-component Tc (inert Tc stay at BNS internal constants)
|
|
@@ -572,10 +594,13 @@ A float or list / array can be used for p, returning corresponding 1-D array of
|
|
|
572
594
|
- Molar fraction of Nitrogen. Defaults to zero if undefined
|
|
573
595
|
* - h2
|
|
574
596
|
- float
|
|
575
|
-
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to '
|
|
597
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to 'BNS'
|
|
576
598
|
* - he
|
|
577
599
|
- float
|
|
578
600
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
601
|
+
* - ag
|
|
602
|
+
- bool
|
|
603
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
579
604
|
* - tc
|
|
580
605
|
- float
|
|
581
606
|
- Critical gas temperature (deg R, or K if metric=True). Uses cmethod correlation if not specified. For BNS, overrides only the hydrocarbon pseudo-component Tc (inert Tc stay at BNS internal constants)
|
|
@@ -651,10 +676,13 @@ A float or list / array can be used for p, returning corresponding 1-D array of
|
|
|
651
676
|
- Molar fraction of Nitrogen. Defaults to zero if undefined
|
|
652
677
|
* - h2
|
|
653
678
|
- float
|
|
654
|
-
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to '
|
|
679
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to 'BNS'
|
|
655
680
|
* - he
|
|
656
681
|
- float
|
|
657
682
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
683
|
+
* - ag
|
|
684
|
+
- bool
|
|
685
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
658
686
|
* - tc
|
|
659
687
|
- float
|
|
660
688
|
- Critical gas temperature (deg R, or K if metric=True). Uses cmethod correlation if not specified. For BNS, overrides only the hydrocarbon pseudo-component Tc (inert Tc stay at BNS internal constants)
|
|
@@ -742,6 +770,9 @@ Departure enthalpy for lean hydrocarbon gas carries a systematic bias of about
|
|
|
742
770
|
* - he
|
|
743
771
|
- float
|
|
744
772
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
773
|
+
* - ag
|
|
774
|
+
- bool
|
|
775
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
745
776
|
* - tc
|
|
746
777
|
- float
|
|
747
778
|
- Overrides the hydrocarbon pseudo-component Tc (deg R, or K if metric=True). Inert Tc stay at BNS internal constants
|
|
@@ -890,10 +921,13 @@ A float or list / array can be used for poverz, returning corresponding 1-D arra
|
|
|
890
921
|
- Molar fraction of Nitrogen. Defaults to zero if undefined
|
|
891
922
|
* - h2
|
|
892
923
|
- float
|
|
893
|
-
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to '
|
|
924
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to 'BNS'
|
|
894
925
|
* - he
|
|
895
926
|
- float
|
|
896
927
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
928
|
+
* - ag
|
|
929
|
+
- bool
|
|
930
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
897
931
|
* - tc
|
|
898
932
|
- float
|
|
899
933
|
- Critical gas temperature (deg R, or K if metric=True). Uses cmethod correlation if not specified. For BNS, overrides only the hydrocarbon pseudo-component Tc (inert Tc stay at BNS internal constants)
|
|
@@ -970,10 +1004,13 @@ Returns gas specific gravity consistent with observed gas gradient. Calculated t
|
|
|
970
1004
|
- Molar fraction of Nitrogen. Defaults to zero if undefined
|
|
971
1005
|
* - h2
|
|
972
1006
|
- float
|
|
973
|
-
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to '
|
|
1007
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to 'BNS'
|
|
974
1008
|
* - he
|
|
975
1009
|
- float
|
|
976
1010
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
1011
|
+
* - ag
|
|
1012
|
+
- bool
|
|
1013
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
977
1014
|
* - tc
|
|
978
1015
|
- float
|
|
979
1016
|
- Critical gas temperature (deg R, or K if metric=True). Uses cmethod correlation if not specified. For BNS, overrides only the hydrocarbon pseudo-component Tc (inert Tc stay at BNS internal constants)
|
|
@@ -1052,10 +1089,13 @@ Integrates the equation: m(p) = 2 * p / (ug * z)
|
|
|
1052
1089
|
- Molar fraction of Nitrogen. Defaults to zero if undefined
|
|
1053
1090
|
* - h2
|
|
1054
1091
|
- float
|
|
1055
|
-
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to '
|
|
1092
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, cmethod will override to 'BNS'
|
|
1056
1093
|
* - he
|
|
1057
1094
|
- float
|
|
1058
1095
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
1096
|
+
* - ag
|
|
1097
|
+
- bool
|
|
1098
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
1059
1099
|
* - tc
|
|
1060
1100
|
- float
|
|
1061
1101
|
- Critical gas temperature (deg R, or K if metric=True). Uses cmethod correlation if not specified. For BNS, overrides only the hydrocarbon pseudo-component Tc (inert Tc stay at BNS internal constants)
|
|
@@ -1197,6 +1237,9 @@ A ``gas_pvt`` object can be provided instead of individual gas composition param
|
|
|
1197
1237
|
* - h2s
|
|
1198
1238
|
- float
|
|
1199
1239
|
- Molar fraction of H2S. Defaults to zero if undefined
|
|
1240
|
+
* - h2
|
|
1241
|
+
- float
|
|
1242
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, zmethod and cmethod are set to 'BNS'
|
|
1200
1243
|
* - S
|
|
1201
1244
|
- float
|
|
1202
1245
|
- Skin. Defaults to zero if undefined
|
|
@@ -1208,10 +1251,16 @@ A ``gas_pvt`` object can be provided instead of individual gas composition param
|
|
|
1208
1251
|
- Gas SG relative to air, Defaults to 0.75 if undefined
|
|
1209
1252
|
* - gas_pvt
|
|
1210
1253
|
- GasPVT
|
|
1211
|
-
- GasPVT object. If provided, sg/co2/h2s/n2/h2/he/zmethod/cmethod/tc/pc are extracted from it
|
|
1254
|
+
- GasPVT object. If provided, sg/co2/h2s/n2/h2/he/ag/zmethod/cmethod/tc/pc are extracted from it
|
|
1212
1255
|
* - metric
|
|
1213
1256
|
- bool
|
|
1214
1257
|
- If True, inputs/outputs use Eclipse METRIC units. Defaults to False
|
|
1258
|
+
* - he
|
|
1259
|
+
- float
|
|
1260
|
+
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
1261
|
+
* - ag
|
|
1262
|
+
- bool
|
|
1263
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
1215
1264
|
|
|
1216
1265
|
.. list-table:: Returns
|
|
1217
1266
|
:widths: 10 15 40
|
|
@@ -1358,15 +1407,24 @@ A ``gas_pvt`` object can be provided instead of individual gas composition param
|
|
|
1358
1407
|
* - h2s
|
|
1359
1408
|
- float
|
|
1360
1409
|
- Molar fraction of H2S. Defaults to zero if undefined
|
|
1410
|
+
* - h2
|
|
1411
|
+
- float
|
|
1412
|
+
- Molar fraction of Hydrogen. Defaults to zero if undefined. If positive fraction, zmethod and cmethod are set to 'BNS'
|
|
1361
1413
|
* - sg
|
|
1362
1414
|
- float
|
|
1363
1415
|
- Gas SG relative to air, Defaults to 0.75 if undefined
|
|
1364
1416
|
* - gas_pvt
|
|
1365
1417
|
- GasPVT
|
|
1366
|
-
- GasPVT object. If provided, sg/co2/h2s/n2/h2/he/zmethod/cmethod/tc/pc are extracted from it
|
|
1418
|
+
- GasPVT object. If provided, sg/co2/h2s/n2/h2/he/ag/zmethod/cmethod/tc/pc are extracted from it
|
|
1367
1419
|
* - metric
|
|
1368
1420
|
- bool
|
|
1369
1421
|
- If True, inputs/outputs use Eclipse METRIC units. Defaults to False
|
|
1422
|
+
* - he
|
|
1423
|
+
- float
|
|
1424
|
+
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
1425
|
+
* - ag
|
|
1426
|
+
- bool
|
|
1427
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
1370
1428
|
|
|
1371
1429
|
.. list-table:: Returns
|
|
1372
1430
|
:widths: 10 15 40
|
|
@@ -1934,6 +1992,9 @@ Stores gas composition and method choices. Pre-computes critical temperature and
|
|
|
1934
1992
|
* - he
|
|
1935
1993
|
- float
|
|
1936
1994
|
- Molar fraction of Helium. Defaults to 0. Keyword, last in the signature (new in 3.8.3). Like h2, a positive fraction forces zmethod and cmethod to 'BNS'; see *Helium in BNS*
|
|
1995
|
+
* - ag
|
|
1996
|
+
- bool
|
|
1997
|
+
- BNS only. If True, the hydrocarbon pseudo-component Tc and Pc come from the associated-gas correlation instead of the default gas-condensate one; see *Associated gas in BNS*. Defaults to False. Keyword, last in the signature (new in 3.8.4). User-supplied tc/pc take precedence
|
|
1937
1998
|
* - zmethod
|
|
1938
1999
|
- string or z_method
|
|
1939
2000
|
- Method for Z-factor calculation. Defaults to 'DAK'
|
|
@@ -46,7 +46,7 @@ Example notebooks
|
|
|
46
46
|
=========================== ====================================================
|
|
47
47
|
File Content
|
|
48
48
|
=========================== ====================================================
|
|
49
|
-
examples.ipynb Worked examples across the modules plus BNS
|
|
49
|
+
examples.ipynb Worked examples across the modules plus BNS demonstrations
|
|
50
50
|
nodal_examples.ipynb Multi-segment nodal framework examples
|
|
51
51
|
nodal_hydrate_demo.ipynb VLP, VFPPROD, nodal solutions and hydrate analysis
|
|
52
52
|
=========================== ====================================================
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"- **2, 3, and 4 segment** completions\n",
|
|
13
13
|
"- **Inflow (IPR)** and **outflow (VLP)** curves with operating point solutions\n",
|
|
14
14
|
"- Multiple VLP methods: Hagedorn-Brown (HB), Beggs & Brill (BB), Woldesemayat-Ghajar (WG)\n",
|
|
15
|
-
"-
|
|
15
|
+
"- BNS gas PVT method (tuned 5-component Peng-Robinson EOS)"
|
|
16
16
|
]
|
|
17
17
|
},
|
|
18
18
|
{
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"- 8,000 ft of 2.441\" tubing\n",
|
|
103
103
|
"- 2,000 ft of 4.892\" casing below the tubing shoe\n",
|
|
104
104
|
"\n",
|
|
105
|
-
"Uses
|
|
105
|
+
"Uses BNS gas PVT with 5% CO2."
|
|
106
106
|
]
|
|
107
107
|
},
|
|
108
108
|
{
|
|
@@ -111,8 +111,8 @@
|
|
|
111
111
|
"metadata": {},
|
|
112
112
|
"outputs": [],
|
|
113
113
|
"source": [
|
|
114
|
-
"# Define GasPVT with
|
|
115
|
-
"gpvt_1 = gas.GasPVT(sg=0.70, co2=0.05, zmethod='
|
|
114
|
+
"# Define GasPVT with BNS method\n",
|
|
115
|
+
"gpvt_1 = gas.GasPVT(sg=0.70, co2=0.05, zmethod='BNS', cmethod='BNS')\n",
|
|
116
116
|
"print(f'Gas Tc = {gpvt_1.tc:.1f} deg R, Pc = {gpvt_1.pc:.1f} psia')\n",
|
|
117
117
|
"print(f'Z @ 3000 psia, 220F = {gpvt_1.z(3000, 220):.4f}')\n",
|
|
118
118
|
"print(f'Viscosity @ 3000 psia, 220F = {gpvt_1.viscosity(3000, 220):.4f} cP')"
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
"- 3,000 ft of 2.441\" tubing — building angle (30 deg deviation)\n",
|
|
170
170
|
"- 4,000 ft of 4.892\" casing — high angle (60 deg deviation)\n",
|
|
171
171
|
"\n",
|
|
172
|
-
"BB and WG are suitable for deviated wells. Uses
|
|
172
|
+
"BB and WG are suitable for deviated wells. Uses BNS gas PVT."
|
|
173
173
|
]
|
|
174
174
|
},
|
|
175
175
|
{
|
|
@@ -226,7 +226,7 @@
|
|
|
226
226
|
"- 3,000 ft of 2.441\" tubing — tangent section (55 deg)\n",
|
|
227
227
|
"- 4,000 ft of 4.892\" casing — near-horizontal (80 deg)\n",
|
|
228
228
|
"\n",
|
|
229
|
-
"Uses WG method (well-suited for all inclinations) and
|
|
229
|
+
"Uses WG method (well-suited for all inclinations) and BNS gas PVT."
|
|
230
230
|
]
|
|
231
231
|
},
|
|
232
232
|
{
|
|
@@ -548,9 +548,9 @@
|
|
|
548
548
|
"metadata": {},
|
|
549
549
|
"source": [
|
|
550
550
|
"---\n",
|
|
551
|
-
"## Example 9: Gas Well with H2 Blend —
|
|
551
|
+
"## Example 9: Gas Well with H2 Blend — BNS Method Auto-Selection\n",
|
|
552
552
|
"\n",
|
|
553
|
-
"When hydrogen is present, GasPVT automatically selects
|
|
553
|
+
"When hydrogen is present, GasPVT automatically selects BNS for both z-factor and critical property methods. \n",
|
|
554
554
|
"3-segment well with 10% H2 in the gas."
|
|
555
555
|
]
|
|
556
556
|
},
|
|
@@ -560,7 +560,7 @@
|
|
|
560
560
|
"metadata": {},
|
|
561
561
|
"outputs": [],
|
|
562
562
|
"source": [
|
|
563
|
-
"# GasPVT with H2 — auto-selects BNS
|
|
563
|
+
"# GasPVT with H2 — auto-selects BNS\n",
|
|
564
564
|
"gpvt_h2 = gas.GasPVT(sg=0.55, co2=0.02, h2=0.10)\n",
|
|
565
565
|
"print(f'Z-method: {gpvt_h2.zmethod}')\n",
|
|
566
566
|
"print(f'C-method: {gpvt_h2.cmethod}')\n",
|
|
@@ -592,7 +592,7 @@
|
|
|
592
592
|
"print(f\"Operating BHP: {result_h2['bhp']:.0f} psia\")\n",
|
|
593
593
|
"\n",
|
|
594
594
|
"plot_nodal(result_h2, well_type='gas',\n",
|
|
595
|
-
" title='Example 9: Gas + 10% H2 Well — 3 Segments (
|
|
595
|
+
" title='Example 9: Gas + 10% H2 Well — 3 Segments (BNS Auto-Selected)');"
|
|
596
596
|
]
|
|
597
597
|
},
|
|
598
598
|
{
|
|
@@ -792,7 +792,7 @@
|
|
|
792
792
|
"\n",
|
|
793
793
|
"| Example | Well Type | Segments | Trajectory | VLP Method | Key Feature |\n",
|
|
794
794
|
"|---------|-----------|----------|------------|------------|-------------|\n",
|
|
795
|
-
"| 1 | Gas | 2 | Vertical | BB | Basic multi-segment,
|
|
795
|
+
"| 1 | Gas | 2 | Vertical | BB | Basic multi-segment, BNS PVT |\n",
|
|
796
796
|
"| 2 | Gas | 3 | Deviated | BB | Build + high-angle sections |\n",
|
|
797
797
|
"| 3 | Gas | 4 | Near-horizontal | WG | 4-segment trajectory, WG method |\n",
|
|
798
798
|
"| 4 | Gas | 1 vs 3 | Vertical vs Deviated | BB | VLP comparison overlay |\n",
|
|
@@ -800,7 +800,7 @@
|
|
|
800
800
|
"| 6 | Oil | 3 | Deviated | BB | Deviated oil with OilPVT |\n",
|
|
801
801
|
"| 7 | Oil | 4 | Near-horizontal | BB | 4-segment horizontal oil |\n",
|
|
802
802
|
"| 8 | Gas | 3 | Deviated | HB/BB/WG/GRAY | Method comparison |\n",
|
|
803
|
-
"| 9 | Gas+H2 | 3 | Deviated | BB | H2 blend,
|
|
803
|
+
"| 9 | Gas+H2 | 3 | Deviated | BB | H2 blend, BNS auto-selection |\n",
|
|
804
804
|
"| 10 | Gas | 4 | Deviated | WG | THP sensitivity |\n",
|
|
805
805
|
"| 11 | Oil | 2 vs 4 | Vertical vs Deviated | BB | Side-by-side nodal comparison |\n",
|
|
806
806
|
"| 12 | Gas | 2/3/4 | Progressive deviation | BB | fbhp table comparison |"
|
|
@@ -22,7 +22,7 @@ pyResToolBox uses class objects to track calculation options through the functio
|
|
|
22
22
|
|
|
23
23
|
+ 'DAK': Dranchuk & Abou-Kassem (1975) using from Equations 2.7-2.8 from 'Petroleum Reservoir Fluid Property Correlations' by W. McCain et al. - Slowest, Most Accurate
|
|
24
24
|
+ 'HY': Hall & Yarborough (1973) - Second Fastest
|
|
25
|
-
+ '
|
|
25
|
+
+ 'BNS': Fast, can handle 100% inerts and Hydrogen. Tuned 5 component Peng Robinson EOS model, Burgoyne, Nielsen & Stanko (2025), `SPE-229932-MS <https://doi.org/10.2118/229932-MS>`_
|
|
26
26
|
* - cmethod
|
|
27
27
|
- c_method
|
|
28
28
|
- Method for calculating gas critical properties. Defaults to 'PMC'
|
|
@@ -30,7 +30,7 @@ pyResToolBox uses class objects to track calculation options through the functio
|
|
|
30
30
|
|
|
31
31
|
+ 'SUT': Sutton with Wichert & Aziz non-hydrocarbon corrections
|
|
32
32
|
+ 'PMC': Piper, McCain & Corredor (1999) correlation, using equations 2.4 - 2.6 from 'Petroleum Reservoir Fluid Property Correlations' by W. McCain et al.
|
|
33
|
-
+ '
|
|
33
|
+
+ 'BNS': Burgoyne, Nielsen & Stanko (2025) hydrocarbon pseudo-critical correlation. If h2 > 0, or the 'BNS' method is used for Z-Factor then 'BNS' will automatically be used
|
|
34
34
|
* - pbmethod
|
|
35
35
|
- pb_method
|
|
36
36
|
- Method for calculating bubble point pressure of oil. Defaults to 'VALMC' ('VELAR' for make_bot_og).
|