openstudio-calibration 0.1.2

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.
Files changed (218) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +29 -0
  3. data/CHANGELOG.md +14 -0
  4. data/Gemfile +20 -0
  5. data/Jenkinsfile +6 -0
  6. data/LICENSE.md +27 -0
  7. data/README.md +33 -0
  8. data/Rakefile +50 -0
  9. data/doc_templates/LICENSE.md +27 -0
  10. data/doc_templates/README.md.erb +42 -0
  11. data/doc_templates/copyright_erb.txt +36 -0
  12. data/doc_templates/copyright_js.txt +4 -0
  13. data/doc_templates/copyright_ruby.txt +34 -0
  14. data/lib/files/.gitkeep +0 -0
  15. data/lib/measures/AddMonthlyJSONUtilityData/LICENSE.md +27 -0
  16. data/lib/measures/AddMonthlyJSONUtilityData/README.md +96 -0
  17. data/lib/measures/AddMonthlyJSONUtilityData/README.md.erb +42 -0
  18. data/lib/measures/AddMonthlyJSONUtilityData/measure.rb +280 -0
  19. data/lib/measures/AddMonthlyJSONUtilityData/measure.xml +163 -0
  20. data/lib/measures/AddMonthlyUtilityData/LICENSE.md +27 -0
  21. data/lib/measures/AddMonthlyUtilityData/README.md +64 -0
  22. data/lib/measures/AddMonthlyUtilityData/README.md.erb +42 -0
  23. data/lib/measures/AddMonthlyUtilityData/measure.rb +312 -0
  24. data/lib/measures/AddMonthlyUtilityData/measure.xml +115 -0
  25. data/lib/measures/AddMonthlyUtilityData/tests/AddMonthlyUtilityData_Test.rb +88 -0
  26. data/lib/measures/AddMonthlyUtilityData/tests/electric_billed_usages.json +198 -0
  27. data/lib/measures/AddMonthlyUtilityData/tests/gas_billed_usages.json +198 -0
  28. data/lib/measures/CalibrationReports/LICENSE.md +27 -0
  29. data/lib/measures/CalibrationReports/README.md +26 -0
  30. data/lib/measures/CalibrationReports/README.md.erb +42 -0
  31. data/lib/measures/CalibrationReports/measure.rb +511 -0
  32. data/lib/measures/CalibrationReports/measure.xml +98 -0
  33. data/lib/measures/CalibrationReports/resources/report.html.in +379 -0
  34. data/lib/measures/CalibrationReports/tests/CalibrationReports_Test.rb +523 -0
  35. data/lib/measures/CalibrationReports/tests/ExampleModel.osm +10497 -0
  36. data/lib/measures/CalibrationReports/tests/ExampleModelNoDemandInput.osm +10560 -0
  37. data/lib/measures/CalibrationReports/tests/ExampleModelNoGasInput.osm +10456 -0
  38. data/lib/measures/CalibrationReports/tests/USA_CO_Golden-NREL.724666_TMY3.epw +8768 -0
  39. data/lib/measures/CalibrationReportsEnhanced/LICENSE.md +27 -0
  40. data/lib/measures/CalibrationReportsEnhanced/README.md +143 -0
  41. data/lib/measures/CalibrationReportsEnhanced/README.md.erb +42 -0
  42. data/lib/measures/CalibrationReportsEnhanced/measure.rb +798 -0
  43. data/lib/measures/CalibrationReportsEnhanced/measure.xml +372 -0
  44. data/lib/measures/CalibrationReportsEnhanced/resources/report.html.in +380 -0
  45. data/lib/measures/CalibrationReportsEnhanced/tests/CalibrationReportsEnhanced_Test.rb +734 -0
  46. data/lib/measures/CalibrationReportsEnhanced/tests/ExampleModel.osm +10497 -0
  47. data/lib/measures/CalibrationReportsEnhanced/tests/ExampleModel_FuelOil.osm +12740 -0
  48. data/lib/measures/CalibrationReportsEnhanced/tests/USA_CO_Golden-NREL.724666_TMY3.epw +8768 -0
  49. data/lib/measures/CalibrationReportsEnhanced21/LICENSE.md +27 -0
  50. data/lib/measures/CalibrationReportsEnhanced21/README.md +109 -0
  51. data/lib/measures/CalibrationReportsEnhanced21/README.md.erb +42 -0
  52. data/lib/measures/CalibrationReportsEnhanced21/measure.rb +690 -0
  53. data/lib/measures/CalibrationReportsEnhanced21/measure.xml +269 -0
  54. data/lib/measures/CalibrationReportsEnhanced21/resources/report.html.in +380 -0
  55. data/lib/measures/CoilCoolingDXSingleSpeedMultiplier/LICENSE.md +27 -0
  56. data/lib/measures/CoilCoolingDXSingleSpeedMultiplier/README.md +48 -0
  57. data/lib/measures/CoilCoolingDXSingleSpeedMultiplier/README.md.erb +42 -0
  58. data/lib/measures/CoilCoolingDXSingleSpeedMultiplier/measure.rb +237 -0
  59. data/lib/measures/CoilCoolingDXSingleSpeedMultiplier/measure.xml +93 -0
  60. data/lib/measures/CoilCoolingDXSingleSpeedPercentChange/LICENSE.md +27 -0
  61. data/lib/measures/CoilCoolingDXSingleSpeedPercentChange/README.md +48 -0
  62. data/lib/measures/CoilCoolingDXSingleSpeedPercentChange/README.md.erb +42 -0
  63. data/lib/measures/CoilCoolingDXSingleSpeedPercentChange/measure.rb +228 -0
  64. data/lib/measures/CoilCoolingDXSingleSpeedPercentChange/measure.xml +93 -0
  65. data/lib/measures/CoilCoolingDXTwoSpeedMultiplier/LICENSE.md +27 -0
  66. data/lib/measures/CoilCoolingDXTwoSpeedMultiplier/README.md +64 -0
  67. data/lib/measures/CoilCoolingDXTwoSpeedMultiplier/README.md.erb +42 -0
  68. data/lib/measures/CoilCoolingDXTwoSpeedMultiplier/measure.rb +280 -0
  69. data/lib/measures/CoilCoolingDXTwoSpeedMultiplier/measure.xml +111 -0
  70. data/lib/measures/CoilCoolingDXTwoSpeedPercentChange/LICENSE.md +27 -0
  71. data/lib/measures/CoilCoolingDXTwoSpeedPercentChange/README.md +64 -0
  72. data/lib/measures/CoilCoolingDXTwoSpeedPercentChange/README.md.erb +42 -0
  73. data/lib/measures/CoilCoolingDXTwoSpeedPercentChange/measure.rb +270 -0
  74. data/lib/measures/CoilCoolingDXTwoSpeedPercentChange/measure.xml +111 -0
  75. data/lib/measures/CoilCoolingWaterMultiplier/LICENSE.md +27 -0
  76. data/lib/measures/CoilCoolingWaterMultiplier/README.md +80 -0
  77. data/lib/measures/CoilCoolingWaterMultiplier/README.md.erb +42 -0
  78. data/lib/measures/CoilCoolingWaterMultiplier/measure.rb +324 -0
  79. data/lib/measures/CoilCoolingWaterMultiplier/measure.xml +129 -0
  80. data/lib/measures/CoilCoolingWaterPercentChange/LICENSE.md +27 -0
  81. data/lib/measures/CoilCoolingWaterPercentChange/README.md +80 -0
  82. data/lib/measures/CoilCoolingWaterPercentChange/README.md.erb +42 -0
  83. data/lib/measures/CoilCoolingWaterPercentChange/measure.rb +311 -0
  84. data/lib/measures/CoilCoolingWaterPercentChange/measure.xml +129 -0
  85. data/lib/measures/CoilHeatingElectricMultiplier/LICENSE.md +27 -0
  86. data/lib/measures/CoilHeatingElectricMultiplier/README.md +48 -0
  87. data/lib/measures/CoilHeatingElectricMultiplier/README.md.erb +42 -0
  88. data/lib/measures/CoilHeatingElectricMultiplier/measure.rb +240 -0
  89. data/lib/measures/CoilHeatingElectricMultiplier/measure.xml +93 -0
  90. data/lib/measures/CoilHeatingElectricPercentChange/LICENSE.md +27 -0
  91. data/lib/measures/CoilHeatingElectricPercentChange/README.md +48 -0
  92. data/lib/measures/CoilHeatingElectricPercentChange/README.md.erb +42 -0
  93. data/lib/measures/CoilHeatingElectricPercentChange/measure.rb +231 -0
  94. data/lib/measures/CoilHeatingElectricPercentChange/measure.xml +93 -0
  95. data/lib/measures/CoilHeatingGasMultiplier/LICENSE.md +27 -0
  96. data/lib/measures/CoilHeatingGasMultiplier/README.md +64 -0
  97. data/lib/measures/CoilHeatingGasMultiplier/README.md.erb +42 -0
  98. data/lib/measures/CoilHeatingGasMultiplier/measure.rb +282 -0
  99. data/lib/measures/CoilHeatingGasMultiplier/measure.xml +111 -0
  100. data/lib/measures/CoilHeatingGasPercentChange/LICENSE.md +27 -0
  101. data/lib/measures/CoilHeatingGasPercentChange/README.md +64 -0
  102. data/lib/measures/CoilHeatingGasPercentChange/README.md.erb +42 -0
  103. data/lib/measures/CoilHeatingGasPercentChange/measure.rb +271 -0
  104. data/lib/measures/CoilHeatingGasPercentChange/measure.xml +111 -0
  105. data/lib/measures/CoilHeatingWaterMultiplier/LICENSE.md +27 -0
  106. data/lib/measures/CoilHeatingWaterMultiplier/README.md +48 -0
  107. data/lib/measures/CoilHeatingWaterMultiplier/README.md.erb +42 -0
  108. data/lib/measures/CoilHeatingWaterMultiplier/measure.rb +235 -0
  109. data/lib/measures/CoilHeatingWaterMultiplier/measure.xml +93 -0
  110. data/lib/measures/CoilHeatingWaterPercentChange/LICENSE.md +27 -0
  111. data/lib/measures/CoilHeatingWaterPercentChange/README.md +48 -0
  112. data/lib/measures/CoilHeatingWaterPercentChange/README.md.erb +42 -0
  113. data/lib/measures/CoilHeatingWaterPercentChange/measure.rb +226 -0
  114. data/lib/measures/CoilHeatingWaterPercentChange/measure.xml +93 -0
  115. data/lib/measures/ConstructionLayerZeroMaterialProperties/LICENSE.md +27 -0
  116. data/lib/measures/ConstructionLayerZeroMaterialProperties/README.md +88 -0
  117. data/lib/measures/ConstructionLayerZeroMaterialProperties/README.md.erb +42 -0
  118. data/lib/measures/ConstructionLayerZeroMaterialProperties/measure.rb +221 -0
  119. data/lib/measures/ConstructionLayerZeroMaterialProperties/measure.xml +194 -0
  120. data/lib/measures/ElectricBaseboardEfficiencyAndCapacity/LICENSE.md +27 -0
  121. data/lib/measures/ElectricBaseboardEfficiencyAndCapacity/README.md +40 -0
  122. data/lib/measures/ElectricBaseboardEfficiencyAndCapacity/README.md.erb +42 -0
  123. data/lib/measures/ElectricBaseboardEfficiencyAndCapacity/measure.rb +102 -0
  124. data/lib/measures/ElectricBaseboardEfficiencyAndCapacity/measure.xml +78 -0
  125. data/lib/measures/ExteriorWallThermalPropertiesMultiplier/LICENSE.md +27 -0
  126. data/lib/measures/ExteriorWallThermalPropertiesMultiplier/README.md +48 -0
  127. data/lib/measures/ExteriorWallThermalPropertiesMultiplier/README.md.erb +42 -0
  128. data/lib/measures/ExteriorWallThermalPropertiesMultiplier/measure.rb +263 -0
  129. data/lib/measures/ExteriorWallThermalPropertiesMultiplier/measure.xml +97 -0
  130. data/lib/measures/ExteriorWallThermalPropertiesPercentChange/LICENSE.md +27 -0
  131. data/lib/measures/ExteriorWallThermalPropertiesPercentChange/README.md +48 -0
  132. data/lib/measures/ExteriorWallThermalPropertiesPercentChange/README.md.erb +42 -0
  133. data/lib/measures/ExteriorWallThermalPropertiesPercentChange/measure.rb +253 -0
  134. data/lib/measures/ExteriorWallThermalPropertiesPercentChange/measure.xml +97 -0
  135. data/lib/measures/FansMultiplier/LICENSE.md +27 -0
  136. data/lib/measures/FansMultiplier/README.md +64 -0
  137. data/lib/measures/FansMultiplier/README.md.erb +42 -0
  138. data/lib/measures/FansMultiplier/measure.rb +297 -0
  139. data/lib/measures/FansMultiplier/measure.xml +166 -0
  140. data/lib/measures/FansPercentChange/LICENSE.md +27 -0
  141. data/lib/measures/FansPercentChange/README.md +64 -0
  142. data/lib/measures/FansPercentChange/README.md.erb +42 -0
  143. data/lib/measures/FansPercentChange/measure.rb +286 -0
  144. data/lib/measures/FansPercentChange/measure.xml +166 -0
  145. data/lib/measures/GeneralCalibrationMeasureMultiplier/LICENSE.md +27 -0
  146. data/lib/measures/GeneralCalibrationMeasureMultiplier/README.md +112 -0
  147. data/lib/measures/GeneralCalibrationMeasureMultiplier/README.md.erb +42 -0
  148. data/lib/measures/GeneralCalibrationMeasureMultiplier/measure.rb +639 -0
  149. data/lib/measures/GeneralCalibrationMeasureMultiplier/measure.xml +229 -0
  150. data/lib/measures/GeneralCalibrationMeasurePercentChange/LICENSE.md +27 -0
  151. data/lib/measures/GeneralCalibrationMeasurePercentChange/README.md +112 -0
  152. data/lib/measures/GeneralCalibrationMeasurePercentChange/README.md.erb +42 -0
  153. data/lib/measures/GeneralCalibrationMeasurePercentChange/measure.rb +756 -0
  154. data/lib/measures/GeneralCalibrationMeasurePercentChange/measure.xml +229 -0
  155. data/lib/measures/HardSizeHvac/LICENSE.md +27 -0
  156. data/lib/measures/HardSizeHvac/README.md +26 -0
  157. data/lib/measures/HardSizeHvac/README.md.erb +42 -0
  158. data/lib/measures/HardSizeHvac/measure.rb +88 -0
  159. data/lib/measures/HardSizeHvac/measure.xml +81 -0
  160. data/lib/measures/MaalkaMonthlyJSONUtilityData/LICENSE.md +27 -0
  161. data/lib/measures/MaalkaMonthlyJSONUtilityData/README.md +104 -0
  162. data/lib/measures/MaalkaMonthlyJSONUtilityData/README.md.erb +42 -0
  163. data/lib/measures/MaalkaMonthlyJSONUtilityData/measure.rb +304 -0
  164. data/lib/measures/MaalkaMonthlyJSONUtilityData/measure.xml +216 -0
  165. data/lib/measures/RValueOfInsulationForConstructionMultiplier/LICENSE.md +27 -0
  166. data/lib/measures/RValueOfInsulationForConstructionMultiplier/README.md +40 -0
  167. data/lib/measures/RValueOfInsulationForConstructionMultiplier/README.md.erb +42 -0
  168. data/lib/measures/RValueOfInsulationForConstructionMultiplier/measure.rb +196 -0
  169. data/lib/measures/RValueOfInsulationForConstructionMultiplier/measure.xml +132 -0
  170. data/lib/measures/RValueOfInsulationForConstructionPercentageChange/LICENSE.md +27 -0
  171. data/lib/measures/RValueOfInsulationForConstructionPercentageChange/README.md +40 -0
  172. data/lib/measures/RValueOfInsulationForConstructionPercentageChange/README.md.erb +42 -0
  173. data/lib/measures/RValueOfInsulationForConstructionPercentageChange/measure.rb +189 -0
  174. data/lib/measures/RValueOfInsulationForConstructionPercentageChange/measure.xml +132 -0
  175. data/lib/measures/RoofThermalPropertiesMultiplier/LICENSE.md +27 -0
  176. data/lib/measures/RoofThermalPropertiesMultiplier/README.md +48 -0
  177. data/lib/measures/RoofThermalPropertiesMultiplier/README.md.erb +42 -0
  178. data/lib/measures/RoofThermalPropertiesMultiplier/measure.rb +263 -0
  179. data/lib/measures/RoofThermalPropertiesMultiplier/measure.xml +97 -0
  180. data/lib/measures/RoofThermalPropertiesPercentChange/LICENSE.md +27 -0
  181. data/lib/measures/RoofThermalPropertiesPercentChange/README.md +48 -0
  182. data/lib/measures/RoofThermalPropertiesPercentChange/README.md.erb +42 -0
  183. data/lib/measures/RoofThermalPropertiesPercentChange/measure.rb +253 -0
  184. data/lib/measures/RoofThermalPropertiesPercentChange/measure.xml +97 -0
  185. data/lib/measures/TimeseriesObjectiveFunction/LICENSE.md +27 -0
  186. data/lib/measures/TimeseriesObjectiveFunction/README.md +207 -0
  187. data/lib/measures/TimeseriesObjectiveFunction/README.md.erb +42 -0
  188. data/lib/measures/TimeseriesObjectiveFunction/measure.rb +748 -0
  189. data/lib/measures/TimeseriesObjectiveFunction/measure.xml +435 -0
  190. data/lib/measures/TimeseriesObjectiveFunction/resources/report.html.erb +288 -0
  191. data/lib/measures/TimeseriesPlot/LICENSE.md +27 -0
  192. data/lib/measures/TimeseriesPlot/README.md +56 -0
  193. data/lib/measures/TimeseriesPlot/README.md.erb +42 -0
  194. data/lib/measures/TimeseriesPlot/measure.rb +302 -0
  195. data/lib/measures/TimeseriesPlot/measure.xml +137 -0
  196. data/lib/measures/TimeseriesPlot/resources/report.html.erb +270 -0
  197. data/lib/measures/WaterHeaterMixedMultiplier/LICENSE.md +27 -0
  198. data/lib/measures/WaterHeaterMixedMultiplier/README.md +64 -0
  199. data/lib/measures/WaterHeaterMixedMultiplier/README.md.erb +42 -0
  200. data/lib/measures/WaterHeaterMixedMultiplier/measure.rb +255 -0
  201. data/lib/measures/WaterHeaterMixedMultiplier/measure.xml +180 -0
  202. data/lib/measures/WaterHeaterMixedPercentChange/LICENSE.md +27 -0
  203. data/lib/measures/WaterHeaterMixedPercentChange/README.md +64 -0
  204. data/lib/measures/WaterHeaterMixedPercentChange/README.md.erb +42 -0
  205. data/lib/measures/WaterHeaterMixedPercentChange/measure.rb +245 -0
  206. data/lib/measures/WaterHeaterMixedPercentChange/measure.xml +180 -0
  207. data/lib/measures/zone_report/LICENSE.md +27 -0
  208. data/lib/measures/zone_report/README.md +26 -0
  209. data/lib/measures/zone_report/README.md.erb +42 -0
  210. data/lib/measures/zone_report/measure.rb +706 -0
  211. data/lib/measures/zone_report/measure.xml +67 -0
  212. data/lib/measures/zone_report/resources/report.html.in +342 -0
  213. data/lib/openstudio-calibration-measures.rb +36 -0
  214. data/lib/openstudio/calibration_measures.rb +37 -0
  215. data/lib/openstudio/calibration_measures/extension.rb +49 -0
  216. data/lib/openstudio/calibration_measures/version.rb +40 -0
  217. data/openstudio-calibration.gemspec +30 -0
  218. metadata +331 -0
@@ -0,0 +1,229 @@
1
+ <measure>
2
+ <schema_version>3.0</schema_version>
3
+ <name>general_calibration_measure_multiplier</name>
4
+ <uid>d622534e-a3c9-4ba5-b616-53dce2a18ac8</uid>
5
+ <version_id>1425fa83-08e1-4154-a7ee-27960c7c89ad</version_id>
6
+ <version_modified>20200325T030943Z</version_modified>
7
+ <xml_checksum>DEC0D835</xml_checksum>
8
+ <class_name>GeneralCalibrationMeasureMultiplier</class_name>
9
+ <display_name>General Calibration Measure Multiplier</display_name>
10
+ <description>This is a general purpose measure to calibrate space and space type elements with a Multiplier.</description>
11
+ <modeler_description>It will be used for calibration of space and spaceType loads as well as infiltration, and outdoor air. User can choose between a SINGLE SpaceType or ALL the SpaceTypes as well as a SINGLE Space or ALL the Spaces.</modeler_description>
12
+ <arguments>
13
+ <argument>
14
+ <name>space_type</name>
15
+ <display_name>Apply the Measure to a SINGLE SpaceType, ALL the SpaceTypes or NONE.</display_name>
16
+ <type>Choice</type>
17
+ <required>true</required>
18
+ <model_dependent>false</model_dependent>
19
+ <default_value>*All SpaceTypes*</default_value>
20
+ <choices>
21
+ <choice>
22
+ <value>{91f0e603-1a49-4ba6-89e6-f693855eabef}</value>
23
+ <display_name>*All SpaceTypes*</display_name>
24
+ </choice>
25
+ <choice>
26
+ <value>0</value>
27
+ <display_name>*None*</display_name>
28
+ </choice>
29
+ </choices>
30
+ </argument>
31
+ <argument>
32
+ <name>space</name>
33
+ <display_name>Apply the Measure to a SINGLE Space, ALL the Spaces or NONE.</display_name>
34
+ <type>Choice</type>
35
+ <required>true</required>
36
+ <model_dependent>false</model_dependent>
37
+ <default_value>*All Spaces*</default_value>
38
+ <choices>
39
+ <choice>
40
+ <value>{91f0e603-1a49-4ba6-89e6-f693855eabef}</value>
41
+ <display_name>*All Spaces*</display_name>
42
+ </choice>
43
+ <choice>
44
+ <value>0</value>
45
+ <display_name>*None*</display_name>
46
+ </choice>
47
+ </choices>
48
+ </argument>
49
+ <argument>
50
+ <name>Lights_multiplier</name>
51
+ <display_name>Multiplier for Lights.</display_name>
52
+ <description>Multiplier for Lights.</description>
53
+ <type>Double</type>
54
+ <required>true</required>
55
+ <model_dependent>false</model_dependent>
56
+ <default_value>1</default_value>
57
+ </argument>
58
+ <argument>
59
+ <name>Luminaire_multiplier</name>
60
+ <display_name>Multiplier for Luminaire.</display_name>
61
+ <description>Multiplier for Luminaire.</description>
62
+ <type>Double</type>
63
+ <required>true</required>
64
+ <model_dependent>false</model_dependent>
65
+ <default_value>1</default_value>
66
+ </argument>
67
+ <argument>
68
+ <name>ElectricEquipment_multiplier</name>
69
+ <display_name>Multiplier for Electric Equipment.</display_name>
70
+ <description>Multiplier for Electric Equipment.</description>
71
+ <type>Double</type>
72
+ <required>true</required>
73
+ <model_dependent>false</model_dependent>
74
+ <default_value>1</default_value>
75
+ </argument>
76
+ <argument>
77
+ <name>GasEquipment_multiplier</name>
78
+ <display_name>Multiplier for Gas Equipment.</display_name>
79
+ <description>Multiplier for Gas Equipment.</description>
80
+ <type>Double</type>
81
+ <required>true</required>
82
+ <model_dependent>false</model_dependent>
83
+ <default_value>1</default_value>
84
+ </argument>
85
+ <argument>
86
+ <name>OtherEquipment_multiplier</name>
87
+ <display_name>Multiplier for OtherEquipment.</display_name>
88
+ <description>Multiplier for OtherEquipment.</description>
89
+ <type>Double</type>
90
+ <required>true</required>
91
+ <model_dependent>false</model_dependent>
92
+ <default_value>1</default_value>
93
+ </argument>
94
+ <argument>
95
+ <name>People_multiplier</name>
96
+ <display_name>Multiplier for number of people.</display_name>
97
+ <description>Multiplier for number of people.</description>
98
+ <type>Double</type>
99
+ <required>true</required>
100
+ <model_dependent>false</model_dependent>
101
+ <default_value>1</default_value>
102
+ </argument>
103
+ <argument>
104
+ <name>InternalMass_multiplier</name>
105
+ <display_name>Multiplier for Internal Mass.</display_name>
106
+ <description>Multiplier for Internal Mass.</description>
107
+ <type>Double</type>
108
+ <required>true</required>
109
+ <model_dependent>false</model_dependent>
110
+ <default_value>1</default_value>
111
+ </argument>
112
+ <argument>
113
+ <name>Infiltration_multiplier</name>
114
+ <display_name>Multiplier for infiltration.</display_name>
115
+ <description>Multiplier for infiltration.</description>
116
+ <type>Double</type>
117
+ <required>true</required>
118
+ <model_dependent>false</model_dependent>
119
+ <default_value>1</default_value>
120
+ </argument>
121
+ <argument>
122
+ <name>Ventilation_multiplier</name>
123
+ <display_name>Multiplier for Ventilation.</display_name>
124
+ <description>Multiplier for Ventilation.</description>
125
+ <type>Double</type>
126
+ <required>true</required>
127
+ <model_dependent>false</model_dependent>
128
+ <default_value>1</default_value>
129
+ </argument>
130
+ </arguments>
131
+ <outputs/>
132
+ <provenances/>
133
+ <tags>
134
+ <tag>Whole Building.Space Types</tag>
135
+ </tags>
136
+ <attributes>
137
+ <attribute>
138
+ <name>Intended Software Tool</name>
139
+ <value>Analysis Spreadsheet</value>
140
+ <datatype>string</datatype>
141
+ </attribute>
142
+ <attribute>
143
+ <name>Intended Use Case</name>
144
+ <value>Model Articulation</value>
145
+ <datatype>string</datatype>
146
+ </attribute>
147
+ <attribute>
148
+ <name>Intended Use Case</name>
149
+ <value>Calibration</value>
150
+ <datatype>string</datatype>
151
+ </attribute>
152
+ <attribute>
153
+ <name>Intended Use Case</name>
154
+ <value>Sensitivity Analysis</value>
155
+ <datatype>string</datatype>
156
+ </attribute>
157
+ <attribute>
158
+ <name>Measure Type</name>
159
+ <value>ModelMeasure</value>
160
+ <datatype>string</datatype>
161
+ </attribute>
162
+ <attribute>
163
+ <name>Intended Software Tool</name>
164
+ <value>Apply Measure Now</value>
165
+ <datatype>string</datatype>
166
+ </attribute>
167
+ <attribute>
168
+ <name>Intended Software Tool</name>
169
+ <value>OpenStudio Application</value>
170
+ <datatype>string</datatype>
171
+ </attribute>
172
+ <attribute>
173
+ <name>Intended Software Tool</name>
174
+ <value>Parametric Analysis Tool</value>
175
+ <datatype>string</datatype>
176
+ </attribute>
177
+ <attribute>
178
+ <name>Intended Software Tool</name>
179
+ <value>Analysis Spreadsheet</value>
180
+ <datatype>string</datatype>
181
+ </attribute>
182
+ <attribute>
183
+ <name>Intended Use Case</name>
184
+ <value>Model Articulation</value>
185
+ <datatype>string</datatype>
186
+ </attribute>
187
+ <attribute>
188
+ <name>Intended Use Case</name>
189
+ <value>Calibration</value>
190
+ <datatype>string</datatype>
191
+ </attribute>
192
+ <attribute>
193
+ <name>Intended Use Case</name>
194
+ <value>Sensitivity Analysis</value>
195
+ <datatype>string</datatype>
196
+ </attribute>
197
+ </attributes>
198
+ <files>
199
+ <file>
200
+ <filename>LICENSE.md</filename>
201
+ <filetype>md</filetype>
202
+ <usage_type>license</usage_type>
203
+ <checksum>E0468DD6</checksum>
204
+ </file>
205
+ <file>
206
+ <filename>README.md.erb</filename>
207
+ <filetype>erb</filetype>
208
+ <usage_type>readmeerb</usage_type>
209
+ <checksum>703C9964</checksum>
210
+ </file>
211
+ <file>
212
+ <filename>README.md</filename>
213
+ <filetype>md</filetype>
214
+ <usage_type>readme</usage_type>
215
+ <checksum>E3E6128D</checksum>
216
+ </file>
217
+ <file>
218
+ <version>
219
+ <software_program>OpenStudio</software_program>
220
+ <identifier>2.1.0</identifier>
221
+ <min_compatible>2.1.0</min_compatible>
222
+ </version>
223
+ <filename>measure.rb</filename>
224
+ <filetype>rb</filetype>
225
+ <usage_type>script</usage_type>
226
+ <checksum>0B6B9749</checksum>
227
+ </file>
228
+ </files>
229
+ </measure>
@@ -0,0 +1,27 @@
1
+ OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC. All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without modification, are permitted
4
+ provided that the following conditions are met:
5
+
6
+ (1) Redistributions of source code must retain the above copyright notice, this list of conditions
7
+ and the following disclaimer.
8
+
9
+ (2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions
10
+ and the following disclaimer in the documentation and/or other materials provided with the distribution.
11
+
12
+ (3) Neither the name of the copyright holder nor the names of any contributors may be used to endorse
13
+ or promote products derived from this software without specific prior written permission from the
14
+ respective party.
15
+
16
+ (4) Other than as required in clauses (1) and (2), distributions in any form of modifications or other
17
+ derivative works may not use the "OpenStudio" trademark, "OS", "os", or any other confusingly similar
18
+ designation without specific prior written permission from Alliance for Sustainable Energy, LLC.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
21
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER, THE UNITED STATES GOVERNMENT,
23
+ OR ANY CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
25
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,112 @@
1
+
2
+
3
+ ###### (Automatically generated documentation)
4
+
5
+ # General Calibration Measure Percent Change
6
+
7
+ ## Description
8
+ This is a general purpose measure to calibrate space and space type elements with a percent change.
9
+
10
+ ## Modeler Description
11
+ It will be used for calibration of space and spaceType loads as well as infiltration, and outdoor air. User can choose between a SINGLE SpaceType or ALL the SpaceTypes as well as a SINGLE Space or ALL the Spaces.
12
+
13
+ ## Measure Type
14
+ ModelMeasure
15
+
16
+ ## Taxonomy
17
+
18
+
19
+ ## Arguments
20
+
21
+
22
+ ### Apply the Measure to a SINGLE SpaceType, ALL the SpaceTypes or NONE.
23
+
24
+ **Name:** space_type,
25
+ **Type:** Choice,
26
+ **Units:** ,
27
+ **Required:** true,
28
+ **Model Dependent:** false
29
+
30
+ ### Apply the Measure to a SINGLE Space, ALL the Spaces or NONE.
31
+
32
+ **Name:** space,
33
+ **Type:** Choice,
34
+ **Units:** ,
35
+ **Required:** true,
36
+ **Model Dependent:** false
37
+
38
+ ### Percent Change in the default Lights Definition.
39
+ Percent Change in the default Lights Definition.
40
+ **Name:** lights_perc_change,
41
+ **Type:** Double,
42
+ **Units:** ,
43
+ **Required:** true,
44
+ **Model Dependent:** false
45
+
46
+ ### Percent Change in the default Luminaire Definition.
47
+ Percent Change in the default Luminaire Definition.
48
+ **Name:** luminaire_perc_change,
49
+ **Type:** Double,
50
+ **Units:** ,
51
+ **Required:** true,
52
+ **Model Dependent:** false
53
+
54
+ ### Percent Change in the default Electric Equipment Definition.
55
+ Percent Change in the default Electric Equipment Definition.
56
+ **Name:** ElectricEquipment_perc_change,
57
+ **Type:** Double,
58
+ **Units:** ,
59
+ **Required:** true,
60
+ **Model Dependent:** false
61
+
62
+ ### Percent Change in the default Gas Equipment Definition.
63
+ Percent Change in the default Gas Equipment Definition.
64
+ **Name:** GasEquipment_perc_change,
65
+ **Type:** Double,
66
+ **Units:** ,
67
+ **Required:** true,
68
+ **Model Dependent:** false
69
+
70
+ ### Percent Change in the default OtherEquipment Definition.
71
+ Percent Change in the default OtherEquipment Definition.
72
+ **Name:** OtherEquipment_perc_change,
73
+ **Type:** Double,
74
+ **Units:** ,
75
+ **Required:** true,
76
+ **Model Dependent:** false
77
+
78
+ ### Percent Change in the default People Definition.
79
+ Percent Change in the default People Definition.
80
+ **Name:** people_perc_change,
81
+ **Type:** Double,
82
+ **Units:** ,
83
+ **Required:** true,
84
+ **Model Dependent:** false
85
+
86
+ ### Percent Change in the default Internal Mass Definition.
87
+ Percent Change in the default Internal Mass Definition.
88
+ **Name:** mass_perc_change,
89
+ **Type:** Double,
90
+ **Units:** ,
91
+ **Required:** true,
92
+ **Model Dependent:** false
93
+
94
+ ### Percent Change in the default Design Infiltration Outdoor Air.
95
+ Percent Change in the default Design Infiltration Outdoor Air.
96
+ **Name:** infil_perc_change,
97
+ **Type:** Double,
98
+ **Units:** ,
99
+ **Required:** true,
100
+ **Model Dependent:** false
101
+
102
+ ### Percent Change in the default Design Specification Outdoor Air.
103
+ Percent Change in the default Design Specification Outdoor Air.
104
+ **Name:** vent_perc_change,
105
+ **Type:** Double,
106
+ **Units:** ,
107
+ **Required:** true,
108
+ **Model Dependent:** false
109
+
110
+
111
+
112
+
@@ -0,0 +1,42 @@
1
+ <%#= README.md.erb is used to auto-generate README.md. %>
2
+ <%#= To manually maintain README.md throw away README.md.erb and manually edit README.md %>
3
+ ###### (Automatically generated documentation)
4
+
5
+ # <%= name %>
6
+
7
+ ## Description
8
+ <%= description %>
9
+
10
+ ## Modeler Description
11
+ <%= modelerDescription %>
12
+
13
+ ## Measure Type
14
+ <%= measureType %>
15
+
16
+ ## Taxonomy
17
+ <%= taxonomy %>
18
+
19
+ ## Arguments
20
+
21
+ <% arguments.each do |argument| %>
22
+ ### <%= argument[:display_name] %>
23
+ <%= argument[:description] %>
24
+ **Name:** <%= argument[:name] %>,
25
+ **Type:** <%= argument[:type] %>,
26
+ **Units:** <%= argument[:units] %>,
27
+ **Required:** <%= argument[:required] %>,
28
+ **Model Dependent:** <%= argument[:model_dependent] %>
29
+ <% end %>
30
+
31
+ <% if arguments.size == 0 %>
32
+ <%= "This measure does not have any user arguments" %>
33
+ <% end %>
34
+
35
+ <% if outputs.size > 0 %>
36
+ ## Outputs
37
+ <% output_names = [] %>
38
+ <% outputs.each do |output| %>
39
+ <% output_names << output[:display_name] %>
40
+ <% end %>
41
+ <%= output_names.join(", ") %>
42
+ <% end %>
@@ -0,0 +1,756 @@
1
+ # *******************************************************************************
2
+ # OpenStudio(R), Copyright (c) 2008-2020, Alliance for Sustainable Energy, LLC.
3
+ # All rights reserved.
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+ #
7
+ # (1) Redistributions of source code must retain the above copyright notice,
8
+ # this list of conditions and the following disclaimer.
9
+ #
10
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ #
14
+ # (3) Neither the name of the copyright holder nor the names of any contributors
15
+ # may be used to endorse or promote products derived from this software without
16
+ # specific prior written permission from the respective party.
17
+ #
18
+ # (4) Other than as required in clauses (1) and (2), distributions in any form
19
+ # of modifications or other derivative works may not use the "OpenStudio"
20
+ # trademark, "OS", "os", or any other confusingly similar designation without
21
+ # specific prior written permission from Alliance for Sustainable Energy, LLC.
22
+ #
23
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
24
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
27
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
28
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
30
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
+ # *******************************************************************************
35
+
36
+ # start the measure
37
+ class GeneralCalibrationMeasurePercentChange < OpenStudio::Measure::ModelMeasure
38
+ # human readable name
39
+ def name
40
+ 'General Calibration Measure Percent Change'
41
+ end
42
+
43
+ # human readable description
44
+ def description
45
+ 'This is a general purpose measure to calibrate space and space type elements with a percent change.'
46
+ end
47
+
48
+ # human readable description of modeling approach
49
+ def modeler_description
50
+ 'It will be used for calibration of space and spaceType loads as well as infiltration, and outdoor air. User can choose between a SINGLE SpaceType or ALL the SpaceTypes as well as a SINGLE Space or ALL the Spaces.'
51
+ end
52
+
53
+ def change_name(object, perc_change)
54
+ if perc_change != 0
55
+ object.setName("#{object.name.get} (#{perc_change.round(2)} percent change)")
56
+ end
57
+ end
58
+
59
+ # define the arguments that the user will input
60
+ def arguments(model)
61
+ args = OpenStudio::Measure::OSArgumentVector.new
62
+
63
+ # make a choice argument for model objects
64
+ space_type_handles = OpenStudio::StringVector.new
65
+ space_type_display_names = OpenStudio::StringVector.new
66
+
67
+ # putting model object and names into hash
68
+ space_type_args = model.getSpaceTypes
69
+ space_type_args_hash = {}
70
+ space_type_args.each do |space_type_arg|
71
+ space_type_args_hash[space_type_arg.name.to_s] = space_type_arg
72
+ end
73
+
74
+ # looping through sorted hash of model objects
75
+ space_type_args_hash.sort.map do |key, value|
76
+ # only include if space type is used in the model
77
+ unless value.spaces.empty?
78
+ space_type_handles << value.handle.to_s
79
+ space_type_display_names << key
80
+ end
81
+ end
82
+
83
+ # add building to string vector with space type
84
+ building = model.getBuilding
85
+ space_type_handles << building.handle.to_s
86
+ space_type_display_names << '*All SpaceTypes*'
87
+ space_type_handles << '0'
88
+ space_type_display_names << '*None*'
89
+
90
+ # make a choice argument for space type
91
+ space_type = OpenStudio::Measure::OSArgument.makeChoiceArgument('space_type', space_type_handles, space_type_display_names)
92
+ space_type.setDisplayName('Apply the Measure to a SINGLE SpaceType, ALL the SpaceTypes or NONE.')
93
+ space_type.setDefaultValue('*All SpaceTypes*') # if no space type is chosen this will run on the entire building
94
+ args << space_type
95
+
96
+ # make a choice argument for model objects
97
+ space_handles = OpenStudio::StringVector.new
98
+ space_display_names = OpenStudio::StringVector.new
99
+
100
+ # putting model object and names into hash
101
+ space_args = model.getSpaces
102
+ space_args_hash = {}
103
+ space_args.each do |space_arg|
104
+ space_args_hash[space_arg.name.to_s] = space_arg
105
+ end
106
+
107
+ # looping through sorted hash of model objects
108
+ space_args_hash.sort.map do |key, value|
109
+ space_handles << value.handle.to_s
110
+ space_display_names << key
111
+ end
112
+
113
+ # add building to string vector with spaces
114
+ building = model.getBuilding
115
+ space_handles << building.handle.to_s
116
+ space_display_names << '*All Spaces*'
117
+ space_handles << '0'
118
+ space_display_names << '*None*'
119
+
120
+ # make a choice argument for space type
121
+ space = OpenStudio::Measure::OSArgument.makeChoiceArgument('space', space_handles, space_display_names)
122
+ space.setDisplayName('Apply the Measure to a SINGLE Space, ALL the Spaces or NONE.')
123
+ space.setDefaultValue('*All Spaces*') # if no space type is chosen this will run on the entire building
124
+ args << space
125
+
126
+ # Lights multiplier
127
+ lights_perc_change = OpenStudio::Measure::OSArgument.makeDoubleArgument('lights_perc_change', true)
128
+ lights_perc_change.setDisplayName('Percent Change in the default Lights Definition.')
129
+ lights_perc_change.setDescription('Percent Change in the default Lights Definition.')
130
+ lights_perc_change.setDefaultValue(0.0)
131
+ args << lights_perc_change
132
+
133
+ # Luminaire multiplier
134
+ luminaire_perc_change = OpenStudio::Measure::OSArgument.makeDoubleArgument('luminaire_perc_change', true)
135
+ luminaire_perc_change.setDisplayName('Percent Change in the default Luminaire Definition.')
136
+ luminaire_perc_change.setDescription('Percent Change in the default Luminaire Definition.')
137
+ luminaire_perc_change.setDefaultValue(0.0)
138
+ args << luminaire_perc_change
139
+
140
+ # Electric Equipment multiplier
141
+ electric_equip_perc_change = OpenStudio::Measure::OSArgument.makeDoubleArgument('ElectricEquipment_perc_change', true)
142
+ electric_equip_perc_change.setDisplayName('Percent Change in the default Electric Equipment Definition.')
143
+ electric_equip_perc_change.setDescription('Percent Change in the default Electric Equipment Definition.')
144
+ electric_equip_perc_change.setDefaultValue(0.0)
145
+ args << electric_equip_perc_change
146
+
147
+ # Gas Equipment multiplier
148
+ gas_equip_perc_change = OpenStudio::Measure::OSArgument.makeDoubleArgument('GasEquipment_perc_change', true)
149
+ gas_equip_perc_change.setDisplayName('Percent Change in the default Gas Equipment Definition.')
150
+ gas_equip_perc_change.setDescription('Percent Change in the default Gas Equipment Definition.')
151
+ gas_equip_perc_change.setDefaultValue(0.0)
152
+ args << gas_equip_perc_change
153
+
154
+ # OtherEquipment multiplier
155
+ other_equip_perc_change = OpenStudio::Measure::OSArgument.makeDoubleArgument('OtherEquipment_perc_change', true)
156
+ other_equip_perc_change.setDisplayName('Percent Change in the default OtherEquipment Definition.')
157
+ other_equip_perc_change.setDescription('Percent Change in the default OtherEquipment Definition.')
158
+ other_equip_perc_change.setDefaultValue(0.0)
159
+ args << other_equip_perc_change
160
+
161
+ # occupancy % change
162
+ people_perc_change = OpenStudio::Measure::OSArgument.makeDoubleArgument('people_perc_change', true)
163
+ people_perc_change.setDisplayName('Percent Change in the default People Definition.')
164
+ people_perc_change.setDescription('Percent Change in the default People Definition.')
165
+ people_perc_change.setDefaultValue(0.0)
166
+ args << people_perc_change
167
+
168
+ # internalMass % change
169
+ mass_perc_change = OpenStudio::Measure::OSArgument.makeDoubleArgument('mass_perc_change', true)
170
+ mass_perc_change.setDisplayName('Percent Change in the default Internal Mass Definition.')
171
+ mass_perc_change.setDescription('Percent Change in the default Internal Mass Definition.')
172
+ mass_perc_change.setDefaultValue(0.0)
173
+ args << mass_perc_change
174
+
175
+ # infiltration % change
176
+ infil_perc_change = OpenStudio::Measure::OSArgument.makeDoubleArgument('infil_perc_change', true)
177
+ infil_perc_change.setDisplayName('Percent Change in the default Design Infiltration Outdoor Air.')
178
+ infil_perc_change.setDescription('Percent Change in the default Design Infiltration Outdoor Air.')
179
+ infil_perc_change.setDefaultValue(0.0)
180
+ args << infil_perc_change
181
+
182
+ # ventilation % change
183
+ vent_perc_change = OpenStudio::Measure::OSArgument.makeDoubleArgument('vent_perc_change', true)
184
+ vent_perc_change.setDisplayName('Percent Change in the default Design Specification Outdoor Air.')
185
+ vent_perc_change.setDescription('Percent Change in the default Design Specification Outdoor Air.')
186
+ vent_perc_change.setDefaultValue(0.0)
187
+ args << vent_perc_change
188
+
189
+ args
190
+ end
191
+
192
+ # define what happens when the measure is run
193
+ def run(model, runner, user_arguments)
194
+ super(model, runner, user_arguments)
195
+
196
+ # use the built-in error checking
197
+ unless runner.validateUserArguments(arguments(model), user_arguments)
198
+ return false
199
+ end
200
+
201
+ # assign the user inputs to variables
202
+ space_type_object = runner.getOptionalWorkspaceObjectChoiceValue('space_type', user_arguments, model)
203
+ space_type_handle = runner.getStringArgumentValue('space_type', user_arguments)
204
+ space_object = runner.getOptionalWorkspaceObjectChoiceValue('space', user_arguments, model)
205
+ space_handle = runner.getStringArgumentValue('space', user_arguments)
206
+ people_perc_change = runner.getDoubleArgumentValue('people_perc_change', user_arguments)
207
+ infil_perc_change = runner.getDoubleArgumentValue('infil_perc_change', user_arguments)
208
+ vent_perc_change = runner.getDoubleArgumentValue('vent_perc_change', user_arguments)
209
+ mass_perc_change = runner.getDoubleArgumentValue('mass_perc_change', user_arguments)
210
+ electric_equip_perc_change = runner.getDoubleArgumentValue('ElectricEquipment_perc_change', user_arguments)
211
+ gas_equip_perc_change = runner.getDoubleArgumentValue('GasEquipment_perc_change', user_arguments)
212
+ other_equip_perc_change = runner.getDoubleArgumentValue('OtherEquipment_perc_change', user_arguments)
213
+ lights_perc_change = runner.getDoubleArgumentValue('lights_perc_change', user_arguments)
214
+ luminaire_perc_change = runner.getDoubleArgumentValue('luminaire_perc_change', user_arguments)
215
+
216
+ # find objects to change
217
+ space_types = []
218
+ spaces = []
219
+ building = model.getBuilding
220
+ building_handle = building.handle.to_s
221
+ runner.registerInfo("space_type_handle: #{space_type_handle}")
222
+ runner.registerInfo("space_handle: #{space_handle}")
223
+ # setup space_types
224
+ if space_type_handle == building_handle
225
+ # Use ALL SpaceTypes
226
+ runner.registerInfo('Applying change to ALL SpaceTypes')
227
+ space_types = model.getSpaceTypes
228
+ elsif space_type_handle == 0.to_s
229
+ # SpaceTypes set to NONE so do nothing
230
+ runner.registerInfo('Applying change to NONE SpaceTypes')
231
+ elsif !space_type_handle.empty?
232
+ # Single SpaceType handle found, check if object is good
233
+ if !space_type_object.get.to_SpaceType.empty?
234
+ runner.registerInfo("Applying change to #{space_type_object.get.name} SpaceType")
235
+ space_types << space_type_object.get.to_SpaceType.get
236
+ else
237
+ runner.registerError("SpaceType with handle #{space_type_handle} could not be found.")
238
+ end
239
+ else
240
+ runner.registerError('SpaceType handle is empty.')
241
+ return false
242
+ end
243
+
244
+ # setup spaces
245
+ if space_handle == building_handle
246
+ # Use ALL Spaces
247
+ runner.registerInfo('Applying change to ALL Spaces')
248
+ spaces = model.getSpaces
249
+ elsif space_handle == 0.to_s
250
+ # Spaces set to NONE so do nothing
251
+ runner.registerInfo('Applying change to NONE Spaces')
252
+ elsif !space_handle.empty?
253
+ # Single Space handle found, check if object is good
254
+ if !space_object.get.to_Space.empty?
255
+ runner.registerInfo("Applying change to #{space_object.get.name} Space")
256
+ spaces << space_object.get.to_Space.get
257
+ else
258
+ runner.registerError("Space with handle #{space_handle} could not be found.")
259
+ end
260
+ else
261
+ runner.registerError('Space handle is empty.')
262
+ return false
263
+ end
264
+
265
+ altered_people_definitions = []
266
+ altered_infiltration_objects = []
267
+ altered_outdoor_air_objects = []
268
+ altered_internalmass_definitions = []
269
+ altered_lights_definitions = []
270
+ altered_luminaires_definitions = []
271
+ altered_electric_equip_definitions = []
272
+ altered_gas_equip_definitions = []
273
+ altered_other_equip_definitions = []
274
+
275
+ # report initial condition of model
276
+ runner.registerInitialCondition("Applying Variable % Changes to #{space_types.size} space types and #{spaces.size} spaces.")
277
+ runner.registerInfo("Applying Variable % Changes to #{space_types.size} space types.")
278
+
279
+ # loop through space types
280
+ space_types.each do |space_type|
281
+ # modify lights
282
+ space_type.lights.each do |light|
283
+ equip_def = light.lightsDefinition
284
+ # get and alter multiplier
285
+ if !altered_lights_definitions.include? equip_def.handle.to_s
286
+ if equip_def.lightingLevel.is_initialized
287
+ runner.registerInfo("Applying #{lights_perc_change} % Change to #{equip_def.name.get} LightingLevel.")
288
+ equip_def.setLightingLevel(equip_def.lightingLevel.get + equip_def.lightingLevel.get * lights_perc_change * 0.01)
289
+ end
290
+ if equip_def.wattsperSpaceFloorArea.is_initialized
291
+ runner.registerInfo("Applying #{lights_perc_change} % Change to #{equip_def.name.get} wattsperSpaceFloorArea.")
292
+ equip_def.setWattsperSpaceFloorArea(equip_def.wattsperSpaceFloorArea.get + equip_def.wattsperSpaceFloorArea.get * lights_perc_change * 0.01)
293
+ end
294
+ if equip_def.wattsperPerson.is_initialized
295
+ runner.registerInfo("Applying #{lights_perc_change} % Change to #{equip_def.name.get} wattsperPerson.")
296
+ equip_def.setWattsperPerson(equip_def.wattsperPerson.get + equip_def.wattsperPerson.get * lights_perc_change * 0.01)
297
+ end
298
+ # update hash and change name
299
+ change_name(equip_def, lights_perc_change)
300
+ altered_lights_definitions << equip_def.handle.to_s
301
+ else
302
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
303
+ end
304
+ end
305
+
306
+ # modify luminaire
307
+ space_type.luminaires.each do |light|
308
+ equip_def = light.luminaireDefinition
309
+ # get and alter multiplier
310
+ if !altered_luminaires_definitions.include? equip_def.handle.to_s
311
+ runner.registerInfo("Applying #{luminaire_perc_change} % Change to #{equip_def.name.get} LightingPower.")
312
+ equip_def.setLightingPower(equip_def.lightingPower + equip_def.lightingPower * luminaire_perc_change * 0.01)
313
+ # update hash and change name
314
+ change_name(equip_def, luminaire_perc_change)
315
+ altered_luminaires_definitions << equip_def.handle.to_s
316
+ else
317
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
318
+ end
319
+ end
320
+
321
+ # modify electric equip
322
+ space_type.electricEquipment.each do |equip|
323
+ # get and alter definition
324
+ equip_def = equip.electricEquipmentDefinition
325
+ if !altered_electric_equip_definitions.include? equip_def.handle.to_s
326
+ if equip_def.designLevel.is_initialized
327
+ runner.registerInfo("Applying #{electric_equip_perc_change} % Change to #{equip_def.name.get} DesignLevel.")
328
+ equip_def.setDesignLevel(equip_def.designLevel.get + equip_def.designLevel.get * electric_equip_perc_change * 0.01)
329
+ end
330
+ if equip_def.wattsperSpaceFloorArea.is_initialized
331
+ runner.registerInfo("Applying #{electric_equip_perc_change} % Change to #{equip_def.name.get} wattsperSpaceFloorArea.")
332
+ equip_def.setWattsperSpaceFloorArea(equip_def.wattsperSpaceFloorArea.get + equip_def.wattsperSpaceFloorArea.get * electric_equip_perc_change * 0.01)
333
+ end
334
+ if equip_def.wattsperPerson.is_initialized
335
+ runner.registerInfo("Applying #{electric_equip_perc_change} % Change to #{equip_def.name.get} wattsperPerson.")
336
+ equip_def.setWattsperPerson(equip_def.wattsperPerson.get + equip_def.wattsperPerson.get * electric_equip_perc_change * 0.01)
337
+ end
338
+ # update hash and change name
339
+ change_name(equip_def, electric_equip_perc_change)
340
+ altered_electric_equip_definitions << equip_def.handle.to_s
341
+ else
342
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
343
+ end
344
+ end
345
+
346
+ # modify gas equip
347
+ space_type.gasEquipment.each do |equip|
348
+ # get and alter definition
349
+ equip_def = equip.gasEquipmentDefinition
350
+ if !altered_gas_equip_definitions.include? equip_def.handle.to_s
351
+ if equip_def.designLevel.is_initialized
352
+ runner.registerInfo("Applying #{gas_equip_perc_change} % Change to #{equip_def.name.get} designlevel.")
353
+ equip_def.setDesignLevel(equip_def.designLevel.get + equip_def.designLevel.get * gas_equip_perc_change * 0.01)
354
+ end
355
+ if equip_def.wattsperSpaceFloorArea.is_initialized
356
+ runner.registerInfo("Applying #{gas_equip_perc_change} % Change to #{equip_def.name.get} WattsperSpaceFloorArea.")
357
+ equip_def.setWattsperSpaceFloorArea(equip_def.wattsperSpaceFloorArea.get + equip_def.wattsperSpaceFloorArea.get * gas_equip_perc_change * 0.01)
358
+ end
359
+ if equip_def.wattsperPerson.is_initialized
360
+ runner.registerInfo("Applying #{gas_equip_perc_change} % Change to #{equip_def.name.get} WattsperPerson.")
361
+ equip_def.setWattsperPerson(equip_def.wattsperPerson.get + equip_def.wattsperPerson.get * gas_equip_perc_change * 0.01)
362
+ end
363
+ # update hash and change name
364
+ change_name(equip_def, gas_equip_perc_change)
365
+ altered_gas_equip_definitions << equip_def.handle.to_s
366
+ else
367
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
368
+ end
369
+ end
370
+
371
+ # modify other equip
372
+ space_type.otherEquipment.each do |equip|
373
+ # get and alter definition
374
+ equip_def = equip.otherEquipmentDefinition
375
+ if !altered_other_equip_definitions.include? equip_def.handle.to_s
376
+ if equip_def.designLevel.is_initialized
377
+ runner.registerInfo("Applying #{other_equip_perc_change} % Change to #{equip_def.name.get} designLevel.")
378
+ equip_def.setDesignLevel(equip_def.designLevel.get + equip_def.designLevel.get * other_equip_perc_change * 0.01)
379
+ end
380
+ if equip_def.wattsperSpaceFloorArea.is_initialized
381
+ runner.registerInfo("Applying #{other_equip_perc_change} % Change to #{equip_def.name.get} wattsperSpaceFloorArea.")
382
+ equip_def.setWattsperSpaceFloorArea(equip_def.wattsperSpaceFloorArea.get + equip_def.wattsperSpaceFloorArea.get * other_equip_perc_change * 0.01)
383
+ end
384
+ if equip_def.wattsperPerson.is_initialized
385
+ runner.registerInfo("Applying #{other_equip_perc_change} % Change to #{equip_def.name.get} wattsperPerson.")
386
+ equip_def.setWattsperPerson(equip_def.wattsperPerson.get + equip_def.wattsperPerson.get * other_equip_perc_change * 0.01)
387
+ end
388
+ # update hash and change name
389
+ change_name(equip_def, other_equip_perc_change)
390
+ altered_other_equip_definitions << equip_def.handle.to_s
391
+ else
392
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
393
+ end
394
+ end
395
+
396
+ # modify occupancy
397
+ space_type.people.each do |people_inst|
398
+ # get and alter definition
399
+ people_def = people_inst.peopleDefinition
400
+ if !altered_people_definitions.include? people_def.handle.to_s
401
+ if people_def.peopleperSpaceFloorArea.is_initialized
402
+ runner.registerInfo("Applying #{people_perc_change} % Change to #{people_def.name.get} PeopleperSpaceFloorArea.")
403
+ people_def.setPeopleperSpaceFloorArea(people_def.peopleperSpaceFloorArea.get + people_def.peopleperSpaceFloorArea.get * people_perc_change * 0.01)
404
+ end
405
+ if people_def.numberofPeople.is_initialized
406
+ runner.registerInfo("Applying #{people_perc_change} % Change to #{people_def.name.get} numberofPeople.")
407
+ people_def.setNumberofPeople(people_def.numberofPeople.get + people_def.numberofPeople.get * people_perc_change * 0.01)
408
+ end
409
+ if people_def.spaceFloorAreaperPerson.is_initialized
410
+ runner.registerInfo("Applying #{people_perc_change} % Change to #{people_def.name.get} spaceFloorAreaperPerson.")
411
+ people_def.setSpaceFloorAreaperPerson(people_def.spaceFloorAreaperPerson.get + people_def.spaceFloorAreaperPerson.get * people_perc_change * 0.01)
412
+ end
413
+ # update hash and change name
414
+ change_name(people_def, people_perc_change)
415
+ altered_people_definitions << people_def.handle.to_s
416
+ else
417
+ runner.registerInfo("Skipping change to #{people_def.name.get}")
418
+ end
419
+ end
420
+
421
+ # modify infiltration
422
+ space_type.spaceInfiltrationDesignFlowRates.each do |infiltration|
423
+ if !altered_infiltration_objects.include? infiltration.handle.to_s
424
+ if infiltration.flowperExteriorSurfaceArea.is_initialized
425
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} FlowperExteriorSurfaceArea.")
426
+ infiltration.setFlowperExteriorSurfaceArea(infiltration.flowperExteriorSurfaceArea.get + infiltration.flowperExteriorSurfaceArea.get * infil_perc_change * 0.01)
427
+ end
428
+ if infiltration.airChangesperHour.is_initialized
429
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} AirChangesperHour.")
430
+ infiltration.setAirChangesperHour(infiltration.airChangesperHour.get + infiltration.airChangesperHour.get * infil_perc_change * 0.01)
431
+ end
432
+ if infiltration.designFlowRate.is_initialized
433
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} designFlowRate.")
434
+ infiltration.setDesignFlowRate(infiltration.designFlowRate.get + infiltration.designFlowRate.get * infil_perc_change * 0.01)
435
+ end
436
+ if infiltration.flowperSpaceFloorArea.is_initialized
437
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} flowperSpaceFloorArea.")
438
+ infiltration.setFlowperSpaceFloorArea(infiltration.flowperSpaceFloorArea.get + infiltration.flowperSpaceFloorArea.get * infil_perc_change * 0.01)
439
+ end
440
+ if infiltration.flowperExteriorWallArea.is_initialized
441
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} flowperExteriorWallArea.")
442
+ infiltration.setFlowperExteriorWallArea(infiltration.flowperExteriorWallArea.get + infiltration.flowperExteriorWallArea.get * infil_perc_change * 0.01)
443
+ end
444
+ # add to hash and change name
445
+ change_name(infiltration, infil_perc_change)
446
+ altered_infiltration_objects << infiltration.handle.to_s
447
+ else
448
+ runner.registerInfo("Skipping change to #{infiltration.name.get}")
449
+ end
450
+ end
451
+
452
+ # modify outdoor air
453
+ if space_type.designSpecificationOutdoorAir.is_initialized
454
+ outdoor_air = space_type.designSpecificationOutdoorAir.get
455
+ # alter values if not already done
456
+ if !altered_outdoor_air_objects.include? outdoor_air.handle.to_s
457
+ runner.registerInfo("Applying #{vent_perc_change} % Change to #{outdoor_air.name.get} OutdoorAirFlowperPerson.")
458
+ outdoor_air.setOutdoorAirFlowperPerson(outdoor_air.outdoorAirFlowperPerson + outdoor_air.outdoorAirFlowperPerson * vent_perc_change * 0.01)
459
+ runner.registerInfo("Applying #{vent_perc_change} % Change to #{outdoor_air.name.get} OutdoorAirFlowperFloorArea.")
460
+ outdoor_air.setOutdoorAirFlowperFloorArea(outdoor_air.outdoorAirFlowperFloorArea + outdoor_air.outdoorAirFlowperFloorArea * vent_perc_change * 0.01)
461
+ runner.registerInfo("Applying #{vent_perc_change} % Change to #{outdoor_air.name.get} OutdoorAirFlowAirChangesperHour.")
462
+ outdoor_air.setOutdoorAirFlowAirChangesperHour(outdoor_air.outdoorAirFlowAirChangesperHour + outdoor_air.outdoorAirFlowAirChangesperHour * vent_perc_change * 0.01)
463
+ runner.registerInfo("Applying #{vent_perc_change} % Change to #{outdoor_air.name.get} OutdoorAirFlowRate.")
464
+ outdoor_air.setOutdoorAirFlowRate(outdoor_air.outdoorAirFlowRate + outdoor_air.outdoorAirFlowRate * vent_perc_change * 0.01)
465
+ # add to hash and change name
466
+ change_name(outdoor_air, vent_perc_change)
467
+ altered_outdoor_air_objects << outdoor_air.handle.to_s
468
+ else
469
+ runner.registerInfo("Skipping change to #{outdoor_air.name.get}")
470
+ end
471
+ end
472
+
473
+ # modify internal mass
474
+ space_type.internalMass.each do |internalmass|
475
+ # get and alter definition
476
+ internalmass_def = internalmass.internalMassDefinition
477
+ if !altered_internalmass_definitions.include? internalmass_def.handle.to_s
478
+ if internalmass_def.surfaceAreaperSpaceFloorArea.is_initialized
479
+ runner.registerInfo("Applying #{mass_perc_change} % Change to #{internalmass_def.name.get} surfaceAreaperSpaceFloorArea.")
480
+ internalmass_def.setSurfaceAreaperSpaceFloorArea(internalmass_def.surfaceAreaperSpaceFloorArea.get + internalmass_def.surfaceAreaperSpaceFloorArea.get * mass_perc_change * 0.01)
481
+ end
482
+ if internalmass_def.surfaceArea.is_initialized
483
+ runner.registerInfo("Applying #{mass_perc_change} % Change to #{internalmass_def.name.get} surfaceArea.")
484
+ internalmass_def.setSurfaceArea(internalmass_def.surfaceArea.get + internalmass_def.surfaceArea.get * mass_perc_change * 0.01)
485
+ end
486
+ if internalmass_def.surfaceAreaperPerson.is_initialized
487
+ runner.registerInfo("Applying #{mass_perc_change} % Change to #{internalmass_def.name.get} surfaceAreaperPerson.")
488
+ internalmass_def.setSurfaceAreaperPerson(internalmass_def.surfaceAreaperPerson.get + internalmass_def.surfaceAreaperPerson.get * mass_perc_change * 0.01)
489
+ end
490
+ # update hash and change name
491
+ change_name(internalmass_def, mass_perc_change)
492
+ altered_internalmass_definitions << internalmass_def.handle.to_s
493
+ else
494
+ runner.registerInfo("Skipping change to #{internalmass_def.name.get}")
495
+ end
496
+ end
497
+ end # end space_type loop
498
+
499
+ runner.registerInfo("altered_lights_definitions: #{altered_lights_definitions}")
500
+ runner.registerInfo("altered_luminaires_definitions: #{altered_luminaires_definitions}")
501
+ runner.registerInfo("altered_electric_equip_definitions: #{altered_electric_equip_definitions}")
502
+ runner.registerInfo("altered_gas_equip_definitions: #{altered_gas_equip_definitions}")
503
+ runner.registerInfo("altered_other_equip_definitions: #{altered_other_equip_definitions}")
504
+ runner.registerInfo("altered_people_definitions: #{altered_people_definitions}")
505
+ runner.registerInfo("altered_infiltration_objects: #{altered_infiltration_objects}")
506
+ runner.registerInfo("altered_outdoor_air_objects: #{altered_outdoor_air_objects}")
507
+ runner.registerInfo("altered_internalmass_definitions: #{altered_internalmass_definitions}")
508
+
509
+ # report initial condition of model
510
+ runner.registerInfo("Applying Variable % Changes to #{spaces.size} spaces.")
511
+
512
+ # loop through space types
513
+ spaces.each do |space|
514
+ # modify lights
515
+ space.lights.each do |light|
516
+ equip_def = light.lightsDefinition
517
+ # get and alter definition
518
+ if !altered_lights_definitions.include? equip_def.handle.to_s
519
+ if equip_def.lightingLevel.is_initialized
520
+ runner.registerInfo("Applying #{lights_perc_change} % Change to #{equip_def.name.get} LightingLevel.")
521
+ equip_def.setLightingLevel(equip_def.lightingLevel.get + equip_def.lightingLevel.get * lights_perc_change * 0.01)
522
+ end
523
+ if equip_def.wattsperSpaceFloorArea.is_initialized
524
+ runner.registerInfo("Applying #{lights_perc_change} % Change to #{equip_def.name.get} wattsperSpaceFloorArea.")
525
+ equip_def.setWattsperSpaceFloorArea(equip_def.wattsperSpaceFloorArea.get + equip_def.wattsperSpaceFloorArea.get * lights_perc_change * 0.01)
526
+ end
527
+ if equip_def.wattsperPerson.is_initialized
528
+ runner.registerInfo("Applying #{lights_perc_change} % Change to #{equip_def.name.get} wattsperPerson.")
529
+ equip_def.setWattsperPerson(equip_def.wattsperPerson.get + equip_def.wattsperPerson.get * lights_perc_change * 0.01)
530
+ end
531
+ # update hash and change name
532
+ change_name(equip_def, lights_perc_change)
533
+ altered_lights_definitions << equip_def.handle.to_s
534
+ else
535
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
536
+ end
537
+ end
538
+
539
+ # modify luminaire
540
+ space.luminaires.each do |light|
541
+ equip_def = light.luminaireDefinition
542
+ # get and alter definition
543
+ if !altered_luminaires_definitions.include? equip_def.handle.to_s
544
+ runner.registerInfo("Applying #{luminaire_perc_change} % Change to #{equip_def.name.get} LightingPower.")
545
+ equip_def.setLightingPower(equip_def.lightingPower + equip_def.lightingPower * luminaire_perc_change * 0.01)
546
+ # update hash and change name
547
+ change_name(equip_def, luminaire_perc_change)
548
+ altered_luminaires_definitions << equip_def.handle.to_s
549
+ else
550
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
551
+ end
552
+ end
553
+
554
+ # modify electric equip
555
+ space.electricEquipment.each do |equip|
556
+ # get and alter definition
557
+ equip_def = equip.electricEquipmentDefinition
558
+ if !altered_electric_equip_definitions.include? equip_def.handle.to_s
559
+ if equip_def.designLevel.is_initialized
560
+ runner.registerInfo("Applying #{electric_equip_perc_change} % Change to #{equip_def.name.get} DesignLevel.")
561
+ equip_def.setDesignLevel(equip_def.designLevel.get + equip_def.designLevel.get * electric_equip_perc_change * 0.01)
562
+ end
563
+ if equip_def.wattsperSpaceFloorArea.is_initialized
564
+ runner.registerInfo("Applying #{electric_equip_perc_change} % Change to #{equip_def.name.get} wattsperSpaceFloorArea.")
565
+ equip_def.setWattsperSpaceFloorArea(equip_def.wattsperSpaceFloorArea.get + equip_def.wattsperSpaceFloorArea.get * electric_equip_perc_change * 0.01)
566
+ end
567
+ if equip_def.wattsperPerson.is_initialized
568
+ runner.registerInfo("Applying #{electric_equip_perc_change} % Change to #{equip_def.name.get} wattsperPerson.")
569
+ equip_def.setWattsperPerson(equip_def.wattsperPerson.get + equip_def.wattsperPerson.get * electric_equip_perc_change * 0.01)
570
+ end
571
+ # update hash and change name
572
+ change_name(equip_def, electric_equip_perc_change)
573
+ altered_electric_equip_definitions << equip_def.handle.to_s
574
+ else
575
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
576
+ end
577
+ end
578
+
579
+ # modify gas equip
580
+ space.gasEquipment.each do |equip|
581
+ # get and alter definition
582
+ equip_def = equip.gasEquipmentDefinition
583
+ if !altered_gas_equip_definitions.include? equip_def.handle.to_s
584
+ if equip_def.designLevel.is_initialized
585
+ runner.registerInfo("Applying #{gas_equip_perc_change} % Change to #{equip_def.name.get} designlevel.")
586
+ equip_def.setDesignLevel(equip_def.designLevel.get + equip_def.designLevel.get * gas_equip_perc_change * 0.01)
587
+ end
588
+ if equip_def.wattsperSpaceFloorArea.is_initialized
589
+ runner.registerInfo("Applying #{gas_equip_perc_change} % Change to #{equip_def.name.get} WattsperSpaceFloorArea.")
590
+ equip_def.setWattsperSpaceFloorArea(equip_def.wattsperSpaceFloorArea.get + equip_def.wattsperSpaceFloorArea.get * gas_equip_perc_change * 0.01)
591
+ end
592
+ if equip_def.wattsperPerson.is_initialized
593
+ runner.registerInfo("Applying #{gas_equip_perc_change} % Change to #{equip_def.name.get} WattsperPerson.")
594
+ equip_def.setWattsperPerson(equip_def.wattsperPerson.get + equip_def.wattsperPerson.get * gas_equip_perc_change * 0.01)
595
+ end
596
+ # update hash and change name
597
+ change_name(equip_def, gas_equip_perc_change)
598
+ altered_gas_equip_definitions << equip_def.handle.to_s
599
+ else
600
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
601
+ end
602
+ end
603
+
604
+ # modify other equip
605
+ space.otherEquipment.each do |equip|
606
+ # get and alter definition
607
+ equip_def = equip.otherEquipmentDefinition
608
+ if !altered_other_equip_definitions.include? equip_def.handle.to_s
609
+ if equip_def.designLevel.is_initialized
610
+ runner.registerInfo("Applying #{other_equip_perc_change} % Change to #{equip_def.name.get} designLevel.")
611
+ equip_def.setDesignLevel(equip_def.designLevel.get + equip_def.designLevel.get * other_equip_perc_change * 0.01)
612
+ end
613
+ if equip_def.wattsperSpaceFloorArea.is_initialized
614
+ runner.registerInfo("Applying #{other_equip_perc_change} % Change to #{equip_def.name.get} wattsperSpaceFloorArea.")
615
+ equip_def.setWattsperSpaceFloorArea(equip_def.wattsperSpaceFloorArea.get + equip_def.wattsperSpaceFloorArea.get * other_equip_perc_change * 0.01)
616
+ end
617
+ if equip_def.wattsperPerson.is_initialized
618
+ runner.registerInfo("Applying #{other_equip_perc_change} % Change to #{equip_def.name.get} wattsperPerson.")
619
+ equip_def.setWattsperPerson(equip_def.wattsperPerson.get + equip_def.wattsperPerson.get * other_equip_perc_change * 0.01)
620
+ end
621
+ # update hash and change name
622
+ change_name(equip_def, other_equip_perc_change)
623
+ altered_other_equip_definitions << equip_def.handle.to_s
624
+ else
625
+ runner.registerInfo("Skipping change to #{equip_def.name.get}")
626
+ end
627
+ end
628
+
629
+ # modify occupancy
630
+ space.people.each do |people_inst|
631
+ # get and alter definition
632
+ people_def = people_inst.peopleDefinition
633
+ if !altered_people_definitions.include? people_def.handle.to_s
634
+ if people_def.peopleperSpaceFloorArea.is_initialized
635
+ runner.registerInfo("Applying #{people_perc_change} % Change to #{people_def.name.get} PeopleperSpaceFloorArea.")
636
+ people_def.setPeopleperSpaceFloorArea(people_def.peopleperSpaceFloorArea.get + people_def.peopleperSpaceFloorArea.get * people_perc_change * 0.01)
637
+ end
638
+ if people_def.numberofPeople.is_initialized
639
+ runner.registerInfo("Applying #{people_perc_change} % Change to #{people_def.name.get} numberofPeople.")
640
+ people_def.setNumberofPeople(people_def.numberofPeople.get + people_def.numberofPeople.get * people_perc_change * 0.01)
641
+ end
642
+ if people_def.spaceFloorAreaperPerson.is_initialized
643
+ runner.registerInfo("Applying #{people_perc_change} % Change to #{people_def.name.get} spaceFloorAreaperPerson.")
644
+ people_def.setSpaceFloorAreaperPerson(people_def.spaceFloorAreaperPerson.get + people_def.spaceFloorAreaperPerson.get * people_perc_change * 0.01)
645
+ end
646
+ # update hash and change name
647
+ change_name(people_def, people_perc_change)
648
+ altered_people_definitions << people_def.handle.to_s
649
+ else
650
+ runner.registerInfo("Skipping change to #{people_def.name.get}")
651
+ end
652
+ end
653
+
654
+ # modify infiltration
655
+ space.spaceInfiltrationDesignFlowRates.each do |infiltration|
656
+ if !altered_infiltration_objects.include? infiltration.handle.to_s
657
+ if infiltration.flowperExteriorSurfaceArea.is_initialized
658
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} FlowperExteriorSurfaceArea.")
659
+ infiltration.setFlowperExteriorSurfaceArea(infiltration.flowperExteriorSurfaceArea.get + infiltration.flowperExteriorSurfaceArea.get * infil_perc_change * 0.01)
660
+ end
661
+ if infiltration.airChangesperHour.is_initialized
662
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} AirChangesperHour.")
663
+ infiltration.setAirChangesperHour(infiltration.airChangesperHour.get + infiltration.airChangesperHour.get * infil_perc_change * 0.01)
664
+ end
665
+ if infiltration.designFlowRate.is_initialized
666
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} designFlowRate.")
667
+ infiltration.setDesignFlowRate(infiltration.designFlowRate.get + infiltration.designFlowRate.get * infil_perc_change * 0.01)
668
+ end
669
+ if infiltration.flowperSpaceFloorArea.is_initialized
670
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} flowperSpaceFloorArea.")
671
+ infiltration.setFlowperSpaceFloorArea(infiltration.flowperSpaceFloorArea.get + infiltration.flowperSpaceFloorArea.get * infil_perc_change * 0.01)
672
+ end
673
+ if infiltration.flowperExteriorWallArea.is_initialized
674
+ runner.registerInfo("Applying #{infil_perc_change} % Change to #{infiltration.name.get} flowperExteriorWallArea.")
675
+ infiltration.setFlowperExteriorWallArea(infiltration.flowperExteriorWallArea.get + infiltration.flowperExteriorWallArea.get * infil_perc_change * 0.01)
676
+ end
677
+ # add to hash and change name
678
+ change_name(infiltration, infil_perc_change)
679
+ altered_infiltration_objects << infiltration.handle.to_s
680
+ else
681
+ runner.registerInfo("Skipping change to #{infiltration.name.get}")
682
+ end
683
+ end
684
+
685
+ # modify outdoor air
686
+ if space.designSpecificationOutdoorAir.is_initialized
687
+ outdoor_air = space.designSpecificationOutdoorAir.get
688
+ # alter values if not already done
689
+ if !altered_outdoor_air_objects.include? outdoor_air.handle.to_s
690
+ runner.registerInfo("Applying #{vent_perc_change} % Change to #{outdoor_air.name.get} OutdoorAirFlowperPerson.")
691
+ outdoor_air.setOutdoorAirFlowperPerson(outdoor_air.outdoorAirFlowperPerson + outdoor_air.outdoorAirFlowperPerson * vent_perc_change * 0.01)
692
+ runner.registerInfo("Applying #{vent_perc_change} % Change to #{outdoor_air.name.get} OutdoorAirFlowperFloorArea.")
693
+ outdoor_air.setOutdoorAirFlowperFloorArea(outdoor_air.outdoorAirFlowperFloorArea + outdoor_air.outdoorAirFlowperFloorArea * vent_perc_change * 0.01)
694
+ runner.registerInfo("Applying #{vent_perc_change} % Change to #{outdoor_air.name.get} OutdoorAirFlowAirChangesperHour.")
695
+ outdoor_air.setOutdoorAirFlowAirChangesperHour(outdoor_air.outdoorAirFlowAirChangesperHour + outdoor_air.outdoorAirFlowAirChangesperHour * vent_perc_change * 0.01)
696
+ runner.registerInfo("Applying #{vent_perc_change} % Change to #{outdoor_air.name.get} OutdoorAirFlowRate.")
697
+ outdoor_air.setOutdoorAirFlowRate(outdoor_air.outdoorAirFlowRate + outdoor_air.outdoorAirFlowRate * vent_perc_change * 0.01)
698
+ # add to hash and change name
699
+ change_name(outdoor_air, vent_perc_change)
700
+ altered_outdoor_air_objects << outdoor_air.handle.to_s
701
+ else
702
+ runner.registerInfo("Skipping change to #{outdoor_air.name.get}")
703
+ end
704
+ end
705
+
706
+ # modify internal mass
707
+ space.internalMass.each do |internalmass|
708
+ # get and alter definition
709
+ internalmass_def = internalmass.internalMassDefinition
710
+ if !altered_internalmass_definitions.include? internalmass_def.handle.to_s
711
+ if internalmass_def.surfaceAreaperSpaceFloorArea.is_initialized
712
+ runner.registerInfo("Applying #{mass_perc_change} % Change to #{internalmass_def.name.get} surfaceAreaperSpaceFloorArea.")
713
+ internalmass_def.setSurfaceAreaperSpaceFloorArea(internalmass_def.surfaceAreaperSpaceFloorArea.get + internalmass_def.surfaceAreaperSpaceFloorArea.get * mass_perc_change * 0.01)
714
+ end
715
+ if internalmass_def.surfaceArea.is_initialized
716
+ runner.registerInfo("Applying #{mass_perc_change} % Change to #{internalmass_def.name.get} surfaceArea.")
717
+ internalmass_def.setSurfaceArea(internalmass_def.surfaceArea.get + internalmass_def.surfaceArea.get * mass_perc_change * 0.01)
718
+ end
719
+ if internalmass_def.surfaceAreaperPerson.is_initialized
720
+ runner.registerInfo("Applying #{mass_perc_change} % Change to #{internalmass_def.name.get} surfaceAreaperPerson.")
721
+ internalmass_def.setSurfaceAreaperPerson(internalmass_def.surfaceAreaperPerson.get + internalmass_def.surfaceAreaperPerson.get * mass_perc_change * 0.01)
722
+ end
723
+ # update hash and change name
724
+ change_name(internalmass_def, mass_perc_change)
725
+ altered_internalmass_definitions << internalmass_def.handle.to_s
726
+ else
727
+ runner.registerInfo("Skipping change to #{internalmass_def.name.get}")
728
+ end
729
+ end
730
+ end # end spaces loop
731
+
732
+ runner.registerInfo("altered_lights_definitions: #{altered_lights_definitions}")
733
+ runner.registerInfo("altered_luminaires_definitions: #{altered_luminaires_definitions}")
734
+ runner.registerInfo("altered_electric_equip_definitions: #{altered_electric_equip_definitions}")
735
+ runner.registerInfo("altered_gas_equip_definitions: #{altered_gas_equip_definitions}")
736
+ runner.registerInfo("altered_other_equip_definitions: #{altered_other_equip_definitions}")
737
+ runner.registerInfo("altered_people_definitions: #{altered_people_definitions}")
738
+ runner.registerInfo("altered_infiltration_objects: #{altered_infiltration_objects}")
739
+ runner.registerInfo("altered_outdoor_air_objects: #{altered_outdoor_air_objects}")
740
+ runner.registerInfo("altered_internalmass_definitions: #{altered_internalmass_definitions}")
741
+
742
+ # na if nothing in model to look at
743
+ if altered_lights_definitions.size + altered_luminaires_definitions.size + altered_electric_equip_definitions.size + altered_gas_equip_definitions.size + altered_other_equip_definitions.size + altered_people_definitions.size + altered_infiltration_objects.size + altered_outdoor_air_objects.size + altered_internalmass_definitions.size == 0
744
+ runner.registerAsNotApplicable('No objects to alter were found in the model')
745
+ return true
746
+ end
747
+
748
+ # report final condition of model
749
+ runner.registerFinalCondition("#{altered_lights_definitions.size} light objects were altered. #{altered_luminaires_definitions.size} luminaire objects were altered. #{altered_electric_equip_definitions.size} electric Equipment objects were altered. #{altered_gas_equip_definitions.size} gas Equipment objects were altered. #{altered_other_equip_definitions.size} otherEquipment objects were altered. #{altered_people_definitions.size} people definitions were altered. #{altered_infiltration_objects.size} infiltration objects were altered. #{altered_outdoor_air_objects.size} ventilation objects were altered. #{altered_internalmass_definitions.size} internal mass objects were altered.")
750
+
751
+ true
752
+ end
753
+ end
754
+
755
+ # register the measure to be used by the application
756
+ GeneralCalibrationMeasurePercentChange.new.registerWithApplication