openstudio-standards 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards.xlsx +0 -0
  3. data/data/standards/OpenStudio_Standards_boilers.json +62 -4
  4. data/data/standards/OpenStudio_Standards_chillers.json +778 -68
  5. data/data/standards/OpenStudio_Standards_construction_sets.json +52 -93
  6. data/data/standards/OpenStudio_Standards_curve_biquadratics.json +36 -36
  7. data/data/standards/OpenStudio_Standards_curve_quadratics.json +3 -3
  8. data/data/standards/OpenStudio_Standards_heat_pumps.json +840 -0
  9. data/data/standards/OpenStudio_Standards_heat_pumps_heating.json +352 -0
  10. data/data/standards/OpenStudio_Standards_heat_rejection.json +48 -0
  11. data/data/standards/OpenStudio_Standards_motors.json +270 -0
  12. data/data/standards/OpenStudio_Standards_space_types.json +10390 -2824
  13. data/data/standards/OpenStudio_Standards_unitary_acs.json +794 -18
  14. data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.ddy +538 -0
  15. data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.epw +8768 -0
  16. data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.stat +493 -0
  17. data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.ddy +536 -0
  18. data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.epw +8768 -0
  19. data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.stat +554 -0
  20. data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.ddy +536 -0
  21. data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.epw +8768 -0
  22. data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.stat +554 -0
  23. data/data/weather/envelope_info.csv +6 -0
  24. data/lib/openstudio-standards.rb +10 -11
  25. data/lib/openstudio-standards/btap/compliance.rb +251 -969
  26. data/lib/openstudio-standards/btap/envelope.rb +1 -1
  27. data/lib/openstudio-standards/btap/fileio.rb +37 -5
  28. data/lib/openstudio-standards/btap/geometry.rb +27 -17
  29. data/lib/openstudio-standards/btap/hvac.rb +80 -27
  30. data/lib/openstudio-standards/hvac_sizing/{HVACSizing.CoilHeatingDXMultiSpeed.rb → Siz.CoilHeatingDXMultiSpeed.rb} +0 -0
  31. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +30 -4
  32. data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerTwoSpeed.rb +61 -5
  33. data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerVariableSpeed.rb +37 -7
  34. data/lib/openstudio-standards/hvac_sizing/Siz.DistrictCooling.rb +27 -0
  35. data/lib/openstudio-standards/hvac_sizing/Siz.DistrictHeating.rb +27 -0
  36. data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsConstantSpeed.rb +55 -0
  37. data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsVariableSpeed.rb +55 -0
  38. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +51 -9
  39. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +99 -17
  40. data/lib/openstudio-standards/hvac_sizing/Siz.PumpConstantSpeed.rb +1 -1
  41. data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +29 -6
  42. data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +16 -0
  43. data/lib/openstudio-standards/prototypes/Prototype.AirTerminalSingleDuctVAVReheat.rb +43 -48
  44. data/lib/openstudio-standards/prototypes/Prototype.ControllerWaterCoil.rb +5 -9
  45. data/lib/openstudio-standards/prototypes/Prototype.Fan.rb +68 -0
  46. data/lib/openstudio-standards/prototypes/Prototype.FanConstantVolume.rb +39 -43
  47. data/lib/openstudio-standards/prototypes/Prototype.FanOnOff.rb +49 -51
  48. data/lib/openstudio-standards/prototypes/Prototype.FanVariableVolume.rb +55 -61
  49. data/lib/openstudio-standards/prototypes/Prototype.FanZoneExhaust.rb +8 -10
  50. data/lib/openstudio-standards/prototypes/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +15 -20
  51. data/lib/openstudio-standards/prototypes/Prototype.Model.hvac.rb +330 -322
  52. data/lib/openstudio-standards/prototypes/Prototype.Model.rb +501 -446
  53. data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +221 -230
  54. data/lib/openstudio-standards/prototypes/Prototype.add_objects.rb +0 -2
  55. data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +130 -137
  56. data/lib/openstudio-standards/prototypes/Prototype.high_rise_apartment.rb +374 -291
  57. data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +146 -193
  58. data/lib/openstudio-standards/prototypes/Prototype.hvac_systems.rb +1315 -1113
  59. data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +65 -88
  60. data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +101 -156
  61. data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +46 -96
  62. data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +113 -123
  63. data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +356 -345
  64. data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +48 -103
  65. data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +115 -123
  66. data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +30 -39
  67. data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +32 -45
  68. data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +98 -258
  69. data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +429 -474
  70. data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +28 -36
  71. data/lib/openstudio-standards/prototypes/Prototype.strip_model.rb +7 -7
  72. data/lib/openstudio-standards/prototypes/Prototype.utilities.rb +172 -146
  73. data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +46 -53
  74. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +885 -707
  75. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +48 -57
  76. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +24 -31
  77. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +80 -93
  78. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +69 -0
  79. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +60 -72
  80. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +104 -108
  81. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +190 -198
  82. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +134 -146
  83. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +56 -60
  84. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +151 -161
  85. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +30 -34
  86. data/lib/openstudio-standards/standards/Standards.Construction.rb +116 -132
  87. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +138 -0
  88. data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +11 -0
  89. data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +11 -0
  90. data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +16 -0
  91. data/lib/openstudio-standards/standards/Standards.Fan.rb +190 -236
  92. data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -2
  93. data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -2
  94. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +168 -14
  95. data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -2
  96. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +33 -0
  97. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +83 -0
  98. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +22 -0
  99. data/lib/openstudio-standards/standards/Standards.Model.rb +2385 -1622
  100. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +83 -35
  101. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +805 -395
  102. data/lib/openstudio-standards/standards/Standards.Pump.rb +139 -119
  103. data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -2
  104. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +16 -15
  105. data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +35 -0
  106. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +7 -13
  107. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +144 -59
  108. data/lib/openstudio-standards/standards/Standards.Space.rb +1509 -1326
  109. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +254 -262
  110. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +105 -105
  111. data/lib/openstudio-standards/standards/Standards.Surface.rb +27 -31
  112. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +882 -157
  113. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +179 -69
  114. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +75 -0
  115. data/lib/openstudio-standards/utilities/logging.rb +31 -38
  116. data/lib/openstudio-standards/utilities/simulation.rb +118 -82
  117. data/lib/openstudio-standards/version.rb +1 -1
  118. data/lib/openstudio-standards/weather/Weather.Model.rb +382 -390
  119. data/lib/openstudio-standards/weather/Weather.stat_file.rb +159 -78
  120. metadata +59 -6
@@ -1,137 +1,127 @@
1
1
 
2
2
  # Extend the class to add Medium Office specific stuff
3
3
  class OpenStudio::Model::Model
4
-
5
- def define_space_type_map(building_type, building_vintage, climate_zone)
4
+ def define_space_type_map(building_type, template, climate_zone)
6
5
  space_type_map = nil
7
- case building_vintage
6
+ case template
8
7
  when 'NECB 2011'
9
- space_type_map ={
10
- "Electrical/Mechanical" => ["Basement"],
11
- "Corr. >= 2.4m wide" => ["Corridor_Flr_1", "Corridor_Flr_2", "Corridor_Flr_5", "Corridor_NW_Flr_3", "Corridor_NW_Flr_4", "Corridor_SE_Flr_3", "Corridor_SE_Flr_4"],
12
- "Dining - bar lounge/leisure" => ["Dining_Flr_5"],
13
- "Hospital - emergency" => ["ER_Exam1_Mult4_Flr_1", "ER_Exam3_Mult4_Flr_1", "ER_Trauma1_Flr_1", "ER_Trauma2_Flr_1", "ER_Triage_Mult4_Flr_1"],
14
- "Hospital - nurses' station" => ["ER_NurseStn_Lobby_Flr_1", "ICU_NurseStn_Lobby_Flr_2", "NurseStn_Lobby_Flr_3", "NurseStn_Lobby_Flr_4", "NurseStn_Lobby_Flr_5", "OR_NurseStn_Lobby_Flr_2"],
15
- "Hospital - patient room" => ["IC_PatRoom1_Mult5_Flr_2", "IC_PatRoom2_Flr_2", "IC_PatRoom3_Mult6_Flr_2", "PatRoom1_Mult10_Flr_3", "PatRoom1_Mult10_Flr_4", "PatRoom2_Flr_3", "PatRoom2_Flr_4", "PatRoom3_Mult10_Flr_3", "PatRoom3_Mult10_Flr_4", "PatRoom4_Flr_3", "PatRoom4_Flr_4", "PatRoom5_Mult10_Flr_3", "PatRoom5_Mult10_Flr_4", "PatRoom6_Flr_3", "PatRoom6_Flr_4", "PatRoom7_Mult10_Flr_3", "PatRoom7_Mult10_Flr_4", "PatRoom8_Flr_3", "PatRoom8_Flr_4"],
16
- "Hospital - recovery" => ["ICU_Flr_2"],
17
- "Food preparation" => ["Kitchen_Flr_5"],
18
- "Lab - research" => ["Lab_Flr_3", "Lab_Flr_4"],
19
- "Office - enclosed" => ["Lobby_Records_Flr_1", "Office1_Flr_5", "Office1_Mult4_Flr_1", "Office2_Mult5_Flr_5", "Office3_Flr_5", "Office4_Mult6_Flr_5"],
20
- "Hospital - operating room" => ["OR1_Flr_2", "OR2_Mult5_Flr_2", "OR3_Flr_2", "OR4_Flr_2"],
21
- "Hospital - physical therapy" => ["PhysTherapy_Flr_3"],
22
- "Hospital - radiology/imaging" => ["Radiology_Flr_4"]
8
+ sch = 'B'
9
+ space_type_map = {
10
+ "Electrical/Mechanical-sch-#{sch}" => ['Basement'],
11
+ "Hospital corr. >= 2.4m-sch-#{sch}" => ['Corridor_Flr_1', 'Corridor_Flr_2', 'Corridor_Flr_5', 'Corridor_NW_Flr_3', 'Corridor_NW_Flr_4', 'Corridor_SE_Flr_3', 'Corridor_SE_Flr_4'],
12
+ 'Dining - bar lounge/leisure' => ['Dining_Flr_5'],
13
+ 'Hospital - emergency' => ['ER_Exam1_Mult4_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Trauma2_Flr_1', 'ER_Triage_Mult4_Flr_1'],
14
+ "Hospital - nurses' station" => ['ER_NurseStn_Lobby_Flr_1', 'ICU_NurseStn_Lobby_Flr_2', 'NurseStn_Lobby_Flr_3', 'NurseStn_Lobby_Flr_4', 'NurseStn_Lobby_Flr_5', 'OR_NurseStn_Lobby_Flr_2'],
15
+ 'Hospital - patient room' => ['IC_PatRoom1_Mult5_Flr_2', 'IC_PatRoom2_Flr_2', 'IC_PatRoom3_Mult6_Flr_2', 'PatRoom1_Mult10_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_3', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_3', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_3', 'PatRoom4_Flr_4', 'PatRoom5_Mult10_Flr_3', 'PatRoom5_Mult10_Flr_4', 'PatRoom6_Flr_3', 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_3', 'PatRoom7_Mult10_Flr_4', 'PatRoom8_Flr_3', 'PatRoom8_Flr_4'],
16
+ 'Hospital - recovery' => ['ICU_Flr_2'],
17
+ 'Food preparation' => ['Kitchen_Flr_5'],
18
+ 'Lab - research' => ['Lab_Flr_3', 'Lab_Flr_4'],
19
+ 'Office - enclosed' => ['Lobby_Records_Flr_1', 'Office1_Flr_5', 'Office1_Mult4_Flr_1', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5'],
20
+ 'Hospital - operating room' => ['OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2'],
21
+ 'Hospital - physical therapy' => ['PhysTherapy_Flr_3'],
22
+ 'Hospital - radiology/imaging' => ['Radiology_Flr_4']
23
23
  }
24
24
 
25
25
  else
26
26
  space_type_map = {
27
- # 'Basement', 'ER_Exam1_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma2_Flr_1', 'ER_Triage_Mult4_Flr_1', 'Office1_Mult4_Flr_1', 'Lobby_Records_Flr_1', 'Corridor_Flr_1', 'ER_NurseStn_Lobby_Flr_1', 'OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2', 'IC_PatRoom1_Mult5_Flr_2', 'IC_PatRoom2_Flr_2', 'IC_PatRoom3_Mult6_Flr_2', 'ICU_Flr_2', 'ICU_NurseStn_Lobby_Flr_2', 'Corridor_Flr_2', 'OR_NurseStn_Lobby_Flr_2', 'PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PhysTherapy_Flr_3', 'PatRoom6_Flr_3', 'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3', 'NurseStn_Lobby_Flr_3', 'Lab_Flr_3', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4', 'PatRoom5_Mult10_Flr_4', 'Radiology_Flr_4', 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4', 'PatRoom8_Flr_4', 'NurseStn_Lobby_Flr_4', 'Lab_Flr_4', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4', 'Dining_Flr_5', 'NurseStn_Lobby_Flr_5', 'Kitchen_Flr_5', 'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5', 'Corridor_Flr_5'
28
- 'Corridor' => ['Corridor_Flr_1', 'Corridor_Flr_2', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4', 'Corridor_Flr_5'],
29
- 'Dining' => ['Dining_Flr_5', ],
30
- 'ER_Exam' => ['ER_Exam1_Mult4_Flr_1', 'ER_Exam3_Mult4_Flr_1', ],
31
- 'ER_NurseStn' => ['ER_NurseStn_Lobby_Flr_1', ],
32
- 'ER_Trauma' => ['ER_Trauma1_Flr_1', 'ER_Trauma2_Flr_1', ],
33
- 'ER_Triage' => ['ER_Triage_Mult4_Flr_1', ],
34
- 'ICU_NurseStn' => ['ICU_NurseStn_Lobby_Flr_2', ],
35
- 'ICU_Open' => ['ICU_Flr_2', ],
36
- 'ICU_PatRm' => ['IC_PatRoom1_Mult5_Flr_2', 'IC_PatRoom2_Flr_2', 'IC_PatRoom3_Mult6_Flr_2', ],
37
- 'Kitchen' => ['Kitchen_Flr_5', ],
38
- 'Lab' => ['Lab_Flr_3', 'Lab_Flr_4', ],
39
- 'Lobby' => ['Lobby_Records_Flr_1', ],
40
- 'NurseStn' => ['OR_NurseStn_Lobby_Flr_2', 'NurseStn_Lobby_Flr_3', 'NurseStn_Lobby_Flr_4', 'NurseStn_Lobby_Flr_5', ],
41
- 'OR' => ['OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2', ],
42
- 'Office' => ['Office1_Mult4_Flr_1', 'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5', ],
43
- 'Basement' => ['Basement',], # 'PatCorridor' => [],
44
- 'PatRoom' => ['PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PatRoom6_Flr_3',
45
- 'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4', 'PatRoom5_Mult10_Flr_4',
46
- 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4', 'PatRoom8_Flr_4', ],
47
- 'PhysTherapy' => ['PhysTherapy_Flr_3', ],
48
- 'Radiology' => ['Radiology_Flr_4', ] # total number of zones: 55 - equals to the IDF
49
- }
27
+ # 'Basement', 'ER_Exam1_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma2_Flr_1',
28
+ # 'ER_Triage_Mult4_Flr_1', 'Office1_Mult4_Flr_1', 'Lobby_Records_Flr_1', 'Corridor_Flr_1',
29
+ # 'ER_NurseStn_Lobby_Flr_1', 'OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2',
30
+ # 'IC_PatRoom1_Mult5_Flr_2', 'IC_PatRoom2_Flr_2', 'IC_PatRoom3_Mult6_Flr_2', 'ICU_Flr_2',
31
+ # 'ICU_NurseStn_Lobby_Flr_2', 'Corridor_Flr_2', 'OR_NurseStn_Lobby_Flr_2', 'PatRoom1_Mult10_Flr_3',
32
+ # 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3',
33
+ # 'PhysTherapy_Flr_3', 'PatRoom6_Flr_3', 'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3',
34
+ # 'NurseStn_Lobby_Flr_3', 'Lab_Flr_3', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3',
35
+ # 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4',
36
+ # 'PatRoom5_Mult10_Flr_4', 'Radiology_Flr_4', 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4',
37
+ # 'PatRoom8_Flr_4', 'NurseStn_Lobby_Flr_4', 'Lab_Flr_4', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4',
38
+ # 'Dining_Flr_5', 'NurseStn_Lobby_Flr_5', 'Kitchen_Flr_5', 'Office1_Flr_5', 'Office2_Mult5_Flr_5',
39
+ # 'Office3_Flr_5', 'Office4_Mult6_Flr_5', 'Corridor_Flr_5'
40
+ 'Corridor' => ['Corridor_Flr_1', 'Corridor_Flr_2', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4', 'Corridor_Flr_5'],
41
+ 'Dining' => ['Dining_Flr_5'],
42
+ 'ER_Exam' => ['ER_Exam1_Mult4_Flr_1', 'ER_Exam3_Mult4_Flr_1'],
43
+ 'ER_NurseStn' => ['ER_NurseStn_Lobby_Flr_1'],
44
+ 'ER_Trauma' => ['ER_Trauma1_Flr_1', 'ER_Trauma2_Flr_1'],
45
+ 'ER_Triage' => ['ER_Triage_Mult4_Flr_1'],
46
+ 'ICU_NurseStn' => ['ICU_NurseStn_Lobby_Flr_2'],
47
+ 'ICU_Open' => ['ICU_Flr_2'],
48
+ 'ICU_PatRm' => ['IC_PatRoom1_Mult5_Flr_2', 'IC_PatRoom2_Flr_2', 'IC_PatRoom3_Mult6_Flr_2'],
49
+ 'Kitchen' => ['Kitchen_Flr_5'],
50
+ 'Lab' => ['Lab_Flr_3', 'Lab_Flr_4'],
51
+ 'Lobby' => ['Lobby_Records_Flr_1'],
52
+ 'NurseStn' => ['OR_NurseStn_Lobby_Flr_2', 'NurseStn_Lobby_Flr_3', 'NurseStn_Lobby_Flr_4', 'NurseStn_Lobby_Flr_5'],
53
+ 'OR' => ['OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2'],
54
+ 'Office' => ['Office1_Mult4_Flr_1', 'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5'],
55
+ 'Basement' => ['Basement'], # 'PatCorridor' => [],
56
+ 'PatRoom' => ['PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PatRoom6_Flr_3', 'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4', 'PatRoom5_Mult10_Flr_4', 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4', 'PatRoom8_Flr_4'],
57
+ 'PhysTherapy' => ['PhysTherapy_Flr_3'],
58
+ 'Radiology' => ['Radiology_Flr_4'] # total number of zones: 55 - equals to the IDF
59
+ }
50
60
  end
51
61
  return space_type_map
52
62
  end
53
63
 
54
- def define_hvac_system_map(building_type, building_vintage, climate_zone)
55
-
56
- case building_vintage
57
- when '90.1-2010', '90.1-2013'
58
- exhaust_flow = 7200
59
- when '90.1-2004', '90.1-2007'
60
- exhaust_flow = 8000
61
- when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
62
- exhaust_flow = 3710
63
- exhaust_flow_dining = 1589
64
+ def define_hvac_system_map(building_type, template, climate_zone)
65
+ case template
66
+ when '90.1-2010', '90.1-2013'
67
+ exhaust_flow = 7200
68
+ when '90.1-2004', '90.1-2007'
69
+ exhaust_flow = 8000
70
+ when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
71
+ exhaust_flow = 3710
72
+ exhaust_flow_dining = 1589
64
73
  end
65
74
 
66
- case building_vintage
67
- when '90.1-2010', '90.1-2013','90.1-2004', '90.1-2007'
75
+ case template
76
+ when '90.1-2010', '90.1-2013', '90.1-2004', '90.1-2007'
68
77
  system_to_space_map = [
69
78
  {
70
79
  'type' => 'VAV',
71
80
  'name' => 'VAV_1',
72
- 'space_names' => [
73
- 'Basement', 'Office1_Mult4_Flr_1', 'Lobby_Records_Flr_1', 'Corridor_Flr_1', 'ER_NurseStn_Lobby_Flr_1',
74
- 'ICU_NurseStn_Lobby_Flr_2', 'Corridor_Flr_2', 'OR_NurseStn_Lobby_Flr_2'
75
- ]
81
+ 'space_names' => ['Basement', 'Office1_Mult4_Flr_1', 'Lobby_Records_Flr_1', 'Corridor_Flr_1', 'ER_NurseStn_Lobby_Flr_1', 'ICU_NurseStn_Lobby_Flr_2', 'Corridor_Flr_2', 'OR_NurseStn_Lobby_Flr_2']
76
82
  },
77
83
  {
78
84
  'type' => 'VAV',
79
85
  'name' => 'VAV_ER',
80
- 'space_names' => [
81
- 'ER_Exam1_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma2_Flr_1', 'ER_Triage_Mult4_Flr_1'
82
- ]
86
+ 'space_names' => ['ER_Exam1_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma2_Flr_1', 'ER_Triage_Mult4_Flr_1']
83
87
  },
84
88
  {
85
89
  'type' => 'VAV',
86
90
  'name' => 'VAV_OR',
87
- 'space_names' => [
88
- 'OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2'
89
- ]
91
+ 'space_names' => ['OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2']
90
92
  },
91
93
  {
92
94
  'type' => 'VAV',
93
95
  'name' => 'VAV_ICU',
94
- 'space_names' => [
95
- 'IC_PatRoom1_Mult5_Flr_2', 'IC_PatRoom2_Flr_2', 'IC_PatRoom3_Mult6_Flr_2', 'ICU_Flr_2'
96
- ]
96
+ 'space_names' => ['IC_PatRoom1_Mult5_Flr_2', 'IC_PatRoom2_Flr_2', 'IC_PatRoom3_Mult6_Flr_2', 'ICU_Flr_2']
97
97
  },
98
98
  {
99
99
  'type' => 'VAV',
100
100
  'name' => 'VAV_PATRMS',
101
- 'space_names' => [
102
- 'PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PatRoom6_Flr_3',
103
- 'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4',
104
- 'PatRoom5_Mult10_Flr_4', 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4', 'PatRoom8_Flr_4'
105
- ]
101
+ 'space_names' => ['PatRoom1_Mult10_Flr_3', 'PatRoom2_Flr_3', 'PatRoom3_Mult10_Flr_3', 'PatRoom4_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PatRoom6_Flr_3', 'PatRoom7_Mult10_Flr_3', 'PatRoom8_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom2_Flr_4', 'PatRoom3_Mult10_Flr_4', 'PatRoom4_Flr_4', 'PatRoom5_Mult10_Flr_4', 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4', 'PatRoom8_Flr_4']
106
102
  },
107
103
  {
108
104
  'type' => 'VAV',
109
105
  'name' => 'VAV_2',
110
- 'space_names' => [
111
- 'PhysTherapy_Flr_3', 'NurseStn_Lobby_Flr_3', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3', 'Radiology_Flr_4',
112
- 'NurseStn_Lobby_Flr_4', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4', 'Dining_Flr_5', 'NurseStn_Lobby_Flr_5',
113
- 'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5', 'Corridor_Flr_5'
114
- ]
106
+ 'space_names' => ['PhysTherapy_Flr_3', 'NurseStn_Lobby_Flr_3', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3', 'Radiology_Flr_4', 'NurseStn_Lobby_Flr_4', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4', 'Dining_Flr_5', 'NurseStn_Lobby_Flr_5', 'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5', 'Corridor_Flr_5']
115
107
  },
116
108
  {
117
109
  'type' => 'VAV',
118
110
  'name' => 'VAV_LABS',
119
- 'space_names' => [
120
- 'Lab_Flr_3', 'Lab_Flr_4'
121
- ]
111
+ 'space_names' => ['Lab_Flr_3', 'Lab_Flr_4']
122
112
  },
123
113
  {
124
114
  'type' => 'CAV',
125
115
  'name' => 'CAV_KITCHEN',
126
116
  'space_names' => [
127
117
  'Kitchen_Flr_5'
128
- ] # 55 spaces assigned.
118
+ ] # 55 spaces assigned.
129
119
  },
130
120
  {
131
121
  'type' => 'Exhaust Fan',
132
122
  'name' => 'Kitchen_Flr_5 Exhaust Fan',
133
123
  'availability_sch_name' => 'Hospital Kitchen_Exhaust_SCH',
134
- 'flow_rate' => OpenStudio.convert(exhaust_flow,'cfm','m^3/s').get,
124
+ 'flow_rate' => OpenStudio.convert(exhaust_flow, 'cfm', 'm^3/s').get,
135
125
  'balanced_exhaust_fraction_schedule_name' => 'Hospital Kitchen Exhaust Fan Balanced Exhaust Fraction Schedule',
136
126
  'space_names' =>
137
127
  [
@@ -183,58 +173,28 @@ class OpenStudio::Model::Model
183
173
  {
184
174
  'type' => 'VAV',
185
175
  'name' => 'CAV_1',
186
- 'space_names' => [
187
- 'ER_Exam1_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma2_Flr_1', 'ER_Triage_Mult4_Flr_1','IC_PatRoom1_Mult5_Flr_2',
188
- 'PatRoom1_Mult10_Flr_3','PatRoom5_Mult10_Flr_3', 'PatRoom7_Mult10_Flr_3', 'PatRoom3_Mult10_Flr_4', 'PatRoom5_Mult10_Flr_4',
189
- 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4'
190
- ]
176
+ 'space_names' => ['ER_Exam1_Mult4_Flr_1', 'ER_Trauma1_Flr_1', 'ER_Exam3_Mult4_Flr_1', 'ER_Trauma2_Flr_1', 'ER_Triage_Mult4_Flr_1', 'IC_PatRoom1_Mult5_Flr_2', 'PatRoom1_Mult10_Flr_3', 'PatRoom5_Mult10_Flr_3', 'PatRoom7_Mult10_Flr_3', 'PatRoom3_Mult10_Flr_4', 'PatRoom5_Mult10_Flr_4', 'PatRoom6_Flr_4', 'PatRoom7_Mult10_Flr_4']
191
177
  },
192
178
  {
193
179
  'type' => 'VAV',
194
180
  'name' => 'CAV_2',
195
- 'space_names' => [
196
- 'OR1_Flr_2','OR2_Mult5_Flr_2','OR3_Flr_2','OR4_Flr_2','IC_PatRoom2_Flr_2','PatRoom2_Flr_3','PatRoom6_Flr_3','PatRoom8_Flr_3','PatRoom4_Flr_4'
197
- ]
181
+ 'space_names' => ['OR1_Flr_2', 'OR2_Mult5_Flr_2', 'OR3_Flr_2', 'OR4_Flr_2', 'IC_PatRoom2_Flr_2', 'PatRoom2_Flr_3', 'PatRoom6_Flr_3', 'PatRoom8_Flr_3', 'PatRoom4_Flr_4']
198
182
  },
199
183
  {
200
184
  'type' => 'VAV',
201
185
  'name' => 'VAV_1',
202
- 'space_names' => [
203
- 'Office1_Mult4_Flr_1','Lobby_Records_Flr_1','Corridor_Flr_1','ER_NurseStn_Lobby_Flr_1','IC_PatRoom3_Mult6_Flr_2','ICU_NurseStn_Lobby_Flr_2',
204
- 'Corridor_Flr_2','OR_NurseStn_Lobby_Flr_2','PatRoom3_Mult10_Flr_3','Lab_Flr_3','PatRoom1_Mult10_Flr_4','PatRoom8_Flr_4'
205
- ]
186
+ 'space_names' => ['Office1_Mult4_Flr_1', 'Lobby_Records_Flr_1', 'Corridor_Flr_1', 'ER_NurseStn_Lobby_Flr_1', 'IC_PatRoom3_Mult6_Flr_2', 'ICU_NurseStn_Lobby_Flr_2', 'Corridor_Flr_2', 'OR_NurseStn_Lobby_Flr_2', 'PatRoom3_Mult10_Flr_3', 'Lab_Flr_3', 'PatRoom1_Mult10_Flr_4', 'PatRoom8_Flr_4']
206
187
  },
207
188
  {
208
189
  'type' => 'VAV',
209
190
  'name' => 'VAV_2',
210
- 'space_names' => [
211
- 'ICU_Flr_2',
212
- 'PatRoom4_Flr_3',
213
- 'PhysTherapy_Flr_3',
214
- 'NurseStn_Lobby_Flr_3',
215
- 'Corridor_SE_Flr_3',
216
- 'Corridor_NW_Flr_3',
217
- 'PatRoom2_Flr_4',
218
- 'Radiology_Flr_4',
219
- 'NurseStn_Lobby_Flr_4',
220
- 'Lab_Flr_4',
221
- 'Corridor_SE_Flr_4',
222
- 'Corridor_NW_Flr_4',
223
- 'Dining_Flr_5',
224
- 'NurseStn_Lobby_Flr_5',
225
- 'Kitchen_Flr_5',
226
- 'Office1_Flr_5',
227
- 'Office2_Mult5_Flr_5',
228
- 'Office3_Flr_5',
229
- 'Office4_Mult6_Flr_5',
230
- 'Corridor_Flr_5'
231
- ]
191
+ 'space_names' => ['ICU_Flr_2', 'PatRoom4_Flr_3', 'PhysTherapy_Flr_3', 'NurseStn_Lobby_Flr_3', 'Corridor_SE_Flr_3', 'Corridor_NW_Flr_3', 'PatRoom2_Flr_4', 'Radiology_Flr_4', 'NurseStn_Lobby_Flr_4', 'Lab_Flr_4', 'Corridor_SE_Flr_4', 'Corridor_NW_Flr_4', 'Dining_Flr_5', 'NurseStn_Lobby_Flr_5', 'Kitchen_Flr_5', 'Office1_Flr_5', 'Office2_Mult5_Flr_5', 'Office3_Flr_5', 'Office4_Mult6_Flr_5', 'Corridor_Flr_5']
232
192
  },
233
193
  {
234
194
  'type' => 'Exhaust Fan',
235
195
  'name' => 'Kitchen_Flr_5 Exhaust Fan',
236
196
  'availability_sch_name' => 'Hospital HVACOperationSchd',
237
- 'flow_rate' => OpenStudio.convert(exhaust_flow,'cfm','m^3/s').get,
197
+ 'flow_rate' => OpenStudio.convert(exhaust_flow, 'cfm', 'm^3/s').get,
238
198
  'space_names' =>
239
199
  [
240
200
  'Kitchen_Flr_5'
@@ -244,7 +204,7 @@ class OpenStudio::Model::Model
244
204
  'type' => 'Exhaust Fan',
245
205
  'name' => 'Dining_Flr_5 Exhaust Fan',
246
206
  'availability_sch_name' => 'Hospital HVACOperationSchd',
247
- 'flow_rate' => OpenStudio.convert(exhaust_flow_dining,'cfm','m^3/s').get,
207
+ 'flow_rate' => OpenStudio.convert(exhaust_flow_dining, 'cfm', 'm^3/s').get,
248
208
  'space_names' =>
249
209
  [
250
210
  'Dining_Flr_5'
@@ -294,7 +254,6 @@ class OpenStudio::Model::Model
294
254
  end
295
255
 
296
256
  def define_space_multiplier
297
-
298
257
  space_multiplier_map = {
299
258
  'ER_Exam1_Mult4_Flr_1' => 4,
300
259
  'ER_Exam3_Mult4_Flr_1' => 4,
@@ -317,49 +276,47 @@ class OpenStudio::Model::Model
317
276
  return space_multiplier_map
318
277
  end
319
278
 
279
+ def custom_hvac_tweaks(building_type, template, climate_zone, prototype_input)
280
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started Adding HVAC')
320
281
 
321
- def custom_hvac_tweaks(building_type, building_vintage, climate_zone, prototype_input)
322
-
323
- OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started Adding HVAC')
324
-
325
- system_to_space_map = define_hvac_system_map(building_type, building_vintage, climate_zone)
282
+ system_to_space_map = define_hvac_system_map(building_type, template, climate_zone)
326
283
 
327
284
  hot_water_loop = nil
328
- self.getPlantLoops.each do |loop|
285
+ getPlantLoops.each do |loop|
329
286
  # If it has a boiler:hotwater, it is the correct loop
330
- if loop.supplyComponents('OS:Boiler:HotWater'.to_IddObjectType).size > 0
287
+ unless loop.supplyComponents('OS:Boiler:HotWater'.to_IddObjectType).empty?
331
288
  hot_water_loop = loop
332
289
  end
333
290
  end
334
291
  if hot_water_loop
335
- case building_vintage
336
- when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
337
- space_names = ['ER_Exam3_Mult4_Flr_1','OR2_Mult5_Flr_2','ICU_Flr_2','PatRoom5_Mult10_Flr_4','Lab_Flr_3']
338
- space_names.each do |space_name|
339
- self.add_humidifier(space_name, building_vintage, hot_water_loop)
340
- end
341
- when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
342
- space_names = ['ER_Exam3_Mult4_Flr_1','OR2_Mult5_Flr_2']
343
- space_names.each do |space_name|
344
- self.add_humidifier(space_name, building_vintage, hot_water_loop)
345
- end
292
+ case template
293
+ when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
294
+ space_names = ['ER_Exam3_Mult4_Flr_1', 'OR2_Mult5_Flr_2', 'ICU_Flr_2', 'PatRoom5_Mult10_Flr_4', 'Lab_Flr_3']
295
+ space_names.each do |space_name|
296
+ add_humidifier(space_name, template, hot_water_loop)
297
+ end
298
+ when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
299
+ space_names = ['ER_Exam3_Mult4_Flr_1', 'OR2_Mult5_Flr_2']
300
+ space_names.each do |space_name|
301
+ add_humidifier(space_name, template, hot_water_loop)
302
+ end
346
303
  end
347
304
  else
348
- OpenStudio::logFree(OpenStudio::Warn, 'openstudio.model.Model', 'Could not find hot water loop to attach humidifier to.')
305
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', 'Could not find hot water loop to attach humidifier to.')
349
306
  end
350
307
 
351
- self.reset_kitchen_OA(building_vintage)
352
- self.update_exhaust_fan_efficiency(building_vintage)
353
- self.reset_or_room_vav_minimum_damper(prototype_input, building_vintage)
308
+ reset_kitchen_oa(template)
309
+ update_exhaust_fan_efficiency(template)
310
+ reset_or_room_vav_minimum_damper(prototype_input, template)
354
311
 
355
312
  return true
356
313
  end
357
314
 
358
- def update_waterheater_loss_coefficient(building_vintage)
359
- case building_vintage
315
+ def update_waterheater_loss_coefficient(template)
316
+ case template
360
317
  when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
361
- self.getWaterHeaterMixeds.sort.each do |water_heater|
362
- if water_heater.name.to_s.include?("Booster")
318
+ getWaterHeaterMixeds.sort.each do |water_heater|
319
+ if water_heater.name.to_s.include?('Booster')
363
320
  water_heater.setOffCycleLossCoefficienttoAmbientTemperature(1.053159296)
364
321
  water_heater.setOnCycleLossCoefficienttoAmbientTemperature(1.053159296)
365
322
  else
@@ -370,54 +327,52 @@ class OpenStudio::Model::Model
370
327
  end
371
328
  end
372
329
 
373
- def custom_swh_tweaks(building_type, building_vintage, climate_zone, prototype_input)
374
-
375
- self.update_waterheater_loss_coefficient(building_vintage)
330
+ def custom_swh_tweaks(building_type, template, climate_zone, prototype_input)
331
+ update_waterheater_loss_coefficient(template)
376
332
  return true
333
+ end # add swh
377
334
 
378
- end
379
-
380
- def reset_kitchen_OA(building_vintage)
381
- space_kitchen = self.getSpaceByName('Kitchen_Flr_5').get
335
+ def reset_kitchen_oa(template)
336
+ space_kitchen = getSpaceByName('Kitchen_Flr_5').get
382
337
  ventilation = space_kitchen.designSpecificationOutdoorAir.get
383
338
  ventilation.setOutdoorAirFlowperPerson(0)
384
339
  ventilation.setOutdoorAirFlowperFloorArea(0)
385
- case building_vintage
386
- when '90.1-2010', '90.1-2013'
387
- ventilation.setOutdoorAirFlowRate(3.398)
388
- when '90.1-2004', '90.1-2007', 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
389
- ventilation.setOutdoorAirFlowRate(3.776)
340
+ case template
341
+ when '90.1-2010', '90.1-2013'
342
+ ventilation.setOutdoorAirFlowRate(3.398)
343
+ when '90.1-2004', '90.1-2007', 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
344
+ ventilation.setOutdoorAirFlowRate(3.776)
390
345
  end
391
346
  end
392
347
 
393
- def update_exhaust_fan_efficiency(building_vintage)
394
- case building_vintage
395
- when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
396
- self.getFanZoneExhausts.sort.each do |exhaust_fan|
397
- exhaust_fan.setFanEfficiency(0.16)
398
- exhaust_fan.setPressureRise(125)
399
- end
400
- when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
401
- self.getFanZoneExhausts.sort.each do |exhaust_fan|
402
- exhaust_fan.setFanEfficiency(0.338)
403
- exhaust_fan.setPressureRise(125)
404
- end
348
+ def update_exhaust_fan_efficiency(template)
349
+ case template
350
+ when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
351
+ getFanZoneExhausts.sort.each do |exhaust_fan|
352
+ exhaust_fan.setFanEfficiency(0.16)
353
+ exhaust_fan.setPressureRise(125)
354
+ end
355
+ when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
356
+ getFanZoneExhausts.sort.each do |exhaust_fan|
357
+ exhaust_fan.setFanEfficiency(0.338)
358
+ exhaust_fan.setPressureRise(125)
359
+ end
405
360
  end
406
361
  end
407
362
 
408
- def add_humidifier(space_name, building_vintage, hot_water_loop)
409
- space = self.getSpaceByName(space_name).get
363
+ def add_humidifier(space_name, template, hot_water_loop)
364
+ space = getSpaceByName(space_name).get
410
365
  zone = space.thermalZone.get
411
366
  humidistat = OpenStudio::Model::ZoneControlHumidistat.new(self)
412
- humidistat.setHumidifyingRelativeHumiditySetpointSchedule(self.add_schedule('Hospital MinRelHumSetSch'))
413
- humidistat.setDehumidifyingRelativeHumiditySetpointSchedule(self.add_schedule('Hospital MaxRelHumSetSch'))
367
+ humidistat.setHumidifyingRelativeHumiditySetpointSchedule(add_schedule('Hospital MinRelHumSetSch'))
368
+ humidistat.setDehumidifyingRelativeHumiditySetpointSchedule(add_schedule('Hospital MaxRelHumSetSch'))
414
369
  zone.setZoneControlHumidistat(humidistat)
415
370
 
416
- self.getAirLoopHVACs.each do |air_loop|
371
+ getAirLoopHVACs.each do |air_loop|
417
372
  if air_loop.thermalZones.include? zone
418
373
  humidifier = OpenStudio::Model::HumidifierSteamElectric.new(self)
419
374
  humidifier.setRatedCapacity(3.72E-5)
420
- humidifier.setRatedPower(100000)
375
+ humidifier.setRatedPower(100_000)
421
376
  humidifier.setName("#{air_loop.name.get} Electric Steam Humidifier")
422
377
  # get the water heating coil and add humidifier to the outlet of heating coil (right before fan)
423
378
  htg_coil = nil
@@ -426,60 +381,58 @@ class OpenStudio::Model::Model
426
381
  htg_coil = equip.to_CoilHeatingWater.get
427
382
  end
428
383
  end
429
- heating_coil_outlet_node = htg_coil.airOutletModelObject().get.to_Node.get
384
+ heating_coil_outlet_node = htg_coil.airOutletModelObject.get.to_Node.get
430
385
  supply_outlet_node = air_loop.supplyOutletNode
431
386
  humidifier.addToNode(heating_coil_outlet_node)
432
387
  humidity_spm = OpenStudio::Model::SetpointManagerSingleZoneHumidityMinimum.new(self)
433
- case building_vintage
388
+ case template
434
389
  when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
435
- extra_elec_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(self,self.alwaysOnDiscreteSchedule)
390
+ extra_elec_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(self, alwaysOnDiscreteSchedule)
436
391
  extra_elec_htg_coil.setName("#{space_name} Electric Htg Coil")
437
- extra_water_htg_coil = OpenStudio::Model::CoilHeatingWater.new(self,self.alwaysOnDiscreteSchedule)
392
+ extra_water_htg_coil = OpenStudio::Model::CoilHeatingWater.new(self, alwaysOnDiscreteSchedule)
438
393
  extra_water_htg_coil.setName("#{space_name} Water Htg Coil")
439
394
  hot_water_loop.addDemandBranchForComponent(extra_water_htg_coil)
440
395
  extra_elec_htg_coil.addToNode(supply_outlet_node)
441
396
  extra_water_htg_coil.addToNode(supply_outlet_node)
442
397
  end
443
398
  # humidity_spm.addToNode(supply_outlet_node)
444
- humidity_spm.addToNode(humidifier.outletModelObject().get.to_Node.get)
399
+ humidity_spm.addToNode(humidifier.outletModelObject.get.to_Node.get)
445
400
  humidity_spm.setControlZone(zone)
446
401
  end
447
402
  end
448
403
  end
449
404
 
450
- def hospital_add_daylighting_controls(building_vintage)
451
- space_names = ['Office1_Flr_5','Office3_Flr_5','Lobby_Records_Flr_1']
405
+ def hospital_add_daylighting_controls(template)
406
+ space_names = ['Office1_Flr_5', 'Office3_Flr_5', 'Lobby_Records_Flr_1']
452
407
  space_names.each do |space_name|
453
- space = self.getSpaceByName(space_name).get
454
- space.addDaylightingControls(building_vintage, false, false)
408
+ space = getSpaceByName(space_name).get
409
+ space.add_daylighting_controls(template, false, false)
455
410
  end
456
411
  end
457
412
 
458
- def reset_or_room_vav_minimum_damper(prototype_input, building_vintage)
459
- case building_vintage
413
+ def reset_or_room_vav_minimum_damper(prototype_input, template)
414
+ case template
460
415
  when '90.1-2004', '90.1-2007'
461
416
  return true
462
417
  when '90.1-2010', '90.1-2013'
463
- self.getAirTerminalSingleDuctVAVReheats.sort.each do |airterminal|
418
+ getAirTerminalSingleDuctVAVReheats.sort.each do |airterminal|
464
419
  airterminal_name = airterminal.name.get
465
- if airterminal_name.include? "OR1" or airterminal_name.include? "OR2" or airterminal_name.include? "OR3" or airterminal_name.include? "OR4"
420
+ if airterminal_name.include?('OR1') || airterminal_name.include?('OR2') || airterminal_name.include?('OR3') || airterminal_name.include?('OR4')
466
421
  airterminal.setZoneMinimumAirFlowMethod('Scheduled')
467
- airterminal.setMinimumAirFlowFractionSchedule(add_schedule("Hospital OR_MinSA_Sched"))
422
+ airterminal.setMinimumAirFlowFractionSchedule(add_schedule('Hospital OR_MinSA_Sched'))
468
423
  end
469
424
  end
470
425
  end
471
426
  end
472
427
 
473
- def modify_hospital_OAcontroller(building_vintage)
474
- self.getAirLoopHVACs.each do |air_loop|
428
+ def modify_hospital_oa_controller(template)
429
+ getAirLoopHVACs.each do |air_loop|
475
430
  oa_sys = air_loop.airLoopHVACOutdoorAirSystem.get
476
431
  oa_control = oa_sys.getControllerOutdoorAir
477
432
  case air_loop.name.get
478
- when 'VAV_ER', 'VAV_ICU', 'VAV_LABS', 'VAV_OR', 'VAV_PATRMS', 'CAV_1', 'CAV_2'
479
- oa_control.setEconomizerControlType('NoEconomizer')
433
+ when 'VAV_ER', 'VAV_ICU', 'VAV_LABS', 'VAV_OR', 'VAV_PATRMS', 'CAV_1', 'CAV_2'
434
+ oa_control.setEconomizerControlType('NoEconomizer')
480
435
  end
481
436
  end
482
437
  end
483
-
484
438
  end
485
-