openstudio-standards 0.8.2 → 0.8.4

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 (152) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  3. data/data/standards/openstudio_standards_duplicates_log.csv +7962 -0
  4. data/lib/openstudio-standards/btap/costing/README.md +502 -0
  5. data/lib/openstudio-standards/btap/costing/btap_costing.rb +473 -0
  6. data/lib/openstudio-standards/btap/costing/btap_measure_helper.rb +359 -0
  7. data/lib/openstudio-standards/btap/costing/btap_workflow.rb +117 -0
  8. data/lib/openstudio-standards/btap/costing/common_paths.rb +78 -0
  9. data/lib/openstudio-standards/btap/costing/common_resources/ConstructionProperties.csv +52 -0
  10. data/lib/openstudio-standards/btap/costing/common_resources/Constructions.csv +37 -0
  11. data/lib/openstudio-standards/btap/costing/common_resources/construction_sets.csv +1270 -0
  12. data/lib/openstudio-standards/btap/costing/common_resources/constructions_glazing.csv +61 -0
  13. data/lib/openstudio-standards/btap/costing/common_resources/constructions_opaque.csv +2256 -0
  14. data/lib/openstudio-standards/btap/costing/common_resources/costs.csv +1904 -0
  15. data/lib/openstudio-standards/btap/costing/common_resources/costs_local_factors.csv +2315 -0
  16. data/lib/openstudio-standards/btap/costing/common_resources/hvac_vent_ahu.csv +925 -0
  17. data/lib/openstudio-standards/btap/costing/common_resources/lighting.csv +364 -0
  18. data/lib/openstudio-standards/btap/costing/common_resources/lighting_sets.csv +2667 -0
  19. data/lib/openstudio-standards/btap/costing/common_resources/locations.csv +75 -0
  20. data/lib/openstudio-standards/btap/costing/common_resources/materials_glazing.csv +35 -0
  21. data/lib/openstudio-standards/btap/costing/common_resources/materials_hvac.csv +1699 -0
  22. data/lib/openstudio-standards/btap/costing/common_resources/materials_lighting.csv +267 -0
  23. data/lib/openstudio-standards/btap/costing/common_resources/materials_opaque.csv +164 -0
  24. data/lib/openstudio-standards/btap/costing/copy_test_results_files_to_expected_results.rb +11 -0
  25. data/lib/openstudio-standards/btap/costing/cost_building_from_file.rb +136 -0
  26. data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +177 -0
  27. data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +353 -0
  28. data/lib/openstudio-standards/btap/costing/dcv_costing.rb +314 -0
  29. data/lib/openstudio-standards/btap/costing/dummy.epw +8768 -0
  30. data/lib/openstudio-standards/btap/costing/dummy.osm +5320 -0
  31. data/lib/openstudio-standards/btap/costing/envelope_costing.rb +284 -0
  32. data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2584 -0
  33. data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +155 -0
  34. data/lib/openstudio-standards/btap/costing/lighting_costing.rb +209 -0
  35. data/lib/openstudio-standards/btap/costing/mech_sizing.json +502 -0
  36. data/lib/openstudio-standards/btap/costing/neb_end_use_prices.csv +42 -0
  37. data/lib/openstudio-standards/btap/costing/necb_2011_spacetype_info.csv +225 -0
  38. data/lib/openstudio-standards/btap/costing/necb_reference_runs.csv +28705 -0
  39. data/lib/openstudio-standards/btap/costing/nv_costing.rb +547 -0
  40. data/lib/openstudio-standards/btap/costing/parallel_tests.rb +92 -0
  41. data/lib/openstudio-standards/btap/costing/pv_ground_costing.rb +687 -0
  42. data/lib/openstudio-standards/btap/costing/shw_costing.rb +705 -0
  43. data/lib/openstudio-standards/btap/costing/test_list.txt +17 -0
  44. data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +26 -0
  45. data/lib/openstudio-standards/btap/costing/test_run_costing_tests.rb +80 -0
  46. data/lib/openstudio-standards/btap/costing/ventilation_costing.rb +2616 -0
  47. data/lib/openstudio-standards/constructions/modify.rb +2 -1
  48. data/lib/openstudio-standards/refrigeration/create_case.rb +58 -21
  49. data/lib/openstudio-standards/refrigeration/create_typical_refrigeration.rb +4 -2
  50. data/lib/openstudio-standards/refrigeration/create_walkin.rb +57 -22
  51. data/lib/openstudio-standards/refrigeration/data/refrigerated_cases.csv +31 -31
  52. data/lib/openstudio-standards/refrigeration/data/refrigerated_walkins.csv +76 -76
  53. data/lib/openstudio-standards/service_water_heating/create_typical.rb +10 -10
  54. data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +10 -0
  55. data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +16 -3
  56. data/lib/openstudio-standards/service_water_heating/data/convert_data.rb +9 -9
  57. data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.csv +49 -49
  58. data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.json +159 -159
  59. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +7 -18
  60. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +10 -20
  61. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +6 -15
  62. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +5 -6
  63. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +93 -43
  64. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +5 -5
  65. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +135 -37
  66. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -2
  67. data/lib/openstudio-standards/standards/Standards.Model.rb +48 -13
  68. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.computer_room_acs.json +302 -140
  69. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +648 -326
  70. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +371 -90
  71. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +66 -22
  72. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.computer_room_acs.json +302 -140
  73. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +1012 -296
  74. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +443 -79
  75. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +66 -22
  76. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.computer_room_acs.json +302 -140
  77. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +672 -306
  78. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +354 -74
  79. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +72 -24
  80. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.computer_room_acs.json +302 -140
  81. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +8 -8
  82. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +930 -604
  83. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +415 -111
  84. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +72 -24
  85. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.computer_room_acs.json +602 -140
  86. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps.json +1005 -333
  87. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +642 -88
  88. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_heaters.json +78 -26
  89. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.computer_room_acs.json +722 -140
  90. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps.json +1741 -426
  91. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +1108 -111
  92. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_heaters.json +186 -62
  93. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +62 -232
  94. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -3
  95. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +1 -1
  96. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +7 -18
  97. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +9 -7
  98. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +1 -1
  99. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +2 -2
  100. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps.json +154 -69
  101. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps_heating.json +72 -72
  102. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.water_heaters.json +382 -295
  103. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +6 -1
  104. data/lib/openstudio-standards/standards/deer/data/deer.schedules.json +62 -232
  105. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +2 -27
  106. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/heat_pumps.json +16 -0
  107. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/heat_pumps_heating.json +6 -0
  108. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +68 -27
  109. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +64 -25
  110. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +9 -14
  111. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +46 -20
  112. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +635 -248
  113. data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +43 -7
  114. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +7 -1
  115. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartmentMult.osm +14272 -0
  116. data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps.json +16 -0
  117. data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +6 -0
  118. data/lib/openstudio-standards/standards/necb/NECB2011/data/necb_2015_table_c1.json +1 -1
  119. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +437 -437
  120. data/lib/openstudio-standards/standards/necb/NECB2011/data/systems.json +516 -0
  121. data/lib/openstudio-standards/standards/necb/NECB2011/data/systems_including_sys5.json +588 -0
  122. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +489 -0
  123. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +16 -6
  124. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +48 -5
  125. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +2 -2
  126. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +35 -27
  127. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +34 -23
  128. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +8 -6
  129. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +43 -14
  130. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +214 -25
  131. data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +61 -1
  132. data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps.json +16 -0
  133. data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +8 -0
  134. data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +636 -636
  135. data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +38 -38
  136. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +15 -6
  137. data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +636 -636
  138. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +71 -71
  139. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps.json +20 -0
  140. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +10 -0
  141. data/lib/openstudio-standards/standards/necb/README.md +343 -0
  142. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +190 -28
  143. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +14 -5
  144. data/lib/openstudio-standards/standards/necb/common/eccc_electric_grid_intensity_20250311.csv +14 -0
  145. data/lib/openstudio-standards/standards/necb/common/nir_gas_grid_intensity_20250311.csv +14 -0
  146. data/lib/openstudio-standards/standards/necb/common/system_types.yaml +0 -0
  147. data/lib/openstudio-standards/utilities/logging.rb +18 -14
  148. data/lib/openstudio-standards/utilities/simulation.rb +3 -2
  149. data/lib/openstudio-standards/version.rb +1 -1
  150. data/lib/openstudio-standards/weather/modify.rb +2 -2
  151. data/lib/openstudio-standards.rb +12 -0
  152. metadata +56 -3
@@ -0,0 +1,314 @@
1
+ class BTAPCosting
2
+
3
+ def cost_audit_dcv(model:, prototype_creator:)
4
+ @costing_report['ventilation'][:demand_controlled_ventilation] = []
5
+ a = 0.0 # This is for reporting purposes.
6
+
7
+ ##### Initialize cost of various parts of DCV
8
+ dcv_cost_zone_occupancy = 0.0
9
+ dcv_cost_zone_co2 = 0.0
10
+ dcv_cost_box = 0.0
11
+ dcv_cost_vertical_conduit = 0.0
12
+ dcv_cost_roof = 0.0
13
+ dcv_cost_control = 0.0
14
+ dcv_cost_total = 0.0
15
+
16
+ ##### Get number of stories and nominal floor to floor height.
17
+ ##### These inputs are required for the calculation of the length of conduit for each AirLoopHVAC.
18
+ util_dist, ht_roof, nominal_flr2flr_height_ft, horizontal_dist, standards_number_of_stories, mechRmInBsmt = getGeometryData(model, prototype_creator)
19
+ nominal_flr2flr_height_m = (OpenStudio.convert(nominal_flr2flr_height_ft, 'ft', 'm').get)
20
+
21
+ number_of_dcv_controller_for_all_air_loops = 0
22
+
23
+ model.getAirLoopHVACs.sort.each do |air_loop|
24
+ number_of_thermal_zones_served_by_air_loop = 0
25
+ number_floors_served_by_air_loop = 0
26
+ number_of_junction_boxes_for_air_loop = 0
27
+
28
+ ##### Step A: Calculate number of thermal zones and floors served by each AirLoopHVAC (air_loop)
29
+ building_story_list = []
30
+ air_loop.thermalZones.sort.each do |thermal_zone|
31
+ thermal_zone.spaces().sort.each do |space|
32
+ building_story_list << space.buildingStory.get.name()
33
+ end
34
+ number_of_thermal_zones_served_by_air_loop += thermal_zone.multiplier()
35
+ end
36
+ building_story_list = building_story_list.uniq()
37
+ number_floors_served_by_air_loop = building_story_list.length
38
+
39
+ ##### Loop through AirLoopHVAC's supply nodes to:
40
+ ##### (1) Find its AirLoopHVAC:OutdoorAirSystem using the supply node;
41
+ ##### (2) Find Controller:OutdoorAir using AirLoopHVAC:OutdoorAirSystem;
42
+ ##### (3) Get "Controller Mechanical Ventilation" from Controller:OutdoorAir.
43
+ air_loop.supplyComponents.sort.each do |supply_component|
44
+ ##### Find AirLoopHVAC:OutdoorAirSystem of AirLoopHVAC using the supply node.
45
+ hvac_component = supply_component.to_AirLoopHVACOutdoorAirSystem
46
+
47
+ if !hvac_component.empty?
48
+
49
+ tags = ['ventilation', 'demand_controlled_ventilation']
50
+
51
+ ##### Find Controller:OutdoorAir using AirLoopHVAC:OutdoorAirSystem.
52
+ hvac_component = hvac_component.get
53
+ hvac_component_name = hvac_component.name()
54
+ controller_outdoorair = hvac_component.getControllerOutdoorAir
55
+ controller_outdoorair_name = controller_outdoorair.name()
56
+
57
+ ##### Get "Controller Mechanical Ventilation" from Controller:OutdoorAir.
58
+ controller_mechanical_ventilation = controller_outdoorair.controllerMechanicalVentilation
59
+ controller_mechanical_ventilation_name = controller_mechanical_ventilation.name()
60
+
61
+ ##### Check if "Demand Controlled Ventilation" is "Yes" in Controller:MechanicalVentilation depending on dcv_type.
62
+ controller_mechanical_ventilation_demand_controlled_ventilation_status = controller_mechanical_ventilation.demandControlledVentilation
63
+
64
+ controller_mechanical_ventilation_system_outdoor_air_method = controller_mechanical_ventilation.systemOutdoorAirMethod()
65
+ if controller_mechanical_ventilation_demand_controlled_ventilation_status == true && (controller_mechanical_ventilation_system_outdoor_air_method == 'ZoneSum' || controller_mechanical_ventilation_system_outdoor_air_method == 'IndoorAirQualityProcedure')
66
+
67
+ ##### Step B: Calculate costs of the installation of a single junction box for each floor within that AirLoopHVAC (air_loop) to accumulate the wiring
68
+ quantity_ahu_floors_junction_box = 1.0 * number_floors_served_by_air_loop
69
+ search_ahu_floors_junction_box = {
70
+ row_id_1: 'Ea',
71
+ row_id_2: 14
72
+ }
73
+ sheet_name = 'materials_lighting'
74
+ column_1 = 'unit'
75
+ column_2 = 'lighting_type_id'
76
+ dcv_cost_box = assembly_cost(cost_info:search_ahu_floors_junction_box,
77
+ sheet_name:sheet_name,
78
+ column_1:column_1,
79
+ column_2:column_2,
80
+ quantity:quantity_ahu_floors_junction_box,
81
+ tags: tags)
82
+
83
+ ##### Step C: Calculate costs of the installation of a single conduit that runs the entire height of the building for each AirLoopHVAC to accumulate the wiring
84
+ quantity_ahu_vertical_wiring = 1.0/100.0 * standards_number_of_stories * nominal_flr2flr_height_ft
85
+ search_ahu_vertical_wiring = {
86
+ row_id_1: 'CLF',
87
+ row_id_2: 10
88
+ }
89
+ sheet_name = 'materials_lighting'
90
+ column_1 = 'unit'
91
+ column_2 = 'lighting_type_id'
92
+ cost_ahu_vertical_wiring = assembly_cost(cost_info:search_ahu_vertical_wiring,
93
+ sheet_name:sheet_name,
94
+ column_1:column_1,
95
+ column_2:column_2,
96
+ quantity:quantity_ahu_vertical_wiring,
97
+ tags: tags)
98
+ quantity_ahu_vertical_conduit = 1.0 * standards_number_of_stories * nominal_flr2flr_height_ft
99
+ search_ahu_vertical_conduit = {
100
+ row_id_1: 'LF',
101
+ row_id_2: 13
102
+ }
103
+ sheet_name = 'materials_lighting'
104
+ column_1 = 'unit'
105
+ column_2 = 'lighting_type_id'
106
+ cost_ahu_vertical_conduit = assembly_cost(cost_info:search_ahu_vertical_conduit,
107
+ sheet_name:sheet_name,
108
+ column_1:column_1,
109
+ column_2:column_2,
110
+ quantity:quantity_ahu_vertical_conduit,
111
+ tags: tags)
112
+ dcv_cost_vertical_conduit = cost_ahu_vertical_wiring + cost_ahu_vertical_conduit
113
+
114
+ ##### Step D: Calculate the roof conduit and wiring for each AirLoopHVAC.
115
+ quantity_ahu_roof_wiring = 20.0/100.0
116
+ search_ahu_roof_wiring = {
117
+ row_id_1: 'CLF',
118
+ row_id_2: 10
119
+ }
120
+ sheet_name = 'materials_lighting'
121
+ column_1 = 'unit'
122
+ column_2 = 'lighting_type_id'
123
+ cost_ahu_roof_wiring = assembly_cost(cost_info:search_ahu_roof_wiring,
124
+ sheet_name:sheet_name,
125
+ column_1:column_1,
126
+ column_2:column_2,
127
+ quantity:quantity_ahu_roof_wiring,
128
+ tags: tags)
129
+ quantity_ahu_roof_conduit = 20.0
130
+ search_ahu_roof_conduit = {
131
+ row_id_1: 'LF',
132
+ row_id_2: 13
133
+ }
134
+ sheet_name = 'materials_lighting'
135
+ column_1 = 'unit'
136
+ column_2 = 'lighting_type_id'
137
+ cost_ahu_roof_conduit = assembly_cost(cost_info:search_ahu_roof_conduit,
138
+ sheet_name:sheet_name,
139
+ column_1:column_1,
140
+ column_2:column_2,
141
+ quantity:quantity_ahu_roof_conduit,
142
+ tags: tags)
143
+ quantity_ahu_roof_junction_box = 1.0
144
+ search_ahu_roof_junction_box = {
145
+ row_id_1: 'Ea',
146
+ row_id_2: 14
147
+ }
148
+ sheet_name = 'materials_lighting'
149
+ column_1 = 'unit'
150
+ column_2 = 'lighting_type_id'
151
+ cost_ahu_roof_junction_box = assembly_cost(cost_info:search_ahu_roof_junction_box,
152
+ sheet_name:sheet_name,
153
+ column_1:column_1,
154
+ column_2:column_2,
155
+ quantity:quantity_ahu_roof_junction_box,
156
+ tags: tags)
157
+ dcv_cost_roof = cost_ahu_roof_wiring + cost_ahu_roof_conduit + cost_ahu_roof_junction_box
158
+
159
+ ##### Step E: Calculate DCV controller for each AirLoopHVAC.
160
+ number_of_dcv_controller_for_all_air_loops += 1
161
+ quantity_ahu_contorller = 1.0
162
+ search_ahu_contorller = {
163
+ row_id_1: 'Ea',
164
+ row_id_2: 400
165
+ }
166
+ sheet_name = 'materials_lighting'
167
+ column_1 = 'unit'
168
+ column_2 = 'lighting_type_id'
169
+ dcv_cost_control = assembly_cost(cost_info:search_ahu_contorller,
170
+ sheet_name:sheet_name,
171
+ column_1:column_1,
172
+ column_2:column_2,
173
+ quantity:quantity_ahu_contorller,
174
+ tags: tags)
175
+
176
+ if controller_mechanical_ventilation_system_outdoor_air_method == 'ZoneSum'
177
+ ##### Step F: Calculate total Cost for each AirLoopHVAC
178
+ # Calculate occupancy sensor-related costs of each thermal zone served by each AirLoopHVAC (air_loop)
179
+ quantity_tz_occupancy_sensor = 1.0 * number_of_thermal_zones_served_by_air_loop.to_f
180
+ search_tz_occupancy_sensor = {
181
+ row_id_1: 'Ea',
182
+ row_id_2: 404
183
+ }
184
+ sheet_name = 'materials_lighting'
185
+ column_1 = 'unit'
186
+ column_2 = 'lighting_type_id'
187
+ cost_tz_occupancy_sensor = assembly_cost(cost_info:search_tz_occupancy_sensor,
188
+ sheet_name:sheet_name,
189
+ column_1:column_1,
190
+ column_2:column_2,
191
+ quantity:quantity_tz_occupancy_sensor,
192
+ tags: tags)
193
+ quantity_tz_occupancy_sensor_wiring = 30.0/100.0 * number_of_thermal_zones_served_by_air_loop.to_f
194
+ search_tz_occupancy_sensor_wiring = {
195
+ row_id_1: 'CLF',
196
+ row_id_2: 10
197
+ }
198
+ sheet_name = 'materials_lighting'
199
+ column_1 = 'unit'
200
+ column_2 = 'lighting_type_id'
201
+ cost_tz_occupancy_sensor_wiring = assembly_cost(cost_info:search_tz_occupancy_sensor_wiring,
202
+ sheet_name:sheet_name,
203
+ column_1:column_1,
204
+ column_2:column_2,
205
+ quantity:quantity_tz_occupancy_sensor_wiring,
206
+ tags: tags)
207
+ quantity_tz_occupancy_sensor_pvc_conduit = 30.0 * number_of_thermal_zones_served_by_air_loop.to_f
208
+ search_tz_occupancy_sensor_pvc_conduit = {
209
+ row_id_1: 'LF',
210
+ row_id_2: 17
211
+ }
212
+ sheet_name = 'materials_lighting'
213
+ column_1 = 'unit'
214
+ column_2 = 'lighting_type_id'
215
+ cost_tz_occupancy_sensor_pvc_conduit = assembly_cost(cost_info:search_tz_occupancy_sensor_pvc_conduit,
216
+ sheet_name:sheet_name,
217
+ column_1:column_1,
218
+ column_2:column_2,
219
+ quantity:quantity_tz_occupancy_sensor_pvc_conduit,
220
+ tags: tags)
221
+ dcv_cost_zone_occupancy = cost_tz_occupancy_sensor + cost_tz_occupancy_sensor_wiring + cost_tz_occupancy_sensor_pvc_conduit
222
+ dcv_cost_total += dcv_cost_zone_occupancy + dcv_cost_box + dcv_cost_vertical_conduit + dcv_cost_roof + dcv_cost_control
223
+ total_cost_for_air_loop = dcv_cost_zone_occupancy + dcv_cost_box + dcv_cost_vertical_conduit + dcv_cost_roof + dcv_cost_control
224
+ elsif controller_mechanical_ventilation_system_outdoor_air_method == 'IndoorAirQualityProcedure'
225
+ ##### Step F: Calculate total Cost for each AirLoopHVAC
226
+ # Calculate CO2 sensor-related costs of each thermal zone served by each AirLoopHVAC (air_loop)
227
+ quantity_tz_co2_sensor = 1.0 * number_of_thermal_zones_served_by_air_loop.to_f
228
+ search_tz_co2_sensor = {
229
+ row_id_1: nil,
230
+ row_id_2: 1316
231
+ }
232
+ sheet_name = 'materials_hvac'
233
+ column_1 = nil
234
+ column_2 = 'material_id'
235
+ cost_tz_co2_sensor = assembly_cost(cost_info:search_tz_co2_sensor,
236
+ sheet_name:sheet_name,
237
+ column_1:column_1,
238
+ column_2:column_2,
239
+ quantity:quantity_tz_co2_sensor,
240
+ tags: tags)
241
+ quantity_tz_co2_sensor_wiring = 30.0/100.0 * number_of_thermal_zones_served_by_air_loop.to_f
242
+ search_tz_co2_sensor_wiring = {
243
+ row_id_1: 'CLF',
244
+ row_id_2: 10
245
+ }
246
+ sheet_name = 'materials_lighting'
247
+ column_1 = 'unit'
248
+ column_2 = 'lighting_type_id'
249
+ cost_tz_co2_sensor_wiring = assembly_cost(cost_info:search_tz_co2_sensor_wiring,
250
+ sheet_name:sheet_name,
251
+ column_1:column_1,
252
+ column_2:column_2,
253
+ quantity:quantity_tz_co2_sensor_wiring,
254
+ tags: tags)
255
+ quantity_tz_co2_sensor_pvc_conduit = 30.0 * number_of_thermal_zones_served_by_air_loop.to_f
256
+ search_tz_co2_sensor_pvc_conduit = {
257
+ row_id_1: 'LF',
258
+ row_id_2: 17
259
+ }
260
+ sheet_name = 'materials_lighting'
261
+ column_1 = 'unit'
262
+ column_2 = 'lighting_type_id'
263
+ cost_tz_co2_sensor_pvc_conduit = assembly_cost(cost_info:search_tz_co2_sensor_pvc_conduit,
264
+ sheet_name:sheet_name,
265
+ column_1:column_1,
266
+ column_2:column_2,
267
+ quantity:quantity_tz_co2_sensor_pvc_conduit,
268
+ tags: tags)
269
+ dcv_cost_zone_co2 = cost_tz_co2_sensor + cost_tz_co2_sensor_wiring + cost_tz_co2_sensor_pvc_conduit
270
+ dcv_cost_total += dcv_cost_zone_co2 + dcv_cost_box + dcv_cost_vertical_conduit + dcv_cost_roof + dcv_cost_control
271
+ total_cost_for_air_loop = dcv_cost_zone_co2 + dcv_cost_box + dcv_cost_vertical_conduit + dcv_cost_roof + dcv_cost_control
272
+ end
273
+
274
+ ##### Gather information for reporting
275
+ @costing_report['ventilation'][:demand_controlled_ventilation] << {
276
+ air_loop_name: air_loop.name().to_s,
277
+ controller_Outdoor_air: controller_outdoorair_name.to_s,
278
+ controller_mechanical_ventilation_name: controller_mechanical_ventilation_name.to_s,
279
+ controller_mechanical_ventilation_demand_controlled_ventilation_status: controller_mechanical_ventilation_demand_controlled_ventilation_status.to_s,
280
+ controller_mechanical_ventilation_system_outdoor_air_method: controller_mechanical_ventilation_system_outdoor_air_method.to_s,
281
+ number_of_floors_served_by_air_loop: number_floors_served_by_air_loop.to_f,
282
+ number_of_thermal_zones_served_by_air_loop: number_of_thermal_zones_served_by_air_loop.to_f,
283
+ number_of_junction_boxes_for_air_loop: number_floors_served_by_air_loop.to_f,
284
+ total_cost_for_air_loop: total_cost_for_air_loop.to_f.round(2)
285
+ }
286
+ a += 1.0
287
+
288
+ end
289
+
290
+ # puts dcv_cost_total
291
+
292
+ end #if !hvac_component.empty?
293
+
294
+ end #air_loop.supplyComponents.each do |supply_component|
295
+
296
+ end #model.getAirLoopHVACs.each do |air_loop|
297
+
298
+ if a > 0.0
299
+ ###### Gather information for reporting
300
+ @costing_report['ventilation'][:demand_controlled_ventilation] << {
301
+ standards_number_of_building_stories: standards_number_of_stories.to_f,
302
+ nominal_floor_to_floor_height: nominal_flr2flr_height_m.to_f.round(2),
303
+ total_cost_for_all_dcvs: dcv_cost_total.to_f.round(2)
304
+ }
305
+ end
306
+
307
+
308
+ puts "\nDemand-controlled ventilation costing data successfully generated. Total DCV costs: $#{dcv_cost_total.round(2)}"
309
+
310
+ return dcv_cost_total
311
+ end #cost_audit_dcv(model, prototype_creator)
312
+
313
+
314
+ end