openstudio-ee 0.12.3 → 0.12.4

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.coverage +0 -0
  3. data/.github/workflows/test-with-openstudio.yml +109 -74
  4. data/.gitignore +21 -0
  5. data/.rubocop.yml +15 -2
  6. data/CHANGELOG.md +3 -0
  7. data/Gemfile +7 -8
  8. data/README.md +1 -0
  9. data/WORKFLOW_CHANGES.md +74 -0
  10. data/lib/measures/AddDaylightSensors/measure.rb +79 -79
  11. data/lib/measures/AddDaylightSensors/measure.xml +4 -4
  12. data/lib/measures/AddOverhangsByProjectionFactor/measure.rb +38 -41
  13. data/lib/measures/AddOverhangsByProjectionFactor/measure.xml +4 -4
  14. data/lib/measures/EnableDemandControlledVentilation/measure.rb +37 -40
  15. data/lib/measures/EnableDemandControlledVentilation/measure.xml +4 -4
  16. data/lib/measures/EnableEconomizerControl/measure.rb +36 -37
  17. data/lib/measures/EnableEconomizerControl/measure.xml +4 -4
  18. data/lib/measures/GLHEProExportLoadsforGroundHeatExchangerSizing/measure.rb +27 -41
  19. data/lib/measures/GLHEProExportLoadsforGroundHeatExchangerSizing/measure.xml +4 -4
  20. data/lib/measures/GLHEProGFunctionImport/measure.rb +11 -15
  21. data/lib/measures/GLHEProGFunctionImport/measure.xml +4 -4
  22. data/lib/measures/GLHEProSetupExportLoadsforGroundHeatExchangerSizing/measure.rb +5 -9
  23. data/lib/measures/GLHEProSetupExportLoadsforGroundHeatExchangerSizing/measure.xml +3 -3
  24. data/lib/measures/ImproveFanBeltEfficiency/measure.rb +78 -95
  25. data/lib/measures/ImproveFanBeltEfficiency/measure.xml +6 -6
  26. data/lib/measures/ImproveMotorEfficiency/measure.rb +75 -100
  27. data/lib/measures/ImproveMotorEfficiency/measure.xml +6 -6
  28. data/lib/measures/IncreaseInsulationRValueForExteriorWalls/measure.rb +137 -130
  29. data/lib/measures/IncreaseInsulationRValueForExteriorWalls/measure.xml +4 -4
  30. data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/measure.rb +114 -115
  31. data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/measure.xml +3 -3
  32. data/lib/measures/IncreaseInsulationRValueForRoofs/measure.rb +137 -130
  33. data/lib/measures/IncreaseInsulationRValueForRoofs/measure.xml +4 -4
  34. data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/measure.rb +114 -115
  35. data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/measure.xml +3 -3
  36. data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/measure.rb +69 -63
  37. data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/measure.xml +6 -6
  38. data/lib/measures/ReduceLightingLoadsByPercentage/measure.rb +77 -66
  39. data/lib/measures/ReduceLightingLoadsByPercentage/measure.xml +6 -6
  40. data/lib/measures/ReduceNightTimeElectricEquipmentLoads/measure.rb +45 -43
  41. data/lib/measures/ReduceNightTimeElectricEquipmentLoads/measure.xml +4 -4
  42. data/lib/measures/ReduceNightTimeLightingLoads/measure.rb +45 -43
  43. data/lib/measures/ReduceNightTimeLightingLoads/measure.xml +4 -4
  44. data/lib/measures/ReduceSpaceInfiltrationByPercentage/measure.rb +58 -52
  45. data/lib/measures/ReduceSpaceInfiltrationByPercentage/measure.xml +6 -6
  46. data/lib/measures/ReduceVentilationByPercentage/measure.rb +49 -46
  47. data/lib/measures/ReduceVentilationByPercentage/measure.xml +6 -6
  48. data/lib/measures/add_variable_speed_rtu_control_logic/measure.rb +31 -23
  49. data/lib/measures/add_variable_speed_rtu_control_logic/measure.xml +4 -4
  50. data/lib/measures/create_variable_speed_rtu/measure.rb +166 -174
  51. data/lib/measures/create_variable_speed_rtu/measure.xml +6 -6
  52. data/lib/measures/fan_assist_night_ventilation/measure.rb +33 -32
  53. data/lib/measures/fan_assist_night_ventilation/measure.xml +4 -4
  54. data/lib/measures/nze_hvac/measure.rb +72 -62
  55. data/lib/measures/nze_hvac/measure.xml +4 -4
  56. data/lib/measures/replace_water_heater_mixed_with_thermal_storage_chilled_water/measure.rb +16 -19
  57. data/lib/measures/replace_water_heater_mixed_with_thermal_storage_chilled_water/measure.xml +4 -4
  58. data/lib/measures/window_enhancement/LICENSE.md +14 -0
  59. data/lib/measures/window_enhancement/README.md +112 -0
  60. data/lib/measures/window_enhancement/docs/.gitkeep +0 -0
  61. data/lib/measures/window_enhancement/measure.py +386 -0
  62. data/lib/measures/window_enhancement/measure.xml +128 -0
  63. data/lib/measures/window_enhancement/resources/EC3_lookup.py +321 -0
  64. data/lib/measures/window_enhancement/resources/Test_API.py +32 -0
  65. data/lib/measures/window_enhancement/resources/__pycache__/EC3_lookup.cpython-39.pyc +0 -0
  66. data/lib/measures/window_enhancement/resources/__pycache__/Original_EC3_lookup.py +322 -0
  67. data/lib/measures/window_enhancement/resources/__pycache__/Test_API.cpython-39.pyc +0 -0
  68. data/lib/measures/window_enhancement/resources/calculate_perimeter.py +39 -0
  69. data/lib/measures/window_enhancement/test_output.log +39 -0
  70. data/lib/openstudio/ee_measures/version.rb +1 -1
  71. data/openstudio-ee.gemspec +10 -8
  72. data/test-workflow-locally.sh +152 -0
  73. metadata +64 -35
  74. data/Jenkinsfile +0 -11
@@ -7,11 +7,11 @@
7
7
  class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelUserScript
8
8
  # define the name that a user will see
9
9
  def name
10
- return 'Increase R-value of Insulation for Roofs by a Specified Percentage.'
10
+ 'Increase R-value of Insulation for Roofs by a Specified Percentage.'
11
11
  end
12
12
 
13
13
  # define the arguments that the user will input
14
- def arguments(model)
14
+ def arguments(_model)
15
15
  args = OpenStudio::Ruleset::OSArgumentVector.new
16
16
 
17
17
  # make an argument insulation R-value
@@ -20,7 +20,7 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
20
20
  r_value.setDefaultValue(30.0)
21
21
  args << r_value
22
22
 
23
- return args
23
+ args
24
24
  end
25
25
 
26
26
  # define what happens when the measure is run
@@ -28,9 +28,7 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
28
28
  super(model, runner, user_arguments)
29
29
 
30
30
  # use the built-in error checking
31
- if !runner.validateUserArguments(arguments(model), user_arguments)
32
- return false
33
- end
31
+ return false unless runner.validateUserArguments(arguments(model), user_arguments)
34
32
 
35
33
  # assign the user inputs to variables
36
34
  r_value = runner.getDoubleArgumentValue('r_value', user_arguments)
@@ -46,18 +44,21 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
46
44
 
47
45
  # short def to make numbers pretty (converts 4125001.25641 to 4,125,001.26 or 4,125,001). The definition be called through this measure
48
46
  def neat_numbers(number, roundto = 2) # round to 0 or 2)
49
- if roundto == 2
50
- number = format '%.2f', number
51
- else
52
- number = number.round
53
- end
47
+ number = if roundto == 2
48
+ format '%.2f', number
49
+ else
50
+ number.round
51
+ end
54
52
  # regex to add commas
55
53
  number.to_s.reverse.gsub(/([0-9]{3}(?=([0-9])))/, '\\1,').reverse
56
54
  end
57
55
 
58
56
  # helper to make it easier to do unit conversions on the fly
59
57
  def unit_helper(number, from_unit_string, to_unit_string)
60
- converted_number = OpenStudio.convert(OpenStudio::Quantity.new(number, OpenStudio.createUnit(from_unit_string).get), OpenStudio.createUnit(to_unit_string).get).get.value
58
+ converted_number = OpenStudio.convert(
59
+ OpenStudio::Quantity.new(number,
60
+ OpenStudio.createUnit(from_unit_string).get), OpenStudio.createUnit(to_unit_string).get
61
+ ).get.value
61
62
  end
62
63
 
63
64
  # create an array of roofs and find range of starting construction R-value (not just insulation layer)
@@ -67,16 +68,16 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
67
68
  exterior_surface_construction_names = []
68
69
  roof_resistance = []
69
70
  surfaces.each do |surface|
70
- if (surface.outsideBoundaryCondition == 'Outdoors') && (surface.surfaceType == 'RoofCeiling')
71
- exterior_surfaces << surface
72
- roof_const = surface.construction.get
73
- # only add construction if it hasn't been added yet
74
- if !exterior_surface_construction_names.include?(roof_const.name.to_s)
75
- exterior_surface_constructions << roof_const.to_Construction.get
76
- end
77
- exterior_surface_construction_names << roof_const.name.to_s
78
- roof_resistance << 1 / roof_const.thermalConductance.to_f
71
+ next unless (surface.outsideBoundaryCondition == 'Outdoors') && (surface.surfaceType == 'RoofCeiling')
72
+
73
+ exterior_surfaces << surface
74
+ roof_const = surface.construction.get
75
+ # only add construction if it hasn't been added yet
76
+ unless exterior_surface_construction_names.include?(roof_const.name.to_s)
77
+ exterior_surface_constructions << roof_const.to_Construction.get
79
78
  end
79
+ exterior_surface_construction_names << roof_const.name.to_s
80
+ roof_resistance << (1 / roof_const.thermalConductance.to_f)
80
81
  end
81
82
 
82
83
  # nothing will be done if there are no exterior surfaces
@@ -89,8 +90,9 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
89
90
  initial_string = []
90
91
  exterior_surface_constructions.uniq.each do |exterior_surface_construction|
91
92
  # unit conversion of roof insulation from SI units (M^2*K/W) to IP units (ft^2*h*R/Btu)
92
- initial_conductance_ip = unit_helper(1 / exterior_surface_construction.thermalConductance.to_f, 'm^2*K/W', 'ft^2*h*R/Btu')
93
- initial_string << "#{exterior_surface_construction.name} (R-#{(format '%.1f', initial_conductance_ip)})"
93
+ initial_conductance_ip = unit_helper(1 / exterior_surface_construction.thermalConductance.to_f, 'm^2*K/W',
94
+ 'ft^2*h*R/Btu')
95
+ initial_string << "#{exterior_surface_construction.name} (R-#{format '%.1f', initial_conductance_ip})"
94
96
  end
95
97
  runner.registerInitialCondition("The building had #{initial_string.size} roof constructions: #{initial_string.sort.join(', ')}.")
96
98
 
@@ -113,11 +115,9 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
113
115
  # loop through construction layers and infer insulation layer/material
114
116
  construction_layers.each do |construction_layer|
115
117
  construction_layer_r_value = construction_layer.to_OpaqueMaterial.get.thermalResistance
116
- if !thermal_resistance_values.empty?
117
- if construction_layer_r_value > thermal_resistance_values.max
118
- max_thermal_resistance_material = construction_layer
119
- max_thermal_resistance_material_index = counter
120
- end
118
+ if !thermal_resistance_values.empty? && (construction_layer_r_value > thermal_resistance_values.max)
119
+ max_thermal_resistance_material = construction_layer
120
+ max_thermal_resistance_material_index = counter
121
121
  end
122
122
  thermal_resistance_values << construction_layer_r_value
123
123
  counter += 1
@@ -142,13 +142,13 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
142
142
  target_material = max_thermal_resistance_material
143
143
  found_material = false
144
144
  materials_hash.each do |orig, new|
145
- if target_material.name.to_s == orig
146
- new_material = new
147
- materials_hash[max_thermal_resistance_material.name.to_s] = new_material
148
- final_construction.eraseLayer(max_thermal_resistance_material_index)
149
- final_construction.insertLayer(max_thermal_resistance_material_index, new_material)
150
- found_material = true
151
- end
145
+ next unless target_material.name.to_s == orig
146
+
147
+ new_material = new
148
+ materials_hash[max_thermal_resistance_material.name.to_s] = new_material
149
+ final_construction.eraseLayer(max_thermal_resistance_material_index)
150
+ final_construction.insertLayer(max_thermal_resistance_material_index, new_material)
151
+ found_material = true
152
152
  end
153
153
 
154
154
  # clone and edit insulation material and link to construction
@@ -163,20 +163,20 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
163
163
 
164
164
  # edit insulation material
165
165
  new_material_matt = new_material.to_Material
166
- if !new_material_matt.empty?
166
+ unless new_material_matt.empty?
167
167
  starting_thickness = new_material_matt.get.thickness
168
- target_thickness = starting_thickness * (1 + r_value / 100)
168
+ target_thickness = starting_thickness * (1 + (r_value / 100))
169
169
  final_thickness = new_material_matt.get.setThickness(target_thickness)
170
170
  end
171
171
  new_material_massless = new_material.to_MasslessOpaqueMaterial
172
- if !new_material_massless.empty?
172
+ unless new_material_massless.empty?
173
173
  starting_thermal_resistance = new_material_massless.get.thermalResistance
174
- final_thermal_resistance = new_material_massless.get.setThermalResistance(starting_thermal_resistance * (1 + r_value / 100))
174
+ final_thermal_resistance = new_material_massless.get.setThermalResistance(starting_thermal_resistance * (1 + (r_value / 100)))
175
175
  end
176
176
  new_material_airgap = new_material.to_AirGap
177
- if !new_material_airgap.empty?
177
+ unless new_material_airgap.empty?
178
178
  starting_thermal_resistance = new_material_airgap.get.thermalResistance
179
- final_thermal_resistance = new_material_airgap.get.setThermalResistance(starting_thermal_resistance * (1 + r_value / 100))
179
+ final_thermal_resistance = new_material_airgap.get.setThermalResistance(starting_thermal_resistance * (1 + (r_value / 100)))
180
180
  end
181
181
  end
182
182
  end
@@ -185,85 +185,82 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
185
185
  # loop through construction sets used in the model
186
186
  default_construction_sets = model.getDefaultConstructionSets
187
187
  default_construction_sets.each do |default_construction_set|
188
- if default_construction_set.directUseCount > 0
189
- default_surface_const_set = default_construction_set.defaultExteriorSurfaceConstructions
190
- if !default_surface_const_set.empty?
191
- starting_construction = default_surface_const_set.get.roofCeilingConstruction
192
-
193
- # creating new default construction set
194
- new_default_construction_set = default_construction_set.clone(model)
195
- new_default_construction_set = new_default_construction_set.to_DefaultConstructionSet.get
196
- new_default_construction_set.setName("#{default_construction_set.name} adj roof insulation")
197
-
198
- # create new surface set and link to construction set
199
- new_default_surface_const_set = default_surface_const_set.get.clone(model)
200
- new_default_surface_const_set = new_default_surface_const_set.to_DefaultSurfaceConstructions.get
201
- new_default_surface_const_set.setName("#{default_surface_const_set.get.name} adj roof insulation")
202
- new_default_construction_set.setDefaultExteriorSurfaceConstructions(new_default_surface_const_set)
203
-
204
- # use the hash to find the proper construction and link to new_default_surface_const_set
205
- target_const = new_default_surface_const_set.roofCeilingConstruction
206
- if !target_const.empty?
207
- target_const = target_const.get.name.to_s
208
- found_const_flag = false
209
- constructions_hash_old_new.each do |orig, new|
210
- if target_const == orig
211
- final_construction = new
212
- new_default_surface_const_set.setRoofCeilingConstruction(final_construction)
213
- found_const_flag = true
214
- end
215
- end
216
- if found_const_flag == false # this should never happen but is just an extra test in case something goes wrong with the measure code
217
- runner.registerWarning("Measure couldn't find the construction named '#{target_const}' in the exterior surface hash.")
218
- end
219
- end
220
-
221
- # swap all uses of the old construction set for the new
222
- construction_set_sources = default_construction_set.sources
223
- construction_set_sources.each do |construction_set_source|
224
- building_source = construction_set_source.to_Building
225
- # if statement for each type of object than can use a DefaultConstructionSet
226
- if !building_source.empty?
227
- building_source = building_source.get
228
- building_source.setDefaultConstructionSet(new_default_construction_set)
229
- end
230
- building_story_source = construction_set_source.to_BuildingStory
231
- if !building_story_source.empty?
232
- building_story_source = building_story_source.get
233
- building_story_source.setDefaultConstructionSet(new_default_construction_set)
234
- end
235
- space_type_source = construction_set_source.to_SpaceType
236
- if !space_type_source.empty?
237
- space_type_source = space_type_source.get
238
- space_type_source.setDefaultConstructionSet(new_default_construction_set)
239
- end
240
- space_source = construction_set_source.to_Space
241
- if !space_source.empty?
242
- space_source = space_source.get
243
- space_source.setDefaultConstructionSet(new_default_construction_set)
244
- end
245
- end
188
+ next unless default_construction_set.directUseCount > 0
189
+
190
+ default_surface_const_set = default_construction_set.defaultExteriorSurfaceConstructions
191
+ next if default_surface_const_set.empty?
192
+
193
+ starting_construction = default_surface_const_set.get.roofCeilingConstruction
194
+
195
+ # creating new default construction set
196
+ new_default_construction_set = default_construction_set.clone(model)
197
+ new_default_construction_set = new_default_construction_set.to_DefaultConstructionSet.get
198
+ new_default_construction_set.setName("#{default_construction_set.name} adj roof insulation")
199
+
200
+ # create new surface set and link to construction set
201
+ new_default_surface_const_set = default_surface_const_set.get.clone(model)
202
+ new_default_surface_const_set = new_default_surface_const_set.to_DefaultSurfaceConstructions.get
203
+ new_default_surface_const_set.setName("#{default_surface_const_set.get.name} adj roof insulation")
204
+ new_default_construction_set.setDefaultExteriorSurfaceConstructions(new_default_surface_const_set)
205
+
206
+ # use the hash to find the proper construction and link to new_default_surface_const_set
207
+ target_const = new_default_surface_const_set.roofCeilingConstruction
208
+ unless target_const.empty?
209
+ target_const = target_const.get.name.to_s
210
+ found_const_flag = false
211
+ constructions_hash_old_new.each do |orig, new|
212
+ next unless target_const == orig
213
+
214
+ final_construction = new
215
+ new_default_surface_const_set.setRoofCeilingConstruction(final_construction)
216
+ found_const_flag = true
217
+ end
218
+ if found_const_flag == false # this should never happen but is just an extra test in case something goes wrong with the measure code
219
+ runner.registerWarning("Measure couldn't find the construction named '#{target_const}' in the exterior surface hash.")
220
+ end
221
+ end
246
222
 
223
+ # swap all uses of the old construction set for the new
224
+ construction_set_sources = default_construction_set.sources
225
+ construction_set_sources.each do |construction_set_source|
226
+ building_source = construction_set_source.to_Building
227
+ # if statement for each type of object than can use a DefaultConstructionSet
228
+ unless building_source.empty?
229
+ building_source = building_source.get
230
+ building_source.setDefaultConstructionSet(new_default_construction_set)
231
+ end
232
+ building_story_source = construction_set_source.to_BuildingStory
233
+ unless building_story_source.empty?
234
+ building_story_source = building_story_source.get
235
+ building_story_source.setDefaultConstructionSet(new_default_construction_set)
236
+ end
237
+ space_type_source = construction_set_source.to_SpaceType
238
+ unless space_type_source.empty?
239
+ space_type_source = space_type_source.get
240
+ space_type_source.setDefaultConstructionSet(new_default_construction_set)
241
+ end
242
+ space_source = construction_set_source.to_Space
243
+ unless space_source.empty?
244
+ space_source = space_source.get
245
+ space_source.setDefaultConstructionSet(new_default_construction_set)
247
246
  end
248
247
  end
249
248
  end
250
249
 
251
250
  # link cloned and edited constructions for surfaces with hard assigned constructions
252
251
  exterior_surfaces.each do |exterior_surface|
253
- if !exterior_surface.isConstructionDefaulted && !exterior_surface.construction.empty?
254
-
255
- # use the hash to find the proper construction and link to surface
256
- target_const = exterior_surface.construction
257
- if !target_const.empty?
258
- target_const = target_const.get.name.to_s
259
- constructions_hash_old_new.each do |orig, new|
260
- if target_const == orig
261
- final_construction = new
262
- exterior_surface.setConstruction(final_construction)
263
- end
264
- end
265
- end
252
+ next unless !exterior_surface.isConstructionDefaulted && !exterior_surface.construction.empty?
253
+
254
+ # use the hash to find the proper construction and link to surface
255
+ target_const = exterior_surface.construction
256
+ next if target_const.empty?
266
257
 
258
+ target_const = target_const.get.name.to_s
259
+ constructions_hash_old_new.each do |orig, new|
260
+ if target_const == orig
261
+ final_construction = new
262
+ exterior_surface.setConstruction(final_construction)
263
+ end
267
264
  end
268
265
  end
269
266
 
@@ -273,7 +270,7 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
273
270
  final_constructions_array.each do |final_construction|
274
271
  # unit conversion of roof insulation from SI units (M^2*K/W) to IP units (ft^2*h*R/Btu)
275
272
  final_conductance_ip = unit_helper(1 / final_construction.thermalConductance.to_f, 'm^2*K/W', 'ft^2*h*R/Btu')
276
- final_string << "#{final_construction.name} (R-#{(format '%.1f', final_conductance_ip)})"
273
+ final_string << "#{final_construction.name} (R-#{format '%.1f', final_conductance_ip})"
277
274
  affected_area_si += final_construction.getNetArea
278
275
  end
279
276
 
@@ -288,9 +285,11 @@ class IncreaseInsulationRValueForRoofsByPercentage < OpenStudio::Ruleset::ModelU
288
285
  end
289
286
 
290
287
  # report final condition
291
- runner.registerFinalCondition("The existing insulation for roofs was increased by #{r_value}%. This was applied to #{neat_numbers(affected_area_ip, 0)} (ft^2) across #{final_string.size} roof constructions: #{final_string.sort.join(', ')}.")
288
+ runner.registerFinalCondition("The existing insulation for roofs was increased by #{r_value}%. This was applied to #{neat_numbers(
289
+ affected_area_ip, 0
290
+ )} (ft^2) across #{final_string.size} roof constructions: #{final_string.sort.join(', ')}.")
292
291
 
293
- return true
292
+ true
294
293
  end
295
294
  end
296
295
 
@@ -3,8 +3,8 @@
3
3
  <schema_version>3.1</schema_version>
4
4
  <name>increase_insulation_r_value_for_roofs_by_percentage</name>
5
5
  <uid>807d3ebf-c89b-4b93-b400-110ca060b2bb</uid>
6
- <version_id>3fcd1d78-8613-4669-a79e-f7261cb28b3c</version_id>
7
- <version_modified>2025-08-08T15:15:56Z</version_modified>
6
+ <version_id>76bdd67c-0822-4dbd-86eb-4de81b0668ad</version_id>
7
+ <version_modified>2025-09-25T15:33:42Z</version_modified>
8
8
  <xml_checksum>EB1A0C08</xml_checksum>
9
9
  <class_name>IncreaseInsulationRValueForRoofsByPercentage</class_name>
10
10
  <display_name>Increase R-value of Insulation for Roofs by a Specified Percentage.</display_name>
@@ -75,7 +75,7 @@
75
75
  <filename>measure.rb</filename>
76
76
  <filetype>rb</filetype>
77
77
  <usage_type>script</usage_type>
78
- <checksum>AB89E584</checksum>
78
+ <checksum>35019F58</checksum>
79
79
  </file>
80
80
  <file>
81
81
  <filename>EnvelopeAndLoadTestModel_01.osm</filename>