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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/DEER_ECC_DXEH.json +11 -0
  3. data/data/geometry/DEER_ECC_DXGF.json +11 -0
  4. data/data/geometry/DEER_ECC_DXHP.json +11 -0
  5. data/data/geometry/DEER_ECC_NCEH.json +11 -0
  6. data/data/geometry/DEER_ECC_NCGF.json +11 -0
  7. data/data/geometry/DEER_ECC_PVVE.json +11 -0
  8. data/data/geometry/DEER_ECC_PVVG.json +11 -0
  9. data/data/geometry/DEER_ECC_SVVE.json +11 -0
  10. data/data/geometry/DEER_ECC_SVVG.json +11 -0
  11. data/data/geometry/DEER_ECC_WLHP.json +11 -0
  12. data/data/geometry/DEER_EPr_DXEH.json +22 -0
  13. data/data/geometry/DEER_EPr_DXGF.json +22 -0
  14. data/data/geometry/DEER_EPr_DXHP.json +22 -0
  15. data/data/geometry/DEER_EPr_NCEH.json +22 -0
  16. data/data/geometry/DEER_EPr_NCGF.json +22 -0
  17. data/data/geometry/DEER_EPr_WLHP.json +22 -0
  18. data/data/geometry/DEER_ESe_DXEH.json +22 -0
  19. data/data/geometry/DEER_ESe_DXGF.json +22 -0
  20. data/data/geometry/DEER_ESe_DXHP.json +22 -0
  21. data/data/geometry/DEER_ESe_NCEH.json +22 -0
  22. data/data/geometry/DEER_ESe_NCGF.json +22 -0
  23. data/data/geometry/DEER_ESe_PVVE.json +22 -0
  24. data/data/geometry/DEER_ESe_PVVG.json +22 -0
  25. data/data/geometry/DEER_ESe_SVVE.json +22 -0
  26. data/data/geometry/DEER_ESe_SVVG.json +22 -0
  27. data/data/geometry/DEER_ESe_WLHP.json +22 -0
  28. data/data/geometry/DEER_EUn_DXEH.json +11 -0
  29. data/data/geometry/DEER_EUn_DXGF.json +11 -0
  30. data/data/geometry/DEER_EUn_DXHP.json +11 -0
  31. data/data/geometry/DEER_EUn_NCEH.json +11 -0
  32. data/data/geometry/DEER_EUn_NCGF.json +11 -0
  33. data/data/geometry/DEER_EUn_PVVE.json +11 -0
  34. data/data/geometry/DEER_EUn_PVVG.json +11 -0
  35. data/data/geometry/DEER_EUn_SVVE.json +11 -0
  36. data/data/geometry/DEER_EUn_SVVG.json +11 -0
  37. data/data/geometry/DEER_Hsp_DXEH.json +11 -0
  38. data/data/geometry/DEER_Hsp_DXGF.json +11 -0
  39. data/data/geometry/DEER_Hsp_DXHP.json +11 -0
  40. data/data/geometry/DEER_Hsp_NCEH.json +11 -0
  41. data/data/geometry/DEER_Hsp_NCGF.json +11 -0
  42. data/data/geometry/DEER_Hsp_PVVE.json +11 -0
  43. data/data/geometry/DEER_Hsp_PVVG.json +11 -0
  44. data/data/geometry/DEER_Hsp_SVVE.json +11 -0
  45. data/data/geometry/DEER_Hsp_SVVG.json +11 -0
  46. data/data/geometry/DEER_Htl_DXEH.json +33 -0
  47. data/data/geometry/DEER_Htl_DXGF.json +33 -0
  48. data/data/geometry/DEER_Htl_DXHP.json +33 -0
  49. data/data/geometry/DEER_Htl_NCEH.json +33 -0
  50. data/data/geometry/DEER_Htl_NCGF.json +33 -0
  51. data/data/geometry/DEER_Htl_PVVE.json +33 -0
  52. data/data/geometry/DEER_Htl_PVVG.json +33 -0
  53. data/data/geometry/DEER_Htl_SVVE.json +33 -0
  54. data/data/geometry/DEER_Htl_SVVG.json +33 -0
  55. data/data/geometry/DEER_Htl_WLHP.json +33 -0
  56. data/data/geometry/DEER_Nrs_DXEH.json +11 -0
  57. data/data/geometry/DEER_Nrs_DXGF.json +11 -0
  58. data/data/geometry/DEER_Nrs_DXHP.json +11 -0
  59. data/data/geometry/DEER_Nrs_FPFC.json +11 -0
  60. data/data/geometry/DEER_Nrs_NCEH.json +11 -0
  61. data/data/geometry/DEER_Nrs_PVVE.json +11 -0
  62. data/data/geometry/DEER_Nrs_PVVG.json +11 -0
  63. data/data/geometry/DEER_Nrs_SVVE.json +11 -0
  64. data/data/geometry/DEER_Nrs_SVVG.json +11 -0
  65. data/data/geometry/DEER_RFF_DXEH.json +22 -0
  66. data/data/geometry/DEER_RFF_DXGF.json +22 -0
  67. data/data/geometry/DEER_RFF_DXHP.json +22 -0
  68. data/data/geometry/DEER_RFF_NCEH.json +22 -0
  69. data/data/geometry/DEER_RFF_NCGF.json +22 -0
  70. data/data/geometry/DEER_RSD_DXEH.json +22 -0
  71. data/data/geometry/DEER_RSD_DXGF.json +22 -0
  72. data/data/geometry/DEER_RSD_DXHP.json +22 -0
  73. data/data/geometry/DEER_RSD_NCEH.json +22 -0
  74. data/data/geometry/DEER_RSD_NCGF.json +22 -0
  75. data/data/geometry/DEER_RtL_DXEH.json +11 -0
  76. data/data/geometry/DEER_RtL_DXGF.json +11 -0
  77. data/data/geometry/DEER_RtL_DXHP.json +11 -0
  78. data/data/geometry/DEER_RtL_NCEH.json +11 -0
  79. data/data/geometry/DEER_RtL_NCGF.json +11 -0
  80. data/data/standards/OpenStudio_Standards.xlsx +0 -0
  81. data/data/standards/OpenStudio_Standards_construction_properties.json +2560 -0
  82. data/data/standards/OpenStudio_Standards_construction_sets.json +730 -42
  83. data/data/standards/OpenStudio_Standards_constructions.json +40 -0
  84. data/data/standards/OpenStudio_Standards_entryways.json +44 -0
  85. data/data/standards/OpenStudio_Standards_fans.json +36 -0
  86. data/data/standards/OpenStudio_Standards_materials.json +163 -123
  87. data/data/standards/OpenStudio_Standards_parking.json +36 -0
  88. data/data/standards/OpenStudio_Standards_prototype_inputs.json +9640 -1608
  89. data/data/standards/OpenStudio_Standards_schedules.json +1259 -427
  90. data/data/standards/OpenStudio_Standards_space_types.json +1660 -444
  91. data/data/standards/OpenStudio_Standards_unitary_acs.json +580 -0
  92. data/data/standards/export_OpenStudio_libraries.rb +24 -3
  93. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +116 -58
  94. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +5 -8
  95. data/lib/openstudio-standards/standards/Standards.Model.rb +11 -2
  96. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +258 -0
  97. data/lib/openstudio-standards/utilities/logging.rb +6 -3
  98. data/lib/openstudio-standards/version.rb +1 -1
  99. 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 = nil
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}"
@@ -13,5 +13,5 @@ module OpenstudioStandards
13
13
  end
14
14
  return 'git-not-found-on-this-system'
15
15
  end
16
- VERSION = '0.2.6'.freeze
16
+ VERSION = '0.2.7'.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.2.6
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-10-11 00:00:00.000000000 Z
24
+ date: 2018-11-14 00:00:00.000000000 Z
25
25
  dependencies:
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: minitest-reporters