from __future__ import annotations
from dataclasses import dataclass
from typing import Optional
from ResSimpy.Wellhead import Wellhead
[docs]@dataclass(kw_only=True)
class NexusWellhead(Wellhead):
"""Attributes
well (str): Associates the wellhead to the well. (WELL)
name (str): The name of the wellhead. (NAME)
type (str): The type of well. (TYPE)
depth (float): The depth of the wellhead (DEPTH)
x_pos (float): The x-coordinate location of the wellhead (X)
y_pos (float): The y-coordinate location of the wellhead (Y)
pvt_method (int): The PVT table numbers to be used for the well and wellhead connections. (IPVT)
water_method (int): The Water PVT table numbers to be used for the well and wellhead connections. (IWAT)
bat_method (int): The separator battery numbers associated with the well and wellhead connections. (IBAT)
measured_depth_in (float): The measured depth at the start of the well interval (MDIN)
measured_depth_out (float): The measured depth at the end of the well interval (MDOUT)
hyd_method (int): The hydraulic method used. (METHOD)
number (int): The well number. (NUMBER)
diameter (float): The wellbore diameter (DIAM)
inner_diameter (float): The well inner diameter (INNERDIAM)
roughness (float): The well roughness. (ROUGHNESS)
length (float): The length of the well (LENGTH)
temperature (float): The temperature of the fluid in the well (TEMP)
elevation_profile (str): The well elevation profile. (ELEVPR)
temperature_profile (str): The well temperature profile. (TEMPPR)
dp_add (float): The additional pressure drop across the well (DPADD)
rate_mult (float): The rate multiplier for the well. (RATEMULT)
delta_depth (float): The depth difference between the two points in the connection (DDEPTH)
heat_transfer_coeff (float): The heat transfer coefficient for the well (HTC)
dt_add (float): The additional temperature difference across the well (DTADD).
"""
pvt_method: Optional[int] = None
water_method: Optional[int] = None
bat_method: Optional[int] = None
measured_depth_in: Optional[float] = None
measured_depth_out: Optional[float] = None
hyd_method: Optional[int] = None
number: Optional[int] = None
diameter: Optional[float] = None
inner_diameter: Optional[float] = None
roughness: Optional[float] = None
length: Optional[float] = None
temperature: Optional[float] = None
elevation_profile: Optional[str] = None
temperature_profile: Optional[str] = None
dp_add: Optional[float] = None
rate_mult: Optional[float] = None
delta_depth: Optional[float] = None
heat_transfer_coeff: Optional[float] = None
dt_add: Optional[float] = None
[docs] def __init__(self, properties_dict: dict[str, None | int | str | float]) -> None:
super(Wellhead, self).__init__({})
for key, prop in properties_dict.items():
self.__setattr__(key, prop)
[docs] @staticmethod
def get_keyword_mapping() -> dict[str, tuple[str, type]]:
"""Gets the mapping of nexus keywords to attribute definitions."""
nexus_mapping = {
'WELL': ('well', str),
'NAME': ('name', str),
'TYPE': ('wellhead_type', str),
'DEPTH': ('depth', float),
'X': ('x_pos', float),
'Y': ('y_pos', float),
'IPVT': ('pvt_method', int),
'IWAT': ('water_method', int),
'IBAT': ('bat_method', int),
'MDIN': ('measured_depth_in', float),
'MDOUT': ('measured_depth_out', float),
'METHOD': ('hyd_method', int),
'NUMBER': ('number', int),
'DIAM': ('diameter', float),
'INNERDIAM': ('inner_diameter', float),
'ROUGHNESS': ('roughness', float),
'LENGTH': ('length', float),
'TEMP': ('temperature', float),
'ELEVPR': ('elevation_profile', str),
'TEMPPR': ('temperature_profile', str),
'DPADD': ('dp_add', float),
'RATEMULT': ('rate_mult', float),
'DDEPTH': ('delta_depth', float),
'HTC': ('heat_transfer_coeff', float),
'DTADD': ('dt_add', float),
}
return nexus_mapping