openstudio-standards 0.6.0 → 0.6.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 99feac3c5967489050268e5d5371e8966cdab260e390ceda4e61c7d3f8413dd3
4
- data.tar.gz: 3e66eab384d8af2d75243ab465fad4cb94e6d007514bd3c4de51fbe5ddfc9d1a
3
+ metadata.gz: 36e7f523d2cb10126059ecdf5e1284b63aa700608bdb4a9244d799836bdaf3af
4
+ data.tar.gz: afb385431a40c8a890e10374ee3512c4e539f2eaeaf73e817b53afcbdeb00e98
5
5
  SHA512:
6
- metadata.gz: c7766ea57fc85eaea49dcc70b704bfb0a5a0a89ce332c0ec442ec50c2e5af4eb7b1d8523d4cefe5002d4e674f3b8610c3c3eccb2324dda9d6dcff2c48101dc24
7
- data.tar.gz: c7fc367108d38b3879d82e63b7b7169b0c05978a1016da8869481dfd9adfbbbb416e9b48be1c23f5a8fa37b036141ce384bb425804a37703ec0c6d8d7ead9848
6
+ metadata.gz: b57b01c010bd7c8b6a3b5c7c291cec14073974a8128fc9eb48dc11f51cec9ff605848cae2ade96947eee9c77fd1f50d17f7962c25b7c7b96c20f1e6b419debcd
7
+ data.tar.gz: a3d1ec5b7bf7ad1c986c2b4b26ac39d99f8ae60411b0efcf8a5a84e6819c1c19cade76921293c13fb70e2c80740219a216442f23519e3c706df1e8081f3c6dc6
@@ -144,7 +144,7 @@ module OpenstudioStandards
144
144
 
145
145
  # check that weekday start time plus duration does not exceed 24 hrs
146
146
  if (wkdy_op_hrs_start_time_hr + wkdy_op_hrs_duration_hr + (wkdy_op_hrs_start_time_min + wkdy_op_hrs_duration_min) / 60.0) > 24.0
147
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CreateTypical', "Weekday start time of #{wkdy_op_hrs_start} plus duration of #{wkdy_op_hrs_duration} is more than 24 hrs, hours of operation overlap midnight.")
147
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CreateTypical', "Weekday start time of #{wkdy_op_hrs_start_time} plus duration of #{wkdy_op_hrs_duration} is more than 24 hrs, hours of operation overlap midnight.")
148
148
  end
149
149
  end
150
150
 
@@ -190,7 +190,7 @@ module OpenstudioStandards
190
190
  building_overhang_area_w = 0.0
191
191
 
192
192
  # loop through stories based on mine z height of surfaces.
193
- sorted_stories = sort_building_stories_and_get_min_multiplier(model).sort_by { |k, v| v }
193
+ sorted_stories = OpenstudioStandards::Geometry.model_sort_building_stories_and_get_min_multiplier(model).sort_by { |k, v| v }
194
194
  sorted_stories.each do |story, story_min_z|
195
195
  story_min_multiplier = nil
196
196
  story_footprint = nil
@@ -365,10 +365,10 @@ module OpenstudioStandards
365
365
  end
366
366
  end
367
367
 
368
- envelope_data_hash[:building_overhang_proj_factor_n] = building_overhang_area_n / ext_surfaces_hash['northWindow']
369
- envelope_data_hash[:building_overhang_proj_factor_s] = building_overhang_area_s / ext_surfaces_hash['southWindow']
370
- envelope_data_hash[:building_overhang_proj_factor_e] = building_overhang_area_e / ext_surfaces_hash['eastWindow']
371
- envelope_data_hash[:building_overhang_proj_factor_w] = building_overhang_area_w / ext_surfaces_hash['westWindow']
368
+ envelope_data_hash[:building_overhang_proj_factor_n] = building_overhang_area_n / ext_surfaces_hash['north_window']
369
+ envelope_data_hash[:building_overhang_proj_factor_s] = building_overhang_area_s / ext_surfaces_hash['south_window']
370
+ envelope_data_hash[:building_overhang_proj_factor_e] = building_overhang_area_e / ext_surfaces_hash['east_window']
371
+ envelope_data_hash[:building_overhang_proj_factor_w] = building_overhang_area_w / ext_surfaces_hash['west_window']
372
372
 
373
373
  # warn for spaces that are not on a story (in future could infer stories for these)
374
374
  model.getSpaces.sort.each do |space|
@@ -390,7 +390,7 @@ module OpenstudioStandards
390
390
  bounding_length = envelope_data_hash[:building_max_xyz][0] - envelope_data_hash[:building_min_xyz][0]
391
391
  bounding_width = envelope_data_hash[:building_max_xyz][1] - envelope_data_hash[:building_min_xyz][1]
392
392
  bounding_area = bounding_length * bounding_width
393
- footprint_area = envelope_data_hash[:building_floor_area] / envelope_data_hash[:effective_num_stories].to_f
393
+ footprint_area = envelope_data_hash[:building_floor_area] / (envelope_data_hash[:effective_num_stories_above_grade]. + envelope_data_hash[:effective_num_stories_below_grade].to_f)
394
394
  area_multiplier = footprint_area / bounding_area
395
395
  edge_multiplier = Math.sqrt(area_multiplier)
396
396
  bar[:length] = bounding_length * edge_multiplier
@@ -408,7 +408,7 @@ module OpenstudioStandards
408
408
 
409
409
  bounding_length = envelope_data_hash[:building_max_xyz][0] - envelope_data_hash[:building_min_xyz][0]
410
410
  bounding_width = envelope_data_hash[:building_max_xyz][1] - envelope_data_hash[:building_min_xyz][1]
411
- footprint_area = envelope_data_hash[:building_floor_area] / envelope_data_hash[:effective_num_stories].to_f
411
+ footprint_area = envelope_data_hash[:building_floor_area] / (envelope_data_hash[:effective_num_stories_above_grade]. + envelope_data_hash[:effective_num_stories_below_grade].to_f)
412
412
 
413
413
  if bounding_length >= bounding_width
414
414
  bar[:length] = bounding_length
@@ -430,7 +430,7 @@ module OpenstudioStandards
430
430
 
431
431
  bounding_length = envelope_data_hash[:building_max_xyz][0] - envelope_data_hash[:building_min_xyz][0]
432
432
  bounding_width = envelope_data_hash[:building_max_xyz][1] - envelope_data_hash[:building_min_xyz][1]
433
- a = envelope_data_hash[:building_floor_area] / envelope_data_hash[:effective_num_stories].to_f
433
+ a = envelope_data_hash[:building_floor_area] / (envelope_data_hash[:effective_num_stories_above_grade]. + envelope_data_hash[:effective_num_stories_below_grade].to_f)
434
434
  p = envelope_data_hash[:building_perimeter]
435
435
 
436
436
  if bounding_length >= bounding_width
@@ -119,12 +119,19 @@ class Standard
119
119
 
120
120
  heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100HeatingAirFlow(full_htg_sens_eff)
121
121
  heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100HeatingAirFlow(full_htg_lat_eff)
122
- heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff)
123
- heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff)
124
122
  heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100CoolingAirFlow(full_cool_sens_eff)
125
123
  heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100CoolingAirFlow(full_cool_lat_eff)
126
- heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff)
127
- heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff)
124
+ if model.version < OpenStudio::VersionString.new('3.8.0')
125
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff)
126
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff)
127
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff)
128
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff)
129
+ else
130
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff) unless part_htg_sens_eff.zero?
131
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff) unless part_htg_lat_eff.zero?
132
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff) unless part_cool_sens_eff.zero?
133
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff) unless part_cool_lat_eff.zero?
134
+ end
128
135
 
129
136
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HeatExchangerSensLat', "For #{heat_exchanger_air_to_air_sensible_and_latent.name}: Set sensible and latent effectiveness calculated by using ERR.")
130
137
  return true
@@ -5173,16 +5173,18 @@ class Standard
5173
5173
  space.surfaces.each do |surface|
5174
5174
  if radiant_type == 'floor'
5175
5175
  if surface.surfaceType == 'Floor'
5176
- if surface.outsideBoundaryCondition == 'Ground'
5176
+ if surface.outsideBoundaryCondition.include? 'Ground'
5177
5177
  surface.setConstruction(radiant_ground_slab_construction)
5178
5178
  elsif surface.outsideBoundaryCondition == 'Outdoors'
5179
5179
  surface.setConstruction(radiant_exterior_slab_construction)
5180
5180
  else # interior floor
5181
5181
  surface.setConstruction(radiant_interior_floor_slab_construction)
5182
5182
 
5183
- # also assign construciton to adjacent surface
5184
- adjacent_surface = surface.adjacentSurface.get
5185
- adjacent_surface.setConstruction(rev_radiant_interior_floor_slab_construction)
5183
+ # also assign construction to adjacent surface
5184
+ if surface.adjacentSurface.is_initialized
5185
+ adjacent_surface = surface.adjacentSurface.get
5186
+ adjacent_surface.setConstruction(rev_radiant_interior_floor_slab_construction)
5187
+ end
5186
5188
  end
5187
5189
  end
5188
5190
  elsif radiant_type == 'ceiling'
@@ -5192,9 +5194,11 @@ class Standard
5192
5194
  else # interior ceiling
5193
5195
  surface.setConstruction(radiant_interior_ceiling_slab_construction)
5194
5196
 
5195
- # also assign construciton to adjacent surface
5196
- adjacent_surface = surface.adjacentSurface.get
5197
- adjacent_surface.setConstruction(rev_radiant_interior_ceiling_slab_construction)
5197
+ # also assign construction to adjacent surface
5198
+ if surface.adjacentSurface.is_initialized
5199
+ adjacent_surface = surface.adjacentSurface.get
5200
+ adjacent_surface.setConstruction(rev_radiant_interior_ceiling_slab_construction)
5201
+ end
5198
5202
  end
5199
5203
  end
5200
5204
  end
@@ -11,12 +11,19 @@ class Standard
11
11
 
12
12
  heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100HeatingAirFlow(full_htg_sens_eff)
13
13
  heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100HeatingAirFlow(full_htg_lat_eff)
14
- heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff)
15
- heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff)
16
14
  heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100CoolingAirFlow(full_cool_sens_eff)
17
15
  heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100CoolingAirFlow(full_cool_lat_eff)
18
- heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff)
19
- heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff)
16
+ if heat_exchanger_air_to_air_sensible_and_latent.model.version < OpenStudio::VersionString.new('3.8.0')
17
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff)
18
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff)
19
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff)
20
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff)
21
+ else
22
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff) unless part_htg_sens_eff.zero?
23
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff) unless part_htg_lat_eff.zero?
24
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff) unless part_cool_sens_eff.zero?
25
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff) unless part_cool_lat_eff.zero?
26
+ end
20
27
 
21
28
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HeatExchangerSensLat', "For #{heat_exchanger_air_to_air_sensible_and_latent.name}: Set sensible and latent effectiveness.")
22
29
 
@@ -808,12 +808,14 @@ class NRELZNEReady2017 < ASHRAE901
808
808
  if erv_type == 'HRV'
809
809
  erv.setSensibleEffectivenessat100HeatingAirFlow(0.865)
810
810
  erv.setLatentEffectivenessat100HeatingAirFlow(0.0)
811
- erv.setSensibleEffectivenessat75HeatingAirFlow(0.887)
812
- erv.setLatentEffectivenessat75HeatingAirFlow(0.0)
813
811
  erv.setSensibleEffectivenessat100CoolingAirFlow(0.865)
814
812
  erv.setLatentEffectivenessat100CoolingAirFlow(0.0)
813
+ erv.setSensibleEffectivenessat75HeatingAirFlow(0.887)
815
814
  erv.setSensibleEffectivenessat75CoolingAirFlow(0.887)
816
- erv.setLatentEffectivenessat75CoolingAirFlow(0.0)
815
+ if erv.model.version < OpenStudio::VersionString.new('3.8.0')
816
+ erv.setLatentEffectivenessat75HeatingAirFlow(0.0)
817
+ erv.setLatentEffectivenessat75CoolingAirFlow(0.0)
818
+ end
817
819
  else
818
820
  erv.setSensibleEffectivenessat100HeatingAirFlow(0.755)
819
821
  erv.setLatentEffectivenessat100HeatingAirFlow(0.564)
@@ -829,11 +831,13 @@ class NRELZNEReady2017 < ASHRAE901
829
831
  erv.setSensibleEffectivenessat100HeatingAirFlow(0.75)
830
832
  erv.setLatentEffectivenessat100HeatingAirFlow(0.0)
831
833
  erv.setSensibleEffectivenessat75HeatingAirFlow(0.79)
832
- erv.setLatentEffectivenessat75HeatingAirFlow(0.0)
833
834
  erv.setSensibleEffectivenessat100CoolingAirFlow(0.75)
834
835
  erv.setLatentEffectivenessat100CoolingAirFlow(0.0)
835
836
  erv.setSensibleEffectivenessat75CoolingAirFlow(0.78)
836
- erv.setLatentEffectivenessat75CoolingAirFlow(0.0)
837
+ if erv.model.version < OpenStudio::VersionString.new('3.8.0')
838
+ erv.setLatentEffectivenessat75HeatingAirFlow(0.0)
839
+ erv.setLatentEffectivenessat75CoolingAirFlow(0.0)
840
+ end
837
841
  else
838
842
  erv.setSensibleEffectivenessat100HeatingAirFlow(0.75)
839
843
  erv.setLatentEffectivenessat100HeatingAirFlow(0.74)
@@ -344,20 +344,20 @@
344
344
  "name": "DEER Metal Framed Window",
345
345
  "intended_surface_type": "ExteriorWindow",
346
346
  "standards_construction_type": "Nonmetal framing (all)",
347
- "insulation_layer": "Simple Glazing",
347
+ "insulation_layer": null,
348
348
  "skylight_framing": null,
349
349
  "materials": [
350
- "Simple Glazing"
350
+ "Simple Glazing U 1.23 SHGC 0.61 VT 0.25"
351
351
  ]
352
352
  },
353
353
  {
354
354
  "name": "DEER Skylight",
355
355
  "intended_surface_type": "ExteriorWindow",
356
356
  "standards_construction_type": "Nonmetal framing (all)",
357
- "insulation_layer": "Simple Glazing",
357
+ "insulation_layer": null,
358
358
  "skylight_framing": null,
359
359
  "materials": [
360
- "Simple Glazing"
360
+ "Simple Glazing U 1.23 SHGC 0.61 VT 0.25"
361
361
  ]
362
362
  },
363
363
  {
@@ -383,12 +383,19 @@ class NECB2011
383
383
  heat_exchanger_air_to_air_sensible_and_latent.setHeatExchangerType(erv_info['HeatExchangerType'])
384
384
  heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100HeatingAirFlow(erv_info['SensibleEffectivenessat100HeatingAirFlow'])
385
385
  heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100HeatingAirFlow(erv_info['LatentEffectivenessat100HeatingAirFlow'])
386
- heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(erv_info['SensibleEffectivenessat75HeatingAirFlow'])
387
- heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(erv_info['LatentEffectivenessat75HeatingAirFlow'])
388
386
  heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100CoolingAirFlow(erv_info['SensibleEffectivenessat100CoolingAirFlow'])
389
387
  heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100CoolingAirFlow(erv_info['LatentEffectivenessat100CoolingAirFlow'])
390
- heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(erv_info['SensibleEffectivenessat75CoolingAirFlow'])
391
- heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(erv_info['LatentEffectivenessat75CoolingAirFlow'])
388
+ if heat_exchanger_air_to_air_sensible_and_latent.model.version < OpenStudio::VersionString.new('3.8.0')
389
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(erv_info['SensibleEffectivenessat75HeatingAirFlow'])
390
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(erv_info['LatentEffectivenessat75HeatingAirFlow'])
391
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(erv_info['SensibleEffectivenessat75CoolingAirFlow'])
392
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(erv_info['LatentEffectivenessat75CoolingAirFlow'])
393
+ else
394
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(erv_info['SensibleEffectivenessat75HeatingAirFlow']) unless erv_info['SensibleEffectivenessat75HeatingAirFlow'].zero?
395
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(erv_info['LatentEffectivenessat75HeatingAirFlow']) unless erv_info['LatentEffectivenessat75HeatingAirFlow'].zero?
396
+ heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(erv_info['SensibleEffectivenessat75CoolingAirFlow']) unless erv_info['SensibleEffectivenessat75CoolingAirFlow'].zero?
397
+ heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(erv_info['LatentEffectivenessat75CoolingAirFlow']) unless erv_info['LatentEffectivenessat75CoolingAirFlow'].zero?
398
+ end
392
399
  heat_exchanger_air_to_air_sensible_and_latent.setSupplyAirOutletTemperatureControl(erv_info['SupplyAirOutletTemperatureControl'])
393
400
  heat_exchanger_air_to_air_sensible_and_latent.setFrostControlType(erv_info['FrostControlType'])
394
401
  heat_exchanger_air_to_air_sensible_and_latent.setEconomizerLockout(erv_info['EconomizerLockout'])
@@ -13,5 +13,5 @@ module OpenstudioStandards
13
13
  end
14
14
  return 'git-not-found-on-this-system'
15
15
  end
16
- VERSION = '0.6.0'.freeze
16
+ VERSION = '0.6.1'.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.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Adams
@@ -39,7 +39,7 @@ authors:
39
39
  autorequire:
40
40
  bindir: bin
41
41
  cert_chain: []
42
- date: 2024-05-10 00:00:00.000000000 Z
42
+ date: 2024-05-17 00:00:00.000000000 Z
43
43
  dependencies:
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: bundler