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
@@ -22,16 +22,17 @@
|
|
22
22
|
require 'fileutils'
|
23
23
|
require 'csv'
|
24
24
|
require 'securerandom'
|
25
|
+
require 'digest'
|
25
26
|
|
26
27
|
|
27
28
|
module BTAP
|
28
29
|
module FileIO
|
29
30
|
|
30
|
-
|
31
|
+
#Test Constructions Module
|
31
32
|
if __FILE__ == $0
|
32
33
|
require 'test/unit'
|
33
|
-
class FileIOTests < Test::Unit::TestCase
|
34
|
-
|
34
|
+
class FileIOTests < Test::Unit::TestCase
|
35
|
+
|
35
36
|
def setup
|
36
37
|
end
|
37
38
|
|
@@ -1191,10 +1192,175 @@ module BTAP
|
|
1191
1192
|
return new_model
|
1192
1193
|
end
|
1193
1194
|
|
1194
|
-
end #FileIO
|
1195
1195
|
|
1196
|
+
def self.clean_osm_file( file_path: ,
|
1197
|
+
output_path: )
|
1198
|
+
|
1199
|
+
def self.read_osm_file(file_path)
|
1200
|
+
data = []
|
1201
|
+
current_hash = {}
|
1202
|
+
|
1203
|
+
File.foreach(file_path) do |line|
|
1204
|
+
line.strip!
|
1205
|
+
next if line.empty?
|
1206
|
+
|
1207
|
+
if line.start_with?('OS:')
|
1208
|
+
current_hash = { type: line.split(/[;,]/).first }
|
1209
|
+
data << current_hash
|
1210
|
+
elsif line.include?('!-')
|
1211
|
+
key, value = line.split('!-').map(&:strip)
|
1212
|
+
current_hash[value] = key.chomp(',;').strip
|
1213
|
+
else
|
1214
|
+
current_hash[:id] ||= line.chomp(',;').strip
|
1215
|
+
end
|
1216
|
+
end
|
1217
|
+
|
1218
|
+
data
|
1219
|
+
end
|
1220
|
+
|
1221
|
+
def self.remove_special_characters(hash)
|
1222
|
+
hash.keys.each do |key|
|
1223
|
+
new_key = key.to_s.sub(/[;,]$/, '')
|
1224
|
+
hash[new_key] = hash.delete(key)
|
1225
|
+
end
|
1226
|
+
|
1227
|
+
hash.each do |key, value|
|
1228
|
+
next unless value.is_a?(String)
|
1229
|
+
|
1230
|
+
hash[key] = value.gsub(/[;,]$/, '')
|
1231
|
+
end
|
1232
|
+
end
|
1233
|
+
|
1234
|
+
def self.rename_handles(osm_data)
|
1235
|
+
|
1236
|
+
hash = Digest::SHA1.hexdigest("fixed_seed")
|
1237
|
+
handle_map = {}
|
1238
|
+
new_handle_index = 0
|
1239
|
+
object_type_index = 0
|
1240
|
+
last_object_type = nil
|
1241
|
+
|
1242
|
+
osm_data.each do |hash|
|
1243
|
+
if hash['Handle']
|
1244
|
+
#puts hash
|
1245
|
+
#puts "#{hash['type']} == #{last_object_type}"
|
1246
|
+
if hash['type'] != last_object_type
|
1247
|
+
last_object_type = hash['type']
|
1248
|
+
object_type_index += 1
|
1249
|
+
new_handle_index = 1
|
1250
|
+
else
|
1251
|
+
new_handle_index += 1
|
1252
|
+
end
|
1253
|
+
|
1254
|
+
# create a formatted string that is 12 charecters created with new_handle_index, but padded with 0s on the left.
|
1255
|
+
formatted_index = new_handle_index.to_s.rjust(12, '0')
|
1256
|
+
formatted_index_object_type = object_type_index.to_s.rjust(4, '0')
|
1257
|
+
new_handle = "{00000000-0000-0000-#{formatted_index_object_type}-#{formatted_index}}"
|
1258
|
+
handle_map[hash['Handle']] = new_handle
|
1259
|
+
hash['Handle'] = new_handle
|
1260
|
+
end
|
1261
|
+
end
|
1262
|
+
|
1263
|
+
osm_data.each do |hash|
|
1264
|
+
hash.each do |key, value|
|
1265
|
+
if handle_map.key?(value)
|
1266
|
+
hash[key] = handle_map[value]
|
1267
|
+
end
|
1268
|
+
end
|
1269
|
+
end
|
1270
|
+
|
1271
|
+
# Go through all hashes in osm_data and if the "Name" field value fits this pattern {9386c18d-e70a-447e-8b69-9a0a39fd8f06} replace it with an incremented value.
|
1272
|
+
name_map = {}
|
1273
|
+
new_name_index = 0
|
1274
|
+
osm_data.each do |hash|
|
1275
|
+
if hash['Name'] && hash['Name'].match?(/\{[a-fA-F0-9\-]{36}\}/)
|
1276
|
+
new_name_index += 1
|
1277
|
+
formatted_new_name_index = new_name_index.to_s.rjust(4, '0')
|
1278
|
+
new_name = "{00000000-0000-#{formatted_new_name_index}-0000-000000000000}"
|
1279
|
+
name_map[hash['Name']] = new_name
|
1280
|
+
hash['Name'] = new_name
|
1281
|
+
end
|
1282
|
+
end
|
1283
|
+
|
1284
|
+
osm_data.each do |hash|
|
1285
|
+
hash.each do |key, value|
|
1286
|
+
if name_map.key?(value)
|
1287
|
+
hash[key] = name_map[value]
|
1288
|
+
end
|
1289
|
+
end
|
1290
|
+
end
|
1291
|
+
|
1292
|
+
|
1293
|
+
end
|
1294
|
+
|
1295
|
+
|
1296
|
+
|
1297
|
+
|
1298
|
+
def self.save_osm_file(osm_data, output_path)
|
1299
|
+
File.open(output_path, 'w') do |file|
|
1300
|
+
osm_data.each do |hash|
|
1301
|
+
file.puts "#{hash["type"]},"
|
1302
|
+
hash.each do |key, value|
|
1303
|
+
next if key == "type"
|
1304
|
+
is_last_key = (hash.keys - [:type]).last == key
|
1305
|
+
if key == :id
|
1306
|
+
file.puts " #{value},"
|
1307
|
+
else
|
1308
|
+
file.puts " #{value}#{is_last_key ? ';' : ','}".ljust(42) + " !- #{key}"
|
1309
|
+
end
|
1310
|
+
end
|
1311
|
+
file.puts
|
1312
|
+
end
|
1313
|
+
end
|
1314
|
+
end
|
1315
|
+
|
1316
|
+
def self.set_all_data_time(osm_data)
|
1317
|
+
osm_data.each do |hash|
|
1318
|
+
hash.each do |key, value|
|
1319
|
+
#Check if value is in a date-time format like this "2024-10-17 01:19:35 UTC"
|
1320
|
+
if value.match?(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} UTC/)
|
1321
|
+
hash[key] = "2024-01-01 01:00:00 UTC"
|
1322
|
+
end
|
1323
|
+
end
|
1324
|
+
end
|
1325
|
+
end
|
1326
|
+
|
1327
|
+
def self.set_all_epw_paths(osm_data)
|
1328
|
+
osm_data.each do |hash|
|
1329
|
+
hash.each do |key, value|
|
1330
|
+
#Check if value is in a epw file path format like this "USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw"
|
1331
|
+
if value.match?(/.*\.epw/)
|
1332
|
+
# Get name of file without path from value
|
1333
|
+
hash[key] = File.basename(value)
|
1334
|
+
end
|
1335
|
+
end
|
1336
|
+
end
|
1337
|
+
end
|
1196
1338
|
|
1339
|
+
|
1340
|
+
osm_data = read_osm_file(file_path)
|
1341
|
+
osm_data.sort_by! { |hash| [hash[:type], hash['Name'] || ''] }
|
1197
1342
|
|
1343
|
+
handles = osm_data.map { |hash| hash['Handle'] }.compact
|
1344
|
+
duplicates = handles.select { |e| handles.count(e) > 1 }
|
1345
|
+
raise "Duplicate handles found: #{duplicates.uniq}" if duplicates.any?
|
1198
1346
|
|
1347
|
+
osm_data.each { |hash| remove_special_characters(hash) }
|
1348
|
+
set_all_data_time(osm_data)
|
1349
|
+
set_all_epw_paths(osm_data)
|
1350
|
+
rename_handles(osm_data)
|
1351
|
+
save_osm_file(osm_data, output_path)
|
1352
|
+
end
|
1199
1353
|
|
1200
|
-
|
1354
|
+
def self.get_relative_path(abs_path_to_file, working_folder)
|
1355
|
+
path = Pathname.new(abs_path_to_file).relative_path_from(Pathname.new(working_folder)).to_s
|
1356
|
+
file = File.basename(abs_path_to_file)
|
1357
|
+
rel_path= File.join(path)
|
1358
|
+
# Check if file exists
|
1359
|
+
if File.file?(File.join(working_folder, rel_path))
|
1360
|
+
return rel_path
|
1361
|
+
else
|
1362
|
+
raise "File does not exist at #{File.join(working_folder, rel_path)}"
|
1363
|
+
end
|
1364
|
+
end
|
1365
|
+
end #FileIO
|
1366
|
+
end #BTAP
|
@@ -5,15 +5,49 @@ module OpenstudioStandards
|
|
5
5
|
# Methods to create Constructions
|
6
6
|
|
7
7
|
# This will create a deep copy of the construction, meaning it will clone and create new material objects as well
|
8
|
+
# This function will clone
|
8
9
|
#
|
9
10
|
# @param construction [OpenStudio::Model::Construction] OpenStudio Construction object object
|
10
11
|
# @return [OpenStudio::Model::Construction] New OpenStudio Construction object
|
11
12
|
def self.construction_deep_copy(construction)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
new_construction.
|
13
|
+
cons_obj_type = construction.iddObjectType.valueName.to_s
|
14
|
+
case cons_obj_type
|
15
|
+
when 'OS_Construction_FfactorGroundFloor'
|
16
|
+
new_construction = construction.clone.to_FFactorGroundFloorConstruction.get
|
17
|
+
f_const = construction.to_FFactorGroundFloorConstruction.get
|
18
|
+
new_construction.setFFactor(f_const.fFactor)
|
19
|
+
new_construction.setArea(f_const.area)
|
20
|
+
new_construction.setPerimeterExposed(f_const.perimeterExposed)
|
21
|
+
when 'OS_Construction_CfactorUndergroundWall'
|
22
|
+
c_const = construction.to_CFactorUndergroundWallConstruction.get
|
23
|
+
new_construction = c_const.clone.to_CFactorUndergroundWallConstruction.get
|
24
|
+
new_construction.setCFactor(c_const.cFactor)
|
25
|
+
new_construction.setHeight(c_const.height)
|
26
|
+
when 'OS_Construction_AirBoundary'
|
27
|
+
a_const = construction.to_ConstructionAirBoundary.get
|
28
|
+
new_construction = a_const.clone.to_ConstructionAirBoundary.get
|
29
|
+
new_construction.setAirExchangeMethod(a_const.airExchangeMethod)
|
30
|
+
new_construction.setSimpleMixingAirChangesPerHour(a_const.simpleMixingAirChangesPerHour)
|
31
|
+
new_construction.setSimpleMixingSchedule(a_const.simpleMixingSchedule)
|
32
|
+
else
|
33
|
+
# Layer by layer construction
|
34
|
+
if cons_obj_type == 'OS_Construction_InternalSource'
|
35
|
+
new_construction = construction.clone.to_ConstructionWithInternalSource.get
|
36
|
+
i_const = construction.to_ConstructionWithInternalSource.get
|
37
|
+
new_construction.setSourcePresentAfterLayerNumber(i_const.sourcePresentAfterLayerNumber)
|
38
|
+
new_construction.setTemperatureCalculationRequestedAfterLayerNumber(i_const.temperatureCalculationRequestedAfterLayerNumber)
|
39
|
+
new_construction.setDimensionsForTheCTFCalculation(i_const.dimensionsForTheCTFCalculation)
|
40
|
+
new_construction.setTubeSpacing(i_const.tubeSpacing)
|
41
|
+
new_construction.setTwoDimensionalTemperatureCalculationPosition(i_const.twoDimensionalTemperatureCalculationPosition)
|
42
|
+
else
|
43
|
+
new_construction = construction.clone.to_Construction.get
|
44
|
+
end
|
45
|
+
(0..new_construction.layers.length - 1).each do |layer_number|
|
46
|
+
cloned_layer = new_construction.getLayer(layer_number).clone.to_Material.get
|
47
|
+
new_construction.setLayer(layer_number, cloned_layer)
|
48
|
+
end
|
16
49
|
end
|
50
|
+
|
17
51
|
return new_construction
|
18
52
|
end
|
19
53
|
|
@@ -336,11 +336,18 @@ module OpenstudioStandards
|
|
336
336
|
return false
|
337
337
|
end
|
338
338
|
|
339
|
-
# Change construction name
|
340
|
-
construction.setName("#{construction.name}_#{surface.name}_#{target_f_factor_ip}")
|
341
|
-
|
342
339
|
# Set properties
|
343
340
|
f_factor_si = target_f_factor_ip * OpenStudio.convert(1.0, 'Btu/ft*h*R', 'W/m*K').get
|
341
|
+
|
342
|
+
# Exception alert on tiny piece of outdoor ground floors in a space
|
343
|
+
# data is taken out from Eplus - Area / Perimeter > (R_concrete + R_film_in + R_film_out) * Ffactor
|
344
|
+
# where R_concrete = 0.15 / 1.95, R_film_in = 0.135, R_film_out = 0.03
|
345
|
+
unless area / perimeter >= ((0.15 / 1.95) + 0.135 + 0.03) * f_factor_si
|
346
|
+
OpenStudio.logFree(OpenStudio::Warn, 'OpenstudioStandards::Construction', 'The calculated area to exposed perimeter ratio is smaller than the threshold set in EnergyPlus.')
|
347
|
+
return false
|
348
|
+
end
|
349
|
+
# Change construction name
|
350
|
+
construction.setName("#{construction.name}_#{surface.name}_#{target_f_factor_ip}")
|
344
351
|
construction.setFFactor(f_factor_si)
|
345
352
|
construction.setArea(area)
|
346
353
|
construction.setPerimeterExposed(perimeter)
|
@@ -20,7 +20,7 @@ module OpenstudioStandards
|
|
20
20
|
# @param cooling_fuel [String] The primary HVAC cooling fuel type
|
21
21
|
# Options are 'Electricity', 'DistrictCooling', 'DistrictAmbient'
|
22
22
|
# @param kitchen_makeup [String] Source of makeup air for kitchen exhaust
|
23
|
-
# Options are 'None', '
|
23
|
+
# Options are 'None', 'Adjacent'
|
24
24
|
# @param exterior_lighting_zone [String] The exterior lighting zone for exterior lighting allowance.
|
25
25
|
# Options are '0 - Undeveloped Areas Parks', '1 - Developed Areas Parks', '2 - Neighborhood', '3 - All Other Areas', '4 - High Activity'
|
26
26
|
# @param add_constructions [Boolean] Create and apply default construction set
|
@@ -28,6 +28,7 @@ module OpenstudioStandards
|
|
28
28
|
# Options are 'Inferred', 'Mass', 'Metal Building', 'WoodFramed', 'SteelFramed'
|
29
29
|
# @param add_space_type_loads [Boolean] Populate existing standards space types in the model with internal loads
|
30
30
|
# @param add_daylighting_controls [Boolean] Add daylighting controls
|
31
|
+
# @param add_infiltration [Boolean] Adds infiltration to the model based on cosntruction
|
31
32
|
# @param add_elevators [Boolean] Apply elevators directly to a space in the model instead of to a space type
|
32
33
|
# @param add_internal_mass [Boolean] Add internal mass to each space
|
33
34
|
# @param add_exterior_lights [Boolean] Add exterior lightings objects to parking, canopies, and facades
|
@@ -36,6 +37,7 @@ module OpenstudioStandards
|
|
36
37
|
# @param add_swh [Boolean] Add service water heating supply and demand objects
|
37
38
|
# @param add_thermostat [Boolean] Add thermostats to thermal zones based on the standards space type
|
38
39
|
# @param add_refrigeration [Boolean] Add refrigerated cases and walkin refrigeration
|
40
|
+
# @param refrigeration_template [String] The refrigeration technology level, either 'old', 'new', or 'advanced'
|
39
41
|
# @param modify_wkdy_op_hrs [Boolean] Modify the default weekday hours of operation
|
40
42
|
# @param wkdy_op_hrs_start_time [Double] Weekday operating hours start time. Enter as a fractional value, e.g. 5:15pm is 17.25. Only used if modify_wkdy_op_hrs is true.
|
41
43
|
# @param wkdy_op_hrs_duration [Double] Weekday operating hours duration from start time. Enter as a fractional value, e.g. 5:15pm is 17.25. Only used if modify_wkdy_op_hrs is true.
|
@@ -66,6 +68,7 @@ module OpenstudioStandards
|
|
66
68
|
wall_construction_type: 'Inferred',
|
67
69
|
add_space_type_loads: true,
|
68
70
|
add_daylighting_controls: true,
|
71
|
+
add_infiltration: true,
|
69
72
|
add_elevators: true,
|
70
73
|
add_internal_mass: true,
|
71
74
|
add_exterior_lights: true,
|
@@ -74,6 +77,7 @@ module OpenstudioStandards
|
|
74
77
|
add_swh: true,
|
75
78
|
add_thermostat: true,
|
76
79
|
add_refrigeration: true,
|
80
|
+
refrigeration_template: 'new',
|
77
81
|
modify_wkdy_op_hrs: false,
|
78
82
|
wkdy_op_hrs_start_time: 8.0,
|
79
83
|
wkdy_op_hrs_duration: 8.0,
|
@@ -225,8 +229,7 @@ module OpenstudioStandards
|
|
225
229
|
end
|
226
230
|
|
227
231
|
model.getSpaceTypes.sort.each do |space_type|
|
228
|
-
|
229
|
-
test = standard.space_type_apply_internal_loads(space_type, true, true, true, true, true, false)
|
232
|
+
test = standard.space_type_apply_internal_loads(space_type, true, true, true, true, true)
|
230
233
|
if test == false
|
231
234
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CreateTypical', "Could not add loads for #{space_type.name}. Not expected for #{template}")
|
232
235
|
next
|
@@ -234,7 +237,7 @@ module OpenstudioStandards
|
|
234
237
|
|
235
238
|
# apply internal load schedules
|
236
239
|
# the last bool test it to make thermostat schedules. They are now added in HVAC section instead of here
|
237
|
-
standard.space_type_apply_internal_load_schedules(space_type, true, true, true, true, true,
|
240
|
+
standard.space_type_apply_internal_load_schedules(space_type, true, true, true, true, true, false)
|
238
241
|
|
239
242
|
# extend space type name to include the template. Consider this as well for load defs
|
240
243
|
space_type.setName("#{space_type.name} - #{template}")
|
@@ -399,15 +402,22 @@ module OpenstudioStandards
|
|
399
402
|
surface.setOutsideBoundaryCondition('Adiabatic')
|
400
403
|
end
|
401
404
|
|
402
|
-
|
405
|
+
|
406
|
+
# set ground temperatures from DOE prototype buildings
|
407
|
+
OpenstudioStandards::Weather.model_set_ground_temperatures(model, climate_zone: climate_zone)
|
408
|
+
end
|
409
|
+
|
410
|
+
# add infiltration
|
411
|
+
if add_infiltration
|
403
412
|
if remove_objects
|
404
413
|
model.getSpaceInfiltrationDesignFlowRates.each(&:remove)
|
405
414
|
end
|
406
|
-
standard.model_apply_infiltration_standard(model)
|
407
|
-
standard.model_modify_infiltration_coefficients(model, primary_bldg_type, climate_zone)
|
408
415
|
|
409
|
-
#
|
410
|
-
|
416
|
+
# use NIST method for determining infiltration
|
417
|
+
# this sets a default always on; schedules are adjusted later if HVAC is added
|
418
|
+
OpenstudioStandards::Infiltration.model_set_nist_infiltration(model,
|
419
|
+
airtightness_value: standard.default_airtightness,
|
420
|
+
air_barrier: standard.default_air_barrier)
|
411
421
|
end
|
412
422
|
|
413
423
|
# add elevators (returns ElectricEquipment object)
|
@@ -448,9 +458,11 @@ module OpenstudioStandards
|
|
448
458
|
ext_light.remove
|
449
459
|
end
|
450
460
|
end
|
451
|
-
|
452
|
-
|
453
|
-
|
461
|
+
exterior_lights = OpenstudioStandards::ExteriorLighting.model_create_typical_exterior_lighting(model,
|
462
|
+
lighting_generation: 'default',
|
463
|
+
lighting_zone: exterior_lighting_zone.chars[0].to_i,
|
464
|
+
onsite_parking_fraction: onsite_parking_fraction)
|
465
|
+
exterior_lights.each do |v|
|
454
466
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CreateTypical', "Adding Exterior Lights named #{v.exteriorLightsDefinition.name} with design level of #{v.exteriorLightsDefinition.designLevel} * #{OpenStudio.toNeatString(v.multiplier, 0, true)}.")
|
455
467
|
end
|
456
468
|
end
|
@@ -463,17 +475,10 @@ module OpenstudioStandards
|
|
463
475
|
model.getFanZoneExhausts.each(&:remove)
|
464
476
|
end
|
465
477
|
|
466
|
-
zone_exhaust_fans = standard.model_add_exhaust(model, kitchen_makeup)
|
467
|
-
zone_exhaust_fans.each do |
|
468
|
-
max_flow_rate_ip = OpenStudio.convert(
|
469
|
-
|
470
|
-
zone_mixing = v[:zone_mixing]
|
471
|
-
mixing_source_zone_name = zone_mixing.sourceZone.get.name
|
472
|
-
mixing_design_flow_rate_ip = OpenStudio.convert(zone_mixing.designFlowRate.get, 'm^3/s', 'cfm').get
|
473
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CreateTypical', "Adding #{OpenStudio.toNeatString(max_flow_rate_ip, 0, true)} (cfm) of exhaust to #{k.thermalZone.get.name}, with #{OpenStudio.toNeatString(mixing_design_flow_rate_ip, 0, true)} (cfm) of makeup air from #{mixing_source_zone_name}")
|
474
|
-
else
|
475
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CreateTypical', "Adding #{OpenStudio.toNeatString(max_flow_rate_ip, 0, true)} (cfm) of exhaust to #{k.thermalZone.get.name}")
|
476
|
-
end
|
478
|
+
zone_exhaust_fans = standard.model_add_exhaust(model, makeup_source: kitchen_makeup)
|
479
|
+
zone_exhaust_fans.each do |zone_exhaust_fan|
|
480
|
+
max_flow_rate_ip = OpenStudio.convert(zone_exhaust_fan.maximumFlowRate.get, 'm^3/s', 'cfm').get
|
481
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CreateTypical', "Adding #{OpenStudio.toNeatString(max_flow_rate_ip, 0, true)} (cfm) of exhaust to #{zone_exhaust_fan.thermalZone.get.name}")
|
477
482
|
end
|
478
483
|
end
|
479
484
|
|
@@ -504,7 +509,7 @@ module OpenstudioStandards
|
|
504
509
|
end
|
505
510
|
end
|
506
511
|
|
507
|
-
typical_swh =
|
512
|
+
typical_swh = OpenstudioStandards::ServiceWaterHeating.create_typical_service_water_heating(model, water_heating_fuel: service_water_heating_fuel)
|
508
513
|
midrise_swh_loops = []
|
509
514
|
stripmall_swh_loops = []
|
510
515
|
typical_swh.each do |loop|
|
@@ -551,10 +556,14 @@ module OpenstudioStandards
|
|
551
556
|
# remove refrigeration equipment
|
552
557
|
if remove_objects
|
553
558
|
model.getRefrigerationSystems.each(&:remove)
|
559
|
+
model.getRefrigerationCases.each(&:remove)
|
560
|
+
model.getRefrigerationWalkIns.each(&:remove)
|
561
|
+
model.getRefrigerationCompressorRacks.each(&:remove)
|
562
|
+
model.getRefrigerationCompressors.each(&:remove)
|
554
563
|
end
|
555
564
|
|
556
565
|
# Add refrigerated cases and walkins
|
557
|
-
|
566
|
+
OpenstudioStandards::Refrigeration.create_typical_refrigeration(model, template: refrigeration_template)
|
558
567
|
end
|
559
568
|
|
560
569
|
# @todo add slab modeling and slab insulation
|
@@ -575,7 +584,7 @@ module OpenstudioStandards
|
|
575
584
|
next if standard.space_type_get_standards_data(space_type).empty?
|
576
585
|
|
577
586
|
# the last bool test it to make thermostat schedules. They are added to the model but not assigned
|
578
|
-
standard.space_type_apply_internal_load_schedules(space_type, false, false, false, false, false,
|
587
|
+
standard.space_type_apply_internal_load_schedules(space_type, false, false, false, false, false, true)
|
579
588
|
|
580
589
|
# identify thermal thermostat and apply to zones (apply_internal_load_schedules names )
|
581
590
|
model.getThermostatSetpointDualSetpoints.sort.each do |thermostat|
|
@@ -803,6 +812,11 @@ module OpenstudioStandards
|
|
803
812
|
# Apply the HVAC efficiency standard
|
804
813
|
standard.model_apply_hvac_efficiency_standard(model, climate_zone)
|
805
814
|
end
|
815
|
+
|
816
|
+
# adjust infiltration schedules
|
817
|
+
if add_infiltration
|
818
|
+
OpenstudioStandards::Infiltration.model_set_nist_infiltration_schedules(model)
|
819
|
+
end
|
806
820
|
end
|
807
821
|
|
808
822
|
# set unmet hours tolerance
|
@@ -919,13 +933,13 @@ module OpenstudioStandards
|
|
919
933
|
space_types_new << space_type
|
920
934
|
|
921
935
|
# add internal loads (the nil check isn't necessary, but I will keep it in as a warning instad of an error)
|
922
|
-
test = standard.space_type_apply_internal_loads(space_type, true, true, true, true, true
|
936
|
+
test = standard.space_type_apply_internal_loads(space_type, true, true, true, true, true)
|
923
937
|
if test.nil?
|
924
938
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CreateTypical', "Could not add loads for #{space_type.name}. Not expected for #{template} #{lookup_building_type}")
|
925
939
|
end
|
926
940
|
|
927
941
|
# the last bool test it to make thermostat schedules. They are added to the model but not assigned
|
928
|
-
standard.space_type_apply_internal_load_schedules(space_type, true, true, true, true, true, true
|
942
|
+
standard.space_type_apply_internal_load_schedules(space_type, true, true, true, true, true, true)
|
929
943
|
|
930
944
|
# assign colors
|
931
945
|
standard.space_type_apply_rendering_color(space_type)
|
@@ -0,0 +1,160 @@
|
|
1
|
+
module OpenstudioStandards
|
2
|
+
# The CreateTypical module provides methods to create and modify an entire building energy model of a typical building
|
3
|
+
module CreateTypical
|
4
|
+
# @!group Space Type Information
|
5
|
+
# Assigns information like number of units, number of beds, number of students, etc. to spaces in the model. Some methods that add exterior lighting or elevators require this information
|
6
|
+
|
7
|
+
# Assign information like number of units, number of beds, number of students, etc. to spaces in the model.
|
8
|
+
#
|
9
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
10
|
+
# @param assign_properties_to_spaces [Boolean] Assign properties to Space objects
|
11
|
+
# @return [Hash] A hash of space properties
|
12
|
+
def self.model_get_space_information(model, assign_properties_to_spaces: true)
|
13
|
+
spaces_hash = {}
|
14
|
+
|
15
|
+
model.getSpaces.sort.each do |space|
|
16
|
+
space_type = space.spaceType.is_initialized ? space.spaceType.get : nil
|
17
|
+
next if space_type.nil?
|
18
|
+
|
19
|
+
# skip space if not part of floor area
|
20
|
+
next unless space.partofTotalFloorArea
|
21
|
+
|
22
|
+
standards_building_type = space_type.standardsBuildingType.is_initialized ? space_type.standardsBuildingType.get : nil
|
23
|
+
standards_space_type = space_type.standardsSpaceType.is_initialized ? space_type.standardsSpaceType.get : nil
|
24
|
+
next if standards_space_type.nil?
|
25
|
+
|
26
|
+
effective_number_of_spaces = space.multiplier
|
27
|
+
floor_area = space.floorArea * space.multiplier
|
28
|
+
number_of_people = space.numberOfPeople * space.multiplier
|
29
|
+
|
30
|
+
# determine number of units
|
31
|
+
number_of_units = 0
|
32
|
+
case standards_space_type
|
33
|
+
when 'GuestRoom', 'GuestRm', 'GuestRmOcc', 'GuestRmUnOcc', 'GuestRoom123Occ', 'GuestRoom123Vac', 'GuestRoom4Occ', 'GuestRoom4Vac', 'PatientRoom', 'PatRoom'
|
34
|
+
average_unit_size = OpenStudio.convert(350.0, 'ft^2', 'm^2').get
|
35
|
+
average_unit_size = OpenStudio.convert(280.0, 'ft^2', 'm^2').get if standards_building_type == 'LargeHotel'
|
36
|
+
number_of_units = floor_area / average_unit_size
|
37
|
+
when 'Apartment', 'ResBedroom', 'ResLiving'
|
38
|
+
average_unit_size = OpenStudio.convert(950.0, 'ft^2', 'm^2').get
|
39
|
+
number_of_units = floor_area / average_unit_size
|
40
|
+
when 'Strip mall - type 1', 'Strip mall - type 2', 'Strip mall - type 3'
|
41
|
+
average_unit_size = OpenStudio.convert(2250.0, 'ft^2', 'm^2').get
|
42
|
+
number_of_units = floor_area / average_unit_size
|
43
|
+
end
|
44
|
+
|
45
|
+
# determine number of beds
|
46
|
+
number_of_beds = 0
|
47
|
+
case standards_space_type
|
48
|
+
when 'PatientRoom', 'PatRoom', 'HspSurgOutptLab', 'HspNursing', 'ICU_PatRm', 'ICU_Open'
|
49
|
+
number_of_beds = number_of_people
|
50
|
+
end
|
51
|
+
|
52
|
+
# determine number of students
|
53
|
+
number_of_students = 0
|
54
|
+
case standards_space_type
|
55
|
+
when 'Classroom'
|
56
|
+
# assume 1 teacher
|
57
|
+
number_of_students = number_of_people - 1.0
|
58
|
+
end
|
59
|
+
|
60
|
+
# populate space hash
|
61
|
+
spaces_hash[space] = {}
|
62
|
+
spaces_hash[space][:standards_building_type] = standards_building_type
|
63
|
+
spaces_hash[space][:standards_space_type] = standards_space_type
|
64
|
+
spaces_hash[space][:effective_number_of_spaces] = effective_number_of_spaces
|
65
|
+
spaces_hash[space][:floor_area] = floor_area
|
66
|
+
spaces_hash[space][:number_of_people] = number_of_people
|
67
|
+
spaces_hash[space][:number_of_units] = number_of_units
|
68
|
+
spaces_hash[space][:number_of_beds] = number_of_beds
|
69
|
+
spaces_hash[space][:number_of_students] = number_of_students
|
70
|
+
|
71
|
+
if assign_properties_to_spaces
|
72
|
+
space.additionalProperties.setFeature('number_of_units', number_of_units)
|
73
|
+
space.additionalProperties.setFeature('number_of_beds', number_of_beds)
|
74
|
+
space.additionalProperties.setFeature('number_of_students', number_of_students)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
return spaces_hash
|
79
|
+
end
|
80
|
+
|
81
|
+
# Assign information like number of units, number of beds, number of students, etc. to space types in the model.
|
82
|
+
#
|
83
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
84
|
+
# @param assign_properties_to_space_types [Boolean] Aggregate and assign properties to SpaceType objects
|
85
|
+
# @return [Hash] A hash of space type properties
|
86
|
+
def self.model_get_space_type_information(model, assign_properties_to_space_types: true)
|
87
|
+
space_properties = OpenstudioStandards::CreateTypical.model_get_space_information(model, assign_properties_to_spaces: false)
|
88
|
+
|
89
|
+
space_type_hash = {}
|
90
|
+
model.getSpaceTypes.sort.each do |space_type|
|
91
|
+
standards_building_type = space_type.standardsBuildingType.is_initialized ? space_type.standardsBuildingType.get : nil
|
92
|
+
standards_space_type = space_type.standardsSpaceType.is_initialized ? space_type.standardsSpaceType.get : nil
|
93
|
+
next if standards_space_type.nil?
|
94
|
+
|
95
|
+
effective_number_of_spaces = 0
|
96
|
+
floor_area = 0.0
|
97
|
+
number_of_people = 0
|
98
|
+
number_of_units = 0
|
99
|
+
number_of_beds = 0
|
100
|
+
number_of_students = 0
|
101
|
+
space_type.spaces.sort.each do |space|
|
102
|
+
# skip space if not part of floor area
|
103
|
+
next unless space.partofTotalFloorArea
|
104
|
+
|
105
|
+
effective_number_of_spaces += space_properties[space][:effective_number_of_spaces]
|
106
|
+
floor_area += space_properties[space][:floor_area]
|
107
|
+
number_of_people += space_properties[space][:number_of_people]
|
108
|
+
number_of_units += space_properties[space][:number_of_units]
|
109
|
+
number_of_beds += space_properties[space][:number_of_beds]
|
110
|
+
number_of_students += space_properties[space][:number_of_students]
|
111
|
+
end
|
112
|
+
|
113
|
+
space_type_hash[space_type] = {}
|
114
|
+
space_type_hash[space_type][:standards_building_type] = standards_building_type
|
115
|
+
space_type_hash[space_type][:standards_space_type] = standards_space_type
|
116
|
+
space_type_hash[space_type][:effective_number_of_spaces] = effective_number_of_spaces
|
117
|
+
space_type_hash[space_type][:floor_area] = floor_area
|
118
|
+
space_type_hash[space_type][:number_of_people] = number_of_people
|
119
|
+
space_type_hash[space_type][:number_of_units] = number_of_units
|
120
|
+
space_type_hash[space_type][:number_of_beds] = number_of_beds
|
121
|
+
space_type_hash[space_type][:number_of_students] = number_of_students
|
122
|
+
|
123
|
+
if assign_properties_to_space_types
|
124
|
+
space_type.additionalProperties.setFeature('number_of_units', number_of_units)
|
125
|
+
space_type.additionalProperties.setFeature('number_of_beds', number_of_beds)
|
126
|
+
space_type.additionalProperties.setFeature('number_of_students', number_of_students)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
return space_type_hash
|
131
|
+
end
|
132
|
+
|
133
|
+
# Assign information like number of units, number of beds, number of students, etc. to the building object in the model.
|
134
|
+
#
|
135
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
136
|
+
# @param assign_properties_to_building [Boolean] Aggregate and assign properties to the Building object
|
137
|
+
# @return [Hash] A hash of building properties
|
138
|
+
def self.model_get_building_information(model, assign_properties_to_building: true)
|
139
|
+
space_type_properties = OpenstudioStandards::CreateTypical.model_get_space_type_information(model, assign_properties_to_space_types: false)
|
140
|
+
|
141
|
+
building = model.getBuilding
|
142
|
+
building_hash = {}
|
143
|
+
building_hash[:standards_building_type] = building.standardsBuildingType.is_initialized ? building.standardsBuildingType.get : nil
|
144
|
+
building_hash[:effective_number_of_spaces] = space_type_properties.values.sum { |v| v[:effective_number_of_spaces] || 0 }
|
145
|
+
building_hash[:floor_area] = space_type_properties.values.sum { |v| v[:floor_area] || 0 }
|
146
|
+
building_hash[:number_of_people] = space_type_properties.values.sum { |v| v[:number_of_people] || 0 }
|
147
|
+
building_hash[:number_of_units] = space_type_properties.values.sum { |v| v[:number_of_units] || 0 }
|
148
|
+
building_hash[:number_of_beds] = space_type_properties.values.sum { |v| v[:number_of_beds] || 0 }
|
149
|
+
building_hash[:number_of_students] = space_type_properties.values.sum { |v| v[:number_of_students] || 0 }
|
150
|
+
|
151
|
+
if assign_properties_to_building
|
152
|
+
building.additionalProperties.setFeature('number_of_units', building_hash[:number_of_units])
|
153
|
+
building.additionalProperties.setFeature('number_of_beds', building_hash[:number_of_beds])
|
154
|
+
building.additionalProperties.setFeature('number_of_students', building_hash[:number_of_students])
|
155
|
+
end
|
156
|
+
|
157
|
+
return building_hash
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|