openstudio-standards 0.8.4 → 0.8.5.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/ASHRAECollege.osm +30 -30
- data/data/geometry/ASHRAECourthouse.osm +22 -22
- data/data/geometry/ASHRAESmallOfficeDetailed.osm +2 -2
- data/data/geometry/DEER_Asm.osm +1 -1
- data/data/geometry/DEER_ECC.osm +1 -1
- data/data/geometry/DEER_EPr.osm +1 -1
- data/data/geometry/DEER_ERC.osm +1 -1
- data/data/geometry/DEER_ESe.osm +1 -1
- data/data/geometry/DEER_EUn.osm +1 -1
- data/data/geometry/DEER_Hsp.osm +1 -1
- data/data/geometry/DEER_Htl.osm +1 -1
- data/data/geometry/DEER_MBT.osm +1 -1
- data/data/geometry/DEER_MFm.osm +1 -1
- data/data/geometry/DEER_Nrs.osm +1 -1
- data/data/geometry/DEER_OfL.osm +1 -1
- data/data/geometry/DEER_OfS.osm +1 -1
- data/data/geometry/DEER_RFF.osm +1 -1
- data/data/geometry/DEER_RSD.osm +1 -1
- data/data/geometry/DEER_Rt3.osm +1 -1
- data/data/geometry/DEER_RtS.osm +1 -1
- data/data/standards/export_OpenStudio_libraries.rb +2 -3
- data/data/standards/test_performance_expected_dd_results.csv +42 -42
- data/lib/openstudio-standards/btap/NECB_building_types.csv +35 -0
- data/lib/openstudio-standards/btap/NECB_space_types.csv +109 -0
- data/lib/openstudio-standards/btap/activity.rb +480 -0
- data/lib/openstudio-standards/btap/attributes.rb +166 -0
- data/lib/openstudio-standards/btap/bridging.rb +561 -1402
- data/lib/openstudio-standards/btap/btap.rb +4 -2
- data/lib/openstudio-standards/btap/btap_test_helper.rb +86 -0
- data/lib/openstudio-standards/btap/carbon/btap_carbon.rb +177 -0
- data/lib/openstudio-standards/btap/{costing/common_paths.rb → common_paths.rb} +14 -11
- data/lib/openstudio-standards/btap/common_resources/carbon_frame.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_glazing.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_opaque.csv +164 -0
- data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +121 -0
- data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
- data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting.csv +59 -59
- data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_hvac.csv +1019 -1032
- data/lib/openstudio-standards/btap/costing/btap_costing.rb +3 -7
- data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +1 -5
- data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +5 -4
- data/lib/openstudio-standards/btap/costing/dcv_costing.rb +1 -1
- data/lib/openstudio-standards/btap/costing/envelope_costing.rb +112 -181
- data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +4 -4
- data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +2 -1
- data/lib/openstudio-standards/btap/costing/lighting_costing.rb +3 -3
- data/lib/openstudio-standards/btap/costing/test_list.txt +15 -17
- data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +10 -9
- data/lib/openstudio-standards/btap/geometry.rb +86 -6
- data/lib/openstudio-standards/btap/structure.rb +657 -0
- data/lib/openstudio-standards/create_typical/create_typical.rb +17 -33
- data/lib/openstudio-standards/create_typical/space_type_ratios.rb +36 -36
- data/lib/openstudio-standards/equipment/create_transformer.rb +104 -0
- data/lib/openstudio-standards/equipment/create_typical_equipment.rb +117 -0
- data/lib/openstudio-standards/equipment/data/electric_equipment_space_types.json +1514 -0
- data/lib/openstudio-standards/equipment/data/gas_equipment_space_types.json +227 -0
- data/lib/openstudio-standards/exterior_lighting/create.rb +22 -22
- data/lib/openstudio-standards/exterior_lighting/information.rb +3 -2
- data/lib/openstudio-standards/hvac/components/air_conditioner_vrf.rb +482 -0
- data/lib/openstudio-standards/hvac/components/air_terminal.rb +31 -0
- data/lib/openstudio-standards/hvac/components/boiler_hot_water.rb +163 -0
- data/lib/openstudio-standards/hvac/components/central_air_source_heat_pump.rb +220 -0
- data/lib/openstudio-standards/hvac/components/chiller.rb +25 -0
- data/lib/openstudio-standards/hvac/components/coil.rb +276 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_multi_speed.rb +40 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_single_speed.rb +300 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_two_speed.rb +187 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_water.rb +80 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_water_to_air_heat_pump_equation_fit.rb +182 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_dx_single_speed.rb +220 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_electric.rb +56 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_gas.rb +90 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_gas_multi_stage.rb +33 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_water.rb +98 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_water_to_air_heat_pump_equation_fit.rb +147 -0
- data/lib/openstudio-standards/hvac/components/component.rb +39 -0
- data/lib/openstudio-standards/{standards/ashrae_90_1/data/ashrae_90_1.fans.json → hvac/components/data/fans.json} +6 -6
- data/lib/openstudio-standards/hvac/components/fan.rb +363 -0
- data/lib/openstudio-standards/hvac/components/heat_exchanger_air_to_air.rb +203 -0
- data/lib/openstudio-standards/hvac/components/pump.rb +181 -0
- data/lib/openstudio-standards/hvac/controls/radiant_system_controls.rb +594 -0
- data/lib/openstudio-standards/hvac/conversions.rb +222 -0
- data/lib/openstudio-standards/hvac/curves.rb +192 -0
- data/lib/openstudio-standards/hvac/helpers.rb +357 -0
- data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +4 -4
- data/lib/openstudio-standards/interior_lighting/create_lights.rb +52 -0
- data/lib/openstudio-standards/interior_lighting/create_typical_interior_lighting.rb +254 -0
- data/lib/openstudio-standards/interior_lighting/data/convert_lighting_data.rb +249 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.csv +96 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.json +1429 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_technology.csv +46 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_technology.json +859 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +6 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +15 -15
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +5 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +7 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +5 -1
- data/lib/openstudio-standards/prototypes/common/data/prototype_space_type_map.json +2594 -0
- data/lib/openstudio-standards/prototypes/common/data/thermostat_schedule_lookup.json +2108 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -140
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -73
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -69
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +0 -116
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +0 -61
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +128 -13
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +606 -607
- data/lib/openstudio-standards/prototypes/common/prototype_space_type_map.rb +41 -0
- data/lib/openstudio-standards/prototypes/common/space_type_equipment_map.rb +184 -0
- data/lib/openstudio-standards/prototypes/common/space_type_thermostat_schedule_map.rb +116 -0
- data/lib/openstudio-standards/qaqc/hvac.rb +12 -12
- data/lib/openstudio-standards/refrigeration/create_compressor.rb +2 -5
- data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +4 -4
- data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +1 -2
- data/lib/openstudio-standards/service_water_heating/create_water_use.rb +5 -5
- data/lib/openstudio-standards/space_type/data/level_1_space_types.json +612 -0
- data/lib/openstudio-standards/space_type/standards_space_type.rb +53 -0
- data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +8 -26
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +13 -13
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -24
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +6 -43
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +7 -24
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +19 -44
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +25 -50
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +25 -33
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -22
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +15 -157
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +18 -105
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +3 -23
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +0 -24
- data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -86
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +0 -107
- data/lib/openstudio-standards/standards/Standards.Model.rb +6 -11
- data/lib/openstudio-standards/standards/Standards.People.rb +113 -0
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -11
- data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -147
- data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +57 -41
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +30 -153
- data/lib/openstudio-standards/standards/Standards.Ventilation.rb +74 -0
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +37 -112
- 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 +37 -102
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +37 -112
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- 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 +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.BoilerHotWater.rb +1 -1
- 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 +37 -102
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.BoilerHotWater.rb +1 -1
- 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 +45 -109
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoilHeatingGas.rb +1 -1
- 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 +45 -109
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +0 -200
- 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 +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +37 -37
- 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 +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -68
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +2 -35
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +42 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +5 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +2 -4
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +0 -200
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +0 -1
- data/lib/openstudio-standards/standards/cbes/data/cbes.curves.json +0 -200
- data/lib/openstudio-standards/standards/deer/data/deer.curves.json +0 -200
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +19 -10
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +4 -4
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +1 -1
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +69 -92
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +2 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +16 -12
- data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +799 -46
- data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +33 -51
- data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +32 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +18 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +5 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +2 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +30 -141
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +233 -112
- data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +16 -6
- data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +60 -61
- data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +30 -30
- data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +79 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +16 -4
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +65 -42
- data/lib/openstudio-standards/thermal_zone/{thermal_zone.rb → information.rb} +12 -45
- data/lib/openstudio-standards/thermal_zone/thermostat_schedules.rb +152 -0
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/stat_file.rb +2 -2
- data/lib/openstudio-standards.rb +55 -38
- metadata +106 -66
- data/lib/openstudio-standards/btap/costing/common_resources/constructions_glazing.csv +0 -61
- data/lib/openstudio-standards/btap/costing/common_resources/costs.csv +0 -1904
- data/lib/openstudio-standards/hvac/components/create.rb +0 -169
- data/lib/openstudio-standards/hvac/components/modify.rb +0 -42
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +0 -438
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +0 -123
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +0 -216
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +0 -273
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +0 -159
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +0 -77
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -154
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +0 -214
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +0 -53
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +0 -72
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +0 -95
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -125
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +0 -17
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +0 -90
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +0 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +0 -70
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +0 -590
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +0 -901
- data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -55
- data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +0 -5
- data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +0 -328
- data/lib/openstudio-standards/standards/deer/data/deer.fans.json +0 -328
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/ConstructionProperties.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/Constructions.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/construction_sets.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/constructions_opaque.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/costs_local_factors.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/hvac_vent_ahu.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting_sets.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/locations.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_glazing.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_lighting.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_opaque.csv +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
class Standard
|
|
2
|
+
# Maps older prototype space types (Standards Building Type / Standards Space Type) to new standards space types
|
|
3
|
+
# Optionally resets the Standards Space Type and new space type informational as additional properties on the space type
|
|
4
|
+
#
|
|
5
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
6
|
+
# @param reset_standards_space_type [Boolean] if true, resets the Standards Space Type to new space types
|
|
7
|
+
# @param set_additional_properties [Boolean] if true, sets additional properties on the space type with new space type information
|
|
8
|
+
# @return [Boolean] returns true if successful, false if not
|
|
9
|
+
def prototype_space_type_map(model, reset_standards_space_type: false, set_additional_properties: true)
|
|
10
|
+
# load space types mapping data
|
|
11
|
+
space_types_data = JSON.parse(File.read("#{File.dirname(__FILE__)}/data/prototype_space_type_map.json"), symbolize_names: true)
|
|
12
|
+
|
|
13
|
+
# lookup space type name for each old Standards Space Type
|
|
14
|
+
model.getSpaceTypes.each do |space_type|
|
|
15
|
+
standards_space_type = space_type.standardsSpaceType.get if space_type.standardsSpaceType.is_initialized
|
|
16
|
+
standards_building_type = space_type.standardsBuildingType.get if space_type.standardsBuildingType.is_initialized
|
|
17
|
+
|
|
18
|
+
if !standards_space_type.nil? && !standards_building_type.nil?
|
|
19
|
+
mapping = space_types_data.find { |s| s[:standards_building_type] == standards_building_type && s[:standards_space_type] == standards_space_type }
|
|
20
|
+
if mapping.nil?
|
|
21
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Prototypes', "No mapping found for standards building type '#{standards_building_type}' and standards space type '#{standards_space_type}'")
|
|
22
|
+
else
|
|
23
|
+
new_standards_space_type_name = mapping[:new_standards_space_type]
|
|
24
|
+
space_type.additionalProperties.setFeature('standards_space_type', new_standards_space_type_name)
|
|
25
|
+
if reset_standards_space_type
|
|
26
|
+
space_type.setStandardsSpaceType(new_standards_space_type_name)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
else
|
|
30
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Prototypes', "Space type '#{space_type.name}' is missing either Standards Space Type or Building Type")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# set additional properties for each space type if requested
|
|
35
|
+
if set_additional_properties
|
|
36
|
+
OpenstudioStandards::SpaceType.set_standards_space_type_additional_properties(model, space_type_field: 'AdditionalProperties', reset_standards_space_type: false)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
return true
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Create a .json for new space type thermostat setpoint schedules
|
|
2
|
+
require 'openstudio-standards'
|
|
3
|
+
|
|
4
|
+
# print gem version
|
|
5
|
+
puts "Using openstudio-standards version #{Gem.loaded_specs['openstudio-standards'].version}"
|
|
6
|
+
|
|
7
|
+
templates = [
|
|
8
|
+
'ComStock DOE Ref Pre-1980',
|
|
9
|
+
'ComStock DOE Ref 1980-2004',
|
|
10
|
+
'ComStock 90.1-2004',
|
|
11
|
+
'ComStock 90.1-2007',
|
|
12
|
+
'ComStock 90.1-2010',
|
|
13
|
+
'ComStock 90.1-2013',
|
|
14
|
+
'ComStock 90.1-2016',
|
|
15
|
+
'ComStock 90.1-2019',
|
|
16
|
+
'ComStock DEER 1985',
|
|
17
|
+
'ComStock DEER 1996',
|
|
18
|
+
'ComStock DEER 2003',
|
|
19
|
+
'ComStock DEER 2007',
|
|
20
|
+
'ComStock DEER 2011',
|
|
21
|
+
'ComStock DEER 2014',
|
|
22
|
+
'ComStock DEER 2015',
|
|
23
|
+
'ComStock DEER 2017',
|
|
24
|
+
'ComStock DEER 2020'
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
prototype_map = JSON.parse(File.read("#{File.dirname(__FILE__)}/data/prototype_space_type_map.json"), symbolize_names: true)
|
|
28
|
+
new_space_types_additional_properties = JSON.parse(File.read("#{File.dirname(__FILE__)}/../../../openstudio-standards/space_type/data/level_1_space_types.json"), symbolize_names: true)
|
|
29
|
+
|
|
30
|
+
# loop through space types and store equipment data
|
|
31
|
+
all_data_json = []
|
|
32
|
+
templates.each do |template|
|
|
33
|
+
std = Standard.build(template)
|
|
34
|
+
space_type_data = std.standards_data['space_types']
|
|
35
|
+
space_type_data.each do |e|
|
|
36
|
+
standards_building_type = e['building_type']
|
|
37
|
+
standards_space_type = e['space_type']
|
|
38
|
+
map = prototype_map.find { |s| s[:standards_building_type] == standards_building_type && s[:standards_space_type] == standards_space_type }
|
|
39
|
+
new_space_type = map.nil? ? nil : map[:new_standards_space_type]
|
|
40
|
+
space_data = new_space_types_additional_properties.find { |s| s[:space_type_name] == new_space_type }
|
|
41
|
+
electric_equipment_space_type_name = space_data.nil? ? nil : space_data[:electric_equipment_space_type_name]
|
|
42
|
+
natural_gas_equipment_space_type_name = space_data.nil? ? nil : space_data[:natural_gas_equipment_space_type_name]
|
|
43
|
+
|
|
44
|
+
all_data_json << {
|
|
45
|
+
template: e['template'],
|
|
46
|
+
standards_building_type: standards_building_type,
|
|
47
|
+
standards_space_type: standards_space_type,
|
|
48
|
+
electric_equipment_per_area: e['electric_equipment_per_area'],
|
|
49
|
+
electric_equipment_fraction_latent: e['electric_equipment_fraction_latent'],
|
|
50
|
+
electric_equipment_fraction_radiant: e['electric_equipment_fraction_radiant'],
|
|
51
|
+
electric_equipment_fraction_lost: e['electric_equipment_fraction_lost'],
|
|
52
|
+
gas_equipment_per_area: e['gas_equipment_per_area'],
|
|
53
|
+
gas_equipment_fraction_latent: e['gas_equipment_fraction_latent'],
|
|
54
|
+
gas_equipment_fraction_radiant: e['gas_equipment_fraction_radiant'],
|
|
55
|
+
gas_equipment_fraction_lost: e['gas_equipment_fraction_lost'],
|
|
56
|
+
new_space_type: new_space_type,
|
|
57
|
+
electric_equipment_space_type_name: electric_equipment_space_type_name,
|
|
58
|
+
natural_gas_equipment_space_type_name: natural_gas_equipment_space_type_name
|
|
59
|
+
}
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
all_data_json = all_data_json.sort_by { |h| h[:standards_space_type] }
|
|
63
|
+
all_data_json = all_data_json.sort_by { |h| h[:standards_building_type] }
|
|
64
|
+
|
|
65
|
+
# # Write to csv file
|
|
66
|
+
# CSV.open('data/prototype_equipment_map_intermediate.csv', 'w') do |csv|
|
|
67
|
+
# csv << all_data_json.first.keys
|
|
68
|
+
# all_data_json.each do |row|
|
|
69
|
+
# csv << row.values
|
|
70
|
+
# end
|
|
71
|
+
# end
|
|
72
|
+
|
|
73
|
+
# # Write to json file
|
|
74
|
+
# File.write('data/prototype_equipment_map_intermediate.json', JSON.pretty_generate(all_data_json))
|
|
75
|
+
|
|
76
|
+
# get equipment space type names from new_space_type field in the hashes of the all_data_json file, an array of hashes
|
|
77
|
+
all_electric_space_types = all_data_json.map { |h| h[:electric_equipment_space_type_name] }.compact.uniq
|
|
78
|
+
all_gas_space_types = all_data_json.map { |h| h[:natural_gas_equipment_space_type_name] }.compact.uniq
|
|
79
|
+
|
|
80
|
+
puts "Found #{all_electric_space_types.size} electric equipment space types and #{all_gas_space_types.size} gas equipment space types."
|
|
81
|
+
|
|
82
|
+
# for each electric equipment space type, check if there is a unique epd if so, return it. if not, report for each building type for the ComStock 90.1-2010 version
|
|
83
|
+
electric_equipment_lookup = []
|
|
84
|
+
all_electric_space_types.each do |electric_equipment_space_type|
|
|
85
|
+
elec_space_type_data = all_data_json.select { |h| (h[:electric_equipment_space_type_name] == electric_equipment_space_type) }
|
|
86
|
+
epds = elec_space_type_data.map { |h| h[:electric_equipment_per_area] }.compact.uniq
|
|
87
|
+
|
|
88
|
+
# check if there is a unique equipment setup for this space type
|
|
89
|
+
# if so, report it out
|
|
90
|
+
if epds.size < 2
|
|
91
|
+
lookup = {
|
|
92
|
+
electric_equipment_space_type_name: electric_equipment_space_type,
|
|
93
|
+
standards_building_type: nil,
|
|
94
|
+
electric_equipment_per_area: epds[0],
|
|
95
|
+
electric_equipment_per_area_units: 'W/ft^2',
|
|
96
|
+
electric_equipment_fraction_latent: elec_space_type_data[0][:electric_equipment_fraction_latent],
|
|
97
|
+
electric_equipment_fraction_radiant: elec_space_type_data[0][:electric_equipment_fraction_radiant],
|
|
98
|
+
electric_equipment_fraction_lost: elec_space_type_data[0][:electric_equipment_fraction_lost]
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
electric_equipment_lookup << lookup
|
|
102
|
+
next
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# if not, filter by standards building type
|
|
106
|
+
space_type_bldg_types = elec_space_type_data.map { |h| h[:standards_building_type] }.compact.uniq
|
|
107
|
+
space_type_bldg_types.each do |bldg_type|
|
|
108
|
+
bldg_type_elec_space_type_data = elec_space_type_data.select { |h| h[:standards_building_type] == bldg_type }
|
|
109
|
+
epds = bldg_type_elec_space_type_data.map { |h| h[:electric_equipment_per_area] }.compact.uniq
|
|
110
|
+
if epds.size > 1
|
|
111
|
+
puts "Multiple electric equipment options found for space type #{electric_equipment_space_type} in building type #{bldg_type}. Logging ComStock 90.1-2010 data."
|
|
112
|
+
bldg_type_elec_space_type_data = bldg_type_elec_space_type_data.select { |h| (h[:template] == 'ComStock 90.1-2010') }
|
|
113
|
+
end
|
|
114
|
+
if bldg_type_elec_space_type_data[0].nil?
|
|
115
|
+
puts "No electric equipment data found for space type #{electric_equipment_space_type} in building type #{bldg_type}."
|
|
116
|
+
else
|
|
117
|
+
lookup = {
|
|
118
|
+
electric_equipment_space_type_name: electric_equipment_space_type,
|
|
119
|
+
standards_building_type: bldg_type,
|
|
120
|
+
electric_equipment_per_area: bldg_type_elec_space_type_data[0][:electric_equipment_per_area],
|
|
121
|
+
electric_equipment_per_area_units: 'W/ft^2',
|
|
122
|
+
electric_equipment_fraction_latent: bldg_type_elec_space_type_data[0][:electric_equipment_fraction_latent],
|
|
123
|
+
electric_equipment_fraction_radiant: bldg_type_elec_space_type_data[0][:electric_equipment_fraction_radiant],
|
|
124
|
+
electric_equipment_fraction_lost: bldg_type_elec_space_type_data[0][:electric_equipment_fraction_lost]
|
|
125
|
+
}
|
|
126
|
+
electric_equipment_lookup << lookup
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Write to json file
|
|
132
|
+
File.write('data/electric_equipment_space_types.json', JSON.pretty_generate(electric_equipment_lookup))
|
|
133
|
+
|
|
134
|
+
# for each gas equipment space type, check if there is a unique epd if so, return it. if not, report for each building type for the ComStock 90.1-2010 version
|
|
135
|
+
gas_equipment_lookup = []
|
|
136
|
+
all_gas_space_types.each do |gas_equipment_space_type|
|
|
137
|
+
gas_space_type_data = all_data_json.select { |h| (h[:natural_gas_equipment_space_type_name] == gas_equipment_space_type) }
|
|
138
|
+
gpds = gas_space_type_data.map { |h| h[:gas_equipment_per_area] }.compact.uniq
|
|
139
|
+
|
|
140
|
+
# check if there is a unique equipment setup for this space type
|
|
141
|
+
# if so, report it out
|
|
142
|
+
if gpds.size < 2
|
|
143
|
+
lookup = {
|
|
144
|
+
natural_gas_equipment_space_type_name: gas_equipment_space_type,
|
|
145
|
+
standards_building_type: nil,
|
|
146
|
+
gas_equipment_per_area: gpds[0],
|
|
147
|
+
gas_equipment_per_area_units: 'Btu/hr*ft^2',
|
|
148
|
+
gas_equipment_fraction_latent: gas_space_type_data[0][:gas_equipment_fraction_latent],
|
|
149
|
+
gas_equipment_fraction_radiant: gas_space_type_data[0][:gas_equipment_fraction_radiant],
|
|
150
|
+
gas_equipment_fraction_lost: gas_space_type_data[0][:gas_equipment_fraction_lost]
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
gas_equipment_lookup << lookup
|
|
154
|
+
next
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# if not, filter by standards building type
|
|
158
|
+
space_type_bldg_types = gas_space_type_data.map { |h| h[:standards_building_type] }.compact.uniq
|
|
159
|
+
space_type_bldg_types.each do |bldg_type|
|
|
160
|
+
bldg_type_gas_space_type_data = gas_space_type_data.select { |h| h[:standards_building_type] == bldg_type }
|
|
161
|
+
gpds = bldg_type_gas_space_type_data.map { |h| h[:gas_equipment_per_area] }.compact.uniq
|
|
162
|
+
if gpds.size > 1
|
|
163
|
+
puts "Multiple gas equipment options found for space type #{gas_equipment_space_type} in building type #{bldg_type}. Logging ComStock 90.1-2010 data."
|
|
164
|
+
bldg_type_gas_space_type_data = bldg_type_gas_space_type_data.select { |h| (h[:template] == 'ComStock 90.1-2010') }
|
|
165
|
+
end
|
|
166
|
+
if bldg_type_gas_space_type_data[0].nil?
|
|
167
|
+
puts "No gas equipment data found for space type #{gas_equipment_space_type} in building type #{bldg_type}."
|
|
168
|
+
else
|
|
169
|
+
lookup = {
|
|
170
|
+
natural_gas_equipment_space_type_name: gas_equipment_space_type,
|
|
171
|
+
standards_building_type: bldg_type,
|
|
172
|
+
gas_equipment_per_area: bldg_type_gas_space_type_data[0][:gas_equipment_per_area],
|
|
173
|
+
gas_equipment_per_area_units: 'Btu/hr*ft^2',
|
|
174
|
+
gas_equipment_fraction_latent: bldg_type_gas_space_type_data[0][:gas_equipment_fraction_latent],
|
|
175
|
+
gas_equipment_fraction_radiant: bldg_type_gas_space_type_data[0][:gas_equipment_fraction_radiant],
|
|
176
|
+
gas_equipment_fraction_lost: bldg_type_gas_space_type_data[0][:gas_equipment_fraction_lost]
|
|
177
|
+
}
|
|
178
|
+
gas_equipment_lookup << lookup
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Write to json file
|
|
184
|
+
File.write('data/gas_equipment_space_types.json', JSON.pretty_generate(gas_equipment_lookup))
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Create a .json for new space type thermostat setpoint schedules
|
|
2
|
+
require 'openstudio-standards'
|
|
3
|
+
|
|
4
|
+
# print gem version
|
|
5
|
+
puts "Using openstudio-standards version #{Gem.loaded_specs['openstudio-standards'].version}"
|
|
6
|
+
|
|
7
|
+
templates = [
|
|
8
|
+
'ComStock DOE Ref Pre-1980',
|
|
9
|
+
'ComStock DOE Ref 1980-2004',
|
|
10
|
+
'ComStock 90.1-2004',
|
|
11
|
+
'ComStock 90.1-2007',
|
|
12
|
+
'ComStock 90.1-2010',
|
|
13
|
+
'ComStock 90.1-2013',
|
|
14
|
+
'ComStock 90.1-2016',
|
|
15
|
+
'ComStock 90.1-2019',
|
|
16
|
+
'ComStock DEER 1985',
|
|
17
|
+
'ComStock DEER 1996',
|
|
18
|
+
'ComStock DEER 2003',
|
|
19
|
+
'ComStock DEER 2007',
|
|
20
|
+
'ComStock DEER 2011',
|
|
21
|
+
'ComStock DEER 2014',
|
|
22
|
+
'ComStock DEER 2015',
|
|
23
|
+
'ComStock DEER 2017',
|
|
24
|
+
'ComStock DEER 2020'
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
prototype_map = JSON.parse(File.read("#{File.dirname(__FILE__)}/data/prototype_space_type_map.json"), symbolize_names: true)
|
|
28
|
+
|
|
29
|
+
# loop through space types and store thermostat data
|
|
30
|
+
all_data_json = []
|
|
31
|
+
templates.each do |template|
|
|
32
|
+
std = Standard.build(template)
|
|
33
|
+
space_type_data = std.standards_data['space_types']
|
|
34
|
+
space_type_data.each do |e|
|
|
35
|
+
standards_building_type = e['building_type']
|
|
36
|
+
standards_space_type = e['space_type']
|
|
37
|
+
map = prototype_map.find { |s| s[:standards_building_type] == standards_building_type && s[:standards_space_type] == standards_space_type }
|
|
38
|
+
new_space_type = map.nil? ? nil : map[:new_standards_space_type]
|
|
39
|
+
|
|
40
|
+
all_data_json << {
|
|
41
|
+
template: e['template'],
|
|
42
|
+
standards_building_type: standards_building_type,
|
|
43
|
+
standards_space_type: standards_space_type,
|
|
44
|
+
heating_setpoint_schedule: e['heating_setpoint_schedule'],
|
|
45
|
+
cooling_setpoint_schedule: e['cooling_setpoint_schedule'],
|
|
46
|
+
new_space_type: new_space_type
|
|
47
|
+
}
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
all_data_json = all_data_json.sort_by { |h| h[:standards_space_type] }
|
|
51
|
+
all_data_json = all_data_json.sort_by { |h| h[:standards_building_type] }
|
|
52
|
+
|
|
53
|
+
# # Write to csv file
|
|
54
|
+
# CSV.open('data/prototype_thermostat_map_intermediate.csv', 'w') do |csv|
|
|
55
|
+
# csv << all_data_json.first.keys
|
|
56
|
+
# all_data_json.each do |row|
|
|
57
|
+
# csv << row.values
|
|
58
|
+
# end
|
|
59
|
+
# end
|
|
60
|
+
|
|
61
|
+
# # Write to json file
|
|
62
|
+
# File.write('data/prototype_thermostat_map_intermediate.json', JSON.pretty_generate(all_data_json))
|
|
63
|
+
|
|
64
|
+
# get space type names from new_space_type field in the hashes of the all_data_json file, an array of hashes
|
|
65
|
+
all_new_space_types = all_data_json.map { |h| h[:new_space_type] }.compact.uniq
|
|
66
|
+
|
|
67
|
+
# for each space type, check if there is a unique heating thermostat schedule and a unique thermostat schedule. if so, return it. if not, report for each building type. Then, if each building type has non-unique ones, report for 90.1-2013 version
|
|
68
|
+
thermostat_schedule_lookup = []
|
|
69
|
+
all_new_space_types.each do |new_space_type|
|
|
70
|
+
new_space_type_data = all_data_json.select { |h| h[:new_space_type] == new_space_type }
|
|
71
|
+
heating_thermostat_schs = new_space_type_data.map { |h| h[:heating_setpoint_schedule] }.compact.uniq
|
|
72
|
+
cooling_thermostat_schs = new_space_type_data.map { |h| h[:cooling_setpoint_schedule] }.compact.uniq
|
|
73
|
+
|
|
74
|
+
# check if there is a unique heating and cooling thermostat for this space type
|
|
75
|
+
# if so, report it out
|
|
76
|
+
if (heating_thermostat_schs.size < 2) && (cooling_thermostat_schs.size < 2)
|
|
77
|
+
thermostat_schedule_lookup << {
|
|
78
|
+
space_type: new_space_type,
|
|
79
|
+
standards_building_type: nil,
|
|
80
|
+
heating_setpoint_schedule: heating_thermostat_schs[0],
|
|
81
|
+
cooling_setpoint_schedule: cooling_thermostat_schs[0]
|
|
82
|
+
}
|
|
83
|
+
next
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# if not, check if there is a unique heating and cooling thermostat by standards building type
|
|
87
|
+
# if so, log, otherwise use 90.1-2013
|
|
88
|
+
space_type_bldg_types = new_space_type_data.map { |h| h[:standards_building_type] }.compact.uniq
|
|
89
|
+
space_type_bldg_types.each do |bldg_type|
|
|
90
|
+
data_subset = new_space_type_data.select { |h| h[:standards_building_type] == bldg_type }
|
|
91
|
+
heating_thermostat_schs = data_subset.map { |h| h[:heating_setpoint_schedule] }.compact.uniq
|
|
92
|
+
cooling_thermostat_schs = data_subset.map { |h| h[:cooling_setpoint_schedule] }.compact.uniq
|
|
93
|
+
if (heating_thermostat_schs.size < 2) && (cooling_thermostat_schs.size < 2)
|
|
94
|
+
thermostat_schedule_lookup << {
|
|
95
|
+
space_type: new_space_type,
|
|
96
|
+
standards_building_type: bldg_type,
|
|
97
|
+
heating_setpoint_schedule: heating_thermostat_schs[0],
|
|
98
|
+
cooling_setpoint_schedule: cooling_thermostat_schs[0]
|
|
99
|
+
}
|
|
100
|
+
else
|
|
101
|
+
puts "Space type '#{new_space_type}' and standards building type '#{bldg_type}' has #{heating_thermostat_schs.size} heating setpoint schedules and #{cooling_thermostat_schs.size} cooling setpoint schedules, depending on the template. Using 'ComStock 90.1-2013'."
|
|
102
|
+
data_subset = data_subset.select { |h| h[:template] == 'ComStock 90.1-2013' }[0]
|
|
103
|
+
heating_thermostat_sch = data_subset.nil? ? nil : data_subset[:heating_setpoint_schedule]
|
|
104
|
+
cooling_thermostat_sch = data_subset.nil? ? nil : data_subset[:cooling_setpoint_schedule]
|
|
105
|
+
thermostat_schedule_lookup << {
|
|
106
|
+
space_type: new_space_type,
|
|
107
|
+
standards_building_type: bldg_type,
|
|
108
|
+
heating_setpoint_schedule: heating_thermostat_sch,
|
|
109
|
+
cooling_setpoint_schedule: cooling_thermostat_sch
|
|
110
|
+
}
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Write to json file
|
|
116
|
+
File.write('data/thermostat_schedule_lookup.json', JSON.pretty_generate(thermostat_schedule_lookup))
|
|
@@ -737,7 +737,7 @@ module OpenstudioStandards
|
|
|
737
737
|
motor_eff = component.motorEfficiency
|
|
738
738
|
|
|
739
739
|
# get eff values from standards
|
|
740
|
-
motor_bhp =
|
|
740
|
+
motor_bhp = OpenstudioStandards::HVAC.pump_get_brake_horsepower(component)
|
|
741
741
|
next if motor_bhp < 0.0001 # less than 1 watt
|
|
742
742
|
|
|
743
743
|
standard_minimum_motor_efficiency_and_size = std.pump_standard_minimum_motor_efficiency_and_size(component, motor_bhp)[0]
|
|
@@ -758,7 +758,7 @@ module OpenstudioStandards
|
|
|
758
758
|
motor_eff = component.motorEfficiency
|
|
759
759
|
|
|
760
760
|
# get eff values from standards
|
|
761
|
-
motor_bhp =
|
|
761
|
+
motor_bhp = OpenstudioStandards::HVAC.pump_get_brake_horsepower(component)
|
|
762
762
|
next if motor_bhp < 0.0001 # less than 1 watt
|
|
763
763
|
|
|
764
764
|
standard_minimum_motor_efficiency_and_size = std.pump_standard_minimum_motor_efficiency_and_size(component, motor_bhp)[0]
|
|
@@ -868,7 +868,7 @@ module OpenstudioStandards
|
|
|
868
868
|
end
|
|
869
869
|
|
|
870
870
|
# lookup chiller
|
|
871
|
-
capacity_w =
|
|
871
|
+
capacity_w = OpenstudioStandards::HVAC.chiller_electric_get_capacity(component)
|
|
872
872
|
capacity_tons = OpenStudio.convert(capacity_w, 'W', 'ton').get
|
|
873
873
|
chlr_props = std.model_find_object(std.standards_data['chillers'], search_criteria, capacity_tons, Date.today)
|
|
874
874
|
if chlr_props.nil?
|
|
@@ -912,9 +912,9 @@ module OpenstudioStandards
|
|
|
912
912
|
|
|
913
913
|
# find ac properties
|
|
914
914
|
search_criteria = std.coil_dx_find_search_criteria(component)
|
|
915
|
-
capacity_w =
|
|
915
|
+
capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_single_speed_get_capacity(component)
|
|
916
916
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
|
917
|
-
if
|
|
917
|
+
if OpenstudioStandards::HVAC.coil_dx_heat_pump?(component)
|
|
918
918
|
ac_props = std.model_find_object(std.standards_data['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
|
|
919
919
|
else
|
|
920
920
|
ac_props = std.model_find_object(std.standards_data['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
|
|
@@ -955,7 +955,7 @@ module OpenstudioStandards
|
|
|
955
955
|
|
|
956
956
|
# find ac properties
|
|
957
957
|
search_criteria = std.coil_dx_find_search_criteria(component)
|
|
958
|
-
capacity_w =
|
|
958
|
+
capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_two_speed_get_capacity(component)
|
|
959
959
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
|
960
960
|
ac_props = std.model_find_object(std.standards_data['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
|
|
961
961
|
|
|
@@ -994,7 +994,7 @@ module OpenstudioStandards
|
|
|
994
994
|
|
|
995
995
|
# find ac properties
|
|
996
996
|
search_criteria = std.coil_dx_find_search_criteria(component)
|
|
997
|
-
capacity_w =
|
|
997
|
+
capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(component)
|
|
998
998
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
|
999
999
|
ac_props = std.model_find_object(std.standards_data['heat_pumps_heating'], search_criteria, capacity_btu_per_hr, Date.today)
|
|
1000
1000
|
if ac_props.nil?
|
|
@@ -1070,7 +1070,7 @@ module OpenstudioStandards
|
|
|
1070
1070
|
|
|
1071
1071
|
# get target coefs
|
|
1072
1072
|
target_fan = OpenStudio::Model::FanVariableVolume.new(model_temp)
|
|
1073
|
-
|
|
1073
|
+
OpenstudioStandards::HVAC.fan_variable_volume_set_control_type(target_fan, control_type: 'Multi Zone VAV with Static Pressure Setpoint Reset')
|
|
1074
1074
|
|
|
1075
1075
|
# get coeficents for fan
|
|
1076
1076
|
target_fan_coefs = []
|
|
@@ -1416,13 +1416,13 @@ module OpenstudioStandards
|
|
|
1416
1416
|
obj_type = component.iddObjectType.valueName.to_s
|
|
1417
1417
|
case obj_type
|
|
1418
1418
|
when 'OS_Pump_ConstantSpeed'
|
|
1419
|
-
actual_w_per_gpm =
|
|
1419
|
+
actual_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(component.to_PumpConstantSpeed.get)
|
|
1420
1420
|
when 'OS_Pump_VariableSpeed'
|
|
1421
|
-
actual_w_per_gpm =
|
|
1421
|
+
actual_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(component.to_PumpVariableSpeed.get)
|
|
1422
1422
|
when 'OS_HeaderedPumps_ConstantSpeed'
|
|
1423
|
-
actual_w_per_gpm =
|
|
1423
|
+
actual_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(component.to_HeaderedPumpsConstantSpeed.get)
|
|
1424
1424
|
when 'OS_HeaderedPumps_VariableSpeed'
|
|
1425
|
-
actual_w_per_gpm =
|
|
1425
|
+
actual_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(component.to_HeaderedPumpsVariableSpeed.get)
|
|
1426
1426
|
else
|
|
1427
1427
|
next # Skip non-pump objects
|
|
1428
1428
|
end
|
|
@@ -33,9 +33,6 @@ module OpenstudioStandards
|
|
|
33
33
|
pc = compressor_properties.select { |r| r[:curve_type] == 'Power' }[0]
|
|
34
34
|
cc = compressor_properties.select { |r| r[:curve_type] == 'Capacity' }[0]
|
|
35
35
|
|
|
36
|
-
# TODO: replace with curve data once curves are refactored
|
|
37
|
-
std = Standard.build('90.1-2013')
|
|
38
|
-
|
|
39
36
|
# create power curve
|
|
40
37
|
power_coeffs = []
|
|
41
38
|
power_coeffs << pc[:coefficient1]
|
|
@@ -48,7 +45,7 @@ module OpenstudioStandards
|
|
|
48
45
|
power_coeffs << pc[:coefficient8]
|
|
49
46
|
power_coeffs << pc[:coefficient9]
|
|
50
47
|
power_coeffs << pc[:coefficient10]
|
|
51
|
-
power_curve =
|
|
48
|
+
power_curve = OpenstudioStandards::HVAC.create_curve_bicubic(model, power_coeffs, name: pc[:curve_name], min_x: pc[:min_val_x], max_x: pc[:max_val_x], min_y: pc[:min_val_y], max_y: pc[:max_val_y])
|
|
52
49
|
|
|
53
50
|
# create capacity curve
|
|
54
51
|
capacity_coeffs = []
|
|
@@ -62,7 +59,7 @@ module OpenstudioStandards
|
|
|
62
59
|
capacity_coeffs << cc[:coefficient8]
|
|
63
60
|
capacity_coeffs << cc[:coefficient9]
|
|
64
61
|
capacity_coeffs << cc[:coefficient10]
|
|
65
|
-
capacity_curve =
|
|
62
|
+
capacity_curve = OpenstudioStandards::HVAC.create_curve_bicubic(model, capacity_coeffs, name: cc[:curve_name], min_x: cc[:min_val_x], max_x: cc[:max_val_x], min_y: cc[:min_val_y], max_y: cc[:max_val_y])
|
|
66
63
|
|
|
67
64
|
# Make the compressor
|
|
68
65
|
compressor = OpenStudio::Model::RefrigerationCompressor.new(model)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
curve_name,template,operation_type,curve_type,coefficient1,coefficient2,coefficient3,coefficient4,coefficient5,coefficient6,coefficient7,coefficient8,coefficient9,coefficient10,min_val_x,max_val_x,min_val_y,max_val_y
|
|
2
2
|
Old_Low_Temp_Comp_Pwr_Curve,old,LT,Power,29669.27106,1027.632052,18.10662623,-442.1997136,11.13352877,-20.38045192,0.139980653,-0.058866918,-0.218451538,0.203858467,-40,-17.8,4.4,54.4
|
|
3
3
|
Old_Med_Temp_Comp_Pwr_Curve,old,MT,Power,7438.922294,-269.5975647,-9.856104461,553.5732602,-3.385889614,14.86578782,-0.100796292,0.009822793,0.097362356,-0.039675217,-23.3,7.2,10,60
|
|
4
|
-
New_Low_Temp_Comp_Pwr_Curve,new,LT,Power,
|
|
5
|
-
New_Med_Temp_Comp_Pwr_Curve,new,MT,Power,
|
|
6
|
-
Advanced_Low_Temp_Comp_Pwr_Curve,advanced,LT,Power,
|
|
7
|
-
Advanced_Med_Temp_Comp_Pwr_Curve,advanced,MT,Power,
|
|
4
|
+
New_Low_Temp_Comp_Pwr_Curve,new,LT,Power,6274.990362,61.39066125,1.620853748,129.1127948,0.874116171,1.958117256,0.030293311,0.005754678,0.004653957,-0.000749905,-40,-17.8,4.4,54.4
|
|
5
|
+
New_Med_Temp_Comp_Pwr_Curve,new,MT,Power,4994.033647,170.249719,2.846389112,356.7940341,-6.307470374,-1.409856005,0.012160476,0.076231729,-0.057527471,0.009054446,-23.3,7.2,10,60
|
|
6
|
+
Advanced_Low_Temp_Comp_Pwr_Curve,advanced,LT,Power,6274.990362,61.39066125,1.620853748,129.1127948,0.874116171,1.958117256,0.030293311,0.005754678,0.004653957,-0.000749905,-40,-17.8,4.4,54.4
|
|
7
|
+
Advanced_Med_Temp_Comp_Pwr_Curve,advanced,MT,Power,4994.033647,170.249719,2.846389112,356.7940341,-6.307470374,-1.409856005,0.012160476,0.076231729,-0.057527471,0.009054446,-23.3,7.2,10,60
|
|
8
8
|
Old_Low_Temp_Comp_Cap_Curve,old,LT,Capacity,170751.8339,6102.903702,78.2619862,-2959.432648,19.78765887,-90.95810147,0.435964768,-0.041157653,-0.60884596,0.459133262,-40,-17.8,4.4,54.4
|
|
9
9
|
Old_Med_Temp_Comp_Cap_Curve,old,MT,Capacity,151166.4362,5266.347888,60.67271508,-1851.559382,5.731327549,-46.92771731,0.136401203,-0.035697884,-0.403053994,-0.039290478,-23.3,7.2,10,60
|
|
10
10
|
New_Low_Temp_Comp_Cap_Curve,new,LT,Capacity,58336.86118,1561.7435,6.606812861,-283.6500679,-0.120234941,-12.49574858,-0.116278559,0.002277001,-0.118148325,0.032839613,-40,-17.8,4.4,54.4
|
|
@@ -462,8 +462,7 @@ module OpenstudioStandards
|
|
|
462
462
|
|
|
463
463
|
# add EMS for overriding HPWH setpoints schedules (for upper/lower heating element in water tank and compressor in heat pump)
|
|
464
464
|
if heat_pump_type == 'WrappedCondenser' && use_ems_control
|
|
465
|
-
|
|
466
|
-
hpwh_name_ems_friendly = std.ems_friendly_name(hpwh.name)
|
|
465
|
+
hpwh_name_ems_friendly = OpenstudioStandards::HVAC.ems_friendly_name(hpwh.name)
|
|
467
466
|
|
|
468
467
|
# create an ambient temperature sensor for the air that blows through the HPWH evaporator
|
|
469
468
|
if water_heater_thermal_zone.nil?
|
|
@@ -50,7 +50,7 @@ module OpenstudioStandards
|
|
|
50
50
|
water_use_def.setSensibleFractionSchedule(water_use_sensible_frac_sch)
|
|
51
51
|
water_use_def.setLatentFractionSchedule(water_use_latent_frac_sch)
|
|
52
52
|
water_use_def.setPeakFlowRate(flow_rate)
|
|
53
|
-
water_use_def.setName("#{name} #{flow_rate_gpm.round(
|
|
53
|
+
water_use_def.setName("#{name} #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
|
|
54
54
|
|
|
55
55
|
# target mixed water temperature
|
|
56
56
|
if water_use_temperature_schedule.nil?
|
|
@@ -71,11 +71,11 @@ module OpenstudioStandards
|
|
|
71
71
|
|
|
72
72
|
# add to the space if provided
|
|
73
73
|
if space.nil?
|
|
74
|
-
water_fixture.setName("#{name} Service Water Use #{flow_rate_gpm.round(
|
|
75
|
-
swh_connection.setName("#{name} WUC #{flow_rate_gpm.round(
|
|
74
|
+
water_fixture.setName("#{name} Service Water Use #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
|
|
75
|
+
swh_connection.setName("#{name} WUC #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
|
|
76
76
|
else
|
|
77
|
-
water_fixture.setName("#{space.name} Service Water Use #{flow_rate_gpm.round(
|
|
78
|
-
swh_connection.setName("#{space.name} WUC #{flow_rate_gpm.round(
|
|
77
|
+
water_fixture.setName("#{space.name} Service Water Use #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
|
|
78
|
+
swh_connection.setName("#{space.name} WUC #{flow_rate_gpm.round(4)}gpm #{water_use_temperature_f.round}F")
|
|
79
79
|
water_fixture.setSpace(space)
|
|
80
80
|
end
|
|
81
81
|
|