openstudio-standards 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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