Source code for honeybee_energy.boundarycondition

"""Extra Boundary Condition objects for Energy models.

Note to developers:
    See _extend_honeybee to see where these boundary conditions are added to
    honeybee.boundarycondition module.
"""
from honeybee.boundarycondition import _BoundaryCondition
from honeybee.typing import float_in_range, float_positive
from honeybee.altnumber import autocalculate


[docs] class Adiabatic(_BoundaryCondition): __slots__ = ()
[docs] @classmethod def from_dict(cls, data): """Initialize Adiabatic BoundaryCondition from a dictionary. Args: data: A dictionary representation of the boundary condition. """ assert data['type'] == 'Adiabatic', 'Expected dictionary for Adiabatic ' \ 'boundary condition. Got {}.'.format(data['type']) return cls()
[docs] class OtherSideTemperature(_BoundaryCondition): """Custom temperature or heat transfer coefficient on the other side of a surface. Args: temperature: A temperature value in Celsius to note the temperature on the other side of the object. This input can also be an Autocalculate object to signify that the temperature is equal to the outdoor air temperature. (Default: autocalculate). heat_transfer_coefficient: A value in W/m2-K to indicate the combined convective/radiative film coefficient. If equal to 0, then the specified temperature above is equal to the exterior surface temperature. Otherwise, the temperature above is considered the outside air temperature and this coefficient is used to determine the difference between this outside air temperature and the exterior surface temperature. (Default: 0). """ __slots__ = ('_temperature', '_heat_transfer_coefficient') def __init__(self, temperature=autocalculate, heat_transfer_coefficient=0): """Initialize OtherSideTemperature boundary condition.""" if temperature == autocalculate: self._temperature = autocalculate else: self._temperature = float_in_range( temperature, input_name='other side temperature') self._heat_transfer_coefficient = float_positive( heat_transfer_coefficient, input_name='other side heat transfer coefficient')
[docs] @classmethod def from_dict(cls, data): """Initialize OtherSideTemperature BoundaryCondition from a dictionary. Args: data: A dictionary representation of the boundary condition. """ assert data['type'] == 'OtherSideTemperature', 'Expected dictionary for ' \ 'OtherSideTemperature boundary condition. Got {}.'.format(data['type']) temperature = autocalculate if 'temperature' not in data or \ data['temperature'] == autocalculate.to_dict() else data['temperature'] htc = 0 if 'heat_transfer_coefficient' not in data \ else data['heat_transfer_coefficient'] return cls(temperature, htc)
@property def temperature(self): """Get a value in Celsius for temperature on the other side of the object. Autocalculate signifies that the outdoor air temperature is used. """ return self._temperature @property def heat_transfer_coefficient(self): """Get a value in W/m2-K for the combined convective/radiative film coefficient. """ return self._heat_transfer_coefficient
[docs] def to_dict(self): """Get the boundary condition as a dictionary.""" bc_dict = {'type': self.name} bc_dict['temperature'] = autocalculate.to_dict() if \ self.temperature == autocalculate else self.temperature bc_dict['heat_transfer_coefficient'] = self.heat_transfer_coefficient return bc_dict
[docs] def to_idf(self, identifier): """Get the boundary condition as an IDF string. Args: identifier: Text for unique identifier to be given to the boundary condition. .. code-block:: shell SurfaceProperty:OtherSideCoefficients, OSCCoef:Zn005:Wall003, !- Name 0, !- Combined Convective/Radiative Film Coefficient {W/m2-K} 0.000000, !- Constant Temperature {C} 1.000000, !- Constant Temperature Coefficient 0.000000, !- External Dry-Bulb Temperature Coefficient 0.000000, !- Ground Temperature Coefficient 0.000000, !- Wind Speed Coefficient 0.000000, !- Zone Air Temperature Coefficient Zn005Wall003OtherSideTempSched; !- Constant Temperature Schedule Name """ comments = ( 'name', 'heat transfer coefficient', 'temperature', 'temperature factor', 'outdoor temperature factor') values = [identifier, self.heat_transfer_coefficient] if self.temperature == autocalculate: values.extend([0, 0, 1]) else: values.extend([self.temperature, 1, 0]) space_count = tuple((25 - len(str(n))) for n in values) spaces = tuple(s_c * ' ' if s_c > 0 else ' ' for s_c in space_count) body_str = '\n '.join('{},{}!- {}'.format(val, spc, com) for val, spc, com in zip(values[:-1], spaces[:-1], comments[:-1])) ep_str = 'SurfaceProperty:OtherSideCoefficients,\n {}'.format(body_str) end_str = '\n {};{}!- {}'.format(values[-1], spaces[-1], comments[-1]) \ if comments[-1] != '' else '\n {};'.format(values[-1]) return ''.join((ep_str, end_str))