Source code for dragonfly_energy.properties.story

# coding=utf-8
"""Story Energy Properties."""
from honeybee_energy.programtype import ProgramType
from honeybee_energy.constructionset import ConstructionSet
from honeybee_energy.hvac._base import _HVACSystem
from honeybee_energy.shw import SHWSystem

from honeybee_energy.lib.constructionsets import generic_construction_set


[docs]class StoryEnergyProperties(object): """Energy Properties for Dragonfly Story. Args: host: A dragonfly_core Story object that hosts these properties. construction_set: A honeybee ConstructionSet object to specify all default constructions for the Faces of the Story. If None, the Story will use the honeybee default construction set, which is not representative of a particular building code or climate zone. Default: None. Properties: * host * construction_set """ __slots__ = ('_host', '_construction_set') def __init__(self, host, construction_set=None): """Initialize Story energy properties.""" self._host = host self.construction_set = construction_set @property def host(self): """Get the Story object hosting these properties.""" return self._host @property def construction_set(self): """Get or set the Story ConstructionSet object. If not set, it will be set by the parent Building or will be the Honeybee default generic ConstructionSet. """ if self._construction_set is not None: # set by the user return self._construction_set elif self._host.has_parent: # set by parent building return self._host.parent.properties.energy.construction_set else: return generic_construction_set @construction_set.setter def construction_set(self, value): if value is not None: assert isinstance(value, ConstructionSet), \ 'Expected ConstructionSet. Got {}'.format(type(value)) value.lock() # lock in case construction set has multiple references self._construction_set = value
[docs] def averaged_program_type(self, identifier=None, timestep_resolution=1): """Get a ProgramType that is averaged across all of the children Room2Ds. The weights used in the averaging process are the floor area weights. Args: identifier: A unique ID text string for the new averaged ProgramType. Must be < 100 characters and not contain any EnergyPlus special characters. This will be used to identify the object across a model and in the exported IDF. If None, the resulting ProgramType will use the identifier of the host Building. (Default: None) timestep_resolution: An optional integer for the timestep resolution at which the schedules will be averaged. Any schedule details smaller than this timestep will be lost in the averaging process. Default: 1. """ # get the default identifier of the ProgramType if None identifier = identifier if identifier is not None else \ '{}_Program'.format(self.host.identifier) # compute the floor area weights flr_areas = [room.floor_area for room in self.host.room_2ds] total_area = sum(flr_areas) weights = [room_area / total_area for room_area in flr_areas] # compute the averaged program program_types = [room.properties.energy.program_type for room in self.host.room_2ds] return ProgramType.average( identifier, program_types, weights, timestep_resolution)
[docs] def set_all_room_2d_program_type(self, program_type): """Set all of the children Room2Ds of this Story to have the same ProgramType. Args: program_type: A ProgramType to assign to all children Room2Ds. """ assert isinstance(program_type, ProgramType), 'Expected ProgramType for Story ' \ 'set_all_room_2d_program_type. Got {}'.format(type(program_type)) for room_2d in self.host.room_2ds: room_2d.properties.energy.program_type = program_type
[docs] def set_all_room_2d_hvac(self, hvac, conditioned_only=True): """Set all children Room2Ds of this Story to have the same HVAC system. Args: hvac: An HVAC system with properties that will be assigned to all children Room2Ds. conditioned_only: Boolean to note whether the input hvac should only be applied to rooms that are already conditioned. If False, the hvac will be applied to all rooms. (Default: True). """ assert isinstance(hvac, _HVACSystem), 'Expected HVACSystem for Story.' \ 'set_all_room_2d_hvac. Got {}'.format(type(hvac)) new_hvac = hvac.duplicate() new_hvac._identifier = '{}_{}'.format(hvac.identifier, self.host.identifier) for room_2d in self.host.room_2ds: if not conditioned_only or room_2d.properties.energy.is_conditioned: room_2d.properties.energy.hvac = new_hvac
[docs] def add_default_ideal_air(self): """Add a default IdealAirSystem to all children Room2Ds of this Story. The identifier of the systems will be derived from the room identifiers. """ for room_2d in self.host.room_2ds: room_2d.properties.energy.add_default_ideal_air()
[docs] def set_all_room_2d_shw(self, shw): """Set all children Room2Ds of this Story to have the same HVAC system. Args: shw: An HVAC system with properties that will be assigned to all children Room2Ds. """ assert isinstance(shw, SHWSystem), 'Expected SHWSystem for Story.' \ 'set_all_room_2d_shw. Got {}'.format(type(shw)) new_shw = shw.duplicate() new_shw._identifier = '{}_{}'.format(shw.identifier, self.host.identifier) for room_2d in self.host.room_2ds: room_2d.properties.energy.shw = new_shw
[docs] @classmethod def from_dict(cls, data, host): """Create StoryEnergyProperties from a dictionary. Note that the dictionary must be a non-abridged version for this classmethod to work. Args: data: A dictionary representation of StoryEnergyProperties. host: A Story object that hosts these properties. """ assert data['type'] == 'StoryEnergyProperties', \ 'Expected StoryEnergyProperties. Got {}.'.format(data['type']) new_prop = cls(host) if 'construction_set' in data and data['construction_set'] is not None: new_prop.construction_set = \ ConstructionSet.from_dict(data['construction_set']) return new_prop
[docs] def apply_properties_from_dict(self, abridged_data, construction_sets): """Apply properties from a StoryEnergyPropertiesAbridged dictionary. Args: abridged_data: A StoryEnergyPropertiesAbridged dictionary (typically coming from a Model). construction_sets: A dictionary of ConstructionSets with identifiers of the sets as keys, which will be used to re-assign construction_sets. """ if 'construction_set' in abridged_data and \ abridged_data['construction_set'] is not None: self.construction_set = construction_sets[abridged_data['construction_set']]
[docs] def to_dict(self, abridged=False): """Return Story energy properties as a dictionary. Args: abridged: Boolean for whether the full dictionary of the Story should be written (False) or just the identifier of the the individual properties (True). Default: False. """ base = {'energy': {}} base['energy']['type'] = 'StoryEnergyProperties' if not \ abridged else 'StoryEnergyPropertiesAbridged' # write the ConstructionSet into the dictionary if self._construction_set is not None: base['energy']['construction_set'] = \ self._construction_set.identifier if abridged else \ self._construction_set.to_dict() return base
[docs] def duplicate(self, new_host=None): """Get a copy of this object. new_host: A new Story object that hosts these properties. If None, the properties will be duplicated with the same host. """ _host = new_host or self._host return StoryEnergyProperties(_host, self._construction_set)
[docs] def ToString(self): return self.__repr__()
def __repr__(self): return 'Story Energy Properties: {}'.format(self.host.identifier)