openstudio-standards 0.2.16 → 0.2.17.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/manage_OpenStudio_Standards.rb +31 -4
- data/data/standards/openstudio_standards_duplicates_log.csv +4 -142
- data/lib/openstudio-standards/btap/btap_result.rb +138 -138
- data/lib/openstudio-standards/btap/economics.rb +58 -53
- data/lib/openstudio-standards/btap/envelope.rb +1 -1
- data/lib/openstudio-standards/btap/fileio.rb +12 -12
- data/lib/openstudio-standards/btap/geometry.rb +1 -1
- data/lib/openstudio-standards/btap/measures.rb +63 -59
- data/lib/openstudio-standards/btap/vintagizer.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +354 -2
- data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +79 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +3313 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +12 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +3 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +10 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +217 -115
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +2 -4
- data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +1 -0
- data/lib/openstudio-standards/refs/references.rb +3 -0
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +294 -7
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +50 -2
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +4 -0
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.Construction.rb +185 -3
- data/lib/openstudio-standards/standards/Standards.Fan.rb +14 -6
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +1 -0
- data/lib/openstudio-standards/standards/Standards.Model.rb +1752 -384
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +131 -10
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +50 -3
- data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +44 -0
- data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +27 -0
- data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +543 -0
- data/lib/openstudio-standards/standards/Standards.Space.rb +665 -15
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +141 -4
- data/lib/openstudio-standards/standards/Standards.SubSurface.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.Surface.rb +117 -0
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +197 -49
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +44 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +6 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +45 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +45 -45
- 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 +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +45 -45
- 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 +9 -9
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +45 -45
- 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 +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/ashrae_90_1.schedules.json +45 -45
- 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 +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +48 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +2 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/ashrae_90_1.schedules.json +45 -45
- 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 +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.entryways.json +8 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +12 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.parking.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +45 -45
- 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 +10 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +11 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +45 -45
- 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 +10 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +11 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +792 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctParallelPIUReheat.rb +10 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctVAVReheat.rb +31 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.BoilerHotWater.rb +91 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +84 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +145 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +106 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +71 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +194 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +120 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTower.rb +110 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTowerVariableSpeed.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Fan.rb +73 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanVariableVolume.rb +24 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.HeatExchangerSensLat.rb +55 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +3045 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlanarSurface.rb +187 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +454 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +106 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +666 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Surface.rb +54 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ThermalZone.rb +168 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb +132 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +239 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +176 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +25 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.boilers.json +52 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.chillers.json +112 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.climate_zone_sets.json +210 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_properties.json +10384 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_sets.json +133 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.furnaces.json +43 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps.json +119 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps_heating.json +130 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_rejection.json +13 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.lpd_space_type.json +568 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.motors.json +264 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_baseline_hvac.json +439 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_constructions.json +685 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_economizers.json +213 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_ext_ltg.json +32 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_heat_type.json +136 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_hvac_bldg_type.json +32 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_interior_lighting.json +1837 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_swh_bldg_type.json +184 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_wwr_bldg_type.json +84 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.unitary_acs.json +148 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.water_heaters.json +157 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.climate_zone_sets.json +210 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +18329 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +340 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.materials.json +49924 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/baseline_building_rotation_exception.md +44 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/check_pump_power_and_control.md +71 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/dcv.md +68 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/dcv_implementation.png +0 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/elevators.md +14 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/exhaust_air_energy_recovery.md +36 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/f_c_factors.md +19 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/fan_power_credits.md +15 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/preheat_coil.md +59 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/pump_power_control.md +46 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/return_air_type.md +31 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_baseline_wwr.md +191 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_hw_and_chw_supply_water_temp_reset_control.md +24 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_num_boilers_chillers_towers.md +49 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_plug_load_measures.md +80 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_space_lpd.md +73 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/unenclosed_and_unconditioned_spaces.md +11 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/unmet_load_hours.md +20 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/vav_parallel_piu_terminals_fan_control.md +23 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/vav_terminals_min_flow_setpoint.md +21 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_airloop_hvac.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_airloop_hvac_doas.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_building.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_design_specification_outdoor_air.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_electric_equipment.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_exterior_lights.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_gas_equipment.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_lights.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_space.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_spacetype.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_thermal_zone.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_connections.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_equipment.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_equipment_definition.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_zone_hvac.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_zone_infiltration.csv +1 -0
- data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +12 -0
- data/lib/openstudio-standards/standards/deer/data/deer.fans.json +12 -0
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +5 -1
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +1 -1
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +1 -1
- data/lib/openstudio-standards/standards/necb/ECMS/data/unitary_acs.json +24 -11
- data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +13 -15
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +8 -4
- data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +8 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/data/province_map.json +17 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +6 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +7 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +2 -3
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +4 -4
- data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +33 -924
- data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +15 -15
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +135 -29
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +16 -4
- data/lib/openstudio-standards/standards/necb/common/neb_end_use_prices.csv +40 -42
- data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +1 -1
- data/lib/openstudio-standards/standards/necb/common/space_type_upgrade_map.json +89 -89
- data/lib/openstudio-standards/utilities/array.rb +11 -0
- data/lib/openstudio-standards/utilities/logging.rb +48 -0
- data/lib/openstudio-standards/utilities/object_info.rb +20 -0
- data/lib/openstudio-standards/utilities/schedule_translator.rb +348 -0
- data/lib/openstudio-standards/utilities/sqlfile.rb +68 -0
- data/lib/openstudio-standards/version.rb +2 -2
- data/lib/openstudio-standards/weather/Weather.Model.rb +42 -55
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +1 -1
- data/lib/openstudio-standards.rb +35 -1
- metadata +111 -4
- data/data/standards/OpenStudio_Standards-ashrae_90_1_28Jan2022.xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1_28_Jan2022_2.xlsx +0 -0
@@ -75,7 +75,8 @@ class Standard
|
|
75
75
|
plr_req = fan_variable_volume_part_load_fan_power_limitation?(fan)
|
76
76
|
# Part Load Fan Pressure Control
|
77
77
|
if plr_req
|
78
|
-
|
78
|
+
vsd_curve_type = air_loop_hvac_set_vsd_curve_type
|
79
|
+
fan_variable_volume_set_control_type(fan, vsd_curve_type)
|
79
80
|
# No Part Load Fan Pressure Control
|
80
81
|
else
|
81
82
|
fan_variable_volume_set_control_type(fan, 'Multi Zone VAV with discharge dampers')
|
@@ -194,6 +195,12 @@ class Standard
|
|
194
195
|
# Economizers
|
195
196
|
if air_loop_hvac_prm_baseline_economizer_required?(air_loop_hvac, climate_zone)
|
196
197
|
air_loop_hvac_apply_prm_baseline_economizer(air_loop_hvac, climate_zone)
|
198
|
+
else
|
199
|
+
# Make sure if economizer is not required then the OA controller should have No Economizer
|
200
|
+
oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
|
201
|
+
if oa_sys.is_initialized
|
202
|
+
oa_sys.get.getControllerOutdoorAir.setEconomizerControlType('NoEconomizer')
|
203
|
+
end
|
197
204
|
end
|
198
205
|
|
199
206
|
# Multizone VAV Systems
|
@@ -216,7 +223,8 @@ class Standard
|
|
216
223
|
end
|
217
224
|
|
218
225
|
# Unoccupied shutdown
|
219
|
-
|
226
|
+
occ_threshold = air_loop_hvac_unoccupied_threshold
|
227
|
+
air_loop_hvac_enable_unoccupied_fan_shutoff(air_loop_hvac, occ_threshold)
|
220
228
|
|
221
229
|
return true
|
222
230
|
end
|
@@ -349,6 +357,12 @@ class Standard
|
|
349
357
|
return true
|
350
358
|
end
|
351
359
|
|
360
|
+
# Set default fan curve to be VSD with static pressure reset
|
361
|
+
# @return [string] name of appropriate curve for this code version
|
362
|
+
def air_loop_hvac_set_vsd_curve_type
|
363
|
+
return 'Multi Zone VAV with VSD and SP Setpoint Reset'
|
364
|
+
end
|
365
|
+
|
352
366
|
# Calculate and apply the performance rating method baseline fan power to this air loop.
|
353
367
|
# Fan motor efficiency will be set, and then fan pressure rise adjusted so that the
|
354
368
|
# fan power is the maximum allowable.
|
@@ -1128,7 +1142,7 @@ class Standard
|
|
1128
1142
|
# Determine if the airloop includes hydronic cooling coils
|
1129
1143
|
#
|
1130
1144
|
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
1131
|
-
# @return [Bool] returns true if hydronic
|
1145
|
+
# @return [Bool] returns true if hydronic cooling coils are included on the airloop
|
1132
1146
|
def air_loop_hvac_include_hydronic_cooling_coil?(air_loop_hvac)
|
1133
1147
|
air_loop_hvac.supplyComponents.each do |comp|
|
1134
1148
|
return true if comp.to_CoilCoolingWater.is_initialized
|
@@ -1136,6 +1150,82 @@ class Standard
|
|
1136
1150
|
return false
|
1137
1151
|
end
|
1138
1152
|
|
1153
|
+
# Determine if the airloop includes cooling coils
|
1154
|
+
#
|
1155
|
+
# @return [Bool] returns true if cooling coils are included on the airloop
|
1156
|
+
def air_loop_hvac_include_cooling_coil?(air_loop_hvac)
|
1157
|
+
air_loop_hvac.supplyComponents.each do |comp|
|
1158
|
+
return true if comp.to_CoilCoolingWater.is_initialized
|
1159
|
+
return true if comp.to_CoilCoolingWater.is_initialized
|
1160
|
+
return true if comp.to_CoilCoolingCooledBeam.is_initialized
|
1161
|
+
return true if comp.to_CoilCoolingDXMultiSpeed.is_initialized
|
1162
|
+
return true if comp.to_CoilCoolingDXSingleSpeed.is_initialized
|
1163
|
+
return true if comp.to_CoilCoolingDXTwoSpeed.is_initialized
|
1164
|
+
return true if comp.to_CoilCoolingDXTwoStageWithHumidityControlMode.is_initialized
|
1165
|
+
return true if comp.to_CoilCoolingDXVariableRefrigerantFlow.is_initialized
|
1166
|
+
return true if comp.to_CoilCoolingDXVariableSpeed.is_initialized
|
1167
|
+
return true if comp.to_CoilCoolingFourPipeBeam.is_initialized
|
1168
|
+
return true if comp.to_CoilCoolingLowTempRadiantConstFlow.is_initialized
|
1169
|
+
return true if comp.to_CoilCoolingLowTempRadiantVarFlow.is_initialized
|
1170
|
+
return true if comp.to_CoilCoolingWater.is_initialized
|
1171
|
+
return true if comp.to_CoilCoolingWaterToAirHeatPumpEquationFit.is_initialized
|
1172
|
+
return true if comp.to_CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFit.is_initialized
|
1173
|
+
|
1174
|
+
if comp.to_AirLoopHVACUnitarySystem.is_initialized
|
1175
|
+
unitary_system = comp.to_AirLoopHVACUnitarySystem.get
|
1176
|
+
if unitary_system.coolingCoil.is_initialized
|
1177
|
+
cooling_coil = unitary_system.coolingCoil.get
|
1178
|
+
return true if cooling_coil.to_CoilCoolingWater.is_initialized
|
1179
|
+
return true if cooling_coil.to_CoilCoolingWater.is_initialized
|
1180
|
+
return true if cooling_coil.to_CoilCoolingCooledBeam.is_initialized
|
1181
|
+
return true if cooling_coil.to_CoilCoolingDXMultiSpeed.is_initialized
|
1182
|
+
return true if cooling_coil.to_CoilCoolingDXSingleSpeed.is_initialized
|
1183
|
+
return true if cooling_coil.to_CoilCoolingDXTwoSpeed.is_initialized
|
1184
|
+
return true if cooling_coil.to_CoilCoolingDXTwoStageWithHumidityControlMode.is_initialized
|
1185
|
+
return true if cooling_coil.to_CoilCoolingDXVariableRefrigerantFlow.is_initialized
|
1186
|
+
return true if cooling_coil.to_CoilCoolingDXVariableSpeed.is_initialized
|
1187
|
+
return true if cooling_coil.to_CoilCoolingFourPipeBeam.is_initialized
|
1188
|
+
return true if cooling_coil.to_CoilCoolingLowTempRadiantConstFlow.is_initialized
|
1189
|
+
return true if cooling_coil.to_CoilCoolingLowTempRadiantVarFlow.is_initialized
|
1190
|
+
return true if cooling_coil.to_CoilCoolingWater.is_initialized
|
1191
|
+
return true if cooling_coil.to_CoilCoolingWaterToAirHeatPumpEquationFit.is_initialized
|
1192
|
+
return true if cooling_coil.to_CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFit.is_initialized
|
1193
|
+
end
|
1194
|
+
end
|
1195
|
+
end
|
1196
|
+
return false
|
1197
|
+
end
|
1198
|
+
|
1199
|
+
# Determine if the airloop includes evaporative coolers
|
1200
|
+
#
|
1201
|
+
# @return [Bool] returns true if evaporative coolers are included on the airloop
|
1202
|
+
def air_loop_hvac_include_evaporative_cooler?(air_loop_hvac)
|
1203
|
+
air_loop_hvac.supplyComponents.each do |comp|
|
1204
|
+
return true if comp.to_EvaporativeCoolerDirectResearchSpecial.is_initialized
|
1205
|
+
return true if comp.to_EvaporativeCoolerIndirectResearchSpecial.is_initialized
|
1206
|
+
end
|
1207
|
+
return false
|
1208
|
+
end
|
1209
|
+
|
1210
|
+
# Determine if the airloop includes an air-economizer
|
1211
|
+
#
|
1212
|
+
# @return [Bool] returns true if the airloop has an air-economizer
|
1213
|
+
def air_loop_hvac_include_economizer?(air_loop_hvac)
|
1214
|
+
return false unless air_loop_hvac.airLoopHVACOutdoorAirSystem.is_initialized
|
1215
|
+
|
1216
|
+
# Get OA system
|
1217
|
+
air_loop_hvac_oa_system = air_loop_hvac.airLoopHVACOutdoorAirSystem.get
|
1218
|
+
|
1219
|
+
# Get OA controller
|
1220
|
+
air_loop_hvac_oa_controller = air_loop_hvac_oa_system.getControllerOutdoorAir
|
1221
|
+
|
1222
|
+
# Get economizer type
|
1223
|
+
economizer_type = air_loop_hvac_oa_controller.getEconomizerControlType.to_s
|
1224
|
+
return false if economizer_type == 'NoEconomizer'
|
1225
|
+
|
1226
|
+
return true
|
1227
|
+
end
|
1228
|
+
|
1139
1229
|
# Determine if the airloop includes WSHP cooling coils
|
1140
1230
|
#
|
1141
1231
|
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
@@ -1805,7 +1895,11 @@ class Standard
|
|
1805
1895
|
oa_system = air_loop_hvac.airLoopHVACOutdoorAirSystem.get
|
1806
1896
|
controller_oa = oa_system.getControllerOutdoorAir
|
1807
1897
|
controller_mv = controller_oa.controllerMechanicalVentilation
|
1808
|
-
|
1898
|
+
if air_loop_hvac.model.version < OpenStudio::VersionString.new('3.3.0')
|
1899
|
+
controller_mv.setSystemOutdoorAirMethod('VentilationRateProcedure')
|
1900
|
+
else
|
1901
|
+
controller_mv.setSystemOutdoorAirMethod('Standard62.1VentilationRateProcedureWithLimit')
|
1902
|
+
end
|
1809
1903
|
# Change the min flow rate in the controller outdoor air
|
1810
1904
|
controller_oa.setMinimumOutdoorAirFlowRate(0.0)
|
1811
1905
|
else
|
@@ -1834,6 +1928,16 @@ class Standard
|
|
1834
1928
|
end
|
1835
1929
|
end
|
1836
1930
|
|
1931
|
+
# Determine minimum ventilation efficiency for zones.
|
1932
|
+
# This is used to decrease the overall system minimum OA flow rate
|
1933
|
+
# such that a few zones do not drive the overall system OA flow rate too
|
1934
|
+
# high.
|
1935
|
+
def air_loop_hvac_minimum_zone_ventilation_efficiency(air_loop_hvac)
|
1936
|
+
min_ventilation_efficiency = 0.6
|
1937
|
+
|
1938
|
+
return min_ventilation_efficiency
|
1939
|
+
end
|
1940
|
+
|
1837
1941
|
# Set the minimum VAV damper positions.
|
1838
1942
|
#
|
1839
1943
|
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
@@ -3159,11 +3263,26 @@ class Standard
|
|
3159
3263
|
return 0.15
|
3160
3264
|
end
|
3161
3265
|
|
3266
|
+
# Determine if the air loop serves parallel PIU air terminals
|
3267
|
+
#
|
3268
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
3269
|
+
def air_loop_hvac_has_parallel_piu_air_terminals?(air_loop_hvac)
|
3270
|
+
has_parallel_piu_terminals = false
|
3271
|
+
air_loop_hvac.thermalZones.each do |zone|
|
3272
|
+
zone.equipment.each do |equipment|
|
3273
|
+
# Get the object type
|
3274
|
+
obj_type = equipment.iddObjectType.valueName.to_s
|
3275
|
+
if obj_type == 'OS_AirTerminal_SingleDuct_ParallelPIU_Reheat'
|
3276
|
+
return true
|
3277
|
+
end
|
3278
|
+
end
|
3279
|
+
end
|
3280
|
+
|
3281
|
+
return has_parallel_piu_terminals
|
3282
|
+
end
|
3283
|
+
|
3162
3284
|
# Shut off the system during unoccupied periods.
|
3163
3285
|
# During these times, systems will cycle on briefly if temperature drifts below setpoint.
|
3164
|
-
# For systems with fan-powered terminals, the whole system (not just the terminal fans) will cycle on.
|
3165
|
-
# Terminal-only night cycling is not used because the terminals cannot provide cooling,
|
3166
|
-
# so terminal-only night cycling leads to excessive unmet cooling hours during unoccupied periods.
|
3167
3286
|
# If the system already has a schedule other than Always-On, no change will be made.
|
3168
3287
|
# If the system has an Always-On schedule assigned, a new schedule will be created.
|
3169
3288
|
# In this case, occupied is defined as the total percent occupancy for the loop for all zones served.
|
@@ -3173,7 +3292,37 @@ class Standard
|
|
3173
3292
|
# @return [Bool] returns true if successful, false if not
|
3174
3293
|
def air_loop_hvac_enable_unoccupied_fan_shutoff(air_loop_hvac, min_occ_pct = 0.05)
|
3175
3294
|
# Set the system to night cycle
|
3295
|
+
# The fan of a parallel PIU terminal are set to only cycle during heating operation
|
3296
|
+
# This is achieved using the CycleOnAnyCoolingOrHeatingZone; During cooling operation
|
3297
|
+
# the load is met by running the central system which stays off during heating
|
3298
|
+
# operation
|
3176
3299
|
air_loop_hvac.setNightCycleControlType('CycleOnAny')
|
3300
|
+
if air_loop_hvac_has_parallel_piu_air_terminals?(air_loop_hvac)
|
3301
|
+
avail_mgrs = air_loop_hvac.availabilityManagers
|
3302
|
+
if !avail_mgrs.nil?
|
3303
|
+
avail_mgrs.each do |avail_mgr|
|
3304
|
+
if avail_mgr.to_AvailabilityManagerNightCycle.is_initialized
|
3305
|
+
avail_mgr_nc = avail_mgr.to_AvailabilityManagerNightCycle.get
|
3306
|
+
avail_mgr_nc.setControlType('CycleOnAnyCoolingOrHeatingZone')
|
3307
|
+
zones = air_loop_hvac.thermalZones
|
3308
|
+
avail_mgr_nc.setCoolingControlThermalZones(zones)
|
3309
|
+
avail_mgr_nc.setHeatingZoneFansOnlyThermalZones(zones)
|
3310
|
+
end
|
3311
|
+
end
|
3312
|
+
end
|
3313
|
+
end
|
3314
|
+
|
3315
|
+
model = air_loop_hvac.model
|
3316
|
+
# Check if schedule was stored in an additionalProperties field of the air loop
|
3317
|
+
air_loop_name = air_loop_hvac.name
|
3318
|
+
if air_loop_hvac.hasAdditionalProperties
|
3319
|
+
if air_loop_hvac.additionalProperties.hasFeature('fan_sched_name')
|
3320
|
+
fan_sched_name = air_loop_hvac.additionalProperties.getFeatureAsString('fan_sched_name').get
|
3321
|
+
fan_sched = model.getScheduleRulesetByName(fan_sched_name).get
|
3322
|
+
air_loop_hvac.setAvailabilitySchedule(fan_sched)
|
3323
|
+
return true
|
3324
|
+
end
|
3325
|
+
end
|
3177
3326
|
|
3178
3327
|
# Check if already using a schedule other than always on
|
3179
3328
|
avail_sch = air_loop_hvac.availabilitySchedule
|
@@ -3534,6 +3683,118 @@ class Standard
|
|
3534
3683
|
return dx_clg
|
3535
3684
|
end
|
3536
3685
|
|
3686
|
+
# Get return fan power for airloop
|
3687
|
+
#
|
3688
|
+
# @param model [OpenStudio::model::AirLoopHVAC] AirLoopHVAC object
|
3689
|
+
# @return [Float] Fan power
|
3690
|
+
def air_loop_hvac_get_return_fan_power(air_loop)
|
3691
|
+
return_fan_power = 0
|
3692
|
+
|
3693
|
+
if air_loop.returnFan.is_initialized
|
3694
|
+
# Get return fan
|
3695
|
+
fan = air_loop.returnFan.get
|
3696
|
+
|
3697
|
+
# Get fan object
|
3698
|
+
if fan.to_FanConstantVolume.is_initialized
|
3699
|
+
fan = fan.to_FanConstantVolume.get
|
3700
|
+
elsif fan.to_FanVariableVolume.is_initialized
|
3701
|
+
fan = fan.to_FanVariableVolume.get
|
3702
|
+
elsif fan.to_FanOnOff.is_initialized
|
3703
|
+
fan = fan.to_FanOnOff.get
|
3704
|
+
end
|
3705
|
+
|
3706
|
+
# Get fan power
|
3707
|
+
return_fan_power += fan_fanpower(fan)
|
3708
|
+
end
|
3709
|
+
|
3710
|
+
return return_fan_power
|
3711
|
+
end
|
3712
|
+
|
3713
|
+
# Get supply fan power for airloop
|
3714
|
+
#
|
3715
|
+
# @param model [OpenStudio::model::AirLoopHVAC] AirLoopHVAC object
|
3716
|
+
# @return [Float] Fan power
|
3717
|
+
def air_loop_hvac_get_supply_fan_power(air_loop)
|
3718
|
+
supply_fan_power = 0
|
3719
|
+
|
3720
|
+
# Get fan
|
3721
|
+
fan = air_loop_hvac_get_supply_fan(air_loop)
|
3722
|
+
|
3723
|
+
if !fan.nil?
|
3724
|
+
# Get fan power
|
3725
|
+
supply_fan_power += fan_fanpower(fan)
|
3726
|
+
end
|
3727
|
+
|
3728
|
+
return supply_fan_power
|
3729
|
+
end
|
3730
|
+
|
3731
|
+
# Get supply fan for airloop
|
3732
|
+
#
|
3733
|
+
# @param model [OpenStudio::model::AirLoopHVAC] AirLoopHVAC object
|
3734
|
+
# @return fan
|
3735
|
+
def air_loop_hvac_get_supply_fan(air_loop)
|
3736
|
+
fan = nil
|
3737
|
+
if air_loop.supplyFan.is_initialized
|
3738
|
+
# Get return fan
|
3739
|
+
fan = air_loop.supplyFan.get
|
3740
|
+
|
3741
|
+
# Get fan object
|
3742
|
+
if fan.to_FanConstantVolume.is_initialized
|
3743
|
+
fan = fan.to_FanConstantVolume.get
|
3744
|
+
elsif fan.to_FanVariableVolume.is_initialized
|
3745
|
+
fan = fan.to_FanVariableVolume.get
|
3746
|
+
elsif fan.to_FanOnOff.is_initialized
|
3747
|
+
fan = fan.to_FanOnOff.get
|
3748
|
+
end
|
3749
|
+
|
3750
|
+
else
|
3751
|
+
air_loop.supplyComponents.each do |comp|
|
3752
|
+
if comp.to_AirLoopHVACUnitarySystem.is_initialized
|
3753
|
+
fan = comp.to_AirLoopHVACUnitarySystem.get.supplyFan
|
3754
|
+
next if fan.empty?
|
3755
|
+
|
3756
|
+
# Get fan object
|
3757
|
+
fan = fan.get
|
3758
|
+
if fan.to_FanConstantVolume.is_initialized
|
3759
|
+
fan = fan.to_FanConstantVolume.get
|
3760
|
+
elsif fan.to_FanVariableVolume.is_initialized
|
3761
|
+
fan = fan.to_FanVariableVolume.get
|
3762
|
+
elsif fan.to_FanOnOff.is_initialized
|
3763
|
+
fan = fan.to_FanOnOff.get
|
3764
|
+
end
|
3765
|
+
end
|
3766
|
+
end
|
3767
|
+
end
|
3768
|
+
return fan
|
3769
|
+
end
|
3770
|
+
|
3771
|
+
# Get relief fan power for airloop
|
3772
|
+
#
|
3773
|
+
# @param model [OpenStudio::model::AirLoopHVAC] AirLoopHVAC object
|
3774
|
+
# @return [Float] Fan power
|
3775
|
+
def air_loop_hvac_get_relief_fan_power(air_loop)
|
3776
|
+
relief_fan_power = 0
|
3777
|
+
|
3778
|
+
if air_loop.reliefFan.is_initialized
|
3779
|
+
# Get return fan
|
3780
|
+
fan = air_loop.reliefFan.get
|
3781
|
+
|
3782
|
+
# Get fan object
|
3783
|
+
if fan.to_FanConstantVolume.is_initialized
|
3784
|
+
fan = fan.to_FanConstantVolume.get
|
3785
|
+
elsif fan.to_FanVariableVolume.is_initialized
|
3786
|
+
fan = fan.to_FanVariableVolume.get
|
3787
|
+
elsif fan.to_FanOnOff.is_initialized
|
3788
|
+
fan = fan.to_FanOnOff.get
|
3789
|
+
end
|
3790
|
+
|
3791
|
+
# Get fan power
|
3792
|
+
relief_fan_power += fan_fanpower(fan)
|
3793
|
+
end
|
3794
|
+
|
3795
|
+
return relief_fan_power
|
3796
|
+
end
|
3797
|
+
|
3537
3798
|
# Add occupant standby controls to air loop
|
3538
3799
|
# When the thermostat schedule is setup or setback
|
3539
3800
|
# the ventilation is shutoff. Currently this is done
|
@@ -3584,4 +3845,30 @@ class Standard
|
|
3584
3845
|
end
|
3585
3846
|
return simple_transfer_air
|
3586
3847
|
end
|
3848
|
+
|
3849
|
+
# Get the return air plenum zone object for an air loop, if it exists
|
3850
|
+
#
|
3851
|
+
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] OpenStudio AirLoopHVAC object
|
3852
|
+
# @return [OpenStudio::Model::ThermalZone] OpenStudio thermal zone object of the return air plenum zone
|
3853
|
+
# when an air loop uses a return air plenum, nil otherwise
|
3854
|
+
def air_loop_hvac_return_air_plenum(air_loop_hvac)
|
3855
|
+
# Get return air node
|
3856
|
+
return_air_node = air_loop_hvac.demandOutletNode
|
3857
|
+
|
3858
|
+
# Check if node is connected to a return plenum object
|
3859
|
+
air_loop_hvac.model.getAirLoopHVACReturnPlenums.each do |return_plenum|
|
3860
|
+
air_loop_hvac.model.getAirLoopHVACZoneMixers.each do |zone_air_mixer|
|
3861
|
+
inlets = zone_air_mixer.inletModelObjects
|
3862
|
+
inlets.each do |inlet|
|
3863
|
+
if inlet.to_Node.get == return_plenum.outletModelObject.get.to_Node.get
|
3864
|
+
if zone_air_mixer.outletModelObject.get.to_Node.get == return_air_node
|
3865
|
+
return return_plenum.thermalZone.get
|
3866
|
+
end
|
3867
|
+
end
|
3868
|
+
end
|
3869
|
+
end
|
3870
|
+
end
|
3871
|
+
|
3872
|
+
return nil
|
3873
|
+
end
|
3587
3874
|
end
|
@@ -11,9 +11,14 @@ class Standard
|
|
11
11
|
# Determine the fan sizing flow rate, min flow rate,
|
12
12
|
# and W/cfm
|
13
13
|
sec_flow_frac = 0.5
|
14
|
-
min_flow_frac =
|
14
|
+
min_flow_frac = air_terminal_single_duct_parallel_reheat_piu_minimum_primary_airflow_fraction(air_terminal_single_duct_parallel_piu_reheat)
|
15
15
|
fan_efficacy_w_per_cfm = 0.35
|
16
16
|
|
17
|
+
# Set the fan on flow fraction
|
18
|
+
unless air_terminal_single_duct_parallel_piu_reheat_fan_on_flow_fraction.nil?
|
19
|
+
air_terminal_single_duct_parallel_piu_reheat.setFanOnFlowFraction(air_terminal_single_duct_parallel_piu_reheat_fan_on_flow_fraction)
|
20
|
+
end
|
21
|
+
|
17
22
|
# Convert efficacy to metric
|
18
23
|
# 1 cfm = 0.0004719 m^3/s
|
19
24
|
fan_efficacy_w_per_m3_per_s = fan_efficacy_w_per_cfm / 0.0004719
|
@@ -32,7 +37,6 @@ class Standard
|
|
32
37
|
max_sec_flow_rate_cfm = OpenStudio.convert(max_sec_flow_rate_m3_per_s, 'm^3/s', 'ft^3/min').get
|
33
38
|
|
34
39
|
# Set the minimum flow fraction
|
35
|
-
# @todo Also compare to min OA requirement
|
36
40
|
air_terminal_single_duct_parallel_piu_reheat.setMinimumPrimaryAirFlowFraction(min_flow_frac)
|
37
41
|
|
38
42
|
# Get the fan
|
@@ -58,4 +62,48 @@ class Standard
|
|
58
62
|
|
59
63
|
return true
|
60
64
|
end
|
65
|
+
|
66
|
+
# Return the fan on flow fraction for a parallel PIU terminal.
|
67
|
+
#
|
68
|
+
# When returning nil, the fan on flow fraction will be set to
|
69
|
+
# be autosize in the EnergyPlus model; OpenStudio assumes that
|
70
|
+
# the default is "autosize". When autosized, this input is set
|
71
|
+
# to be the same as the minimum primary air flow fraction which
|
72
|
+
# means that the secondary fan will be on when the primary air
|
73
|
+
# flow is at the minimum flow fraction.
|
74
|
+
#
|
75
|
+
# @return [Float] returns nil or a float representing the fraction
|
76
|
+
def air_terminal_single_duct_parallel_piu_reheat_fan_on_flow_fraction
|
77
|
+
return nil
|
78
|
+
end
|
79
|
+
|
80
|
+
# Specifies the minimum primary air flow fraction for PFB boxes.
|
81
|
+
#
|
82
|
+
# @param air_terminal_single_duct_parallel_piu_reheat [OpenStudio::Model::AirTerminalSingleDuctParallelPIUReheat] air terminal object
|
83
|
+
# @return [Double] minimum primaru air flow fraction
|
84
|
+
def air_terminal_single_duct_parallel_reheat_piu_minimum_primary_airflow_fraction(air_terminal_single_duct_parallel_piu_reheat)
|
85
|
+
min_primary_airflow_fraction = 0.3
|
86
|
+
return min_primary_airflow_fraction
|
87
|
+
end
|
88
|
+
|
89
|
+
# Set the minimum primary air flow fraction based on OA rate of the space and the template.
|
90
|
+
#
|
91
|
+
# @param air_terminal_single_duct_parallel_piu_reheat [OpenStudio::Model::AirTerminalSingleDuctParallelPIUReheat] the air terminal object
|
92
|
+
# @param zone_min_oa [Double] the zone outdoor air flow rate, in m^3/s.
|
93
|
+
# @return [Bool] returns true if successful, false if not
|
94
|
+
def air_terminal_single_duct_parallel_piu_reheat_apply_minimum_primary_airflow_fraction(air_terminal_single_duct_parallel_piu_reheat, zone_min_oa = nil)
|
95
|
+
# Minimum primary air flow
|
96
|
+
min_primary_airflow_frac = air_terminal_single_duct_parallel_reheat_piu_minimum_primary_airflow_fraction(air_terminal_single_duct_parallel_piu_reheat)
|
97
|
+
air_terminal_single_duct_parallel_piu_reheat.setMinimumPrimaryAirFlowFraction(min_primary_airflow_frac)
|
98
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.AirTerminalSingleDuctParallelPIUReheat', "For #{air_terminal_single_duct_parallel_piu_reheat.name}: set minimum primary air flow fraction to #{min_primary_airflow_frac}.")
|
99
|
+
|
100
|
+
# Minimum OA flow rate
|
101
|
+
# If specified, set the primary air flow fraction as
|
102
|
+
unless zone_min_oa.nil?
|
103
|
+
min_primary_airflow_frac = [min_primary_airflow_frac, zone_min_oa / air_terminal_single_duct_parallel_piu_reheat.autosizedMaximumPrimaryAirFlowRate.get].max
|
104
|
+
air_terminal_single_duct_parallel_piu_reheat.setMinimumPrimaryAirFlowFraction(min_primary_airflow_frac)
|
105
|
+
end
|
106
|
+
|
107
|
+
return true
|
108
|
+
end
|
61
109
|
end
|
@@ -25,11 +25,15 @@ class Standard
|
|
25
25
|
name = chiller_electric_eir.name.get
|
26
26
|
condenser_type = nil
|
27
27
|
compressor_type = nil
|
28
|
+
absorption_type = nil
|
28
29
|
if cooling_type == 'AirCooled'
|
29
30
|
if name.include?('WithCondenser')
|
30
31
|
condenser_type = 'WithCondenser'
|
31
32
|
elsif name.include?('WithoutCondenser')
|
32
33
|
condenser_type = 'WithoutCondenser'
|
34
|
+
else
|
35
|
+
# default to 'WithCondenser' if not an absorption chiller
|
36
|
+
condenser_type = 'WithCondenser' if absorption_type.nil?
|
33
37
|
end
|
34
38
|
elsif cooling_type == 'WaterCooled'
|
35
39
|
if name.include?('Reciprocating')
|
data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb
CHANGED
@@ -103,7 +103,6 @@ class Standard
|
|
103
103
|
# @param sql_db_vars_map [Hash] hash map
|
104
104
|
# @return [Hash] hash of coil objects
|
105
105
|
def coil_cooling_water_to_air_heat_pump_apply_efficiency_and_curves(coil_cooling_water_to_air_heat_pump, sql_db_vars_map)
|
106
|
-
|
107
106
|
# Get the search criteria
|
108
107
|
search_criteria = {}
|
109
108
|
search_criteria['template'] = template
|