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
|
@@ -6,38 +6,52 @@ class NECB2011 < Standard
|
|
|
6
6
|
|
|
7
7
|
@template = new.class.name
|
|
8
8
|
register_standard(@template)
|
|
9
|
-
attr_reader :tbd
|
|
10
9
|
attr_reader :template
|
|
10
|
+
attr_reader :tbd
|
|
11
|
+
attr_reader :osut
|
|
12
|
+
attr_reader :activity
|
|
13
|
+
attr_reader :structure
|
|
11
14
|
attr_accessor :standards_data
|
|
12
15
|
attr_accessor :space_type_map
|
|
13
16
|
attr_accessor :space_multiplier_map
|
|
14
17
|
attr_accessor :fuel_type_set
|
|
15
18
|
|
|
16
|
-
# This is a helper method to convert arguments
|
|
19
|
+
# This is a helper method to convert arguments to float.
|
|
20
|
+
# If variable undefined set to the default
|
|
21
|
+
# If already a numeric then return it
|
|
22
|
+
# If variable is a string then convert to a float, using the default if 'NECB_Default'
|
|
23
|
+
# If that all fails then return the default.
|
|
17
24
|
def convert_arg_to_f(variable:, default:)
|
|
25
|
+
return default if variable.nil?
|
|
18
26
|
return variable if variable.kind_of?(Numeric)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
if variable.is_a? String
|
|
28
|
+
return default if variable.to_s.downcase == 'necb_default'
|
|
29
|
+
variable = variable.strip
|
|
30
|
+
return variable.to_f
|
|
31
|
+
end
|
|
32
|
+
return default
|
|
24
33
|
end
|
|
25
34
|
|
|
26
|
-
# This method converts arguments to bool.
|
|
27
|
-
#
|
|
35
|
+
# This method converts arguments to bool.
|
|
36
|
+
# If variable undefined set to the default
|
|
37
|
+
# If already a bool then return it
|
|
38
|
+
# If variable is a string then convert to a bool, using the default if 'NECB_Default'
|
|
39
|
+
# If that all fails then return the default.
|
|
28
40
|
def convert_arg_to_bool(variable:, default:)
|
|
29
41
|
return default if variable.nil?
|
|
42
|
+
return variable if variable.is_a?(TrueClass) || variable.is_a?(FalseClass)
|
|
30
43
|
if variable.is_a? String
|
|
31
|
-
return
|
|
44
|
+
return default if variable.to_s.downcase == 'necb_default'
|
|
32
45
|
return false if variable.to_s.downcase == 'false'
|
|
33
|
-
return
|
|
46
|
+
return true if variable.to_s.downcase == 'true'
|
|
34
47
|
end
|
|
35
|
-
return variable if variable.is_a?(TrueClass) || variable.is_a?(FalseClass)
|
|
36
48
|
return default
|
|
37
49
|
end
|
|
38
50
|
|
|
39
|
-
# This method checks if a variable is a string.
|
|
40
|
-
#
|
|
51
|
+
# This method checks if a variable is a string.
|
|
52
|
+
# If variable undefined set to the default
|
|
53
|
+
# If variable is a string then return it, using the default if 'NECB_Default'
|
|
54
|
+
# If that all fails then return the default.
|
|
41
55
|
def convert_arg_to_string(variable:, default:)
|
|
42
56
|
return default if variable.nil?
|
|
43
57
|
if variable.is_a? String
|
|
@@ -149,6 +163,10 @@ class NECB2011 < Standard
|
|
|
149
163
|
@standards_data = load_standards_database_new
|
|
150
164
|
corrupt_standards_database
|
|
151
165
|
@tbd = nil
|
|
166
|
+
@activity = nil
|
|
167
|
+
@structure = nil
|
|
168
|
+
@osut = {gra0: 0, graX: 0, status: 0, logs: []} # "gra": "gross roof area"
|
|
169
|
+
|
|
152
170
|
# puts "loaded these tables..."
|
|
153
171
|
# puts @standards_data.keys.size
|
|
154
172
|
# raise("tables not all loaded in parent #{}") if @standards_data.keys.size < 24
|
|
@@ -180,6 +198,22 @@ class NECB2011 < Standard
|
|
|
180
198
|
min_distance = 100000000000000.0
|
|
181
199
|
necb_closest = nil
|
|
182
200
|
weather_file_path = model.weatherFile.get.path.get.to_s
|
|
201
|
+
|
|
202
|
+
# Check if weather file exists at the specified path
|
|
203
|
+
unless File.exist?(weather_file_path)
|
|
204
|
+
# Try to find the file in the data/weather folder
|
|
205
|
+
weather_file_name = File.basename(weather_file_path)
|
|
206
|
+
data_weather_path = File.absolute_path(File.join(__FILE__, '..', '..', '..', '..', '..', '..', 'data', 'weather', weather_file_name))
|
|
207
|
+
|
|
208
|
+
if File.exist?(data_weather_path)
|
|
209
|
+
weather_file_path = data_weather_path
|
|
210
|
+
# Update the model's weather file path to point to the found file
|
|
211
|
+
OpenstudioStandards::Weather.model_set_building_location(model, weather_file_path: weather_file_path)
|
|
212
|
+
else
|
|
213
|
+
raise "Weather file not found at #{weather_file_path} or #{data_weather_path}"
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
183
217
|
epw_file = model.weatherFile.get.file.get
|
|
184
218
|
stat_file_path = weather_file_path.gsub('.epw', '.stat')
|
|
185
219
|
stat_file = OpenstudioStandards::Weather::StatFile.new(stat_file_path)
|
|
@@ -211,6 +245,7 @@ class NECB2011 < Standard
|
|
|
211
245
|
# This method is a wrapper to create the 16 archetypes easily. # 55 args
|
|
212
246
|
def model_create_prototype_model(template:,
|
|
213
247
|
building_type:,
|
|
248
|
+
construction_opt: '',
|
|
214
249
|
epw_file:,
|
|
215
250
|
custom_weather_folder: nil,
|
|
216
251
|
debug: false,
|
|
@@ -250,6 +285,7 @@ class NECB2011 < Standard
|
|
|
250
285
|
rotation_degrees: nil,
|
|
251
286
|
fdwr_set: -1.0,
|
|
252
287
|
srr_set: -1.0,
|
|
288
|
+
srr_opt: '',
|
|
253
289
|
nv_type: nil,
|
|
254
290
|
nv_opening_fraction: nil,
|
|
255
291
|
nv_temp_out_min: nil,
|
|
@@ -272,8 +308,8 @@ class NECB2011 < Standard
|
|
|
272
308
|
output_meters: nil,
|
|
273
309
|
airloop_economizer_type: nil,
|
|
274
310
|
baseline_system_zones_map_option: nil,
|
|
275
|
-
tbd_option:
|
|
276
|
-
tbd_interpolate:
|
|
311
|
+
tbd_option: 'none',
|
|
312
|
+
tbd_interpolate: true,
|
|
277
313
|
necb_hdd: true,
|
|
278
314
|
boiler_fuel: nil,
|
|
279
315
|
boiler_cap_ratio: nil,
|
|
@@ -281,6 +317,7 @@ class NECB2011 < Standard
|
|
|
281
317
|
oerd_utility_pricing: nil)
|
|
282
318
|
model = load_building_type_from_library(building_type: building_type)
|
|
283
319
|
return model_apply_standard(model: model,
|
|
320
|
+
construction_opt: construction_opt,
|
|
284
321
|
tbd_option: tbd_option,
|
|
285
322
|
tbd_interpolate: tbd_interpolate,
|
|
286
323
|
epw_file: epw_file,
|
|
@@ -321,6 +358,7 @@ class NECB2011 < Standard
|
|
|
321
358
|
rotation_degrees: rotation_degrees,
|
|
322
359
|
fdwr_set: fdwr_set,
|
|
323
360
|
srr_set: srr_set,
|
|
361
|
+
srr_opt: srr_opt,
|
|
324
362
|
nv_type: nv_type, # Two options: (1) nil/none/false/'NECB_Default', (2) 'add_nv'
|
|
325
363
|
nv_opening_fraction: nv_opening_fraction, # options: (1) nil/none/false (2) 'NECB_Default' (i.e. 0.1), (3) opening fraction of windows, which can be a float number between 0.0 and 1.0
|
|
326
364
|
nv_temp_out_min: nv_temp_out_min, # options: (1) nil/none/false(2) 'NECB_Default' (i.e. 13.0 based on inputs from Michel Tardif re a real school in QC), (3) minimum outdoor air temperature (in Celsius) below which natural ventilation is shut down
|
|
@@ -364,8 +402,9 @@ class NECB2011 < Standard
|
|
|
364
402
|
# Created this method so that additional methods can be addded for bulding the prototype model in later
|
|
365
403
|
# code versions without modifying the build_protoype_model method or copying it wholesale for a few changes.
|
|
366
404
|
def model_apply_standard(model:,
|
|
367
|
-
|
|
368
|
-
|
|
405
|
+
construction_opt: '',
|
|
406
|
+
tbd_option: 'none',
|
|
407
|
+
tbd_interpolate: true,
|
|
369
408
|
epw_file:,
|
|
370
409
|
custom_weather_folder: nil,
|
|
371
410
|
btap_weather: true,
|
|
@@ -406,6 +445,7 @@ class NECB2011 < Standard
|
|
|
406
445
|
skylight_solar_trans: nil,
|
|
407
446
|
fdwr_set: nil,
|
|
408
447
|
srr_set: nil,
|
|
448
|
+
srr_opt: '',
|
|
409
449
|
rotation_degrees: nil,
|
|
410
450
|
scale_x: nil,
|
|
411
451
|
scale_y: nil,
|
|
@@ -445,6 +485,11 @@ class NECB2011 < Standard
|
|
|
445
485
|
clean_and_scale_model(model: model, rotation_degrees: rotation_degrees, scale_x: scale_x, scale_y: scale_y, scale_z: scale_z)
|
|
446
486
|
fdwr_set = convert_arg_to_f(variable: fdwr_set, default: -1)
|
|
447
487
|
srr_set = convert_arg_to_f(variable: srr_set, default: -1)
|
|
488
|
+
srr_opt = convert_arg_to_string(variable: srr_opt, default: '')
|
|
489
|
+
construction_opt = convert_arg_to_string(variable: construction_opt, default: '')
|
|
490
|
+
massive = construction_opt == 'structure'
|
|
491
|
+
tbd_option = convert_arg_to_string(variable: tbd_option, default: 'none')
|
|
492
|
+
tbd_interpolate = convert_arg_to_bool(variable: tbd_interpolate, default: true)
|
|
448
493
|
necb_hdd = convert_arg_to_bool(variable: necb_hdd, default: true)
|
|
449
494
|
boiler_fuel = convert_arg_to_string(variable: boiler_fuel, default: nil)
|
|
450
495
|
boiler_cap_ratio = convert_arg_to_string(variable: boiler_cap_ratio, default: nil)
|
|
@@ -472,6 +517,8 @@ class NECB2011 < Standard
|
|
|
472
517
|
|
|
473
518
|
output_meters = check_output_meters(output_meters: output_meters) if oerd_utility_pricing
|
|
474
519
|
|
|
520
|
+
assign_building_activity(model: model)
|
|
521
|
+
assign_building_structure(model: model, activity: @activity, massive: massive)
|
|
475
522
|
apply_loads(model: model,
|
|
476
523
|
lights_type: lights_type,
|
|
477
524
|
lights_scale: lights_scale,
|
|
@@ -479,6 +526,9 @@ class NECB2011 < Standard
|
|
|
479
526
|
electrical_loads_scale: electrical_loads_scale,
|
|
480
527
|
oa_scale: oa_scale)
|
|
481
528
|
apply_envelope(model: model,
|
|
529
|
+
construction_opt: construction_opt,
|
|
530
|
+
bldg_category: @activity.category,
|
|
531
|
+
bldg_structure: @structure.structure,
|
|
482
532
|
ext_wall_cond: ext_wall_cond,
|
|
483
533
|
ext_floor_cond: ext_floor_cond,
|
|
484
534
|
ext_roof_cond: ext_roof_cond,
|
|
@@ -498,18 +548,21 @@ class NECB2011 < Standard
|
|
|
498
548
|
apply_fdwr_srr_daylighting(model: model,
|
|
499
549
|
fdwr_set: fdwr_set,
|
|
500
550
|
srr_set: srr_set,
|
|
551
|
+
srr_opt: srr_opt,
|
|
501
552
|
necb_hdd: necb_hdd)
|
|
502
553
|
apply_thermal_bridging(model: model,
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
554
|
+
necb_hdd: necb_hdd,
|
|
555
|
+
structure: @structure,
|
|
556
|
+
option: tbd_option,
|
|
557
|
+
interpolate: tbd_interpolate,
|
|
558
|
+
wallU: ext_wall_cond,
|
|
559
|
+
floorU: ext_floor_cond,
|
|
560
|
+
roofU: ext_roof_cond)
|
|
508
561
|
apply_auto_zoning(model: model,
|
|
509
562
|
sizing_run_dir: sizing_run_dir,
|
|
510
563
|
lights_type: lights_type,
|
|
511
564
|
lights_scale: lights_scale)
|
|
512
|
-
apply_kiva_foundation(model)
|
|
565
|
+
apply_kiva_foundation(model, massive)
|
|
513
566
|
apply_systems_and_efficiencies(model: model,
|
|
514
567
|
sizing_run_dir: sizing_run_dir,
|
|
515
568
|
hvac_system_primary: hvac_system_primary,
|
|
@@ -550,7 +603,7 @@ class NECB2011 < Standard
|
|
|
550
603
|
def clean_and_scale_model(model:, rotation_degrees: nil, scale_x: nil, scale_y: nil, scale_z: nil)
|
|
551
604
|
# clean model..
|
|
552
605
|
BTAP::Resources::Envelope::remove_all_envelope_information(model)
|
|
553
|
-
model = remove_all_hvac(model)
|
|
606
|
+
model = OpenstudioStandards::HVAC.remove_all_hvac(model)
|
|
554
607
|
model.getThermalZones.sort.each { |zone| zone.setUseIdealAirLoads(true) }
|
|
555
608
|
model.getZoneHVACPackagedTerminalAirConditioners.each(&:remove)
|
|
556
609
|
model.getCoilCoolingDXSingleSpeeds.each(&:remove)
|
|
@@ -709,9 +762,8 @@ class NECB2011 < Standard
|
|
|
709
762
|
end
|
|
710
763
|
|
|
711
764
|
# Rename air loop and plant loop nodes to accommodate coming OpenStudio version
|
|
712
|
-
rename_air_loop_nodes(model)
|
|
713
|
-
rename_plant_loop_nodes(model)
|
|
714
|
-
|
|
765
|
+
OpenstudioStandards::HVAC.rename_air_loop_nodes(model)
|
|
766
|
+
OpenstudioStandards::HVAC.rename_plant_loop_nodes(model)
|
|
715
767
|
end
|
|
716
768
|
|
|
717
769
|
def apply_loads(model:,
|
|
@@ -759,6 +811,9 @@ class NECB2011 < Standard
|
|
|
759
811
|
end
|
|
760
812
|
|
|
761
813
|
def apply_envelope(model:,
|
|
814
|
+
construction_opt: '',
|
|
815
|
+
bldg_category: '',
|
|
816
|
+
bldg_structure: '',
|
|
762
817
|
ext_wall_cond: nil,
|
|
763
818
|
ext_floor_cond: nil,
|
|
764
819
|
ext_roof_cond: nil,
|
|
@@ -782,29 +837,61 @@ class NECB2011 < Standard
|
|
|
782
837
|
ecm.scale_infiltration_loads(model: model, scale: infiltration_scale)
|
|
783
838
|
model.getInsideSurfaceConvectionAlgorithm.setAlgorithm('TARP')
|
|
784
839
|
model.getOutsideSurfaceConvectionAlgorithm.setAlgorithm('TARP')
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
840
|
+
|
|
841
|
+
construction_opt = '' unless construction_opt.respond_to?(:to_sym)
|
|
842
|
+
bldg_structure = '' unless bldg_structure.respond_to?(:to_sym)
|
|
843
|
+
construction_opt = construction_opt.to_s.downcase
|
|
844
|
+
bldg_structure = bldg_structure.to_s.downcase.to_sym
|
|
845
|
+
bldg_structures = @structure.data[:structure].keys
|
|
846
|
+
|
|
847
|
+
if construction_opt == 'structure' && bldg_structures.include?(bldg_structure)
|
|
848
|
+
argh = {}
|
|
849
|
+
argh[:eWallU ] = ext_wall_cond if ext_wall_cond
|
|
850
|
+
argh[:eFloorU ] = ext_floor_cond if ext_floor_cond
|
|
851
|
+
argh[:eRoofU ] = ext_roof_cond if ext_roof_cond
|
|
852
|
+
argh[:gWallU ] = ground_wall_cond if ground_wall_cond
|
|
853
|
+
argh[:gFloorU ] = ground_floor_cond if ground_floor_cond
|
|
854
|
+
argh[:gRoofU ] = ground_roof_cond if ground_roof_cond
|
|
855
|
+
argh[:doorU ] = door_construction_cond if door_construction_cond
|
|
856
|
+
argh[:fenU ] = fixed_window_cond if fixed_window_cond
|
|
857
|
+
argh[:skyU ] = skylight_solar_trans if skylight_solar_trans
|
|
858
|
+
argh[:doorSHGC] = glass_door_solar_trans if glass_door_solar_trans
|
|
859
|
+
argh[:fenSHGC ] = fixed_wind_solar_trans if fixed_wind_solar_trans
|
|
860
|
+
argh[:skySHGC ] = skylight_solar_trans if skylight_solar_trans
|
|
861
|
+
|
|
862
|
+
assign_contruction_to_adiabatic_surfaces(model)
|
|
863
|
+
ok = add_construction_sets(model, necb_hdd, argh)
|
|
864
|
+
|
|
865
|
+
raise('NECB2011: Failed to assign default construction sets') unless ok
|
|
866
|
+
else
|
|
867
|
+
model_add_constructions(model)
|
|
868
|
+
apply_standard_construction_properties(model: model,
|
|
869
|
+
ext_wall_cond: ext_wall_cond,
|
|
870
|
+
ext_floor_cond: ext_floor_cond,
|
|
871
|
+
ext_roof_cond: ext_roof_cond,
|
|
872
|
+
ground_wall_cond: ground_wall_cond,
|
|
873
|
+
ground_floor_cond: ground_floor_cond,
|
|
874
|
+
ground_roof_cond: ground_roof_cond,
|
|
875
|
+
door_construction_cond: door_construction_cond,
|
|
876
|
+
fixed_window_cond: fixed_window_cond,
|
|
877
|
+
glass_door_cond: glass_door_cond,
|
|
878
|
+
overhead_door_cond: overhead_door_cond,
|
|
879
|
+
skylight_cond: skylight_cond,
|
|
880
|
+
glass_door_solar_trans: glass_door_solar_trans,
|
|
881
|
+
fixed_wind_solar_trans: fixed_wind_solar_trans,
|
|
882
|
+
skylight_solar_trans: skylight_solar_trans,
|
|
883
|
+
necb_hdd: necb_hdd)
|
|
884
|
+
end
|
|
885
|
+
|
|
802
886
|
model_create_thermal_zones(model, @space_multiplier_map)
|
|
803
887
|
end
|
|
804
888
|
|
|
805
|
-
#
|
|
889
|
+
# Apply Kiva foundation model to floors/walls with ground boundary condition.
|
|
806
890
|
# created by: Kamel Haddad (kamel.haddad@nrcan-rncan.gc.ca)
|
|
807
|
-
|
|
891
|
+
# 'massive' edit: denis@rd2.ca
|
|
892
|
+
#
|
|
893
|
+
# @param massive [Boolean] whether opaque materials are standard (not massless)
|
|
894
|
+
def apply_kiva_foundation(model, massive = false)
|
|
808
895
|
# define a Kiva model for the whole bldg that's used for the first floor in contact with ground in each zone
|
|
809
896
|
bldg_kiva_model = OpenStudio::Model::FoundationKiva.new(model)
|
|
810
897
|
bldg_kiva_model.setName("Bldg Kiva Foundation")
|
|
@@ -832,10 +919,21 @@ class NECB2011 < Standard
|
|
|
832
919
|
kiva_model.setWallDepthBelowSlab(0.0)
|
|
833
920
|
zone_kiva_models << kiva_model
|
|
834
921
|
end
|
|
835
|
-
# Kiva model only works with standard materials. Replace constructions
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
922
|
+
# Kiva model only works with standard materials. Replace constructions
|
|
923
|
+
# massless materials with standard ones.
|
|
924
|
+
# Kiva model only works with standard materials. Replace constructions
|
|
925
|
+
# massless materials with standard ones. Skip check if 'massive'.
|
|
926
|
+
if massive
|
|
927
|
+
c = gfloor.construction.get.to_LayeredConstruction.get
|
|
928
|
+
gfloor.setOutsideBoundaryCondition('Foundation')
|
|
929
|
+
gfloor.setAdjacentFoundation(zone_kiva_models.last)
|
|
930
|
+
gfloor.setConstruction(c)
|
|
931
|
+
else
|
|
932
|
+
replace_massless_material_with_std_material(model,gfloor)
|
|
933
|
+
gfloor.setOutsideBoundaryCondition('Foundation')
|
|
934
|
+
gfloor.setAdjacentFoundation(zone_kiva_models.last)
|
|
935
|
+
end
|
|
936
|
+
|
|
839
937
|
# Set the exposed perimeter for space floors in contact with the ground.
|
|
840
938
|
floor_exp_per = 0.0
|
|
841
939
|
if !space_ground_walls.empty?
|
|
@@ -848,9 +946,16 @@ class NECB2011 < Standard
|
|
|
848
946
|
# contact with the space floor in contact with ground 'gfloor'
|
|
849
947
|
space_ground_walls.each do |gwall|
|
|
850
948
|
if surfaces_are_in_contact?(gfloor,gwall)
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
949
|
+
if massive
|
|
950
|
+
c = gwall.construction.get.to_LayeredConstruction.get
|
|
951
|
+
gwall.setOutsideBoundaryCondition('Foundation')
|
|
952
|
+
gwall.setAdjacentFoundation(zone_kiva_models.last)
|
|
953
|
+
gwall.setConstruction(c)
|
|
954
|
+
else
|
|
955
|
+
replace_massless_material_with_std_material(model,gwall)
|
|
956
|
+
gwall.setOutsideBoundaryCondition('Foundation')
|
|
957
|
+
gwall.setAdjacentFoundation(zone_kiva_models.last)
|
|
958
|
+
end
|
|
854
959
|
end
|
|
855
960
|
end
|
|
856
961
|
end
|
|
@@ -1021,84 +1126,99 @@ class NECB2011 < Standard
|
|
|
1021
1126
|
end
|
|
1022
1127
|
|
|
1023
1128
|
# Thermal zones need to be set to determine conditioned spaces when applying fdwr and srr limits.
|
|
1024
|
-
#
|
|
1025
|
-
#
|
|
1026
|
-
#
|
|
1027
|
-
#
|
|
1028
|
-
#
|
|
1029
|
-
#
|
|
1030
|
-
#
|
|
1031
|
-
#
|
|
1032
|
-
|
|
1129
|
+
#
|
|
1130
|
+
# fdwr_set/srr_set settings:
|
|
1131
|
+
# 0-1: Remove all windows/skylights and add windows/skylights to match this fdwr/srr
|
|
1132
|
+
# -1: Remove all windows/skylights and add windows/skylights to match max fdwr/srr from NECB
|
|
1133
|
+
# -2: Do not apply any fdwr/srr changes, leave windows/skylights alone (also works for fdwr/srr > 1)
|
|
1134
|
+
# -3: Use old method which reduces existing window/skylight size (if necessary) to meet maximum NECB fdwr/srr limit
|
|
1135
|
+
# <-3.1: Remove all the windows/skylights
|
|
1136
|
+
# > 1: Do nothing
|
|
1137
|
+
#
|
|
1138
|
+
# By default, :srr_opt is an empty string (" "). If set to "osut", SRR is
|
|
1139
|
+
# instead met using OSut's 'addSkylights' (:srr_set numeric values may apply).
|
|
1140
|
+
def apply_fdwr_srr_daylighting(model:, fdwr_set: -1.0, srr_set: -1.0, necb_hdd: true, srr_opt: '')
|
|
1033
1141
|
fdwr_set = -1.0 if (fdwr_set == 'NECB_default') || fdwr_set.nil?
|
|
1034
1142
|
srr_set = -1.0 if (srr_set == 'NECB_default') || srr_set.nil?
|
|
1035
1143
|
fdwr_set = fdwr_set.to_f
|
|
1036
1144
|
srr_set = srr_set.to_f
|
|
1037
1145
|
apply_standard_window_to_wall_ratio(model: model, fdwr_set: fdwr_set, necb_hdd: necb_hdd)
|
|
1038
|
-
apply_standard_skylight_to_roof_ratio(model: model, srr_set: srr_set)
|
|
1146
|
+
apply_standard_skylight_to_roof_ratio(model: model, srr_set: srr_set, srr_opt: srr_opt)
|
|
1039
1147
|
# model_add_daylighting_controls(model) # to be removed after refactor.
|
|
1040
1148
|
end
|
|
1041
1149
|
|
|
1042
|
-
|
|
1043
|
-
# Optionally uprates, then derates, envelope surfaces due to MAJOR thermal
|
|
1044
|
-
# bridges (e.g. roof parapets, corners, fenestration perimeters). See
|
|
1045
|
-
# lib/openstudio-standards/btap/bridging.rb, which relies on the Thermal
|
|
1046
|
-
# Bridging & Derating (TBD) gem.
|
|
1150
|
+
# Initiates a BTAP building ACTIVITY.
|
|
1047
1151
|
#
|
|
1048
|
-
# @param model [OpenStudio::Model::Model]
|
|
1049
|
-
# @param tbd_option [String] BTAP/TBD option
|
|
1152
|
+
# @param model [OpenStudio::Model::Model] a model
|
|
1050
1153
|
#
|
|
1051
|
-
# @return [
|
|
1154
|
+
# @return [BTAP::Activity] a BTAP building ACTIVITY (see logs if failed)
|
|
1155
|
+
def assign_building_activity(model: nil)
|
|
1156
|
+
@activity = BTAP::Activity.new(model)
|
|
1157
|
+
end
|
|
1158
|
+
|
|
1159
|
+
# Initiates a BTAP building STRUCTURE.
|
|
1160
|
+
#
|
|
1161
|
+
# @param model [OpenStudio::Model::Model] a model
|
|
1162
|
+
# @param activity [BTAP::Activity] a BTAP building ACTIVITY object
|
|
1163
|
+
# @param massive [Boolean] whether requesting internal mass generation
|
|
1164
|
+
#
|
|
1165
|
+
# @return [BTAP::Structure] a BTAP building STRUCTURE (see logs if failed)
|
|
1166
|
+
def assign_building_structure(model: nil, activity: nil, massive: true)
|
|
1167
|
+
@structure = BTAP::Structure.new(model, activity, massive)
|
|
1168
|
+
end
|
|
1052
1169
|
|
|
1053
1170
|
##
|
|
1054
|
-
# (Optionally) uprates
|
|
1171
|
+
# (Optionally) uprates - then derates - envelope surface constructions due to
|
|
1055
1172
|
# MAJOR thermal bridges (e.g. roof parapets, corners, fenestration
|
|
1056
1173
|
# perimeters). See lib/openstudio-standards/btap/bridging.rb, which relies on
|
|
1057
1174
|
# the Thermal Bridging & Derating (TBD) gem.
|
|
1058
1175
|
#
|
|
1059
1176
|
# @param model [OpenStudio::Model::Model] an OpenStudio model
|
|
1060
|
-
# @param
|
|
1061
|
-
# @param
|
|
1062
|
-
# @param
|
|
1063
|
-
# @param
|
|
1064
|
-
# @param
|
|
1177
|
+
# @param necb_hdd [Boolean] whether to rely on BTAP to set HDD (vs stat file)
|
|
1178
|
+
# @param structure [BTAP::Structure] BTAP Structure object
|
|
1179
|
+
# @param option [#to_sym] BTAP/TBD option e.g. "uprate"
|
|
1180
|
+
# @param interpolate [Boolean] true if TBD interpolates among Uo (uprating)
|
|
1181
|
+
# @param wallU [Numeric] optional wall Ut in W/m2.K if uprating
|
|
1182
|
+
# @param floorU [Numeric] optional floor Ut in W/m2.K if uprating
|
|
1183
|
+
# @param roofU [Numeric] optional roof Ut in W/m2.K if uprating
|
|
1065
1184
|
#
|
|
1066
1185
|
# @return [Boolean] true if successful, e.g. no errors, compliant if uprated
|
|
1067
1186
|
def apply_thermal_bridging(model: nil,
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
argh = {
|
|
1087
|
-
|
|
1088
|
-
argh[:
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
argh[:walls ][:ut] = wall_U
|
|
1097
|
-
argh[:floors ][:ut] = floor_U
|
|
1098
|
-
argh[:roofs ][:ut] = roof_U
|
|
1099
|
-
elsif tbd_option == 'good'
|
|
1187
|
+
necb_hdd: true,
|
|
1188
|
+
structure: nil,
|
|
1189
|
+
option: 'none',
|
|
1190
|
+
interpolate: false,
|
|
1191
|
+
wallU: nil,
|
|
1192
|
+
floorU: nil,
|
|
1193
|
+
roofU: nil)
|
|
1194
|
+
necb_hdd = true unless [true, false].include?(necb_hdd)
|
|
1195
|
+
return true unless option.respond_to?(:to_sym)
|
|
1196
|
+
return true if option.to_s.downcase == 'none'
|
|
1197
|
+
|
|
1198
|
+
hdd = get_necb_hdd18(model: model, necb_hdd: necb_hdd)
|
|
1199
|
+
wallU = wallU ? wallU : max_u_necb("wall", "outdoors", hdd)
|
|
1200
|
+
floorU = floorU ? floorU : max_u_necb("floor", "outdoors", hdd)
|
|
1201
|
+
roofU = roofU ? roofU : max_u_necb("roofceiling", "outdoors", hdd)
|
|
1202
|
+
|
|
1203
|
+
argh = {}
|
|
1204
|
+
argh[:structure] = structure
|
|
1205
|
+
argh[:walls ] = { uo: wallU }
|
|
1206
|
+
argh[:floors ] = { uo: floorU }
|
|
1207
|
+
argh[:roofs ] = { uo: roofU }
|
|
1208
|
+
|
|
1209
|
+
case option.downcase
|
|
1210
|
+
when 'uprate'
|
|
1211
|
+
argh[:walls ][:ut] = wallU
|
|
1212
|
+
argh[:floors ][:ut] = floorU
|
|
1213
|
+
argh[:roofs ][:ut] = roofU
|
|
1214
|
+
when 'good'
|
|
1100
1215
|
argh[:quality] = :good
|
|
1101
|
-
|
|
1216
|
+
else
|
|
1217
|
+
argh[:quality] = :bad
|
|
1218
|
+
end
|
|
1219
|
+
|
|
1220
|
+
argh[:interpolate] = interpolate
|
|
1221
|
+
argh[:interpolate] = false unless [true, false].include?(interpolate)
|
|
1102
1222
|
|
|
1103
1223
|
@tbd = BTAP::Bridging.new(model, argh)
|
|
1104
1224
|
|
|
@@ -2010,7 +2130,8 @@ class NECB2011 < Standard
|
|
|
2010
2130
|
space_type_apply_internal_loads(space_type: space_type, lights_type: lights_type, lights_scale: lights_scale)
|
|
2011
2131
|
|
|
2012
2132
|
# Schedules
|
|
2013
|
-
space_type_apply_internal_load_schedules(space_type
|
|
2133
|
+
space_type_apply_internal_load_schedules(space_type)
|
|
2134
|
+
space_type_apply_thermostat_schedules(space_type)
|
|
2014
2135
|
end
|
|
2015
2136
|
|
|
2016
2137
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished applying space types (loads)')
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
"start_date": "9/9/1919",
|
|
16
16
|
"end_date": "2999-09-09T00:00:00+00:00",
|
|
17
17
|
"minimum_heating_seasonal_performance_factor": null,
|
|
18
|
-
"minimum_coefficient_of_performance_heating":
|
|
18
|
+
"minimum_coefficient_of_performance_heating": null,
|
|
19
|
+
"minimum_seasonal_energy_efficiency_ratio": 14,
|
|
19
20
|
"minimum_energy_efficiency_ratio": null,
|
|
20
21
|
"pthp_cop_coefficient_1": null,
|
|
21
22
|
"pthp_cop_coefficient_2": null,
|
|
@@ -35,7 +36,8 @@
|
|
|
35
36
|
"start_date": "9/9/1919",
|
|
36
37
|
"end_date": "2999-09-09T00:00:00+00:00",
|
|
37
38
|
"minimum_heating_seasonal_performance_factor": null,
|
|
38
|
-
"minimum_coefficient_of_performance_heating":
|
|
39
|
+
"minimum_coefficient_of_performance_heating": null,
|
|
40
|
+
"minimum_seasonal_energy_efficiency_ratio": 15,
|
|
39
41
|
"minimum_energy_efficiency_ratio": null,
|
|
40
42
|
"pthp_cop_coefficient_1": null,
|
|
41
43
|
"pthp_cop_coefficient_2": null,
|
|
@@ -56,6 +58,7 @@
|
|
|
56
58
|
"end_date": "2999-09-09T00:00:00+00:00",
|
|
57
59
|
"minimum_heating_seasonal_performance_factor": null,
|
|
58
60
|
"minimum_coefficient_of_performance_heating": 3.3,
|
|
61
|
+
"minimum_seasonal_energy_efficiency_ratio": null,
|
|
59
62
|
"minimum_energy_efficiency_ratio": null,
|
|
60
63
|
"pthp_cop_coefficient_1": null,
|
|
61
64
|
"pthp_cop_coefficient_2": null,
|
|
@@ -76,6 +79,7 @@
|
|
|
76
79
|
"end_date": "2999-09-09T00:00:00+00:00",
|
|
77
80
|
"minimum_heating_seasonal_performance_factor": null,
|
|
78
81
|
"minimum_coefficient_of_performance_heating": 3.3,
|
|
82
|
+
"minimum_seasonal_energy_efficiency_ratio": null,
|
|
79
83
|
"minimum_energy_efficiency_ratio": null,
|
|
80
84
|
"pthp_cop_coefficient_1": null,
|
|
81
85
|
"pthp_cop_coefficient_2": null,
|
|
@@ -96,6 +100,7 @@
|
|
|
96
100
|
"end_date": "2999-09-09T00:00:00+00:00",
|
|
97
101
|
"minimum_heating_seasonal_performance_factor": null,
|
|
98
102
|
"minimum_coefficient_of_performance_heating": 3.2,
|
|
103
|
+
"minimum_seasonal_energy_efficiency_ratio": null,
|
|
99
104
|
"minimum_energy_efficiency_ratio": null,
|
|
100
105
|
"pthp_cop_coefficient_1": null,
|
|
101
106
|
"pthp_cop_coefficient_2": null,
|
|
@@ -116,6 +121,7 @@
|
|
|
116
121
|
"end_date": "2999-09-09T00:00:00+00:00",
|
|
117
122
|
"minimum_heating_seasonal_performance_factor": null,
|
|
118
123
|
"minimum_coefficient_of_performance_heating": 3.2,
|
|
124
|
+
"minimum_seasonal_energy_efficiency_ratio": null,
|
|
119
125
|
"minimum_energy_efficiency_ratio": null,
|
|
120
126
|
"pthp_cop_coefficient_1": null,
|
|
121
127
|
"pthp_cop_coefficient_2": null,
|
|
@@ -136,6 +142,7 @@
|
|
|
136
142
|
"end_date": "2999-09-09T00:00:00+00:00",
|
|
137
143
|
"minimum_heating_seasonal_performance_factor": null,
|
|
138
144
|
"minimum_coefficient_of_performance_heating": 3.2,
|
|
145
|
+
"minimum_seasonal_energy_efficiency_ratio": null,
|
|
139
146
|
"minimum_energy_efficiency_ratio": null,
|
|
140
147
|
"pthp_cop_coefficient_1": null,
|
|
141
148
|
"pthp_cop_coefficient_2": null,
|
|
@@ -156,6 +163,7 @@
|
|
|
156
163
|
"end_date": "2999-09-09T00:00:00+00:00",
|
|
157
164
|
"minimum_heating_seasonal_performance_factor": null,
|
|
158
165
|
"minimum_coefficient_of_performance_heating": 3.2,
|
|
166
|
+
"minimum_seasonal_energy_efficiency_ratio": null,
|
|
159
167
|
"minimum_energy_efficiency_ratio": null,
|
|
160
168
|
"pthp_cop_coefficient_1": null,
|
|
161
169
|
"pthp_cop_coefficient_2": null,
|
|
@@ -13,7 +13,7 @@ class NECB2015
|
|
|
13
13
|
compressor_type = search_criteria['compressor_type']
|
|
14
14
|
|
|
15
15
|
# Get the chiller capacity
|
|
16
|
-
capacity_w =
|
|
16
|
+
capacity_w = OpenstudioStandards::HVAC.chiller_electric_get_capacity(chiller_electric_eir)
|
|
17
17
|
|
|
18
18
|
# All chillers must be modulating down to 25% of their capacity
|
|
19
19
|
chiller_electric_eir.setChillerFlowMode('LeavingSetpointModulated')
|
|
@@ -95,7 +95,7 @@ class NECB2015
|
|
|
95
95
|
cop = nil
|
|
96
96
|
if chlr_props['minimum_full_load_efficiency']
|
|
97
97
|
kw_per_ton = chlr_props['minimum_full_load_efficiency']
|
|
98
|
-
cop = kw_per_ton_to_cop(kw_per_ton)
|
|
98
|
+
cop = OpenstudioStandards::HVAC.kw_per_ton_to_cop(kw_per_ton)
|
|
99
99
|
chiller_electric_eir.setReferenceCOP(cop)
|
|
100
100
|
else
|
|
101
101
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find minimum full load efficiency, will not be set.")
|