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
@@ -13,6 +13,12 @@ class Standard
|
|
13
13
|
|
14
14
|
# @!group Model
|
15
15
|
|
16
|
+
# Returns the PRM building envelope infiltration rate at a pressure differential of 75 Pa in cfm per ft^2
|
17
|
+
# @return [Double] infiltration rate in cfm per ft^2 at 75 Pa
|
18
|
+
def prm_building_envelope_infiltration_rate
|
19
|
+
return 1.0
|
20
|
+
end
|
21
|
+
|
16
22
|
# Creates a Performance Rating Method (aka Appendix G aka LEED) baseline building model
|
17
23
|
# Method used for 90.1-2016 and onward
|
18
24
|
#
|
@@ -102,6 +108,9 @@ class Standard
|
|
102
108
|
|
103
109
|
# Check proposed model unmet load hours
|
104
110
|
if unmet_load_hours_check
|
111
|
+
# Set proposed model export data in json format
|
112
|
+
OpenStudioStandards::RulesetChecking.export_json_output(proposed_model)
|
113
|
+
|
105
114
|
# Run user model; need annual simulation to get unmet load hours
|
106
115
|
if model_run_simulation_and_log_errors(proposed_model, run_dir = "#{sizing_run_dir}/PROP")
|
107
116
|
umlh = OpenstudioStandards::SqlFile.model_get_annual_occupied_unmet_hours(proposed_model)
|
@@ -128,8 +137,17 @@ class Standard
|
|
128
137
|
proposed_model.save(OpenStudio::Path.new("#{sizing_run_dir}/proposed_final.osm"), true)
|
129
138
|
forward_translator = OpenStudio::EnergyPlus::ForwardTranslator.new
|
130
139
|
idf = forward_translator.translateModel(proposed_model)
|
140
|
+
|
141
|
+
proposed_model.getSpaces.sort.each do |space|
|
142
|
+
space_cond_type = space_conditioning_category(space)
|
143
|
+
next if space_cond_type == 'Unconditioned'
|
144
|
+
OpenStudioStandards::RulesetChecking.tag_spaces(idf, space)
|
145
|
+
end
|
131
146
|
idf_path = OpenStudio::Path.new("#{sizing_run_dir}/proposed_final.idf")
|
132
147
|
idf.save(idf_path, true)
|
148
|
+
|
149
|
+
# export to epjson
|
150
|
+
OpenStudioStandards::RulesetChecking.export_epjson(proposed_model, sizing_run_dir, 'proposed_final')
|
133
151
|
end
|
134
152
|
|
135
153
|
# Define different orientation from original orientation
|
@@ -219,9 +237,8 @@ class Standard
|
|
219
237
|
set_electric_equipment = false
|
220
238
|
set_gas_equipment = false
|
221
239
|
set_ventilation = false
|
222
|
-
set_infiltration = false
|
223
240
|
# For PRM, it only applies lights for now.
|
224
|
-
space_type_apply_internal_loads(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation
|
241
|
+
space_type_apply_internal_loads(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation)
|
225
242
|
end
|
226
243
|
|
227
244
|
# Modify the lighting schedule to handle lighting occupancy sensors
|
@@ -239,7 +256,7 @@ class Standard
|
|
239
256
|
model_add_prm_elevators(model)
|
240
257
|
|
241
258
|
# Calculate infiltration as per 90.1 PRM rules
|
242
|
-
model_apply_standard_infiltration(model)
|
259
|
+
model_apply_standard_infiltration(model, infiltration_rate: prm_building_envelope_infiltration_rate)
|
243
260
|
|
244
261
|
# Apply user outdoor air specs as per 90.1 PRM rules exceptions
|
245
262
|
model_apply_userdata_outdoor_air(model)
|
@@ -255,11 +272,9 @@ class Standard
|
|
255
272
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', '*** Adding Daylighting Controls ***')
|
256
273
|
|
257
274
|
# Run a sizing run to calculate VLT for layer-by-layer windows.
|
258
|
-
if model_create_prm_baseline_building_requires_vlt_sizing_run(model)
|
259
|
-
if model_run_sizing_run(model, "#{sizing_run_dir}/SRVLT") == false
|
275
|
+
if model_create_prm_baseline_building_requires_vlt_sizing_run(model) && (model_run_sizing_run(model, "#{sizing_run_dir}/SRVLT") == false)
|
260
276
|
return false
|
261
277
|
end
|
262
|
-
end
|
263
278
|
|
264
279
|
# Add or remove daylighting controls to each space
|
265
280
|
# Add daylighting controls for 90.1-2013 and prior
|
@@ -287,7 +302,7 @@ class Standard
|
|
287
302
|
zone_fan_scheds = get_fan_schedule_for_each_zone(model)
|
288
303
|
|
289
304
|
# Set the construction properties of all the surfaces in the model
|
290
|
-
|
305
|
+
model_apply_standard_constructions(model, climate_zone, wwr_building_type: wwr_building_type, wwr_info: wwr_info)
|
291
306
|
|
292
307
|
# Update ground temperature profile (for F/C-factor construction objects)
|
293
308
|
model_update_ground_temperature_profile(model, climate_zone)
|
@@ -323,7 +338,7 @@ class Standard
|
|
323
338
|
|
324
339
|
# Modify the service water heating loops per the baseline rules
|
325
340
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', '*** Cleaning up Service Water Heating Loops ***')
|
326
|
-
model_apply_baseline_swh_loops(model, building_type)
|
341
|
+
model_apply_baseline_swh_loops(model, building_type, swh_building_type)
|
327
342
|
|
328
343
|
# Determine the baseline HVAC system type for each of the groups of zones and add that system type.
|
329
344
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', '*** Adding Baseline HVAC Systems ***')
|
@@ -494,15 +509,21 @@ class Standard
|
|
494
509
|
# @todo: turn off self shading
|
495
510
|
# Set Solar Distribution to MinimalShadowing... problem is when you also have detached shading such as surrounding buildings etc
|
496
511
|
# It won't be taken into account, while it should: only self shading from the building itself should be turned off but to my knowledge there isn't a way to do this in E+
|
497
|
-
|
498
512
|
model_status = degs > 0 ? "baseline_final_#{degs}" : 'baseline_final'
|
513
|
+
OpenStudioStandards::RulesetChecking.export_json_output(model)
|
499
514
|
model.save(OpenStudio::Path.new("#{sizing_run_dir}/#{model_status}.osm"), true)
|
500
515
|
|
501
516
|
# Translate to IDF and save for debugging
|
502
517
|
forward_translator = OpenStudio::EnergyPlus::ForwardTranslator.new
|
503
518
|
idf = forward_translator.translateModel(model)
|
519
|
+
model.getSpaces.sort.each do |space|
|
520
|
+
space_cond_type = space_conditioning_category(space)
|
521
|
+
next if space_cond_type == 'Unconditioned'
|
522
|
+
OpenStudioStandards::RulesetChecking.tag_spaces(idf, space)
|
523
|
+
end
|
504
524
|
idf_path = OpenStudio::Path.new("#{sizing_run_dir}/#{model_status}.idf")
|
505
525
|
idf.save(idf_path, true)
|
526
|
+
OpenStudioStandards::RulesetChecking.export_epjson(model, sizing_run_dir, "#{model_status}")
|
506
527
|
|
507
528
|
# Check unmet load hours
|
508
529
|
if unmet_load_hours_check
|
@@ -598,20 +619,23 @@ class Standard
|
|
598
619
|
end
|
599
620
|
|
600
621
|
# Calculate total infiltration flow rate per envelope area
|
601
|
-
building_envelope_area_m2 =
|
622
|
+
building_envelope_area_m2 = OpenstudioStandards::Geometry.model_get_envelope_area(proposed_model)
|
602
623
|
curr_tot_infil_m3_per_s_per_envelope_area = model_current_building_envelope_infiltration_at_75pa(proposed_model, building_envelope_area_m2)
|
603
624
|
curr_tot_infil_cfm_per_envelope_area = OpenStudio.convert(curr_tot_infil_m3_per_s_per_envelope_area, 'm^3/s*m^2', 'cfm/ft^2').get
|
604
625
|
|
605
626
|
# Warn users if the infiltration modeling in the user/proposed model is not based on field verification
|
606
|
-
# If
|
607
|
-
|
627
|
+
# If model based on field verification use 0.6 cfm/ft^2, otherwise use 1.0 cfm/ft^2
|
628
|
+
if infiltration_modeled_from_field_verification_results == 'true'
|
608
629
|
if curr_tot_infil_cfm_per_envelope_area < 0.6
|
609
630
|
OpenStudio.logFree(OpenStudio::Info, 'prm.log', "The user model's I_75Pa is estimated to be #{curr_tot_infil_cfm_per_envelope_area} m3/s per m2 of total building envelope")
|
610
631
|
end
|
611
|
-
end
|
612
632
|
|
613
|
-
|
614
|
-
|
633
|
+
# Modify model to follow the PRM infiltration modeling method
|
634
|
+
model_apply_standard_infiltration(proposed_model, infiltration_rate: 0.6)
|
635
|
+
else
|
636
|
+
# Modify model to follow the PRM infiltration modeling method with the default infiltration rate
|
637
|
+
model_apply_standard_infiltration(proposed_model, infiltration_rate: prm_building_envelope_infiltration_rate)
|
638
|
+
end
|
615
639
|
end
|
616
640
|
|
617
641
|
# If needed, remove all non-adiabatic pipes of SWH loops
|
@@ -675,11 +699,9 @@ class Standard
|
|
675
699
|
|
676
700
|
# Check if the object needs to be checked for autosizing
|
677
701
|
obj_to_be_checked_for_autosizing = false
|
678
|
-
if obj_type.include?('chiller') || obj_type.include?('boiler') || obj_type.include?('coil') || obj_type.include?('fan') || obj_type.include?('pump') || obj_type.include?('waterheater')
|
679
|
-
if !obj_type.include?('controller')
|
702
|
+
if (obj_type.include?('chiller') || obj_type.include?('boiler') || obj_type.include?('coil') || obj_type.include?('fan') || obj_type.include?('pump') || obj_type.include?('waterheater')) && !obj_type.include?('controller')
|
680
703
|
obj_to_be_checked_for_autosizing = true
|
681
704
|
end
|
682
|
-
end
|
683
705
|
|
684
706
|
# Check for autosizing
|
685
707
|
if obj_to_be_checked_for_autosizing
|
@@ -688,12 +710,10 @@ class Standard
|
|
688
710
|
next if casted_obj.nil?
|
689
711
|
|
690
712
|
casted_obj.methods.each do |method|
|
691
|
-
if method.to_s.include?('is') && method.to_s.include?('Autosized')
|
692
|
-
if casted_obj.public_send(method) == true
|
713
|
+
if method.to_s.include?('is') && method.to_s.include?('Autosized') && (casted_obj.public_send(method) == true)
|
693
714
|
is_hvac_autosized = true
|
694
715
|
OpenStudio.logFree(OpenStudio::Info, 'prm.log', "The #{method.to_s.sub('is', '').sub('Autosized', '').sub(':', '')} field of the #{obj_type} named #{casted_obj.name} is autosized. It should be hard sized.")
|
695
716
|
end
|
696
|
-
end
|
697
717
|
end
|
698
718
|
end
|
699
719
|
end
|
@@ -748,13 +768,11 @@ class Standard
|
|
748
768
|
next
|
749
769
|
end
|
750
770
|
|
751
|
-
|
752
|
-
|
753
|
-
if !applicable_zones.include?(zone)
|
771
|
+
# This is only used for the stable baseline (2016 and later)
|
772
|
+
if !applicable_zones.nil? && !applicable_zones.include?(zone)
|
754
773
|
# This zone is not part of the current hvac_building_type
|
755
774
|
next
|
756
775
|
end
|
757
|
-
end
|
758
776
|
|
759
777
|
# Skip unconditioned zones
|
760
778
|
heated = OpenstudioStandards::ThermalZone.thermal_zone_heated?(zone)
|
@@ -2293,6 +2311,9 @@ class Standard
|
|
2293
2311
|
model.getCoilHeatingGass.sort.each { |obj| coil_heating_gas_apply_efficiency_and_curves(obj) }
|
2294
2312
|
model.getCoilHeatingGasMultiStages.each { |obj| coil_heating_gas_multi_stage_apply_efficiency_and_curves(obj) }
|
2295
2313
|
|
2314
|
+
# VRFs
|
2315
|
+
model.getAirConditionerVariableRefrigerantFlows.sort.each { |obj| air_conditioner_variable_refrigerant_flow_apply_efficiency_and_curves(obj) }
|
2316
|
+
|
2296
2317
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Model', "Finished applying HVAC efficiency standards for #{template} template.")
|
2297
2318
|
return true
|
2298
2319
|
end
|
@@ -2313,32 +2334,28 @@ class Standard
|
|
2313
2334
|
return true
|
2314
2335
|
end
|
2315
2336
|
|
2316
|
-
#
|
2317
|
-
|
2318
|
-
|
2319
|
-
|
2320
|
-
return true
|
2337
|
+
# Default 5-sided (exterior walls and roof) airtightness design value (m^3/h-m^2) from a building pressurization test at 75 Pascals.
|
2338
|
+
def default_airtightness
|
2339
|
+
airtightness_value = 13.8
|
2340
|
+
return airtightness_value
|
2321
2341
|
end
|
2322
2342
|
|
2323
|
-
#
|
2324
|
-
|
2325
|
-
|
2326
|
-
|
2327
|
-
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
2328
|
-
# @return [Boolean] returns true if successful, false if not
|
2329
|
-
# @todo This infiltration method is not used by the Reference buildings, fix this inconsistency.
|
2330
|
-
def model_apply_infiltration_standard(model)
|
2331
|
-
# Set the infiltration rate at each space
|
2332
|
-
model.getSpaces.sort.each do |space|
|
2333
|
-
space_apply_infiltration_rate(space)
|
2334
|
-
end
|
2335
|
-
|
2336
|
-
# Remove infiltration rates set at the space type
|
2337
|
-
model.getSpaceTypes.sort.each do |space_type|
|
2338
|
-
space_type.spaceInfiltrationDesignFlowRates.each(&:remove)
|
2339
|
-
end
|
2343
|
+
# Buildings by default are assumed to not have an air barrier
|
2344
|
+
def default_air_barrier
|
2345
|
+
return false
|
2346
|
+
end
|
2340
2347
|
|
2341
|
-
|
2348
|
+
# Get the maximum value for a field of a hash
|
2349
|
+
#
|
2350
|
+
# @param hash_of_objects [Hash] hash of objects to search through
|
2351
|
+
# @param field [String] field name from the hash
|
2352
|
+
# @return [float] Return the first matching object hash if successful, nil if not.
|
2353
|
+
def model_find_maximum_value(hash_of_objects, field)
|
2354
|
+
maximum_value = 0
|
2355
|
+
hash_of_objects.each do |set|
|
2356
|
+
maximum_value = [maximum_value, set[field]].max if set[field].to_f > 0
|
2357
|
+
end
|
2358
|
+
return maximum_value
|
2342
2359
|
end
|
2343
2360
|
|
2344
2361
|
# Method to search through a hash for the objects that meets the desired search criteria, as passed via a hash.
|
@@ -2471,7 +2488,7 @@ class Standard
|
|
2471
2488
|
matching_capacity_objects = matching_objects.reject { |object| fan_motor_bhp.to_f <= object['minimum_capacity'].to_f || fan_motor_bhp.to_f > object['maximum_capacity'].to_f }
|
2472
2489
|
|
2473
2490
|
# Filter based on motor type
|
2474
|
-
matching_capacity_objects = matching_capacity_objects.select { |object| object['type'].downcase == search_criteria['type'].downcase } if search_criteria.keys.include?('type')
|
2491
|
+
matching_capacity_objects = matching_capacity_objects.select { |object| object['type'].to_s.downcase == search_criteria['type'].to_s.downcase } if search_criteria.keys.include?('type')
|
2475
2492
|
|
2476
2493
|
# If no object was found, round the fan_motor_bhp down in case the number fell between the limits in the json file.
|
2477
2494
|
if matching_capacity_objects.empty?
|
@@ -2540,7 +2557,7 @@ class Standard
|
|
2540
2557
|
# the objects will only be returned if the specified area is between the minimum_area and maximum_area values.
|
2541
2558
|
# @param num_floors [Double] capacity of the object in question. If num_floors is supplied,
|
2542
2559
|
# the objects will only be returned if the specified num_floors is between the minimum_floors and maximum_floors values.
|
2543
|
-
# @return [Hash] Return
|
2560
|
+
# @return [Hash] Return the first matching object hash if successful, nil if not.
|
2544
2561
|
# @example Find the motor that meets these size criteria
|
2545
2562
|
# search_criteria = {
|
2546
2563
|
# 'template' => template,
|
@@ -2712,7 +2729,7 @@ class Standard
|
|
2712
2729
|
# the objects will only be returned if the specified capacity is between the minimum_capacity and maximum_capacity values.
|
2713
2730
|
# @param date [<OpenStudio::Date>] date of the object in question. If date is supplied,
|
2714
2731
|
# the objects will only be returned if the specified date is between the start_date and end_date.
|
2715
|
-
# @return [Hash] Return
|
2732
|
+
# @return [Hash] Return the first matching object hash if successful, nil if not.
|
2716
2733
|
# @example Find the motor that meets these size criteria
|
2717
2734
|
# search_criteria = {
|
2718
2735
|
# 'template' => template,
|
@@ -3293,6 +3310,12 @@ class Standard
|
|
3293
3310
|
props = model_find_object(standards_data['construction_properties'], search_criteria)
|
3294
3311
|
end
|
3295
3312
|
|
3313
|
+
if !props
|
3314
|
+
# Third search for legacy energy codes (2016 or earlier), which does not have standards_construction_type
|
3315
|
+
search_criteria.delete('standards_construction_type')
|
3316
|
+
props = model_find_object(standards_data['construction_properties'], search_criteria)
|
3317
|
+
end
|
3318
|
+
|
3296
3319
|
if !props
|
3297
3320
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find construction properties for: #{template}-#{climate_zone_set}-#{intended_surface_type}-#{standards_construction_type}-#{building_category}.")
|
3298
3321
|
# Return an empty construction
|
@@ -4061,6 +4084,17 @@ class Standard
|
|
4061
4084
|
# Surface
|
4062
4085
|
# Outdoors
|
4063
4086
|
# Ground
|
4087
|
+
# Foundation
|
4088
|
+
# GroundFCfactorMethod
|
4089
|
+
# OtherSideCoefficients
|
4090
|
+
# OtherSideConditionsModel
|
4091
|
+
# GroundSlabPreprocessorAverage
|
4092
|
+
# GroundSlabPreprocessorCore
|
4093
|
+
# GroundSlabPreprocessorPerimeter
|
4094
|
+
# GroundBasementPreprocessorAverageWall
|
4095
|
+
# GroundBasementPreprocessorAverageFloor
|
4096
|
+
# GroundBasementPreprocessorUpperWall
|
4097
|
+
# GroundBasementPreprocessorLowerWall
|
4064
4098
|
|
4065
4099
|
# Possible surface types are
|
4066
4100
|
# AtticFloor
|
@@ -4117,17 +4151,123 @@ class Standard
|
|
4117
4151
|
types_to_modify << ['Outdoors', 'ExteriorWall', 'SteelFramed']
|
4118
4152
|
types_to_modify << ['Outdoors', 'ExteriorRoof', 'IEAD']
|
4119
4153
|
types_to_modify << ['Outdoors', 'ExteriorFloor', 'SteelFramed']
|
4154
|
+
types_to_modify << ['Outdoors', 'ExteriorWindow', 'Any Vertical Glazing']
|
4155
|
+
types_to_modify << ['Outdoors', 'GlassDoor', 'Any Vertical Glazing']
|
4156
|
+
types_to_modify << ['Outdoors', 'ExteriorDoor', 'NonSwinging']
|
4157
|
+
types_to_modify << ['Outdoors', 'ExteriorDoor', 'Swinging']
|
4120
4158
|
types_to_modify << ['Ground', 'GroundContactFloor', 'Unheated']
|
4121
4159
|
types_to_modify << ['Ground', 'GroundContactWall', 'Mass']
|
4122
4160
|
|
4161
|
+
# Surface
|
4162
|
+
types_to_modify << ['Surface', 'ExteriorWall', 'SteelFramed']
|
4163
|
+
types_to_modify << ['Surface', 'ExteriorRoof', 'IEAD']
|
4164
|
+
types_to_modify << ['Surface', 'ExteriorFloor', 'SteelFramed']
|
4165
|
+
types_to_modify << ['Surface', 'ExteriorWindow', 'Any Vertical Glazing']
|
4166
|
+
types_to_modify << ['Surface', 'GlassDoor', 'Any Vertical Glazing']
|
4167
|
+
types_to_modify << ['Surface', 'ExteriorDoor', 'NonSwinging']
|
4168
|
+
types_to_modify << ['Surface', 'ExteriorDoor', 'Swinging']
|
4169
|
+
|
4170
|
+
# Foundation
|
4171
|
+
types_to_modify << ['Foundation', 'GroundContactFloor', 'Unheated']
|
4172
|
+
types_to_modify << ['Foundation', 'GroundContactWall', 'Mass']
|
4173
|
+
|
4174
|
+
# F/C-Factor methods
|
4175
|
+
types_to_modify << ['GroundFCfactorMethod', 'GroundContactFloor', 'Unheated']
|
4176
|
+
types_to_modify << ['GroundFCfactorMethod', 'GroundContactWall', 'Mass']
|
4177
|
+
|
4178
|
+
# Other side coefficients
|
4179
|
+
types_to_modify << ['OtherSideCoefficients', 'GroundContactFloor', 'Unheated']
|
4180
|
+
types_to_modify << ['OtherSideConditionsModel', 'GroundContactFloor', 'Unheated']
|
4181
|
+
types_to_modify << ['OtherSideCoefficients', 'GroundContactWall', 'Mass']
|
4182
|
+
types_to_modify << ['OtherSideConditionsModel', 'GroundContactWall', 'Mass']
|
4183
|
+
|
4184
|
+
# Slab preprocessor
|
4185
|
+
types_to_modify << ['GroundSlabPreprocessorAverage', 'GroundContactFloor', 'Unheated']
|
4186
|
+
types_to_modify << ['GroundSlabPreprocessorCore', 'GroundContactFloor', 'Unheated']
|
4187
|
+
types_to_modify << ['GroundSlabPreprocessorPerimeter', 'GroundContactFloor', 'Unheated']
|
4188
|
+
|
4189
|
+
# Basement preprocessor
|
4190
|
+
types_to_modify << ['GroundBasementPreprocessorAverageWall', 'GroundContactWall', 'Mass']
|
4191
|
+
types_to_modify << ['GroundBasementPreprocessorAverageFloor', 'GroundContactFloor', 'Unheated']
|
4192
|
+
types_to_modify << ['GroundBasementPreprocessorUpperWall', 'GroundContactWall', 'Mass']
|
4193
|
+
types_to_modify << ['GroundBasementPreprocessorLowerWall', 'GroundContactWall', 'Mass']
|
4194
|
+
|
4123
4195
|
# Modify all constructions of each type
|
4196
|
+
construction_modified = {}
|
4124
4197
|
types_to_modify.each do |boundary_cond, surf_type, const_type|
|
4125
|
-
constructions = OpenstudioStandards::Constructions.model_get_constructions(model, boundary_cond, surf_type)
|
4198
|
+
# constructions = OpenstudioStandards::Constructions.model_get_constructions(model, boundary_cond, surf_type)
|
4199
|
+
# Hard-assigned surfaces
|
4200
|
+
model.getSurfaces.sort.each do |surface|
|
4201
|
+
# surfaces with outside / ground / underground boundary conditions
|
4202
|
+
next unless surface.outsideBoundaryCondition == boundary_cond
|
4203
|
+
|
4204
|
+
# identify true interior surface from surfaces that is next to unconditioned spaces
|
4205
|
+
if has_space_conditioning_category && surface.outsideBoundaryCondition == 'Surface'
|
4206
|
+
space_cond_type = space_conditioning_category(surface.space.get)
|
4207
|
+
adj_space_cond_type = space_conditioning_category(surface.adjacentSurface.get.space.get)
|
4208
|
+
next unless (space_cond_type != 'Unconditioned') && (adj_space_cond_type == 'Unconditioned')
|
4209
|
+
elsif boundary_cond == 'Surface'
|
4210
|
+
# Legacy code will skip processing surfaces.
|
4211
|
+
next
|
4212
|
+
end
|
4213
|
+
|
4214
|
+
if surface.surfaceType == 'Floor' || surface.surfaceType == 'Wall'
|
4215
|
+
next unless surf_type.include?(surface.surfaceType)
|
4216
|
+
elsif surface.surfaceType == 'RoofCeiling'
|
4217
|
+
next unless surf_type.include?('Roof') || surf_type.include?('Ceiling')
|
4218
|
+
end
|
4126
4219
|
|
4127
|
-
|
4128
|
-
|
4129
|
-
|
4130
|
-
|
4220
|
+
# check if need to duplicate the construction for the surface
|
4221
|
+
const = surface.construction
|
4222
|
+
next unless const.is_initialized
|
4223
|
+
|
4224
|
+
const = const.get
|
4225
|
+
const_name = const.name.to_s
|
4226
|
+
# Reset the name by including surf_type and boundary_cond
|
4227
|
+
new_const_name = "#{const_name}_#{surf_type}_#{boundary_cond}"
|
4228
|
+
unless construction_modified.key?(new_const_name)
|
4229
|
+
# create a copy for each of constructions to meet its unique boundary_cond, surf_type and const_type
|
4230
|
+
new_const = OpenstudioStandards::Constructions.construction_deep_copy(const)
|
4231
|
+
new_const.setName(new_const_name)
|
4232
|
+
standards_info = new_const.standardsInformation
|
4233
|
+
standards_info.setIntendedSurfaceType(surf_type)
|
4234
|
+
standards_info.setStandardsConstructionType(const_type)
|
4235
|
+
construction_modified[new_const_name] = new_const
|
4236
|
+
end
|
4237
|
+
surface.setConstruction(construction_modified[new_const_name])
|
4238
|
+
end
|
4239
|
+
|
4240
|
+
# Hard-assigned subsurfaces
|
4241
|
+
model.getSubSurfaces.sort.each do |surface|
|
4242
|
+
next unless surface.outsideBoundaryCondition == boundary_cond
|
4243
|
+
|
4244
|
+
case surface.subSurfaceType
|
4245
|
+
when 'FixedWindow', 'OperableWindow'
|
4246
|
+
next unless surf_type == 'ExteriorWindow'
|
4247
|
+
when 'Door'
|
4248
|
+
next unless surf_type.include?('Door')
|
4249
|
+
else
|
4250
|
+
next unless surface.subSurfaceType == surf_type
|
4251
|
+
end
|
4252
|
+
|
4253
|
+
# check if need to duplicate the construction for the surface
|
4254
|
+
const = surface.construction
|
4255
|
+
next unless const.is_initialized
|
4256
|
+
|
4257
|
+
const = const.get
|
4258
|
+
const_name = const.name.to_s
|
4259
|
+
# Reset the name by including surf_type and boundary_cond
|
4260
|
+
new_const_name = "#{const_name}_#{surf_type}_#{boundary_cond}"
|
4261
|
+
unless construction_modified.key?(new_const_name)
|
4262
|
+
# create a copy for each of constructions to meet its unique boundary_cond, surf_type and const_type
|
4263
|
+
new_const = OpenstudioStandards::Constructions.construction_deep_copy(const)
|
4264
|
+
new_const.setName(new_const_name)
|
4265
|
+
standards_info = new_const.standardsInformation
|
4266
|
+
standards_info.setIntendedSurfaceType(surf_type)
|
4267
|
+
standards_info.setStandardsConstructionType(const_type)
|
4268
|
+
construction_modified[new_const_name] = new_const
|
4269
|
+
end
|
4270
|
+
surface.setConstruction(construction_modified[new_const_name])
|
4131
4271
|
end
|
4132
4272
|
end
|
4133
4273
|
|
@@ -4138,6 +4278,8 @@ class Standard
|
|
4138
4278
|
#
|
4139
4279
|
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
4140
4280
|
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
4281
|
+
# @param wwr_building_type [String] building type used for defining window to wall ratio, e.g. 'Office > 50,000 sq ft'
|
4282
|
+
# @param wwr_info [Hash] A map that maps each building area type to its correspondent wwr.
|
4141
4283
|
# @return [Boolean] returns true if successful, false if not
|
4142
4284
|
def model_apply_standard_constructions(model, climate_zone, wwr_building_type: nil, wwr_info: {})
|
4143
4285
|
types_to_modify = []
|
@@ -4147,6 +4289,17 @@ class Standard
|
|
4147
4289
|
# Surface
|
4148
4290
|
# Outdoors
|
4149
4291
|
# Ground
|
4292
|
+
# Foundation
|
4293
|
+
# GroundFCfactorMethod
|
4294
|
+
# OtherSideCoefficients
|
4295
|
+
# OtherSideConditionsModel
|
4296
|
+
# GroundSlabPreprocessorAverage
|
4297
|
+
# GroundSlabPreprocessorCore
|
4298
|
+
# GroundSlabPreprocessorPerimeter
|
4299
|
+
# GroundBasementPreprocessorAverageWall
|
4300
|
+
# GroundBasementPreprocessorAverageFloor
|
4301
|
+
# GroundBasementPreprocessorUpperWall
|
4302
|
+
# GroundBasementPreprocessorLowerWall
|
4150
4303
|
|
4151
4304
|
# Possible surface types are
|
4152
4305
|
# Floor
|
@@ -4169,23 +4322,69 @@ class Standard
|
|
4169
4322
|
types_to_modify << ['Outdoors', 'OperableWindow']
|
4170
4323
|
types_to_modify << ['Outdoors', 'Door']
|
4171
4324
|
types_to_modify << ['Outdoors', 'GlassDoor']
|
4325
|
+
types_to_modify << ['Outdoors', 'ExteriorDoor']
|
4172
4326
|
types_to_modify << ['Outdoors', 'OverheadDoor']
|
4173
4327
|
types_to_modify << ['Outdoors', 'Skylight']
|
4328
|
+
types_to_modify << ['Surface', 'Floor']
|
4329
|
+
types_to_modify << ['Surface', 'Wall']
|
4330
|
+
types_to_modify << ['Surface', 'RoofCeiling']
|
4331
|
+
types_to_modify << ['Surface', 'FixedWindow']
|
4332
|
+
types_to_modify << ['Surface', 'OperableWindow']
|
4333
|
+
types_to_modify << ['Surface', 'Door']
|
4334
|
+
types_to_modify << ['Surface', 'GlassDoor']
|
4335
|
+
types_to_modify << ['Surface', 'OverheadDoor']
|
4174
4336
|
types_to_modify << ['Ground', 'Floor']
|
4175
4337
|
types_to_modify << ['Ground', 'Wall']
|
4338
|
+
types_to_modify << ['Foundation', 'Wall']
|
4339
|
+
types_to_modify << ['GroundFCfactorMethod', 'Wall']
|
4340
|
+
types_to_modify << ['OtherSideCoefficients', 'Wall']
|
4341
|
+
types_to_modify << ['OtherSideConditionsModel', 'Wall']
|
4342
|
+
types_to_modify << ['GroundBasementPreprocessorAverageWall', 'Wall']
|
4343
|
+
types_to_modify << ['GroundBasementPreprocessorUpperWall', 'Wall']
|
4344
|
+
types_to_modify << ['GroundBasementPreprocessorLowerWall', 'Wall']
|
4345
|
+
types_to_modify << ['Foundation', 'Floor']
|
4346
|
+
types_to_modify << ['GroundFCfactorMethod', 'Floor']
|
4347
|
+
types_to_modify << ['OtherSideCoefficients', 'Floor']
|
4348
|
+
types_to_modify << ['OtherSideConditionsModel', 'Floor']
|
4349
|
+
types_to_modify << ['GroundSlabPreprocessorAverage', 'Floor']
|
4350
|
+
types_to_modify << ['GroundSlabPreprocessorCore', 'Floor']
|
4351
|
+
types_to_modify << ['GroundSlabPreprocessorPerimeter', 'Floor']
|
4176
4352
|
|
4177
4353
|
# Find just those surfaces
|
4178
4354
|
surfaces_to_modify = []
|
4179
4355
|
surface_category = {}
|
4356
|
+
org_surface_boundary_conditions = {}
|
4180
4357
|
types_to_modify.each do |boundary_condition, surface_type|
|
4181
4358
|
# Surfaces
|
4182
4359
|
model.getSurfaces.sort.each do |surf|
|
4183
4360
|
next unless surf.outsideBoundaryCondition == boundary_condition
|
4184
4361
|
next unless surf.surfaceType == surface_type
|
4362
|
+
# legacy energy code does not require processing surface type surface.
|
4363
|
+
if surf.outsideBoundaryCondition == 'Surface' && !has_space_conditioning_category
|
4364
|
+
next
|
4365
|
+
end
|
4366
|
+
|
4367
|
+
# Check if surface is adjacent to an unenclosed or unconditioned space (e.g. attic or parking garage)
|
4368
|
+
if has_space_conditioning_category && surf.outsideBoundaryCondition == 'Surface'
|
4369
|
+
adj_space = surf.adjacentSurface.get.space.get
|
4370
|
+
adj_space_cond_type = space_conditioning_category(adj_space)
|
4371
|
+
if adj_space_cond_type == 'Unconditioned'
|
4372
|
+
# Get adjacent surface
|
4373
|
+
adjacent_surf = surf.adjacentSurface.get
|
4374
|
+
|
4375
|
+
# Store original boundary condition type
|
4376
|
+
org_surface_boundary_conditions[surf.name.to_s] = adjacent_surf
|
4185
4377
|
|
4186
|
-
|
4378
|
+
# Identify this surface as exterior
|
4379
|
+
surface_category[surf] = 'ExteriorSurface'
|
4380
|
+
|
4381
|
+
# Temporary change the surface's boundary condition to 'Outdoors' so it can be assigned a baseline construction
|
4382
|
+
surf.setOutsideBoundaryCondition('Outdoors')
|
4383
|
+
adjacent_surf.setOutsideBoundaryCondition('Outdoors')
|
4384
|
+
end
|
4385
|
+
elsif boundary_condition == 'Outdoors'
|
4187
4386
|
surface_category[surf] = 'ExteriorSurface'
|
4188
|
-
elsif
|
4387
|
+
elsif ['Ground', 'Foundation', 'GroundFCfactorMethod', 'OtherSideCoefficients', 'OtherSideConditionsModel', 'GroundSlabPreprocessorAverage', 'GroundSlabPreprocessorCore', 'GroundSlabPreprocessorPerimeter', 'GroundBasementPreprocessorAverageWall', 'GroundBasementPreprocessorAverageFloor', 'GroundBasementPreprocessorUpperWall', 'GroundBasementPreprocessorLowerWall'].include?(boundary_condition)
|
4189
4388
|
surface_category[surf] = 'GroundSurface'
|
4190
4389
|
else
|
4191
4390
|
surface_category[surf] = 'NA'
|
@@ -4206,7 +4405,21 @@ class Standard
|
|
4206
4405
|
# Modify these surfaces
|
4207
4406
|
prev_created_consts = {}
|
4208
4407
|
surfaces_to_modify.sort.each do |surf|
|
4209
|
-
|
4408
|
+
if has_space_conditioning_category
|
4409
|
+
# Get space conditioning
|
4410
|
+
space = surf.space.get
|
4411
|
+
space_cond_type = space_conditioning_category(space)
|
4412
|
+
# Do not modify constructions for unconditioned spaces
|
4413
|
+
prev_created_consts = planar_surface_apply_standard_construction(surf, climate_zone, prev_created_consts, wwr_building_type, wwr_info, surface_category[surf]) unless space_cond_type == 'Unconditioned'
|
4414
|
+
else
|
4415
|
+
# No space conditioning requirements for legacy code
|
4416
|
+
prev_created_consts = planar_surface_apply_standard_construction(surf, climate_zone, prev_created_consts, wwr_building_type, wwr_info, surface_category[surf])
|
4417
|
+
end
|
4418
|
+
|
4419
|
+
# Reset boundary conditions to original if they were temporary modified
|
4420
|
+
if org_surface_boundary_conditions.include?(surf.name.to_s)
|
4421
|
+
surf.setAdjacentSurface(org_surface_boundary_conditions[surf.name.to_s])
|
4422
|
+
end
|
4210
4423
|
end
|
4211
4424
|
|
4212
4425
|
# List the unique array of constructions
|
@@ -4218,7 +4431,7 @@ class Standard
|
|
4218
4431
|
end
|
4219
4432
|
end
|
4220
4433
|
|
4221
|
-
|
4434
|
+
true
|
4222
4435
|
end
|
4223
4436
|
|
4224
4437
|
# Returns standards data for selected construction
|
@@ -5542,7 +5755,7 @@ class Standard
|
|
5542
5755
|
if sch_type == 'Constant'
|
5543
5756
|
day_sch.addValue(OpenStudio::Time.new(0, 24, 0, 0), values[0])
|
5544
5757
|
elsif sch_type == 'Hourly'
|
5545
|
-
|
5758
|
+
24.times do |i|
|
5546
5759
|
next if values[i] == values[i + 1]
|
5547
5760
|
|
5548
5761
|
day_sch.addValue(OpenStudio::Time.new(0, i + 1, 0, 0), values[i])
|
@@ -5558,7 +5771,9 @@ class Standard
|
|
5558
5771
|
# @param building_type [String] the building type
|
5559
5772
|
# @return [Boolean] returns true if successful, false if not
|
5560
5773
|
# @author Julien Marrec
|
5561
|
-
def model_apply_baseline_swh_loops(model,
|
5774
|
+
def model_apply_baseline_swh_loops(model,
|
5775
|
+
building_type,
|
5776
|
+
swh_building_type = 'All others')
|
5562
5777
|
model.getPlantLoops.sort.each do |plant_loop|
|
5563
5778
|
# Skip non service water heating loops
|
5564
5779
|
next unless plant_loop_swh_loop?(plant_loop)
|
@@ -6069,25 +6284,14 @@ class Standard
|
|
6069
6284
|
reporting_tolerances.setToleranceforTimeHeatingSetpointNotMet(heating_tolerance_deg_c)
|
6070
6285
|
reporting_tolerances.setToleranceforTimeCoolingSetpointNotMet(cooling_tolerance_deg_c)
|
6071
6286
|
|
6072
|
-
|
6073
|
-
end
|
6074
|
-
|
6075
|
-
# Apply the standard construction to each surface in the model, based on the construction type currently assigned.
|
6076
|
-
#
|
6077
|
-
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
6078
|
-
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
6079
|
-
# @return [Boolean] returns true if successful, false if not
|
6080
|
-
def model_apply_constructions(model, climate_zone, wwr_building_type, wwr_info)
|
6081
|
-
model_apply_standard_constructions(model, climate_zone, wwr_building_type: nil, wwr_info: {})
|
6082
|
-
|
6083
|
-
return true
|
6287
|
+
true
|
6084
6288
|
end
|
6085
6289
|
|
6086
6290
|
# Generate baseline log to a specific file directory
|
6087
6291
|
# @param file_directory [String] file directory
|
6088
6292
|
# @return [Boolean] returns true if successful, false if not
|
6089
6293
|
def generate_baseline_log(file_directory)
|
6090
|
-
|
6294
|
+
true
|
6091
6295
|
end
|
6092
6296
|
|
6093
6297
|
# Update ground temperature profile based on the weather file specified in the model
|
@@ -6096,6 +6300,20 @@ class Standard
|
|
6096
6300
|
# @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
|
6097
6301
|
# @return [Boolean] returns true if successful, false if not
|
6098
6302
|
def model_update_ground_temperature_profile(model, climate_zone)
|
6099
|
-
|
6303
|
+
true
|
6100
6304
|
end
|
6101
6305
|
end
|
6306
|
+
|
6307
|
+
# Flag function to indicate whether the energy code uses conditioning category
|
6308
|
+
# for PRM calculation - default to false for legacy energy codes
|
6309
|
+
def has_space_conditioning_category
|
6310
|
+
false
|
6311
|
+
end
|
6312
|
+
|
6313
|
+
# Dummy method to avoid adjusting infiltration in PRM models using older ASHRAE 90.1 PRM methodology.
|
6314
|
+
# @param model [OpenStudio::Model::Model] openstudio model
|
6315
|
+
# @param infiltration_rate [Double] space infiltration rate at a pressure differential of 75 Pa in cfm per ft^2
|
6316
|
+
# @return [Boolean] true if successful, false if not
|
6317
|
+
def model_apply_standard_infiltration(model, infiltration_rate: nil)
|
6318
|
+
true
|
6319
|
+
end
|