openstudio-standards 0.6.0 → 0.6.1

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