openstudio-standards 0.7.1 → 0.8.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/geometry/ASHRAE90120162019LargeHotel.json +58 -13
- data/data/geometry/ASHRAELargeHotel.json +58 -13
- data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
- data/data/standards/export_OpenStudio_libraries.rb +2 -2
- data/data/standards/manage_OpenStudio_Standards.rb +6 -6
- data/data/standards/openstudio_standards_duplicates_log.csv +7961 -1
- data/data/standards/test_performance_expected_dd_results.csv +2016 -2004
- data/lib/openstudio-standards/btap/fileio.rb +171 -5
- data/lib/openstudio-standards/constructions/create.rb +38 -4
- data/lib/openstudio-standards/constructions/modify.rb +10 -3
- data/lib/openstudio-standards/create_typical/create_typical.rb +42 -28
- data/lib/openstudio-standards/create_typical/space_type_information.rb +160 -0
- data/lib/openstudio-standards/create_typical/space_type_ratios.rb +16 -19
- data/lib/openstudio-standards/exterior_lighting/create.rb +454 -0
- data/lib/openstudio-standards/exterior_lighting/data/entryways.csv +52 -0
- data/lib/openstudio-standards/exterior_lighting/data/parking.csv +54 -0
- data/lib/openstudio-standards/exterior_lighting/data/typical_exterior_lighting.json +37 -0
- data/lib/openstudio-standards/exterior_lighting/information.rb +202 -0
- data/lib/openstudio-standards/geometry/information.rb +49 -2
- data/lib/openstudio-standards/hvac/components/create.rb +169 -0
- data/lib/openstudio-standards/hvac/components/modify.rb +42 -0
- data/lib/openstudio-standards/hvac/exhaust/create_exhaust_fan.rb +108 -0
- data/lib/openstudio-standards/hvac/exhaust/data/convert_data.rb +86 -0
- data/lib/openstudio-standards/hvac/exhaust/data/typical_exhaust.csv +18 -0
- data/lib/openstudio-standards/hvac/exhaust/data/typical_exhaust.json +89 -0
- data/lib/openstudio-standards/infiltration/nist_infiltration.rb +25 -13
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +0 -64
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +0 -25
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +0 -25
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +1 -11
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +5 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -7
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +36 -18
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +121 -239
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +179 -151
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +0 -466
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +18 -2
- data/lib/openstudio-standards/refrigeration/create_case.rb +125 -0
- data/lib/openstudio-standards/refrigeration/create_compressor.rb +78 -0
- data/lib/openstudio-standards/refrigeration/create_compressor_rack.rb +48 -0
- data/lib/openstudio-standards/refrigeration/create_refrigeration_system.rb +74 -0
- data/lib/openstudio-standards/refrigeration/create_typical_refrigeration.rb +161 -0
- data/lib/openstudio-standards/refrigeration/create_walkin.rb +116 -0
- data/lib/openstudio-standards/refrigeration/data/refrigerated_cases.csv +31 -0
- data/lib/openstudio-standards/refrigeration/data/refrigerated_walkins.csv +76 -0
- data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +13 -0
- data/lib/openstudio-standards/refrigeration/data/typical_refrigerated_cases.csv +17 -0
- data/lib/openstudio-standards/refrigeration/data/typical_refrigerated_walkins.csv +53 -0
- data/lib/openstudio-standards/refrigeration/information.rb +130 -0
- data/lib/openstudio-standards/schedules/parametric.rb +1 -1
- data/lib/openstudio-standards/service_water_heating/create_typical.rb +299 -0
- data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +16 -14
- data/lib/openstudio-standards/service_water_heating/data/convert_data.rb +119 -0
- data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.csv +54 -0
- data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.json +810 -0
- data/lib/openstudio-standards/service_water_heating/information.rb +69 -0
- data/lib/openstudio-standards/sql_file/fenestration.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +154 -0
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +35 -12
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +110 -61
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +128 -29
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +103 -38
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +106 -5
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +8 -8
- data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +44 -17
- data/lib/openstudio-standards/standards/Standards.Fan.rb +32 -21
- data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +45 -18
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +14 -9
- data/lib/openstudio-standards/standards/Standards.Model.rb +294 -76
- data/lib/openstudio-standards/standards/Standards.Motor.rb +66 -0
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.Pump.rb +34 -20
- data/lib/openstudio-standards/standards/Standards.ServiceWaterHeating.rb +0 -353
- data/lib/openstudio-standards/standards/Standards.Space.rb +3 -107
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +2 -57
- data/lib/openstudio-standards/standards/Standards.Surface.rb +11 -3
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +1 -120
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.computer_room_acs.json +142 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +1006 -596
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.energy_recovery.json +724 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +1258 -163
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +1070 -140
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +33 -3374
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +1400 -340
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.vrfs.json +769 -0
- 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 +2 -5338
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.computer_room_acs.json +142 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +1006 -596
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.energy_recovery.json +724 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +1258 -163
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +1070 -140
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +15 -3343
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +1840 -372
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.vrfs.json +769 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +20 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +0 -9
- 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 +0 -5382
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.computer_room_acs.json +142 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +1006 -628
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +718 -712
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +1438 -163
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +2552 -182
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +14 -3368
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +2348 -352
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.vrfs.json +769 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +47 -61
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +6 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Motor.rb +11 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +0 -9
- 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 +2 -5522
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.computer_room_acs.json +142 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +1006 -628
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +1358 -1346
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +1438 -163
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +1359 -189
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +19 -3451
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +2176 -616
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.vrfs.json +616 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +47 -61
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Motor.rb +11 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +0 -9
- 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 +8 -6055
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.computer_room_acs.json +142 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.economizers.json +1006 -628
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +1188 -1424
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ext_ltg.json +1498 -163
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.motors.json +1769 -189
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +15 -3422
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +1807 -408
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.vrfs.json +1024 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +70 -87
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +9 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Motor.rb +11 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +0 -9
- 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 +8 -6080
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.computer_room_acs.json +142 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.economizers.json +1006 -628
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +2806 -3296
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ext_ltg.json +1558 -163
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.motors.json +1759 -189
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +16 -3448
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +2758 -422
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.vrfs.json +684 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +14 -3318
- 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 +2 -4786
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.chillers.json +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.economizers.json +953 -207
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.energy_recovery.json +724 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +11 -2858
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirConditionerVariableRefrigerantFlow.rb +13 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +0 -18
- 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 +1 -4739
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.chillers.json +0 -51
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.economizers.json +953 -207
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.energy_recovery.json +724 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +9 -2830
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirConditionerVariableRefrigerantFlow.rb +13 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +0 -18
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.economizers.json +1006 -564
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.energy_recovery.json +1264 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.spc_typ.json +0 -1079
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +132 -288
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +44 -20
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +11 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.economizers.json +1006 -564
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.energy_recovery.json +1264 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.spc_typ.json +0 -1079
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +137 -288
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +44 -20
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +11 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +0 -9
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +12 -10
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +8 -6
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +8 -6
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +9 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Fan.rb +6 -40
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +30 -337
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +4 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +56 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +80 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +0 -10
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +35 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.economizers.json +550 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.energy_recovery.json +724 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.ext_ltg.json +1216 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.motors.json +225 -245
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.unitary_acs.json +174 -78
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.water_heaters.json +354 -317
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +19 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_airloop_hvac.json +185 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_airloop_hvac_doas.json +127 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_building.json +121 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_design_specification_outdoor_air.json +49 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_electric_equipment.json +113 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_exterior_lights.json +120 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_space.json +388 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_spacetype.json +367 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_thermal_zone.json +56 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_wateruse_connections.json +37 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_wateruse_equipment.json +69 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_wateruse_equipment_definition.json +37 -0
- data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/data/cbes_pre_1978.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/data/cbes_t24_1978.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/data/cbes_t24_1992.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/data/cbes_t24_2001.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/data/cbes_t24_2005.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/data/cbes_t24_2008.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/data/comstock_deer_2020.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/data/comstock_deer_2025.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/data/comstock_deer_2030.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/data/comstock_deer_2035.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/data/comstock_deer_2040.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/data/comstock_deer_2045.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/data/comstock_deer_2050.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/data/comstock_deer_2055.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/data/comstock_deer_2060.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/data/comstock_deer_2065.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/data/comstock_deer_2070.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/data/comstock_deer_2075.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.ext_ltg.json +5 -5
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +10 -1
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/unitary_acs.json +20 -20
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +379 -27
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +1 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +0 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/unitary_acs.json +20 -20
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +34 -22
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +76 -23
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_shw_calculation.xlsx +0 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +4 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +6 -2
- data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +26 -24
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +2 -1
- data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +38 -32
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +215 -18
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +190 -15
- data/lib/openstudio-standards/standards/necb/common/national_carbon_price_sched_feb_2025.json +60 -0
- data/lib/openstudio-standards/standards/necb/common/utility_pricing_2025-02-20.csv +92 -0
- data/lib/openstudio-standards/utilities/ruleset_check.rb +204 -0
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/information.rb +1 -1
- data/lib/openstudio-standards.rb +32 -12
- metadata +78 -80
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.refrigeration.rb +0 -13
- data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.refrigeration.rb +0 -13
- data/lib/openstudio-standards/prototypes/cbes/cbes.refrigeration.rb +0 -13
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +0 -432
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Space.rb +0 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ext_ltg.json +0 -169
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ref_lnup.json +0 -562
- 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 +0 -20804
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Space.rb +0 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ext_ltg.json +0 -169
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ext_ltg.json +0 -169
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ext_ltg.json +0 -169
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ext_ltg.json +0 -169
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ref_cases.json +0 -763
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ext_ltg.json +0 -169
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ref_cases.json +0 -763
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ext_ltg.json +0 -169
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.ext_ltg.json +0 -169
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_economizers.json +0 -213
- data/lib/openstudio-standards/standards/cbes/cbes.Space.rb +0 -11
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.Space.rb +0 -11
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.Space.rb +0 -11
- data/lib/openstudio-standards/standards/deer/deer.Space.rb +0 -20
- data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.ref_lnup.json +0 -562
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.ref_cases.json +0 -1456
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.ref_lnup.json +0 -562
@@ -0,0 +1,66 @@
|
|
1
|
+
class Standard
|
2
|
+
# @!group Motor
|
3
|
+
|
4
|
+
# Determine the type of motor to model
|
5
|
+
#
|
6
|
+
# @param nominal_hp [Float] nominal or nameplate motor horsepower
|
7
|
+
# @return [String] motor type
|
8
|
+
def motor_type(nominal_hp)
|
9
|
+
return 'PSC'
|
10
|
+
end
|
11
|
+
|
12
|
+
# Determine the efficiency of fractional horsepower motors
|
13
|
+
#
|
14
|
+
# @param nominal_hp [Float] nominal or nameplate motor horsepower
|
15
|
+
# @param motor_type [String] motor type, either 'PSC' or 'ECM'
|
16
|
+
# @return [Hash, NilClass] motor efficiency
|
17
|
+
def motor_fractional_hp_efficiencies(nominal_hp, motor_type = 'PSC')
|
18
|
+
# Unless specified otherwise, the efficiencies are calculated from
|
19
|
+
# Table 5-3 from Energy Savings Potential and Research & Development Opportunities for Commercial Refrigeration, Navigant, 2009
|
20
|
+
# https://www1.eere.energy.gov/buildings/pdfs/commercial_refrigeration_equipment_research_opportunities.pdf
|
21
|
+
#
|
22
|
+
# efficiency = (rated shaft output) / (input power)
|
23
|
+
case motor_type
|
24
|
+
when 'PSC'
|
25
|
+
if nominal_hp <= 1.0 / 20.0
|
26
|
+
efficiency = 37.0 / 70.0
|
27
|
+
elsif nominal_hp <= 1.0 / 15.0
|
28
|
+
efficiency = 50.0 / 90.0
|
29
|
+
elsif nominal_hp <= 1.0 / 6.0
|
30
|
+
efficiency = 125.0 / 202.0
|
31
|
+
elsif nominal_hp <= 1.0 / 3.0
|
32
|
+
efficiency = 249.0 / 370.0
|
33
|
+
elsif nominal_hp <= 1.0 / 2.0
|
34
|
+
efficiency = 373.0 / 530.0
|
35
|
+
elsif nominal_hp <= 3.0 / 4.0
|
36
|
+
efficiency = 560.0 / 699.0 # data obtained from motorboss.com
|
37
|
+
else
|
38
|
+
return nil
|
39
|
+
end
|
40
|
+
when 'ECM'
|
41
|
+
if nominal_hp <= 1.0 / 20.0
|
42
|
+
efficiency = 37.0 / 49.0
|
43
|
+
elsif nominal_hp <= 1.0 / 15.0
|
44
|
+
efficiency = 50.0 / 65.0
|
45
|
+
elsif nominal_hp <= 1.0 / 6.0
|
46
|
+
efficiency = 125.0 / 155.0
|
47
|
+
elsif nominal_hp <= 1.0 / 3.0
|
48
|
+
efficiency = 249.0 / 304.0
|
49
|
+
elsif nominal_hp <= 1.0 / 2.0
|
50
|
+
efficiency = 373.0 / 450.0
|
51
|
+
elsif nominal_hp <= 3.0 / 4.0
|
52
|
+
efficiency = 560.0 / 674.0 # data obtained from motorboss.com
|
53
|
+
else
|
54
|
+
return nil
|
55
|
+
end
|
56
|
+
else
|
57
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.motor', "#{motor_type} was passed as a motor_type, it should either be ECM or PSC.")
|
58
|
+
return nil
|
59
|
+
end
|
60
|
+
motor_properties = {
|
61
|
+
'nominal_full_load_efficiency' => efficiency,
|
62
|
+
'maximum_capacity' => nominal_hp
|
63
|
+
}
|
64
|
+
return motor_properties
|
65
|
+
end
|
66
|
+
end
|
@@ -190,7 +190,8 @@ class Standard
|
|
190
190
|
stds_type,
|
191
191
|
occ_type,
|
192
192
|
wwr_building_type: surface_std_wwr_type,
|
193
|
-
wwr_info: wwr_info
|
193
|
+
wwr_info: wwr_info,
|
194
|
+
surface: planar_surface)
|
194
195
|
if !new_construction == false
|
195
196
|
previous_construction_map[type] = new_construction
|
196
197
|
end
|
@@ -113,7 +113,7 @@ module Pump
|
|
113
113
|
# Determines the minimum pump motor efficiency and nominal size
|
114
114
|
# for a given motor bhp. This should be the total brake horsepower with
|
115
115
|
# any desired safety factor already included. This method picks
|
116
|
-
# the next nominal motor
|
116
|
+
# the next nominal motor category larger than the required brake
|
117
117
|
# horsepower, and the efficiency is based on that size. For example,
|
118
118
|
# if the bhp = 6.3, the nominal size will be 7.5HP and the efficiency
|
119
119
|
# for 90.1-2010 will be 91.7% from Table 10.8B. This method assumes
|
@@ -125,24 +125,47 @@ module Pump
|
|
125
125
|
# @return [Array<Double>] minimum motor efficiency (0.0 to 1.0), nominal horsepower
|
126
126
|
def pump_standard_minimum_motor_efficiency_and_size(pump, motor_bhp)
|
127
127
|
motor_eff = 0.85
|
128
|
-
|
128
|
+
# Calculate the allowed fan brake horsepower
|
129
|
+
# per method used in PNNL prototype buildings.
|
130
|
+
# Assumes that the fan brake horsepower is 90%
|
131
|
+
# of the fan nameplate rated motor power.
|
132
|
+
# Source: Thornton et al. (2011), Achieving the 30% Goal: Energy and Cost Savings Analysis of ASHRAE Standard 90.1-2010, Section 4.5.4
|
133
|
+
nominal_hp = motor_bhp * 1.1
|
129
134
|
|
130
135
|
# Don't attempt to look up motor efficiency
|
131
136
|
# for zero-hp pumps (required for circulation-pump-free
|
132
137
|
# service water heating systems).
|
133
138
|
return [1.0, 0] if motor_bhp < 0.0001 # under 1 watt
|
134
139
|
|
135
|
-
|
136
|
-
|
140
|
+
if nominal_hp <= 0.75
|
141
|
+
motor_type = motor_type(nominal_hp)
|
142
|
+
motor_properties = motor_fractional_hp_efficiencies(nominal_hp, motor_type = motor_type)
|
143
|
+
else
|
144
|
+
# Lookup the minimum motor efficiency
|
145
|
+
motors = standards_data['motors']
|
146
|
+
|
147
|
+
# Assuming all pump motors are 4-pole ODP
|
148
|
+
search_criteria = {
|
149
|
+
'template' => template,
|
150
|
+
'number_of_poles' => 4.0,
|
151
|
+
'type' => 'Enclosed'
|
152
|
+
}
|
153
|
+
|
154
|
+
# Use the efficiency largest motor efficiency when BHP is greater than the largest size for which a requirement is provided
|
155
|
+
data = model_find_objects(motors, search_criteria)
|
156
|
+
maximum_capacity = model_find_maximum_value(data, 'maximum_capacity')
|
157
|
+
if motor_bhp > maximum_capacity
|
158
|
+
motor_bhp = maximum_capacity
|
159
|
+
end
|
160
|
+
|
161
|
+
motor_properties = model_find_object(motors, search_criteria, capacity = nil, date = Date.today, area = nil, num_floors = nil, fan_motor_bhp = motor_bhp)
|
137
162
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
}
|
163
|
+
if motor_properties.nil?
|
164
|
+
# Retry without the date
|
165
|
+
motor_properties = model_find_object(motors, search_criteria, capacity = nil, date = nil, area = nil, num_floors = nil, fan_motor_bhp = motor_bhp)
|
166
|
+
end
|
167
|
+
end
|
144
168
|
|
145
|
-
motor_properties = model_find_object(motors, search_criteria, motor_bhp)
|
146
169
|
if motor_properties.nil?
|
147
170
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find motor properties using search criteria: #{search_criteria}, motor_bhp = #{motor_bhp} hp.")
|
148
171
|
return [motor_eff, nominal_hp]
|
@@ -155,15 +178,6 @@ module Pump
|
|
155
178
|
nominal_hp = nominal_hp.round
|
156
179
|
end
|
157
180
|
|
158
|
-
# Get the efficiency based on the nominal horsepower
|
159
|
-
# Add 0.01 hp to avoid search errors.
|
160
|
-
motor_properties = model_find_object(motors, search_criteria, nominal_hp + 0.01)
|
161
|
-
if motor_properties.nil?
|
162
|
-
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Fan', "For #{pump.name}, could not find nominal motor properties using search criteria: #{search_criteria}, motor_hp = #{nominal_hp} hp.")
|
163
|
-
return [motor_eff, nominal_hp]
|
164
|
-
end
|
165
|
-
motor_eff = motor_properties['nominal_full_load_efficiency']
|
166
|
-
|
167
181
|
return [motor_eff, nominal_hp]
|
168
182
|
end
|
169
183
|
|
@@ -221,285 +221,6 @@ class Standard
|
|
221
221
|
return true
|
222
222
|
end
|
223
223
|
|
224
|
-
# add typical swh demand and supply to model
|
225
|
-
#
|
226
|
-
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
227
|
-
# @param water_heater_fuel [String] water heater fuel. Valid choices are NaturalGas, Electricity, and HeatPump.
|
228
|
-
# If not supplied, a smart default will be determined based on building type.
|
229
|
-
# @param pipe_insul_in [Double] thickness of the pipe insulation, in inches.
|
230
|
-
# @param circulating [String] whether the (circulating, noncirculating, nil) nil is smart
|
231
|
-
# @return [Array<OpenStudio::Model::PlantLoop>] hot water loops
|
232
|
-
# @todo - add in losses from tank and pipe insulation, etc.
|
233
|
-
def model_add_typical_swh(model,
|
234
|
-
water_heater_fuel: nil,
|
235
|
-
pipe_insul_in: nil,
|
236
|
-
circulating: nil)
|
237
|
-
# array of hot water loops
|
238
|
-
swh_systems = []
|
239
|
-
|
240
|
-
# hash of general water use equipment awaiting loop
|
241
|
-
water_use_equipment_hash = {} # key is standards building type value is array of water use equipment
|
242
|
-
|
243
|
-
# create space type hash (need num_units for MidriseApartment and RetailStripmall)
|
244
|
-
space_type_hash = model_create_space_type_hash(model, trust_effective_num_spaces = false)
|
245
|
-
|
246
|
-
# loop through space types adding demand side of swh
|
247
|
-
model.getSpaceTypes.sort.each do |space_type|
|
248
|
-
next unless space_type.standardsBuildingType.is_initialized
|
249
|
-
next unless space_type_hash.key?(space_type) # this is used for space types without any floor area
|
250
|
-
|
251
|
-
stds_bldg_type = space_type.standardsBuildingType.get
|
252
|
-
|
253
|
-
# lookup space_type_properties
|
254
|
-
space_type_properties = space_type_get_standards_data(space_type)
|
255
|
-
peak_flow_rate_gal_per_hr_per_ft2 = space_type_properties['service_water_heating_peak_flow_per_area'].to_f
|
256
|
-
peak_flow_rate_gal_per_hr = space_type_properties['service_water_heating_peak_flow_rate'].to_f
|
257
|
-
swh_system_type = space_type_properties['service_water_heating_system_type']
|
258
|
-
flow_rate_fraction_schedule = model_add_schedule(model, space_type_properties['service_water_heating_schedule'])
|
259
|
-
service_water_temperature_f = space_type_properties['service_water_heating_target_temperature'].to_f
|
260
|
-
service_water_temperature_c = OpenStudio.convert(service_water_temperature_f, 'F', 'C').get
|
261
|
-
booster_water_temperature_f = space_type_properties['booster_water_heating_target_temperature'].to_f
|
262
|
-
booster_water_temperature_c = OpenStudio.convert(booster_water_temperature_f, 'F', 'C').get
|
263
|
-
booster_water_heater_fraction = space_type_properties['booster_water_heater_fraction'].to_f
|
264
|
-
service_water_fraction_sensible = space_type_properties['service_water_heating_fraction_sensible']
|
265
|
-
service_water_fraction_latent = space_type_properties['service_water_heating_fraction_latent']
|
266
|
-
floor_area_m2 = space_type_hash[space_type][:floor_area]
|
267
|
-
floor_area_ft2 = OpenStudio.convert(floor_area_m2, 'm^2', 'ft^2').get
|
268
|
-
|
269
|
-
# next if no service water heating demand
|
270
|
-
next unless peak_flow_rate_gal_per_hr_per_ft2 > 0.0 || peak_flow_rate_gal_per_hr > 0.0
|
271
|
-
|
272
|
-
# If there is no SWH schedule specified, assume
|
273
|
-
# that there should be no SWH consumption for this space type.
|
274
|
-
unless flow_rate_fraction_schedule
|
275
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "No service water heating schedule was specified for #{space_type.name}, an always off schedule will be used and no water will be used.")
|
276
|
-
flow_rate_fraction_schedule = model.alwaysOffDiscreteSchedule
|
277
|
-
end
|
278
|
-
|
279
|
-
# Determine flow rate
|
280
|
-
case swh_system_type
|
281
|
-
when 'One Per Unit'
|
282
|
-
water_heater_fuel = 'Electricity' if water_heater_fuel.nil?
|
283
|
-
num_units = space_type_hash[space_type][:num_units].round # First try number of units
|
284
|
-
num_units = space_type_hash[space_type][:effective_num_spaces].round if num_units.zero? # Fall back on number of spaces
|
285
|
-
peak_flow_rate_gal_per_hr = num_units * peak_flow_rate_gal_per_hr
|
286
|
-
peak_flow_rate_m3_per_s = OpenStudio.convert(peak_flow_rate_gal_per_hr, 'gal/hr', 'm^3/s').get
|
287
|
-
use_name = "#{space_type.name} #{num_units} units"
|
288
|
-
else
|
289
|
-
# @todo add building type or sice specific logic or just assume Gas?
|
290
|
-
# (SmallOffice and Warehouse are only non unit prototypes with Electric heating)
|
291
|
-
water_heater_fuel = 'NaturalGas' if water_heater_fuel.nil?
|
292
|
-
num_units = 1
|
293
|
-
peak_flow_rate_gal_per_hr = peak_flow_rate_gal_per_hr_per_ft2 * floor_area_ft2
|
294
|
-
peak_flow_rate_m3_per_s = OpenStudio.convert(peak_flow_rate_gal_per_hr, 'gal/hr', 'm^3/s').get
|
295
|
-
use_name = space_type.name.to_s
|
296
|
-
end
|
297
|
-
|
298
|
-
# Split flow rate between main and booster uses if specified
|
299
|
-
booster_water_use_equip = nil
|
300
|
-
if booster_water_heater_fraction > 0.0
|
301
|
-
booster_peak_flow_rate_m3_per_s = peak_flow_rate_m3_per_s * booster_water_heater_fraction
|
302
|
-
peak_flow_rate_m3_per_s -= booster_peak_flow_rate_m3_per_s
|
303
|
-
|
304
|
-
# Add booster water heater equipment and connections
|
305
|
-
booster_water_use_equip = OpenstudioStandards::ServiceWaterHeating.create_water_use(model,
|
306
|
-
name: "Booster #{use_name}",
|
307
|
-
flow_rate: booster_peak_flow_rate_m3_per_s,
|
308
|
-
flow_rate_fraction_schedule: flow_rate_fraction_schedule,
|
309
|
-
water_use_temperature: booster_water_temperature_c,
|
310
|
-
sensible_fraction: service_water_fraction_sensible,
|
311
|
-
latent_fraction: service_water_fraction_latent)
|
312
|
-
end
|
313
|
-
|
314
|
-
# Add water use equipment and connections
|
315
|
-
water_use_equip = OpenstudioStandards::ServiceWaterHeating.create_water_use(model,
|
316
|
-
name: use_name,
|
317
|
-
flow_rate: peak_flow_rate_m3_per_s,
|
318
|
-
flow_rate_fraction_schedule: flow_rate_fraction_schedule,
|
319
|
-
water_use_temperature: service_water_temperature_c,
|
320
|
-
sensible_fraction: service_water_fraction_sensible,
|
321
|
-
latent_fraction: service_water_fraction_latent)
|
322
|
-
|
323
|
-
# Water heater sizing
|
324
|
-
case swh_system_type
|
325
|
-
when 'One Per Unit'
|
326
|
-
water_heater_capacity_w = num_units * OpenStudio.convert(20.0, 'kBtu/hr', 'W').get
|
327
|
-
water_heater_volume_m3 = num_units * OpenStudio.convert(50.0, 'gal', 'm^3').get
|
328
|
-
num_water_heaters = num_units
|
329
|
-
else
|
330
|
-
water_use_equips = [water_use_equip]
|
331
|
-
water_use_equips << booster_water_use_equip unless booster_water_use_equip.nil? # Include booster in sizing since flows will be preheated by main water heater
|
332
|
-
water_heater_sizing = model_find_water_heater_capacity_volume_and_parasitic(model, water_use_equips)
|
333
|
-
water_heater_capacity_w = water_heater_sizing[:water_heater_capacity]
|
334
|
-
water_heater_volume_m3 = water_heater_sizing[:water_heater_volume]
|
335
|
-
num_water_heaters = 1
|
336
|
-
end
|
337
|
-
|
338
|
-
# Add either a dedicated SWH loop or save to add to shared SWH loop
|
339
|
-
case swh_system_type
|
340
|
-
when 'Shared'
|
341
|
-
|
342
|
-
# Store water use equip by building type to add to shared building hot water loop
|
343
|
-
if water_use_equipment_hash.key?(stds_bldg_type)
|
344
|
-
water_use_equipment_hash[stds_bldg_type] << water_use_equip
|
345
|
-
else
|
346
|
-
water_use_equipment_hash[stds_bldg_type] = [water_use_equip]
|
347
|
-
end
|
348
|
-
|
349
|
-
when 'One Per Unit', 'Dedicated'
|
350
|
-
pipe_insul_in = 0.0 if pipe_insul_in.nil?
|
351
|
-
|
352
|
-
# Add service water loop with water heater
|
353
|
-
swh_loop = OpenstudioStandards::ServiceWaterHeating.create_service_water_heating_loop(model,
|
354
|
-
system_name: "#{space_type.name} Service Water Loop",
|
355
|
-
service_water_temperature: service_water_temperature_c,
|
356
|
-
service_water_pump_head: 0.01,
|
357
|
-
service_water_pump_motor_efficiency: 1.0,
|
358
|
-
water_heater_capacity: water_heater_capacity_w,
|
359
|
-
water_heater_volume: water_heater_volume_m3,
|
360
|
-
water_heater_fuel: water_heater_fuel,
|
361
|
-
number_of_water_heaters: num_water_heaters,
|
362
|
-
add_piping_losses: true,
|
363
|
-
pipe_insulation_thickness: OpenStudio.convert(pipe_insul_in, 'in', 'm').get,
|
364
|
-
floor_area: OpenStudio.convert(950, 'ft^2', 'm^2').get,
|
365
|
-
number_of_stories: 1)
|
366
|
-
|
367
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', "In model_add_typical, num_water_heaters = #{num_water_heaters}")
|
368
|
-
# Add loop to list
|
369
|
-
swh_systems << swh_loop
|
370
|
-
|
371
|
-
# Attach water use equipment to the loop
|
372
|
-
swh_connection = water_use_equip.waterUseConnections
|
373
|
-
swh_loop.addDemandBranchForComponent(swh_connection.get) if swh_connection.is_initialized
|
374
|
-
|
375
|
-
# If a booster fraction is specified, some percentage of the water
|
376
|
-
# is assumed to be heated beyond the normal temperature by a separate
|
377
|
-
# booster water heater. This booster water heater is fed by the
|
378
|
-
# main water heater, so the booster is responsible for a smaller delta-T.
|
379
|
-
if booster_water_heater_fraction > 0
|
380
|
-
# find_water_heater_capacity_volume_and_parasitic
|
381
|
-
booster_water_heater_sizing = model_find_water_heater_capacity_volume_and_parasitic(model,
|
382
|
-
[booster_water_use_equip],
|
383
|
-
htg_eff: 1.0,
|
384
|
-
inlet_temp_f: service_water_temperature_f,
|
385
|
-
target_temp_f: booster_water_temperature_f)
|
386
|
-
|
387
|
-
# Add service water booster loop with water heater
|
388
|
-
# Note that booster water heaters are always assumed to be electric resistance
|
389
|
-
swh_booster_loop = OpenstudioStandards::ServiceWaterHeating.create_booster_water_heating_loop(model,
|
390
|
-
water_heater_capacity: booster_water_heater_sizing[:water_heater_capacity],
|
391
|
-
service_water_temperature: booster_water_temperature_c,
|
392
|
-
service_water_loop: swh_loop)
|
393
|
-
|
394
|
-
# Rename the service water booster loop
|
395
|
-
swh_booster_loop.setName("#{space_type.name} Service Water Booster Loop")
|
396
|
-
|
397
|
-
# Attach booster water use equipment to the booster loop
|
398
|
-
booster_swh_connection = booster_water_use_equip.waterUseConnections
|
399
|
-
swh_booster_loop.addDemandBranchForComponent(booster_swh_connection.get) if booster_swh_connection.is_initialized
|
400
|
-
end
|
401
|
-
|
402
|
-
else
|
403
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "'#{swh_system_type}' is not a valid Service Water Heating System Type, cannot add SWH to #{space_type.name}. Valid choices are One Per Unit, Dedicated, and Shared.")
|
404
|
-
end
|
405
|
-
end
|
406
|
-
|
407
|
-
# get building floor area and effective number of stories
|
408
|
-
bldg_floor_area_m2 = model.getBuilding.floorArea
|
409
|
-
bldg_effective_num_stories_hash = model_effective_num_stories(model)
|
410
|
-
bldg_effective_num_stories = bldg_effective_num_stories_hash[:below_grade] + bldg_effective_num_stories_hash[:above_grade]
|
411
|
-
|
412
|
-
# add non-dedicated system(s) here. Separate systems for water use equipment from different building types
|
413
|
-
water_use_equipment_hash.sort.each do |stds_bldg_type, water_use_equipment_array|
|
414
|
-
# @todo find the water use equipment with the highest temperature
|
415
|
-
water_heater_temp_f = 140.0
|
416
|
-
water_heater_temp_c = OpenStudio.convert(water_heater_temp_f, 'F', 'C').get
|
417
|
-
|
418
|
-
# find pump values
|
419
|
-
# Table A.2 in PrototypeModelEnhancements_2014_0.pdf shows 10ft on everything except SecondarySchool which has 11.4ft
|
420
|
-
# @todo Remove hard-coded building-type-based lookups for circulating vs. non-circulating SWH systems
|
421
|
-
circulating_bldg_types = [
|
422
|
-
# DOE building types
|
423
|
-
'Office',
|
424
|
-
'PrimarySchool',
|
425
|
-
'Outpatient',
|
426
|
-
'Hospital',
|
427
|
-
'SmallHotel',
|
428
|
-
'LargeHotel',
|
429
|
-
'FullServiceRestaurant',
|
430
|
-
'HighriseApartment',
|
431
|
-
# DEER building types
|
432
|
-
'Asm', # 'Assembly'
|
433
|
-
'ECC', # 'Education - Community College'
|
434
|
-
'EPr', # 'Education - Primary School'
|
435
|
-
'ERC', # 'Education - Relocatable Classroom'
|
436
|
-
'ESe', # 'Education - Secondary School'
|
437
|
-
'EUn', # 'Education - University'
|
438
|
-
'Gro', # 'Grocery'
|
439
|
-
'Hsp', # 'Health/Medical - Hospital'
|
440
|
-
'Htl', # 'Lodging - Hotel'
|
441
|
-
'MBT', # 'Manufacturing Biotech'
|
442
|
-
'MFm', # 'Residential Multi-family'
|
443
|
-
'Mtl', # 'Lodging - Motel'
|
444
|
-
'Nrs', # 'Health/Medical - Nursing Home'
|
445
|
-
'OfL', # 'Office - Large'
|
446
|
-
# 'RFF', # 'Restaurant - Fast-Food'
|
447
|
-
'RSD' # 'Restaurant - Sit-Down'
|
448
|
-
]
|
449
|
-
if circulating_bldg_types.include?(stds_bldg_type)
|
450
|
-
service_water_pump_head_pa = OpenStudio.convert(10.0, 'ftH_{2}O', 'Pa').get
|
451
|
-
service_water_pump_motor_efficiency = 0.3
|
452
|
-
circulating = true if circulating.nil?
|
453
|
-
pipe_insul_in = 0.5 if pipe_insul_in.nil?
|
454
|
-
else # values for non-circulating pump
|
455
|
-
service_water_pump_head_pa = 0.01
|
456
|
-
service_water_pump_motor_efficiency = 1.0
|
457
|
-
circulating = false if circulating.nil?
|
458
|
-
pipe_insul_in = 0.0 if pipe_insul_in.nil?
|
459
|
-
end
|
460
|
-
|
461
|
-
bldg_type_floor_area_m2 = 0.0
|
462
|
-
space_type_hash.sort.each do |space_type, space_type_props|
|
463
|
-
bldg_type_floor_area_m2 += space_type_props[:floor_area] if space_type_props[:stds_bldg_type] == stds_bldg_type
|
464
|
-
end
|
465
|
-
|
466
|
-
# Calculate the number of stories covered by this building type
|
467
|
-
num_stories = bldg_effective_num_stories * (bldg_type_floor_area_m2 / bldg_floor_area_m2)
|
468
|
-
|
469
|
-
# Water heater sizing
|
470
|
-
water_heater_sizing = model_find_water_heater_capacity_volume_and_parasitic(model, water_use_equipment_array)
|
471
|
-
water_heater_capacity_w = water_heater_sizing[:water_heater_capacity]
|
472
|
-
water_heater_volume_m3 = water_heater_sizing[:water_heater_volume]
|
473
|
-
|
474
|
-
# Add a shared service water heating loop with water heater
|
475
|
-
shared_swh_loop = OpenstudioStandards::ServiceWaterHeating.create_service_water_heating_loop(model,
|
476
|
-
system_name: "#{stds_bldg_type} Shared Service Water Loop",
|
477
|
-
service_water_temperature: water_heater_temp_c,
|
478
|
-
service_water_pump_head: service_water_pump_head_pa,
|
479
|
-
service_water_pump_motor_efficiency: service_water_pump_motor_efficiency,
|
480
|
-
water_heater_capacity: water_heater_capacity_w,
|
481
|
-
water_heater_volume: water_heater_volume_m3,
|
482
|
-
water_heater_fuel: water_heater_fuel,
|
483
|
-
add_piping_losses: true,
|
484
|
-
pipe_insulation_thickness: OpenStudio.convert(pipe_insul_in, 'in', 'm').get,
|
485
|
-
floor_area: bldg_type_floor_area_m2,
|
486
|
-
number_of_stories: num_stories)
|
487
|
-
|
488
|
-
# Attach all water use equipment to the shared loop
|
489
|
-
water_use_equipment_array.sort.each do |water_use_equip|
|
490
|
-
swh_connection = water_use_equip.waterUseConnections
|
491
|
-
shared_swh_loop.addDemandBranchForComponent(swh_connection.get) if swh_connection.is_initialized
|
492
|
-
end
|
493
|
-
|
494
|
-
# add to list of systems
|
495
|
-
swh_systems << shared_swh_loop
|
496
|
-
|
497
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Adding shared water heating loop for #{stds_bldg_type}.")
|
498
|
-
end
|
499
|
-
|
500
|
-
return swh_systems
|
501
|
-
end
|
502
|
-
|
503
224
|
# This method will add a swh water fixture to the model for the space.
|
504
225
|
# It will return a water fixture object, or NIL if there is no water load at all.
|
505
226
|
#
|
@@ -583,78 +304,4 @@ class Standard
|
|
583
304
|
|
584
305
|
return water_fixture
|
585
306
|
end
|
586
|
-
|
587
|
-
# Use rules from DOE Prototype Building documentation to determine water heater capacity,
|
588
|
-
# volume, pipe dump losses, and pipe thermal losses.
|
589
|
-
#
|
590
|
-
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
591
|
-
# @param water_use_equipment_array [Array] array of water use equipment objects that will be using this water heater
|
592
|
-
# @param storage_to_cap_ratio_gal_to_kbtu_per_hr [Double] storage volume gal to kBtu/hr of capacity
|
593
|
-
# @param htg_eff [Double] water heater thermal efficiency, fraction
|
594
|
-
# @param inlet_temp_f [Double] inlet cold water temperature, degrees Fahrenheit
|
595
|
-
# @param target_temp_f [Double] target supply water temperature from the tank, degrees Fahrenheit
|
596
|
-
# @return [Hash] hash with values needed to size water heater made with downstream method
|
597
|
-
def model_find_water_heater_capacity_volume_and_parasitic(model,
|
598
|
-
water_use_equipment_array,
|
599
|
-
storage_to_cap_ratio_gal_to_kbtu_per_hr: 1.0,
|
600
|
-
htg_eff: 0.8,
|
601
|
-
inlet_temp_f: 40.0,
|
602
|
-
target_temp_f: 140.0,
|
603
|
-
peak_flow_fraction: 1.0)
|
604
|
-
# A.1.4 Total Storage Volume and Water Heater Capacity of PrototypeModelEnhancements_2014_0.pdf shows 1 gallon of storage to 1 kBtu/h of capacity
|
605
|
-
|
606
|
-
water_heater_sizing = {}
|
607
|
-
|
608
|
-
# Get the maximum flow rates for all pieces of water use equipment
|
609
|
-
adjusted_max_flow_rates_gal_per_hr = [] # gallons per hour
|
610
|
-
water_use_equipment_array.sort.each do |water_use_equip|
|
611
|
-
water_use_equip_sch = water_use_equip.flowRateFractionSchedule
|
612
|
-
next if water_use_equip_sch.empty?
|
613
|
-
|
614
|
-
water_use_equip_sch = water_use_equip_sch.get
|
615
|
-
if water_use_equip_sch.to_ScheduleRuleset.is_initialized
|
616
|
-
water_use_equip_sch = water_use_equip_sch.to_ScheduleRuleset.get
|
617
|
-
max_sch_value = OpenstudioStandards::Schedules.schedule_ruleset_get_min_max(water_use_equip_sch)['max']
|
618
|
-
elsif water_use_equip_sch.to_ScheduleConstant.is_initialized
|
619
|
-
water_use_equip_sch = water_use_equip_sch.to_ScheduleConstant.get
|
620
|
-
max_sch_value = OpenstudioStandards::Schedules.schedule_constant_get_min_max(water_use_equip_sch)['max']
|
621
|
-
elsif water_use_equip_sch.to_ScheduleCompact.is_initialized
|
622
|
-
water_use_equip_sch = water_use_equip_sch.to_ScheduleCompact.get
|
623
|
-
max_sch_value = OpenstudioStandards::Schedules.schedule_compact_get_min_max(water_use_equip_sch)['max']
|
624
|
-
else
|
625
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "The peak flow rate fraction for #{water_use_equip_sch.name} could not be determined, assuming 1 for water heater sizing purposes.")
|
626
|
-
max_sch_value = 1.0
|
627
|
-
end
|
628
|
-
|
629
|
-
# Get peak flow rate from water use equipment definition
|
630
|
-
peak_flow_rate_m3_per_s = water_use_equip.waterUseEquipmentDefinition.peakFlowRate
|
631
|
-
|
632
|
-
# Calculate adjusted flow rate based on the peak fraction found in the flow rate fraction schedule
|
633
|
-
adjusted_peak_flow_rate_m3_per_s = max_sch_value * peak_flow_rate_m3_per_s
|
634
|
-
adjusted_max_flow_rates_gal_per_hr << OpenStudio.convert(adjusted_peak_flow_rate_m3_per_s, 'm^3/s', 'gal/hr').get
|
635
|
-
end
|
636
|
-
|
637
|
-
# Sum gph values from water use equipment to use in formula
|
638
|
-
total_adjusted_flow_rate_gal_per_hr = adjusted_max_flow_rates_gal_per_hr.inject(:+)
|
639
|
-
|
640
|
-
# Calculate capacity based on analysis of combined water use equipment maximum flow rates and schedules
|
641
|
-
# Max gal/hr * 8.4 lb/gal * 1 Btu/lb F * (120F - 40F)/0.8 = Btu/hr
|
642
|
-
water_heater_capacity_btu_per_hr = peak_flow_fraction * total_adjusted_flow_rate_gal_per_hr * 8.4 * 1.0 * (target_temp_f - inlet_temp_f) / htg_eff
|
643
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Capacity of #{water_heater_capacity_btu_per_hr.round} Btu/hr = #{peak_flow_fraction} peak fraction * #{total_adjusted_flow_rate_gal_per_hr.round} gal/hr * 8.4 lb/gal * 1.0 Btu/lb F * (#{target_temp_f.round} - #{inlet_temp_f.round} deltaF / #{htg_eff} htg eff).")
|
644
|
-
water_heater_capacity_m3_per_s = OpenStudio.convert(water_heater_capacity_btu_per_hr, 'Btu/hr', 'W').get
|
645
|
-
|
646
|
-
# Calculate volume based on capacity
|
647
|
-
# Default assumption is 1 gal of volume per 1 kBtu/hr of heating capacity
|
648
|
-
water_heater_capacity_kbtu_per_hr = OpenStudio.convert(water_heater_capacity_btu_per_hr, 'Btu/hr', 'kBtu/hr').get
|
649
|
-
water_heater_volume_gal = water_heater_capacity_kbtu_per_hr * storage_to_cap_ratio_gal_to_kbtu_per_hr
|
650
|
-
# increase tank size to 40 galons if calculated value is smaller
|
651
|
-
water_heater_volume_gal = 40.0 if water_heater_volume_gal < 40.0 # gal
|
652
|
-
water_heater_volume_m3 = OpenStudio.convert(water_heater_volume_gal, 'gal', 'm^3').get
|
653
|
-
|
654
|
-
# Populate return hash
|
655
|
-
water_heater_sizing[:water_heater_capacity] = water_heater_capacity_m3_per_s
|
656
|
-
water_heater_sizing[:water_heater_volume] = water_heater_volume_m3
|
657
|
-
|
658
|
-
return water_heater_sizing
|
659
|
-
end
|
660
307
|
end
|
@@ -1243,110 +1243,6 @@ class Standard
|
|
1243
1243
|
return [sensor_1_frac, sensor_2_frac, sensor_1_window, sensor_2_window]
|
1244
1244
|
end
|
1245
1245
|
|
1246
|
-
# Set the infiltration rate for this space to include the impact of air leakage requirements in the standard.
|
1247
|
-
#
|
1248
|
-
# @param space [OpenStudio::Model::Space] space object
|
1249
|
-
# @return [Double] true if successful, false if not
|
1250
|
-
# @todo handle doors and vestibules
|
1251
|
-
def space_apply_infiltration_rate(space)
|
1252
|
-
# data center keeps positive pressure all the time, so no infiltration
|
1253
|
-
if space.spaceType.is_initialized && space.spaceType.get.standardsSpaceType.is_initialized
|
1254
|
-
std_space_type = space.spaceType.get.standardsSpaceType.get
|
1255
|
-
if std_space_type.downcase.include?('data center') || std_space_type.downcase.include?('datacenter')
|
1256
|
-
return true
|
1257
|
-
end
|
1258
|
-
|
1259
|
-
if space.spaceType.get.standardsBuildingType.is_initialized
|
1260
|
-
std_bldg_type = space.spaceType.get.standardsBuildingType.get
|
1261
|
-
if std_bldg_type.downcase.include?('datacenter') && std_space_type.downcase.include?('computerroom')
|
1262
|
-
return true
|
1263
|
-
end
|
1264
|
-
end
|
1265
|
-
end
|
1266
|
-
|
1267
|
-
# Determine the total building baseline infiltration rate in cfm per ft2 of exterior above grade wall area at 75 Pa
|
1268
|
-
# exterior above grade envelope area includes any surface with boundary condition 'Outdoors' in OpenStudio/EnergyPlus
|
1269
|
-
basic_infil_rate_cfm_per_ft2 = space_infiltration_rate_75_pa(space)
|
1270
|
-
|
1271
|
-
# Do nothing if no infiltration
|
1272
|
-
return true if basic_infil_rate_cfm_per_ft2.zero?
|
1273
|
-
|
1274
|
-
# Conversion factor
|
1275
|
-
# 1 m^3/s*m^2 = 196.85 cfm/ft2
|
1276
|
-
conv_fact = 196.85
|
1277
|
-
|
1278
|
-
# Adjust the infiltration rate to the average pressure for the prototype buildings.
|
1279
|
-
adj_infil_rate_cfm_per_ft2 = OpenstudioStandards::Infiltration.adjust_infiltration_to_prototype_building_conditions(basic_infil_rate_cfm_per_ft2)
|
1280
|
-
adj_infil_rate_m3_per_s_per_m2 = adj_infil_rate_cfm_per_ft2 / conv_fact
|
1281
|
-
# Get the exterior wall area
|
1282
|
-
exterior_wall_and_window_area_m2 = OpenstudioStandards::Geometry.space_get_exterior_wall_and_subsurface_area(space)
|
1283
|
-
|
1284
|
-
# Don't create an object if there is no exterior wall area
|
1285
|
-
if exterior_wall_and_window_area_m2 <= 0.0
|
1286
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "For #{space.name}, no exterior wall area was found, no infiltration will be added.")
|
1287
|
-
return true
|
1288
|
-
end
|
1289
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Space', "For #{space.name}, set infiltration rate to #{adj_infil_rate_cfm_per_ft2.round(3)} cfm/ft2 exterior wall area (aka #{basic_infil_rate_cfm_per_ft2} cfm/ft2 @75Pa).")
|
1290
|
-
|
1291
|
-
# Calculate the total infiltration, assuming
|
1292
|
-
# that it only occurs through exterior walls
|
1293
|
-
tot_infil_m3_per_s = adj_infil_rate_m3_per_s_per_m2 * exterior_wall_and_window_area_m2
|
1294
|
-
|
1295
|
-
# Now spread the total infiltration rate over all
|
1296
|
-
# exterior surface areas (for the E+ input field)
|
1297
|
-
all_ext_infil_m3_per_s_per_m2 = tot_infil_m3_per_s / space.exteriorArea
|
1298
|
-
|
1299
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.Space', "For #{space.name}, adj infil = #{all_ext_infil_m3_per_s_per_m2.round(8)} m^3/s*m^2.")
|
1300
|
-
|
1301
|
-
# Get any infiltration schedule already assigned to this space or its space type
|
1302
|
-
# If not, the always on schedule will be applied.
|
1303
|
-
infil_sch = nil
|
1304
|
-
unless space.spaceInfiltrationDesignFlowRates.empty?
|
1305
|
-
old_infil = space.spaceInfiltrationDesignFlowRates[0]
|
1306
|
-
if old_infil.schedule.is_initialized
|
1307
|
-
infil_sch = old_infil.schedule.get
|
1308
|
-
end
|
1309
|
-
end
|
1310
|
-
|
1311
|
-
if infil_sch.nil? && space.spaceType.is_initialized
|
1312
|
-
space_type = space.spaceType.get
|
1313
|
-
unless space_type.spaceInfiltrationDesignFlowRates.empty?
|
1314
|
-
old_infil = space_type.spaceInfiltrationDesignFlowRates[0]
|
1315
|
-
if old_infil.schedule.is_initialized
|
1316
|
-
infil_sch = old_infil.schedule.get
|
1317
|
-
end
|
1318
|
-
end
|
1319
|
-
end
|
1320
|
-
|
1321
|
-
if infil_sch.nil?
|
1322
|
-
infil_sch = space.model.alwaysOnDiscreteSchedule
|
1323
|
-
end
|
1324
|
-
|
1325
|
-
# Create an infiltration rate object for this space
|
1326
|
-
infiltration = OpenStudio::Model::SpaceInfiltrationDesignFlowRate.new(space.model)
|
1327
|
-
infiltration.setName("#{space.name} Infiltration")
|
1328
|
-
# infiltration.setFlowperExteriorWallArea(adj_infil_rate_m3_per_s_per_m2)
|
1329
|
-
infiltration.setFlowperExteriorSurfaceArea(all_ext_infil_m3_per_s_per_m2.round(13))
|
1330
|
-
infiltration.setSchedule(infil_sch)
|
1331
|
-
infiltration.setConstantTermCoefficient(0.0)
|
1332
|
-
infiltration.setTemperatureTermCoefficient 0.0
|
1333
|
-
infiltration.setVelocityTermCoefficient(0.224)
|
1334
|
-
infiltration.setVelocitySquaredTermCoefficient(0.0)
|
1335
|
-
|
1336
|
-
infiltration.setSpace(space)
|
1337
|
-
|
1338
|
-
return true
|
1339
|
-
end
|
1340
|
-
|
1341
|
-
# Baseline infiltration rate
|
1342
|
-
#
|
1343
|
-
# @param space [OpenStudio::Model::Space] space object
|
1344
|
-
# @return [Double] the baseline infiltration rate, in cfm/ft^2 exterior above grade wall area at 75 Pa
|
1345
|
-
def space_infiltration_rate_75_pa(space = nil)
|
1346
|
-
basic_infil_rate_cfm_per_ft2 = 1.8
|
1347
|
-
return basic_infil_rate_cfm_per_ft2
|
1348
|
-
end
|
1349
|
-
|
1350
1246
|
# Determines whether the space is conditioned per 90.1, which is based on heating and cooling loads.
|
1351
1247
|
#
|
1352
1248
|
# @param space [OpenStudio::Model::Space] space object
|
@@ -1378,7 +1274,7 @@ class Standard
|
|
1378
1274
|
space.model.getAirLoopHVACReturnPlenums.each do |return_air_plenum|
|
1379
1275
|
if return_air_plenum.thermalZone.get.name.to_s == zone.get.name.to_s
|
1380
1276
|
# Determine if residential
|
1381
|
-
res = OpenstudioStandards::ThermalZone.thermal_zone_residential?(zone.get)
|
1277
|
+
res = OpenstudioStandards::ThermalZone.thermal_zone_residential?(zone.get)
|
1382
1278
|
|
1383
1279
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Standards.ThermalZone', "Zone #{zone.get.name} is (indirectly) conditioned (return air plenum).")
|
1384
1280
|
cond_cat = res ? 'ResConditioned' : 'NonResConditioned'
|
@@ -1391,7 +1287,7 @@ class Standard
|
|
1391
1287
|
space.model.getAirLoopHVACSupplyPlenums.each do |supply_air_plenum|
|
1392
1288
|
if supply_air_plenum.thermalZone.get.name.to_s == zone.get.name.to_s
|
1393
1289
|
# Determine if residential
|
1394
|
-
res = OpenstudioStandards::ThermalZone.thermal_zone_residential?(zone.get)
|
1290
|
+
res = OpenstudioStandards::ThermalZone.thermal_zone_residential?(zone.get)
|
1395
1291
|
|
1396
1292
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Standards.ThermalZone', "Zone #{zone.get.name} is (indirectly) conditioned (supply air plenum).")
|
1397
1293
|
cond_cat = res ? 'ResConditioned' : 'NonResConditioned'
|
@@ -1454,7 +1350,7 @@ class Standard
|
|
1454
1350
|
end
|
1455
1351
|
|
1456
1352
|
# Determine if residential
|
1457
|
-
res = OpenstudioStandards::ThermalZone.thermal_zone_residential?(zone.get)
|
1353
|
+
res = OpenstudioStandards::ThermalZone.thermal_zone_residential?(zone.get)
|
1458
1354
|
|
1459
1355
|
return cond_cat unless cond_ua > otr_ua
|
1460
1356
|
|