honeybee-energy 1.116.25__tar.gz → 1.116.26__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of honeybee-energy might be problematic. Click here for more details.

Files changed (174) hide show
  1. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/PKG-INFO +1 -1
  2. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/properties/model.py +119 -96
  3. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/properties/room.py +2 -2
  4. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/match.py +7 -4
  5. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy.egg-info/PKG-INFO +1 -1
  6. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/CODE_OF_CONDUCT.md +0 -0
  7. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/CONTRIBUTING.md +0 -0
  8. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/LICENSE +0 -0
  9. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/MANIFEST.in +0 -0
  10. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/README.md +0 -0
  11. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/dev-requirements.txt +0 -0
  12. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/__init__.py +0 -0
  13. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/__main__.py +0 -0
  14. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/_extend_honeybee.py +0 -0
  15. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/altnumber.py +0 -0
  16. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/__init__.py +0 -0
  17. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/create.py +0 -0
  18. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/data/__init__.py +0 -0
  19. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/data/constructions.csv +0 -0
  20. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/data/fen_ratios.csv +0 -0
  21. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/data/lpd_building.csv +0 -0
  22. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/data/pci_2016.csv +0 -0
  23. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/data/pci_2019.csv +0 -0
  24. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/data/pci_2022.csv +0 -0
  25. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/data/shw.csv +0 -0
  26. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/pci.py +0 -0
  27. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/baseline/result.py +0 -0
  28. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/boundarycondition.py +0 -0
  29. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/__init__.py +0 -0
  30. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/baseline.py +0 -0
  31. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/edit.py +0 -0
  32. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/lib.py +0 -0
  33. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/result.py +0 -0
  34. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/setconfig.py +0 -0
  35. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/settings.py +0 -0
  36. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/simulate.py +0 -0
  37. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/translate.py +0 -0
  38. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/cli/validate.py +0 -0
  39. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/config.json +0 -0
  40. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/config.py +0 -0
  41. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/construction/__init__.py +0 -0
  42. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/construction/_base.py +0 -0
  43. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/construction/air.py +0 -0
  44. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/construction/dictutil.py +0 -0
  45. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/construction/dynamic.py +0 -0
  46. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/construction/opaque.py +0 -0
  47. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/construction/shade.py +0 -0
  48. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/construction/window.py +0 -0
  49. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/construction/windowshade.py +0 -0
  50. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/constructionset.py +0 -0
  51. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/dictutil.py +0 -0
  52. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/generator/__init__.py +0 -0
  53. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/generator/loadcenter.py +0 -0
  54. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/generator/pv.py +0 -0
  55. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/__init__.py +0 -0
  56. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/_base.py +0 -0
  57. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/_template.py +0 -0
  58. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/allair/__init__.py +0 -0
  59. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/allair/_base.py +0 -0
  60. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/allair/furnace.py +0 -0
  61. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/allair/psz.py +0 -0
  62. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/allair/ptac.py +0 -0
  63. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/allair/pvav.py +0 -0
  64. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/allair/vav.py +0 -0
  65. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/detailed.py +0 -0
  66. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/doas/__init__.py +0 -0
  67. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/doas/_base.py +0 -0
  68. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/doas/fcu.py +0 -0
  69. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/doas/radiant.py +0 -0
  70. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/doas/vrf.py +0 -0
  71. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/doas/wshp.py +0 -0
  72. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/__init__.py +0 -0
  73. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/_base.py +0 -0
  74. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/baseboard.py +0 -0
  75. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/evapcool.py +0 -0
  76. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/fcu.py +0 -0
  77. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/gasunit.py +0 -0
  78. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/radiant.py +0 -0
  79. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/residential.py +0 -0
  80. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/vrf.py +0 -0
  81. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/windowac.py +0 -0
  82. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/heatcool/wshp.py +0 -0
  83. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/hvac/idealair.py +0 -0
  84. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/internalmass.py +0 -0
  85. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/__init__.py +0 -0
  86. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/_loadconstructions.py +0 -0
  87. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/_loadconstructionsets.py +0 -0
  88. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/_loadmaterials.py +0 -0
  89. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/_loadprogramtypes.py +0 -0
  90. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/_loadschedules.py +0 -0
  91. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/_loadtypelimits.py +0 -0
  92. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/constructions.py +0 -0
  93. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/constructionsets.py +0 -0
  94. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/materials.py +0 -0
  95. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/programtypes.py +0 -0
  96. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/schedules.py +0 -0
  97. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/lib/scheduletypelimits.py +0 -0
  98. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/__init__.py +0 -0
  99. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/_base.py +0 -0
  100. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/daylight.py +0 -0
  101. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/dictutil.py +0 -0
  102. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/equipment.py +0 -0
  103. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/hotwater.py +0 -0
  104. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/infiltration.py +0 -0
  105. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/lighting.py +0 -0
  106. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/people.py +0 -0
  107. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/process.py +0 -0
  108. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/setpoint.py +0 -0
  109. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/load/ventilation.py +0 -0
  110. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/material/__init__.py +0 -0
  111. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/material/_base.py +0 -0
  112. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/material/dictutil.py +0 -0
  113. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/material/frame.py +0 -0
  114. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/material/gas.py +0 -0
  115. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/material/glazing.py +0 -0
  116. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/material/opaque.py +0 -0
  117. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/material/shade.py +0 -0
  118. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/measure.py +0 -0
  119. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/programtype.py +0 -0
  120. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/properties/__init__.py +0 -0
  121. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/properties/aperture.py +0 -0
  122. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/properties/door.py +0 -0
  123. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/properties/extension.py +0 -0
  124. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/properties/face.py +0 -0
  125. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/properties/shade.py +0 -0
  126. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/properties/shademesh.py +0 -0
  127. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/reader.py +0 -0
  128. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/__init__.py +0 -0
  129. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/colorobj.py +0 -0
  130. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/emissions.py +0 -0
  131. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/err.py +0 -0
  132. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/eui.py +0 -0
  133. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/generation.py +0 -0
  134. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/loadbalance.py +0 -0
  135. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/osw.py +0 -0
  136. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/rdd.py +0 -0
  137. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/result/zsz.py +0 -0
  138. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/run.py +0 -0
  139. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/schedule/__init__.py +0 -0
  140. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/schedule/day.py +0 -0
  141. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/schedule/dictutil.py +0 -0
  142. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/schedule/fixedinterval.py +0 -0
  143. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/schedule/rule.py +0 -0
  144. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/schedule/ruleset.py +0 -0
  145. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/schedule/typelimit.py +0 -0
  146. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/shw.py +0 -0
  147. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/simulation/__init__.py +0 -0
  148. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/simulation/control.py +0 -0
  149. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/simulation/daylightsaving.py +0 -0
  150. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/simulation/dictutil.py +0 -0
  151. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/simulation/output.py +0 -0
  152. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/simulation/parameter.py +0 -0
  153. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/simulation/runperiod.py +0 -0
  154. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/simulation/shadowcalculation.py +0 -0
  155. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/simulation/sizing.py +0 -0
  156. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/ventcool/__init__.py +0 -0
  157. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/ventcool/_crack_data.py +0 -0
  158. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/ventcool/afn.py +0 -0
  159. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/ventcool/control.py +0 -0
  160. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/ventcool/crack.py +0 -0
  161. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/ventcool/fan.py +0 -0
  162. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/ventcool/opening.py +0 -0
  163. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/ventcool/simulation.py +0 -0
  164. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy/writer.py +0 -0
  165. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy.egg-info/SOURCES.txt +0 -0
  166. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy.egg-info/dependency_links.txt +0 -0
  167. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy.egg-info/entry_points.txt +0 -0
  168. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy.egg-info/requires.txt +0 -0
  169. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/honeybee_energy.egg-info/top_level.txt +0 -0
  170. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/openstudio-requirements.txt +0 -0
  171. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/requirements.txt +0 -0
  172. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/setup.cfg +0 -0
  173. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/setup.py +0 -0
  174. {honeybee_energy-1.116.25 → honeybee_energy-1.116.26}/standards-requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: honeybee-energy
3
- Version: 1.116.25
3
+ Version: 1.116.26
4
4
  Summary: Energy simulation library for honeybee.
5
5
  Home-page: https://github.com/ladybug-tools/honeybee-energy
6
6
  Author: Ladybug Tools
@@ -789,7 +789,7 @@ class ModelEnergyProperties(object):
789
789
  msgs.append(self.check_all_zones_have_one_hvac(False, detailed))
790
790
  msgs.append(self.check_detailed_hvac_rooms(False, detailed))
791
791
  msgs.append(self.check_shw_rooms_in_model(False, detailed))
792
- msgs.append(self.check_all_air_boundaries_with_window(False, detailed))
792
+ msgs.append(self.check_maximum_elevation(1000, False, detailed))
793
793
  msgs.append(self.check_one_vegetation_material(False, detailed))
794
794
  msgs.append(self.check_interior_constructions_reversed(False, detailed))
795
795
 
@@ -833,7 +833,7 @@ class ModelEnergyProperties(object):
833
833
  msgs.append(self.check_all_zones_have_one_hvac(False, detailed))
834
834
  msgs.append(self.check_detailed_hvac_rooms(False, detailed))
835
835
  msgs.append(self.check_shw_rooms_in_model(False, detailed))
836
- msgs.append(self.check_all_air_boundaries_with_window(False, detailed))
836
+ msgs.append(self.check_maximum_elevation(1000, False, detailed))
837
837
  msgs.append(self.check_one_vegetation_material(False, detailed))
838
838
  msgs.append(self.check_interior_constructions_reversed(False, detailed))
839
839
  # output a final report of errors or raise an exception
@@ -980,7 +980,7 @@ class ModelEnergyProperties(object):
980
980
  error_type='Duplicate SHW Identifier')
981
981
 
982
982
  def check_all_zones_have_one_hvac(self, raise_exception=True, detailed=False):
983
- """Check that all rooms within each zone have only ony HVAC assigned to them.
983
+ """Check that all rooms within each zone have only one HVAC assigned to them.
984
984
 
985
985
  Multiple HVAC systems serving one zone typically causes EnergyPlus simulation
986
986
  failures and is often a mistake that results from changing zoning strategies
@@ -1099,99 +1099,6 @@ class ModelEnergyProperties(object):
1099
1099
  return msg
1100
1100
  return [] if detailed else ''
1101
1101
 
1102
- def check_one_vegetation_material(self, raise_exception=True, detailed=False):
1103
- """Check that there no more than one EnergyMaterialVegetation in the model.
1104
-
1105
- It is a limitation of EnergyPlus that it can only simulate a single
1106
- eco roof per model. This should probably be addressed at some point
1107
- so that we don't always have to check for it.
1108
-
1109
- Args:
1110
- raise_exception: Boolean for whether a ValueError should be raised if there's
1111
- more than one EnergyMaterialVegetation in the Model. (Default: True).
1112
- detailed: Boolean for whether the returned object is a detailed list of
1113
- dicts with error info or a string with a message. (Default: False).
1114
-
1115
- Returns:
1116
- A string with the message or a list with a dictionary if detailed is True.
1117
- """
1118
- # first see if there's more than one vegetation material
1119
- all_constrs = self.room_constructions + self.face_constructions
1120
- materials = []
1121
- for constr in all_constrs:
1122
- try:
1123
- materials.extend(constr.materials)
1124
- except AttributeError:
1125
- pass # ShadeConstruction
1126
- all_mats = list(set(materials))
1127
- veg_mats = [m for m in all_mats if isinstance(m, EnergyMaterialVegetation)]
1128
-
1129
- # if more than one vegetation material was found, then report the issue
1130
- if len(veg_mats) > 1:
1131
- if detailed:
1132
- all_err = []
1133
- for v_mat in veg_mats:
1134
- msg = 'EnergyMaterialVegetation "{}" is one of several vegetation ' \
1135
- 'materials in the model.\nThis is not allowed by ' \
1136
- 'EnergyPlus.'.format(v_mat.identifier)
1137
- error_dict = {
1138
- 'type': 'ValidationError',
1139
- 'code': '020010',
1140
- 'error_type': 'Multiple Vegetation Materials',
1141
- 'extension_type': 'Energy',
1142
- 'element_type': 'Material',
1143
- 'element_id': [v_mat.identifier],
1144
- 'element_name': [v_mat.display_name],
1145
- 'message': msg
1146
- }
1147
- all_err.append(error_dict)
1148
- return all_err
1149
- else:
1150
- veg_mats_ids = [v_mat.identifier for v_mat in veg_mats]
1151
- msg = 'The model has multiple vegetation materials. This is not ' \
1152
- 'allowed by EnergyPlus:\n{}'.format('\n'.join(veg_mats_ids))
1153
- if raise_exception:
1154
- raise ValueError(msg)
1155
- return msg
1156
- return [] if detailed else ''
1157
-
1158
- def check_all_air_boundaries_with_window(self, raise_exception=True, detailed=False):
1159
- """Check there are no Rooms with windows and otherwise composed of AirBoundaries.
1160
-
1161
- This is a requirement for energy simulation since EnergyPlus will throw
1162
- an error if it encounters a Room composed entirely of AirBoundaries except
1163
- for one Face with a window.
1164
-
1165
- Args:
1166
- raise_exception: Boolean to note whether a ValueError should be raised
1167
- if a Room composed entirely of AirBoundaries is found. (Default: True).
1168
- detailed: Boolean for whether the returned object is a detailed list of
1169
- dicts with error info or a string with a message. (Default: False).
1170
-
1171
- Returns:
1172
- A string with the message or a list with a dictionary if detailed is True.
1173
- """
1174
- detailed = False if raise_exception else detailed
1175
- msgs = []
1176
- for room in self.host._rooms:
1177
- non_ab = [f for f in room._faces if not isinstance(f.type, AirBoundary)]
1178
- if all(len(f.apertures) > 0 for f in non_ab):
1179
- if len(non_ab) != 0:
1180
- st_msg = 'is almost entirely composed of AirBoundary Faces with ' \
1181
- 'the other {} Faces having Apertures'.format(len(non_ab))
1182
- msg = 'Room "{}" {}.\nIt should be merged with adjacent ' \
1183
- 'rooms.'.format(room.full_id, st_msg)
1184
- msg = self.host._validation_message_child(
1185
- msg, room, detailed, '000207',
1186
- error_type='Room Composed Entirely of AirBoundaries')
1187
- msgs.append(msg)
1188
- if detailed:
1189
- return msgs
1190
- full_msg = '\n'.join(msgs)
1191
- if raise_exception and len(msgs) != 0:
1192
- raise ValueError(full_msg)
1193
- return full_msg
1194
-
1195
1102
  def check_detailed_hvac_rooms(self, raise_exception=True, detailed=False):
1196
1103
  """Check that any rooms referenced within a DetailedHVAC exist in the model.
1197
1104
 
@@ -1303,6 +1210,122 @@ class ModelEnergyProperties(object):
1303
1210
  return all_err if detailed else '\n'.join(all_err)
1304
1211
  return [] if detailed else ''
1305
1212
 
1213
+ def check_one_vegetation_material(self, raise_exception=True, detailed=False):
1214
+ """Check that there no more than one EnergyMaterialVegetation in the model.
1215
+
1216
+ It is a limitation of EnergyPlus that it can only simulate a single
1217
+ eco roof per model. This should probably be addressed at some point
1218
+ so that we don't always have to check for it.
1219
+
1220
+ Args:
1221
+ raise_exception: Boolean for whether a ValueError should be raised if there's
1222
+ more than one EnergyMaterialVegetation in the Model. (Default: True).
1223
+ detailed: Boolean for whether the returned object is a detailed list of
1224
+ dicts with error info or a string with a message. (Default: False).
1225
+
1226
+ Returns:
1227
+ A string with the message or a list with a dictionary if detailed is True.
1228
+ """
1229
+ # first see if there's more than one vegetation material
1230
+ all_constrs = self.room_constructions + self.face_constructions
1231
+ materials = []
1232
+ for constr in all_constrs:
1233
+ try:
1234
+ materials.extend(constr.materials)
1235
+ except AttributeError:
1236
+ pass # ShadeConstruction
1237
+ all_mats = list(set(materials))
1238
+ veg_mats = [m for m in all_mats if isinstance(m, EnergyMaterialVegetation)]
1239
+
1240
+ # if more than one vegetation material was found, then report the issue
1241
+ if len(veg_mats) > 1:
1242
+ if detailed:
1243
+ all_err = []
1244
+ for v_mat in veg_mats:
1245
+ msg = 'EnergyMaterialVegetation "{}" is one of several vegetation ' \
1246
+ 'materials in the model.\nThis is not allowed by ' \
1247
+ 'EnergyPlus.'.format(v_mat.identifier)
1248
+ error_dict = {
1249
+ 'type': 'ValidationError',
1250
+ 'code': '020010',
1251
+ 'error_type': 'Multiple Vegetation Materials',
1252
+ 'extension_type': 'Energy',
1253
+ 'element_type': 'Material',
1254
+ 'element_id': [v_mat.identifier],
1255
+ 'element_name': [v_mat.display_name],
1256
+ 'message': msg
1257
+ }
1258
+ all_err.append(error_dict)
1259
+ return all_err
1260
+ else:
1261
+ veg_mats_ids = [v_mat.identifier for v_mat in veg_mats]
1262
+ msg = 'The model has multiple vegetation materials. This is not ' \
1263
+ 'allowed by EnergyPlus:\n{}'.format('\n'.join(veg_mats_ids))
1264
+ if raise_exception:
1265
+ raise ValueError(msg)
1266
+ return msg
1267
+ return [] if detailed else ''
1268
+
1269
+ def check_maximum_elevation(self, max_elevation=1000, raise_exception=True,
1270
+ detailed=False):
1271
+ """Check that no Rooms of the model are above a certain elevation.
1272
+
1273
+ EnergyPlus computes wind speeds, air pressures, and adjusts outdoor
1274
+ temperatures to account for the height above the ground using the Z values
1275
+ of the geometry coordinates. This is an important consideration when modeling
1276
+ skyscrapers but it can be detrimental when a building has been modeled
1277
+ with its coordinates at the height above sea level and the location
1278
+ is significantly above sea level (eg. Denver, Colorado).
1279
+
1280
+ This validation check is intended to catch such cases and make the user
1281
+ aware of the repercussions.
1282
+
1283
+ Args:
1284
+ max_elevation: A number for the maximum elevation in Meters that the
1285
+ model's rooms are permitted to be at before a ValidationError is
1286
+ reported. While EnergyPlus technically still simulates with models that
1287
+ are 12 kilometers above the origin, better practice is to set this
1288
+ value at the maximum height above the ground that any human-made
1289
+ structure can reasonably obtain. For this reason, the default is
1290
+ set to 1000 meters or roughly the height of the Burj tower.
1291
+ raise_exception: Boolean to note whether a ValueError should be raised
1292
+ if a Room composed entirely of AirBoundaries is found. (Default: True).
1293
+ detailed: Boolean for whether the returned object is a detailed list of
1294
+ dicts with error info or a string with a message. (Default: False).
1295
+
1296
+ Returns:
1297
+ A string with the message or a list with a dictionary if detailed is True.
1298
+ """
1299
+ # get the maximum elevation of all the rooms
1300
+ conv_fac = conversion_factor_to_meters(self.host.units)
1301
+ max_elev_model = max_elevation / conv_fac
1302
+ room_elevations = tuple(room.max.z for room in self.host.rooms)
1303
+ max_bldg_elev = max(room_elevations)
1304
+
1305
+ # if the maximum elevation was exceeded, then report the issue
1306
+ if max_bldg_elev > max_elev_model:
1307
+ msg = 'The building height is currently {} meters above the ground ' \
1308
+ 'given the Z values of the coordinates.\nThis is above the ' \
1309
+ 'maximum recommended height of {} meters.'.format(
1310
+ int(max_bldg_elev * conv_fac), max_elevation)
1311
+ if detailed:
1312
+ error_dict = {
1313
+ 'type': 'ValidationError',
1314
+ 'code': '020101',
1315
+ 'error_type': 'Building Height Exceeds Max Elevation',
1316
+ 'extension_type': 'Energy',
1317
+ 'element_type': 'Building',
1318
+ 'element_id': [self.host.identifier],
1319
+ 'element_name': [self.host.display_name],
1320
+ 'message': msg
1321
+ }
1322
+ return [error_dict]
1323
+ else:
1324
+ if raise_exception:
1325
+ raise ValueError(msg)
1326
+ return msg
1327
+ return [] if detailed else ''
1328
+
1306
1329
  def check_interior_constructions_reversed(
1307
1330
  self, raise_exception=True, detailed=False):
1308
1331
  """Check that all interior constructions are in reversed order for paired faces.
@@ -757,11 +757,11 @@ class RoomEnergyProperties(object):
757
757
  def add_default_ideal_air(self):
758
758
  """Add a default IdealAirSystem to this Room.
759
759
 
760
- The identifier of this system will be derived from the room identifier
760
+ The identifier of this system will be derived from the room zone name
761
761
  and will align with the naming convention that EnergyPlus uses for
762
762
  templates Ideal Air systems.
763
763
  """
764
- hvac_id = '{} Ideal Loads Air System'.format(self.host.identifier)
764
+ hvac_id = '{} Ideal Loads Air System'.format(self.host.zone)
765
765
  self.hvac = IdealAirSystem(hvac_id)
766
766
 
767
767
  def assign_ideal_air_equivalent(self):
@@ -4,6 +4,7 @@ from __future__ import division
4
4
 
5
5
  import re
6
6
 
7
+ from honeybee.typing import clean_ep_string
7
8
  from honeybee.door import Door
8
9
  from honeybee.aperture import Aperture
9
10
  from honeybee.face import Face
@@ -81,10 +82,11 @@ def match_rooms_to_data(
81
82
  if not space_based and zone_correct_mult:
82
83
  zone_counter = {}
83
84
  for room in rooms:
85
+ z_id = clean_ep_string(room.zone)
84
86
  try:
85
- zone_counter[room.zone] += 1
87
+ zone_counter[z_id] += 1
86
88
  except KeyError: # first room found in the zone
87
- zone_counter[room.zone] = 1
89
+ zone_counter[z_id] = 1
88
90
 
89
91
  # loop through the rooms and match the data to them
90
92
  matched_tuples = [] # list of matched rooms and data collections
@@ -92,8 +94,9 @@ def match_rooms_to_data(
92
94
  if space_based:
93
95
  rm_id, zc = room.identifier.upper(), 1
94
96
  else:
95
- rm_id = room.zone.upper()
96
- zc = zone_counter[room.zone] if zone_correct_mult else 1
97
+ z_id = clean_ep_string(room.zone)
98
+ rm_id = z_id.upper()
99
+ zc = zone_counter[z_id] if zone_correct_mult else 1
97
100
  for i, data_id in enumerate(zone_ids):
98
101
  if data_id == rm_id:
99
102
  mult = 1 if not use_mult else room.multiplier
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: honeybee-energy
3
- Version: 1.116.25
3
+ Version: 1.116.26
4
4
  Summary: Energy simulation library for honeybee.
5
5
  Home-page: https://github.com/ladybug-tools/honeybee-energy
6
6
  Author: Ladybug Tools