openstudio-standards 0.2.1 → 0.2.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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/DEER_ERC.osm +2 -1
  3. data/data/geometry/DEER_MFm.osm +441 -70
  4. data/data/geometry/DEER_MFm_DXGF.json +210 -0
  5. data/data/geometry/DEER_MFm_DXHP.json +210 -0
  6. data/data/geometry/DEER_MFm_NCEH.json +163 -76
  7. data/data/geometry/DEER_MFm_NCGF.json +198 -44
  8. data/data/geometry/DEER_RtS.osm +0 -68
  9. data/data/geometry/DEER_SUn_Unc.json +2 -0
  10. data/data/standards/OpenStudio_Standards.xlsx +0 -0
  11. data/data/standards/OpenStudio_Standards_boilers.json +6 -6
  12. data/data/standards/OpenStudio_Standards_construction_properties.json +2304 -2304
  13. data/data/standards/OpenStudio_Standards_construction_sets.json +755 -125
  14. data/data/standards/OpenStudio_Standards_curves.json +51 -176
  15. data/data/standards/OpenStudio_Standards_entryways.json +11 -0
  16. data/data/standards/OpenStudio_Standards_exterior_lighting.json +30 -30
  17. data/data/standards/OpenStudio_Standards_ground_temperatures.json +288 -288
  18. data/data/standards/OpenStudio_Standards_heat_pumps.json +1320 -0
  19. data/data/standards/OpenStudio_Standards_heat_pumps_heating.json +840 -0
  20. data/data/standards/OpenStudio_Standards_materials.json +1 -1
  21. data/data/standards/OpenStudio_Standards_motors.json +11 -11
  22. data/data/standards/OpenStudio_Standards_parking.json +9 -0
  23. data/data/standards/OpenStudio_Standards_prototype_inputs.json +11877 -11301
  24. data/data/standards/OpenStudio_Standards_schedules.json +1847 -59
  25. data/data/standards/OpenStudio_Standards_space_types.json +88552 -75100
  26. data/data/standards/OpenStudio_Standards_templates.json +6 -6
  27. data/data/standards/OpenStudio_Standards_unitary_acs.json +1461 -185
  28. data/data/standards/OpenStudio_Standards_water_heaters.json +306 -0
  29. data/lib/openstudio-standards.rb +1 -0
  30. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +19 -1
  31. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +13 -2
  32. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +3 -3
  33. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +5 -0
  34. data/lib/openstudio-standards/standards/Standards.Construction.rb +26 -5
  35. data/lib/openstudio-standards/standards/Standards.Space.rb +1 -0
  36. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +1 -1
  37. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +1 -1
  38. data/lib/openstudio-standards/standards/deer/deer.Space.rb +17 -0
  39. data/lib/openstudio-standards/version.rb +1 -1
  40. metadata +5 -2
@@ -126,17 +126,20 @@ class Standard
126
126
  # @return [Bool] returns true if successful, false if not
127
127
  def construction_set_glazing_u_value(construction, target_u_value_ip, intended_surface_type = 'ExteriorWall', target_includes_int_film_coefficients, target_includes_ext_film_coefficients)
128
128
  OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "Setting U-Value for #{construction.name}.")
129
-
129
+
130
130
  # Skip layer-by-layer fenestration constructions
131
131
  unless construction_simple_glazing?(construction)
132
132
  OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Can only set the u-value of simple glazing. #{construction.name} is not simple glazing.")
133
133
  return false
134
134
  end
135
-
135
+
136
+ glass_layer = construction.layers.first.to_SimpleGlazing.get
137
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---glass_layer = #{glass_layer.name} u_factor_si = #{glass_layer.uFactor.round(2)}.")
138
+
136
139
  # Convert the target U-value to SI
137
140
  target_u_value_ip = target_u_value_ip.to_f
138
141
  target_r_value_ip = 1.0 / target_u_value_ip
139
-
142
+
140
143
  target_u_value_si = OpenStudio.convert(target_u_value_ip, 'Btu/ft^2*hr*R', 'W/m^2*K').get
141
144
  target_r_value_si = 1.0 / target_u_value_si
142
145
 
@@ -151,22 +154,40 @@ class Standard
151
154
  film_coeff_r_value_si += film_coefficients_r_value(intended_surface_type, target_includes_int_film_coefficients, target_includes_ext_film_coefficients)
152
155
  film_coeff_u_value_si = 1.0 / film_coeff_r_value_si
153
156
  film_coeff_u_value_ip = OpenStudio.convert(film_coeff_u_value_si, 'W/m^2*K', 'Btu/ft^2*hr*R').get
154
-
157
+ film_coeff_r_value_ip = 1.0 / film_coeff_u_value_ip
158
+
159
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---film_coeff_r_value_si = #{film_coeff_r_value_si.round(2)} for #{construction.name}.")
160
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---film_coeff_u_value_si = #{film_coeff_u_value_si.round(2)} for #{construction.name}.")
161
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---film_coeff_u_value_ip = #{film_coeff_u_value_ip.round(2)} for #{construction.name}.")
162
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---film_coeff_r_value_ip = #{film_coeff_r_value_ip.round(2)} for #{construction.name}.")
163
+
155
164
  # Determine the difference between the desired R-value
156
165
  # and the R-value of the and air films.
157
166
  # This is the desired R-value of the insulation.
158
167
  ins_r_value_si = target_r_value_si - film_coeff_r_value_si
159
168
  if ins_r_value_si <= 0.0
160
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too high given the film coefficients of U-#{film_coeff_u_value_ip.round(2)}; U-value will not be modified.")
169
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Requested U-value of #{target_u_value_ip} Btu/ft^2*hr*R for #{construction.name} is too high given the film coefficients of U-#{film_coeff_u_value_ip.round(2)} Btu/ft^2*hr*R; U-value will not be modified.")
161
170
  return false
162
171
  end
163
172
  ins_u_value_si = 1.0 / ins_r_value_si
173
+
174
+ if ins_u_value_si > 7.0
175
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ConstructionBase', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too high given the film coefficients of U-#{film_coeff_u_value_ip.round(2)}; setting U-value to EnergyPlus limit of 7.0 W/m^2*K (1.23 Btu/ft^2*hr*R).")
176
+ ins_u_value_si = 7.0
177
+ end
178
+
164
179
  ins_u_value_ip = OpenStudio.convert(ins_u_value_si, 'W/m^2*K', 'Btu/ft^2*hr*R').get
180
+ ins_r_value_ip = 1.0 / ins_u_value_ip
165
181
 
166
182
  # Set the U-value of the insulation layer
167
183
  glass_layer = construction.layers.first.to_SimpleGlazing.get
168
184
  glass_layer.setUFactor(ins_u_value_si)
169
185
  glass_layer.setName("#{glass_layer.name} U-#{ins_u_value_ip.round(2)}")
186
+
187
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---ins_r_value_ip = #{ins_r_value_ip.round(2)} for #{construction.name}.")
188
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---ins_u_value_ip = #{ins_u_value_ip.round(2)} for #{construction.name}.")
189
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---ins_u_value_si = #{ins_u_value_si.round(2)} for #{construction.name}.")
190
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ConstructionBase', "---glass_layer = #{glass_layer.name} u_factor_si = #{glass_layer.uFactor.round(2)}.")
170
191
 
171
192
  # Modify the construction name
172
193
  construction.setName("#{construction.name} U-#{target_u_value_ip.round(2)}")
@@ -1235,6 +1235,7 @@ class Standard
1235
1235
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.Standards.Model', "For #{template}, no exterior wall area was found, no infiltration will be added.")
1236
1236
  return true
1237
1237
  end
1238
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.Standards.Model', "For #{space.name}, set infiltration rate to #{adj_infil_rate_cfm_per_ft2.round(3)} cfm/ft2 exterior wall area (aka #{basic_infil_rate_cfm_per_ft2} cfm/ft2 @75Pa).")
1238
1239
 
1239
1240
  # Calculate the total infiltration, assuming
1240
1241
  # that it only occurs through exterior walls
@@ -336,7 +336,7 @@ class Standard
336
336
  definition = inst.gasEquipmentDefinition
337
337
  unless gas_equip_per_area.zero?
338
338
  definition.setWattsperSpaceFloorArea(OpenStudio.convert(gas_equip_per_area.to_f, 'Btu/hr*ft^2', 'W/m^2').get)
339
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set gas EPD to #{elec_equip_per_area} Btu/hr*ft^2.")
339
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set gas EPD to #{gas_equip_per_area} Btu/hr*ft^2.")
340
340
  end
341
341
  unless gas_equip_frac_latent.zero?
342
342
  definition.setFractionLatent(gas_equip_frac_latent)
@@ -112,7 +112,7 @@ class Standard
112
112
  # Calculate the percent loss per hr
113
113
  hr_loss_base = wh_props['hourly_loss_base']
114
114
  hr_loss_allow = wh_props['hourly_loss_volume_allowance']
115
- hrly_loss_pct = (hr_loss_base + hr_loss_allow / volume_gal) / 100
115
+ hrly_loss_pct = hr_loss_base + (hr_loss_allow / volume_gal) / 100
116
116
  # Convert to Btu/hr, assuming:
117
117
  # Water at 120F, density = 8.25 lb/gal
118
118
  # 1 Btu to raise 1 lb of water 1 F
@@ -0,0 +1,17 @@
1
+ class DEER
2
+ # @!group Space
3
+
4
+ # Determine the base infiltration rate at 75 PA.
5
+ # In the MASControl2 rules, there is BDL code which
6
+ # states that the value is 0.038 cfm/ft2 of perimeter wall area
7
+ # at typical building pressures.
8
+ # This translates to 0.338921 cfm/ft2 of perimeter wall area at
9
+ # 75Pa using the assumptions from the DOE Prototypes.
10
+ #
11
+ # @return [Double] the baseline infiltration rate, in cfm/ft^2
12
+ # defaults to no infiltration.
13
+ def space_infiltration_rate_75_pa(space)
14
+ basic_infil_rate_cfm_per_ft2 = 0.338921
15
+ return basic_infil_rate_cfm_per_ft2
16
+ end
17
+ end
@@ -13,5 +13,5 @@ module OpenstudioStandards
13
13
  end
14
14
  return 'git-not-found-on-this-system'
15
15
  end
16
- VERSION = '0.2.1'.freeze
16
+ VERSION = '0.2.2'.freeze
17
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstudio-standards
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Parker
@@ -21,7 +21,7 @@ authors:
21
21
  autorequire:
22
22
  bindir: bin
23
23
  cert_chain: []
24
- date: 2018-04-19 00:00:00.000000000 Z
24
+ date: 2018-06-11 00:00:00.000000000 Z
25
25
  dependencies:
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: minitest-reporters
@@ -514,6 +514,8 @@ files:
514
514
  - data/geometry/DEER_MBT_SVVG.json
515
515
  - data/geometry/DEER_MBT_WLHP.json
516
516
  - data/geometry/DEER_MFm.osm
517
+ - data/geometry/DEER_MFm_DXGF.json
518
+ - data/geometry/DEER_MFm_DXHP.json
517
519
  - data/geometry/DEER_MFm_NCEH.json
518
520
  - data/geometry/DEER_MFm_NCGF.json
519
521
  - data/geometry/DEER_MLI.osm
@@ -1550,6 +1552,7 @@ files:
1550
1552
  - lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.rb
1551
1553
  - lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb
1552
1554
  - lib/openstudio-standards/standards/deer/deer.Model.rb
1555
+ - lib/openstudio-standards/standards/deer/deer.Space.rb
1553
1556
  - lib/openstudio-standards/standards/deer/deer.rb
1554
1557
  - lib/openstudio-standards/standards/deer/deer_1985/deer_1985.rb
1555
1558
  - lib/openstudio-standards/standards/deer/deer_1996/deer_1996.rb