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 +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
|