Source code for bluebonnet.fluids.water
"""PVT and viscosity for water from the correlations provided by McCain."""
from __future__ import annotations
import numpy as np
from numpy.typing import NDArray
[docs]
def b_water_McCain(
temperature: float, pressure: float | NDArray[np.float64]
) -> float | NDArray[np.float64]:
"""Calculate the b-factor for water.
Parameters
----------
temperature : float
water temperature in Fahrenheit
pressure: np.ndarray
water pressure in psia
Returns
-------
b_w : float
b-factor (reservoir bbl / standard bbl)
Examples
--------
>>> b_water_McCain(400, 3000)
"""
dV_dp = (
-1.95301e-9 * pressure * temperature
- 1.72834e-13 * pressure**2 * temperature
- 3.58922e-7 * pressure
- 2.25341e-10 * pressure**2
)
dV_dt = -1.0001e-2 + 1.33391e-4 * temperature + 5.50654e-7 * temperature**2
return (1 + dV_dp) * (1 + dV_dt)
[docs]
def b_water_McCain_dp(
temperature: float, pressure: float | NDArray[np.float64]
) -> float | NDArray[np.float64]:
"""Calculate the derivative of the b-factor for water with respect to pressure.
Parameters
----------
temperature : float
water temperature in Fahrenheit
pressure: float | NDArray
water pressure in psia
Returns
-------
b_w_dp : float
derivative of b-factor (reservoir bbl / standard bbl) / psi
Examples
--------
>>> b_water_McCain_dp(400, 3000)
"""
d2V_dp2 = (
-1.95301e-9 * temperature
- 2 * 1.72834e-13 * pressure * temperature
- 3.58922e-7
- 2 * 2.25341e-10 * pressure
)
dV_dt = -1.0001e-2 + 1.33391e-4 * temperature + 5.50654e-7 * temperature**2
return d2V_dp2 * (1 + dV_dt)
[docs]
def compressibility_water_McCain(
temperature: float, pressure: float | NDArray[np.float64], salinity: float
) -> float | NDArray[np.float64]:
"""Calculate the compressibility for water.
Parameters
----------
temperature : float
water temperature in Fahrenheit
pressure: float | NDArray
water pressure in psia
salinity: float
salinity in weight percent total dissolved solids
Returns
-------
c_w : float
compressibility of water in 1/psi
Examples
--------
>>> density_water_McCain(400, 3000, 15)
"""
c_w = 1 / (7.033 * pressure + 0.5415 * salinity - 537 * temperature + 403300.0)
return c_w
[docs]
def density_water_McCain(
temperature: float, pressure: float | NDArray[np.float64], salinity: float
) -> float | NDArray[np.float64]:
r"""Calculate the density for water.
Parameters
----------
temperature : float
water temperature in Fahrenheit
pressure: float | NDArray
water pressure in psia
salinity: float
salinity in weight percent total dissolved solids
Returns
-------
rho_w : float
density in lb-mass / cu ft, :math:`\rho_w`
Examples
--------
>>> density_water_McCain(400, 3000, 15)
"""
b_water = b_water_McCain(temperature, pressure)
density_stp = 62.368 + 0.438603 * salinity + 1.60074e-3 * salinity**2
return density_stp / b_water
[docs]
def viscosity_water_McCain(
temperature: float, pressure: float | NDArray[np.float64], salinity: float
) -> float | NDArray[np.float64]:
r"""Calculate the viscosity for water, Using McCain (1991).
Parameters
----------
temperature : float
water temperature in Fahrenheit
pressure: float
water pressure in psia
salinity: float
salinity in weight percent total dissolved solids
Returns
-------
mu_w : float
viscosity in centipoise, :math:`\mu_w`
Examples
--------
>>> viscosity_water_McCain(400, 3000, 15)
0.2627774655403418
"""
A = 109.574 - 8.40564 * salinity + 0.313314 * salinity**2 + 8.72213e-3 * salinity**3
B = (
1.12166
- 2.63951e-2 * salinity
+ 6.79461e-4 * salinity**2
+ 5.47119e-5 * salinity**3
- 1.55586e-6 * salinity**4
)
mu_water = A * temperature**-B * (0.9994 + 4.0295e-5 * pressure + 3.1062e-9 * pressure**2)
return mu_water