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 +4 -4
- data/lib/openstudio-standards/create_typical/create_typical.rb +1 -1
- data/lib/openstudio-standards/geometry/create_bar.rb +8 -8
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +11 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +11 -7
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +11 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +9 -5
- data/lib/openstudio-standards/standards/deer/data/deer.constructions.json +4 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +11 -4
- data/lib/openstudio-standards/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36e7f523d2cb10126059ecdf5e1284b63aa700608bdb4a9244d799836bdaf3af
|
4
|
+
data.tar.gz: afb385431a40c8a890e10374ee3512c4e539f2eaeaf73e817b53afcbdeb00e98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 #{
|
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 =
|
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['
|
369
|
-
envelope_data_hash[:building_overhang_proj_factor_s] = building_overhang_area_s / ext_surfaces_hash['
|
370
|
-
envelope_data_hash[:building_overhang_proj_factor_e] = building_overhang_area_e / ext_surfaces_hash['
|
371
|
-
envelope_data_hash[:building_overhang_proj_factor_w] = building_overhang_area_w / ext_surfaces_hash['
|
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[:
|
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[:
|
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[:
|
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
|
-
|
127
|
-
|
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
|
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
|
5184
|
-
|
5185
|
-
|
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
|
5196
|
-
|
5197
|
-
|
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.
|
19
|
-
|
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.
|
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.
|
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":
|
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":
|
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.
|
391
|
-
|
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'])
|
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.
|
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-
|
42
|
+
date: 2024-05-17 00:00:00.000000000 Z
|
43
43
|
dependencies:
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
45
|
name: bundler
|