openstudio-ee 0.12.3 → 0.12.5
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.
- checksums.yaml +4 -4
- data/.coverage +0 -0
- data/.github/workflows/test-with-openstudio.yml +109 -74
- data/.gitignore +21 -0
- data/.rubocop.yml +15 -2
- data/CHANGELOG.md +6 -0
- data/Gemfile +7 -8
- data/README.md +3 -2
- data/WORKFLOW_CHANGES.md +74 -0
- data/lib/measures/AddDaylightSensors/measure.rb +79 -79
- data/lib/measures/AddDaylightSensors/measure.xml +4 -4
- data/lib/measures/AddOverhangsByProjectionFactor/measure.rb +38 -41
- data/lib/measures/AddOverhangsByProjectionFactor/measure.xml +4 -4
- data/lib/measures/EnableDemandControlledVentilation/measure.rb +37 -40
- data/lib/measures/EnableDemandControlledVentilation/measure.xml +4 -4
- data/lib/measures/EnableEconomizerControl/measure.rb +36 -37
- data/lib/measures/EnableEconomizerControl/measure.xml +4 -4
- data/lib/measures/GLHEProExportLoadsforGroundHeatExchangerSizing/measure.rb +27 -41
- data/lib/measures/GLHEProExportLoadsforGroundHeatExchangerSizing/measure.xml +4 -4
- data/lib/measures/GLHEProGFunctionImport/measure.rb +11 -15
- data/lib/measures/GLHEProGFunctionImport/measure.xml +4 -4
- data/lib/measures/GLHEProSetupExportLoadsforGroundHeatExchangerSizing/measure.rb +5 -9
- data/lib/measures/GLHEProSetupExportLoadsforGroundHeatExchangerSizing/measure.xml +3 -3
- data/lib/measures/ImproveFanBeltEfficiency/measure.rb +78 -95
- data/lib/measures/ImproveFanBeltEfficiency/measure.xml +6 -6
- data/lib/measures/ImproveMotorEfficiency/measure.rb +75 -100
- data/lib/measures/ImproveMotorEfficiency/measure.xml +6 -6
- data/lib/measures/IncreaseInsulationRValueForExteriorWalls/measure.rb +137 -130
- data/lib/measures/IncreaseInsulationRValueForExteriorWalls/measure.xml +4 -4
- data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/measure.rb +114 -115
- data/lib/measures/IncreaseInsulationRValueForExteriorWallsByPercentage/measure.xml +3 -3
- data/lib/measures/IncreaseInsulationRValueForRoofs/measure.rb +137 -130
- data/lib/measures/IncreaseInsulationRValueForRoofs/measure.xml +4 -4
- data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/measure.rb +114 -115
- data/lib/measures/IncreaseInsulationRValueForRoofsByPercentage/measure.xml +3 -3
- data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/measure.rb +69 -63
- data/lib/measures/ReduceElectricEquipmentLoadsByPercentage/measure.xml +6 -6
- data/lib/measures/ReduceLightingLoadsByPercentage/measure.rb +77 -66
- data/lib/measures/ReduceLightingLoadsByPercentage/measure.xml +6 -6
- data/lib/measures/ReduceNightTimeElectricEquipmentLoads/measure.rb +45 -43
- data/lib/measures/ReduceNightTimeElectricEquipmentLoads/measure.xml +4 -4
- data/lib/measures/ReduceNightTimeLightingLoads/measure.rb +45 -43
- data/lib/measures/ReduceNightTimeLightingLoads/measure.xml +4 -4
- data/lib/measures/ReduceSpaceInfiltrationByPercentage/measure.rb +58 -52
- data/lib/measures/ReduceSpaceInfiltrationByPercentage/measure.xml +6 -6
- data/lib/measures/ReduceVentilationByPercentage/measure.rb +49 -46
- data/lib/measures/ReduceVentilationByPercentage/measure.xml +6 -6
- data/lib/measures/add_variable_speed_rtu_control_logic/measure.rb +31 -23
- data/lib/measures/add_variable_speed_rtu_control_logic/measure.xml +4 -4
- data/lib/measures/create_variable_speed_rtu/measure.rb +166 -174
- data/lib/measures/create_variable_speed_rtu/measure.xml +6 -6
- data/lib/measures/fan_assist_night_ventilation/measure.rb +33 -32
- data/lib/measures/fan_assist_night_ventilation/measure.xml +4 -4
- data/lib/measures/nze_hvac/measure.rb +72 -62
- data/lib/measures/nze_hvac/measure.xml +4 -4
- data/lib/measures/replace_water_heater_mixed_with_thermal_storage_chilled_water/measure.rb +16 -19
- data/lib/measures/replace_water_heater_mixed_with_thermal_storage_chilled_water/measure.xml +4 -4
- data/lib/measures/window_enhancement/LICENSE.md +14 -0
- data/lib/measures/window_enhancement/README.md +112 -0
- data/lib/measures/window_enhancement/docs/.gitkeep +0 -0
- data/lib/measures/window_enhancement/measure.py +386 -0
- data/lib/measures/window_enhancement/measure.xml +271 -0
- data/lib/measures/window_enhancement/resources/EC3_lookup.py +321 -0
- data/lib/measures/window_enhancement/resources/Test_API.py +32 -0
- data/lib/measures/window_enhancement/resources/__pycache__/EC3_lookup.cpython-39.pyc +0 -0
- data/lib/measures/window_enhancement/resources/__pycache__/Original_EC3_lookup.py +322 -0
- data/lib/measures/window_enhancement/resources/__pycache__/Test_API.cpython-39.pyc +0 -0
- data/lib/measures/window_enhancement/resources/calculate_perimeter.py +39 -0
- data/lib/measures/window_enhancement/test_output.log +39 -0
- data/lib/openstudio/ee_measures/version.rb +1 -1
- data/openstudio-ee.gemspec +10 -8
- data/test-workflow-locally.sh +152 -0
- metadata +64 -35
- data/Jenkinsfile +0 -11
@@ -7,11 +7,11 @@
|
|
7
7
|
class IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset::ModelUserScript
|
8
8
|
# define the name that a user will see
|
9
9
|
def name
|
10
|
-
|
10
|
+
'Increase R-value of Insulation for Exterior Walls By a Specified Percentage'
|
11
11
|
end
|
12
12
|
|
13
13
|
# define the arguments that the user will input
|
14
|
-
def arguments(
|
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 IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
20
20
|
r_value.setDefaultValue(30.0)
|
21
21
|
args << r_value
|
22
22
|
|
23
|
-
|
23
|
+
args
|
24
24
|
end
|
25
25
|
|
26
26
|
# define what happens when the measure is run
|
@@ -28,9 +28,7 @@ class IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
28
28
|
super(model, runner, user_arguments)
|
29
29
|
|
30
30
|
# use the built-in error checking
|
31
|
-
|
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 IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
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
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
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(
|
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 exterior surfaces and find range of starting construction R-value (not just insulation layer)
|
@@ -67,16 +68,16 @@ class IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
67
68
|
exterior_surface_construction_names = []
|
68
69
|
exterior_surface_resistance = []
|
69
70
|
surfaces.each do |surface|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
exterior_surface_construction_names << exterior_surface_const.name.to_s
|
78
|
-
exterior_surface_resistance << 1 / exterior_surface_const.thermalConductance.to_f
|
71
|
+
next unless (surface.outsideBoundaryCondition == 'Outdoors') && (surface.surfaceType == 'Wall')
|
72
|
+
|
73
|
+
exterior_surfaces << surface
|
74
|
+
exterior_surface_const = surface.construction.get
|
75
|
+
# only add construction if it hasn't been added yet
|
76
|
+
unless exterior_surface_construction_names.include?(exterior_surface_const.name.to_s)
|
77
|
+
exterior_surface_constructions << exterior_surface_const.to_Construction.get
|
79
78
|
end
|
79
|
+
exterior_surface_construction_names << exterior_surface_const.name.to_s
|
80
|
+
exterior_surface_resistance << (1 / exterior_surface_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 IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
89
90
|
initial_string = []
|
90
91
|
exterior_surface_constructions.uniq.each do |exterior_surface_construction|
|
91
92
|
# unit conversion of exterior surface 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',
|
93
|
-
|
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} exterior wall constructions: #{initial_string.sort.join(', ')}.")
|
96
98
|
|
@@ -113,11 +115,9 @@ class IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
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
|
-
|
118
|
-
|
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 IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
142
142
|
target_material = max_thermal_resistance_material
|
143
143
|
found_material = false
|
144
144
|
materials_hash.each do |orig, new|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
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 IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
163
163
|
|
164
164
|
# edit insulation material
|
165
165
|
new_material_matt = new_material.to_Material
|
166
|
-
|
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
|
-
|
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
|
-
|
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 IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
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
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
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.wallConstruction
|
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 exterior wall 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 exterior wall 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.wallConstruction
|
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.setWallConstruction(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
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
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
|
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 IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
273
270
|
final_constructions_array.each do |final_construction|
|
274
271
|
# unit conversion of exterior surface 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-#{
|
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 IncreaseInsulationRValueForExteriorWallsByPercentage < OpenStudio::Ruleset
|
|
288
285
|
end
|
289
286
|
|
290
287
|
# report final condition
|
291
|
-
runner.registerFinalCondition("The existing insulation for exterior walls was increased by #{r_value}%. This was applied to #{neat_numbers(
|
288
|
+
runner.registerFinalCondition("The existing insulation for exterior walls was increased by #{r_value}%. This was applied to #{neat_numbers(
|
289
|
+
affected_area_ip, 0
|
290
|
+
)} (ft^2) across #{final_string.size} exterior wall constructions: #{final_string.sort.join(', ')}.")
|
292
291
|
|
293
|
-
|
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_exterior_walls_by_percentage</name>
|
5
5
|
<uid>7508c563-22bd-49f4-b646-aac69b02a82d</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>2025-
|
6
|
+
<version_id>91ef9156-f66d-4aa8-8929-c3adeee6dc45</version_id>
|
7
|
+
<version_modified>2025-09-25T15:33:42Z</version_modified>
|
8
8
|
<xml_checksum>EB1A0C08</xml_checksum>
|
9
9
|
<class_name>IncreaseInsulationRValueForExteriorWallsByPercentage</class_name>
|
10
10
|
<display_name>Increase R-value of Insulation for Exterior Walls 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>
|
78
|
+
<checksum>3840FBD1</checksum>
|
79
79
|
</file>
|
80
80
|
<file>
|
81
81
|
<filename>EnvelopeAndLoadTestModel_01.osm</filename>
|