openstudio-standards 0.8.4 → 0.8.5.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/geometry/ASHRAECollege.osm +30 -30
- data/data/geometry/ASHRAECourthouse.osm +22 -22
- data/data/geometry/ASHRAESmallOfficeDetailed.osm +2 -2
- data/data/geometry/DEER_Asm.osm +1 -1
- data/data/geometry/DEER_ECC.osm +1 -1
- data/data/geometry/DEER_EPr.osm +1 -1
- data/data/geometry/DEER_ERC.osm +1 -1
- data/data/geometry/DEER_ESe.osm +1 -1
- data/data/geometry/DEER_EUn.osm +1 -1
- data/data/geometry/DEER_Hsp.osm +1 -1
- data/data/geometry/DEER_Htl.osm +1 -1
- data/data/geometry/DEER_MBT.osm +1 -1
- data/data/geometry/DEER_MFm.osm +1 -1
- data/data/geometry/DEER_Nrs.osm +1 -1
- data/data/geometry/DEER_OfL.osm +1 -1
- data/data/geometry/DEER_OfS.osm +1 -1
- data/data/geometry/DEER_RFF.osm +1 -1
- data/data/geometry/DEER_RSD.osm +1 -1
- data/data/geometry/DEER_Rt3.osm +1 -1
- data/data/geometry/DEER_RtS.osm +1 -1
- data/data/standards/export_OpenStudio_libraries.rb +2 -3
- data/data/standards/test_performance_expected_dd_results.csv +42 -42
- data/lib/openstudio-standards/btap/NECB_building_types.csv +35 -0
- data/lib/openstudio-standards/btap/NECB_space_types.csv +109 -0
- data/lib/openstudio-standards/btap/activity.rb +480 -0
- data/lib/openstudio-standards/btap/attributes.rb +166 -0
- data/lib/openstudio-standards/btap/bridging.rb +561 -1402
- data/lib/openstudio-standards/btap/btap.rb +4 -2
- data/lib/openstudio-standards/btap/btap_test_helper.rb +86 -0
- data/lib/openstudio-standards/btap/carbon/btap_carbon.rb +177 -0
- data/lib/openstudio-standards/btap/{costing/common_paths.rb → common_paths.rb} +14 -11
- data/lib/openstudio-standards/btap/common_resources/carbon_frame.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_glazing.csv +35 -0
- data/lib/openstudio-standards/btap/common_resources/carbon_opaque.csv +164 -0
- data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +121 -0
- data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
- data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting.csv +59 -59
- data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_hvac.csv +1019 -1032
- data/lib/openstudio-standards/btap/costing/btap_costing.rb +3 -7
- data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +1 -5
- data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +5 -4
- data/lib/openstudio-standards/btap/costing/dcv_costing.rb +1 -1
- data/lib/openstudio-standards/btap/costing/envelope_costing.rb +112 -181
- data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +4 -4
- data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +2 -1
- data/lib/openstudio-standards/btap/costing/lighting_costing.rb +3 -3
- data/lib/openstudio-standards/btap/costing/test_list.txt +15 -17
- data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +10 -9
- data/lib/openstudio-standards/btap/geometry.rb +86 -6
- data/lib/openstudio-standards/btap/structure.rb +657 -0
- data/lib/openstudio-standards/create_typical/create_typical.rb +17 -33
- data/lib/openstudio-standards/create_typical/space_type_ratios.rb +36 -36
- data/lib/openstudio-standards/equipment/create_transformer.rb +104 -0
- data/lib/openstudio-standards/equipment/create_typical_equipment.rb +117 -0
- data/lib/openstudio-standards/equipment/data/electric_equipment_space_types.json +1514 -0
- data/lib/openstudio-standards/equipment/data/gas_equipment_space_types.json +227 -0
- data/lib/openstudio-standards/exterior_lighting/create.rb +22 -22
- data/lib/openstudio-standards/exterior_lighting/information.rb +3 -2
- data/lib/openstudio-standards/hvac/components/air_conditioner_vrf.rb +482 -0
- data/lib/openstudio-standards/hvac/components/air_terminal.rb +31 -0
- data/lib/openstudio-standards/hvac/components/boiler_hot_water.rb +163 -0
- data/lib/openstudio-standards/hvac/components/central_air_source_heat_pump.rb +220 -0
- data/lib/openstudio-standards/hvac/components/chiller.rb +25 -0
- data/lib/openstudio-standards/hvac/components/coil.rb +276 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_multi_speed.rb +40 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_single_speed.rb +300 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_dx_two_speed.rb +187 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_water.rb +80 -0
- data/lib/openstudio-standards/hvac/components/coil_cooling_water_to_air_heat_pump_equation_fit.rb +182 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_dx_single_speed.rb +220 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_electric.rb +56 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_gas.rb +90 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_gas_multi_stage.rb +33 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_water.rb +98 -0
- data/lib/openstudio-standards/hvac/components/coil_heating_water_to_air_heat_pump_equation_fit.rb +147 -0
- data/lib/openstudio-standards/hvac/components/component.rb +39 -0
- data/lib/openstudio-standards/{standards/ashrae_90_1/data/ashrae_90_1.fans.json → hvac/components/data/fans.json} +6 -6
- data/lib/openstudio-standards/hvac/components/fan.rb +363 -0
- data/lib/openstudio-standards/hvac/components/heat_exchanger_air_to_air.rb +203 -0
- data/lib/openstudio-standards/hvac/components/pump.rb +181 -0
- data/lib/openstudio-standards/hvac/controls/radiant_system_controls.rb +594 -0
- data/lib/openstudio-standards/hvac/conversions.rb +222 -0
- data/lib/openstudio-standards/hvac/curves.rb +192 -0
- data/lib/openstudio-standards/hvac/helpers.rb +357 -0
- data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +4 -4
- data/lib/openstudio-standards/interior_lighting/create_lights.rb +52 -0
- data/lib/openstudio-standards/interior_lighting/create_typical_interior_lighting.rb +254 -0
- data/lib/openstudio-standards/interior_lighting/data/convert_lighting_data.rb +249 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.csv +96 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.json +1429 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_technology.csv +46 -0
- data/lib/openstudio-standards/interior_lighting/data/lighting_technology.json +859 -0
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -4
- data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +6 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +15 -15
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +5 -5
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +7 -7
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +4 -4
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +5 -1
- data/lib/openstudio-standards/prototypes/common/data/prototype_space_type_map.json +2594 -0
- data/lib/openstudio-standards/prototypes/common/data/thermostat_schedule_lookup.json +2108 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -140
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -73
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -69
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +0 -116
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +0 -61
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +128 -13
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +606 -607
- data/lib/openstudio-standards/prototypes/common/prototype_space_type_map.rb +41 -0
- data/lib/openstudio-standards/prototypes/common/space_type_equipment_map.rb +184 -0
- data/lib/openstudio-standards/prototypes/common/space_type_thermostat_schedule_map.rb +116 -0
- data/lib/openstudio-standards/qaqc/hvac.rb +12 -12
- data/lib/openstudio-standards/refrigeration/create_compressor.rb +2 -5
- data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +4 -4
- data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +1 -2
- data/lib/openstudio-standards/service_water_heating/create_water_use.rb +5 -5
- data/lib/openstudio-standards/space_type/data/level_1_space_types.json +612 -0
- data/lib/openstudio-standards/space_type/standards_space_type.rb +53 -0
- data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +8 -26
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +13 -13
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -24
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +6 -43
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +7 -24
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +19 -44
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +25 -50
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +25 -33
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -22
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +15 -157
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +18 -105
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +3 -23
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +0 -24
- data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -86
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +0 -107
- data/lib/openstudio-standards/standards/Standards.Model.rb +6 -11
- data/lib/openstudio-standards/standards/Standards.People.rb +113 -0
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -11
- data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -147
- data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +57 -41
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +30 -153
- data/lib/openstudio-standards/standards/Standards.Ventilation.rb +74 -0
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +37 -112
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +37 -102
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +37 -112
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +37 -102
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +45 -109
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.BoilerHotWater.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoilHeatingGas.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +45 -109
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +0 -200
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +37 -37
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -68
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +2 -35
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +42 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +5 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +2 -4
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +0 -200
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +0 -1
- data/lib/openstudio-standards/standards/cbes/data/cbes.curves.json +0 -200
- data/lib/openstudio-standards/standards/deer/data/deer.curves.json +0 -200
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +19 -10
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +4 -4
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +1 -1
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +69 -92
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +2 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +16 -12
- data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +799 -46
- data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +33 -51
- data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +32 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +18 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +5 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +2 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +30 -141
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +233 -112
- data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +16 -6
- data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +60 -61
- data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +30 -30
- data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +79 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +16 -4
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +65 -42
- data/lib/openstudio-standards/thermal_zone/{thermal_zone.rb → information.rb} +12 -45
- data/lib/openstudio-standards/thermal_zone/thermostat_schedules.rb +152 -0
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/stat_file.rb +2 -2
- data/lib/openstudio-standards.rb +55 -38
- metadata +106 -66
- data/lib/openstudio-standards/btap/costing/common_resources/constructions_glazing.csv +0 -61
- data/lib/openstudio-standards/btap/costing/common_resources/costs.csv +0 -1904
- data/lib/openstudio-standards/hvac/components/create.rb +0 -169
- data/lib/openstudio-standards/hvac/components/modify.rb +0 -42
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +0 -438
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +0 -123
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +0 -216
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +0 -273
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +0 -159
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +0 -77
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -154
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +0 -214
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +0 -53
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +0 -72
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +0 -95
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -125
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +0 -17
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +0 -90
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +0 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +0 -70
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +0 -590
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +0 -901
- data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -5
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -55
- data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +0 -5
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +0 -5
- data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +0 -328
- data/lib/openstudio-standards/standards/deer/data/deer.fans.json +0 -328
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/ConstructionProperties.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/Constructions.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/construction_sets.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/constructions_opaque.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/costs_local_factors.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/hvac_vent_ahu.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting_sets.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/locations.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_glazing.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_lighting.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_opaque.csv +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +0 -0
- /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +0 -0
|
@@ -0,0 +1,657 @@
|
|
|
1
|
+
# **************************************************************************** /
|
|
2
|
+
# * Copyright (c) 2008-2025, Natural Resources Canada
|
|
3
|
+
# * All rights reserved.
|
|
4
|
+
# *
|
|
5
|
+
# * This library is free software; you can redistribute it and/or
|
|
6
|
+
# * modify it under the terms of the GNU Lesser General Public
|
|
7
|
+
# * License as published by the Free Software Foundation; either
|
|
8
|
+
# * version 2.1 of the License, or (at your option) any later version.
|
|
9
|
+
# *
|
|
10
|
+
# * This library is distributed in the hope that it will be useful,
|
|
11
|
+
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
|
+
# * Lesser General Public License for more details.
|
|
14
|
+
# *
|
|
15
|
+
# * You should have received a copy of the GNU Lesser General Public
|
|
16
|
+
# * License along with this library; if not, write to the Free Software
|
|
17
|
+
# * Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
18
|
+
# **************************************************************************** /
|
|
19
|
+
|
|
20
|
+
module BTAP
|
|
21
|
+
module StructureData
|
|
22
|
+
##
|
|
23
|
+
# @author: Denis Bourgeois
|
|
24
|
+
#
|
|
25
|
+
# Building STRUCTURE parameters, ultimately driving BTAP definitions of e.g.
|
|
26
|
+
# - internal mass
|
|
27
|
+
# - envelope CLADDING/FRAMING/FINISH selection
|
|
28
|
+
# - related thermal bridging calculations (and uprated insulation levels)
|
|
29
|
+
# - costing
|
|
30
|
+
# - embodied carbon tallies
|
|
31
|
+
#
|
|
32
|
+
# As detailed a bit further on, this determination is either via user input:
|
|
33
|
+
# - e.g. "clt" (mass timber) post/beam STRUCTURE, for a school.
|
|
34
|
+
#
|
|
35
|
+
# Or auto-assigned based on the prevalence of model space type assignments:
|
|
36
|
+
# - e.g. 75% of spaces are commercial in nature (see activity.rb),
|
|
37
|
+
# therefore the building STRUCTURE defaults to "steel" post/beam.
|
|
38
|
+
#
|
|
39
|
+
# The overarching idea is that (in most cases) OpenStudio surface
|
|
40
|
+
# construction & material choices (in addition to internal mass definitions),
|
|
41
|
+
# mostly stem from underlying structural design choices (which aren't
|
|
42
|
+
# natively defined in OpenStudio). Structural choices have more to do with
|
|
43
|
+
# fire safety, budget, durability & practicality (low-rise vs high-rise),
|
|
44
|
+
# local workforce, on-site vs prefab, etc.
|
|
45
|
+
#
|
|
46
|
+
# Ensuring consistency between building STRUCTURE, envelope selection,
|
|
47
|
+
# internal mass definitions, etc. is key to harmonizing predicted energy
|
|
48
|
+
# use, peak demand assessments, GHG emissions, vs thermal resilience and
|
|
49
|
+
# embodied energy/GHG tallies.
|
|
50
|
+
#
|
|
51
|
+
# --- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --- #
|
|
52
|
+
# Although "wood" framed walls constitute the load-bearing components of a
|
|
53
|
+
# "wood" framed building STRUCTURE (e.g. low-rise housing), they can equally
|
|
54
|
+
# be found as non-load-bearing components in a "clt" post-beam STRUCTURE.
|
|
55
|
+
# Light gauge "steel" framed walls are much more common in a non-residential
|
|
56
|
+
# STRUCTURE (e.g. "steel" post/frame, "concrete" post & beam, and even
|
|
57
|
+
# "clt"), though rarely found in low-rise housing. Although one may observe
|
|
58
|
+
# some real-world mixing of STRUCTURE vs FRAMING in a building, it remains
|
|
59
|
+
# largely deterministic: designers select constructions (FRAMING,
|
|
60
|
+
# insulation) while taking building classification and STRUCTURE selection
|
|
61
|
+
# into consideration - the inverse is rarely true.
|
|
62
|
+
#
|
|
63
|
+
# STRUCTURE description
|
|
64
|
+
# __________ ___________________________________________________________
|
|
65
|
+
# "steel" steel, post/frame (default)
|
|
66
|
+
# "metal" prefab panelized steel STRUCTURE (**, ++), typically 1 story
|
|
67
|
+
# "concrete" reinforced concrete, post/beam/slab
|
|
68
|
+
# "cmu" load-bearing concrete masonry unit walls, typically 1-story
|
|
69
|
+
# "wood" conventional load-bearing wood-framed and/or -engineered
|
|
70
|
+
# "clt" prefab, post/beam mass/cross-laminated/timber (**)
|
|
71
|
+
#
|
|
72
|
+
# NOTES:
|
|
73
|
+
#
|
|
74
|
+
# ** Neither "metal" nor "clt" options can be considered as fully
|
|
75
|
+
# supported by BTAP, e.g.:
|
|
76
|
+
# - no range of admissible envelope Uo factors
|
|
77
|
+
# - no associated PSI-factors (thermal bridging)
|
|
78
|
+
# - no costing data
|
|
79
|
+
# - no embodied energy/carbon data
|
|
80
|
+
# They are nonetheless (minimally) maintained here as an
|
|
81
|
+
# "aide-mémoire" for future BTAP upgrades - @todo.
|
|
82
|
+
#
|
|
83
|
+
# ++ ASHRAE 90.1 2022 definitions of:
|
|
84
|
+
#
|
|
85
|
+
# "METAL BUILDING": a complete integrated set of mutually dependent
|
|
86
|
+
# components and assemblies that form a building, which consists of
|
|
87
|
+
# a steel-framed superSTRUCTURE and metal skin.
|
|
88
|
+
#
|
|
89
|
+
# "METAL BUILDING ROOF": a roof that:
|
|
90
|
+
# a. is constructed with a metal, structural, weathering surface;
|
|
91
|
+
# b. has no ventilated cavity; and
|
|
92
|
+
# c. has the insulation entirely below deck (i.e., does not include
|
|
93
|
+
# composite concrete and metal deck construction nor a roof
|
|
94
|
+
# FRAMING system that is separated from the superSTRUCTURE by a
|
|
95
|
+
# wood substrate) and whose STRUCTURE consists of one or more of
|
|
96
|
+
# the following configurations:
|
|
97
|
+
# 1. Metal roofing in direct contact with steel FRAMING members
|
|
98
|
+
# 2. Metal roofing separated from steel FRAMING by insulation
|
|
99
|
+
# 3. Insulated metal roofing panels installed per (a) or (b)
|
|
100
|
+
#
|
|
101
|
+
# "METAL BUILDING WALL": a wall whose STRUCTURE consists of metal
|
|
102
|
+
# spanning members supported by steel structural members (i.e. does
|
|
103
|
+
# not include spandrel glass or metal panels in curtain wall systems).
|
|
104
|
+
#
|
|
105
|
+
# Note that there's a (growing?) need to contrast "metal" buildings against
|
|
106
|
+
# the default "steel" post/beam option. Like a "wood" framed STRUCTURE or a
|
|
107
|
+
# load-bearing "cmu" wall, a "metal" building's envelope structure and skin
|
|
108
|
+
# are indistinguishable, i.e. no mixing/matching of STRUCTURE vs envelope.
|
|
109
|
+
#
|
|
110
|
+
# There are of course several other (smaller scale) structural options,
|
|
111
|
+
# often load-bearing envelopes like adobe/hemp/straw bale construction. Most
|
|
112
|
+
# would agree that these are fairly rare occurrences - rare enough to avoid
|
|
113
|
+
# shortlisting them for commercial building stock assessments. One could
|
|
114
|
+
# state the same when it comes to the current (marginal) use of "clt". Yet
|
|
115
|
+
# as the latter is rapidly becoming a robust low-carbon alternative to
|
|
116
|
+
# "steel" and "concrete" options, its inclusion is justified. Additional
|
|
117
|
+
# options may nonetheless be added in the future.
|
|
118
|
+
@@data = {structure: {}, cladding: {}, finish: {}, category: {}}
|
|
119
|
+
|
|
120
|
+
# Each STRUCTURE inherits a default FRAMING option. Together with the
|
|
121
|
+
# STRUCTURE selection, FRAMING determines inter alia:
|
|
122
|
+
# - above-grade floor assemblies
|
|
123
|
+
# - insulated roof assemblies
|
|
124
|
+
# - cantilevered balconies
|
|
125
|
+
# - interzone walls
|
|
126
|
+
@@data[:structure] = {}
|
|
127
|
+
@@data[:structure][:steel ] = {framing: :steel}
|
|
128
|
+
@@data[:structure][:metal ] = {framing: :metal}
|
|
129
|
+
@@data[:structure][:concrete] = {framing: :steel}
|
|
130
|
+
@@data[:structure][:cmu ] = {framing: :cmu }
|
|
131
|
+
@@data[:structure][:wood ] = {framing: :wood }
|
|
132
|
+
@@data[:structure][:clt ] = {framing: :wood }
|
|
133
|
+
|
|
134
|
+
# An example. STRUCTURE == "wood" + default FRAMING == "wood", e.g. housing:
|
|
135
|
+
# - typical engineered wood joists + FINISH
|
|
136
|
+
# - similar engineered wood rafters + FINISH (if flat or cathedral roof)
|
|
137
|
+
# - anchored engineered wood joist balconies
|
|
138
|
+
#
|
|
139
|
+
# FRAMING may also determine above-grade exterior wall composition (e.g.
|
|
140
|
+
# wool-insulated wood-framed exterior walls, if FRAMING == "wood"). This
|
|
141
|
+
# may instead be determined by CLADDING selection in several cases.
|
|
142
|
+
#
|
|
143
|
+
# Exterior CLADDING and interior FINISH options are both limited to 4
|
|
144
|
+
# generic labels. Defaults for all STRUCTUREs are "light", for both CLADDING
|
|
145
|
+
# (e.g. metal siding on vented hat-channels) and FINISH (e.g. painted
|
|
146
|
+
# drywall). Brick veneer is an example of "medium" CLADDING, while a 4"
|
|
147
|
+
# precast concrete panel is considered "heavy" CLADDING. A "medium" FINISH
|
|
148
|
+
# is akin to a 4" precast panel concrete, while a "heavy" FINISH is a
|
|
149
|
+
# heftier 8" of (poured) reinforced concrete. Option "none" for CLADDING is
|
|
150
|
+
# rare, even in pre-code buildings. An example would be a load-bearing,
|
|
151
|
+
# "cmu" wall with 2 coats of paint in a semi-heated industrial facility. The
|
|
152
|
+
# "none" FINISH option is slightly more common, e.g. exposed ceilings, bare
|
|
153
|
+
# "clt" walls, and again bare "cmu" walls (or with 2 coats of paint).
|
|
154
|
+
@@data[:cladding] = [:none, :light, :medium, :heavy]
|
|
155
|
+
@@data[:finish ] = [:none, :light, :medium, :heavy]
|
|
156
|
+
|
|
157
|
+
# An above-grade building STRUCTURE would normally be auto-assigned based on
|
|
158
|
+
# the prevalence of space type selections in the model (see activity.rb).
|
|
159
|
+
# Note that all below-grade STRUCTUREs remain "concrete", e.g.:
|
|
160
|
+
# - basement slabs and slabs-on-grade
|
|
161
|
+
# - load-bearing basement walls
|
|
162
|
+
# - basement columns, shear walls, etc. (internal mass)
|
|
163
|
+
#
|
|
164
|
+
# Hopefully, users may also assign STRUCTURE, FRAMING, CLADDING & FINISH
|
|
165
|
+
# options per OpenStudio's building-to-space hierarchy, e.g. - @todo:
|
|
166
|
+
#
|
|
167
|
+
# Example A: Composite STRUCTURE:
|
|
168
|
+
# - "concrete" post/beam STRUCTURE for first 4 building stories
|
|
169
|
+
# - "steel" post/frame STRUCTURE for building stories > 4
|
|
170
|
+
#
|
|
171
|
+
# Example B: School gym:
|
|
172
|
+
# - "cmu" gymnasium walls in an otherwise "steel" post/frame school
|
|
173
|
+
#
|
|
174
|
+
# An invalid user-selected STRUCTURE is however caught/logged/corrected:
|
|
175
|
+
# - no other STRUCTURE above "steel", "metal", "cmu" or "wood" STRUCTUREs
|
|
176
|
+
# - a "wood" STRUCTURE may rest upon a "clt" STRUCTURE
|
|
177
|
+
# - any other STRUCTURE may rest upon a "concrete" STRUCTURE
|
|
178
|
+
#
|
|
179
|
+
# With the exception of "metal" buildings, users may optionally interchange
|
|
180
|
+
# some paired STRUCTURE vs FRAMING options (among available :frames above).
|
|
181
|
+
# Unusual in some cases, yet not completely unheard of.
|
|
182
|
+
@@data[:structure][:steel ][:frames] = [:wood ]
|
|
183
|
+
@@data[:structure][:metal ][:frames] = [ ]
|
|
184
|
+
@@data[:structure][:concrete][:frames] = [:wood, :cmu ]
|
|
185
|
+
@@data[:structure][:cmu ][:frames] = [:wood, :steel]
|
|
186
|
+
@@data[:structure][:wood ][:frames] = [:steel ]
|
|
187
|
+
@@data[:structure][:clt ][:frames] = [:clt, :steel ]
|
|
188
|
+
|
|
189
|
+
# --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- #
|
|
190
|
+
# To simplify data management, building TYPES (e.g. those listed in Table
|
|
191
|
+
# A-8.4.3.2.(2)-A of the NECB 2020) are proposed to fall into more general
|
|
192
|
+
# building CATEGORIES (see activity.rb & NECB_building_types.csv):
|
|
193
|
+
#
|
|
194
|
+
# CATEGORY examples
|
|
195
|
+
# _____________ __________________________________________________________
|
|
196
|
+
# "housing" MURB, long-term stay, dormitory
|
|
197
|
+
# "lodging" hotel, motel, highway lodging
|
|
198
|
+
# "public" museum, hospital, school, theatre, terminal
|
|
199
|
+
# "commerce" office, dining, retail, fitness, dealership, theatre
|
|
200
|
+
# "industry" automotive, manufacturing, workshop, storage
|
|
201
|
+
# "recreation" gymnastics, ice arena, indoor soccer/pool
|
|
202
|
+
# "robust" penitentiary, parking garage (i.e. heavyduty, resistant)
|
|
203
|
+
#
|
|
204
|
+
# Each CATEGORY holds "small"-scale and "large"-scale STRUCTURE options by
|
|
205
|
+
# defaults, depending on the characteristics of the building.
|
|
206
|
+
@@data[:category] = {}
|
|
207
|
+
@@data[:category]["housing" ] = {small: :wood , large: :concrete}
|
|
208
|
+
@@data[:category]["lodging" ] = {small: :wood , large: :concrete}
|
|
209
|
+
@@data[:category]["robust" ] = {small: :concrete, large: :concrete}
|
|
210
|
+
@@data[:category]["public" ] = {small: :steel , large: :concrete}
|
|
211
|
+
@@data[:category]["commerce" ] = {small: :steel , large: :steel}
|
|
212
|
+
@@data[:category]["industry" ] = {small: :cmu , large: :metal}
|
|
213
|
+
@@data[:category]["recreation"] = {small: :metal , large: :steel}
|
|
214
|
+
|
|
215
|
+
# What constitutes small- vs large-scale varies between CATEGORY, depending
|
|
216
|
+
# either on the maximum number of stories, or the max floor-to-roof height
|
|
217
|
+
# of the tallest first story space.
|
|
218
|
+
@@data[:category]["housing" ][:stories] = 4
|
|
219
|
+
@@data[:category]["lodging" ][:stories] = 2
|
|
220
|
+
@@data[:category]["public" ][:stories] = 2
|
|
221
|
+
@@data[:category]["industry" ][:height ] = 3.5
|
|
222
|
+
@@data[:category]["recreation"][:height ] = 10.0
|
|
223
|
+
|
|
224
|
+
# For instance, a multi-unit residential building (MURB) would have a
|
|
225
|
+
# typical "wood" framed, load-bearing envelope/STRUCTURE up to (and
|
|
226
|
+
# including) 4 stories above-grade. This default STRUCTURE assignment
|
|
227
|
+
# switches to reinforced "concrete" post + flat slab beyond 4 stories.
|
|
228
|
+
# Building CATEGORIES that hold neither :stories nor :height key:value pairs
|
|
229
|
+
# simply retain the same STRUCTURE option by default, regardless of scale
|
|
230
|
+
# (e.g. "robust", "commerce").
|
|
231
|
+
#
|
|
232
|
+
# Default STRUCTURE assignment per building CATEGORY does not preclude the
|
|
233
|
+
# investigation of e.g. "clt" construction in MURBs, offices or sporting
|
|
234
|
+
# facilities. It simply generates a reasonable reference set of structural/
|
|
235
|
+
# framing options, applicable for large parts of the US and Canada. Users
|
|
236
|
+
# have the option of overriding default assignments (@todo).
|
|
237
|
+
|
|
238
|
+
##
|
|
239
|
+
# Returns BTAP Structure data.
|
|
240
|
+
#
|
|
241
|
+
# @return [Hash] BTAP Structure data
|
|
242
|
+
def data
|
|
243
|
+
@@data
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def self.extended(base)
|
|
247
|
+
base.send(:include, self)
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
class BTAP::Structure
|
|
252
|
+
extend StructureData
|
|
253
|
+
|
|
254
|
+
# @return [String] building type CATEGORY (e.g. "public")
|
|
255
|
+
attr_reader :category
|
|
256
|
+
|
|
257
|
+
# @return [Symbol] building STRUCTURE selection (e.g. :steel)
|
|
258
|
+
attr_reader :structure
|
|
259
|
+
|
|
260
|
+
# @return [Symbol] building framing (e.g. :steel)
|
|
261
|
+
attr_reader :framing
|
|
262
|
+
|
|
263
|
+
# @return [Symbol] building cladding (e.g. :medium)
|
|
264
|
+
attr_reader :cladding
|
|
265
|
+
|
|
266
|
+
# @return [Symbol] building finish (e.g. :light)
|
|
267
|
+
attr_reader :finish
|
|
268
|
+
|
|
269
|
+
# @return [Float] estimated dead load, in kg/m2 of floor area
|
|
270
|
+
attr_reader :deadload
|
|
271
|
+
|
|
272
|
+
# @return [Float] estimated non-occupant live load, in kg/m2 of floor area
|
|
273
|
+
attr_reader :liveload
|
|
274
|
+
|
|
275
|
+
# @return [Hash] calculated embodied carbon (CO2-e kg)
|
|
276
|
+
attr_reader :co2
|
|
277
|
+
|
|
278
|
+
# @return [Hash] logged messages
|
|
279
|
+
attr_reader :feedback
|
|
280
|
+
|
|
281
|
+
##
|
|
282
|
+
# Initialize BTAP STRUCTURE parameters.
|
|
283
|
+
#
|
|
284
|
+
# @param model [OpenStudio::Model::Model] a model
|
|
285
|
+
# @param activity [BTAP::Activity] a BTAP building ACTIVITY object
|
|
286
|
+
# @param massive [Boolean] whether requesting internal mass generation
|
|
287
|
+
def initialize(model = nil, activity = nil, massive = true)
|
|
288
|
+
mth = "BTAP::Structure::#{__callee__}"
|
|
289
|
+
@feedback = {logs: []}
|
|
290
|
+
lgs = @feedback[:logs]
|
|
291
|
+
massive = false unless [true, false].include?(massive)
|
|
292
|
+
|
|
293
|
+
unless model.is_a?(OpenStudio::Model::Model)
|
|
294
|
+
lgs << "Invalid or empty OpenStudio model (#{mth})"
|
|
295
|
+
return
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
unless activity.is_a?(BTAP::Activity)
|
|
299
|
+
lgs << "Invalid or empty BTAP::Activity instance (#{mth})"
|
|
300
|
+
return
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
cat = activity.category
|
|
304
|
+
lload = activity.liveload
|
|
305
|
+
|
|
306
|
+
if cat.respond_to?(:to_s)
|
|
307
|
+
cat = cat.to_s.downcase
|
|
308
|
+
|
|
309
|
+
if cat.empty?
|
|
310
|
+
lgs << "Empty building category (#{mth})"
|
|
311
|
+
return
|
|
312
|
+
else
|
|
313
|
+
unless data[:category].keys.include?(cat)
|
|
314
|
+
lgs << "Unknown building category: #{cat} (#{mth})"
|
|
315
|
+
return
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
else
|
|
319
|
+
lgs << "Invalid building category: #{cat.class} (#{mth})"
|
|
320
|
+
return
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
if lload.respond_to?(:to_f)
|
|
324
|
+
lload = lload.to_f
|
|
325
|
+
else
|
|
326
|
+
lgs << "Invalid live load (kg/m2): #{lload.class} (#{mth})"
|
|
327
|
+
return
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
# Cap internal mass density to 1000 kg/m3, and thickness to 6".
|
|
331
|
+
rho = 1000.0
|
|
332
|
+
th = 0.150
|
|
333
|
+
bldg = model.getBuilding
|
|
334
|
+
|
|
335
|
+
@category = cat
|
|
336
|
+
@structure = data[:category][cat][:small]
|
|
337
|
+
|
|
338
|
+
# Switch to :large structure, instead of default :small.
|
|
339
|
+
if data[:category][cat].key?(:stories)
|
|
340
|
+
mx = data[:category][cat][:stories]
|
|
341
|
+
n = bldg.standardsNumberOfAboveGroundStories
|
|
342
|
+
n = n.empty? ? 1 : n.get
|
|
343
|
+
|
|
344
|
+
@structure = data[:category][cat][:large] if n > mx
|
|
345
|
+
elsif data[:category][cat].key?(:height)
|
|
346
|
+
mx = data[:category][cat][:height]
|
|
347
|
+
n = bldg.standardsNumberOfAboveGroundStories
|
|
348
|
+
n = n.empty? ? 1 : n.get
|
|
349
|
+
|
|
350
|
+
if n > 1
|
|
351
|
+
@structure = data[:category][cat][:large]
|
|
352
|
+
else
|
|
353
|
+
h = 0
|
|
354
|
+
|
|
355
|
+
model.getSpaces.each do |space|
|
|
356
|
+
h = [mx, BTAP::Geometry::Spaces.space_height(space)].max
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
@structure = data[:category][cat][:large] if h > mx
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
# Reset :clt and :metal structure selections - not yet available. @todo
|
|
364
|
+
@structure = :steel if @structure == :metal
|
|
365
|
+
@structure = :concrete if @structure == :clt
|
|
366
|
+
|
|
367
|
+
# Set building framing, e.g. light-gauge :steel.
|
|
368
|
+
@framing = data[:structure][@structure][:framing]
|
|
369
|
+
|
|
370
|
+
# Set exterior cladding.
|
|
371
|
+
@cladding = :light
|
|
372
|
+
@cladding = :medium if @structure == :cmu
|
|
373
|
+
@cladding = :medium if @category == "public"
|
|
374
|
+
@cladding = :heavy if @category == "robust"
|
|
375
|
+
|
|
376
|
+
# Set interior finish.
|
|
377
|
+
@finish = :light
|
|
378
|
+
@finish = :none if @framing == :cmu
|
|
379
|
+
@finish = :heavy if @category == "robust"
|
|
380
|
+
|
|
381
|
+
# 'Dead load' refers to the self-weight of structural elements of a
|
|
382
|
+
# building, as well as non-structural fixtures that are permanently
|
|
383
|
+
# attached to the building. They are considered 'dead' as they typically
|
|
384
|
+
# do not move around during the life of the building. If/once a building
|
|
385
|
+
# is resold, its new owners recover dead load as 'real estate assets'.
|
|
386
|
+
# Dead load typically falls under design scopes of architects/engineers.
|
|
387
|
+
# Although there are obvious design constraints to consider (e.g. fire
|
|
388
|
+
# safety, $), designers do get to make design decisions when it comes to
|
|
389
|
+
# dead load, e.g.:
|
|
390
|
+
# - between steel vs concrete post/beam/slab structural options
|
|
391
|
+
# - between light-gauge steel vs CMU wall construction options
|
|
392
|
+
# - between foam vs fibrous insulation options
|
|
393
|
+
#
|
|
394
|
+
# Most dead load is modelled explicitly in OpenStudio, like envelope and
|
|
395
|
+
# interzone sub/surfaces. Rough estimates of embodied carbon (in CO2-e
|
|
396
|
+
# kg/m2) can be reasonably associated to selected construction assemblies
|
|
397
|
+
# (based on m2), such as the embodied carbon of chosen insulation
|
|
398
|
+
# materials or framing options. Other dead load, like lighting and HVAC,
|
|
399
|
+
# are not modelled explicitly. Here, the 'deadload' attribute represents
|
|
400
|
+
# a mass floor area density estimate (kg/m2) of non-modelled structural
|
|
401
|
+
# and non-structural items like fixed furniture, partitions, columns,
|
|
402
|
+
# beams, shear walls and bracing.
|
|
403
|
+
|
|
404
|
+
# First, isolate occupied spaces & floors, as well as exposed surfaces.
|
|
405
|
+
cspaces = model.getSpaces.select { |sp| sp.partofTotalFloorArea }
|
|
406
|
+
floor_m2 = TBD.facets(cspaces, "all", "floor").map(&:grossArea).sum
|
|
407
|
+
ofloor_m2 = TBD.facets(cspaces, "outdoors", "floor").map(&:grossArea).sum
|
|
408
|
+
ifloor_m2 = TBD.facets(cspaces, "surface", "floor").map(&:grossArea).sum
|
|
409
|
+
roof_m2 = TBD.facets(cspaces, "outdoors", "roofceiling").map(&:grossArea).sum
|
|
410
|
+
wall_m2 = TBD.facets(cspaces, "outdoors", "walls").map(&:grossArea).sum
|
|
411
|
+
iwall_m2 = TBD.facets(cspaces, "surface", "wall").map(&:grossArea).sum
|
|
412
|
+
|
|
413
|
+
# In OpenStudio, partitions are usually limited to interzone walls between
|
|
414
|
+
# zones, in order to save on simulation times. Partitions typically absent
|
|
415
|
+
# from a model include walls surrounding lobbies, stairwells, WCs and
|
|
416
|
+
# technical rooms, as well as separations between similar rooms (e.g.
|
|
417
|
+
# multiple, side-by-side enclosed offices, a row of hotel rooms).
|
|
418
|
+
# Comparing BTAP prototype models and samples of building plans for
|
|
419
|
+
# similar facilities suggest matching modelled partition m2 (or total
|
|
420
|
+
# floor m2) as a suitable basis to determine the weight of non-modelled
|
|
421
|
+
# partitions. As this estimate may be more on the high side for many
|
|
422
|
+
# prototype models, fixed appliances (e.g. fixtures, counters, doors and
|
|
423
|
+
# windows) are considered included.
|
|
424
|
+
# partition_m2 = iwall_m2
|
|
425
|
+
# partition_m2 = floor_m2 if partition_m2 > floor_m2
|
|
426
|
+
partition_m2 = floor_m2
|
|
427
|
+
|
|
428
|
+
# For wood-framed partitions, representative material volumes (per m2):
|
|
429
|
+
# - 16% wood-framing: 0.0224 m3/m2 x 540 kg/m3 = 12.1 kg/m2 (35.7%)
|
|
430
|
+
# - 84% insulation : 0.1176 m3/m2 x 19 kg/m3 = 2.2 kg/m2 ( 6.5%)
|
|
431
|
+
# - drywall (2x) : 0.0250 m3/m2 x 785 kg/m3 = 19.6 kg/m2 (57.8%)
|
|
432
|
+
# = 33.9 kg/m2
|
|
433
|
+
#
|
|
434
|
+
# For steel-framed partitions, representative material volumes (per m2):
|
|
435
|
+
# - 1% steel-framing: 1.25 x 2.5 x 1.5 kg/m = 4.7 kg/m2 (17.3%)
|
|
436
|
+
# - 99% insulation : 0.1504 m3/m2 x 19 kg/m3 = 2.9 kg/m2 (10.7%)
|
|
437
|
+
# - drywall (2x) : 0.0250 m3/m2 x 785 kg/m3 = 19.6 kg/m2 (72.0%)
|
|
438
|
+
# = 27.2 kg/m2
|
|
439
|
+
#
|
|
440
|
+
# For CMU partitions, representative material volumes (per m2):
|
|
441
|
+
# - 10" medium weight CMU = 250.0 kg/m2 (approx.)
|
|
442
|
+
|
|
443
|
+
case @framing
|
|
444
|
+
when :cmu then partition_kgm2 = 250.0 * partition_m2 / floor_m2
|
|
445
|
+
when :wood then partition_kgm2 = 33.9 * partition_m2 / floor_m2
|
|
446
|
+
else partition_kgm2 = 27.2 * partition_m2 / floor_m2
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
# Structural dead load - not explicitly modelled - include columns,
|
|
450
|
+
# bracing, connectors, etc. For BTAP purposes, some basic assumptions are
|
|
451
|
+
# required:
|
|
452
|
+
# - 9m x 9m spans
|
|
453
|
+
# - approx. 15 columns / 1000 m2 of floor area
|
|
454
|
+
# - approx. 14" x 14" columns (0.126 m2)
|
|
455
|
+
# - if structure :steel or :metal (HP14x102):
|
|
456
|
+
# - 152 kg/m (x 125% for bracing, etc.) = 190 kg/m
|
|
457
|
+
# - if structure :concrete
|
|
458
|
+
# - concrete: 2240 kg/m3 x 0.126 m2 x 97% = 274 kg/m
|
|
459
|
+
# - rebar: 7850 kg/m3 x 0.126 m2 x 3% = 30 kg/m
|
|
460
|
+
# = 304 kg/m (+11%)
|
|
461
|
+
# - if structure :cmu (mix of load bearing walls + smaller pours)
|
|
462
|
+
# - 1/2 :concrete = 150 kg/m
|
|
463
|
+
# - if structure :clt
|
|
464
|
+
# - wood: 540 kg/m3 x 0.126 m2 x 97% = 66 kg/m
|
|
465
|
+
# - anchors: 7850 kg/m3 x 0.126 m2 x 3% = 30 kg/m
|
|
466
|
+
# = 96 kg/m (+45%)
|
|
467
|
+
# - if structure :wood
|
|
468
|
+
# - 1/2 :clt = 48 kg/m
|
|
469
|
+
|
|
470
|
+
# Fetch approx. total column height (m) in building (including plenums).
|
|
471
|
+
column_m = 0
|
|
472
|
+
|
|
473
|
+
model.getSpaces.each do |space|
|
|
474
|
+
column_m += BTAP::Geometry::Spaces.space_height(space) * 15 / 1000
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
case @structure
|
|
478
|
+
when :steel then column_kgm2 = 190 * column_m / floor_m2
|
|
479
|
+
when :metal then column_kgm2 = 190 * column_m / floor_m2
|
|
480
|
+
when :cmu then column_kgm2 = 150 * column_m / floor_m2
|
|
481
|
+
when :wood then column_kgm2 = 48 * column_m / floor_m2
|
|
482
|
+
when :clt then column_kgm2 = 96 * column_m / floor_m2
|
|
483
|
+
else column_kgm2 = 304 * column_m / floor_m2
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
@deadload = partition_kgm2 + column_kgm2
|
|
487
|
+
|
|
488
|
+
# The 'liveload' attribute represents the mass area density (kg/m2) of
|
|
489
|
+
# dynamic, yet uniform floor live load from non-permanent items like
|
|
490
|
+
# furniture, documents, copiers and computers, i.e. not real estate
|
|
491
|
+
# assets. Architects and engineers deal with (fixed) live load as design
|
|
492
|
+
# constraint - not as potential design option. Non-occupant live load is
|
|
493
|
+
# taken into account when setting internal mass. Yet as a non-real estate
|
|
494
|
+
# item, live load is not considered when tallying embodied carbon.
|
|
495
|
+
#
|
|
496
|
+
# Within BTAP, non-occupant live load estimates are stored in the
|
|
497
|
+
# "NECB_building_types.csv" file, parsed/stored in a BTAP::Activity
|
|
498
|
+
# instance (1x per building activity). These estimates are initially based
|
|
499
|
+
# on NBC Part 4 minimum live load requirements (kPa), as well as data from
|
|
500
|
+
# established structural engineering resources. Minimum live load kPa (or
|
|
501
|
+
# psf) estimates, corresponding to hundreds of kg/m2 of floor area, are
|
|
502
|
+
# strictly for structural dimensioning/safety purposes. They are not (or
|
|
503
|
+
# are very rarely) representative of actual day-to-day loads. Back of the
|
|
504
|
+
# envelope calculations suggest reducing live load code requirements down
|
|
505
|
+
# to ~1/12th of their initial values for internal mass purposes. These
|
|
506
|
+
# code requirements also include occupants, which should be set aside -
|
|
507
|
+
# by subtracting the total building population mass:
|
|
508
|
+
#
|
|
509
|
+
# - NECB building occupant density (occupant/m2) x avg. 80 kg/adult
|
|
510
|
+
#
|
|
511
|
+
# This gives for instance a resulting live load estimate of 23 kg/m2 for
|
|
512
|
+
# housing (low) and a 61 kg/m2 for manufacturing (high). It is obviously
|
|
513
|
+
# challenging to pin down a single-number estimate for several building
|
|
514
|
+
# types, including bigbox retail and warehousing. Grain of salt.
|
|
515
|
+
@liveload = lload
|
|
516
|
+
|
|
517
|
+
# Add internal mass objects, 1x instance per occupied space.
|
|
518
|
+
cspaces.each do |space|
|
|
519
|
+
break unless massive
|
|
520
|
+
|
|
521
|
+
matID = "#{space.nameString} : Mass Material"
|
|
522
|
+
conID = "#{space.nameString} : Mass Construction"
|
|
523
|
+
defID = "#{space.nameString} : Mass Definition"
|
|
524
|
+
mssID = "#{space.nameString} : Mass"
|
|
525
|
+
|
|
526
|
+
# Calculate total mass of internal mass (kg), then thickness.
|
|
527
|
+
kg = space.floorArea * (@liveload + @deadload)
|
|
528
|
+
m2 = kg / rho / th
|
|
529
|
+
|
|
530
|
+
mat = OpenStudio::Model::StandardOpaqueMaterial.new(model)
|
|
531
|
+
mat.setName(matID)
|
|
532
|
+
mat.setRoughness("MediumRough")
|
|
533
|
+
mat.setThickness(th)
|
|
534
|
+
mat.setConductivity(1.0)
|
|
535
|
+
mat.setDensity(rho)
|
|
536
|
+
mat.setSpecificHeat(1000)
|
|
537
|
+
mat.setThermalAbsorptance(0.9)
|
|
538
|
+
mat.setSolarAbsorptance(0.7)
|
|
539
|
+
mat.setVisibleAbsorptance(0.7)
|
|
540
|
+
|
|
541
|
+
con = OpenStudio::Model::Construction.new(model)
|
|
542
|
+
con.setName(conID)
|
|
543
|
+
layers = OpenStudio::Model::MaterialVector.new
|
|
544
|
+
layers << mat
|
|
545
|
+
con.setLayers(layers)
|
|
546
|
+
|
|
547
|
+
df = OpenStudio::Model::InternalMassDefinition.new(model)
|
|
548
|
+
df.setName(defID)
|
|
549
|
+
df.setConstruction(con)
|
|
550
|
+
df.setSurfaceArea(space.floorArea)
|
|
551
|
+
df.setSurfaceArea(m2)
|
|
552
|
+
|
|
553
|
+
mass = OpenStudio::Model::InternalMass.new(df)
|
|
554
|
+
mass.setName(mssID)
|
|
555
|
+
mass.setSpace(space)
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
# Embodied CO2-e kg (A1-A3) of a model is tallied separately as follows:
|
|
559
|
+
@co2 = {}
|
|
560
|
+
@co2[:structure ] = 0
|
|
561
|
+
@co2[:insulation] = 0
|
|
562
|
+
@co2[:cladding ] = 0
|
|
563
|
+
|
|
564
|
+
# The :structure key/value pair includes above grade 'structures' (e.g.
|
|
565
|
+
# slabs, columns) and 'framing' (e.g. wood-framed vs steel-framed). Why
|
|
566
|
+
# grouped together? In many smaller-scale facilities, structure and
|
|
567
|
+
# framing are synonymous, or at least tightly coupled, e.g.:
|
|
568
|
+
# - load-bearing wood-framed walls in small-scale residential
|
|
569
|
+
# - load-bearing CMU walls in small-scale industrial
|
|
570
|
+
# - metal buildings
|
|
571
|
+
#
|
|
572
|
+
# Below-grade structures (rebar + poured concrete) are ignored - no
|
|
573
|
+
# alternative options are considered for the moment, e.g. lower carbon
|
|
574
|
+
# concrete mixes.
|
|
575
|
+
#
|
|
576
|
+
# Upon initialization, only the :structure tally is set. It is assumed
|
|
577
|
+
# that structure (and main framing) do not change with NECB U-factor
|
|
578
|
+
# requirements, e.g.:
|
|
579
|
+
# - NECB 2011 vs 2020
|
|
580
|
+
# - Vancouver vs Calgary
|
|
581
|
+
#
|
|
582
|
+
# Once default construction sets are (later) established (+), followed by
|
|
583
|
+
# TBD uprating assemblies as per NECB 2017 & 2020 requirements (++),
|
|
584
|
+
# embodied carbon tallies can be updated/reset, which would include:
|
|
585
|
+
# - cladding
|
|
586
|
+
# - insulation
|
|
587
|
+
# - secondary framing (proportional to insulation thicknesses)
|
|
588
|
+
#
|
|
589
|
+
# (+) openstudio-standards/standards/necb/NECB2011/building_envelope.rb
|
|
590
|
+
# (++) openstudio-standards/btap/bridging.rb
|
|
591
|
+
|
|
592
|
+
# Start with occupied floors & roofs (exclude slabs on grade).
|
|
593
|
+
m2 = ofloor_m2 + ifloor_m2 + roof_m2
|
|
594
|
+
|
|
595
|
+
case @structure
|
|
596
|
+
when :wood then # engineered I-joists + plywood
|
|
597
|
+
floor_kg = 50.0 * m2
|
|
598
|
+
floor_m3 = floor_kg / 540.0 # kg/m3
|
|
599
|
+
floor_co2kg = floor_m3 * 55.0 / floor_kg # kgCO2-e/kg
|
|
600
|
+
when :concrete then # 200mm flat slab, 3% rebar + accessories
|
|
601
|
+
floor_m3 = 0.200 * m2
|
|
602
|
+
floor_kgm3 = (0.03 * 7850.0) + (0.97 * 2240.0) # kg/m3
|
|
603
|
+
floor_co2kg = (0.03 * 0.854 ) + (0.97 * 0.250) # kgCO2-e/kg
|
|
604
|
+
floor_kg = floor_m3 * floor_kgm3
|
|
605
|
+
else # :steel, includes joists/fasteners
|
|
606
|
+
floor_m3 = 0.125 * m2
|
|
607
|
+
floor_kgm3 = (0.08 * 7850.0) + (0.92 * 2240.0) # kg/m3
|
|
608
|
+
floor_co2kg = (0.08 * 0.854 ) + (0.92 * 0.250) # kgCO2-e/kg
|
|
609
|
+
floor_kg = floor_m3 * floor_kgm3
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
@co2[:structure] += floor_co2kg * floor_kg
|
|
613
|
+
|
|
614
|
+
# Add exposed walls and interior partitions.
|
|
615
|
+
m2 = wall_m2 + iwall_m2 + partition_m2
|
|
616
|
+
|
|
617
|
+
case @framing
|
|
618
|
+
when :wood then # basic 2x6 construction, 16% of framing cavity
|
|
619
|
+
wall_kg = 12.1 * m2
|
|
620
|
+
wall_co2kg = 55.0 / 540.0 # 55 kgCO2-e/m3 / density
|
|
621
|
+
when :cmu then # 250mm medium weight CMU, 200 kgCO2-e/m3
|
|
622
|
+
wall_m3 = 0.250 * m2 # nominal m3
|
|
623
|
+
wall_kg = 250.0 * m2 # volume-weighted concrete/air/grout
|
|
624
|
+
wall_kgm3 = 0.250 / 250.0
|
|
625
|
+
wall_co2kg = 200.0 / wall_kgm3 # 200 kgCO2-e/m3 / density
|
|
626
|
+
else # :steel, 1% lightweight steel-framing
|
|
627
|
+
wall_kg = 4.7 * m2
|
|
628
|
+
wall_co2kg = 2.440
|
|
629
|
+
end
|
|
630
|
+
|
|
631
|
+
@co2[:structure] += wall_co2kg * wall_kg
|
|
632
|
+
|
|
633
|
+
true
|
|
634
|
+
end
|
|
635
|
+
|
|
636
|
+
##
|
|
637
|
+
# Updates and returns embodied carbon estimates (A1-A3).
|
|
638
|
+
#
|
|
639
|
+
# @param model [OpenStudio::Model::Model] a model
|
|
640
|
+
#
|
|
641
|
+
# @return [Hash] embodied carbon tally (CO2-e kg, A1-A3)
|
|
642
|
+
def tallyCO2(model)
|
|
643
|
+
mth = "BTAP::Structure::#{__callee__}"
|
|
644
|
+
cl = OpenStudio::Model::Model
|
|
645
|
+
lgs = @feedback[:logs]
|
|
646
|
+
|
|
647
|
+
unless model.is_a?(cl)
|
|
648
|
+
lgs << "Invalid OpenStudio model (#{mth})"
|
|
649
|
+
return 0
|
|
650
|
+
end
|
|
651
|
+
|
|
652
|
+
# @todo
|
|
653
|
+
|
|
654
|
+
@co2
|
|
655
|
+
end
|
|
656
|
+
end
|
|
657
|
+
end
|