Source code for pydhn.components.abstract_component

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute, EPFL
#
# SPDX-FileContributor: Roberto Boghetti <roberto.boghetti@idiap.ch>
#
# SPDX-License-Identifier: AGPL-3.0-only


"""Class for base abstract component"""


from typing import Any

import numpy as np

from pydhn.default_values import DELTA_P
from pydhn.default_values import DELTA_P_FRICTION
from pydhn.default_values import INLET_TEMPERATURE
from pydhn.default_values import MASS_FLOW
from pydhn.default_values import OUTLET_TEMPERATURE
from pydhn.default_values import TEMPERATURE
from pydhn.utilities import docstring_parameters


[docs] class Component: """ Base class for components """
[docs] @docstring_parameters( TEMPERATURE=TEMPERATURE, MASS_FLOW=MASS_FLOW, DELTA_P=DELTA_P, ) def __init__( self, temperature: float = TEMPERATURE, mass_flow: float = MASS_FLOW, delta_p: float = DELTA_P, **kwargs ) -> None: """ Init Component Parameters ---------- temperature : float, optional Initial temperature of the fluid (°C). The default is {TEMPERATURE}. mass_flow : float, optional Initial mass flow (kg/s). The default is {MASS_FLOW}. delta_p : float, optional Initial pressure difference (Pa). The default is {DELTA_P}. **kwargs Arbitrary keyword arguments. Returns ------- None """ # Component class and type self._class = "branch_component" self._type = "base_component" self._is_ideal = True # Initialize the component self._initialized = False self._attrs = kwargs self._reinitialize(overwrite=False)
def __getitem__(self, key): if key == "component_type": return self._get_type() elif key == "component_class": return self._get_class() elif key == "is_ideal": return self._get_is_ideal() att = self._run_control_logic(key) if att is None: return self._attrs.get(key, np.nan) else: return att def _reinitialize(self, overwrite=False): keys = [ "mass_flow", "delta_p", "delta_p_friction", "temperature", "inlet_temperature", "outlet_temperature", ] values = [ MASS_FLOW, DELTA_P, DELTA_P_FRICTION, TEMPERATURE, INLET_TEMPERATURE, OUTLET_TEMPERATURE, ] for k, v in zip(keys, values): if k not in self._attrs.keys(): self.set(key=k, value=v) else: if overwrite: self.set(key=k, value=v) self._initialized = True
[docs] def set(self, key: str, value: Any) -> None: """ Sets the specified value for the attribute. Parameters ---------- key : str Attribute name. value : Any Attribute value. Returns ------- None """ self._attrs.update({key: value})
def _run_control_logic(self, key): return None def _get_type(self): return self._type def _get_class(self): return self._class def _get_is_ideal(self): return self._is_ideal def _compute_delta_p(self, fluid, ts_id=None): return 0.0, 0.0 def _compute_temperatures(self, fluid, soil, t_in, ts_id=None): # Return t_in, t_out, t_avg, t_out_der, delta_q return ( 0.0, 0.0, 0.0, 0.0, 0, )