openstudio-standards 0.2.12 → 0.2.13.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (492) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAE90120162019HighriseApartment.json +1042 -0
  3. data/data/geometry/ASHRAE90120162019Hospital.json +199 -0
  4. data/data/geometry/ASHRAE90120162019LargeHotel.json +73 -0
  5. data/data/geometry/ASHRAE90120162019LargeOffice.json +109 -0
  6. data/data/geometry/ASHRAE90120162019SecondarySchool.json +205 -0
  7. data/data/geometry/ASHRAECourthouse.json +112 -0
  8. data/data/geometry/ASHRAECourthouse.osm +26470 -0
  9. data/data/geometry/ASHRAELargeHotel.osm +11 -1
  10. data/data/geometry/ASHRAELargeOffice.json +4 -0
  11. data/data/standards/OpenStudio_Standards-ashrae_90_1(space_types).xlsx +0 -0
  12. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  13. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  14. data/data/standards/exclude_list.csv +19 -0
  15. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.boilers.json +49 -0
  16. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.chillers.json +293 -0
  17. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +25426 -0
  18. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +1600 -0
  19. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +564 -0
  20. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.elevators.json +349 -0
  21. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +164 -0
  22. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +10663 -0
  23. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +508 -0
  24. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +156 -0
  25. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +44 -0
  26. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +184 -0
  27. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +3094 -0
  28. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +829 -0
  29. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_lnup.json +562 -0
  30. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +52 -0
  31. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_condenser.json +220 -0
  32. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +156 -0
  33. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +1316 -0
  34. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +21446 -0
  35. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +554 -0
  36. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +68 -0
  37. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps.json +28 -0
  38. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps_heating.json +12 -0
  39. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.boilers.json +49 -0
  40. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.chillers.json +293 -0
  41. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +12487 -0
  42. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +1600 -0
  43. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +564 -0
  44. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.elevators.json +349 -0
  45. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +164 -0
  46. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +10663 -0
  47. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +466 -0
  48. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +137 -0
  49. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +44 -0
  50. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +184 -0
  51. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +3094 -0
  52. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +829 -0
  53. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_lnup.json +562 -0
  54. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +52 -0
  55. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_condenser.json +220 -0
  56. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +156 -0
  57. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +1316 -0
  58. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +21380 -0
  59. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +554 -0
  60. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +68 -0
  61. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps.json +28 -0
  62. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps_heating.json +12 -0
  63. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.boilers.json +49 -0
  64. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.chillers.json +395 -0
  65. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +12487 -0
  66. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +1600 -0
  67. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +592 -0
  68. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.elevators.json +349 -0
  69. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +550 -0
  70. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +164 -0
  71. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +10663 -0
  72. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +466 -0
  73. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +137 -0
  74. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +44 -0
  75. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +238 -0
  76. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +3094 -0
  77. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +829 -0
  78. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_lnup.json +562 -0
  79. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +52 -0
  80. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_condenser.json +220 -0
  81. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +156 -0
  82. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +1316 -0
  83. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +21548 -0
  84. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +554 -0
  85. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +68 -0
  86. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps.json +28 -0
  87. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps_heating.json +12 -0
  88. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +64 -0
  89. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +871 -0
  90. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +12487 -0
  91. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +1600 -0
  92. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +592 -0
  93. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.elevators.json +349 -0
  94. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +1096 -0
  95. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +164 -0
  96. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +10663 -0
  97. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +886 -0
  98. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +194 -0
  99. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +44 -0
  100. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +247 -0
  101. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +3094 -0
  102. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +829 -0
  103. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_lnup.json +562 -0
  104. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +52 -0
  105. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_condenser.json +220 -0
  106. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +156 -0
  107. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +1316 -0
  108. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +22079 -0
  109. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +994 -0
  110. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +68 -0
  111. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps.json +28 -0
  112. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +12 -0
  113. data/data/standards/manage_OpenStudio_Standards.rb +87 -37
  114. data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1-ALL-comstockspace_types.csv +236 -0
  115. data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv +622 -0
  116. data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1space_types.csv +191 -0
  117. data/data/standards/openstudio_standards_duplicates_log.csv +16 -25
  118. data/data/standards/test_performance_expected_dd_results.csv +1934 -1134
  119. data/lib/openstudio-standards.rb +68 -17
  120. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +28 -0
  121. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +0 -1
  122. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +28 -0
  123. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +53 -2
  124. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +29 -0
  125. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +157 -2
  126. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +29 -0
  127. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +24 -0
  128. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanConstantVolume.rb +32 -0
  129. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanOnOff.rb +33 -0
  130. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +32 -0
  131. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.elevators.rb +25 -0
  132. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +366 -0
  133. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +144 -0
  134. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +11 -0
  135. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +24 -0
  136. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanConstantVolume.rb +32 -0
  137. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanOnOff.rb +33 -0
  138. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +32 -0
  139. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.elevators.rb +25 -0
  140. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +367 -0
  141. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +144 -0
  142. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +11 -0
  143. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +0 -1
  144. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +0 -1
  145. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +1 -1
  146. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +1 -1
  147. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +1 -1
  148. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +1 -1
  149. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +3 -3
  150. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +74 -0
  151. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +46 -30
  152. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +15 -7
  153. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +26 -15
  154. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +8 -11
  155. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +54 -60
  156. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +56 -60
  157. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +38 -12
  158. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +218 -134
  159. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +6 -2
  160. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +222 -133
  161. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +60 -62
  162. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +25 -15
  163. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +34 -22
  164. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +31 -7
  165. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +43 -28
  166. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +48 -38
  167. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +9 -5
  168. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +567 -344
  169. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +13 -19
  170. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +13 -17
  171. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +9 -5
  172. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +79 -51
  173. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +60 -60
  174. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +2 -4
  175. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +133 -120
  176. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +124 -112
  177. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +138 -66
  178. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +7275 -199
  179. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +35 -35
  180. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +2 -2
  181. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +2 -2
  182. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +3 -3
  183. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +1 -1
  184. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +2 -2
  185. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +2 -2
  186. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +1 -1
  187. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +2 -2
  188. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +2 -2
  189. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -2
  190. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +1 -1
  191. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +4 -3
  192. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +7 -8
  193. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +7 -8
  194. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +13 -14
  195. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +7 -5
  196. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.elevators.rb +2 -0
  197. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +0 -1
  198. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +25 -14
  199. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +474 -89
  200. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +35 -33
  201. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +3 -0
  202. data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +72 -0
  203. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +120 -120
  204. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +103 -125
  205. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +9 -3
  206. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +11 -5
  207. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +26 -14
  208. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +270 -247
  209. data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
  210. data/lib/openstudio-standards/refs/references.rb +5 -2
  211. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +41 -28
  212. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -1
  213. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +0 -1
  214. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +1 -0
  215. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +2 -4
  216. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +8 -10
  217. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +4 -5
  218. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +0 -1
  219. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
  220. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +12 -9
  221. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -1
  222. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +3 -1
  223. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +0 -3
  224. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +4 -7
  225. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +1 -3
  226. data/lib/openstudio-standards/standards/Standards.Construction.rb +124 -118
  227. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +0 -1
  228. data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +0 -1
  229. data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +0 -1
  230. data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +0 -1
  231. data/lib/openstudio-standards/standards/Standards.Fan.rb +0 -1
  232. data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -1
  233. data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -1
  234. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +2 -4
  235. data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -1
  236. data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +10 -3
  237. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -1
  238. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -1
  239. data/lib/openstudio-standards/standards/Standards.Model.rb +282 -253
  240. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +2 -0
  241. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -9
  242. data/lib/openstudio-standards/standards/Standards.Pump.rb +0 -1
  243. data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -1
  244. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +0 -1
  245. data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +0 -1
  246. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +0 -1
  247. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +103 -121
  248. data/lib/openstudio-standards/standards/Standards.Space.rb +42 -35
  249. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +9 -17
  250. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +25 -27
  251. data/lib/openstudio-standards/standards/Standards.Surface.rb +97 -52
  252. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +39 -21
  253. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +6 -7
  254. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +15 -10
  255. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.Standards.FanVariableVolume.rb +0 -1
  256. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +10 -2
  257. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +2 -2
  258. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +63 -99
  259. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ext_ltg.json +7 -7
  260. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +2420 -0
  261. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +32 -0
  262. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +9 -0
  263. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +68 -38
  264. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +105 -40
  265. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirLoopHVAC.rb +5 -1
  266. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +63 -99
  267. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ext_ltg.json +7 -7
  268. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +1460 -0
  269. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +32 -0
  270. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +9 -0
  271. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +68 -38
  272. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +104 -17
  273. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +25 -13
  274. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +1 -1
  275. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +63 -99
  276. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ext_ltg.json +7 -7
  277. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +1460 -0
  278. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +64 -0
  279. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +52 -0
  280. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +9 -0
  281. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +68 -38
  282. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +112 -25
  283. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +21 -7
  284. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
  285. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +63 -99
  286. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ext_ltg.json +7 -7
  287. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +1 -1
  288. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +2 -2
  289. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +1460 -0
  290. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +64 -0
  291. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +104 -0
  292. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +9 -0
  293. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +70 -40
  294. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +172 -55
  295. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +4 -4
  296. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +1 -1
  297. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +456 -0
  298. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +24 -0
  299. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTower.rb +19 -0
  300. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerSingleSpeed.rb +5 -0
  301. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerTwoSpeed.rb +5 -0
  302. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +16 -0
  303. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +37 -0
  304. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +189 -0
  305. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ThermalZone.rb +57 -0
  306. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +22 -0
  307. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.rb +16 -0
  308. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.boilers.json +68 -0
  309. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.chillers.json +490 -0
  310. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +21244 -0
  311. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +2111 -0
  312. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.economizers.json +676 -0
  313. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.elevators.json +372 -0
  314. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +1096 -0
  315. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ext_ltg.json +169 -0
  316. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps.json +532 -0
  317. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +164 -0
  318. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_rejection.json +49 -0
  319. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.motors.json +274 -0
  320. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.prototype_inputs.json +3094 -0
  321. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ref_cases.json +854 -0
  322. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ref_lnup.json +562 -0
  323. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_compressors.json +58 -0
  324. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_condenser.json +238 -0
  325. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_system.json +12 -0
  326. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_walkins.json +1316 -0
  327. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +23067 -0
  328. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +648 -0
  329. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_heaters.json +72 -0
  330. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_source_heat_pumps.json +31 -0
  331. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_source_heat_pumps_heating.json +13 -0
  332. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +456 -0
  333. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +24 -0
  334. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTower.rb +19 -0
  335. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerSingleSpeed.rb +5 -0
  336. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerTwoSpeed.rb +5 -0
  337. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +16 -0
  338. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +37 -0
  339. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +189 -0
  340. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ThermalZone.rb +57 -0
  341. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +22 -0
  342. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.rb +16 -0
  343. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.boilers.json +68 -0
  344. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.chillers.json +490 -0
  345. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +21244 -0
  346. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +2111 -0
  347. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.economizers.json +676 -0
  348. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.elevators.json +372 -0
  349. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +1096 -0
  350. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ext_ltg.json +169 -0
  351. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps.json +664 -0
  352. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +204 -0
  353. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_rejection.json +49 -0
  354. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.motors.json +274 -0
  355. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.prototype_inputs.json +3094 -0
  356. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ref_cases.json +854 -0
  357. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ref_lnup.json +562 -0
  358. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_compressors.json +58 -0
  359. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_condenser.json +238 -0
  360. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_system.json +12 -0
  361. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_walkins.json +1316 -0
  362. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +23067 -0
  363. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +671 -0
  364. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_heaters.json +72 -0
  365. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_source_heat_pumps.json +31 -0
  366. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_source_heat_pumps_heating.json +13 -0
  367. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +1662 -332
  368. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.materials.json +5049 -289
  369. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +1743 -161
  370. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +63 -99
  371. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ext_ltg.json +11 -11
  372. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.heat_rejection.json +9 -0
  373. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +8 -8
  374. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +9 -9
  375. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +4 -4
  376. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +63 -99
  377. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.ext_ltg.json +10 -10
  378. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.heat_rejection.json +9 -0
  379. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +7 -7
  380. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +9 -9
  381. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +4 -4
  382. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_rejection.json +9 -0
  383. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +0 -1
  384. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +4 -4
  385. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +1 -1
  386. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +1 -1
  387. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_rejection.json +9 -0
  388. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_heaters.json +2 -2
  389. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +3 -6
  390. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +4 -4
  391. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +1 -1
  392. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +1 -1
  393. data/lib/openstudio-standards/standards/cbes/cbes.Model.rb +1 -3
  394. data/lib/openstudio-standards/standards/cbes/cbes.rb +1 -1
  395. data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +8 -13
  396. data/lib/openstudio-standards/standards/deer/deer.Model.rb +2 -2
  397. data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +2 -0
  398. data/lib/openstudio-standards/standards/deer/deer.Space.rb +1 -1
  399. data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.rb +0 -1
  400. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +0 -1
  401. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.rb +0 -1
  402. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +0 -1
  403. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +0 -1
  404. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +1 -1
  405. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +1 -1
  406. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +0 -1
  407. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +1 -1
  408. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +1 -1
  409. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +0 -1
  410. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +1 -1
  411. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +1 -1
  412. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +0 -1
  413. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +1 -1
  414. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +1 -1
  415. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +0 -1
  416. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +1 -1
  417. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +1 -1
  418. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +0 -1
  419. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +1 -1
  420. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +1 -1
  421. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +0 -1
  422. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +1 -1
  423. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +1 -1
  424. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +0 -1
  425. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +1 -1
  426. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +1 -1
  427. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +0 -1
  428. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +1 -1
  429. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +1 -1
  430. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +0 -1
  431. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +1 -1
  432. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +1 -1
  433. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +0 -1
  434. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +1 -1
  435. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +1 -1
  436. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +0 -1
  437. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +1 -1
  438. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +1 -1
  439. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +0 -1
  440. data/lib/openstudio-standards/standards/icc_iecc/icc_iecc_2015/icc_iecc_2015.rb +0 -1
  441. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +28 -7
  442. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +16 -2
  443. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +15 -0
  444. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +14 -0
  445. data/lib/openstudio-standards/standards/necb/ECMS/data/erv.json +11 -7
  446. data/lib/openstudio-standards/standards/necb/ECMS/data/pv.json +112 -0
  447. data/lib/openstudio-standards/standards/necb/ECMS/data/unitary_acs.json +50 -0
  448. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +21 -8
  449. data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +17 -6
  450. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +142 -6
  451. data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +189 -0
  452. data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +104 -0
  453. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +19 -13
  454. data/lib/openstudio-standards/standards/necb/NECB2011/data/erv.json +1 -1
  455. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +39278 -0
  456. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +17 -1
  457. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +15 -0
  458. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +14 -2
  459. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +13 -0
  460. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +12 -0
  461. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +154 -12
  462. data/lib/openstudio-standards/standards/necb/NECB2011/lighting.rb +21 -3
  463. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +140 -21
  464. data/lib/openstudio-standards/standards/necb/NECB2011/nv.md +74 -0
  465. data/lib/openstudio-standards/standards/necb/NECB2011/pv_ground.md +44 -0
  466. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +2 -2
  467. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/qaqc_resources/neb_end_use_prices.csv +39 -84
  468. data/lib/openstudio-standards/standards/oeesc/oeesc_2014/oeesc_2014.rb +0 -1
  469. data/lib/openstudio-standards/standards/standard.rb +6 -5
  470. data/lib/openstudio-standards/utilities/Add_template_field_to_json.rb +3 -3
  471. data/lib/openstudio-standards/utilities/convert_surfaces_to_adiabatic_necb_8426.rb +54 -54
  472. data/lib/openstudio-standards/utilities/generate_prototype_database.rb +2 -2
  473. data/lib/openstudio-standards/utilities/generate_space_types.rb +3 -3
  474. data/lib/openstudio-standards/utilities/logging.rb +7 -7
  475. data/lib/openstudio-standards/utilities/necb_to_epw_map.rb +14 -14
  476. data/lib/openstudio-standards/utilities/os_sim_extract.rb +25 -25
  477. data/lib/openstudio-standards/utilities/rename_surfaces.rb +10 -13
  478. data/lib/openstudio-standards/utilities/round_surf_coords.rb +18 -20
  479. data/lib/openstudio-standards/utilities/sched_create.rb +39 -41
  480. data/lib/openstudio-standards/utilities/set_mult_to_adiabatic.rb +31 -31
  481. data/lib/openstudio-standards/utilities/simulation.rb +5 -3
  482. data/lib/openstudio-standards/utilities/speacetype_map_converter.rb +10 -11
  483. data/lib/openstudio-standards/utilities/sqlfile.rb +6 -8
  484. data/lib/openstudio-standards/utilities/template_measure/measure.rb +108 -0
  485. data/lib/openstudio-standards/utilities/template_measure/measure.xml +162 -0
  486. data/lib/openstudio-standards/utilities/template_measure/resources/BTAPMeasureHelper.rb +448 -0
  487. data/lib/openstudio-standards/utilities/template_measure/tests/test.rb +160 -0
  488. data/lib/openstudio-standards/utilities/weatherData1_xlsx_to_json.rb +23 -26
  489. data/lib/openstudio-standards/version.rb +1 -1
  490. data/lib/openstudio-standards/weather/Weather.Model.rb +74 -80
  491. data/lib/openstudio-standards/weather/Weather.stat_file.rb +17 -17
  492. metadata +217 -2
@@ -25,6 +25,7 @@ Standard.class_eval do
25
25
  if epw_path.empty?
26
26
  return false
27
27
  end
28
+
28
29
  epw_path = epw_path.get
29
30
 
30
31
  # close current sql file
@@ -84,7 +85,7 @@ Standard.class_eval do
84
85
  epw_name = 'in.epw'
85
86
  begin
86
87
  FileUtils.copy(epw_path.to_s, "#{run_dir}/#{epw_name}")
87
- rescue
88
+ rescue StandardError
88
89
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "Due to limitations on Windows file path lengths, this measure won't work unless your project is located in a directory whose filepath is less than 90 characters long, including slashes.")
89
90
  return false
90
91
  end
@@ -95,7 +96,7 @@ Standard.class_eval do
95
96
 
96
97
  cli_path = OpenStudio.getOpenStudioCLI
97
98
  cmd = "\"#{cli_path}\" run -w \"#{osw_path}\""
98
- #cmd = "\"#{cli_path}\" --verbose run -w \"#{osw_path}\""
99
+ # cmd = "\"#{cli_path}\" --verbose run -w \"#{osw_path}\""
99
100
  puts cmd
100
101
 
101
102
  # Run the sizing run
@@ -155,7 +156,7 @@ Standard.class_eval do
155
156
  endstring = File.read(end_file_stringpath)
156
157
  end
157
158
 
158
- if not endstring.include?("EnergyPlus Completed Successfully")
159
+ if !endstring.include?('EnergyPlus Completed Successfully')
159
160
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "The run did not finish and had following errors: #{errs.join('\n')}")
160
161
  return false
161
162
  end
@@ -182,6 +183,7 @@ Standard.class_eval do
182
183
 
183
184
  # check that all zones have surfaces.
184
185
  raise 'Error: Sizing Run Failed. Thermal Zones with no surfaces exist.' unless model_do_all_zones_have_surfaces?(model)
186
+
185
187
  # Run the sizing run
186
188
  success = model_run_simulation_and_log_errors(model, sizing_run_dir)
187
189
 
@@ -1,16 +1,15 @@
1
1
  require 'json'
2
2
  map = []
3
- File.open("../../../lib/openstudio-standards/standards/necb/NECB2015/data/space_type_upgrade_map.csv").each do |line|
4
- necb2011_building_type, necb2011_space_type, necb2015_building_type, necb2015_space_type = line.split(",")
5
- next if necb2011_building_type.nil? or necb2011_building_type.strip == ''
3
+ File.open('../../../lib/openstudio-standards/standards/necb/NECB2015/data/space_type_upgrade_map.csv').each do |line|
4
+ necb2011_building_type, necb2011_space_type, necb2015_building_type, necb2015_space_type = line.split(',')
5
+ next if necb2011_building_type.nil? || (necb2011_building_type.strip == '')
6
6
 
7
-
8
- map << {'NECB2011_building_type' => necb2011_building_type.strip,
9
- 'NECB2011_space_type' => necb2011_space_type.strip,
10
- 'NECB2015_building_type' => necb2015_building_type.strip,
11
- 'NECB2015_space_type' => necb2015_space_type.strip,
12
- 'NECB2017_building_type' => necb2015_building_type.strip,
13
- 'NECB2017_space_type' => necb2015_space_type.strip }
7
+ map << { 'NECB2011_building_type' => necb2011_building_type.strip,
8
+ 'NECB2011_space_type' => necb2011_space_type.strip,
9
+ 'NECB2015_building_type' => necb2015_building_type.strip,
10
+ 'NECB2015_space_type' => necb2015_space_type.strip,
11
+ 'NECB2017_building_type' => necb2015_building_type.strip,
12
+ 'NECB2017_space_type' => necb2015_space_type.strip }
14
13
  end
15
14
 
16
- puts JSON.pretty_generate(map)
15
+ puts JSON.pretty_generate(map)
@@ -1,5 +1,4 @@
1
1
  Standard.class_eval do
2
-
3
2
  # Gets the sql file for the model, erroring if not found
4
3
  # @todo candidate for C++
5
4
  def model_sql_file(model)
@@ -26,6 +25,7 @@ Standard.class_eval do
26
25
  sql.availableEnvPeriods.each do |env_pd|
27
26
  env_type = sql.environmentType(env_pd)
28
27
  next unless env_type.is_initialized
28
+
29
29
  if env_type.get == OpenStudio::EnvironmentType.new('WeatherRunPeriod')
30
30
  ann_env_pd = env_pd
31
31
  end
@@ -362,7 +362,6 @@ Standard.class_eval do
362
362
 
363
363
  # Gets the annual occupied unmet hours from the sql file
364
364
  def model_annual_occupied_unmet_hours(model)
365
-
366
365
  heating_setpoint_unmet = model_annual_occupied_unmet_heating_hours(model)
367
366
  cooling_setpoint_unmet = model_annual_occupied_unmet_cooling_hours(model)
368
367
 
@@ -487,7 +486,7 @@ Standard.class_eval do
487
486
  fuel_types = ['Electricity', 'Natural Gas', 'Additional Fuel', 'District Cooling', 'District Heating', 'Water']
488
487
 
489
488
  # List of all end uses
490
- end_uses = ['Heating', 'Cooling', 'Interior Lighting', 'Exterior Lighting', 'Interior Equipment', 'Exterior Equipment', 'Fans', 'Pumps', 'Heat Rejection','Humidification', 'Heat Recovery', 'Water Systems', 'Refrigeration', 'Generators']
489
+ end_uses = ['Heating', 'Cooling', 'Interior Lighting', 'Exterior Lighting', 'Interior Equipment', 'Exterior Equipment', 'Fans', 'Pumps', 'Heat Rejection', 'Humidification', 'Heat Recovery', 'Water Systems', 'Refrigeration', 'Generators']
491
490
 
492
491
  # Get the value for each end use/ fuel type combination
493
492
  end_uses.each do |end_use|
@@ -498,17 +497,17 @@ Standard.class_eval do
498
497
 
499
498
  return energy_values
500
499
  end
501
-
500
+
502
501
  def model_dd_results_by_end_use_and_fuel_type(model)
503
502
  energy_values = {}
504
503
 
505
504
  # List of all fuel types, based on Table 5.1 of EnergyPlus' Input Output Reference manual
506
505
  fuel_types = ['Electricity', 'Gas', 'Gasoline', 'Diesel', 'Coal', 'FuelOilNo1', 'FuelOilNo2', 'Propane', 'OtherFuel1', 'OtherFuel2', 'Water', 'Steam', 'DistrictCooling',
507
- 'DistrictHeating', 'ElectricityPurchased', 'ElectricitySurplusSold', 'ElectricityNet']
506
+ 'DistrictHeating', 'ElectricityPurchased', 'ElectricitySurplusSold', 'ElectricityNet']
508
507
 
509
508
  # List of all end uses, based on Table 5.3 of EnergyPlus' Input Output Reference manual
510
- end_uses = ['InteriorLights', 'ExteriorLights', 'InteriorEquipment', 'ExteriorEquipment', 'Fans', 'Pumps', 'Heating', 'Cooling', 'HeatRejection', 'Humidifier',
511
- 'HeatRecovery', 'DHW', 'Cogeneration', 'Refrigeration', 'WaterSystems']
509
+ end_uses = ['InteriorLights', 'ExteriorLights', 'InteriorEquipment', 'ExteriorEquipment', 'Fans', 'Pumps', 'Heating', 'Cooling', 'HeatRejection', 'Humidifier',
510
+ 'HeatRecovery', 'DHW', 'Cogeneration', 'Refrigeration', 'WaterSystems']
512
511
 
513
512
  # Get the value for each end use/ fuel type combination
514
513
  end_uses.each do |end_use|
@@ -522,7 +521,6 @@ Standard.class_eval do
522
521
 
523
522
  # Gets annual eui by fuel and end use from the sql file
524
523
  def model_annual_eui_kbtu_per_ft2_by_fuel_and_enduse(model, fuel_type, end_use)
525
-
526
524
  energy_gj = model_annual_energy_by_fuel_and_enduse(model, fuel_type, end_use)
527
525
  energy_kbtu = OpenStudio.convert(energy_gj, 'GJ', 'kBtu').get
528
526
 
@@ -0,0 +1,108 @@
1
+ # see the URL below for information on how to write OpenStudio measures
2
+ # http://nrel.github.io/OpenStudio-user-documentation/reference/measure_writing_guide/
3
+ require_relative 'resources/BTAPMeasureHelper'
4
+
5
+ # start the measure
6
+ class BTAPModelMeasure < OpenStudio::Measure::ModelMeasure
7
+ attr_accessor :use_json_package, :use_string_double
8
+ # Adds helper functions to make life a bit easier and consistent.
9
+ include(BTAPMeasureHelper)
10
+ # human readable name
11
+ def name
12
+ # BEFORE YOU DO anything.. please generate a new <uid>224561f4-8ccc-4f60-8118-34b85359d6f7</uid> and add this to the measure.xml file
13
+ # You can generate a new UUID using the ruby command
14
+ # ruby -e 'require "securerandom"; puts SecureRandom.uuid '
15
+ return 'BTAPTemplateMeasure'
16
+ end
17
+
18
+ # human readable description
19
+ def description
20
+ return 'This template measure is used to ensure consistency in detailed BTAP measures.'
21
+ end
22
+
23
+ # human readable description of modeling approach
24
+ def modeler_description
25
+ return 'This template measure is used to ensure consistency in BTAP measures.'
26
+ end
27
+
28
+ # Use the constructor to set global variables
29
+ def initialize
30
+ super()
31
+ # Set to true if you want to package the arguments as json.
32
+ @use_json_package = false
33
+ # Set to true if you want to want to allow strings and doubles in stringdouble types. Set to false to force to use doubles. The latter is used for certain
34
+ # continuous optimization algorithms. You may have to re-examine your input in PAT as this fundamentally changes the measure.
35
+ @use_string_double = true
36
+
37
+ # Put in this array of hashes all the input variables that you need in your measure. Your choice of types are Sting, Double,
38
+ # StringDouble, and Choice. Optional fields are valid strings, max_double_value, and min_double_value. This will
39
+ # create all the variables, validate the ranges and types you need, and make them available in the 'run' method as a hash after
40
+ # you run 'arguments = validate_and_get_arguments_in_hash(model, runner, user_arguments)'
41
+ @measure_interface_detailed = [
42
+ {
43
+ 'name' => 'a_string_argument',
44
+ 'type' => 'String',
45
+ 'display_name' => 'A String Argument (string)',
46
+ 'default_value' => 'The Default Value',
47
+ 'is_required' => true
48
+ },
49
+ {
50
+ 'name' => 'a_double_argument',
51
+ 'type' => 'Double',
52
+ 'display_name' => 'A Double numeric Argument (double)',
53
+ 'default_value' => 0,
54
+ 'max_double_value' => 100.0,
55
+ 'min_double_value' => 0.0,
56
+ 'is_required' => true
57
+ },
58
+ {
59
+ 'name' => 'a_string_double_argument',
60
+ 'type' => 'StringDouble',
61
+ 'display_name' => 'A String Double numeric Argument (double)',
62
+ 'default_value' => 23.0,
63
+ 'max_double_value' => 100.0,
64
+ 'min_double_value' => 0.0,
65
+ 'valid_strings' => ['Baseline', 'NA'],
66
+ 'is_required' => true
67
+ },
68
+ {
69
+ 'name' => 'a_choice_argument',
70
+ 'type' => 'Choice',
71
+ 'display_name' => 'A Choice String Argument ',
72
+ 'default_value' => 'choice_1',
73
+ 'choices' => ['choice_1', 'choice_2'],
74
+ 'is_required' => true
75
+ },
76
+ {
77
+ 'name' => 'a_bool_argument',
78
+ 'type' => 'Bool',
79
+ 'display_name' => 'A Boolean Argument ',
80
+ 'default_value' => false,
81
+ 'is_required' => true
82
+ }
83
+ ]
84
+ end
85
+
86
+ # define what happens when the measure is run
87
+ def run(model, runner, user_arguments)
88
+ # Runs parent run method.
89
+ super(model, runner, user_arguments)
90
+ # Gets arguments from interfaced and puts them in a hash with there display name. This also does a check on ranges to
91
+ # ensure that the values inputted are valid based on your @measure_interface array of hashes.
92
+ arguments = validate_and_get_arguments_in_hash(model, runner, user_arguments)
93
+ # puts JSON.pretty_generate(arguments)
94
+ return false if arguments == false
95
+
96
+ # You can now access the input argument by the name.
97
+ # arguments['a_string_argument']
98
+ # arguments['a_double_argument']
99
+ # etc......
100
+ # So write your measure code here!
101
+
102
+ # Do something.
103
+ return true
104
+ end
105
+ end
106
+
107
+ # register the measure to be used by the application
108
+ BTAPModelMeasure.new.registerWithApplication
@@ -0,0 +1,162 @@
1
+ <measure>
2
+ <schema_version>3.0</schema_version>
3
+ <name>btap_model_measure</name>
4
+ <uid>224561f4-8ccc-4f60-8118-34b85359d6f7</uid>
5
+ <version_id>f73a0c59-ff93-4645-b8a4-dfaa6c16b114</version_id>
6
+ <version_modified>20180516T161828Z</version_modified>
7
+ <xml_checksum>2609226D</xml_checksum>
8
+ <class_name>BTAPModelMeasure</class_name>
9
+ <display_name>BTAPTemplateMeasure</display_name>
10
+ <description>This template measure is used to ensure consistency in detailed BTAP measures.</description>
11
+ <modeler_description>This template measure is used to ensure consistency in BTAP measures.</modeler_description>
12
+ <arguments>
13
+ <argument>
14
+ <name>a_string_argument</name>
15
+ <display_name>A String Argument (string)</display_name>
16
+ <type>String</type>
17
+ <required>true</required>
18
+ <model_dependent>false</model_dependent>
19
+ <default_value>The Default Value</default_value>
20
+ </argument>
21
+ <argument>
22
+ <name>a_double_argument</name>
23
+ <display_name>A Double numeric Argument (double)</display_name>
24
+ <type>Double</type>
25
+ <required>true</required>
26
+ <model_dependent>false</model_dependent>
27
+ <default_value>0</default_value>
28
+ </argument>
29
+ <argument>
30
+ <name>a_string_double_argument</name>
31
+ <display_name>A String Double numeric Argument (double)</display_name>
32
+ <type>String</type>
33
+ <required>true</required>
34
+ <model_dependent>false</model_dependent>
35
+ <default_value>23.0</default_value>
36
+ </argument>
37
+ <argument>
38
+ <name>a_choice_argument</name>
39
+ <display_name>A Choice String Argument </display_name>
40
+ <type>Choice</type>
41
+ <required>true</required>
42
+ <model_dependent>false</model_dependent>
43
+ <default_value>choice_1</default_value>
44
+ <choices>
45
+ <choice>
46
+ <value>choice_1</value>
47
+ <display_name>choice_1</display_name>
48
+ </choice>
49
+ <choice>
50
+ <value>choice_2</value>
51
+ <display_name>choice_2</display_name>
52
+ </choice>
53
+ </choices>
54
+ </argument>
55
+ <argument>
56
+ <name>a_bool_argument</name>
57
+ <display_name>A Boolean Argument </display_name>
58
+ <type>Boolean</type>
59
+ <required>true</required>
60
+ <model_dependent>false</model_dependent>
61
+ <default_value>false</default_value>
62
+ <choices>
63
+ <choice>
64
+ <value>true</value>
65
+ <display_name>true</display_name>
66
+ </choice>
67
+ <choice>
68
+ <value>false</value>
69
+ <display_name>false</display_name>
70
+ </choice>
71
+ </choices>
72
+ </argument>
73
+ </arguments>
74
+ <outputs/>
75
+ <provenances/>
76
+ <tags>
77
+ <tag>Envelope.Opaque</tag>
78
+ </tags>
79
+ <attributes>
80
+ <attribute>
81
+ <name>Measure Type</name>
82
+ <value>ModelMeasure</value>
83
+ <datatype>string</datatype>
84
+ </attribute>
85
+ <attribute>
86
+ <name>Intended Software Tool</name>
87
+ <value>Apply Measure Now</value>
88
+ <datatype>string</datatype>
89
+ </attribute>
90
+ <attribute>
91
+ <name>Intended Software Tool</name>
92
+ <value>OpenStudio Application</value>
93
+ <datatype>string</datatype>
94
+ </attribute>
95
+ <attribute>
96
+ <name>Intended Software Tool</name>
97
+ <value>Parametric Analysis Tool</value>
98
+ <datatype>string</datatype>
99
+ </attribute>
100
+ </attributes>
101
+ <files>
102
+ <file>
103
+ <filename>BTAPTemplateModelMeasure_test.rb</filename>
104
+ <filetype>rb</filetype>
105
+ <usage_type>test</usage_type>
106
+ <checksum>5E7EBF34</checksum>
107
+ </file>
108
+ <file>
109
+ <filename>BTAPMeasureHelper.rb</filename>
110
+ <filetype>rb</filetype>
111
+ <usage_type>resource</usage_type>
112
+ <checksum>3D94B7AC</checksum>
113
+ </file>
114
+ <file>
115
+ <version>
116
+ <software_program>OpenStudio</software_program>
117
+ <identifier>2.3.0</identifier>
118
+ <min_compatible>2.3.0</min_compatible>
119
+ </version>
120
+ <filename>measure.rb</filename>
121
+ <filetype>rb</filetype>
122
+ <usage_type>script</usage_type>
123
+ <checksum>B821DA93</checksum>
124
+ </file>
125
+ <file>
126
+ <filename>fileio.rb</filename>
127
+ <filetype>rb</filetype>
128
+ <usage_type>resource</usage_type>
129
+ <checksum>55494222</checksum>
130
+ </file>
131
+ <file>
132
+ <filename>Standards.Construction.rb</filename>
133
+ <filetype>rb</filetype>
134
+ <usage_type>resource</usage_type>
135
+ <checksum>9C6C6E51</checksum>
136
+ </file>
137
+ <file>
138
+ <filename>git_revision</filename>
139
+ <filetype></filetype>
140
+ <usage_type>resource</usage_type>
141
+ <checksum>DAE275A8</checksum>
142
+ </file>
143
+ <file>
144
+ <filename>Standards.Model.rb</filename>
145
+ <filetype>rb</filetype>
146
+ <usage_type>resource</usage_type>
147
+ <checksum>46874C01</checksum>
148
+ </file>
149
+ <file>
150
+ <filename>btap_additions.rb</filename>
151
+ <filetype>rb</filetype>
152
+ <usage_type>resource</usage_type>
153
+ <checksum>6DC45CBD</checksum>
154
+ </file>
155
+ <file>
156
+ <filename>building_envelope.rb</filename>
157
+ <filetype>rb</filetype>
158
+ <usage_type>resource</usage_type>
159
+ <checksum>6ED0F4FE</checksum>
160
+ </file>
161
+ </files>
162
+ </measure>
@@ -0,0 +1,448 @@
1
+ module BTAPMeasureHelper
2
+ # ##################Helper functions
3
+
4
+ # define the arguments that the user will input
5
+ def arguments(model)
6
+ args = OpenStudio::Measure::OSArgumentVector.new
7
+
8
+ if @use_json_package == true
9
+ # Set up package version of input.
10
+ json_default = {}
11
+ @measure_interface_detailed.each do |argument|
12
+ json_default[argument['name']] = argument['default_value']
13
+ end
14
+ default = JSON.pretty_generate(json_default)
15
+ arg = OpenStudio::Ruleset::OSArgument.makeStringArgument('json_input', true)
16
+ arg.setDisplayName('Contains a json version of the input as a single package.')
17
+ arg.setDefaultValue(default)
18
+ args << arg
19
+ else
20
+ # Conductances for all surfaces and subsurfaces.
21
+ @measure_interface_detailed.each do |argument|
22
+ arg = nil
23
+ statement = nil
24
+ case argument['type']
25
+ when 'String'
26
+ arg = OpenStudio::Ruleset::OSArgument.makeStringArgument(argument['name'], argument['is_required'])
27
+ arg.setDisplayName(argument['display_name'])
28
+ arg.setDefaultValue(argument['default_value'].to_s)
29
+
30
+ when 'Double'
31
+ arg = OpenStudio::Ruleset::OSArgument.makeDoubleArgument(argument['name'], argument['is_required'])
32
+ arg.setDisplayName((argument['display_name']).to_s)
33
+ arg.setDefaultValue((argument['default_value']).to_s.to_f)
34
+
35
+ when 'Integer'
36
+ arg = OpenStudio::Ruleset::OSArgument.makeIntegerArgument(argument['name'], argument['is_required'])
37
+ arg.setDisplayName((argument['display_name']).to_s)
38
+ arg.setDefaultValue((argument['default_value']).to_s.to_i)
39
+
40
+ when 'Choice'
41
+ arg = OpenStudio::Measure::OSArgument.makeChoiceArgument(argument['name'], argument['choices'], argument['is_required'])
42
+ arg.setDisplayName(argument['display_name'])
43
+ arg.setDefaultValue(argument['default_value'].to_s)
44
+ puts arg.defaultValueAsString
45
+
46
+ when 'Bool'
47
+ arg = OpenStudio::Measure::OSArgument.makeBoolArgument(argument['name'], argument['is_required'])
48
+ arg.setDisplayName(argument['display_name'])
49
+ arg.setDefaultValue(argument['default_value'])
50
+
51
+ when 'StringDouble'
52
+ if @use_string_double == false
53
+ arg = OpenStudio::Ruleset::OSArgument.makeDoubleArgument(argument['name'], argument['is_required'])
54
+ arg.setDefaultValue(argument['default_value'].to_f)
55
+ else
56
+ arg = OpenStudio::Ruleset::OSArgument.makeStringArgument(argument['name'], argument['is_required'])
57
+ arg.setDefaultValue(argument['default_value'].to_s)
58
+ end
59
+ arg.setDisplayName(argument['display_name'])
60
+ end
61
+ args << arg
62
+ end
63
+ end
64
+ return args
65
+ end
66
+
67
+ # returns a hash of the user inputs for you to use in your measure.
68
+ def get_hash_of_arguments(user_arguments, runner)
69
+ values = {}
70
+ if @use_json_package
71
+ return JSON.parse(runner.getStringArgumentValue('json_input', user_arguments))
72
+ else
73
+
74
+ @measure_interface_detailed.each do |argument|
75
+ case argument['type']
76
+ when 'String', 'Choice'
77
+ values[argument['name']] = runner.getStringArgumentValue(argument['name'], user_arguments)
78
+ when 'Double'
79
+ values[argument['name']] = runner.getDoubleArgumentValue(argument['name'], user_arguments)
80
+ when 'Integer'
81
+ values[argument['name']] = runner.getIntegerArgumentValue(argument['name'], user_arguments)
82
+ when 'Bool'
83
+ values[argument['name']] = runner.getBoolArgumentValue(argument['name'], user_arguments)
84
+ when 'StringDouble'
85
+ value = nil
86
+ if @use_string_double == false
87
+ value = runner.getDoubleArgumentValue(argument['name'], user_arguments).to_f
88
+ else
89
+ value = runner.getStringArgumentValue(argument['name'], user_arguments)
90
+ if valid_float?(value)
91
+ value = value.to_f
92
+ end
93
+ end
94
+ values[argument['name']] = value
95
+ end
96
+ end
97
+ end
98
+
99
+ return values
100
+ end
101
+
102
+ # boilerplate that validated ranges of inputs.
103
+ def validate_and_get_arguments_in_hash(model, runner, user_arguments)
104
+ return_value = true
105
+ values = get_hash_of_arguments(user_arguments, runner)
106
+ # use the built-in error checking
107
+ if !runner.validateUserArguments(arguments(model), user_arguments)
108
+ runner_register(runner, 'Error', 'validateUserArguments failed... Check the argument definition for errors.')
109
+ return_value = false
110
+ end
111
+
112
+ # Validate arguments
113
+ errors = ''
114
+ @measure_interface_detailed.each do |argument|
115
+ case argument['type']
116
+ when 'Double'
117
+ value = values[argument['name']]
118
+ if (!argument['max_double_value'].nil? && (value.to_f > argument['max_double_value'].to_f)) ||
119
+ (!argument['min_double_value'].nil? && (value.to_f < argument['min_double_value'].to_f))
120
+ error = "#{argument['name']} must be between #{argument['min_double_value']} and #{argument['max_double_value']}. You entered #{value.to_f} for this #{argument['name']}.\n Please enter a value withing the expected range.\n"
121
+ errors << error
122
+ end
123
+
124
+ when 'Integer'
125
+ value = values[argument['name']]
126
+ if (!argument['max_integer_value'].nil? && (value.to_i > argument['max_integer_value'].to_i)) ||
127
+ (!argument['min_integer_value'].nil? && (value.to_i < argument['min_integer_value'].to_i))
128
+ error = "#{argument['name']} must be between #{argument['min_integer_value']} and #{argument['max_integer_value']}. You entered #{value.to_i} for this #{argument['name']}.\n Please enter a value withing the expected range.\n"
129
+ errors << error
130
+ end
131
+
132
+ when 'StringDouble'
133
+ value = values[argument['name']]
134
+ if !argument['valid_strings'].include?(value) && !valid_float?(value)
135
+ error = "#{argument['name']} must be a string that can be converted to a float, or one of these #{argument['valid_strings']}. You have entered #{value}\n"
136
+ errors << error
137
+ elsif (!argument['max_double_value'].nil? && (value.to_f > argument['max_double_value'])) ||
138
+ (!argument['min_double_value'].nil? && (value.to_f < argument['min_double_value']))
139
+ error = "#{argument['name']} must be between #{argument['min_double_value']} and #{argument['max_double_value']}. You entered #{value} for #{argument['name']}. Please enter a stringdouble value in the expected range.\n"
140
+ errors << error
141
+ end
142
+ end
143
+ end
144
+ # If any errors return false, else return the hash of argument values for user to use in measure.
145
+ if errors != ''
146
+ runner.registerError(errors)
147
+ return false
148
+ end
149
+ return values
150
+ end
151
+
152
+ # Helper method to see if str is a valid float.
153
+ def valid_float?(str)
154
+ !!Float(str)
155
+ rescue StandardError
156
+ false
157
+ end
158
+ end
159
+
160
+ module BTAPMeasureTestHelper
161
+ ##### Helper methods Do notouch unless you know the consequences.
162
+
163
+ # Boiler plate to default values and number of arguments against what is in your test's setup method.
164
+ def test_arguments_and_defaults
165
+ [true, false].each do |json_input|
166
+ [true, false].each do |string_double|
167
+ @use_json_package = json_input
168
+ @use_string_double = string_double
169
+
170
+ # Create an instance of the measure
171
+ measure = get_measure_object
172
+ measure.use_json_package = @use_json_package
173
+ measure.use_string_double = @use_string_double
174
+ model = OpenStudio::Model::Model.new
175
+
176
+ # Create an instance of a runner
177
+ runner = OpenStudio::Measure::OSRunner.new(OpenStudio::WorkflowJSON.new)
178
+
179
+ # Test arguments and defaults
180
+ arguments = measure.arguments(model)
181
+ # convert whatever the input was into a hash. Then test.
182
+
183
+ # check number of arguments.
184
+ if @use_json_package
185
+ assert_equal(@measure_interface_detailed.size, JSON.parse(arguments[0].defaultValueAsString).size, "The measure should have #{@measure_interface_detailed.size} but actually has #{arguments.size}. Here the the arguement expected #{JSON.pretty_generate(@measure_interface_detailed)} /n and this is the actual /n #{JSON.pretty_generate(arguments[0])}")
186
+ else
187
+ assert_equal(@measure_interface_detailed.size, arguments.size, "The measure should have #{@measure_interface_detailed.size} but actually has #{arguments.size}. Here the the arguement expected #{@measure_interface_detailed} and this is the actual #{arguments}")
188
+ @measure_interface_detailed.each_with_index do |argument_expected, index|
189
+ assert_equal(argument_expected['name'], arguments[index].name, "Measure argument name of #{argument_expected['name']} was expected, but got #{arguments[index].name} instead.")
190
+ assert_equal(argument_expected['display_name'], arguments[index].displayName, "Display name for argument #{argument_expected['name']} was expected to be #{argument_expected['display_name']}, but got #{arguments[index].displayName} instead.")
191
+ case argument_type(arguments[index])
192
+ when 'String', 'Choice'
193
+ assert_equal(argument_expected['default_value'].to_s, arguments[index].defaultValueAsString, "The default value for argument #{argument_expected['name']} was #{argument_expected['default_value']}, but actual was #{arguments[index].defaultValueAsString}")
194
+ when 'Double'
195
+ assert_equal(argument_expected['default_value'].to_f, arguments[index].defaultValueAsDouble.to_f, "The default value for argument #{argument_expected['name']} was #{argument_expected['default_value']}, but actual was #{arguments[index].defaultValueAsString}")
196
+ when 'Integer'
197
+ assert_equal(argument_expected['default_value'].to_i, arguments[index].defaultValueAsInteger.to_i, "The default value for argument #{argument_expected['name']} was #{argument_expected['default_value']}, but actual was #{arguments[index].defaultValueAsString}")
198
+ when 'Bool'
199
+ assert_equal(argument_expected['default_value'], arguments[index].defaultValueAsBool, "The default value for argument #{argument_expected['name']} was #{argument_expected['default_value']}, but actual was #{arguments[index].defaultValueAsString}")
200
+ end
201
+ end
202
+ end
203
+ end
204
+ end
205
+ end
206
+
207
+ # Test argument ranges.
208
+ def test_argument_ranges
209
+ model = OpenStudio::Model::Model.new
210
+ standard = Standard.build('NECB2015')
211
+ standard.model_add_design_days_and_weather_file(model, nil, 'CAN_AB_Edmonton.Intl.AP.711230_CWEC2016.epw')
212
+
213
+ [true, false].each do |json_input|
214
+ [true, false].each do |string_double|
215
+ @use_json_package = json_input
216
+ @use_string_double = string_double
217
+ @measure_interface_detailed.each do |argument|
218
+ ##########################
219
+ if argument['type'] == 'Integer'
220
+ puts "Testing range for #{argument['name']}".blue
221
+ # Check over max
222
+
223
+ if !argument['max_integer_value'].nil?
224
+ puts 'Testing max limit'
225
+ input_arguments = @good_input_arguments.clone
226
+ over_max_value = argument['max_integer_value'].to_i + 1
227
+ input_arguments[argument['name']] = over_max_value
228
+ puts "Testing argument #{argument['name']} max limit of #{argument['max_integer_value']}".light_blue
229
+ input_arguments = { 'json_input' => JSON.pretty_generate(input_arguments) } if @use_json_package
230
+ run_measure(input_arguments, model)
231
+ runner = run_measure(input_arguments, model)
232
+ assert(runner.result.value.valueName != 'Success', "Checks did not stop a lower than limit value of #{over_max_value} for #{argument['name']}")
233
+ puts "Success: Testing argument #{argument['name']} max limit of #{argument['max_integer_value']}".green
234
+ end
235
+ # Check over max
236
+ if !argument['min_integer_value'].nil?
237
+ puts 'Testing min limit'
238
+ input_arguments = @good_input_arguments.clone
239
+ over_min_value = argument['min_integer_value'].to_i - 1
240
+ input_arguments[argument['name']] = over_min_value
241
+ puts "Testing argument #{argument['name']} min limit of #{argument['min_integer_value']}".light_blue
242
+ input_arguments = { 'json_input' => JSON.pretty_generate(input_arguments) } if @use_json_package
243
+ runner = run_measure(input_arguments, model)
244
+ assert(runner.result.value.valueName != 'Success', "Checks did not stop a lower than limit value of #{over_min_value} for #{argument['name']}")
245
+ puts "Success:Testing argument #{argument['name']} min limit of #{argument['min_integer_value']}".green
246
+ end
247
+
248
+ end
249
+ ###########################
250
+
251
+ if (argument['type'] == 'Double') || (argument['type'] == 'StringDouble')
252
+ puts "Testing range for #{argument['name']} ".blue
253
+ # Check over max
254
+
255
+ if !argument['max_double_value'].nil?
256
+ puts 'Testing max limit'
257
+ input_arguments = @good_input_arguments.clone
258
+ over_max_value = argument['max_double_value'].to_f + 1.0
259
+ over_max_value = over_max_value.to_s if argument['type'].downcase == 'StringDouble'.downcase
260
+ input_arguments[argument['name']] = over_max_value
261
+ puts "Testing argument #{argument['name']} max limit of #{argument['max_double_value']}".light_blue
262
+ input_arguments = { 'json_input' => JSON.pretty_generate(input_arguments) } if @use_json_package
263
+ run_measure(input_arguments, model)
264
+ runner = run_measure(input_arguments, model)
265
+ assert(runner.result.value.valueName != 'Success', "Checks did not stop a lower than limit value of #{over_max_value} for #{argument['name']}")
266
+ puts "Success: Testing argument #{argument['name']} max limit of #{argument['max_double_value']}".green
267
+ end
268
+ # Check over max
269
+ if !argument['min_double_value'].nil?
270
+ puts 'Testing min limit'
271
+ input_arguments = @good_input_arguments.clone
272
+ over_min_value = argument['min_double_value'].to_f - 1.0
273
+ over_min_value = over_max_value.to_s if argument['type'].downcase == 'StringDouble'.downcase
274
+ input_arguments[argument['name']] = over_min_value
275
+ puts "Testing argument #{argument['name']} min limit of #{argument['min_double_value']}".light_blue
276
+ input_arguments = { 'json_input' => JSON.pretty_generate(input_arguments) } if @use_json_package
277
+ runner = run_measure(input_arguments, model)
278
+ assert(runner.result.value.valueName != 'Success', "Checks did not stop a lower than limit value of #{over_min_value} for #{argument['name']}")
279
+ puts "Success:Testing argument #{argument['name']} min limit of #{argument['min_double_value']}".green
280
+ end
281
+
282
+ end
283
+
284
+ if (argument['type'] == 'StringDouble') && !argument['valid_strings'].nil? && @use_string_double
285
+ input_arguments = @good_input_arguments.clone
286
+ input_arguments[argument['name']] = SecureRandom.uuid.to_s
287
+ puts "Testing argument #{argument['name']} min limit of #{argument['min_double_value']}".light_blue
288
+ input_arguments = { 'json_input' => JSON.pretty_generate(input_arguments) } if @use_json_package
289
+ runner = run_measure(input_arguments, model)
290
+ assert(runner.result.value.valueName != 'Success', "Checks did not stop a lower than limit value of #{over_min_value} for #{argument['name']}")
291
+ end
292
+ end
293
+ end
294
+ end
295
+ end
296
+
297
+ # helper method to create necb archetype as a starting point for testing.
298
+ def create_necb_protype_model(building_type, climate_zone, epw_file, template)
299
+ osm_directory = "#{Dir.pwd}/output/#{building_type}-#{template}-#{climate_zone}-#{epw_file}"
300
+ FileUtils.mkdir_p osm_directory unless Dir.exist?(osm_directory)
301
+ # Get Weather climate zone from lookup
302
+ weather = BTAP::Environment::WeatherFile.new(epw_file)
303
+ # create model
304
+ building_name = "#{template}_#{building_type}"
305
+
306
+ prototype_creator = Standard.build(building_name)
307
+ model = prototype_creator.model_create_prototype_model(climate_zone,
308
+ epw_file,
309
+ osm_directory,
310
+ @debug,
311
+ model)
312
+ # set weather file to epw_file passed to model.
313
+ weather.set_weather_file(model)
314
+ return model
315
+ end
316
+
317
+ # Custom way to run the measure in the test.
318
+ def run_measure(input_arguments, model)
319
+ # This will create a instance of the measure you wish to test. It does this based on the test class name.
320
+ measure = get_measure_object
321
+ measure.use_json_package = @use_json_package
322
+ measure.use_string_double = @use_string_double
323
+ # Return false if can't
324
+ return false if measure == false
325
+
326
+ arguments = measure.arguments(model)
327
+ argument_map = OpenStudio::Measure.convertOSArgumentVectorToMap(arguments)
328
+ runner = OpenStudio::Measure::OSRunner.new(OpenStudio::WorkflowJSON.new)
329
+ # Check if
330
+
331
+ # Set the arguements in the argument map use json or real arguments.
332
+ if @use_json_package
333
+ argument = arguments[0].clone
334
+ assert(argument.setValue(input_arguments['json_input']), "Could not set value for 'json_input' to #{input_arguments['json_input']}")
335
+ argument_map['json_input'] = argument
336
+ else
337
+ input_arguments.each_with_index do |(key, value), index|
338
+ argument = arguments[index].clone
339
+ if argument_type(argument) == 'Double'
340
+ # forces it to a double if it is a double.
341
+ assert(argument.setValue(value.to_f), "Could not set value for #{key} to #{value}")
342
+ else
343
+ assert(argument.setValue(value.to_s), "Could not set value for #{key} to #{value}")
344
+ end
345
+ argument_map[key] = argument
346
+ end
347
+ end
348
+ # run the measure
349
+ measure.run(model, runner, argument_map)
350
+ runner.result
351
+ return runner
352
+ end
353
+
354
+ # Fancy way of getting the measure object automatically.
355
+ def get_measure_object
356
+ measure_class_name = self.class.name.to_s.match(/(BTAP.*)(\_Test)/i).captures[0]
357
+ measure = nil
358
+ eval "measure = #{measure_class_name}.new"
359
+ if measure.nil?
360
+ puts "Measure class #{measure_class_name} is invalid. Please ensure the test class name is of the form 'BTAPMeasureName_Test' (Note: BTAP is case sensitive.) ".red
361
+ return false
362
+ end
363
+ return measure
364
+ end
365
+
366
+ # Determines the OS argument type dynamically.
367
+ def argument_type(argument)
368
+ case argument.type.value
369
+ when 0
370
+ return 'Bool'
371
+ when 1 # Double
372
+ return 'Double'
373
+ when 2 # Quantity
374
+ return 'Quantity'
375
+ when 3 # Integer
376
+ return 'Integer'
377
+ when 4
378
+ return 'String'
379
+ when 5 # Choice
380
+ return 'Choice'
381
+ when 6 # Path
382
+ return 'Path'
383
+ when 7 # Separator
384
+ return 'Separator'
385
+ else
386
+ return 'Blah'
387
+ end
388
+ end
389
+
390
+ # Valid float helper.
391
+ def valid_float?(str)
392
+ !!Float(str)
393
+ rescue StandardError
394
+ false
395
+ end
396
+
397
+ # Method does a deep copy of a model.
398
+ def copy_model(model)
399
+ copy_model = OpenStudio::Model::Model.new
400
+ # remove existing objects from model
401
+ handles = OpenStudio::UUIDVector.new
402
+ copy_model.objects.each do |obj|
403
+ handles << obj.handle
404
+ end
405
+ copy_model.removeObjects(handles)
406
+ # put contents of new_model into model_to_replace
407
+ copy_model.addObjects(model.toIdfFile.objects)
408
+ return copy_model
409
+ end
410
+ end
411
+
412
+ # Add colourisation functionality to strings. Makes following test output easier.
413
+ class String
414
+ # colorization
415
+ def colorize(color_code)
416
+ "\e[#{color_code}m#{self}\e[0m"
417
+ end
418
+
419
+ # Use for error messages
420
+ def red
421
+ colorize(31)
422
+ end
423
+
424
+ # Use for success messages
425
+ def green
426
+ colorize(32)
427
+ end
428
+
429
+ # Use for warning messages
430
+ def yellow
431
+ colorize(33)
432
+ end
433
+
434
+ # Use for start of tests/sections
435
+ def blue
436
+ colorize(34)
437
+ end
438
+
439
+ # Use for argument value reporting
440
+ def light_blue
441
+ colorize(36)
442
+ end
443
+
444
+ # Use for larger text dumps (e.g. whole files)
445
+ def pink
446
+ colorize(35)
447
+ end
448
+ end