openstudio-standards 0.8.3 → 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/common_paths.rb +81 -0
- data/lib/openstudio-standards/btap/common_resources/ConstructionProperties.csv +52 -0
- data/lib/openstudio-standards/btap/common_resources/Constructions.csv +37 -0
- 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/construction_sets.csv +1270 -0
- data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +121 -0
- data/lib/openstudio-standards/btap/common_resources/constructions_opaque.csv +2256 -0
- data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
- data/lib/openstudio-standards/btap/common_resources/costs_local_factors.csv +2315 -0
- data/lib/openstudio-standards/btap/common_resources/hvac_vent_ahu.csv +925 -0
- data/lib/openstudio-standards/btap/common_resources/lighting.csv +364 -0
- data/lib/openstudio-standards/btap/common_resources/lighting_sets.csv +2667 -0
- data/lib/openstudio-standards/btap/common_resources/locations.csv +75 -0
- data/lib/openstudio-standards/btap/common_resources/materials_glazing.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/materials_hvac.csv +1686 -0
- data/lib/openstudio-standards/btap/common_resources/materials_lighting.csv +267 -0
- data/lib/openstudio-standards/btap/common_resources/materials_opaque.csv +164 -0
- data/lib/openstudio-standards/btap/costing/README.md +502 -0
- data/lib/openstudio-standards/btap/costing/btap_costing.rb +469 -0
- data/lib/openstudio-standards/btap/costing/btap_measure_helper.rb +359 -0
- data/lib/openstudio-standards/btap/costing/btap_workflow.rb +117 -0
- data/lib/openstudio-standards/btap/costing/copy_test_results_files_to_expected_results.rb +11 -0
- data/lib/openstudio-standards/btap/costing/cost_building_from_file.rb +136 -0
- data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +173 -0
- data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +354 -0
- data/lib/openstudio-standards/btap/costing/dcv_costing.rb +314 -0
- data/lib/openstudio-standards/btap/costing/dummy.epw +8768 -0
- data/lib/openstudio-standards/btap/costing/dummy.osm +5320 -0
- data/lib/openstudio-standards/btap/costing/envelope_costing.rb +215 -0
- data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2584 -0
- data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +156 -0
- data/lib/openstudio-standards/btap/costing/lighting_costing.rb +209 -0
- data/lib/openstudio-standards/btap/costing/mech_sizing.json +502 -0
- data/lib/openstudio-standards/btap/costing/neb_end_use_prices.csv +42 -0
- data/lib/openstudio-standards/btap/costing/necb_2011_spacetype_info.csv +225 -0
- data/lib/openstudio-standards/btap/costing/necb_reference_runs.csv +28705 -0
- data/lib/openstudio-standards/btap/costing/nv_costing.rb +547 -0
- data/lib/openstudio-standards/btap/costing/parallel_tests.rb +92 -0
- data/lib/openstudio-standards/btap/costing/pv_ground_costing.rb +687 -0
- data/lib/openstudio-standards/btap/costing/shw_costing.rb +705 -0
- data/lib/openstudio-standards/btap/costing/test_list.txt +15 -0
- data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +27 -0
- data/lib/openstudio-standards/btap/costing/test_run_costing_tests.rb +80 -0
- data/lib/openstudio-standards/btap/costing/ventilation_costing.rb +2616 -0
- data/lib/openstudio-standards/btap/geometry.rb +86 -6
- data/lib/openstudio-standards/btap/structure.rb +657 -0
- data/lib/openstudio-standards/constructions/modify.rb +2 -1
- 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 +45 -20
- 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.Model.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 +7 -1
- 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 +21 -37
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +68 -27
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +64 -25
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +9 -14
- 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 +115 -112
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +637 -249
- 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 +75 -7
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +25 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartmentMult.osm +14272 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/data/necb_2015_table_c1.json +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +437 -437
- data/lib/openstudio-standards/standards/necb/NECB2011/data/systems.json +516 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/systems_including_sys5.json +588 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +489 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +18 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +48 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +35 -27
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +34 -23
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +8 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +68 -150
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +444 -134
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +61 -1
- data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
- data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +636 -636
- data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +38 -38
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +17 -8
- data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +636 -636
- data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +71 -71
- 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/README.md +343 -0
- data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +79 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +206 -32
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +75 -43
- data/lib/openstudio-standards/standards/necb/common/eccc_electric_grid_intensity_20250311.csv +14 -0
- data/lib/openstudio-standards/standards/necb/common/nir_gas_grid_intensity_20250311.csv +14 -0
- data/lib/openstudio-standards/standards/necb/common/system_types.yaml +0 -0
- 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/utilities/logging.rb +18 -14
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/modify.rb +2 -2
- data/lib/openstudio-standards/weather/stat_file.rb +2 -2
- data/lib/openstudio-standards.rb +67 -38
- metadata +141 -50
- 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/{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
|
@@ -75,7 +75,7 @@ module OpenstudioStandards
|
|
|
75
75
|
space.spaceInfiltrationDesignFlowRates.each do |infil|
|
|
76
76
|
if infil.designFlowRate.is_initialized
|
|
77
77
|
is_vest = true
|
|
78
|
-
OpenStudio.logFree(OpenStudio::Info, '
|
|
78
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ThermalZone', "For #{thermal_zone.name}: This zone is considered a vestibule.")
|
|
79
79
|
break
|
|
80
80
|
end
|
|
81
81
|
end
|
|
@@ -175,7 +175,7 @@ module OpenstudioStandards
|
|
|
175
175
|
htd = true
|
|
176
176
|
end
|
|
177
177
|
else
|
|
178
|
-
OpenStudio.logFree(OpenStudio::Debug, '
|
|
178
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ThermalZone', "Zone #{thermal_zone.name} used an unknown schedule type for the heating setpoint; assuming heated.")
|
|
179
179
|
htd = true
|
|
180
180
|
end
|
|
181
181
|
end
|
|
@@ -211,7 +211,7 @@ module OpenstudioStandards
|
|
|
211
211
|
htd = true
|
|
212
212
|
end
|
|
213
213
|
else
|
|
214
|
-
OpenStudio.logFree(OpenStudio::Debug, '
|
|
214
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ThermalZone', "Zone #{thermal_zone.name} used an unknown schedule type for the heating setpoint; assuming heated.")
|
|
215
215
|
htd = true
|
|
216
216
|
end
|
|
217
217
|
end
|
|
@@ -316,7 +316,7 @@ module OpenstudioStandards
|
|
|
316
316
|
cld = true
|
|
317
317
|
end
|
|
318
318
|
else
|
|
319
|
-
OpenStudio.logFree(OpenStudio::Debug, '
|
|
319
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ThermalZone', "Zone #{thermal_zone.name} used an unknown schedule type for the cooling setpoint; assuming cooled.")
|
|
320
320
|
cld = true
|
|
321
321
|
end
|
|
322
322
|
end
|
|
@@ -352,7 +352,7 @@ module OpenstudioStandards
|
|
|
352
352
|
cld = true
|
|
353
353
|
end
|
|
354
354
|
else
|
|
355
|
-
OpenStudio.logFree(OpenStudio::Debug, '
|
|
355
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ThermalZone', "Zone #{thermal_zone.name} used an unknown schedule type for the cooling setpoint; assuming cooled.")
|
|
356
356
|
cld = true
|
|
357
357
|
end
|
|
358
358
|
end
|
|
@@ -384,7 +384,7 @@ module OpenstudioStandards
|
|
|
384
384
|
def self.thermal_zone_electric_heat?(thermal_zone)
|
|
385
385
|
# error if HVACComponent heating fuels method is not available
|
|
386
386
|
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
|
387
|
-
OpenStudio.logFree(OpenStudio::Error, '
|
|
387
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ThermalZone', 'Required HVACComponent method .heatingFuelTypes is not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
|
388
388
|
end
|
|
389
389
|
|
|
390
390
|
# Get an array of the heating fuels used by the zone
|
|
@@ -404,7 +404,7 @@ module OpenstudioStandards
|
|
|
404
404
|
def self.thermal_zone_fossil_heat?(thermal_zone)
|
|
405
405
|
# error if HVACComponent heating fuels method is not available
|
|
406
406
|
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
|
407
|
-
OpenStudio.logFree(OpenStudio::Error, '
|
|
407
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ThermalZone', 'Required HVACComponent method .heatingFuelTypes is not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
|
408
408
|
end
|
|
409
409
|
|
|
410
410
|
is_fossil = false
|
|
@@ -438,7 +438,7 @@ module OpenstudioStandards
|
|
|
438
438
|
def self.thermal_zone_district_heat?(thermal_zone)
|
|
439
439
|
# error if HVACComponent heating fuels method is not available
|
|
440
440
|
if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
|
|
441
|
-
OpenStudio.logFree(OpenStudio::Error, '
|
|
441
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ThermalZone', 'Required HVACComponent method .heatingFuelTypes is not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
|
|
442
442
|
end
|
|
443
443
|
|
|
444
444
|
is_district = false
|
|
@@ -467,39 +467,6 @@ module OpenstudioStandards
|
|
|
467
467
|
return is_mixed
|
|
468
468
|
end
|
|
469
469
|
|
|
470
|
-
# Adds a thermostat that heats the space to 0 F and cools to 120 F.
|
|
471
|
-
# These numbers are outside of the threshold that is considered heated
|
|
472
|
-
# or cooled by thermal_zone_cooled?() and thermal_zone_heated?()
|
|
473
|
-
#
|
|
474
|
-
# @param thermal_zone [OpenStudio::Model::ThermalZone] OpenStudio ThermalZone object
|
|
475
|
-
# @return [Boolean] returns true if successful, false if not
|
|
476
|
-
def self.thermal_zone_add_unconditioned_thermostat(thermal_zone)
|
|
477
|
-
# Heated to 0F (below thermal_zone_heated?(thermal_zone) threshold)
|
|
478
|
-
htg_t_f = 0
|
|
479
|
-
htg_t_c = OpenStudio.convert(htg_t_f, 'F', 'C').get
|
|
480
|
-
htg_stpt_sch = OpenStudio::Model::ScheduleRuleset.new(thermal_zone.model)
|
|
481
|
-
htg_stpt_sch.setName('Unconditioned Minimal Heating')
|
|
482
|
-
htg_stpt_sch.defaultDaySchedule.setName('Unconditioned Minimal Heating Default')
|
|
483
|
-
htg_stpt_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), htg_t_c)
|
|
484
|
-
|
|
485
|
-
# Cooled to 120F (above thermal_zone_cooled?(thermal_zone) threshold)
|
|
486
|
-
clg_t_f = 120
|
|
487
|
-
clg_t_c = OpenStudio.convert(clg_t_f, 'F', 'C').get
|
|
488
|
-
clg_stpt_sch = OpenStudio::Model::ScheduleRuleset.new(thermal_zone.model)
|
|
489
|
-
clg_stpt_sch.setName('Unconditioned Minimal Heating')
|
|
490
|
-
clg_stpt_sch.defaultDaySchedule.setName('Unconditioned Minimal Heating Default')
|
|
491
|
-
clg_stpt_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), clg_t_c)
|
|
492
|
-
|
|
493
|
-
# Thermostat
|
|
494
|
-
thermostat = OpenStudio::Model::ThermostatSetpointDualSetpoint.new(thermal_zone.model)
|
|
495
|
-
thermostat.setName("#{thermal_zone.name} Unconditioned Thermostat")
|
|
496
|
-
thermostat.setHeatingSetpointTemperatureSchedule(htg_stpt_sch)
|
|
497
|
-
thermostat.setCoolingSetpointTemperatureSchedule(clg_stpt_sch)
|
|
498
|
-
thermal_zone.setThermostatSetpointDualSetpoint(thermostat)
|
|
499
|
-
|
|
500
|
-
return true
|
|
501
|
-
end
|
|
502
|
-
|
|
503
470
|
# Determine the design internal load (W) for this zone without space multipliers.
|
|
504
471
|
# This include People, Lights, Electric Equipment, and Gas Equipment in all spaces in this zone.
|
|
505
472
|
# It assumes 100% of the wattage is converted to heat, and that the design peak schedule value is 1 (100%).
|
|
@@ -569,7 +536,7 @@ module OpenstudioStandards
|
|
|
569
536
|
building_type = building_type_areas.key(building_type_areas.values.max)
|
|
570
537
|
|
|
571
538
|
if building_type.nil?
|
|
572
|
-
OpenStudio.logFree(OpenStudio::Info, '
|
|
539
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ThermalZone', "Thermal zone #{thermal_zone.name} does not have standards building type.")
|
|
573
540
|
end
|
|
574
541
|
|
|
575
542
|
return building_type
|
|
@@ -687,7 +654,7 @@ module OpenstudioStandards
|
|
|
687
654
|
# Convert to cfm
|
|
688
655
|
tot_oa_flow_rate_cfm = OpenStudio.convert(tot_oa_flow_rate, 'm^3/s', 'cfm').get
|
|
689
656
|
|
|
690
|
-
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.
|
|
657
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ThermalZone', "For #{thermal_zone.name}, design min OA = #{tot_oa_flow_rate_cfm.round} cfm.")
|
|
691
658
|
|
|
692
659
|
return tot_oa_flow_rate
|
|
693
660
|
end
|
|
@@ -711,7 +678,7 @@ module OpenstudioStandards
|
|
|
711
678
|
# Calculate the per-area value
|
|
712
679
|
tot_oa_flow_rate_per_area = tot_oa_flow_rate / sum_floor_area
|
|
713
680
|
|
|
714
|
-
# OpenStudio::logFree(OpenStudio::Debug, "openstudio.
|
|
681
|
+
# OpenStudio::logFree(OpenStudio::Debug, "openstudio.standards.ThermalZone", "For #{self.name}, OA per area = #{tot_oa_flow_rate_per_area.round(8)} m^3/s*m^2.")
|
|
715
682
|
|
|
716
683
|
return tot_oa_flow_rate_per_area
|
|
717
684
|
end
|
|
@@ -776,7 +743,7 @@ module OpenstudioStandards
|
|
|
776
743
|
new_dsn_oa.setOutdoorAirFlowRateFractionSchedule(oa_sch)
|
|
777
744
|
end
|
|
778
745
|
|
|
779
|
-
OpenStudio.logFree(OpenStudio::Info, 'openstudio.
|
|
746
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ThermalZone', "For #{thermal_zone.name}: Converted total ventilation requirements to per-area value.")
|
|
780
747
|
end
|
|
781
748
|
|
|
782
749
|
return true
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
module OpenstudioStandards
|
|
2
|
+
# The ThermalZone module provides methods to set thermostats and get information about model thermal zones
|
|
3
|
+
module ThermalZone
|
|
4
|
+
# Adds thermostat schedules to thermal zones based on the standards space type
|
|
5
|
+
# Chooses the thermostat schedule with the most restrictive setpoints (maximum heating, lowest cooling) in the schedule if multiple space types are present
|
|
6
|
+
#
|
|
7
|
+
# @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] OpenStudio ThermalZone objects
|
|
8
|
+
# @return [Boolean] returns true if successful, false if not
|
|
9
|
+
def self.thermal_zones_set_thermostat_schedules(thermal_zones)
|
|
10
|
+
# load and return thermostat mapping data
|
|
11
|
+
thermostat_data = JSON.parse(File.read("#{File.dirname(__FILE__)}/../prototypes/common/data/thermostat_schedule_lookup.json"), symbolize_names: true)
|
|
12
|
+
|
|
13
|
+
# std call to access model_add_schedule
|
|
14
|
+
# @todo refactor once schedule data is separate
|
|
15
|
+
std = Standard.build('90.1-2013')
|
|
16
|
+
|
|
17
|
+
thermal_zones.each do |thermal_zone|
|
|
18
|
+
# skip plenums
|
|
19
|
+
if OpenstudioStandards::ThermalZone.thermal_zone_plenum?(thermal_zone)
|
|
20
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ThermalZone', "Thermal Zone '#{thermal_zone.name}' is a plenum. Not adding thermostat schedules.")
|
|
21
|
+
next
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# get space types
|
|
25
|
+
thermal_zone_space_types = []
|
|
26
|
+
thermal_zone.spaces.each do |space|
|
|
27
|
+
if space.spaceType.is_initialized
|
|
28
|
+
thermal_zone_space_types << space.spaceType.get
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# check if additional properties set, and if not add it
|
|
33
|
+
has_space_type = thermal_zone_space_types[0].additionalProperties.hasFeature('standards_space_type')
|
|
34
|
+
unless has_space_type
|
|
35
|
+
OpenstudioStandards::SpaceType.set_standards_space_type_additional_properties(thermal_zone.model)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# add thermostat schedules for space type
|
|
39
|
+
zone_thermostats_options = []
|
|
40
|
+
thermal_zone_space_types.each do |space_type|
|
|
41
|
+
heating_thermostat_sch_name = nil
|
|
42
|
+
cooling_thermostat_sch_name = nil
|
|
43
|
+
|
|
44
|
+
# get the standards space type
|
|
45
|
+
space_type_name = space_type.additionalProperties.getFeatureAsString('standards_space_type').get
|
|
46
|
+
|
|
47
|
+
# get the thermostat data associated with this space type
|
|
48
|
+
space_type_data = thermostat_data.select { |h| h[:space_type] == space_type_name }
|
|
49
|
+
|
|
50
|
+
# get unique possible heating and cooling setpoint schedules
|
|
51
|
+
heating_thermostat_schs = space_type_data.map { |h| h[:heating_setpoint_schedule] }.compact.uniq
|
|
52
|
+
cooling_thermostat_schs = space_type_data.map { |h| h[:cooling_setpoint_schedule] }.compact.uniq
|
|
53
|
+
|
|
54
|
+
# check if there is a unique heating and cooling thermostat schedule for this space type
|
|
55
|
+
if (heating_thermostat_schs.size < 2) && (cooling_thermostat_schs.size < 2)
|
|
56
|
+
# if so, use it
|
|
57
|
+
heating_thermostat_sch_name = heating_thermostat_schs[0]
|
|
58
|
+
cooling_thermostat_sch_name = cooling_thermostat_schs[0]
|
|
59
|
+
else
|
|
60
|
+
# if not, get the heating and cooling thermostat schedule by standards building type
|
|
61
|
+
if space_type.standardsBuildingType.is_initialized
|
|
62
|
+
# select down to building type
|
|
63
|
+
space_type_data = space_type_data.select { |h| h[:standards_building_type] == space_type.standardsBuildingType.get }
|
|
64
|
+
if space_type_data.empty?
|
|
65
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ThermalZone', "No thermostat schedule data is available for space type '#{space_type.name} with standards space type #{space_type_name} and standards building type #{space_type.standardsBuildingType.get}. Unable to create thermostat schedules.")
|
|
66
|
+
next
|
|
67
|
+
else
|
|
68
|
+
heating_thermostat_sch_name = space_type_data[0][:heating_setpoint_schedule]
|
|
69
|
+
cooling_thermostat_sch_name = space_type_data[0][:cooling_setpoint_schedule]
|
|
70
|
+
end
|
|
71
|
+
else
|
|
72
|
+
# unable to find standards building type
|
|
73
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ThermalZone', "Multiple thermostat schedules are available for space type '#{space_type.name} with standards space type #{space_type_name} depending on building type, but building type is not specified. Using a default schedule for this space type.")
|
|
74
|
+
space_type_data = thermostat_data.find { |h| h[:space_type] == space_type_name }
|
|
75
|
+
heating_thermostat_sch_name = space_type_data[:heating_setpoint_schedule]
|
|
76
|
+
cooling_thermostat_sch_name = space_type_data[:cooling_setpoint_schedule]
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# make thermostat
|
|
81
|
+
thermostat = space_type.model.getThermostatSetpointDualSetpointByName("#{space_type.name} Thermostat")
|
|
82
|
+
if thermostat.is_initialized
|
|
83
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.ThermalZone', "#{space_type.name} thermostat already in model.")
|
|
84
|
+
thermostat = thermostat.get
|
|
85
|
+
else
|
|
86
|
+
thermostat = OpenStudio::Model::ThermostatSetpointDualSetpoint.new(space_type.model)
|
|
87
|
+
thermostat.setName("#{space_type.name} Thermostat")
|
|
88
|
+
|
|
89
|
+
unless heating_thermostat_sch_name.nil?
|
|
90
|
+
thermostat.setHeatingSetpointTemperatureSchedule(std.model_add_schedule(space_type.model, heating_thermostat_sch_name))
|
|
91
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ThermalZone', "#{space_type.name} set heating setpoint schedule to #{heating_thermostat_sch_name}.")
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
unless cooling_thermostat_sch_name.nil?
|
|
95
|
+
thermostat.setCoolingSetpointTemperatureSchedule(std.model_add_schedule(space_type.model, cooling_thermostat_sch_name))
|
|
96
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ThermalZone', "#{space_type.name} set cooling setpoint schedule to #{cooling_thermostat_sch_name}.")
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# log the schedules
|
|
101
|
+
zone_thermostats_options << thermostat
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# If only one thermostat, use it
|
|
105
|
+
if zone_thermostats_options.size == 1
|
|
106
|
+
thermal_zone.setThermostatSetpointDualSetpoint(zone_thermostats_options[0])
|
|
107
|
+
elsif zone_thermostats_options.size > 1
|
|
108
|
+
# otherwise find the zone thermostat with the most restrictive setpoints
|
|
109
|
+
# @todo logic here to pick between options
|
|
110
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ThermalZone', "Multiple thermostat options for thermal zone #{thermal_zone.name} depending on space types.")
|
|
111
|
+
thermal_zone.setThermostatSetpointDualSetpoint(zone_thermostats_options[0])
|
|
112
|
+
else
|
|
113
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ThermalZone', "Unable to find valid thermostat options for thermal zone #{thermal_zone.name} depending on space types.")
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
return true
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Adds thermostat schedules with a 0F heating setpoint and 120F cooling setpoint.
|
|
121
|
+
# These numbers are outside of the threshold that is considered heated or cooled by thermal_zone_heated? and thermal_zone_cooled?
|
|
122
|
+
#
|
|
123
|
+
# @param thermal_zone [OpenStudio::Model::ThermalZone] OpenStudio ThermalZone object
|
|
124
|
+
# @return [Boolean] returns true if successful, false if not
|
|
125
|
+
def self.thermal_zone_set_unconditioned_thermostat(thermal_zone)
|
|
126
|
+
# Heated to 0F (below thermal_zone_heated?(thermal_zone) threshold)
|
|
127
|
+
htg_t_f = 0.0
|
|
128
|
+
htg_t_c = OpenStudio.convert(htg_t_f, 'F', 'C').get
|
|
129
|
+
htg_stpt_sch = OpenStudio::Model::ScheduleRuleset.new(thermal_zone.model)
|
|
130
|
+
htg_stpt_sch.setName('Unconditioned Minimal Heating')
|
|
131
|
+
htg_stpt_sch.defaultDaySchedule.setName('Unconditioned Minimal Heating Default')
|
|
132
|
+
htg_stpt_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), htg_t_c)
|
|
133
|
+
|
|
134
|
+
# Cooled to 120F (above thermal_zone_cooled?(thermal_zone) threshold)
|
|
135
|
+
clg_t_f = 120.0
|
|
136
|
+
clg_t_c = OpenStudio.convert(clg_t_f, 'F', 'C').get
|
|
137
|
+
clg_stpt_sch = OpenStudio::Model::ScheduleRuleset.new(thermal_zone.model)
|
|
138
|
+
clg_stpt_sch.setName('Unconditioned Minimal Cooling')
|
|
139
|
+
clg_stpt_sch.defaultDaySchedule.setName('Unconditioned Minimal Cooling Default')
|
|
140
|
+
clg_stpt_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), clg_t_c)
|
|
141
|
+
|
|
142
|
+
# Thermostat
|
|
143
|
+
thermostat = OpenStudio::Model::ThermostatSetpointDualSetpoint.new(thermal_zone.model)
|
|
144
|
+
thermostat.setName("#{thermal_zone.name} Unconditioned Thermostat")
|
|
145
|
+
thermostat.setHeatingSetpointTemperatureSchedule(htg_stpt_sch)
|
|
146
|
+
thermostat.setCoolingSetpointTemperatureSchedule(clg_stpt_sch)
|
|
147
|
+
thermal_zone.setThermostatSetpointDualSetpoint(thermostat)
|
|
148
|
+
|
|
149
|
+
return true
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
@@ -4,23 +4,27 @@ $OPENSTUDIO_LOG.setLogLevel(OpenStudio::Debug)
|
|
|
4
4
|
|
|
5
5
|
# Log the info, warning, and error messages to a runner.
|
|
6
6
|
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
# @
|
|
10
|
-
def log_messages_to_runner(runner, debug = false)
|
|
7
|
+
# @param runner [OpenStudio::Measure::OSRunner] The Measure runner to add the messages to
|
|
8
|
+
# @param debug [Boolean] If true, include the debug messages in the log
|
|
9
|
+
# @param custom_exclusions [Array<String>] An array of custom strings to exclude from the log
|
|
10
|
+
def log_messages_to_runner(runner, debug = false, custom_exclusions: nil)
|
|
11
|
+
log_message_exclusions = [
|
|
12
|
+
'UseWeatherFile', # 'UseWeatherFile' is not yet a supported option for YearDescription
|
|
13
|
+
'Skipping layer', # Annoying/bogus "Skipping layer" warnings
|
|
14
|
+
'runmanager', # RunManager messages
|
|
15
|
+
'setFileExtension', # .ddy extension unexpected
|
|
16
|
+
'Translator', # Forward translator and geometry translator
|
|
17
|
+
'Successive data points', # Successive data points (2004-Jan-31 to 2001-Feb-01, ending on line 753) are greater than 1 day apart in EPW file
|
|
18
|
+
'has multiple parents', # Bogus errors about curves having multiple parents
|
|
19
|
+
'does not have an Output', # Warning from EMS translation
|
|
20
|
+
'Prior to OpenStudio 2.6.2, this field was returning a double, it now returns an Optional double' # Warning about OS API change
|
|
21
|
+
] + Array(custom_exclusions)
|
|
22
|
+
|
|
11
23
|
$OPENSTUDIO_LOG.logMessages.each do |msg|
|
|
12
24
|
# DLM: you can filter on log channel here for now
|
|
13
25
|
if /openstudio.*/ =~ msg.logChannel # /openstudio\.model\..*/
|
|
14
26
|
# Skip certain messages that are irrelevant/misleading
|
|
15
|
-
next if msg.logMessage.include?(
|
|
16
|
-
msg.logMessage.include?('Skipping layer') || # Annoying/bogus "Skipping layer" warnings
|
|
17
|
-
msg.logChannel.include?('runmanager') || # RunManager messages
|
|
18
|
-
msg.logChannel.include?('setFileExtension') || # .ddy extension unexpected
|
|
19
|
-
msg.logChannel.include?('Translator') || # Forward translator and geometry translator
|
|
20
|
-
msg.logMessage.include?('Successive data points') || # Successive data points (2004-Jan-31 to 2001-Feb-01, ending on line 753) are greater than 1 day apart in EPW file
|
|
21
|
-
msg.logMessage.include?('has multiple parents') || # Bogus errors about curves having multiple parents
|
|
22
|
-
msg.logMessage.include?('does not have an Output') || # Warning from EMS translation
|
|
23
|
-
msg.logMessage.include?('Prior to OpenStudio 2.6.2, this field was returning a double, it now returns an Optional double') # Warning about OS API change
|
|
27
|
+
next if log_message_exclusions.any? { |ex| msg.logMessage.include?(ex) }
|
|
24
28
|
|
|
25
29
|
# Report the message in the correct way
|
|
26
30
|
if msg.logLevel == OpenStudio::Info
|
|
@@ -29,7 +33,7 @@ def log_messages_to_runner(runner, debug = false)
|
|
|
29
33
|
runner.registerWarning("[#{msg.logChannel}] #{msg.logMessage}")
|
|
30
34
|
elsif msg.logLevel == OpenStudio::Error
|
|
31
35
|
runner.registerError("[#{msg.logChannel}] #{msg.logMessage}")
|
|
32
|
-
elsif msg.logLevel == OpenStudio::Debug
|
|
36
|
+
elsif debug && msg.logLevel == OpenStudio::Debug
|
|
33
37
|
runner.registerInfo("DEBUG - #{msg.logMessage}")
|
|
34
38
|
end
|
|
35
39
|
end
|
|
@@ -79,7 +79,7 @@ module OpenstudioStandards
|
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
# set ground temperature shallow values based on .stat file
|
|
82
|
-
ground_temperature_shallow =
|
|
82
|
+
ground_temperature_shallow = model.getSiteGroundTemperatureShallow
|
|
83
83
|
ground_temperature_shallow.setJanuarySurfaceGroundTemperature(stat_file.monthly_undis_ground_temps_0p5m[0])
|
|
84
84
|
ground_temperature_shallow.setFebruarySurfaceGroundTemperature(stat_file.monthly_undis_ground_temps_0p5m[1])
|
|
85
85
|
ground_temperature_shallow.setMarchSurfaceGroundTemperature(stat_file.monthly_undis_ground_temps_0p5m[2])
|
|
@@ -113,7 +113,7 @@ module OpenstudioStandards
|
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
# set ground temperature deep values based on .stat file
|
|
116
|
-
ground_temperature_deep =
|
|
116
|
+
ground_temperature_deep = model.getSiteGroundTemperatureDeep
|
|
117
117
|
ground_temperature_deep.setJanuaryDeepGroundTemperature(stat_file.monthly_undis_ground_temps_4p0m[0])
|
|
118
118
|
ground_temperature_deep.setFebruaryDeepGroundTemperature(stat_file.monthly_undis_ground_temps_4p0m[1])
|
|
119
119
|
ground_temperature_deep.setMarchDeepGroundTemperature(stat_file.monthly_undis_ground_temps_4p0m[2])
|
|
@@ -285,7 +285,7 @@ module OpenstudioStandards
|
|
|
285
285
|
|
|
286
286
|
# parse design temperatures
|
|
287
287
|
# TMYx stat file format is different than TMY3, cf #1948
|
|
288
|
-
is_tmyx = @text.include?(
|
|
288
|
+
is_tmyx = @text.include?('Wind Shelter Factor')
|
|
289
289
|
temperature_info = [
|
|
290
290
|
{ name: 'Heating Design Temperatures', regex: /Heating(\s*\d+.*)\n/, container: @heating_design_info, size: is_tmyx ? 16 : 15 },
|
|
291
291
|
{ name: 'Cooling Design Temperatures', regex: /Cooling(\s*\d+.*)\n/, container: @cooling_design_info, size: 32 },
|
|
@@ -294,7 +294,7 @@ module OpenstudioStandards
|
|
|
294
294
|
]
|
|
295
295
|
temperature_info.each { |temp_info| parse_design_temp_info(temp_info) }
|
|
296
296
|
if is_tmyx
|
|
297
|
-
@heating_design_info.pop
|
|
297
|
+
@heating_design_info.pop # remove the last value, which is the Wind Shelter Factor
|
|
298
298
|
# There is no WBmax in TMYx files, so add a nil
|
|
299
299
|
@extremes_design_info.insert(3, nil)
|
|
300
300
|
end
|