pyrestoolbox 3.8.0__tar.gz → 3.8.1__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.0 → pyrestoolbox-3.8.1}/Cargo.lock +1 -1
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/Cargo.toml +1 -1
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/PKG-INFO +1 -1
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyproject.toml +1 -1
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/changelist.rst +4 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/nodal/nodal.py +10 -1
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/march.rs +4 -1
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/.github/complexity-baseline.json +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/.github/scripts/check_complexity.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/.github/workflows/build-wheels.yml +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/.github/workflows/tests.yml +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/.gitignore +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/LICENSE +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/MANIFEST.in +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/README.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/ResToolbox/privacy_policy.md +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/build_pure_python.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/clippy.toml +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/mcp/Dockerfile +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/mcp/README.md +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/mcp/pyproject.toml +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/mcp/pyrestoolbox_mcp/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/mcp/pyrestoolbox_mcp/serialize.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/mcp/pyrestoolbox_mcp/server.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/mcp/tests/test_server.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/_accelerator.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/_lib_dielectric.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/_lib_maoduan_viscosity.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/_lib_pitzer_params.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/_lib_salting_library.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/_lib_vle_engine.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/appelo_volumes.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/brine.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/iapws_viscosity.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/jones_dole_viscosity.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/kestin_nacl_viscosity.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/pr_vphi.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/viscosity_route.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/brine/vphi_route.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/classes/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/classes/classes.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/constants/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/constants/constants.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/dca/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/dca/dca.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/brine.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/dca.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/examples.ipynb +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/gas.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/img/bot.png +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/img/bot_PVTO.png +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/img/bot_img.png +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/img/dry_gas.png +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/img/grid_sat_df.png +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/img/influence.png +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/img/properties_df.png +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/img/sgof.png +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/img/swof.png +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/index.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/layer.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/library.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/matbal.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/nodal.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/nodal_examples.ipynb +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/nodal_hydrate_demo.ipynb +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/oil.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/plyasunov.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/recommend.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/sensitivity.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/docs/simtools.rst +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/gas/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/gas/_hydrate.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/gas/gas.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/layer/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/layer/layer.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/library/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/library/component_library.xlsx +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/library/library.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/matbal/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/matbal/matbal.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/nodal/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_compressibility.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_constants.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_correlations.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_density.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_harmonize.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_pvt_class.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_rate.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_separator.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_tables.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/oil/_utils.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/plyasunov/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/plyasunov/iapws_if97.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/plyasunov/plyasunov_model.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/plyasunov/water_properties.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/recommend/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/recommend/recommend.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/sensitivity/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/sensitivity/sensitivity.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/shared_fns/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/shared_fns/shared_fns.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/simtools/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/simtools/_aquifer.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/simtools/_decks.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/simtools/_pvt_tables.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/simtools/_relperm.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/simtools/_vfp.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/simtools/simtools.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/validate/__init__.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/pyrestoolbox/validate/validate.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/setup.cfg +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/setup.py +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/bessel.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/brine_visc/mod.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/brine_visc/salt.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/brine_visc/water.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/critical_properties/mod.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/dca/hyperbolic.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/dca/mod.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/dca/ransac.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/gas_viscosity/mod.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/gwr.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/lib.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/matbal/mod.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/matbal/objective.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/oil/density.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/oil/mod.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/pseudopressure.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/spycher_pruess/mod.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/spycher_pruess/solubility.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vle/alpha.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vle/bip.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vle/components.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vle/eos.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vle/flash.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vle/fugacity.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vle/k_init.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vle/mod.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vle/rachford_rice.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/constants.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/friction.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/holdup_bb.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/holdup_gray.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/holdup_wg.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/ift.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/mod.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/pvt_helpers.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/src/vlp/static_column.rs +0 -0
- {pyrestoolbox-3.8.0 → pyrestoolbox-3.8.1}/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.1"
|
|
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"}]
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
Changelist in 3.8.1:
|
|
2
|
+
|
|
3
|
+
- **NODAL: condensate that drops out in the tubing is treated as a saturated light liquid, not a dead oil.** The gas VLP marches gave dropped-out condensate the Beggs-Robinson dead-oil viscosity (Rs = 0), which is 2-5 times too viscous for a liquid in equilibrium with gas (up to about 16 cP at low temperature) and made the Woldesemayat-Ghajar BHP with dropout exceed the no-dropout value. The dropped liquid now takes the Beggs-Robinson live-oil viscosity at the Standing (1947) solution GOR at local pressure and temperature, with the bubble point at the local pressure (0.25-1.6 cP for 45-55 API condensate), in Python and Rust. Only gas wells with ``pr`` supplied (condensate dropout on) are affected; for 5 MMscf/d with CGR 10, 10 bbl/d water and 3000 psia reservoir pressure (6000 ft tubing), BHP moves from 877.6 to 850.4 psia for WG and from 635.6 to 652.9 psia for HB (its holdup correlation runs through the liquid viscosity number), with Gray and BB within 0.4%. With dropout on, WG BHP is now below the no-dropout value, as it should be with less liquid in the tubing.
|
|
4
|
+
|
|
1
5
|
Changelist in 3.8.0:
|
|
2
6
|
|
|
3
7
|
- **NODAL: water viscosity in the VLP marches comes from the library's brine model (documented values move).** The marches used a private water-viscosity formula that evaluated a natural-log fit in degC as a base-10 fit in degF, so water viscosity was 12-30x too low (0.054 cP at 100 degF against 0.68; floored at 0.01 cP above about 200 degF), understating liquid friction and holdup in every method. Both the Python and Rust marches now use the same gas-free brine viscosity ``brine_props`` reports (IAPWS-2008 water with IF97 density, Jones-Dole NaCl ratio, Kestin pressure factor), with the salinity taken from ``wsg`` via McCain's gamma_w = 1 + 0.695e-6 ppm; Rust carries a port of that chain matching Python to 1e-14. Wells without water are unchanged. With water the change is modest for small water rates (the documented gas examples with 10 bbl/d move by -0.1 to -45.6 psi; WG moves most because realistic viscosity puts the liquid Reynolds number below Chisholm's laminar threshold) and larger with more water (5 MMscf/d with 500 bbl/d: HB +9%, WG +5%). The pure-Python march is slower (about 15 ms per ``fbhp`` against 3); the Rust path is about 0.2-0.3 ms.
|
|
@@ -1048,8 +1048,17 @@ def _condensate_dropout(cgr, qg_mmscfd, p_avg, pr, osg, qw_bwpd, wsg):
|
|
|
1048
1048
|
|
|
1049
1049
|
|
|
1050
1050
|
def _condensate_vis(pr, cgr_local, gsg, api, temp_f, p_avg, oil_vis):
|
|
1051
|
+
"""Viscosity (cP) of condensate dropped out in the tubing.
|
|
1052
|
+
|
|
1053
|
+
The dropped liquid is in equilibrium with the gas at the local pressure, so
|
|
1054
|
+
it is a saturated live liquid: Beggs-Robinson live-oil viscosity at the
|
|
1055
|
+
Standing (1947) solution GOR at local p and T, with Pb = p. Before 3.8.1 it
|
|
1056
|
+
was given the dead-oil viscosity (Rs = 0), 2-5x too viscous for a light
|
|
1057
|
+
condensate (up to ~16 cP at low temperature).
|
|
1058
|
+
"""
|
|
1051
1059
|
if pr > 14.7 and cgr_local > 0.01:
|
|
1052
|
-
|
|
1060
|
+
rs_sat = _standing_rs(gsg, p_avg, temp_f, api)
|
|
1061
|
+
return _oil_viscosity_full(gsg, api, temp_f, rsb=rs_sat, pb=p_avg,
|
|
1053
1062
|
press_psia=p_avg)
|
|
1054
1063
|
return oil_vis
|
|
1055
1064
|
|
|
@@ -86,8 +86,11 @@ fn condensate_vis(
|
|
|
86
86
|
pr: f64, cgr_local: f64, gsg: f64, api: f64, temp_f: f64,
|
|
87
87
|
p_avg: f64, oil_vis: f64,
|
|
88
88
|
) -> f64 {
|
|
89
|
+
// Dropped condensate is a saturated live liquid: Beggs-Robinson at the
|
|
90
|
+
// Standing solution GOR at local p, T with Pb = p (mirrors Python _condensate_vis)
|
|
89
91
|
if pr > 14.7 && cgr_local > 0.01 {
|
|
90
|
-
|
|
92
|
+
let rs_sat = standing_rs(gsg, p_avg, temp_f, api);
|
|
93
|
+
oil_viscosity_full(gsg, api, temp_f, rs_sat, p_avg, p_avg, 1.0, 1.0)
|
|
91
94
|
} else {
|
|
92
95
|
oil_vis
|
|
93
96
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|