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