from __future__ import annotations
from dataclasses import dataclass
from typing import Optional
from ResSimpy.Enums.UnitsEnum import UnitSystem
from ResSimpy.NodeConnection import NodeConnection
[docs]@dataclass
class NexusNodeConnection(NodeConnection):
"""Attributes
hyd_method: hydraulic lift correlation method used (METHOD)
pvt_method: pvt method number (IPVT)
water_method: water method number (IWAT)
bat_method: bat method number (IBAT)
elevation_profile: elevation profile as a string (ELEVPR)
measured_depth_in: measured depth of the input node (MDIN)
measured_depth_out: measured depth of the output node (MDOUT)
diameter: diameter of the connecting pipe (DIAMETER)
inner_diameter: outer diameter of the pipe (INNERDIAM)
roughness: roughness of the pipe (ROUGHNESS)
heat_transfer_coeff: the heat transfer coefficient of the pipe (HTC)
temperature_profile: temperature profile used for the connection. (TEMPPR)
length: length of the connection (LENGTH)
delta_depth: change in depth between node_in and node_out (DDEPTH)
connection_number: used in place of name as a numbered connection (NUMBER)
seawater_profile: seawater profile used. (SEAWPR)
rate_mult: multiplier to the rate (RATEMULT)
polymer: whether polymer is a stream here (POLYMER)
dp_add: Additional delta pressure (DPADD).
"""
hyd_method: Optional[str | int] = None
pvt_method: Optional[int] = None
bat_method: Optional[int] = None
water_method: Optional[int] = None
elevation_profile: Optional[str] = None
measured_depth_in: Optional[float] = None
measured_depth_out: Optional[float] = None
diameter: Optional[float] = None
inner_diameter: Optional[float] = None
roughness: Optional[float] = None
heat_transfer_coeff: Optional[float] = None
temperature_profile: Optional[float] = None
length: Optional[float] = None
delta_depth: Optional[float] = None
connection_number: Optional[int] = None
seawater_profile: Optional[str] = None
rate_mult: Optional[float] = None
polymer: Optional[str] = None
unit_system: Optional[UnitSystem] = None
dp_add: Optional[float] = None
dt_add: Optional[float] = None
[docs] def __init__(self, properties_dict: dict[str, None | int | str | float]) -> None:
# call the init of the DataObjectMixin
super(NodeConnection, 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 = {
'NAME': ('name', str),
'NODEIN': ('node_in', str),
'NODEOUT': ('node_out', str),
'TYPE': ('con_type', str),
'METHOD': ('hyd_method', str),
'IPVT': ('pvt_method', int),
'IWAT': ('water_method', int),
'IBAT': ('bat_method', int),
'ELEVPR': ('elevation_profile', str),
'MDIN': ('measured_depth_in', float),
'MDOUT': ('measured_depth_out', float),
'DIAM': ('diameter', float),
'INNERDIAM': ('inner_diameter', float),
'ROUGHNESS': ('roughness', float),
'HTC': ('heat_transfer_coeff', float),
'TEMPPR': ('temperature_profile', str),
'LENGTH': ('length', float),
'DDEPTH': ('delta_depth', float),
'NUMBER': ('connection_number', int),
'SEAWPR': ('seawater_profile', str),
'RATEMULT': ('rate_mult', float),
'POLYMER': ('polymer', str),
'DPADD': ('dp_add', float),
'DTADD': ('dt_add', float),
}
return nexus_mapping