Source code for dragonfly_energy.des.plant

# coding=utf-8
"""Heating/Cooling plant in a district thermal system."""
from honeybee.typing import float_positive, float_in_range


[docs] class HeatingPlant(object): """Represents the heating plant in a district system. Args: hw_setpoint: A number for the temperature of hot water in the DES in degrees C. (Default: 55). heating_limit: A number for the nominal district heating load in Watts. (Default: 5000). hw_mass_flow: A number for the nominal heating water mass flow rate in kg/s. (Default: 1.0). hw_valve_pressure_drop: A number for the boiler isolation valve pressure drop in Pa. (Default: 6000). Properties: * hw_setpoint * heating_limit * hw_mass_flow * hw_valve_pressure_drop """ __slots__ = ('_hw_setpoint', '_heating_limit', '_hw_mass_flow', '_hw_valve_pressure_drop') def __init__( self, hw_setpoint=55, heating_limit=5000, hw_mass_flow=1.0, hw_valve_pressure_drop=6000 ): """Initialize HeatingPlant.""" self.hw_setpoint = hw_setpoint self.heating_limit = heating_limit self.hw_mass_flow = hw_mass_flow self.hw_valve_pressure_drop = hw_valve_pressure_drop
[docs] @classmethod def from_dict(cls, data): """Create a HeatingPlant object from a dictionary Args: data: A dictionary representation of an HeatingPlant object in the format below. .. code-block:: python { 'type': 'HeatingPlant', 'hw_setpoint': 55, # float for hot water setpoint [C] 'heating_limit': 5000 # float for system heat flow [W] 'hw_mass_flow': 1.0, # float for system mass flow rate [kg/s] 'hw_valve_pressure_drop': 6000 # float for boiler pressure drop [Pa] } """ hw_t = data['hw_setpoint'] if 'hw_setpoint' in data else 55 heat_f = data['heating_limit'] if 'heating_limit' in data else 5000 hw_f = data['hw_mass_flow'] if 'hw_mass_flow' in data else 1.0 hw_p = data['hw_valve_pressure_drop'] if 'hw_valve_pressure_drop' in data else 6000 return cls(hw_t, heat_f, hw_f, hw_p)
@property def hw_setpoint(self): """Get or set a number for the hot water setpoint in degrees C.""" return self._hw_setpoint @hw_setpoint.setter def hw_setpoint(self, value): self._hw_setpoint = \ float_in_range(value, 24, 100, 'hot water setpoint') @property def heating_limit(self): """Get or set a number for the nominal system heat flow in Watts.""" return self._heating_limit @heating_limit.setter def heating_limit(self, value): self._heating_limit = float_positive(value, 'heating plant heating limit') @property def hw_mass_flow(self): """Get or set a number for the system hot water mass flow in kg/s.""" return self._hw_mass_flow @hw_mass_flow.setter def hw_mass_flow(self, value): self._hw_mass_flow = \ float_positive(value, 'heating plant hot water mass flow') @property def hw_valve_pressure_drop(self): """Get or set a number for the boiler isolation valve pressure drop in Pa.""" return self._hw_valve_pressure_drop @hw_valve_pressure_drop.setter def hw_valve_pressure_drop(self, value): self._hw_valve_pressure_drop = \ float_positive(value, 'heating plant valve pressure drop')
[docs] def to_dict(self): """Get HeatingPlant dictionary.""" base = {'type': 'HeatingPlant'} base['hw_setpoint'] = self.hw_setpoint base['heating_limit'] = self.heating_limit base['hw_mass_flow'] = self.hw_mass_flow base['hw_valve_pressure_drop'] = self.hw_valve_pressure_drop return base
[docs] def duplicate(self): """Get a copy of this object.""" return self.__copy__()
def __copy__(self): return HeatingPlant( self.hw_setpoint, self.heating_limit, self.hw_mass_flow, self.hw_valve_pressure_drop )
[docs] def ToString(self): """Overwrite .NET ToString method.""" return self.__repr__()
def __repr__(self): """Represent HeatingPlant.""" return 'HeatingPlant: [temperature: {}C]'.format(self.hw_setpoint)
[docs] class CoolingPlant(object): """Represents the cooling plant in a district system. Args: chw_setpoint: A number for the temperature of chilled water in the DES in degrees C. (Default: 6). cooling_limit: A number for the nominal district cooling load in Watts. (Default: 8000). chw_mass_flow: A number for the nominal chilled water mass flow rate in kg/s. (Default: 10.0). min_chw_mass_flow: A number for the minimum chilled water mass flow rate in kg/s. (Default: 10.0). cw_mass_flow: A number for the nominal condenser water mass flow rate in kg/s. (Default: 1.0). chw_pump_head: A number for the chilled water pump head in Pa. (Default: 300000). cw_pump_head: A number for the condenser water pump head in Pa. (Default: 200000). chw_pressure_drop: A number for the nominal chilled water (evaporator) side pressure drop in Pa. (Default: 55000). cw_pressure_drop: A number for the nominal cooling water (condenser) side pressure drop in Pa. (Default: 80000). pressure_drop_setpoint: A number for the chilled water circuit pressure drop setpoint in Pa. (Default: 50000). chw_valve_pressure_drop: A number for the chiller isolation valve pressure drop in Pa. (Default: 6000). cw_valve_pressure_drop: A number for the cooling tower isolation valve pressure drop in Pa. (Default: 6000). cooling_tower_fan_power: A number for the cooling tower fan power in Watts. (Default: 5000). cooling_tower_delta_temperature: A number for the nominal water temperature difference of the tower in degrees C. (Default: 7). approach_delta_temperature: A number for the approach temperature difference in degrees C. (Default: 3). cw_inlet_temperature: A number for the nominal cooling water inlet temperature in degrees C. (Default: 35). outdoor_wb_temperature: A number for the design air wet-bulb temperature in degrees C. (Default: 25). Properties: * chw_setpoint * cooling_limit * chw_mass_flow * min_chw_mass_flow * cw_mass_flow * chw_pump_head * cw_pump_head * chw_pressure_drop * cw_pressure_drop * pressure_drop_setpoint * chw_valve_pressure_drop * cw_valve_pressure_drop * cooling_tower_fan_power * cooling_tower_delta_temperature * approach_delta_temperature * cw_inlet_temperature * outdoor_wb_temperature """ __slots__ = ( '_chw_setpoint', '_cooling_limit', '_chw_mass_flow', '_min_chw_mass_flow', '_cw_mass_flow', '_chw_pump_head', '_cw_pump_head', '_chw_pressure_drop', '_cw_pressure_drop', '_pressure_drop_setpoint', '_chw_valve_pressure_drop', '_cw_valve_pressure_drop', '_cooling_tower_fan_power', '_cooling_tower_delta_temperature', '_approach_delta_temperature', '_cw_inlet_temperature', '_outdoor_wb_temperature' ) def __init__( self, chw_setpoint=6, cooling_limit=8000, chw_mass_flow=10, min_chw_mass_flow=10, cw_mass_flow=10, chw_pump_head=300000, cw_pump_head=200000, chw_pressure_drop=55000, cw_pressure_drop=80000, pressure_drop_setpoint=50000, chw_valve_pressure_drop=6000, cw_valve_pressure_drop=6000, cooling_tower_fan_power=5000, cooling_tower_delta_temperature=7, approach_delta_temperature=3, cw_inlet_temperature=35, outdoor_wb_temperature=25 ): """Initialize CoolingPlant.""" self.chw_setpoint = chw_setpoint self.cooling_limit = cooling_limit self.chw_mass_flow = chw_mass_flow self.min_chw_mass_flow = min_chw_mass_flow self.cw_mass_flow = cw_mass_flow self.chw_pump_head = chw_pump_head self.cw_pump_head = cw_pump_head self.chw_pressure_drop = chw_pressure_drop self.cw_pressure_drop = cw_pressure_drop self.pressure_drop_setpoint = pressure_drop_setpoint self.chw_valve_pressure_drop = chw_valve_pressure_drop self.cw_valve_pressure_drop = cw_valve_pressure_drop self.cooling_tower_fan_power = cooling_tower_fan_power self.cooling_tower_delta_temperature = cooling_tower_delta_temperature self.approach_delta_temperature = approach_delta_temperature self.cw_inlet_temperature = cw_inlet_temperature self.outdoor_wb_temperature = outdoor_wb_temperature
[docs] @classmethod def from_dict(cls, data): """Create a CoolingPlant object from a dictionary Args: data: A dictionary representation of an CoolingPlant object in the format below. .. code-block:: python { 'type': 'CoolingPlant', 'chw_setpoint': 55, # float for hot water setpoint [C] 'cooling_limit': 5000 # float for system cool flow [W] 'chw_mass_flow': 10.0, # float for system mass flow rate [kg/s] 'min_chw_mass_flow': 10.0 # float for minimum mass flow rate [kg/s] 'cw_mass_flow': 10.0 # float for condenser mass flow rate [kg/s] 'chw_pump_head': 300000, # float for chilled water pump head [Pa] 'cw_pump_head': 200000, # float for condenser water pump head [Pa] 'chw_pressure_drop': 55000, # float for evaporator pressure drop [Pa] 'cw_pressure_drop': 80000, # float for condenser pressure drop [Pa] 'pressure_drop_setpoint': 50000, # float for pressure drop setpoint [Pa] 'chw_valve_pressure_drop': 6000, # float for chilled valve pressure drop [Pa] 'cw_valve_pressure_drop': 6000, # float for condenser valve pressure drop [Pa] 'cooling_tower_fan_power': 5000, # float for cooling tower fan [W] 'cooling_tower_delta_temperature': 7, # float for tower delta T [dC] 'approach_delta_temperature': 3, # float for approach delta T [dC] 'cw_inlet_temperature': 35, # float for condenser water inlet T [C] 'outdoor_wb_temperature': 25, # float for outdoor wet bulb T [C] } """ chw_t = data['chw_setpoint'] if 'chw_setpoint' in data else 55 cool_f = data['cooling_limit'] if 'cooling_limit' in data else 5000 chw_f = data['chw_mass_flow'] if 'chw_mass_flow' in data else 10 min_chw_f = data['min_chw_mass_flow'] if 'min_chw_mass_flow' in data else 10 cw_f = data['cw_mass_flow'] if 'cw_mass_flow' in data else 10 chw_p = data['chw_pump_head'] if 'chw_pump_head' in data else 300000 cw_p = data['cw_pump_head'] if 'cw_pump_head' in data else 200000 chw_pd = data['chw_pressure_drop'] if 'chw_pressure_drop' in data else 55000 cw_pd = data['cw_pressure_drop'] if 'cw_pressure_drop' in data else 80000 pds = data['pressure_drop_setpoint'] if 'pressure_drop_setpoint' in data else 50000 chw_vpd = data['chw_valve_pressure_drop'] \ if 'chw_valve_pressure_drop' in data else 6000 cw_vpd = data['cw_valve_pressure_drop'] \ if 'cw_valve_pressure_drop' in data else 6000 ct_fp = data['cooling_tower_fan_power'] \ if 'cooling_tower_fan_power' in data else 5000 ct_dt = data['cooling_tower_delta_temperature'] \ if 'cooling_tower_delta_temperature' in data else 7 a_dt = data['approach_delta_temperature'] \ if 'approach_delta_temperature' in data else 3 cwi_t = data['cw_inlet_temperature'] if 'cw_inlet_temperature' in data else 35 wb_t = data['outdoor_wb_temperature'] if 'outdoor_wb_temperature' in data else 25 return cls( chw_t, cool_f, chw_f, min_chw_f, cw_f, chw_p, cw_p, chw_pd, cw_pd, pds, chw_vpd, cw_vpd, ct_fp, ct_dt, a_dt, cwi_t, wb_t )
@property def chw_setpoint(self): """Get or set a number for the chilled water setpoint in degrees C.""" return self._chw_setpoint @chw_setpoint.setter def chw_setpoint(self, value): self._chw_setpoint = float_in_range(value, 0, 20, 'chilled water setpoint') @property def cooling_limit(self): """Get or set a number for the nominal district cooling load in Watts.""" return self._cooling_limit @cooling_limit.setter def cooling_limit(self, value): self._cooling_limit = float_positive(value, 'cooling plant cooling limit') @property def chw_mass_flow(self): """Get or set a number for the system chilled water mass flow in kg/s.""" return self._chw_mass_flow @chw_mass_flow.setter def chw_mass_flow(self, value): self._chw_mass_flow = \ float_positive(value, 'cooling plant chilled water mass flow') @property def min_chw_mass_flow(self): """Get or set a number for the minimum chilled water mass flow in kg/s.""" return self._min_chw_mass_flow @min_chw_mass_flow.setter def min_chw_mass_flow(self, value): self._min_chw_mass_flow = \ float_positive(value, 'cooling plant condenser water mass flow') @property def cw_mass_flow(self): """Get or set a number for the system condenser water mass flow in kg/s.""" return self._cw_mass_flow @cw_mass_flow.setter def cw_mass_flow(self, value): self._cw_mass_flow = \ float_positive(value, 'cooling plant condenser water mass flow') @property def chw_pump_head(self): """Get or set a number for the system chilled water pump head in Pa.""" return self._chw_pump_head @chw_pump_head.setter def chw_pump_head(self, value): self._chw_pump_head = \ float_positive(value, 'cooling plant chilled water pump head') @property def cw_pump_head(self): """Get or set a number for the system condenser water pump head in Pa.""" return self._chw_pump_head @cw_pump_head.setter def cw_pump_head(self, value): self._cw_pump_head = \ float_positive(value, 'cooling plant condenser water pump head') @property def chw_pressure_drop(self): """Get or set a number for the evaporator pressure drop in Pa.""" return self._chw_pressure_drop @chw_pressure_drop.setter def chw_pressure_drop(self, value): self._chw_pressure_drop = \ float_positive(value, 'cooling plant chilled water pressure drop') @property def cw_pressure_drop(self): """Get or set a number for the condenser pressure drop in Pa.""" return self._cw_pressure_drop @cw_pressure_drop.setter def cw_pressure_drop(self, value): self._cw_pressure_drop = \ float_positive(value, 'cooling plant condenser water pressure drop') @property def pressure_drop_setpoint(self): """Get or set a number for the chilled water circuit pressure drop in Pa.""" return self._pressure_drop_setpoint @pressure_drop_setpoint.setter def pressure_drop_setpoint(self, value): self._pressure_drop_setpoint = \ float_positive(value, 'cooling plant pressure drop setpoint') @property def chw_valve_pressure_drop(self): """Get or set a number for the chiller isolation valve pressure drop in Pa.""" return self._chw_valve_pressure_drop @chw_valve_pressure_drop.setter def chw_valve_pressure_drop(self, value): self._chw_valve_pressure_drop = \ float_positive(value, 'cooling plant chilled water valve pressure drop') @property def cw_valve_pressure_drop(self): """Get or set a number for the cooling tower isolation valve pressure drop in Pa. """ return self._cw_valve_pressure_drop @cw_valve_pressure_drop.setter def cw_valve_pressure_drop(self, value): self._cw_valve_pressure_drop = \ float_positive(value, 'cooling plant condenser water valve pressure drop') @property def cooling_tower_fan_power(self): """Get or set a number for the cooling tower fan power in Watts.""" return self._cooling_tower_fan_power @cooling_tower_fan_power.setter def cooling_tower_fan_power(self, value): self._cooling_tower_fan_power = float_positive(value, 'cooling tower fan power') @property def cooling_tower_delta_temperature(self): """Get or set a number for the nominal water temperature difference in degrees C. """ return self._cooling_tower_delta_temperature @cooling_tower_delta_temperature.setter def cooling_tower_delta_temperature(self, value): self._cooling_tower_delta_temperature = \ float_in_range(value, 0, 20, 'cooling tower delta temperature') @property def approach_delta_temperature(self): """Get or set a number for the approach temperature difference in degrees C.""" return self._approach_delta_temperature @approach_delta_temperature.setter def approach_delta_temperature(self, value): self._approach_delta_temperature = \ float_in_range(value, 0, 20, 'approach delta temperature') @property def cw_inlet_temperature(self): """Get or set a number for the condenser water inlet temperature in degrees C. """ return self._cw_inlet_temperature @cw_inlet_temperature.setter def cw_inlet_temperature(self, value): self._cw_inlet_temperature = \ float_in_range(value, 0, 50, 'condenser water inlet temperature') @property def outdoor_wb_temperature(self): """Get or set a number for the condenser water inlet temperature in degrees C. """ return self._outdoor_wb_temperature @outdoor_wb_temperature.setter def outdoor_wb_temperature(self, value): self._outdoor_wb_temperature = \ float_in_range(value, 0, 50, 'outdoor wet bulb inlet temperature')
[docs] def to_dict(self): """Get CoolingPlant dictionary.""" base = {'type': 'CoolingPlant'} base['chw_setpoint'] = self.chw_setpoint base['cooling_limit'] = self.cooling_limit base['chw_mass_flow'] = self.chw_mass_flow base['min_chw_mass_flow'] = self.min_chw_mass_flow base['cw_mass_flow'] = self.cw_mass_flow base['chw_pump_head'] = self.chw_pump_head base['cw_pump_head'] = self.cw_pump_head base['chw_pressure_drop'] = self.chw_pressure_drop base['cw_pressure_drop'] = self.cw_pressure_drop base['pressure_drop_setpoint'] = self.pressure_drop_setpoint base['chw_valve_pressure_drop'] = self.chw_valve_pressure_drop base['cw_valve_pressure_drop'] = self.cw_valve_pressure_drop base['cooling_tower_fan_power'] = self.cooling_tower_fan_power base['cooling_tower_delta_temperature'] = self.cooling_tower_delta_temperature base['approach_delta_temperature'] = self.approach_delta_temperature base['cw_inlet_temperature'] = self.cw_inlet_temperature base['outdoor_wb_temperature'] = self.outdoor_wb_temperature return base
[docs] def duplicate(self): """Get a copy of this object.""" return self.__copy__()
def __copy__(self): return CoolingPlant( self.chw_setpoint, self.cooling_limit, self.chw_mass_flow, self.min_chw_mass_flow, self.cw_mass_flow, self.chw_pump_head, self.cw_pump_head, self.chw_pressure_drop, self.cw_pressure_drop, self.pressure_drop_setpoint, self.chw_valve_pressure_drop, self.cw_valve_pressure_drop, self.cooling_tower_fan_power, self.cooling_tower_delta_temperature, self.approach_delta_temperature, self.cw_inlet_temperature, self.outdoor_wb_temperature )
[docs] def ToString(self): """Overwrite .NET ToString method.""" return self.__repr__()
def __repr__(self): """Represent CoolingPlant.""" return 'CoolingPlant: [temperature: {}C]'.format(self.chw_setpoint)