openstudio-standards 0.2.16.rc2 → 0.2.17.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAECollege.osm +117 -117
  3. data/data/standards/manage_OpenStudio_Standards.rb +31 -4
  4. data/data/standards/test_performance_expected_dd_results.csv +287 -287
  5. data/lib/openstudio-standards/btap/geometry.rb +1 -1
  6. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +354 -2
  7. data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +79 -0
  8. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +1 -1
  9. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +1 -1
  10. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +3376 -63
  11. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +12 -0
  12. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +3 -4
  13. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +1 -1
  14. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +168 -93
  15. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +2 -4
  16. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +2 -1
  17. data/lib/openstudio-standards/refs/references.rb +3 -0
  18. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +279 -6
  19. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +50 -2
  20. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +4 -0
  21. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -1
  22. data/lib/openstudio-standards/standards/Standards.Construction.rb +185 -3
  23. data/lib/openstudio-standards/standards/Standards.Fan.rb +14 -6
  24. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +1 -0
  25. data/lib/openstudio-standards/standards/Standards.Model.rb +1752 -384
  26. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +130 -9
  27. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +50 -3
  28. data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +44 -0
  29. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +27 -0
  30. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +543 -0
  31. data/lib/openstudio-standards/standards/Standards.Space.rb +665 -15
  32. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +141 -4
  33. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +2 -1
  34. data/lib/openstudio-standards/standards/Standards.Surface.rb +117 -0
  35. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +197 -49
  36. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +41 -0
  37. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +6 -8
  38. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +45 -45
  39. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +7 -7
  40. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +19 -19
  41. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +45 -45
  42. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +7 -7
  43. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +5 -5
  44. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +45 -45
  45. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +9 -9
  46. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +3 -3
  47. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +45 -45
  48. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +4 -4
  49. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +6 -6
  50. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/ashrae_90_1.schedules.json +45 -45
  51. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +5 -5
  52. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +6 -6
  53. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +5 -5
  54. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/ashrae_90_1.schedules.json +45 -45
  55. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +5 -5
  56. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +6 -6
  57. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +2 -2
  58. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +12 -0
  59. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +45 -45
  60. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +10 -10
  61. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +45 -45
  62. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +10 -10
  63. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +1 -0
  64. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +792 -0
  65. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctParallelPIUReheat.rb +10 -0
  66. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctVAVReheat.rb +31 -0
  67. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.BoilerHotWater.rb +91 -0
  68. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +84 -0
  69. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +145 -0
  70. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +106 -0
  71. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +71 -0
  72. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +194 -0
  73. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +120 -0
  74. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTower.rb +110 -0
  75. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTowerVariableSpeed.rb +5 -0
  76. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Fan.rb +73 -0
  77. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +5 -0
  78. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +5 -0
  79. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanVariableVolume.rb +24 -0
  80. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +5 -0
  81. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.HeatExchangerSensLat.rb +55 -0
  82. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +3045 -0
  83. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlanarSurface.rb +187 -0
  84. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +450 -0
  85. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +106 -0
  86. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +666 -0
  87. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Surface.rb +54 -0
  88. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ThermalZone.rb +168 -0
  89. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb +132 -0
  90. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +239 -0
  91. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +176 -0
  92. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +25 -0
  93. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.boilers.json +52 -0
  94. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.chillers.json +112 -0
  95. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.climate_zone_sets.json +210 -0
  96. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_properties.json +10384 -0
  97. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_sets.json +133 -0
  98. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.furnaces.json +43 -0
  99. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps.json +119 -0
  100. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps_heating.json +130 -0
  101. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_rejection.json +13 -0
  102. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.lpd_space_type.json +568 -0
  103. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.motors.json +264 -0
  104. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_baseline_hvac.json +439 -0
  105. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_constructions.json +685 -0
  106. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_economizers.json +213 -0
  107. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_ext_ltg.json +32 -0
  108. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_heat_type.json +136 -0
  109. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_hvac_bldg_type.json +32 -0
  110. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_interior_lighting.json +1837 -0
  111. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_swh_bldg_type.json +184 -0
  112. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_wwr_bldg_type.json +84 -0
  113. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.unitary_acs.json +148 -0
  114. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.water_heaters.json +157 -0
  115. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.climate_zone_sets.json +210 -0
  116. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +18329 -0
  117. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +340 -0
  118. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.materials.json +49924 -0
  119. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/baseline_building_rotation_exception.md +44 -0
  120. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/check_pump_power_and_control.md +71 -0
  121. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/dcv.md +68 -0
  122. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/dcv_implementation.png +0 -0
  123. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/elevators.md +14 -0
  124. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/exhaust_air_energy_recovery.md +36 -0
  125. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/f_c_factors.md +19 -0
  126. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/fan_power_credits.md +15 -0
  127. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/preheat_coil.md +59 -0
  128. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/pump_power_control.md +46 -0
  129. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/return_air_type.md +31 -0
  130. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_baseline_wwr.md +191 -0
  131. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_hw_and_chw_supply_water_temp_reset_control.md +24 -0
  132. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_num_boilers_chillers_towers.md +49 -0
  133. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_plug_load_measures.md +80 -0
  134. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_space_lpd.md +73 -0
  135. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/unenclosed_and_unconditioned_spaces.md +11 -0
  136. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/unmet_load_hours.md +20 -0
  137. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/vav_parallel_piu_terminals_fan_control.md +23 -0
  138. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/vav_terminals_min_flow_setpoint.md +21 -0
  139. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_airloop_hvac.csv +1 -0
  140. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_airloop_hvac_doas.csv +1 -0
  141. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_building.csv +1 -0
  142. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_design_specification_outdoor_air.csv +1 -0
  143. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_electric_equipment.csv +1 -0
  144. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_exterior_lights.csv +1 -0
  145. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_gas_equipment.csv +1 -0
  146. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_lights.csv +1 -0
  147. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_space.csv +1 -0
  148. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_spacetype.csv +1 -0
  149. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_thermal_zone.csv +1 -0
  150. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_connections.csv +1 -0
  151. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_equipment.csv +1 -0
  152. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_equipment_definition.csv +1 -0
  153. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_zone_hvac.csv +1 -0
  154. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_zone_infiltration.csv +1 -0
  155. data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +12 -0
  156. data/lib/openstudio-standards/standards/deer/data/deer.fans.json +12 -0
  157. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +1 -1
  158. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +1 -1
  159. data/lib/openstudio-standards/standards/necb/ECMS/data/unitary_acs.json +24 -11
  160. data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +13 -15
  161. data/lib/openstudio-standards/standards/necb/NECB2011/data/province_map.json +17 -0
  162. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +1 -1
  163. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +1 -1
  164. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +2 -2
  165. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +6 -5
  166. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +3 -2
  167. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +2 -3
  168. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +2 -2
  169. data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +33 -924
  170. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +15 -15
  171. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +135 -29
  172. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +16 -4
  173. data/lib/openstudio-standards/standards/necb/common/neb_end_use_prices.csv +40 -42
  174. data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +1 -1
  175. data/lib/openstudio-standards/standards/necb/common/space_type_upgrade_map.json +89 -89
  176. data/lib/openstudio-standards/utilities/array.rb +11 -0
  177. data/lib/openstudio-standards/utilities/logging.rb +48 -0
  178. data/lib/openstudio-standards/utilities/object_info.rb +20 -0
  179. data/lib/openstudio-standards/utilities/schedule_translator.rb +348 -0
  180. data/lib/openstudio-standards/utilities/sqlfile.rb +68 -0
  181. data/lib/openstudio-standards/version.rb +2 -2
  182. data/lib/openstudio-standards/weather/Weather.Model.rb +42 -55
  183. data/lib/openstudio-standards/weather/Weather.stat_file.rb +1 -1
  184. data/lib/openstudio-standards.rb +35 -1
  185. metadata +111 -6
  186. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  187. data/data/standards/OpenStudio_Standards-ashrae_90_1_28Jan2022.xlsx +0 -0
  188. data/data/standards/OpenStudio_Standards-ashrae_90_1_28_Jan2022_2.xlsx +0 -0
  189. data/data/standards/openstudio_standards_duplicates_log.csv +0 -143
@@ -452,7 +452,7 @@
452
452
  "heating_type": "Electric Resistance or None",
453
453
  "subcategory": "PTAC",
454
454
  "minimum_capacity": 0,
455
- "maximum_capacity": 7000.0,
455
+ "maximum_capacity": 7165.4,
456
456
  "start_date": "9/9/1919",
457
457
  "end_date": "2999-09-09T00:00:00+00:00",
458
458
  "minimum_seasonal_energy_efficiency_ratio": null,
@@ -466,7 +466,7 @@
466
466
  "cool_eir_ft": "DXCOOL-NECB2011-REF-COOLEIRFT",
467
467
  "cool_eir_fflow": "DXCOOL-NECB2011-REF-COOLEIRFFLOW",
468
468
  "cool_plf_fplr": "DXCOOL-NECB2011-REF-COOLPLFFPLR",
469
- "notes": "From NECB 2011, Table 5.2.12.1"
469
+ "notes": "From NECB 2020, Table 5.2.12.1.G"
470
470
  },
471
471
  {
472
472
 
@@ -474,7 +474,7 @@
474
474
  "heating_type": "All Other",
475
475
  "subcategory": "PTAC",
476
476
  "minimum_capacity": 0,
477
- "maximum_capacity": 7000.0,
477
+ "maximum_capacity": 7165.4,
478
478
  "start_date": "9/9/1919",
479
479
  "end_date": "2999-09-09T00:00:00+00:00",
480
480
  "minimum_seasonal_energy_efficiency_ratio": null,
@@ -488,15 +488,15 @@
488
488
  "cool_eir_ft": "DXCOOL-NECB2011-REF-COOLEIRFT",
489
489
  "cool_eir_fflow": "DXCOOL-NECB2011-REF-COOLEIRFFLOW",
490
490
  "cool_plf_fplr": "DXCOOL-NECB2011-REF-COOLPLFFPLR",
491
- "notes": "From NECB 2011, Table 5.2.12.1"
491
+ "notes": "From NECB 2020, Table 5.2.12.1.G"
492
492
  },
493
493
  {
494
494
 
495
495
  "cooling_type": "AirCooled",
496
496
  "heating_type": "Electric Resistance or None",
497
497
  "subcategory": "PTAC",
498
- "minimum_capacity": 7001.0,
499
- "maximum_capacity": 15000.0,
498
+ "minimum_capacity": 7165.5,
499
+ "maximum_capacity": 15013.2,
500
500
  "start_date": "9/9/1919",
501
501
  "end_date": "2999-09-09T00:00:00+00:00",
502
502
  "minimum_seasonal_energy_efficiency_ratio": null,
@@ -510,15 +510,15 @@
510
510
  "cool_eir_ft": "DXCOOL-NECB2011-REF-COOLEIRFT",
511
511
  "cool_eir_fflow": "DXCOOL-NECB2011-REF-COOLEIRFFLOW",
512
512
  "cool_plf_fplr": "DXCOOL-NECB2011-REF-COOLPLFFPLR",
513
- "notes": "From NECB 2011, Table 5.2.12.1"
513
+ "notes": "From NECB 2020, Table 5.2.12.1.G"
514
514
  },
515
515
  {
516
516
 
517
517
  "cooling_type": "AirCooled",
518
518
  "heating_type": "All Other",
519
519
  "subcategory": "PTAC",
520
- "minimum_capacity": 7001.0,
521
- "maximum_capacity": 15000.0,
520
+ "minimum_capacity": 7165.5,
521
+ "maximum_capacity": 15013.2,
522
522
  "start_date": "9/9/1919",
523
523
  "end_date": "2999-09-09T00:00:00+00:00",
524
524
  "minimum_seasonal_energy_efficiency_ratio": null,
@@ -532,14 +532,14 @@
532
532
  "cool_eir_ft": "DXCOOL-NECB2011-REF-COOLEIRFT",
533
533
  "cool_eir_fflow": "DXCOOL-NECB2011-REF-COOLEIRFFLOW",
534
534
  "cool_plf_fplr": "DXCOOL-NECB2011-REF-COOLPLFFPLR",
535
- "notes": "From NECB 2011, Table 5.2.12.1"
535
+ "notes": "From NECB 2020, Table 5.2.12.1.G"
536
536
  },
537
537
  {
538
538
 
539
539
  "cooling_type": "AirCooled",
540
540
  "heating_type": "Electric Resistance or None",
541
541
  "subcategory": "PTAC",
542
- "minimum_capacity": 15001.0,
542
+ "minimum_capacity": 15013.3,
543
543
  "maximum_capacity": 9999999.0,
544
544
  "start_date": "9/9/1919",
545
545
  "end_date": "2999-09-09T00:00:00+00:00",
@@ -554,14 +554,14 @@
554
554
  "cool_eir_ft": "DXCOOL-NECB2011-REF-COOLEIRFT",
555
555
  "cool_eir_fflow": "DXCOOL-NECB2011-REF-COOLEIRFFLOW",
556
556
  "cool_plf_fplr": "DXCOOL-NECB2011-REF-COOLPLFFPLR",
557
- "notes": "From NECB 2011, Table 5.2.12.1"
557
+ "notes": "From NECB 2020, Table 5.2.12.1.G"
558
558
  },
559
559
  {
560
560
 
561
561
  "cooling_type": "AirCooled",
562
562
  "heating_type": "All Other",
563
563
  "subcategory": "PTAC",
564
- "minimum_capacity": 15001.0,
564
+ "minimum_capacity": 15013.3,
565
565
  "maximum_capacity": 9999999.0,
566
566
  "start_date": "9/9/1919",
567
567
  "end_date": "2999-09-09T00:00:00+00:00",
@@ -576,10 +576,10 @@
576
576
  "cool_eir_ft": "DXCOOL-NECB2011-REF-COOLEIRFT",
577
577
  "cool_eir_fflow": "DXCOOL-NECB2011-REF-COOLEIRFFLOW",
578
578
  "cool_plf_fplr": "DXCOOL-NECB2011-REF-COOLPLFFPLR",
579
- "notes": "From NECB 2011, Table 5.2.12.1"
579
+ "notes": "From NECB 2020, Table 5.2.12.1.G"
580
580
  }
581
581
 
582
582
  ]
583
583
  }
584
584
  }
585
- }
585
+ }
@@ -6,12 +6,14 @@ class BTAPData
6
6
  attr_accessor :btap_data
7
7
 
8
8
  def initialize(model:, runner: nil, cost_result:, baseline_cost_equipment_total_cost_per_m_sq: -1.0,
9
- baseline_cost_utility_neb_total_cost_per_m_sq: -1.0, baseline_energy_eui_total_gj_per_m_sq: -1.0, qaqc:)
9
+ baseline_cost_utility_neb_total_cost_per_m_sq: -1.0, baseline_energy_eui_total_gj_per_m_sq: -1.0, qaqc:,
10
+ npv_start_year:, npv_end_year:, npv_discount_rate:)
10
11
  @model = model
11
12
  @error_warning = []
12
13
  # sets sql file.
13
14
  set_sql_file(model.sqlFile)
14
15
  @standard = Standard.build('NECB2011')
16
+ @standards_data = @standard.load_standards_database_new()
15
17
  @btap_data = {}
16
18
  @btap_results_version = 1.00
17
19
  @neb_prices_csv_file_name = File.join(__dir__, 'neb_end_use_prices.csv')
@@ -84,6 +86,8 @@ class BTAPData
84
86
  phius_performance_indicators(model)
85
87
  # The below method calculates energy performance indicators (i.e. TEDI and MEUI) as per BC Energy Step Code
86
88
  bc_energy_step_code_performance_indicators
89
+ # calculate net present value
90
+ net_present_value(npv_start_year, npv_end_year, npv_discount_rate) unless cost_result.nil?
87
91
 
88
92
  measure_metrics(qaqc)
89
93
  @btap_data
@@ -157,6 +161,7 @@ class BTAPData
157
161
  building_data['cost_equipment_heating_and_cooling_total_cost_per_m_sq'] = (cost_result['totals']['heating_and_cooling']) / @conditioned_floor_area_m_sq
158
162
  building_data['cost_equipment_shw_total_cost_per_m_sq'] = (cost_result['totals']['shw']) / @conditioned_floor_area_m_sq
159
163
  building_data['cost_equipment_ventilation_total_cost_per_m_sq'] = (cost_result['totals']['ventilation']) / @conditioned_floor_area_m_sq
164
+ building_data['cost_equipment_renewables_total_cost_per_m_sq'] = (cost_result['totals']['renewables']) / @conditioned_floor_area_m_sq
160
165
  building_data['cost_equipment_total_cost_per_m_sq'] = (cost_result['totals']['grand_total']) / @conditioned_floor_area_m_sq
161
166
  # building_data.merge!(cost_result['envelope'].select{|k,v| k!='construction_costs' && k!='total_envelope_cost'})
162
167
  # building_data.merge!(cost_result['shw'].select{|k,v| k!='shw_total'})
@@ -164,6 +169,120 @@ class BTAPData
164
169
  return building_data
165
170
  end
166
171
 
172
+ def net_present_value(npv_start_year, npv_end_year, npv_discount_rate)
173
+
174
+ # Find end year in the neb data
175
+ neb_header = CSV.read(@neb_prices_csv_file_name, headers: true).headers
176
+ neb_header.delete_if { |item| ["building_type", "province", "fuel_type"].include?(item) } # remove "building_type", "province", "fuel_type" from neb_header in order to have only years in neb_header
177
+ neb_header.map(&:to_f) #convert years to float
178
+ year_max = neb_header.max
179
+
180
+ # Convert a string to a float
181
+ if npv_start_year.instance_of?(String) && npv_start_year != 'NECB_Default' && npv_start_year != 'none'
182
+ npv_start_year = npv_start_year.to_f
183
+ end
184
+ if npv_end_year.instance_of?(String) && npv_end_year != 'NECB_Default' && npv_end_year != 'none'
185
+ npv_end_year = npv_end_year.to_f
186
+ end
187
+ if npv_discount_rate.instance_of?(String) && npv_discount_rate != 'NECB_Default' && npv_discount_rate != 'none'
188
+ npv_discount_rate = npv_discount_rate.to_f
189
+ end
190
+
191
+ # Set default npv_start_year as 2022, npv_end_year as 2041, npv_discount_rate as 3%
192
+ if npv_start_year == 'NECB_Default' || npv_start_year == nil || npv_start_year == 'none'
193
+ npv_start_year = 2022
194
+ end
195
+ if npv_end_year == 'NECB_Default' || npv_end_year == nil || npv_end_year == 'none'
196
+ npv_end_year = 2041
197
+ end
198
+ if npv_discount_rate == 'NECB_Default' || npv_discount_rate == nil || npv_discount_rate == 'none'
199
+ npv_discount_rate = 0.03
200
+ end
201
+
202
+ # Set npv_end_year as year_max if users' input > neb's end year
203
+ if npv_end_year > year_max.to_f
204
+ npv_end_year = year_max.to_f
205
+ warn "WARNING: Your npv_end_year for the calculation of net present value is larger than that in Canada Energy Regulator (CER) (i.e. #{year_max}). So, npv_end_year has been reset as #{year_max}."
206
+ end
207
+ # puts "npv_start_year is #{npv_start_year}"
208
+ # puts "npv_end_year is #{npv_end_year}"
209
+ # puts "npv_discount_rate is #{npv_discount_rate}"
210
+
211
+ # Get energy end-use prices (CER data from https://apps.cer-rec.gc.ca/ftrppndc/dflt.aspx?GoCTemplateCulture=en-CA)
212
+ @neb_prices_csv_file_name = "#{File.dirname(__FILE__)}/neb_end_use_prices.csv"
213
+
214
+ # Create a hash of the neb data.
215
+ neb_data = CSV.parse(File.read(@neb_prices_csv_file_name), headers: true, converters: :numeric).map(&:to_h)
216
+
217
+ # Find which province the proposed building is located in
218
+ building_type = 'Commercial'
219
+ geography_data = climate_data
220
+ province_abbreviation = geography_data['location_state_province_region']
221
+ province = @standards_data['province_map'][province_abbreviation]
222
+
223
+ # Note: If there is on-site energy generation (e.g. PV), it should be considered in the calculation of EUI for the calculation of energy use cost and NPV.
224
+ # To do so, it has been assumed that on-site energy generation is only for electricity.
225
+ # Electricity EUI of a building is re-calculated for NPV. It will be: ['energy_eui_electricity_gj_per_m_sq' - ('total_site_eui_gj_per_m_sq' - 'net_site_eui_gj_per_m_sq')]
226
+ # Note that if there is no on-site energy generation, 'total_site_eui_gj_per_m_sq' and 'net_site_eui_gj_per_m_sq' will be equal.
227
+ # Note: 'total_site_eui_gj_per_m_sq' is the gross energy consumed by the building (REF: https://unmethours.com/question/25416/what-is-the-difference-between-site-energy-and-source-energy/)
228
+ # Note: 'net_site_eui_gj_per_m_sq' is the final energy consumed by the building after accounting for on-site energy generations (e.g. PV) (REF: https://unmethours.com/question/25416/what-is-the-difference-between-site-energy-and-source-energy/)
229
+
230
+ # Calculate npv of electricity
231
+ onsite_elec_generation = @btap_data['total_site_eui_gj_per_m_sq'] - @btap_data['net_site_eui_gj_per_m_sq']
232
+ if onsite_elec_generation > 0.0
233
+ eui_elec = @btap_data['energy_eui_electricity_gj_per_m_sq'] - onsite_elec_generation
234
+ else
235
+ eui_elec = @btap_data['energy_eui_electricity_gj_per_m_sq']
236
+ end
237
+ # puts "onsite_elec_generation is #{onsite_elec_generation}"
238
+ # puts "eui_elec is #{eui_elec}"
239
+ row = neb_data.detect do |data|
240
+ (data['building_type'] == building_type) && (data['province'] == province) && (data['fuel_type'] == 'Electricity')
241
+ end
242
+ npv_elec = 0.0
243
+ year_index = 1.0
244
+ if eui_elec > 0.0
245
+ for year in npv_start_year.to_int..npv_end_year.to_int
246
+ # puts "year, #{year}, #{row[year.to_s]}, year_index, #{year_index}"
247
+ npv_elec += (eui_elec * row[year.to_s]) / (1+npv_discount_rate)**year_index
248
+ year_index += 1.0
249
+ end
250
+ end
251
+ # puts "npv_elec is #{npv_elec}"
252
+
253
+ # Calculate npv of natural gas
254
+ eui_ngas= @btap_data['energy_eui_natural_gas_gj_per_m_sq']
255
+ row = neb_data.detect do |data|
256
+ (data['building_type'] == building_type) && (data['province'] == province) && (data['fuel_type'] == 'Natural Gas')
257
+ end
258
+ npv_ngas = 0.0
259
+ year_index = 1.0
260
+ for year in npv_start_year.to_int..npv_end_year.to_int
261
+ npv_ngas += (eui_ngas * row[year.to_s]) / (1+npv_discount_rate)**year_index
262
+ year_index += 1.0
263
+ end
264
+ # puts "npv_ngas is #{npv_ngas}"
265
+
266
+ # Calculate npv of oil
267
+ eui_oil= @btap_data['energy_eui_additional_fuel_gj_per_m_sq']
268
+ row = neb_data.detect do |data|
269
+ (data['building_type'] == building_type) && (data['province'] == province) && (data['fuel_type'] == 'Oil')
270
+ end
271
+ npv_oil = 0.0
272
+ year_index = 1.0
273
+ for year in npv_start_year.to_int..npv_end_year.to_int
274
+ npv_oil += (eui_oil * row[year.to_s]) / (1+npv_discount_rate)**year_index
275
+ year_index += 1.0
276
+ end
277
+ # puts "npv_oil is #{npv_oil}"
278
+
279
+ # Calculate total npv
280
+ npv_total = @btap_data['cost_equipment_total_cost_per_m_sq'] + npv_elec + npv_ngas + npv_oil
281
+
282
+ @btap_data.merge!('npv_total_per_m_sq' => npv_total)
283
+
284
+ end
285
+
167
286
  def envelope(model)
168
287
  data = {}
169
288
  # Get OSM surface information
@@ -393,21 +512,8 @@ class BTAPData
393
512
 
394
513
  def utility(model)
395
514
  economics_data = {}
396
- provinces_names_map = { 'QC' => 'Quebec',
397
- 'NL' => 'Newfoundland and Labrador',
398
- 'NS' => 'Nova Scotia',
399
- 'PE' => 'Prince Edward Island',
400
- 'ON' => 'Ontario',
401
- 'MB' => 'Manitoba',
402
- 'SK' => 'Saskatchewan',
403
- 'AB' => 'Alberta',
404
- 'BC' => 'British Columbia',
405
- 'YT' => 'Yukon',
406
- 'NT' => 'Northwest Territories',
407
- 'NB' => 'New Brunswick',
408
- 'NU' => 'Nunavut' }
409
515
  building_type = 'Commercial'
410
- province = provinces_names_map[model.getWeatherFile.stateProvinceRegion]
516
+ province = @standards_data['province_map'][model.getWeatherFile.stateProvinceRegion]
411
517
  neb_eplus_fuel_map = {'Natural Gas' => {eplus_fuel_name: 'NaturalGas',
412
518
  eplus_table_name: 'Annual and Peak Values - Natural Gas',
413
519
  eplus_row_name: 'NaturalGas:Facility',
@@ -432,7 +538,7 @@ class BTAPData
432
538
  (data['province'] == province) &&
433
539
  (data['fuel_type'] == neb_fuel)
434
540
  end
435
- neb_fuel_cost = row['2020']
541
+ neb_fuel_cost = row['2021']
436
542
  fuel_consumption_gj = 0.0
437
543
  sql_command = "SELECT Value FROM tabulardatawithstrings
438
544
  WHERE ReportName='EnergyMeters'
@@ -1688,19 +1794,19 @@ class BTAPData
1688
1794
  { "province": 'SK', "fuel_type": 'Propane', "CO2eq Emissions (kg/MBtu)": 64.25, "CO2eq Emissions (g/m3)": 1548.00 },
1689
1795
  { "province": 'YT', "fuel_type": 'Propane', "CO2eq Emissions (kg/MBtu)": 64.25, "CO2eq Emissions (g/m3)": 1548.00 },
1690
1796
 
1691
- { "province": 'AB', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 231.54, "CO2eq Emissions (g/m3)": 790.0 },
1692
- { "province": 'BC', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 2.99, "CO2eq Emissions (g/m3)": 10.2 },
1693
- { "province": 'MB', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 0.56, "CO2eq Emissions (g/m3)": 1.9 },
1694
- { "province": 'NB', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 76.20, "CO2eq Emissions (g/m3)": 260.0 },
1695
- { "province": 'NL', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 11.72, "CO2eq Emissions (g/m3)": 40.0 },
1797
+ { "province": 'AB', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 202.23, "CO2eq Emissions (g/m3)": 690.0 },
1798
+ { "province": 'BC', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 3.84, "CO2eq Emissions (g/m3)": 13.1 },
1799
+ { "province": 'MB', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 0.41, "CO2eq Emissions (g/m3)": 1.4 },
1800
+ { "province": 'NB', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 84.99, "CO2eq Emissions (g/m3)": 290.0 },
1801
+ { "province": 'NL', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 7.91, "CO2eq Emissions (g/m3)": 27.0 },
1696
1802
  { "province": 'NT', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 46.89, "CO2eq Emissions (g/m3)": 160.0 },
1697
- { "province": 'NS', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 213.95, "CO2eq Emissions (g/m3)": 730.0 },
1698
- { "province": 'NU', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 222.74, "CO2eq Emissions (g/m3)": 760.0 },
1699
- { "province": 'ON', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 5.86, "CO2eq Emissions (g/m3)": 20.0 },
1700
- { "province": 'PE', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 76.20, "CO2eq Emissions (g/m3)": 260.0 },
1701
- { "province": 'QC', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 0.41, "CO2eq Emissions (g/m3)": 1.4 },
1702
- { "province": 'SK', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 211.04, "CO2eq Emissions (g/m3)": 720.0 },
1703
- { "province": 'YT', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 16.41, "CO2eq Emissions (g/m3)": 140.0 }
1803
+ { "province": 'NS', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 216.88, "CO2eq Emissions (g/m3)": 740.0 },
1804
+ { "province": 'NU', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 260.84, "CO2eq Emissions (g/m3)": 890.0 },
1805
+ { "province": 'ON', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 8.79, "CO2eq Emissions (g/m3)": 30.0 },
1806
+ { "province": 'PE', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 84.99, "CO2eq Emissions (g/m3)": 290.0 },
1807
+ { "province": 'QC', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 0.47, "CO2eq Emissions (g/m3)": 1.6 },
1808
+ { "province": 'SK', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 219.81, "CO2eq Emissions (g/m3)": 750.0 },
1809
+ { "province": 'YT', "fuel_type": 'Electricity', "CO2eq Emissions (kg/MBtu)": 23.15, "CO2eq Emissions (g/m3)": 79.0 }
1704
1810
  ]
1705
1811
  mbtu_to_gj = 1.05505585
1706
1812
  factor = ghg_data.detect { |item| (item[:province] == province) && (item[:fuel_type] == fuel_type) }
@@ -1805,7 +1911,7 @@ class BTAPData
1805
1911
 
1806
1912
  ### Get weather file name
1807
1913
  weather_file = model.weatherFile.get.path.get.to_s
1808
- weather_file = weather_file.split('/')[-1]
1914
+ # weather_file = weather_file.split('/')[-1]
1809
1915
 
1810
1916
  ### Cooling Degree Days, base 50degF
1811
1917
  cdd10_degree_c_days = BTAP::Environment::WeatherFile.new(weather_file).cdd10
@@ -76,6 +76,11 @@ class BTAPDatapoint
76
76
  @options[:btap_costing_git_revision] = Git::Revision.commit_short
77
77
  @options[:os_git_revision] = OpenstudioStandards.git_revision
78
78
 
79
+ # Get users' inputs for the parameters needed for the calculation af net present value
80
+ @npv_start_year = @options[:npv_start_year]
81
+ @npv_end_year = @options[:npv_end_year]
82
+ @npv_discount_rate = @options[:npv_discount_rate]
83
+
79
84
  # Save configuration to temp folder.
80
85
  File.open(File.join(@dp_temp_folder, 'run_options.yml'), 'w') { |file| file.write(@options.to_yaml) }
81
86
  begin
@@ -100,7 +105,11 @@ class BTAPDatapoint
100
105
  @standard.set_output_meters(model: model, output_meters: @options[:output_meters])
101
106
  climate_zone = 'NECB HDD Method'
102
107
  model.getYearDescription.setDayofWeekforStartDay('Sunday')
103
- @standard.model_add_design_days_and_weather_file(model, climate_zone, @options[:epw_file]) # Standards
108
+ epw_file = @options[:epw_file]
109
+ epw_dir = nil
110
+ local_epw_file_path = File.join(input_folder_cache,@options[:epw_file])
111
+ epw_dir = input_folder_cache if File.exists? local_epw_file_path
112
+ @standard.model_add_design_days_and_weather_file(model, climate_zone, epw_file, epw_dir) # Standards
104
113
  @standard.model_add_ground_temperatures(model, nil, climate_zone)
105
114
  else
106
115
  # Otherwise modify osm input with options.
@@ -228,7 +237,10 @@ class BTAPDatapoint
228
237
  @btap_data = BTAPData.new(model: model,
229
238
  runner: nil,
230
239
  cost_result: @cost_result,
231
- qaqc: @qaqc).btap_data
240
+ qaqc: @qaqc,
241
+ npv_start_year: @npv_start_year,
242
+ npv_end_year: @npv_end_year,
243
+ npv_discount_rate: @npv_discount_rate).btap_data
232
244
 
233
245
  # Write Files
234
246
  File.open(File.join(@dp_temp_folder, 'btap_data.json'), 'w') { |f| f.write(JSON.pretty_generate(@btap_data.sort.to_h, allow_nan: true)) }
@@ -270,8 +282,8 @@ class BTAPDatapoint
270
282
  end
271
283
 
272
284
  def s3_copy_file_to_s3(bucket_name:, source_file:, target_file:, n: 0)
273
- # require 'aws-sdk-core'
274
- # require 'aws-sdk-s3'
285
+ #require 'aws-sdk-core'
286
+ #require 'aws-sdk-s3'
275
287
  Aws.use_bundled_cert!
276
288
  s3_resource = Aws::S3::Resource.new(region: 'ca-central-1')
277
289