bluebonnet.fluids.gas ===================== .. py:module:: bluebonnet.fluids.gas .. autoapi-nested-parse:: Gas pvt properties, using Dranchuk and Abou-Kassem's correlations. Functions --------- .. autoapisummary:: bluebonnet.fluids.gas.make_nonhydrocarbon_properties bluebonnet.fluids.gas.z_factor_DAK bluebonnet.fluids.gas.z_factor_hallyarbrough bluebonnet.fluids.gas.b_factor_DAK bluebonnet.fluids.gas.density_DAK bluebonnet.fluids.gas.compressibility_DAK bluebonnet.fluids.gas.viscosity_Sutton bluebonnet.fluids.gas.pseudocritical_point_Sutton bluebonnet.fluids.gas.pseudopressure_Hussainy Module Contents --------------- .. py:function:: make_nonhydrocarbon_properties(nitrogen: float, hydrogen_sulfide: float, co2: float, *others: dict[str, float]) -> numpy.typing.NDArray Create an array of the nonhydrocarbon molecules present. :param nitrogen: compositional fraction of N2 :type nitrogen: float :param hydrogen_sulfide: compositional fraction of H2S :type hydrogen_sulfide: float :param co2: compositional fraction of CO2 :type co2: float :param \*others: list of tuples of (name, compositional fraction, molecular weight, critical temperature (in R), critical pressure (psia)) for other non-hydrocarbon molecules :type \*others: list(tuple) :returns: **non_hydrocrabon_properties** -- structured array of non-hydrocarbon fluid properties :rtype: NDArray .. rubric:: Examples >>> make_nonhydrocarbon_properties(0.03, 0.012, 0.018) .. py:function:: z_factor_DAK(temperature: float, pressure: float, temperature_pseudocritical: float, pressure_pseudocritical: float) -> float Calculate the z-factor for gas using Dranchuk and Abou-Kassem (1975). :param temperature: reservoir temperature in Fahrenheit. :type temperature: float :param pressure: reservoir pressure in psia :type pressure: float :param temperature_pseudocritical: pseudocritical temperature in Fahrenheit. :type temperature_pseudocritical: float :param pressure_pseudocritical: pseudocritical pressure in psia :type pressure_pseudocritical: float :returns: **z_fact** -- z_factor (dimensionless) :rtype: float .. rubric:: Examples >>> z_factor_DAK(400, 100, -102, 649) 0.9969013621293381 .. py:function:: z_factor_hallyarbrough(pressure: float, temperature: float) -> float Get Z-factor for gas from Hall-Yarbrough's iterative approach. :param p: pressure (psi) :type p: float | NDArray[np.float64] :param t: temperature (Rankine) :type t: float :returns: **zfact** -- z-factor :rtype: float: .. rubric:: References `Hall-Yarbrough estimation `_ .. py:function:: b_factor_DAK(temperature: float, pressure: float, temperature_pseudocritical: float, pressure_pseudocritical: float, temperature_standard: float = 60, pressure_standard: float = 14.7) -> float Calculate the b-factor for gas using Dranchuk and Abou-Kassem (1975). :param temperature: reservoir temperature in Fahrenheit. :type temperature: float :param pressure: reservoir pressure in psia :type pressure: float :param temperature_pseudocritical: pseudocritical temperature in Fahrenheit. :type temperature_pseudocritical: float :param pressure_pseudocritical: pseudocritical pressure in psia :type pressure_pseudocritical: float :returns: **b_g** -- b-factor (reservoir barrels / scf) :rtype: float .. rubric:: Examples >>> b_factor_DAK(400, 100, -102, 649, 60, 14.7) 0.04317415921420302 .. py:function:: density_DAK(temperature: float, pressure: float, temperature_pseudocritical: float, pressure_pseudocritical: float, specific_gravity: float) -> float Calculate the density for gas using Dranchuk and Abou-Kassem (1975). :param temperature: reservoir temperature in Fahrenheit. :type temperature: float :param pressure: reservoir pressure in psia :type pressure: float :param temperature_pseudocritical: pseudocritical temperature in Fahrenheit. :type temperature_pseudocritical: float :param pressure_pseudocritical: pseudocritical pressure in psia :type pressure_pseudocritical: float :param specific_gravity: specific gravity relative to air (molecular weight/ molecular weight) :type specific_gravity: float :returns: **rho_g** -- density_gas (lb / cubic ft) :rtype: float .. rubric:: Examples >>> density_DAK(400, 100, -102, 649, 0.65) # returns 0.2143 .. py:function:: compressibility_DAK(temperature: float, pressure: float, temperature_pseudocritical: float, pressure_pseudocritical: float) -> float Calculate the compressibility for gas using Dranchuk and Abou-Kassem (1975). :param temperature: reservoir temperature in Fahrenheit. :type temperature: float :param pressure: reservoir pressure in psia :type pressure: float :param temperature_pseudocritical: pseudocritical temperature in Fahrenheit. :type temperature_pseudocritical: float :param pressure_pseudocritical: pseudocritical pressure in psia :type pressure_pseudocritical: float :returns: **c_g** -- compressibility (1 / psi) :rtype: float .. rubric:: Examples >>> compressibility_DAK(400, 104.7, -102, 649) 0.009576560643021937 .. py:function:: viscosity_Sutton(temperature: float, pressure: float, temperature_pseudocritical: float, pressure_pseudocritical: float, specific_gravity: float) -> float Calculate the viscosity for gas using Sutton's Fudamental PVT Calculations (2007). :param temperature: reservoir temperature in Fahrenheit. :type temperature: float :param pressure: reservoir pressure in psia :type pressure: float :param temperature_pseudocritical: pseudocritical temperature in Fahrenheit. :type temperature_pseudocritical: float :param pressure_pseudocritical: pseudocritical pressure in psia :type pressure_pseudocritical: float :param specific_gravity: specific gravity relative to air (density/density) :type specific_gravity: float :returns: **mu_g** -- viscosity_gas (centipoise) :rtype: float .. rubric:: Examples >>> viscosity_Sutton(400, 100, -102, 649, 0.65) 0.01652719692109309 .. py:function:: pseudocritical_point_Sutton(specific_gravity: float, non_hydrocarbon_properties: numpy.typing.NDArray, fluid: str = 'wet gas') -> tuple[float, float] Calculate the pseudocritical pressure and temperature from Sutton (2007). :param specific_gravity: specific gravity relative to air (molecular weight / molecular weight) :type specific_gravity: float :param non_hydrocarbon_properties: record array of non-hydrocarbon fluid properties **MUST HAVE H2S as second row, CO2 as third row** :type non_hydrocarbon_properties: np.NDArray :param fluid: whether the gas is 'dry gas' or 'wet gas' :type fluid: string :returns: * **pseudocritical_temp** (*float*) -- temperature_pseudocritical (F) * **pseudocritical_p** (*float*) -- pressure_pseudocritical (psia) .. rubric:: Examples >>> non_hydrocarbon_properties = make_nonhydrocarbon_properties(0.03, 0.012, 0.018) >>> points_pseudocritical_Sutton(0.65, non_hydrocarbon_properties, "dry gas") (-102.21827232417752, 648.510797253794) >>> non_hydrocarbon_properties = make_nonhydrocarbon_properties(0.05, 0.01, 0.04) >>> points_pseudocritical_Sutton(0.8, non_hydrocarbon_properties, "wet gas") (-72.20351526841193, 653.2582064200534) .. py:function:: pseudopressure_Hussainy(temperature: float, pressure: float, temperature_pseudocritical: float, pressure_pseudocritical: float, specific_gravity: float, pressure_standard: float = 14.7) -> float Calculate the pseudopressure for gas using Al Hussainy (1966). :param temperature: reservoir temperature in Fahrenheit. :type temperature: float :param pressure: reservoir pressure in psia :type pressure: float :param temperature_pseudocritical: pseudocritical temperature in Fahrenheit. :type temperature_pseudocritical: float :param pressure_pseudocritical: pseudocritical pressure in psia :type pressure_pseudocritical: float :param specific_gravity: specific gravity relative to air (density/density) :type specific_gravity: float :returns: **m** -- pseudopressure (psi^2 / centipoise) :rtype: float .. rubric:: Examples >>> pseudopressure_Hussainy(400, 100, -102, 649, 0.65) 593363.7626437937