openstudio-standards 0.2.6 → 0.2.7

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