openstudio-standards 0.3.0 → 0.3.1.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/geometry/ASHRAELargeOffice.json +4 -4
- data/data/geometry/ASHRAESuperMarket.json +29 -38
- data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
- data/data/standards/metadata_units_OpenStudio_Standards-deer-ALL-comstockspace_types.csv +172 -0
- data/data/standards/test_performance_expected_dd_results.csv +1890 -2016
- data/lib/openstudio-standards/btap/analysis.rb +389 -389
- data/lib/openstudio-standards/btap/bridging.rb +2099 -0
- data/lib/openstudio-standards/btap/btap.model.rb +717 -717
- data/lib/openstudio-standards/btap/btap.rb +33 -30
- data/lib/openstudio-standards/btap/economics.rb +1163 -1163
- data/lib/openstudio-standards/btap/envelope.rb +4 -4
- data/lib/openstudio-standards/btap/equest.rb +2524 -2524
- data/lib/openstudio-standards/btap/fileio.rb +10 -0
- data/lib/openstudio-standards/btap/measures.rb +1515 -1515
- data/lib/openstudio-standards/btap/mpc.rb +554 -554
- data/lib/openstudio-standards/btap/reporting.rb +287 -287
- data/lib/openstudio-standards/btap/simmanager.rb +759 -759
- data/lib/openstudio-standards/btap/spaceloads.rb +439 -439
- data/lib/openstudio-standards/btap/spacetypes.rb +113 -113
- data/lib/openstudio-standards/btap/utilities.rb +134 -134
- data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +8 -83
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingWater.rb +3 -99
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +81 -75
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +7 -306
- data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +75 -98
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +41 -14
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +40 -14
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +7 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +1 -23
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +3 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +93 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +17 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +5 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +24 -4
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +41 -25
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +18 -0
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +13 -10
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +5 -3
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +11 -8
- data/lib/openstudio-standards/standards/Standards.Construction.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.Fan.rb +6 -6
- data/lib/openstudio-standards/standards/Standards.Model.rb +88 -66
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.Pump.rb +21 -19
- data/lib/openstudio-standards/standards/Standards.Space.rb +41 -36
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +510 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +18 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +410 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +510 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +18 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +410 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +510 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +18 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +410 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +510 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +18 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +410 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +12 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +5 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +4 -3
- data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.ThermalZone.rb +21 -0
- data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.ThermalZone.rb +21 -0
- data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.ThermalZone.rb +21 -0
- data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.ThermalZone.rb +21 -0
- data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.ThermalZone.rb +21 -0
- data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.ThermalZone.rb +21 -0
- data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/data/comstock_deer_2020.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +8 -0
- data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.ThermalZone.rb +21 -0
- data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/data/comstock_deer_2025.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/data/comstock_deer_2030.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/data/comstock_deer_2035.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/data/comstock_deer_2040.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/data/comstock_deer_2045.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/data/comstock_deer_2050.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/data/comstock_deer_2055.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/data/comstock_deer_2060.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/data/comstock_deer_2065.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/data/comstock_deer_2070.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/data/comstock_deer_2075.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.spc_typ.json +405 -405
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +1 -1
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +3 -1
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +3 -1
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +2 -2
- data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +233 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/unitary_acs.json +180 -0
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +6 -1
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +839 -290
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +102 -66
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +85 -8
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartment.osm +2483 -992
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +4 -336
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/MidriseApartment.osm +228 -231
- data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +12 -18
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_type_unit_definitions.txt +76 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +6 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +111 -24
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +1 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +3 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +64 -16
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +61 -17
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +128 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +252 -23
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +316 -20
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +3 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +38 -0
- data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +16 -24
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +48 -25
- data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +3 -3
- data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +36 -19
- data/lib/openstudio-standards/standards/necb/NECB2020/data/furnaces.json +19 -4
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps.json +20 -40
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +74 -36
- data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +0 -2
- data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +123 -56
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +124 -2
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +15 -2
- data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +1 -1
- data/lib/openstudio-standards/utilities/simulation.rb +1 -1
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +33 -1
- data/lib/openstudio-standards.rb +1 -0
- metadata +14 -121
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/weather/CAN_ON_Kingston.AP.718200_TMYx.2004-2018.ddy +0 -2342
- data/data/weather/CAN_ON_Kingston.AP.718200_TMYx.2004-2018.epw +0 -8768
- data/data/weather/CAN_ON_Kingston.AP.718200_TMYx.2004-2018.stat +0 -700
- data/data/weather/CAN_ON_Region.of.Waterloo.Intl.AP.713680_TMYx.2004-2018.ddy +0 -2342
- data/data/weather/CAN_ON_Region.of.Waterloo.Intl.AP.713680_TMYx.2004-2018.epw +0 -8768
- data/data/weather/CAN_ON_Region.of.Waterloo.Intl.AP.713680_TMYx.2004-2018.stat +0 -700
- data/data/weather/CAN_ON_Sarnia-Hadfield.AP.717040_TMYx.2004-2018.ddy +0 -2342
- data/data/weather/CAN_ON_Sarnia-Hadfield.AP.717040_TMYx.2004-2018.epw +0 -8768
- data/data/weather/CAN_ON_Sarnia-Hadfield.AP.717040_TMYx.2004-2018.stat +0 -700
- data/data/weather/CAN_QC_Gatineau.AP.716279_TMYx.2004-2018.ddy +0 -276
- data/data/weather/CAN_QC_Gatineau.AP.716279_TMYx.2004-2018.epw +0 -8768
- data/data/weather/CAN_QC_Gatineau.AP.716279_TMYx.2004-2018.stat +0 -611
- data/data/weather/CAN_QC_Granby.710367_TMYx.2004-2018.ddy +0 -276
- data/data/weather/CAN_QC_Granby.710367_TMYx.2004-2018.epw +0 -8768
- data/data/weather/CAN_QC_Granby.710367_TMYx.2004-2018.stat +0 -610
- data/data/weather/CAN_QC_Sherbrooke.AP.716100_TMYx.2004-2018.ddy +0 -2342
- data/data/weather/CAN_QC_Sherbrooke.AP.716100_TMYx.2004-2018.epw +0 -8768
- data/data/weather/CAN_QC_Sherbrooke.AP.716100_TMYx.2004-2018.stat +0 -700
- data/data/weather/CAN_QC_Trois.Rivieres.717240_TMYx.2004-2018.ddy +0 -2342
- data/data/weather/CAN_QC_Trois.Rivieres.717240_TMYx.2004-2018.epw +0 -8768
- data/data/weather/CAN_QC_Trois.Rivieres.717240_TMYx.2004-2018.stat +0 -700
- data/lib/openstudio-standards/hvac_sizing/Siz.AirConditionerVariableRefrigerantFlow.rb +0 -81
- data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVACUnitaryHeatCoolVAVChngByp.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVACUnitaryHeatPumpAirToAir.rb +0 -69
- data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.rb +0 -178
- data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVACUnitarySystem.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctConstVolCooledBeam.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctConstVolFourPipeInduction.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctConstVolReheat.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctParallelPIUReheat.rb +0 -67
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctSeriesPIUReheat.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctUncontrolled.rb +0 -30
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVHeatAndCoolNoReheat.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVHeatAndCoolReheat.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVNoReheat.rb +0 -68
- data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVReheat.rb +0 -68
- data/lib/openstudio-standards/hvac_sizing/Siz.BoilerHotWater.rb +0 -42
- data/lib/openstudio-standards/hvac_sizing/Siz.BoilerSteam.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ChillerElectricEIR.rb +0 -58
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXMultiSpeed.rb +0 -171
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXSingleSpeed.rb +0 -56
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb +0 -89
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXVariableRefrigerantFlow.rb +0 -50
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -69
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingDXMultiSpeed.rb +0 -120
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingDXSingleSpeed.rb +0 -56
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingDXVariableRefrigerantFlow.rb +0 -41
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingDesuperheater.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingElectric.rb +0 -30
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingGas.rb +0 -30
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingGasMultiStage.rb +0 -68
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingWater.rb +0 -61
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -57
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilWaterHeatingDesuperheater.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +0 -59
- data/lib/openstudio-standards/hvac_sizing/Siz.ControllerWaterCoil.rb +0 -49
- data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerSingleSpeed.rb +0 -90
- data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerTwoSpeed.rb +0 -83
- data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerVariableSpeed.rb +0 -57
- data/lib/openstudio-standards/hvac_sizing/Siz.DistrictCooling.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.DistrictHeating.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.EvaporativeCoolerDirectResearchSpecial.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.EvaporativeCoolerIndirectResearchSpecial.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.EvaporativeFluidCoolerSingleSpeed.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.FanConstantVolume.rb +0 -29
- data/lib/openstudio-standards/hvac_sizing/Siz.FanOnOff.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.FanVariableVolume.rb +0 -29
- data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsConstantSpeed.rb +0 -55
- data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsVariableSpeed.rb +0 -55
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatExchangerAirToAirSensibleAndLatent.rb +0 -38
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatExchangerFluidToFluid.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.HumidifierSteamElectric.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.PlantLoop.rb +0 -42
- data/lib/openstudio-standards/hvac_sizing/Siz.PumpConstantSpeed.rb +0 -59
- data/lib/openstudio-standards/hvac_sizing/Siz.PumpVariableSpeed.rb +0 -59
- data/lib/openstudio-standards/hvac_sizing/Siz.SizingSystem.rb +0 -48
- data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +0 -16
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACBaseboardConvectiveElectric.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACBaseboardConvectiveWater.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACFourPipeFanCoil.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACHighTemperatureRadiant.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACIdealLoadsAirSystem.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACLowTempRadiantConstFlow.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACLowTempRadiantVarFlow.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACLowTemperatureRadiantElectric.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACPackagedTerminalAirConditioner.rb +0 -88
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACPackagedTerminalHeatPump.rb +0 -88
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACTerminalUnitVariableRefrigerantFlow.rb +0 -104
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACUnitHeater.rb +0 -27
- data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACWaterToAirHeatPump.rb +0 -27
@@ -7,7 +7,7 @@ class NECB2020
|
|
7
7
|
#
|
8
8
|
# @return [Bool] true if successful, false if not
|
9
9
|
#
|
10
|
-
#
|
10
|
+
# NECB2020 uses a different procedure calculate gas water heater efficiencies (compared to previous NECB)
|
11
11
|
#
|
12
12
|
def water_heater_mixed_apply_efficiency(water_heater_mixed)
|
13
13
|
# Get the capacity of the water heater
|
@@ -34,7 +34,7 @@ class NECB2020
|
|
34
34
|
volume_m3 = volume_m3.get
|
35
35
|
end
|
36
36
|
volume_gal = OpenStudio.convert(volume_m3, 'm^3', 'gal').get
|
37
|
-
|
37
|
+
volume_litre = OpenStudio.convert(volume_m3, 'm^3', 'L').get
|
38
38
|
# Get the heater fuel type
|
39
39
|
fuel_type = water_heater_mixed.heaterFuelType
|
40
40
|
unless fuel_type == 'NaturalGas' || fuel_type == 'Electricity' || fuel_type == 'FuelOilNo2'
|
@@ -46,21 +46,24 @@ class NECB2020
|
|
46
46
|
# Calculate the energy factor (EF)
|
47
47
|
# From PNNL http://www.energycodes.gov/sites/default/files/documents/PrototypeModelEnhancements_2014_0.pdf
|
48
48
|
# Appendix A: Service Water Heating
|
49
|
-
|
49
|
+
# and modified by PCF 1630 as noted below.
|
50
|
+
|
50
51
|
water_heater_eff = nil
|
51
52
|
ua_btu_per_hr_per_f = nil
|
52
53
|
sl_btu_per_hr = nil
|
54
|
+
q_load_btu_per_hr = nil
|
55
|
+
uef = nil
|
53
56
|
case fuel_type
|
54
57
|
when 'Electricity'
|
55
|
-
|
58
|
+
volume_litre_per_s = volume_m3 * 1000
|
56
59
|
if capacity_btu_per_hr <= OpenStudio.convert(12, 'kW', 'Btu/hr').get
|
57
60
|
# Fixed water heater efficiency per PNNL
|
58
61
|
water_heater_eff = 1
|
59
62
|
# Calculate the max allowable standby loss (SL)
|
60
|
-
sl_w = if
|
61
|
-
40 + 0.2 *
|
63
|
+
sl_w = if volume_litre_per_s < 270
|
64
|
+
40 + 0.2 * volume_litre_per_s # assume bottom inlet
|
62
65
|
else
|
63
|
-
0.472 *
|
66
|
+
0.472 * volume_litre_per_s - 33.5
|
64
67
|
# assume bottom inlet
|
65
68
|
end
|
66
69
|
sl_btu_per_hr = OpenStudio.convert(sl_w, 'W', 'Btu/hr').get
|
@@ -68,73 +71,137 @@ class NECB2020
|
|
68
71
|
# Fixed water heater efficiency per PNNL
|
69
72
|
water_heater_eff = 1
|
70
73
|
# Calculate the max allowable standby loss (SL) # use this - NECB does not give SL calculation for cap > 12 kW
|
71
|
-
|
74
|
+
sl_w = 0.3 + 102.2/volume_litre_per_s
|
75
|
+
sl_btu_per_hr = OpenStudio.convert(sl_w, 'W', 'Btu/hr').get
|
72
76
|
end
|
73
77
|
# Calculate the skin loss coefficient (UA)
|
74
78
|
ua_btu_per_hr_per_f = sl_btu_per_hr / 70
|
75
79
|
when 'NaturalGas'
|
76
|
-
|
77
|
-
|
78
|
-
|
80
|
+
# Performance requirements from NECB2020 Table 6.2.2.1 Gas-fired storage type
|
81
|
+
|
82
|
+
# Performance requirement based on FHR and volume
|
83
|
+
# Water heater parameters derived using the procedure described by:
|
84
|
+
# Maguire, J., & Roberts, D. (2020). DERIVING SIMULATION PARAMETERS FOR STORAGE-TYPE WATER HEATERS
|
85
|
+
# USING RATINGS DATA PRODUCED FROM THE UNIFORM ENERGY FACTOR TEST PROCEDURE. 2020 Building Performance
|
86
|
+
# Analysis Conference and SimBuild co-organized by ASHRAE and IBPSA-USA (pp. 325-331). Chicago: ASHRAE.
|
87
|
+
# https://www.ashrae.org/file%20library/conferences/specialty%20conferences/2020%20building%20performance/papers/d-bsc20-c039.pdf
|
88
|
+
#
|
89
|
+
# AND
|
90
|
+
#
|
91
|
+
# PNNL http://www.energycodes.gov/sites/default/files/documents/PrototypeModelEnhancements_2014_0.pdf
|
92
|
+
|
93
|
+
# Assume fhr = peak demand flow
|
94
|
+
tank_param = auto_size_shw_capacity(model:water_heater_mixed.model, shw_scale: 'NECB_Default')
|
95
|
+
fhr_L_per_hr = tank_param['loop_peak_flow_rate_SI']
|
96
|
+
fhr_L_per_hr = fhr_L_per_hr * 3600000
|
97
|
+
if capacity_w <= 22000 and volume_litre >= 76 and volume_litre < 208
|
98
|
+
if fhr_L_per_hr < 68
|
99
|
+
uef = 0.3456 - 0.00053*volume_litre
|
100
|
+
q_load_btu_per_hr = 5561
|
101
|
+
volume_drawn_gal = 10
|
102
|
+
elsif fhr_L_per_hr >= 68 and fhr_L_per_hr < 193
|
103
|
+
uef = 0.5982 - 0.00050*volume_litre
|
104
|
+
q_load_btu_per_hr = 21131
|
105
|
+
volume_drawn_gal = 38
|
106
|
+
elsif fhr_L_per_hr >= 193 and fhr_L_per_hr < 284
|
107
|
+
uef = 0.6483 - 0.00045*volume_litre
|
108
|
+
q_load_btu_per_hr = 30584
|
109
|
+
volume_drawn_gal = 55
|
110
|
+
elsif fhr_L_per_hr >= 284
|
111
|
+
uef = 0.6920 - 0.00034*volume_litre
|
112
|
+
q_load_btu_per_hr = 46710
|
113
|
+
volume_drawn_gal = 84
|
114
|
+
end
|
115
|
+
|
116
|
+
# Assume burner efficiency (PNNL)
|
79
117
|
water_heater_eff = 0.82
|
80
|
-
|
81
|
-
#
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
uef = 0.
|
90
|
-
|
118
|
+
|
119
|
+
# Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
|
120
|
+
q_load_btu = volume_drawn_gal*8.30074*0.99826*(125-58) #water properties at 91.5F
|
121
|
+
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
122
|
+
re = water_heater_eff + q_load_btu*(uef-water_heater_eff)/(24*capacity_btu_per_hr*uef)
|
123
|
+
ua_btu_per_hr_per_f = (water_heater_eff-re)*capacity_btu_per_hr/(125-67.5)
|
124
|
+
|
125
|
+
elsif capacity_w <= 22000 and volume_litre >= 208 and volume_litre < 380
|
126
|
+
if fhr_L_per_hr < 68
|
127
|
+
uef = 0.6470 - 0.00016*volume_litre
|
128
|
+
q_load_btu_per_hr = 5561
|
129
|
+
volume_drawn_gal = 10
|
130
|
+
elsif fhr_L_per_hr >= 68 and fhr_L_per_hr < 193
|
131
|
+
uef = 0.7689 - 0.00013*volume_litre
|
132
|
+
q_load_btu_per_hr = 21131
|
133
|
+
volume_drawn_gal = 38
|
134
|
+
elsif fhr_L_per_hr >= 193 and fhr_L_per_hr < 284
|
135
|
+
uef = 0.7897 - 0.00011*volume_litre
|
136
|
+
q_load_btu_per_hr = 30584
|
137
|
+
volume_drawn_gal = 55
|
138
|
+
elsif fhr_L_per_hr >= 284
|
139
|
+
uef = 0.8072 - 0.00008*volume_litre
|
140
|
+
q_load_btu_per_hr = 46710
|
141
|
+
volume_drawn_gal = 84
|
91
142
|
end
|
92
|
-
|
93
|
-
#
|
94
|
-
|
95
|
-
|
96
|
-
#
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
re =
|
143
|
+
|
144
|
+
# Assume burner efficiency (PNNL)
|
145
|
+
water_heater_eff = 0.82
|
146
|
+
|
147
|
+
# Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
|
148
|
+
q_load_btu = volume_drawn_gal*8.30074*0.99826*(125-58) #water properties at 91.5F
|
149
|
+
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
150
|
+
# Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
|
151
|
+
re = water_heater_eff + q_load_btu*(uef-water_heater_eff)/(24*capacity_btu_per_hr*uef)
|
152
|
+
ua_btu_per_hr_per_f = (water_heater_eff-re)*capacity_btu_per_hr/(125-67.5)
|
153
|
+
|
154
|
+
elsif capacity_w > 22000 and capacity_w <= 30500 and volume_litre <= 454
|
155
|
+
# NOTE: volume_litre 454L in this case, refers to manufacturer stated volume.
|
156
|
+
# Assume manufacturer rated volume = actual tank volume (value used in EnergyPlus)
|
101
157
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
# This capacity band was introduced in PCF 1630
|
107
|
-
elsif capacity_btu_per_hr > 75_000 and capacity_btu_per_hr < 103977 and volume_l < 454
|
158
|
+
uef = 0.8107 - 0.00021*volume_litre
|
159
|
+
|
160
|
+
# Assume burner efficiency (PNNL)
|
108
161
|
water_heater_eff = 0.82
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
162
|
+
|
163
|
+
# Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
|
164
|
+
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
165
|
+
if fhr_L_per_hr < 68
|
166
|
+
q_load_btu_per_hr = 5561
|
167
|
+
volume_drawn_gal = 10
|
168
|
+
elsif fhr_L_per_hr >= 68 and fhr_L_per_hr < 193
|
169
|
+
q_load_btu_per_hr = 21131
|
170
|
+
volume_drawn_gal = 38
|
171
|
+
elsif fhr_L_per_hr >= 193 and fhr_L_per_hr < 284
|
172
|
+
q_load_btu_per_hr = 30584
|
173
|
+
volume_drawn_gal = 55
|
174
|
+
elsif fhr_L_per_hr >= 284
|
175
|
+
q_load_btu_per_hr = 46710
|
176
|
+
volume_drawn_gal = 84
|
177
|
+
end
|
178
|
+
q_load_btu = volume_drawn_gal*8.30074*0.99826*(125-58) #water properties at 91.5F
|
179
|
+
|
180
|
+
# Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
|
181
|
+
re = water_heater_eff + q_load_btu*(uef-water_heater_eff)/(24*capacity_btu_per_hr*uef)
|
182
|
+
ua_btu_per_hr_per_f = (water_heater_eff-re)*capacity_btu_per_hr/(125-67.5)
|
113
183
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
# Thermal efficiency (PCF 1630 update)
|
184
|
+
else # all other water heaters
|
185
|
+
capacity_kw = capacity_w/1000
|
186
|
+
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
187
|
+
# thermal efficiency (NECB2020)
|
119
188
|
et = 0.9
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
ua_btu_per_hr_per_f =
|
124
|
-
|
125
|
-
water_heater_eff = (ua_btu_per_hr_per_f * 70 + capacity_btu_per_hr * et) / capacity_btu_per_hr
|
189
|
+
# maximum standby losses
|
190
|
+
sl_w = 0.84*(1.25*capacity_kw + 16.57*(volume_litre**0.5))
|
191
|
+
sl_btu_per_hr = OpenStudio.convert(sl_w, 'W', 'Btu/hr').get
|
192
|
+
ua_btu_per_hr_per_f = sl_btu_per_hr*et / 70
|
193
|
+
water_heater_eff = (ua_btu_per_hr_per_f*70 + capacity_btu_per_hr*et)/capacity_btu_per_hr
|
126
194
|
end
|
127
195
|
end
|
128
196
|
|
129
197
|
# Convert to SI
|
130
|
-
|
131
|
-
|
198
|
+
ua_w_per_k = OpenStudio.convert(ua_btu_per_hr_per_f, 'Btu/hr*R', 'W/K').get
|
132
199
|
# Set the water heater properties
|
133
200
|
# Efficiency
|
134
201
|
water_heater_mixed.setHeaterThermalEfficiency(water_heater_eff)
|
135
202
|
# Skin loss
|
136
|
-
water_heater_mixed.setOffCycleLossCoefficienttoAmbientTemperature(
|
137
|
-
water_heater_mixed.setOnCycleLossCoefficienttoAmbientTemperature(
|
203
|
+
water_heater_mixed.setOffCycleLossCoefficienttoAmbientTemperature(ua_w_per_k)
|
204
|
+
water_heater_mixed.setOnCycleLossCoefficienttoAmbientTemperature(ua_w_per_k)
|
138
205
|
# TODO: Parasitic loss (pilot light)
|
139
206
|
# PNNL document says pilot lights were removed, but IDFs
|
140
207
|
# still have the on/off cycle parasitic fuel consumptions filled in
|
@@ -51,6 +51,7 @@ class BTAPData
|
|
51
51
|
@btap_data.merge!(energy_peak_data)
|
52
52
|
@btap_data.merge!(utility(model))
|
53
53
|
@btap_data.merge!(unmet_hours(model))
|
54
|
+
@btap_data.merge!outdoor_air_data(model)
|
54
55
|
|
55
56
|
# Data in tables...
|
56
57
|
@btap_data.merge!('measures_data_table' => measures_data_table(runner)) unless runner.nil?
|
@@ -294,7 +295,7 @@ class BTAPData
|
|
294
295
|
outdoor_roofs = BTAP::Geometry::Surfaces.filter_by_surface_types(outdoor_surfaces, 'RoofCeiling')
|
295
296
|
outdoor_floors = BTAP::Geometry::Surfaces.filter_by_surface_types(outdoor_surfaces, 'Floor')
|
296
297
|
outdoor_subsurfaces = BTAP::Geometry::Surfaces.get_subsurfaces_from_surfaces(outdoor_surfaces)
|
297
|
-
ground_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, 'Ground')
|
298
|
+
ground_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, ['Ground', 'Foundation'])
|
298
299
|
ground_walls = BTAP::Geometry::Surfaces.filter_by_surface_types(ground_surfaces, 'Wall')
|
299
300
|
ground_roofs = BTAP::Geometry::Surfaces.filter_by_surface_types(ground_surfaces, 'RoofCeiling')
|
300
301
|
ground_floors = BTAP::Geometry::Surfaces.filter_by_surface_types(ground_surfaces, 'Floor')
|
@@ -402,7 +403,7 @@ class BTAPData
|
|
402
403
|
def envelope_exterior_surface_table
|
403
404
|
surfaces = @model.getSurfaces.sort
|
404
405
|
outdoor_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, 'Outdoors')
|
405
|
-
ground_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, 'Ground')
|
406
|
+
ground_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, ['Ground', 'Foundation'])
|
406
407
|
exterior_opaque_surfaces = outdoor_surfaces + ground_surfaces
|
407
408
|
# outdoor_surfaces.each { |surface| puts surface.name}
|
408
409
|
# get surface table from sql
|
@@ -1408,6 +1409,7 @@ class BTAPData
|
|
1408
1409
|
'energy_eui_natural_gas_gj_per_m_sq',
|
1409
1410
|
'energy_eui_pumps_gj_per_m_sq',
|
1410
1411
|
'energy_eui_total_gj_per_m_sq',
|
1412
|
+
'energy_eui_heat recovery_gj_per_m_sq',
|
1411
1413
|
'energy_eui_water systems_gj_per_m_sq'].each { |end_use| data[end_use] = 0.0 }
|
1412
1414
|
# Get E+ End use table from sql
|
1413
1415
|
table = get_sql_table_to_json(@model, 'AnnualBuildingUtilityPerformanceSummary', 'Entire Facility', 'End Uses')['table']
|
@@ -1495,6 +1497,126 @@ class BTAPData
|
|
1495
1497
|
return service_water_heating
|
1496
1498
|
end
|
1497
1499
|
|
1500
|
+
# The below method (outdoor_air_data extract a couple of outputs related to outdoor air from the .html output file)
|
1501
|
+
def outdoor_air_data(model)
|
1502
|
+
# Store outdoor air data
|
1503
|
+
outdoor_air_data = {}
|
1504
|
+
#===============================================================================================================
|
1505
|
+
airloops_total_outdoor_air_mechanical_ventilation_m3 = 0.0
|
1506
|
+
airloops_total_outdoor_air_natural_ventilation_m3 = 0.0
|
1507
|
+
zones_total_outdoor_air_mechanical_ventilation_m3 = 0.0
|
1508
|
+
zones_total_outdoor_air_natural_ventilation_m3 = 0.0
|
1509
|
+
zones_total_outdoor_air_infiltration_m3 = 0.0
|
1510
|
+
#===============================================================================================================
|
1511
|
+
# Total outdoor air by airLoop
|
1512
|
+
model.getAirLoopHVACs.sort.each do |air_loop|
|
1513
|
+
air_loop_name = air_loop.name.get.upcase
|
1514
|
+
|
1515
|
+
# Mechanical ventilation of all airloops
|
1516
|
+
command = "SELECT Value
|
1517
|
+
FROM TabularDataWithStrings
|
1518
|
+
WHERE ReportName='OutdoorAirDetails'
|
1519
|
+
AND ReportForString='Entire Facility'
|
1520
|
+
AND TableName='Total Outdoor Air by AirLoop'
|
1521
|
+
AND RowName='#{air_loop_name}'
|
1522
|
+
AND ColumnName='Mechanical Ventilation'
|
1523
|
+
AND Units='m3'"
|
1524
|
+
airloops_total_outdoor_air_mechanical_ventilation_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
|
1525
|
+
|
1526
|
+
# Natural ventilation of all airloops
|
1527
|
+
command = "SELECT Value
|
1528
|
+
FROM TabularDataWithStrings
|
1529
|
+
WHERE ReportName='OutdoorAirDetails'
|
1530
|
+
AND ReportForString='Entire Facility'
|
1531
|
+
AND TableName='Total Outdoor Air by AirLoop'
|
1532
|
+
AND RowName='#{air_loop_name}'
|
1533
|
+
AND ColumnName='Natural Ventilation'
|
1534
|
+
AND Units='m3'"
|
1535
|
+
airloops_total_outdoor_air_natural_ventilation_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
|
1536
|
+
|
1537
|
+
end
|
1538
|
+
|
1539
|
+
# Not-normalized mechanical/natural.
|
1540
|
+
outdoor_air_data['airloops_total_outdoor_air_mechanical_ventilation_m3'] = airloops_total_outdoor_air_mechanical_ventilation_m3
|
1541
|
+
outdoor_air_data['airloops_total_outdoor_air_natural_ventilation_m3'] = airloops_total_outdoor_air_natural_ventilation_m3
|
1542
|
+
|
1543
|
+
# Normalized mechanical/natural: ACH (air changes per hour)
|
1544
|
+
outdoor_air_data['airloops_total_outdoor_air_mechanical_ventilation_ach_1_per_hr'] = airloops_total_outdoor_air_mechanical_ventilation_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
|
1545
|
+
outdoor_air_data['airloops_total_outdoor_air_natural_ventilation_ach_1_per_hr'] = airloops_total_outdoor_air_natural_ventilation_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
|
1546
|
+
|
1547
|
+
# Normalized mechanical/natural: normalized by conditioned floor area
|
1548
|
+
outdoor_air_data['airloops_total_outdoor_air_mechanical_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2'] = airloops_total_outdoor_air_mechanical_ventilation_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
|
1549
|
+
outdoor_air_data['airloops_total_outdoor_air_natural_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2'] = airloops_total_outdoor_air_natural_ventilation_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
|
1550
|
+
|
1551
|
+
# Normalized mechanical/natural: normalized by exterior area
|
1552
|
+
outdoor_air_data['airloops_total_outdoor_air_mechanical_ventilation_flow_per_exterior_area_m3_per_s_m2'] = airloops_total_outdoor_air_mechanical_ventilation_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
|
1553
|
+
outdoor_air_data['airloops_total_outdoor_air_natural_ventilation_flow_per_exterior_area_m3_per_s_m2'] = airloops_total_outdoor_air_natural_ventilation_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
|
1554
|
+
|
1555
|
+
#===============================================================================================================
|
1556
|
+
# Total outdoor air by zone
|
1557
|
+
total_outdoor_air_mechanical_ventilation_zones_m3 = 0.0
|
1558
|
+
model.getThermalZones.sort.each do |zone|
|
1559
|
+
zone_name = zone.name.get.upcase
|
1560
|
+
|
1561
|
+
# Mechanical ventilation of all zones
|
1562
|
+
command = "SELECT Value
|
1563
|
+
FROM TabularDataWithStrings
|
1564
|
+
WHERE ReportName='OutdoorAirDetails'
|
1565
|
+
AND ReportForString='Entire Facility'
|
1566
|
+
AND TableName='Total Outdoor Air by Zone'
|
1567
|
+
AND RowName='#{zone_name}'
|
1568
|
+
AND ColumnName='Mechanical Ventilation'
|
1569
|
+
AND Units='m3'"
|
1570
|
+
zones_total_outdoor_air_mechanical_ventilation_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
|
1571
|
+
|
1572
|
+
# Natural ventilation of all zones
|
1573
|
+
command = "SELECT Value
|
1574
|
+
FROM TabularDataWithStrings
|
1575
|
+
WHERE ReportName='OutdoorAirDetails'
|
1576
|
+
AND ReportForString='Entire Facility'
|
1577
|
+
AND TableName='Total Outdoor Air by Zone'
|
1578
|
+
AND RowName='#{zone_name}'
|
1579
|
+
AND ColumnName='Natural Ventilation'
|
1580
|
+
AND Units='m3'"
|
1581
|
+
zones_total_outdoor_air_natural_ventilation_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
|
1582
|
+
|
1583
|
+
# Infiltration of all zones
|
1584
|
+
command = "SELECT Value
|
1585
|
+
FROM TabularDataWithStrings
|
1586
|
+
WHERE ReportName='OutdoorAirDetails'
|
1587
|
+
AND ReportForString='Entire Facility'
|
1588
|
+
AND TableName='Total Outdoor Air by Zone'
|
1589
|
+
AND RowName='#{zone_name}'
|
1590
|
+
AND ColumnName='Infiltration'
|
1591
|
+
AND Units='m3'"
|
1592
|
+
zones_total_outdoor_air_infiltration_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
|
1593
|
+
|
1594
|
+
end
|
1595
|
+
|
1596
|
+
# Not-normalized mechanical/natural/infiltration.
|
1597
|
+
outdoor_air_data['zones_total_outdoor_air_mechanical_ventilation_m3'] = zones_total_outdoor_air_mechanical_ventilation_m3
|
1598
|
+
outdoor_air_data['zones_total_outdoor_air_natural_ventilation_m3'] = zones_total_outdoor_air_natural_ventilation_m3
|
1599
|
+
outdoor_air_data['zones_total_outdoor_air_infiltration_m3'] = zones_total_outdoor_air_infiltration_m3
|
1600
|
+
|
1601
|
+
# Normalized mechanical/natural/infiltration: ACH (air changes per hour)
|
1602
|
+
outdoor_air_data['zones_total_outdoor_air_mechanical_ventilation_ach_1_per_hr'] = zones_total_outdoor_air_mechanical_ventilation_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
|
1603
|
+
outdoor_air_data['zones_total_outdoor_air_natural_ventilation_ach_1_per_hr'] = zones_total_outdoor_air_natural_ventilation_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
|
1604
|
+
outdoor_air_data['zones_total_outdoor_air_infiltration_ach_1_per_hr'] = zones_total_outdoor_air_infiltration_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
|
1605
|
+
|
1606
|
+
# Normalized mechanical/natural/infiltration: normalized by conditioned floor area
|
1607
|
+
outdoor_air_data['zones_total_outdoor_air_mechanical_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2'] = zones_total_outdoor_air_mechanical_ventilation_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
|
1608
|
+
outdoor_air_data['zones_total_outdoor_air_natural_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2'] = zones_total_outdoor_air_natural_ventilation_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
|
1609
|
+
outdoor_air_data['zones_total_outdoor_air_infiltration_flow_per_conditioned_floor_area_m3_per_s_m2'] = zones_total_outdoor_air_infiltration_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
|
1610
|
+
|
1611
|
+
# Normalized mechanical/natural/infiltration: normalized by exterior area
|
1612
|
+
outdoor_air_data['zones_total_outdoor_air_mechanical_ventilation_flow_per_exterior_area_m3_per_s_m2'] = zones_total_outdoor_air_mechanical_ventilation_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
|
1613
|
+
outdoor_air_data['zones_total_outdoor_air_natural_ventilation_flow_per_exterior_area_m3_per_s_m2'] = zones_total_outdoor_air_natural_ventilation_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
|
1614
|
+
outdoor_air_data['zones_total_outdoor_air_infiltration_flow_per_exterior_area_m3_per_s_m2'] = zones_total_outdoor_air_infiltration_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
|
1615
|
+
#===============================================================================================================
|
1616
|
+
|
1617
|
+
return outdoor_air_data
|
1618
|
+
end
|
1619
|
+
|
1498
1620
|
def sql_data_tables(model)
|
1499
1621
|
puts 'Getting SQL Data into json...'
|
1500
1622
|
start = Time.now
|
@@ -117,6 +117,8 @@ class BTAPDatapoint
|
|
117
117
|
epw_file: @options[:epw_file],
|
118
118
|
sizing_run_dir: File.join(@dp_temp_folder, 'sizing_folder'),
|
119
119
|
primary_heating_fuel: @options[:primary_heating_fuel],
|
120
|
+
necb_reference_hp: @options[:necb_reference_hp],
|
121
|
+
necb_reference_hp_supp_fuel: @options[:necb_reference_hp_supp_fuel],
|
120
122
|
dcv_type: @options[:dcv_type], # Four options: @options[: (1) 'NECB_Default', (2) 'No DCV', (3) 'Occupancy-based DCV' , (4) 'CO2-based DCV'
|
121
123
|
lights_type: @options[:lights_type], # Two options: @options[: (1) 'NECB_Default', (2) 'LED'
|
122
124
|
lights_scale: @options[:lights_scale],
|
@@ -167,7 +169,9 @@ class BTAPDatapoint
|
|
167
169
|
output_meters: @options[:output_meters],
|
168
170
|
airloop_economizer_type: @options[:airloop_economizer_type],
|
169
171
|
shw_scale: @options[:shw_scale],
|
170
|
-
baseline_system_zones_map_option: @options[:baseline_system_zones_map_option]
|
172
|
+
baseline_system_zones_map_option: @options[:baseline_system_zones_map_option],
|
173
|
+
tbd_option: @options[:tbd_option]
|
174
|
+
)
|
171
175
|
end
|
172
176
|
|
173
177
|
# Save model to to disk.
|
@@ -388,7 +392,16 @@ class BTAPDatapoint
|
|
388
392
|
FROM ReportDataDictionary
|
389
393
|
WHERE ReportDataDictionaryIndex == #{rdd_index}
|
390
394
|
"
|
391
|
-
|
395
|
+
|
396
|
+
# In some cases KeyValue has a value and sometimes it does not. In some cases KeyValue is null. If the command
|
397
|
+
# below is run and KeyValue is null then the command fails and returns an error. The fix below assumes that if
|
398
|
+
# the command below fails it is because KeyValue is null. In that case the "key_value" variable is set to a
|
399
|
+
# blank.
|
400
|
+
begin
|
401
|
+
key_value = model.sqlFile.get.execAndReturnFirstString(query).get
|
402
|
+
rescue StandardError => bang
|
403
|
+
key_value = ""
|
404
|
+
end
|
392
405
|
|
393
406
|
#Get Units
|
394
407
|
query = "
|
@@ -1,4 +1,4 @@
|
|
1
|
-
name,_id,run_start_time,run_end_time,status,status_message,btap_standard_building_type_geometry.building_type,btap_results.bldg_standards_template,btap_standard_systems.primary_heating_fuel,btap_standard_weather.epw_file,btap_results.bldg_conditioned_floor_area_m_sq,btap_results.bldg_exterior_area_m_sq,btap_results.bldg_fdwr,btap_results.bldg_name,btap_results.bldg_srr,btap_results.bldg_standards_building_template,btap_results.bldg_standards_building_type,btap_results.bldg_standards_number_of_above_ground_stories,btap_results.bldg_standards_number_of_stories,btap_results.bldg_surface_to_volume_ratio,btap_results.bldg_volume_m_cu,btap_results.cost_equipment_envelope_total_cost_per_m_sq,btap_results.cost_equipment_heating_and_cooling_total_cost_per_m_sq,btap_results.cost_equipment_lighting_total_cost_per_m_sq,btap_results.cost_equipment_shw_total_cost_per_m_sq,btap_results.cost_equipment_total_cost_per_m_sq,btap_results.cost_equipment_ventilation_total_cost_per_m_sq,btap_results.cost_rs_means_city,btap_results.cost_rs_means_prov,btap_results.cost_utility_neb_electricity_cost_per_m_sq,btap_results.cost_utility_neb_natural_gas_cost_per_m_sq,btap_results.cost_utility_neb_oil_cost_per_m_sq,btap_results.cost_utility_neb_total_cost_per_m_sq,btap_results.energy_eui_additional_fuel_gj_per_m_sq,btap_results.energy_eui_cooling_gj_per_m_sq,btap_results.energy_eui_district_cooling_gj_per_m_sq,btap_results.energy_eui_district_heating_gj_per_m_sq,btap_results.energy_eui_electricity_gj_per_m_sq,btap_results.energy_eui_fans_gj_per_m_sq,btap_results.energy_eui_heating_gj_per_m_sq,btap_results.energy_eui_interior_equipment_gj_per_m_sq,btap_results.energy_eui_interior_lighting_gj_per_m_sq,btap_results.energy_eui_natural_gas_gj_per_m_sq,btap_results.energy_eui_pumps_gj_per_m_sq,btap_results.energy_eui_total_gj_per_m_sq,btap_results.energy_eui_water_systems_gj_per_m_sq,btap_results.energy_peak_electric_w_per_m_sq,btap_results.energy_peak_natural_gas_w_per_m_sq,btap_results.energy_principal_heating_source,btap_results.envelope_ground_floors_average_conductance_w_per_m_sq_k,btap_results.envelope_ground_roofs_average_conductance_w_per_m_sq_k,btap_results.envelope_ground_walls_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_doors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_floors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_overhead_doors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_roofs_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_walls_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_windows_average_conductance_w_per_m_sq_k,btap_results.envelope_skylights_average_conductance_w_per_m_sq_k,btap_results.location_cdd,btap_results.location_city,btap_results.location_country,btap_results.location_hdd,btap_results.location_latitude,btap_results.location_longitude,btap_results.location_state_province_region,btap_results.location_weather_file,btap_results.location_zone,btap_results.measures_data_table,btap_results.shw_additional_fuel_per_year,btap_results.shw_electricity_per_day,btap_results.shw_electricity_per_day_per_occupant,btap_results.shw_electricity_per_year,btap_results.shw_natural_gas_per_year,btap_results.shw_total_nominal_occupancy,btap_results.shw_water_m_cu_per_day,btap_results.shw_water_m_cu_per_day_per_occupant,btap_results.shw_water_m_cu_per_year,btap_results.simulation_btap_data_version,btap_results.simulation_date,btap_results.simulation_os_standards_revision,btap_results.simulation_os_standards_version,btap_results.npv_total_per_m_sq
|
1
|
+
name,_id,run_start_time,run_end_time,status,status_message,btap_standard_building_type_geometry.building_type,btap_results.bldg_standards_template,btap_standard_systems.primary_heating_fuel,btap_standard_weather.epw_file,btap_results.bldg_conditioned_floor_area_m_sq,btap_results.bldg_exterior_area_m_sq,btap_results.bldg_fdwr,btap_results.bldg_name,btap_results.bldg_srr,btap_results.bldg_standards_building_template,btap_results.bldg_standards_building_type,btap_results.bldg_standards_number_of_above_ground_stories,btap_results.bldg_standards_number_of_stories,btap_results.bldg_surface_to_volume_ratio,btap_results.bldg_volume_m_cu,btap_results.cost_equipment_envelope_total_cost_per_m_sq,btap_results.cost_equipment_heating_and_cooling_total_cost_per_m_sq,btap_results.cost_equipment_lighting_total_cost_per_m_sq,btap_results.cost_equipment_shw_total_cost_per_m_sq,btap_results.cost_equipment_total_cost_per_m_sq,btap_results.cost_equipment_ventilation_total_cost_per_m_sq,btap_results.cost_rs_means_city,btap_results.cost_rs_means_prov,btap_results.cost_utility_neb_electricity_cost_per_m_sq,btap_results.cost_utility_neb_natural_gas_cost_per_m_sq,btap_results.cost_utility_neb_oil_cost_per_m_sq,btap_results.cost_utility_neb_total_cost_per_m_sq,btap_results.energy_eui_additional_fuel_gj_per_m_sq,btap_results.energy_eui_cooling_gj_per_m_sq,btap_results.energy_eui_district_cooling_gj_per_m_sq,btap_results.energy_eui_district_heating_gj_per_m_sq,btap_results.energy_eui_electricity_gj_per_m_sq,btap_results.energy_eui_fans_gj_per_m_sq,btap_results.energy_eui_heating_gj_per_m_sq,btap_results.energy_eui_interior_equipment_gj_per_m_sq,btap_results.energy_eui_interior_lighting_gj_per_m_sq,btap_results.energy_eui_natural_gas_gj_per_m_sq,btap_results.energy_eui_pumps_gj_per_m_sq,btap_results.energy_eui_total_gj_per_m_sq,btap_results.energy_eui_water_systems_gj_per_m_sq,btap_results.energy_peak_electric_w_per_m_sq,btap_results.energy_peak_natural_gas_w_per_m_sq,btap_results.energy_principal_heating_source,btap_results.envelope_ground_floors_average_conductance_w_per_m_sq_k,btap_results.envelope_ground_roofs_average_conductance_w_per_m_sq_k,btap_results.envelope_ground_walls_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_doors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_floors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_overhead_doors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_roofs_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_walls_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_windows_average_conductance_w_per_m_sq_k,btap_results.envelope_skylights_average_conductance_w_per_m_sq_k,btap_results.location_cdd,btap_results.location_city,btap_results.location_country,btap_results.location_hdd,btap_results.location_latitude,btap_results.location_longitude,btap_results.location_state_province_region,btap_results.location_weather_file,btap_results.location_zone,btap_results.measures_data_table,btap_results.shw_additional_fuel_per_year,btap_results.shw_electricity_per_day,btap_results.shw_electricity_per_day_per_occupant,btap_results.shw_electricity_per_year,btap_results.shw_natural_gas_per_year,btap_results.shw_total_nominal_occupancy,btap_results.shw_water_m_cu_per_day,btap_results.shw_water_m_cu_per_day_per_occupant,btap_results.shw_water_m_cu_per_year,btap_results.simulation_btap_data_version,btap_results.simulation_date,btap_results.simulation_os_standards_revision,btap_results.simulation_os_standards_version,btap_results.npv_total_per_m_sq,airloops_total_outdoor_air_mechanical_ventilation_m3,airloops_total_outdoor_air_natural_ventilation_ach_1_per_hr,airloops_total_outdoor_air_mechanical_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2
|
2
2
|
DOE Autogenerated 139,02044732-a9d8-4e84-9a37-ee894242bd76,2019-11-22T21:02:22.820Z,2019-11-22T21:04:34.271Z,completed,completed normal,Warehouse,NECB2011,Electricity,CAN_QC_Sept-Iles.AP.718110_CWEC2016.epw,4835.13,7095.242119931756,3.4,Warehouse,1.5,,Warehouse,1,1,0.1873385454726663,37873.90417722118,146.96869991086072,9.340462407422343,52.72710351117757,3.392070120141547,266.74079290525793,54.31245902385251,DALHOUSIE,NEW BRUNSWICK,7.27358941745103,0.0,0.0,7.27358941745103,0.0,0.0021736747512476396,0.0,0.0,0.35343000084796067,0.03717790421353717,0.20311553153689765,0.017571399321217835,0.08201227267932817,0.0,,0.35343000084796067,0.011379218345732174,86.32869643629023,NA,Electricity,0.757,"","",2.2,"","",0.162,0.21,2.2,2.2,14.0,Sept-Iles AP,CAN,6200.0,50.223,-66.266,QC,CAN_QC_Sept-Iles.AP.718110_CWEC2016.epw,"","[
|
3
3
|
{
|
4
4
|
""measure_name"": ""btap_standard_building_type_geometry"",
|
@@ -103,7 +103,7 @@ Standard.class_eval do
|
|
103
103
|
|
104
104
|
# 'touch' the weather file - for some odd reason this fixes the simulation not running issue we had on openstudio-server.
|
105
105
|
# Removed for until further investigation completed.
|
106
|
-
#
|
106
|
+
#FileUtils.touch("#{run_dir}/#{epw_name}")
|
107
107
|
|
108
108
|
cli_path = OpenStudio.getOpenStudioCLI
|
109
109
|
cmd = "\"#{cli_path}\" run -w \"#{osw_path}\""
|
@@ -46,6 +46,8 @@ module EnergyPlus
|
|
46
46
|
attr_accessor :typical_winter_dry_week
|
47
47
|
attr_accessor :typical_autumn_week
|
48
48
|
attr_accessor :typical_spring_week
|
49
|
+
attr_accessor :monthly_undis_ground_temps_0p5m
|
50
|
+
attr_accessor :monthly_undis_ground_temps_4p0m
|
49
51
|
|
50
52
|
def initialize(path)
|
51
53
|
@path = Pathname.new(path)
|
@@ -73,6 +75,8 @@ module EnergyPlus
|
|
73
75
|
@typical_winter_dry_week = []
|
74
76
|
@typical_autumn_week = []
|
75
77
|
@typical_spring_week = []
|
78
|
+
@monthly_undis_ground_temps_0p5m = []
|
79
|
+
@monthly_undis_ground_temps_4p0m = []
|
76
80
|
@data = []
|
77
81
|
init
|
78
82
|
end
|
@@ -313,7 +317,7 @@ module EnergyPlus
|
|
313
317
|
# use regex to get the temperatures
|
314
318
|
regex = /Daily Avg(.*)\n/
|
315
319
|
match_data = text.match(regex)
|
316
|
-
|
320
|
+
if match_data.nil?
|
317
321
|
puts "Can't find outdoor air temps"
|
318
322
|
raise
|
319
323
|
else
|
@@ -331,6 +335,34 @@ module EnergyPlus
|
|
331
335
|
# puts "#{@monthly_dry_bulb}"
|
332
336
|
end
|
333
337
|
|
338
|
+
# use regex to get undisturbed ground temps at 0.5 m depth
|
339
|
+
regex = /Monthly.*Calculated.*undisturbed*.*Ground.*Temperatures.*\n.*Jan.*Feb.*Mar.*Apr.*May.*Jun.*Jul.*Aug.*Sep.*Oct.*Nov.*Dec.*\n(.*)\n(.*)\n(.*)/
|
340
|
+
match_data = text.match(regex)
|
341
|
+
if match_data.nil?
|
342
|
+
puts "Can't find undisturbed ground temperatures"
|
343
|
+
raise
|
344
|
+
else
|
345
|
+
# first match is undisturbed ground temperature at 0.5 m and 4.0 m depth
|
346
|
+
monthly_undis_ground_temps_0p5m = match_data[1].strip.split(/\s+/)
|
347
|
+
monthly_undis_ground_temps_0p5m.shift
|
348
|
+
monthly_undis_ground_temps_0p5m.shift
|
349
|
+
monthly_undis_ground_temps_4p0m = match_data[3].strip.split(/\s+/)
|
350
|
+
monthly_undis_ground_temps_4p0m.shift
|
351
|
+
monthly_undis_ground_temps_4p0m.shift
|
352
|
+
# have to be 12 months
|
353
|
+
if monthly_undis_ground_temps_0p5m.size != 12
|
354
|
+
puts "Can't find undisturbed ground temps at 0.5 m"
|
355
|
+
raise
|
356
|
+
end
|
357
|
+
if monthly_undis_ground_temps_4p0m.size != 12
|
358
|
+
puts "Can't find undisturbed ground temps at 4.0 m"
|
359
|
+
raise
|
360
|
+
end
|
361
|
+
# insert as numbers
|
362
|
+
monthly_undis_ground_temps_0p5m.each { |temp| @monthly_undis_ground_temps_0p5m << temp.to_f }
|
363
|
+
monthly_undis_ground_temps_4p0m.each { |temp| @monthly_undis_ground_temps_4p0m << temp.to_f }
|
364
|
+
end
|
365
|
+
|
334
366
|
# now we are valid
|
335
367
|
@valid = true
|
336
368
|
|
data/lib/openstudio-standards.rb
CHANGED
@@ -33,6 +33,7 @@ module OpenstudioStandards
|
|
33
33
|
# Standards classes
|
34
34
|
require_relative "#{stds}/standard"
|
35
35
|
# NECB2011 Code
|
36
|
+
require_relative "#{stds}/necb/NECB2011/system_fuels"
|
36
37
|
require_relative "#{stds}/necb/NECB2011/necb_2011"
|
37
38
|
require_relative "#{stds}/necb/NECB2011/building_envelope"
|
38
39
|
require_relative "#{stds}/necb/NECB2011/lighting"
|