pywellgeo.well_data
pywellgeo.well_data.dc1dwell
Dc1dwell
Class to calculate the productivity of a well in a confined, infinite, homogeneous reservoir
__init__
__init__(
k: int,
H: int,
L: int,
tvd: List[int],
temp: List[Union[float, int]],
salinity: List[int],
skin: List[float],
ahd: List[int],
rw: List[float],
roughness: float,
tgrad: Optional[float] = 0.031,
tsurface: Optional[float] = 10,
use_tgrad: Optional[bool] = False,
useheatloss: Optional[bool] = False,
) -> None
instantiate a dc1dwell object, tvd, temp, salinity, skin, ahd, rw are arrays of length 2, first index is production well, second index is injection well
:param k: permeability of the aquifer [mDarcy :param H: thickness of the aquifer [m] :param L: distance between the wells [m] :param tvd: true vertical depth of top of the reservoir in the wells [m] ndarray len = 2 :param temp: temperature of the wells ( tinj and tres) [C] ndarray len = 2 :param salinity: salinity [ppm] ndarray len = 2 :param skin: skin factor [-] ndarray len = 2 :param ahd: along hole depth of the wells [m] up till the bottom of the reservoir, ndarray len = 2 :param rw: well radius ndarray len = 2 :param roughness: roughness of the wells [ milli-inch ]
update_params
update the parameters of the dc1dwell object :param kwargs: parameter dictonary to update
:return:
get_params
get the parameters of the dc1dwell object :return: dictionary with the parameters of the dc1dwell object
from_configfile
classmethod
create a dc1dwell object from a configfile
:param configfile: yaml file with the parameters of the dc1dwell object :return: dc1dwell object
getPseudoKop
calculate the kick off depth for a linearized well trajectory, such that the Ahd for the top corresponds to ahd = kod + sqrt( 0.25*L^2 + (tvd-kod)^2) :return:
calculateQvol
calculateQvol(
target_dp: int,
initial_guess: Optional[float] = 0.05,
tol: Optional[float] = 0.0001,
max_iter: Optional[int] = 100,
) -> float64
Use Newton-Raphson method to find the flow rate that results in the target pressure drop.
:param target_dp: Target pressure drop :param initial_guess: Initial guess for the flow rate [m3/s] :param tol: Tolerance for the solution (default is 1e-4) :param max_iter: Maximum number of iterations :return: Flow rate that results in the target pressure drop
calculateDP_qvol
calculate the pressure drop and production temperature of the wells for a given flow rate (if self.qvol is set to positive number) or it caluclates achievable flow rate and production temperature for the given flowrate :return: sets self.qvol or self.dp, and sets self.tprod.
productivity
calculate the productivity index of the wells (i.e. pressure at reservoir level required for a unit flow rate [m3/s]
:return: productivity index
dp_friction
calculate the frictional pressure drop in the wells
find_kod_binary_search
find_kod_binary_search(
ahd: float64,
L: int,
tvd: float64,
tol: Optional[float] = 1e-06,
max_iter: Optional[int] = 1000,
) -> float64
Find the solution for kod in the equation: ahd = kod + sqrt(0.25*L^2 + (tvd-kod)^2) using binary search.
Parameters
ahd : float Along hole depth. L : float Distance between the wells. tvd : float True vertical depth. tol : float, optional Tolerance for the solution (default is 1e-6). max_iter : int, optional Maximum number of iterations (default is 1000).
Returns
kod : float Kick off depth.