openstudio-standards 0.2.6 → 0.2.7
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/data/geometry/DEER_ECC_DXEH.json +11 -0
- data/data/geometry/DEER_ECC_DXGF.json +11 -0
- data/data/geometry/DEER_ECC_DXHP.json +11 -0
- data/data/geometry/DEER_ECC_NCEH.json +11 -0
- data/data/geometry/DEER_ECC_NCGF.json +11 -0
- data/data/geometry/DEER_ECC_PVVE.json +11 -0
- data/data/geometry/DEER_ECC_PVVG.json +11 -0
- data/data/geometry/DEER_ECC_SVVE.json +11 -0
- data/data/geometry/DEER_ECC_SVVG.json +11 -0
- data/data/geometry/DEER_ECC_WLHP.json +11 -0
- data/data/geometry/DEER_EPr_DXEH.json +22 -0
- data/data/geometry/DEER_EPr_DXGF.json +22 -0
- data/data/geometry/DEER_EPr_DXHP.json +22 -0
- data/data/geometry/DEER_EPr_NCEH.json +22 -0
- data/data/geometry/DEER_EPr_NCGF.json +22 -0
- data/data/geometry/DEER_EPr_WLHP.json +22 -0
- data/data/geometry/DEER_ESe_DXEH.json +22 -0
- data/data/geometry/DEER_ESe_DXGF.json +22 -0
- data/data/geometry/DEER_ESe_DXHP.json +22 -0
- data/data/geometry/DEER_ESe_NCEH.json +22 -0
- data/data/geometry/DEER_ESe_NCGF.json +22 -0
- data/data/geometry/DEER_ESe_PVVE.json +22 -0
- data/data/geometry/DEER_ESe_PVVG.json +22 -0
- data/data/geometry/DEER_ESe_SVVE.json +22 -0
- data/data/geometry/DEER_ESe_SVVG.json +22 -0
- data/data/geometry/DEER_ESe_WLHP.json +22 -0
- data/data/geometry/DEER_EUn_DXEH.json +11 -0
- data/data/geometry/DEER_EUn_DXGF.json +11 -0
- data/data/geometry/DEER_EUn_DXHP.json +11 -0
- data/data/geometry/DEER_EUn_NCEH.json +11 -0
- data/data/geometry/DEER_EUn_NCGF.json +11 -0
- data/data/geometry/DEER_EUn_PVVE.json +11 -0
- data/data/geometry/DEER_EUn_PVVG.json +11 -0
- data/data/geometry/DEER_EUn_SVVE.json +11 -0
- data/data/geometry/DEER_EUn_SVVG.json +11 -0
- data/data/geometry/DEER_Hsp_DXEH.json +11 -0
- data/data/geometry/DEER_Hsp_DXGF.json +11 -0
- data/data/geometry/DEER_Hsp_DXHP.json +11 -0
- data/data/geometry/DEER_Hsp_NCEH.json +11 -0
- data/data/geometry/DEER_Hsp_NCGF.json +11 -0
- data/data/geometry/DEER_Hsp_PVVE.json +11 -0
- data/data/geometry/DEER_Hsp_PVVG.json +11 -0
- data/data/geometry/DEER_Hsp_SVVE.json +11 -0
- data/data/geometry/DEER_Hsp_SVVG.json +11 -0
- data/data/geometry/DEER_Htl_DXEH.json +33 -0
- data/data/geometry/DEER_Htl_DXGF.json +33 -0
- data/data/geometry/DEER_Htl_DXHP.json +33 -0
- data/data/geometry/DEER_Htl_NCEH.json +33 -0
- data/data/geometry/DEER_Htl_NCGF.json +33 -0
- data/data/geometry/DEER_Htl_PVVE.json +33 -0
- data/data/geometry/DEER_Htl_PVVG.json +33 -0
- data/data/geometry/DEER_Htl_SVVE.json +33 -0
- data/data/geometry/DEER_Htl_SVVG.json +33 -0
- data/data/geometry/DEER_Htl_WLHP.json +33 -0
- data/data/geometry/DEER_Nrs_DXEH.json +11 -0
- data/data/geometry/DEER_Nrs_DXGF.json +11 -0
- data/data/geometry/DEER_Nrs_DXHP.json +11 -0
- data/data/geometry/DEER_Nrs_FPFC.json +11 -0
- data/data/geometry/DEER_Nrs_NCEH.json +11 -0
- data/data/geometry/DEER_Nrs_PVVE.json +11 -0
- data/data/geometry/DEER_Nrs_PVVG.json +11 -0
- data/data/geometry/DEER_Nrs_SVVE.json +11 -0
- data/data/geometry/DEER_Nrs_SVVG.json +11 -0
- data/data/geometry/DEER_RFF_DXEH.json +22 -0
- data/data/geometry/DEER_RFF_DXGF.json +22 -0
- data/data/geometry/DEER_RFF_DXHP.json +22 -0
- data/data/geometry/DEER_RFF_NCEH.json +22 -0
- data/data/geometry/DEER_RFF_NCGF.json +22 -0
- data/data/geometry/DEER_RSD_DXEH.json +22 -0
- data/data/geometry/DEER_RSD_DXGF.json +22 -0
- data/data/geometry/DEER_RSD_DXHP.json +22 -0
- data/data/geometry/DEER_RSD_NCEH.json +22 -0
- data/data/geometry/DEER_RSD_NCGF.json +22 -0
- data/data/geometry/DEER_RtL_DXEH.json +11 -0
- data/data/geometry/DEER_RtL_DXGF.json +11 -0
- data/data/geometry/DEER_RtL_DXHP.json +11 -0
- data/data/geometry/DEER_RtL_NCEH.json +11 -0
- data/data/geometry/DEER_RtL_NCGF.json +11 -0
- data/data/standards/OpenStudio_Standards.xlsx +0 -0
- data/data/standards/OpenStudio_Standards_construction_properties.json +2560 -0
- data/data/standards/OpenStudio_Standards_construction_sets.json +730 -42
- data/data/standards/OpenStudio_Standards_constructions.json +40 -0
- data/data/standards/OpenStudio_Standards_entryways.json +44 -0
- data/data/standards/OpenStudio_Standards_fans.json +36 -0
- data/data/standards/OpenStudio_Standards_materials.json +163 -123
- data/data/standards/OpenStudio_Standards_parking.json +36 -0
- data/data/standards/OpenStudio_Standards_prototype_inputs.json +9640 -1608
- data/data/standards/OpenStudio_Standards_schedules.json +1259 -427
- data/data/standards/OpenStudio_Standards_space_types.json +1660 -444
- data/data/standards/OpenStudio_Standards_unitary_acs.json +580 -0
- data/data/standards/export_OpenStudio_libraries.rb +24 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +116 -58
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +5 -8
- data/lib/openstudio-standards/standards/Standards.Model.rb +11 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +258 -0
- data/lib/openstudio-standards/utilities/logging.rb +6 -3
- data/lib/openstudio-standards/version.rb +1 -1
- metadata +2 -2
|
@@ -1184,7 +1184,7 @@ class Standard
|
|
|
1184
1184
|
def model_eliminate_outlier_zones(model, array_of_zones, key_to_inspect, tolerance, field_name, units)
|
|
1185
1185
|
# Sort the zones by the desired key
|
|
1186
1186
|
begin
|
|
1187
|
-
array_of_zones = array_of_zones.sort_by {|hsh| hsh[key_to_inspect]}
|
|
1187
|
+
array_of_zones = array_of_zones.sort_by { |hsh| hsh[key_to_inspect] }
|
|
1188
1188
|
rescue ArgumentError => e
|
|
1189
1189
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Unable to sort array_of_zones by #{key_to_inspect} due to #{e.message}, defaulting to order that was passed")
|
|
1190
1190
|
end
|
|
@@ -1204,6 +1204,12 @@ class Standard
|
|
|
1204
1204
|
all_areas << area.round
|
|
1205
1205
|
all_zn_names << zn['zone'].name.get.to_s
|
|
1206
1206
|
end
|
|
1207
|
+
|
|
1208
|
+
if total_area == 0
|
|
1209
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Total area is zero for array_of_zones with key #{key_to_inspect}, unable to calculate area-weighted average.")
|
|
1210
|
+
return false
|
|
1211
|
+
end
|
|
1212
|
+
|
|
1207
1213
|
avg = total / total_area
|
|
1208
1214
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Model', "Values for #{field_name}, tol = #{tolerance} #{units}, area ft2:")
|
|
1209
1215
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Model', "vals #{all_vals.join(', ')}")
|
|
@@ -1211,11 +1217,14 @@ class Standard
|
|
|
1211
1217
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Model', "names #{all_zn_names.join(', ')}")
|
|
1212
1218
|
|
|
1213
1219
|
# Calculate the biggest delta and the index of the biggest delta
|
|
1214
|
-
biggest_delta_i =
|
|
1220
|
+
biggest_delta_i = 0 # array at first item in case delta is 0
|
|
1215
1221
|
biggest_delta = 0.0
|
|
1216
1222
|
worst = nil
|
|
1217
1223
|
array_of_zones.each_with_index do |zn, i|
|
|
1218
1224
|
val = zn[key_to_inspect]
|
|
1225
|
+
if worst.nil? # array at first item in case delta is 0
|
|
1226
|
+
worst = val
|
|
1227
|
+
end
|
|
1219
1228
|
delta = (val - avg).abs
|
|
1220
1229
|
if delta >= biggest_delta
|
|
1221
1230
|
biggest_delta = delta
|
|
@@ -40,6 +40,11 @@ class NRELZNEReady2017 < ASHRAE901
|
|
|
40
40
|
if air_loop_hvac_multizone_vav_system?(air_loop_hvac) && air_loop_hvac_terminal_reheat?(air_loop_hvac)
|
|
41
41
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', 'Applying multizone VAV Reheat system controls.')
|
|
42
42
|
|
|
43
|
+
# Energy Recovery Ventilation
|
|
44
|
+
if air_loop_hvac_energy_recovery_ventilator_required?(air_loop_hvac, climate_zone)
|
|
45
|
+
air_loop_hvac_apply_energy_recovery_ventilator(air_loop_hvac)
|
|
46
|
+
end
|
|
47
|
+
|
|
43
48
|
# economizer controls
|
|
44
49
|
air_loop_hvac_apply_economizer_limits(air_loop_hvac, climate_zone)
|
|
45
50
|
air_loop_hvac_apply_economizer_integration(air_loop_hvac, climate_zone)
|
|
@@ -452,4 +457,257 @@ class NRELZNEReady2017 < ASHRAE901
|
|
|
452
457
|
opt_start_required = true
|
|
453
458
|
return opt_start_required
|
|
454
459
|
end
|
|
460
|
+
|
|
461
|
+
# Check if ERV is required on this airloop.
|
|
462
|
+
#
|
|
463
|
+
# @return [Bool] Returns true if required, false if not.
|
|
464
|
+
def air_loop_hvac_energy_recovery_ventilator_required?(air_loop_hvac, climate_zone)
|
|
465
|
+
|
|
466
|
+
if air_loop_hvac.airLoopHVACOutdoorAirSystem.is_initialized
|
|
467
|
+
oa_system = air_loop_hvac.airLoopHVACOutdoorAirSystem.get
|
|
468
|
+
controller_oa = oa_system.getControllerOutdoorAir
|
|
469
|
+
controller_mv = controller_oa.controllerMechanicalVentilation
|
|
470
|
+
else
|
|
471
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV not applicable because it has no OA intake.")
|
|
472
|
+
return false
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
# Get the AHU design supply air flow rate
|
|
476
|
+
dsn_flow_m3_per_s = nil
|
|
477
|
+
if air_loop_hvac.designSupplyAirFlowRate.is_initialized
|
|
478
|
+
dsn_flow_m3_per_s = air_loop_hvac.designSupplyAirFlowRate.get
|
|
479
|
+
elsif air_loop_hvac.autosizedDesignSupplyAirFlowRate.is_initialized
|
|
480
|
+
dsn_flow_m3_per_s = air_loop_hvac.autosizedDesignSupplyAirFlowRate.get
|
|
481
|
+
else
|
|
482
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} design supply air flow rate is not available, cannot apply efficiency standard.")
|
|
483
|
+
return false
|
|
484
|
+
end
|
|
485
|
+
dsn_flow_cfm = OpenStudio.convert(dsn_flow_m3_per_s, 'm^3/s', 'cfm').get
|
|
486
|
+
|
|
487
|
+
# Get the minimum OA flow rate
|
|
488
|
+
min_oa_flow_m3_per_s = nil
|
|
489
|
+
if controller_oa.minimumOutdoorAirFlowRate.is_initialized
|
|
490
|
+
min_oa_flow_m3_per_s = controller_oa.minimumOutdoorAirFlowRate.get
|
|
491
|
+
elsif controller_oa.autosizedMinimumOutdoorAirFlowRate.is_initialized
|
|
492
|
+
min_oa_flow_m3_per_s = controller_oa.autosizedMinimumOutdoorAirFlowRate.get
|
|
493
|
+
else
|
|
494
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{controller_oa.name}: minimum OA flow rate is not available, cannot apply efficiency standard.")
|
|
495
|
+
return false
|
|
496
|
+
end
|
|
497
|
+
min_oa_flow_cfm = OpenStudio.convert(min_oa_flow_m3_per_s, 'm^3/s', 'cfm').get
|
|
498
|
+
|
|
499
|
+
# Calculate the percent OA at design airflow
|
|
500
|
+
pct_oa = min_oa_flow_m3_per_s / dsn_flow_m3_per_s
|
|
501
|
+
|
|
502
|
+
# Determine the airflow limit
|
|
503
|
+
erv_cfm = air_loop_hvac_energy_recovery_ventilator_flow_limit(air_loop_hvac, climate_zone, pct_oa)
|
|
504
|
+
|
|
505
|
+
# Determine if an ERV is required
|
|
506
|
+
if erv_cfm.nil?
|
|
507
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV not required based on #{(pct_oa * 100).round}% OA flow, design supply air flow of #{dsn_flow_cfm.round}cfm, and climate zone #{climate_zone}.")
|
|
508
|
+
erv_required = false
|
|
509
|
+
elsif dsn_flow_cfm < erv_cfm
|
|
510
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV not required based on #{(pct_oa * 100).round}% OA flow, design supply air flow of #{dsn_flow_cfm.round}cfm, and climate zone #{climate_zone}. Does not exceed minimum flow requirement of #{erv_cfm}cfm.")
|
|
511
|
+
erv_required = false
|
|
512
|
+
else
|
|
513
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV required based on #{(pct_oa * 100).round}% OA flow, design supply air flow of #{dsn_flow_cfm.round}cfm, and climate zone #{climate_zone}. Exceeds minimum flow requirement of #{erv_cfm}cfm.")
|
|
514
|
+
erv_required = true
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
return erv_required
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
# Determine the airflow limits that govern whether or not an ERV is required.
|
|
521
|
+
# Based on climate zone and % OA, plus the number of operating hours the system has.
|
|
522
|
+
# @return [Double] the flow rate above which an ERV is required.
|
|
523
|
+
# if nil, ERV is never required.
|
|
524
|
+
# based on ASHRAE 90.1-2016
|
|
525
|
+
def air_loop_hvac_energy_recovery_ventilator_flow_limit(air_loop_hvac, climate_zone, pct_oa)
|
|
526
|
+
# Calculate the number of system operating hours
|
|
527
|
+
# based on the availability schedule.
|
|
528
|
+
ann_op_hrs = 0.0
|
|
529
|
+
avail_sch = air_loop_hvac.availabilitySchedule
|
|
530
|
+
if avail_sch == air_loop_hvac.model.alwaysOnDiscreteSchedule
|
|
531
|
+
ann_op_hrs = 8760.0
|
|
532
|
+
elsif avail_sch.to_ScheduleRuleset.is_initialized
|
|
533
|
+
avail_sch = avail_sch.to_ScheduleRuleset.get
|
|
534
|
+
ann_op_hrs = schedule_ruleset_annual_hours_above_value(avail_sch, 0.0)
|
|
535
|
+
else
|
|
536
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: could not determine annual operating hours. Assuming less than 8,000 for ERV determination.")
|
|
537
|
+
end
|
|
538
|
+
|
|
539
|
+
if ann_op_hrs < 8000.0
|
|
540
|
+
# Table 6.5.6.1-1, less than 8000 hrs
|
|
541
|
+
case climate_zone
|
|
542
|
+
when 'ASHRAE 169-2006-3B', 'ASHRAE 169-2006-3C', 'ASHRAE 169-2006-4B', 'ASHRAE 169-2006-4C', 'ASHRAE 169-2006-5B'
|
|
543
|
+
if pct_oa < 0.1
|
|
544
|
+
erv_cfm = nil
|
|
545
|
+
elsif pct_oa >= 0.1 && pct_oa < 0.2
|
|
546
|
+
erv_cfm = nil
|
|
547
|
+
elsif pct_oa >= 0.2 && pct_oa < 0.3
|
|
548
|
+
erv_cfm = nil
|
|
549
|
+
elsif pct_oa >= 0.3 && pct_oa < 0.4
|
|
550
|
+
erv_cfm = nil
|
|
551
|
+
elsif pct_oa >= 0.4 && pct_oa < 0.5
|
|
552
|
+
erv_cfm = nil
|
|
553
|
+
elsif pct_oa >= 0.5 && pct_oa < 0.6
|
|
554
|
+
erv_cfm = nil
|
|
555
|
+
elsif pct_oa >= 0.6 && pct_oa < 0.7
|
|
556
|
+
erv_cfm = nil
|
|
557
|
+
elsif pct_oa >= 0.7 && pct_oa < 0.8
|
|
558
|
+
erv_cfm = nil
|
|
559
|
+
elsif pct_oa >= 0.8
|
|
560
|
+
erv_cfm = nil
|
|
561
|
+
end
|
|
562
|
+
when 'ASHRAE 169-2006-1B', 'ASHRAE 169-2006-2B', 'ASHRAE 169-2006-5C'
|
|
563
|
+
if pct_oa < 0.1
|
|
564
|
+
erv_cfm = nil
|
|
565
|
+
elsif pct_oa >= 0.1 && pct_oa < 0.2
|
|
566
|
+
erv_cfm = nil
|
|
567
|
+
elsif pct_oa >= 0.2 && pct_oa < 0.3
|
|
568
|
+
erv_cfm = nil
|
|
569
|
+
elsif pct_oa >= 0.3 && pct_oa < 0.4
|
|
570
|
+
erv_cfm = nil
|
|
571
|
+
elsif pct_oa >= 0.4 && pct_oa < 0.5
|
|
572
|
+
erv_cfm = nil
|
|
573
|
+
elsif pct_oa >= 0.5 && pct_oa < 0.6
|
|
574
|
+
erv_cfm = 26_000
|
|
575
|
+
elsif pct_oa >= 0.6 && pct_oa < 0.7
|
|
576
|
+
erv_cfm = 12_000
|
|
577
|
+
elsif pct_oa >= 0.7 && pct_oa < 0.8
|
|
578
|
+
erv_cfm = 5000
|
|
579
|
+
elsif pct_oa >= 0.8
|
|
580
|
+
erv_cfm = 4000
|
|
581
|
+
end
|
|
582
|
+
when 'ASHRAE 169-2006-6B'
|
|
583
|
+
if pct_oa < 0.1
|
|
584
|
+
erv_cfm = nil
|
|
585
|
+
elsif pct_oa >= 0.1 && pct_oa < 0.2
|
|
586
|
+
erv_cfm = 28_000
|
|
587
|
+
elsif pct_oa >= 0.2 && pct_oa < 0.3
|
|
588
|
+
erv_cfm = 26_500
|
|
589
|
+
elsif pct_oa >= 0.3 && pct_oa < 0.4
|
|
590
|
+
erv_cfm = 11_000
|
|
591
|
+
elsif pct_oa >= 0.4 && pct_oa < 0.5
|
|
592
|
+
erv_cfm = 5500
|
|
593
|
+
elsif pct_oa >= 0.5 && pct_oa < 0.6
|
|
594
|
+
erv_cfm = 4500
|
|
595
|
+
elsif pct_oa >= 0.6 && pct_oa < 0.7
|
|
596
|
+
erv_cfm = 3500
|
|
597
|
+
elsif pct_oa >= 0.7 && pct_oa < 0.8
|
|
598
|
+
erv_cfm = 2500
|
|
599
|
+
elsif pct_oa >= 0.8
|
|
600
|
+
erv_cfm = 1500
|
|
601
|
+
end
|
|
602
|
+
when 'ASHRAE 169-2006-1A', 'ASHRAE 169-2006-2A', 'ASHRAE 169-2006-3A', 'ASHRAE 169-2006-4A', 'ASHRAE 169-2006-5A', 'ASHRAE 169-2006-6A'
|
|
603
|
+
if pct_oa < 0.1
|
|
604
|
+
erv_cfm = nil
|
|
605
|
+
elsif pct_oa >= 0.1 && pct_oa < 0.2
|
|
606
|
+
erv_cfm = 26_000
|
|
607
|
+
elsif pct_oa >= 0.2 && pct_oa < 0.3
|
|
608
|
+
erv_cfm = 16_000
|
|
609
|
+
elsif pct_oa >= 0.3 && pct_oa < 0.4
|
|
610
|
+
erv_cfm = 5500
|
|
611
|
+
elsif pct_oa >= 0.4 && pct_oa < 0.5
|
|
612
|
+
erv_cfm = 4500
|
|
613
|
+
elsif pct_oa >= 0.5 && pct_oa < 0.6
|
|
614
|
+
erv_cfm = 3500
|
|
615
|
+
elsif pct_oa >= 0.6 && pct_oa < 0.7
|
|
616
|
+
erv_cfm = 2000
|
|
617
|
+
elsif pct_oa >= 0.7 && pct_oa < 0.8
|
|
618
|
+
erv_cfm = 1000
|
|
619
|
+
elsif pct_oa >= 0.8
|
|
620
|
+
erv_cfm = 120
|
|
621
|
+
end
|
|
622
|
+
when 'ASHRAE 169-2006-7A', 'ASHRAE 169-2006-7B', 'ASHRAE 169-2006-8A', 'ASHRAE 169-2006-8B'
|
|
623
|
+
if pct_oa < 0.1
|
|
624
|
+
erv_cfm = nil
|
|
625
|
+
elsif pct_oa >= 0.1 && pct_oa < 0.2
|
|
626
|
+
erv_cfm = 4500
|
|
627
|
+
elsif pct_oa >= 0.2 && pct_oa < 0.3
|
|
628
|
+
erv_cfm = 4000
|
|
629
|
+
elsif pct_oa >= 0.3 && pct_oa < 0.4
|
|
630
|
+
erv_cfm = 2500
|
|
631
|
+
elsif pct_oa >= 0.4 && pct_oa < 0.5
|
|
632
|
+
erv_cfm = 1000
|
|
633
|
+
elsif pct_oa >= 0.5 && pct_oa < 0.6
|
|
634
|
+
erv_cfm = 140
|
|
635
|
+
elsif pct_oa >= 0.6 && pct_oa < 0.7
|
|
636
|
+
erv_cfm = 120
|
|
637
|
+
elsif pct_oa >= 0.7 && pct_oa < 0.8
|
|
638
|
+
erv_cfm = 100
|
|
639
|
+
elsif pct_oa >= 0.8
|
|
640
|
+
erv_cfm = 80
|
|
641
|
+
end
|
|
642
|
+
end
|
|
643
|
+
else
|
|
644
|
+
# Table 6.5.6.1-2, above 8000 hrs
|
|
645
|
+
case climate_zone
|
|
646
|
+
when 'ASHRAE 169-2006-3C'
|
|
647
|
+
erv_cfm = nil
|
|
648
|
+
when 'ASHRAE 169-2006-1B', 'ASHRAE 169-2006-2B', 'ASHRAE 169-2006-3B', 'ASHRAE 169-2006-4C', 'ASHRAE 169-2006-5C'
|
|
649
|
+
if pct_oa < 0.1
|
|
650
|
+
erv_cfm = nil
|
|
651
|
+
elsif pct_oa >= 0.1 && pct_oa < 0.2
|
|
652
|
+
erv_cfm = nil
|
|
653
|
+
elsif pct_oa >= 0.2 && pct_oa < 0.3
|
|
654
|
+
erv_cfm = 19_500
|
|
655
|
+
elsif pct_oa >= 0.3 && pct_oa < 0.4
|
|
656
|
+
erv_cfm = 9000
|
|
657
|
+
elsif pct_oa >= 0.4 && pct_oa < 0.5
|
|
658
|
+
erv_cfm = 5000
|
|
659
|
+
elsif pct_oa >= 0.5 && pct_oa < 0.6
|
|
660
|
+
erv_cfm = 4000
|
|
661
|
+
elsif pct_oa >= 0.6 && pct_oa < 0.7
|
|
662
|
+
erv_cfm = 3000
|
|
663
|
+
elsif pct_oa >= 0.7 && pct_oa < 0.8
|
|
664
|
+
erv_cfm = 1500
|
|
665
|
+
elsif pct_oa >= 0.8
|
|
666
|
+
erv_cfm = 120
|
|
667
|
+
end
|
|
668
|
+
when 'ASHRAE 169-2006-1A', 'ASHRAE 169-2006-2A', 'ASHRAE 169-2006-3A', 'ASHRAE 169-2006-4B', 'ASHRAE 169-2006-5B'
|
|
669
|
+
if pct_oa < 0.1
|
|
670
|
+
erv_cfm = nil
|
|
671
|
+
elsif pct_oa >= 0.1 && pct_oa < 0.2
|
|
672
|
+
erv_cfm = 2500
|
|
673
|
+
elsif pct_oa >= 0.2 && pct_oa < 0.3
|
|
674
|
+
erv_cfm = 2000
|
|
675
|
+
elsif pct_oa >= 0.3 && pct_oa < 0.4
|
|
676
|
+
erv_cfm = 1000
|
|
677
|
+
elsif pct_oa >= 0.4 && pct_oa < 0.5
|
|
678
|
+
erv_cfm = 500
|
|
679
|
+
elsif pct_oa >= 0.5 && pct_oa < 0.6
|
|
680
|
+
erv_cfm = 140
|
|
681
|
+
elsif pct_oa >= 0.6 && pct_oa < 0.7
|
|
682
|
+
erv_cfm = 120
|
|
683
|
+
elsif pct_oa >= 0.7 && pct_oa < 0.8
|
|
684
|
+
erv_cfm = 100
|
|
685
|
+
elsif pct_oa >= 0.8
|
|
686
|
+
erv_cfm = 80
|
|
687
|
+
end
|
|
688
|
+
when 'ASHRAE 169-2006-4A', 'ASHRAE 169-2006-5A', 'ASHRAE 169-2006-6A', 'ASHRAE 169-2006-6B', 'ASHRAE 169-2006-7A', 'ASHRAE 169-2006-7B', 'ASHRAE 169-2006-8A', 'ASHRAE 169-2006-8B'
|
|
689
|
+
if pct_oa < 0.1
|
|
690
|
+
erv_cfm = nil
|
|
691
|
+
elsif pct_oa >= 0.1 && pct_oa < 0.2
|
|
692
|
+
erv_cfm = 200
|
|
693
|
+
elsif pct_oa >= 0.2 && pct_oa < 0.3
|
|
694
|
+
erv_cfm = 130
|
|
695
|
+
elsif pct_oa >= 0.3 && pct_oa < 0.4
|
|
696
|
+
erv_cfm = 100
|
|
697
|
+
elsif pct_oa >= 0.4 && pct_oa < 0.5
|
|
698
|
+
erv_cfm = 80
|
|
699
|
+
elsif pct_oa >= 0.5 && pct_oa < 0.6
|
|
700
|
+
erv_cfm = 70
|
|
701
|
+
elsif pct_oa >= 0.6 && pct_oa < 0.7
|
|
702
|
+
erv_cfm = 60
|
|
703
|
+
elsif pct_oa >= 0.7 && pct_oa < 0.8
|
|
704
|
+
erv_cfm = 50
|
|
705
|
+
elsif pct_oa >= 0.8
|
|
706
|
+
erv_cfm = 40
|
|
707
|
+
end
|
|
708
|
+
end
|
|
709
|
+
end
|
|
710
|
+
|
|
711
|
+
return erv_cfm
|
|
712
|
+
end
|
|
455
713
|
end
|
|
@@ -19,7 +19,8 @@ def log_messages_to_runner(runner, debug = false)
|
|
|
19
19
|
msg.logMessage.include?('UseWeatherFile') || # 'UseWeatherFile' is not yet a supported option for YearDescription
|
|
20
20
|
msg.logMessage.include?('Successive data points') || # Successive data points (2004-Jan-31 to 2001-Feb-01, ending on line 753) are greater than 1 day apart in EPW file
|
|
21
21
|
msg.logMessage.include?('has multiple parents') || # Bogus errors about curves having multiple parents
|
|
22
|
-
msg.logMessage.include?('does not have an Output') # Warning from EMS translation
|
|
22
|
+
msg.logMessage.include?('does not have an Output') || # Warning from EMS translation
|
|
23
|
+
msg.logMessage.include?('Prior to OpenStudio 2.6.2, this field was returning a double, it now returns an Optional double') # Warning about OS API change
|
|
23
24
|
|
|
24
25
|
# Report the message in the correct way
|
|
25
26
|
if msg.logLevel == OpenStudio::Info
|
|
@@ -54,7 +55,8 @@ def log_messages_to_file(file_path, debug = false)
|
|
|
54
55
|
msg.logMessage.include?('UseWeatherFile') || # 'UseWeatherFile' is not yet a supported option for YearDescription
|
|
55
56
|
msg.logMessage.include?('Successive data points') || # Successive data points (2004-Jan-31 to 2001-Feb-01, ending on line 753) are greater than 1 day apart in EPW file
|
|
56
57
|
msg.logMessage.include?('has multiple parents') || # Bogus errors about curves having multiple parents
|
|
57
|
-
msg.logMessage.include?('does not have an Output') # Warning from EMS translation
|
|
58
|
+
msg.logMessage.include?('does not have an Output') || # Warning from EMS translation
|
|
59
|
+
msg.logMessage.include?('Prior to OpenStudio 2.6.2, this field was returning a double, it now returns an Optional double') # Warning about OS API change
|
|
58
60
|
|
|
59
61
|
# Report the message in the correct way
|
|
60
62
|
if msg.logLevel == OpenStudio::Info
|
|
@@ -95,7 +97,8 @@ def get_logs(log_type = OpenStudio::Error)
|
|
|
95
97
|
msg.logMessage.include?('UseWeatherFile') || # 'UseWeatherFile' is not yet a supported option for YearDescription
|
|
96
98
|
msg.logMessage.include?('Successive data points') || # Successive data points (2004-Jan-31 to 2001-Feb-01, ending on line 753) are greater than 1 day apart in EPW file
|
|
97
99
|
msg.logMessage.include?('has multiple parents') || # Bogus errors about curves having multiple parents
|
|
98
|
-
msg.logMessage.include?('does not have an Output') # Warning from EMS translation
|
|
100
|
+
msg.logMessage.include?('does not have an Output') || # Warning from EMS translation
|
|
101
|
+
msg.logMessage.include?('Prior to OpenStudio 2.6.2, this field was returning a double, it now returns an Optional double') # Warning about OS API change
|
|
99
102
|
# Only fail on the errors
|
|
100
103
|
if msg.logLevel == log_type
|
|
101
104
|
errors << "[#{msg.logChannel}] #{msg.logMessage}"
|
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.
|
|
4
|
+
version: 0.2.7
|
|
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-
|
|
24
|
+
date: 2018-11-14 00:00:00.000000000 Z
|
|
25
25
|
dependencies:
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: minitest-reporters
|