Source code for eppy.function_helpers
# Copyright (c) 2012 Santosh Philip
# Copyright (c) 2020 Cheng Cui
# =======================================================================
# Distributed under the MIT License.
# (See accompanying file LICENSE or copy at
# http://opensource.org/licenses/MIT)
# =======================================================================
"""helper functions for the functions called by bunchdt"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import itertools
from itertools import zip_longest
from eppy.constructions import thermal_properties
from eppy.geometry import surface as g_surface
import eppy.fanpower
[docs]def grouper(num, iterable, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
args = [iter(iterable)] * num
return zip_longest(fillvalue=fillvalue, *args)
[docs]def getcoords(ddtt):
"""return the coordinates of the surface"""
n_vertices_index = ddtt.objls.index("Number_of_Vertices")
first_x = n_vertices_index + 1 # X of first coordinate
pts = ddtt.obj[first_x:]
return list(grouper(3, pts))
[docs]def area(ddtt):
"""area of the surface"""
coords = getcoords(ddtt)
return g_surface.area(coords)
[docs]def height(ddtt):
"""height of the surface"""
coords = getcoords(ddtt)
return g_surface.height(coords)
[docs]def width(ddtt):
"""width of the surface"""
coords = getcoords(ddtt)
return g_surface.width(coords)
[docs]def azimuth(ddtt):
"""azimuth of the surface"""
coords = getcoords(ddtt)
return g_surface.azimuth(coords)
[docs]def true_azimuth(ddtt):
"""true azimuth of the surface"""
idf = ddtt.theidf
coord_system = idf.idfobjects["GlobalGeometryRules"][0].Coordinate_System
if coord_system.lower() == "relative":
zone_name = ddtt.Zone_Name
bldg_north = idf.idfobjects["Building"][0].North_Axis
zone_rel_north = idf.getobject("Zone", zone_name).Direction_of_Relative_North
surf_azimuth = azimuth(ddtt)
return g_surface.true_azimuth(bldg_north, zone_rel_north, surf_azimuth)
elif coord_system.lower() in ("world", "absolute"):
# NOTE: "absolute" is not supported in v9.3.0
return azimuth(ddtt)
else:
raise ValueError(
"'{:s}' is no valid value for 'Coordinate System'".format(coord_system)
)
[docs]def tilt(ddtt):
"""tilt of the surface"""
coords = getcoords(ddtt)
return g_surface.tilt(coords)
[docs]def buildingname(ddtt):
"""return building name"""
idf = ddtt.theidf
building = idf.idfobjects["building".upper()][0]
return building.Name
[docs]def zonesurfaces(ddtt):
"""return al list of surfaces that belong to the zone"""
kwargs = {"fields": ["Zone_Name"], "iddgroups": ["Thermal Zones and Surfaces"]}
return ddtt.getreferingobjs(**kwargs)
[docs]def subsurfaces(ddtt):
"""return al list of surfaces that belong to the zone"""
kwargs = {
"fields": ["Building_Surface_Name"],
"iddgroups": ["Thermal Zones and Surfaces"],
}
return ddtt.getreferingobjs(**kwargs)
[docs]def rvalue(ddtt):
return thermal_properties.rvalue(ddtt)
[docs]def ufactor(ddtt):
return thermal_properties.ufactor(ddtt)
[docs]def ufactor_ip(ddtt):
return thermal_properties.ufactor_ip(ddtt)
[docs]def rvalue_ip(ddtt):
return thermal_properties.rvalue_ip(ddtt)
[docs]def heatcapacity(ddtt):
return thermal_properties.heatcapacity(ddtt)
[docs]def fanpower_bhp(ddtt):
"""return fanpower in bhp"""
return eppy.fanpower.fanpower_bhp(ddtt)
[docs]def fanpower_watts(ddtt):
"""return fanpower in watts"""
return eppy.fanpower.fanpower_watts(ddtt)
[docs]def fan_maxcfm(ddtt):
"""return the Maximum_Flow_Rate in cfm"""
return eppy.fanpower.fan_maxcfm(ddtt)