Source code for honeybee_openstudio.hvac.template

# coding=utf-8
"""OpenStudio translators for template HVAC systems."""
from __future__ import division

from honeybee.typing import clean_ep_string
from honeybee_energy.hvac.allair._base import _AllAirBase
from honeybee_energy.hvac.doas._base import _DOASBase
from honeybee_energy.hvac.allair.ptac import PTAC
from honeybee_energy.hvac.allair.psz import PSZ
from honeybee_energy.hvac.allair.pvav import PVAV
from honeybee_energy.hvac.allair.vav import VAV
from honeybee_energy.hvac.allair.furnace import ForcedAirFurnace
from honeybee_energy.hvac.doas.fcu import FCUwithDOAS
from honeybee_energy.hvac.doas.vrf import VRFwithDOAS
from honeybee_energy.hvac.doas.wshp import WSHPwithDOAS
from honeybee_energy.hvac.doas.radiant import RadiantwithDOAS
from honeybee_energy.hvac.heatcool.baseboard import Baseboard
from honeybee_energy.hvac.heatcool.evapcool import EvaporativeCooler
from honeybee_energy.hvac.heatcool.fcu import FCU
from honeybee_energy.hvac.heatcool.gasunit import GasUnitHeater
from honeybee_energy.hvac.heatcool.residential import Residential
from honeybee_energy.hvac.heatcool.vrf import VRF
from honeybee_energy.hvac.heatcool.windowac import WindowAC
from honeybee_energy.hvac.heatcool.wshp import WSHP
from honeybee_energy.hvac.heatcool.radiant import Radiant

from honeybee_openstudio.openstudio import openstudio, openstudio_model, \
    OSScheduleRuleset, OSTime
from .standards.hvac_systems import model_add_hvac_system, model_add_low_temp_radiant, \
    model_get_or_add_chilled_water_loop, model_add_hw_loop, model_add_chw_loop, \
    model_add_cw_loop, model_get_or_add_ambient_water_loop


[docs] def template_hvac_to_openstudio(hvac, os_zones, os_model): """Convert Honeybee HVAC TemplateSystem to OpenStudio. Args: hvac: Any honeybee-energy TemplateSystem class instance to be translated to OpenStudio. os_zones: A dictionary with two keys, each of which has a value for a list of OpenStudio ThermalZones. The keys are heated_zones and cooled_zones and the lists under each key note the OpenStudio ThermalZones to be given heating and cooling equipment by the HVAC. os_model: The OpenStudio Model object to which the HVAC system will be added. """ # unpack the heated and cooled zones and organize them into groups heated_zones, cooled_zones = os_zones['heated_zones'], os_zones['cooled_zones'] heated_and_cooled_zones, cooled_only_zones, heated_only_zones = [], [], [] heat_dict = {z.nameString(): z for z in heated_zones} cool_dict = {z.nameString(): z for z in cooled_zones} all_dict = heat_dict.copy() all_dict.update(cool_dict) zones = list(all_dict.values()) for zone in zones: zone_name = zone.nameString() if zone_name in heat_dict and zone_name in cool_dict: heated_and_cooled_zones.append(zone) elif zone_name in cool_dict: cooled_only_zones.append(zone) else: heated_only_zones.append(zone) system_zones = heated_and_cooled_zones + cooled_only_zones # determine the DOAS type from the demand controlled ventilation dcv = getattr(hvac, 'demand_controlled_ventilation', False) doas_type = 'DOAS' if not dcv else 'DOAS with DCV' air_loop = None # will be returned from HVAC creation # add the HVAC system equipment using the equipment type # system type naming convention: # [ventilation strategy] [cooling system and plant] [heating system and plant] equip = hvac.equipment_type if isinstance(hvac, Baseboard): if equip == 'ElectricBaseboard': model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'BoilerBaseboard': model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_zones) elif equip == 'ASHPBaseboard': model_add_hvac_system(os_model, 'Baseboards', 'AirSourceHeatPump', None, None, heated_zones) elif equip == 'DHWBaseboard': model_add_hvac_system(os_model, 'Baseboards', 'DistrictHeating', None, None, heated_zones) elif isinstance(hvac, EvaporativeCooler): if equip == 'EvapCoolers_ElectricBaseboard': model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) model_add_hvac_system(os_model, 'Evaporative Cooler', None, None, 'Electricity', cooled_zones) elif equip == 'EvapCoolers_BoilerBaseboard': model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_zones) model_add_hvac_system(os_model, 'Evaporative Cooler', None, None, 'Electricity', cooled_zones) elif equip == 'EvapCoolers_ASHPBaseboard': model_add_hvac_system(os_model, 'Baseboards', 'AirSourceHeatPump', None, None, heated_zones) model_add_hvac_system(os_model, 'Evaporative Cooler', None, None, 'Electricity', cooled_zones) elif equip == 'EvapCoolers_DHWBaseboard': model_add_hvac_system(os_model, 'Baseboards', 'DistrictHeating', None, None, heated_zones) model_add_hvac_system(os_model, 'Evaporative Cooler', None, None, 'Electricity', cooled_zones) elif equip == 'EvapCoolers_Furnace': # use unit heater to represent forced air furnace model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) model_add_hvac_system(os_model, 'Evaporative Cooler', None, None, 'Electricity', cooled_zones) elif equip == 'EvapCoolers_UnitHeaters': model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) model_add_hvac_system(os_model, 'Evaporative Cooler', None, None, 'Electricity', cooled_zones) elif equip == 'EvapCoolers': model_add_hvac_system(os_model, 'Evaporative Cooler', None, None, 'Electricity', cooled_zones) elif isinstance(hvac, FCUwithDOAS): if equip == 'DOAS_FCU_Chiller_Boiler': air_loop = model_add_hvac_system(os_model, doas_type, 'NaturalGas', None, 'Electricity', zones) model_add_hvac_system(os_model, 'Fan Coil', 'NaturalGas', None, 'Electricity', zones, zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_Chiller_ASHP': air_loop = model_add_hvac_system(os_model, doas_type, 'AirSourceHeatPump', None, 'Electricity', zones) model_add_hvac_system(os_model, 'Fan Coil', 'AirSourceHeatPump', None, 'Electricity', zones, zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_Chiller_DHW': air_loop = model_add_hvac_system(os_model, doas_type, 'DistrictHeating', None, 'Electricity', zones) model_add_hvac_system(os_model, 'Fan Coil', 'DistrictHeating', None, 'Electricity', zones, zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_Chiller_ElectricBaseboard': air_loop = model_add_hvac_system(os_model, doas_type, None, None, 'Electricity', zones) model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones, zone_equipment_ventilation=False) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'DOAS_FCU_Chiller_GasHeaters': air_loop = model_add_hvac_system(os_model, doas_type, None, None, 'Electricity', zones) model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones, zone_equipment_ventilation=False) model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'DOAS_FCU_Chiller': air_loop = model_add_hvac_system(os_model, doas_type, None, None, 'Electricity', zones) model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones, zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_ACChiller_Boiler': air_loop = model_add_hvac_system(os_model, doas_type, 'NaturalGas', None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') model_add_hvac_system(os_model, 'Fan Coil', 'NaturalGas', None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled', zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_ACChiller_ASHP': air_loop = model_add_hvac_system(os_model, doas_type, 'AirSourceHeatPump', None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') model_add_hvac_system(os_model, 'Fan Coil', 'AirSourceHeatPump', None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled', zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_ACChiller_DHW': air_loop = model_add_hvac_system(os_model, doas_type, 'DistrictHeating', None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') model_add_hvac_system(os_model, 'Fan Coil', 'DistrictHeating', None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled', zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_ACChiller_ElectricBaseboard': air_loop = model_add_hvac_system(os_model, doas_type, None, None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled', zone_equipment_ventilation=False) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'DOAS_FCU_ACChiller_GasHeaters': air_loop = model_add_hvac_system(os_model, doas_type, None, None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled', zone_equipment_ventilation=False) model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'DOAS_FCU_ACChiller': air_loop = model_add_hvac_system(os_model, doas_type, None, None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled', zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_DCW_Boiler': air_loop = model_add_hvac_system(os_model, doas_type, 'NaturalGas', None, 'DistrictCooling', zones) model_add_hvac_system(os_model, 'Fan Coil', 'NaturalGas', None, 'DistrictCooling', zones, zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_DCW_ASHP': air_loop = model_add_hvac_system(os_model, doas_type, 'AirSourceHeatPump', None, 'DistrictCooling', zones) model_add_hvac_system(os_model, 'Fan Coil', 'AirSourceHeatPump', None, 'DistrictCooling', zones, zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_DCW_DHW': air_loop = model_add_hvac_system(os_model, doas_type, 'DistrictHeating', None, 'DistrictCooling', zones) model_add_hvac_system(os_model, 'Fan Coil', 'DistrictHeating', None, 'DistrictCooling', zones, zone_equipment_ventilation=False) elif equip == 'DOAS_FCU_DCW_ElectricBaseboard': air_loop = model_add_hvac_system(os_model, doas_type, None, None, 'DistrictCooling', zones) model_add_hvac_system(os_model, 'Fan Coil', None, None, 'DistrictCooling', zones, zone_equipment_ventilation=False) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'DOAS_FCU_DCW_GasHeaters': air_loop = model_add_hvac_system(os_model, doas_type, None, None, 'DistrictCooling', zones) model_add_hvac_system(os_model, 'Fan Coil', None, None, 'DistrictCooling', zones, zone_equipment_ventilation=False) model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'DOAS_FCU_DCW': air_loop = model_add_hvac_system(os_model, doas_type, None, None, 'DistrictCooling', zones) model_add_hvac_system(os_model, 'Fan Coil', None, None, 'DistrictCooling', zones, zone_equipment_ventilation=False) elif isinstance(hvac, RadiantwithDOAS): chilled_water_loop_cooling_type = 'WaterCooled' if equip == 'DOAS_Radiant_Chiller_Boiler': main_heat_fuel, cool_fuel = 'NaturalGas', 'Electricity' elif equip == 'DOAS_Radiant_Chiller_ASHP': main_heat_fuel, cool_fuel = 'AirSourceHeatPump', 'Electricity' elif equip == 'DOAS_Radiant_Chiller_DHW': main_heat_fuel, cool_fuel = 'DistrictHeating', 'Electricity' elif equip == 'DOAS_Radiant_ACChiller_Boiler': main_heat_fuel, cool_fuel = 'NaturalGas', 'Electricity' chilled_water_loop_cooling_type = 'AirCooled' elif equip == 'DOAS_Radiant_ACChiller_ASHP': main_heat_fuel, cool_fuel = 'AirSourceHeatPump', 'Electricity' chilled_water_loop_cooling_type = 'AirCooled' elif equip == 'DOAS_Radiant_ACChiller_DHW': main_heat_fuel, cool_fuel = 'DistrictHeating', 'Electricity' chilled_water_loop_cooling_type = 'AirCooled' elif equip == 'DOAS_Radiant_DCW_Boiler': main_heat_fuel, cool_fuel = 'NaturalGas', 'DistrictCooling' elif equip == 'DOAS_Radiant_DCW_ASHP': main_heat_fuel, cool_fuel = 'AirSourceHeatPump', 'DistrictCooling' elif equip == 'DOAS_Radiant_DCW_DHW': main_heat_fuel, cool_fuel = 'DistrictHeating', 'DistrictCooling' air_loop = model_add_hvac_system( os_model, doas_type, main_heat_fuel, None, cool_fuel, zones, chilled_water_loop_cooling_type=chilled_water_loop_cooling_type) hw_name = 'Low Temp Hot Water Loop' if os_model.getPlantLoopByName(hw_name).is_initialized(): hot_water_loop = os_model.getPlantLoopByName(hw_name).get() else: hot_water_loop = model_add_hw_loop( os_model, main_heat_fuel, dsgn_sup_wtr_temp=120.0, boiler_draft_type='Condensing') hot_water_loop.setName(hw_name) chw_name = 'Low Temp Chilled Water Loop' if os_model.getPlantLoopByName(chw_name).is_initialized(): chilled_water_loop = os_model.getPlantLoopByName(chw_name).get() else: if cool_fuel == 'DistrictCooling': chilled_water_loop = model_add_chw_loop( os_model, chw_pumping_type='const_pri', cooling_fuel=cool_fuel) elif cool_fuel == 'HeatPump': condenser_water_loop = model_get_or_add_ambient_water_loop(os_model) chilled_water_loop = model_add_chw_loop( os_model, chw_pumping_type='const_pri_var_sec', chiller_cooling_type='WaterCooled', chiller_compressor_type='Rotary Screw', condenser_water_loop=condenser_water_loop) elif cool_fuel == 'Electricity': if chilled_water_loop_cooling_type == 'AirCooled': chilled_water_loop = model_add_chw_loop( os_model, chw_pumping_type='const_pri', chiller_cooling_type='AirCooled', cooling_fuel=cool_fuel) else: cond_name = 'Condenser Water Loop' if os_model.getPlantLoopByName(cond_name).is_initialized(): condenser_water_loop = os_model.getPlantLoopByName(cond_name).get() else: fan_type = 'Variable Speed Fan' condenser_water_loop = model_add_cw_loop( os_model, cooling_tower_type='Open Cooling Tower', cooling_tower_fan_type='Propeller or Axial', cooling_tower_capacity_control=fan_type, number_of_cells_per_tower=1, number_cooling_towers=1) condenser_water_loop.setName(cond_name) chilled_water_loop = model_add_chw_loop( os_model, chw_pumping_type='const_pri_var_sec', chiller_cooling_type='WaterCooled', chiller_compressor_type='Rotary Screw', condenser_water_loop=condenser_water_loop) chilled_water_loop.setName(chw_name) control_strategy, include_carpet = 'proportional_control', False radiant_temperature_control_type = 'SurfaceFaceTemperature' if hvac.radiant_type in ('CeilingMetalPanel', 'FloorWithHardwood'): control_strategy = 'none' radiant_temperature_control_type = 'OperativeTemperature' radiant_type = hvac.radiant_type.lower() if hvac.radiant_type == 'FloorWithCarpet': radiant_type, include_carpet = 'floor', True model_add_low_temp_radiant( os_model, zones, hot_water_loop, chilled_water_loop, radiant_type=radiant_type, include_carpet=include_carpet, control_strategy=control_strategy, radiant_temperature_control_type=radiant_temperature_control_type, radiant_availability_type='all_day') elif isinstance(hvac, VRFwithDOAS): if equip == 'DOAS_VRF': air_loop = model_add_hvac_system(os_model, doas_type, 'Electricity', None, 'Electricity', zones, air_loop_heating_type='DX', air_loop_cooling_type='DX') model_add_hvac_system(os_model, 'VRF', 'Electricity', None, 'Electricity', zones) elif isinstance(hvac, WSHPwithDOAS): if equip == 'DOAS_WSHP_FluidCooler_Boiler': air_loop = model_add_hvac_system(os_model, doas_type, 'NaturalGas', None, 'Electricity', zones) model_add_hvac_system(os_model, 'Water Source Heat Pumps', 'NaturalGas', None, 'Electricity', zones, heat_pump_loop_cooling_type='FluidCooler', zone_equipment_ventilation=False) elif equip == 'DOAS_WSHP_CoolingTower_Boiler': air_loop = model_add_hvac_system(os_model, doas_type, 'NaturalGas', None, 'Electricity', zones) model_add_hvac_system(os_model, 'Water Source Heat Pumps', 'NaturalGas', None, 'Electricity', zones, heat_pump_loop_cooling_type='CoolingTower', zone_equipment_ventilation=False) elif equip == 'DOAS_WSHP_GSHP': air_loop = model_add_hvac_system(os_model, doas_type, 'Electricity', None, 'Electricity', zones, air_loop_heating_type='DX', air_loop_cooling_type='DX') model_add_hvac_system(os_model, 'Ground Source Heat Pumps', 'Electricity', None, 'Electricity', zones, zone_equipment_ventilation=False) elif equip == 'DOAS_WSHP_DCW_DHW': air_loop = model_add_hvac_system(os_model, doas_type, 'DistrictHeating', None, 'DistrictCooling', zones) model_add_hvac_system(os_model, 'Water Source Heat Pumps', 'DistrictHeating', None, 'DistrictCooling', zones, zone_equipment_ventilation=False) # ventilation provided by zone fan coil unit in fan coil systems elif isinstance(hvac, FCU): if equip == 'FCU_Chiller_Boiler': model_add_hvac_system(os_model, 'Fan Coil', 'NaturalGas', None, 'Electricity', zones) elif equip == 'FCU_Chiller_ASHP': model_add_hvac_system(os_model, 'Fan Coil', 'AirSourceHeatPump', None, 'Electricity', zones) elif equip == 'FCU_Chiller_DHW': model_add_hvac_system(os_model, 'Fan Coil', 'DistrictHeating', None, 'Electricity', zones) elif equip == 'FCU_Chiller_ElectricBaseboard': model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'FCU_Chiller_GasHeaters': model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones) model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'FCU_Chiller': model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones) elif equip == 'FCU_ACChiller_Boiler': model_add_hvac_system(os_model, 'Fan Coil', 'NaturalGas', None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') elif equip == 'FCU_ACChiller_ASHP': model_add_hvac_system(os_model, 'Fan Coil', 'AirSourceHeatPump', None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') elif equip == 'FCU_ACChiller_DHW': model_add_hvac_system(os_model, 'Fan Coil', 'DistrictHeating', None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') elif equip == 'FCU_ACChiller_ElectricBaseboard': model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'FCU_ACChiller_GasHeaters': model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'FCU_ACChiller': model_add_hvac_system(os_model, 'Fan Coil', None, None, 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') elif equip == 'FCU_DCW_Boiler': model_add_hvac_system(os_model, 'Fan Coil ', 'NaturalGas', None, 'DistrictCooling', zones) elif equip == 'FCU_DCW_ASHP': model_add_hvac_system(os_model, 'Fan Coil', 'AirSourceHeatPump', None, 'DistrictCooling', zones) elif equip == 'FCU_DCW_DHW': model_add_hvac_system(os_model, 'Fan Coil', 'DistrictHeating', None, 'DistrictCooling', zones) elif equip == 'FCU_DCW_ElectricBaseboard': model_add_hvac_system(os_model, 'Fan Coil', None, None, 'DistrictCooling', zones) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'FCU_DCW_GasHeaters': model_add_hvac_system(os_model, 'Fan Coil', None, None, 'DistrictCooling', zones) model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'FCU_DCW': model_add_hvac_system(os_model, 'Fan Coil', None, None, 'DistrictCooling', zones) elif isinstance(hvac, Radiant): chilled_water_loop_cooling_type = 'WaterCooled' if equip == 'Radiant_Chiller_Boiler': main_heat_fuel, cool_fuel = 'NaturalGas', 'Electricity' elif equip == 'Radiant_Chiller_ASHP': main_heat_fuel, cool_fuel = 'AirSourceHeatPump', 'Electricity' elif equip == 'Radiant_Chiller_DHW': main_heat_fuel, cool_fuel = 'DistrictHeating', 'Electricity' elif equip == 'Radiant_ACChiller_Boiler': main_heat_fuel, cool_fuel = 'NaturalGas', 'Electricity' chilled_water_loop_cooling_type = 'AirCooled' elif equip == 'Radiant_ACChiller_ASHP': main_heat_fuel, cool_fuel = 'AirSourceHeatPump', 'Electricity' chilled_water_loop_cooling_type = 'AirCooled' elif equip == 'Radiant_ACChiller_DHW': main_heat_fuel, cool_fuel = 'DistrictHeating', 'Electricity' chilled_water_loop_cooling_type = 'AirCooled' elif equip == 'Radiant_DCW_Boiler': main_heat_fuel, cool_fuel = 'NaturalGas', 'DistrictCooling' elif equip == 'Radiant_DCW_ASHP': main_heat_fuel, cool_fuel = 'AirSourceHeatPump', 'DistrictCooling' elif equip == 'Radiant_DCW_DHW': main_heat_fuel, cool_fuel = 'DistrictHeating', 'DistrictCooling' hw_name = 'Low Temperature Hot Water Loop' if os_model.getPlantLoopByName(hw_name).is_initialized(): hot_water_loop = os_model.getPlantLoopByName(hw_name).get() else: hot_water_loop = model_add_hw_loop( os_model, main_heat_fuel, dsgn_sup_wtr_temp=120.0, boiler_draft_type='Condensing') hot_water_loop.setName(hw_name) chilled_water_loop = model_get_or_add_chilled_water_loop( os_model, cool_fuel, chilled_water_loop_cooling_type=chilled_water_loop_cooling_type) control_strategy, include_carpet = 'proportional_control', False radiant_temperature_control_type = 'SurfaceFaceTemperature' if hvac.radiant_type in ('CeilingMetalPanel', 'FloorWithHardwood'): control_strategy = 'none' radiant_temperature_control_type = 'OperativeTemperature' radiant_type = hvac.radiant_type.lower() if hvac.radiant_type == 'FloorWithCarpet': radiant_type, include_carpet = 'floor', True model_add_low_temp_radiant( os_model, zones, hot_water_loop, chilled_water_loop, radiant_type=radiant_type, include_carpet=include_carpet, control_strategy=control_strategy, radiant_temperature_control_type=radiant_temperature_control_type, radiant_availability_type='all_day') elif isinstance(hvac, ForcedAirFurnace): if equip == 'Furnace': # includes ventilation, whereas residential forced air furnace does not. model_add_hvac_system(os_model, 'Forced Air Furnace', 'NaturalGas', None, None, heated_zones) elif equip == 'Furnace_Electric': # includes ventilation, whereas residential forced air furnace does not. model_add_hvac_system(os_model, 'Forced Air Furnace', 'Electricity', None, None, heated_zones) elif isinstance(hvac, GasUnitHeater): if equip == 'GasHeaters': model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif isinstance(hvac, PTAC): if equip == 'PTAC_ElectricBaseboard': model_add_hvac_system(os_model, 'PTAC', None, None, 'Electricity', system_zones) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'PTAC_BoilerBaseboard': model_add_hvac_system(os_model, 'PTAC', None, None, 'Electricity', system_zones) model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_zones) elif equip == 'PTAC_DHWBaseboard': model_add_hvac_system(os_model, 'PTAC', None, None, 'Electricity', system_zones) model_add_hvac_system(os_model, 'Baseboards', 'DistrictHeating', None, None, heated_zones) elif equip == 'PTAC_GasHeaters': model_add_hvac_system(os_model, 'PTAC', None, None, 'Electricity', system_zones) model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'PTAC_ElectricCoil': model_add_hvac_system(os_model, 'PTAC', None, 'Electricity', 'Electricity', system_zones) # use 'Baseboard electric' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_only_zones) elif equip == 'PTAC_GasCoil': model_add_hvac_system(os_model, 'PTAC', None, 'NaturalGas', 'Electricity', system_zones) # use 'Baseboard electric' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_only_zones) elif equip == 'PTAC_Boiler': model_add_hvac_system(os_model, 'PTAC', 'NaturalGas', None, 'Electricity', system_zones) # use 'Baseboard gas boiler' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_only_zones) elif equip == 'PTAC_ASHP': model_add_hvac_system(os_model, 'PTAC', 'AirSourceHeatPump', None, 'Electricity', system_zones) # use 'Baseboard central air source heat pump' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'AirSourceHeatPump', None, None, heated_only_zones) elif equip == 'PTAC_DHW': model_add_hvac_system(os_model, 'PTAC', 'DistrictHeating', None, 'Electricity', system_zones) # use 'Baseboard district hot water heat' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'DistrictHeating', None, None, heated_only_zones) elif equip == 'PTAC': model_add_hvac_system(os_model, 'PTAC', None, None, 'Electricity', system_zones) elif equip == 'PTHP': model_add_hvac_system(os_model, 'PTHP', 'Electricity', None, 'Electricity', system_zones) # use 'Baseboard electric' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_only_zones) elif isinstance(hvac, PSZ): if equip == 'PSZAC_ElectricBaseboard': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, None, 'Electricity', system_zones) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'PSZAC_BoilerBaseboard': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, None, 'Electricity', system_zones) model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_zones) elif equip == 'PSZAC_DHWBaseboard': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, None, 'Electricity', system_zones) model_add_hvac_system(os_model, 'Baseboards', 'DistrictHeating', None, None, heated_zones) elif equip == 'PSZAC_GasHeaters': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, None, 'Electricity', system_zones) model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'PSZAC_ElectricCoil': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, 'Electricity', 'Electricity', system_zones) # use 'Baseboard electric' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_only_zones) elif equip == 'PSZAC_GasCoil': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, 'NaturalGas', 'Electricity', system_zones) # use 'Baseboard electric' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_only_zones) elif equip == 'PSZAC_Boiler': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', 'NaturalGas', None, 'Electricity', system_zones) # use 'Baseboard gas boiler' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_only_zones) elif equip == 'PSZAC_ASHP': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', 'AirSourceHeatPump', None, 'Electricity', system_zones) # use 'Baseboard central air source heat pump' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'AirSourceHeatPump', None, None, heated_only_zones) elif equip == 'PSZAC_DHW': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', 'DistrictHeating', None, 'Electricity', system_zones) # use 'Baseboard district hot water' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'DistrictHeating', None, None, heated_only_zones) elif equip == 'PSZAC': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, None, 'Electricity', cooled_zones) elif equip == 'PSZAC_DCW_ElectricBaseboard': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, None, 'DistrictCooling', system_zones) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'PSZAC_DCW_BoilerBaseboard': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, None, 'DistrictCooling', system_zones) model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_zones) elif equip == 'PSZAC_DCW_GasHeaters': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, None, 'DistrictCooling', system_zones) model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'PSZAC_DCW_ElectricCoil': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, 'Electricity', 'DistrictCooling', system_zones) # use 'Baseboard electric' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_only_zones) elif equip == 'PSZAC_DCW_GasCoil': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, 'NaturalGas', 'DistrictCooling', system_zones) # use 'Baseboard electric' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_only_zones) elif equip == 'PSZAC_DCW_Boiler': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', 'NaturalGas', None, 'DistrictCooling', system_zones) # use 'Baseboard gas boiler' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_only_zones) elif equip == 'PSZAC_DCW_ASHP': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', 'AirSourceHeatPump', None, 'DistrictCooling', system_zones) # use 'Baseboard central air source heat pump' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'AirSourceHeatPump', None, None, heated_only_zones) elif equip == 'PSZAC_DCW_DHW': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', 'DistrictHeating', None, 'DistrictCooling', system_zones) # use 'Baseboard district hot water' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'DistrictHeating', None, None, heated_only_zones) elif equip == 'PSZAC_DCW': air_loop = model_add_hvac_system(os_model, 'PSZ-AC', None, None, 'DistrictCooling', cooled_zones) elif equip == 'PSZHP': air_loop = model_add_hvac_system(os_model, 'PSZ-HP', 'Electricity', None, 'Electricity', system_zones) # use 'Baseboard electric' for heated only zones model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_only_zones) elif isinstance(hvac, PVAV): # PVAV systems by default use a DX coil for cooling if equip == 'PVAV_Boiler': air_loop = model_add_hvac_system(os_model, 'PVAV Reheat', 'NaturalGas', 'NaturalGas', 'Electricity', zones) elif equip == 'PVAV_ASHP': air_loop = model_add_hvac_system(os_model, 'PVAV Reheat', 'AirSourceHeatPump', 'AirSourceHeatPump', 'Electricity', zones) elif equip == 'PVAV_DHW': air_loop = model_add_hvac_system(os_model, 'PVAV Reheat', 'DistrictHeating', 'DistrictHeating', 'Electricity', zones) elif equip == 'PVAV_PFP': air_loop = model_add_hvac_system(os_model, 'PVAV PFP Boxes', 'Electricity', 'Electricity', 'Electricity', zones) elif equip == 'PVAV_BoilerElectricReheat': air_loop = model_add_hvac_system(os_model, 'PVAV Reheat', 'Gas', 'Electricity', 'Electricity', zones) elif isinstance(hvac, Residential): # all residential systems have no ventilation if equip == 'ResidentialAC_ElectricBaseboard': model_add_hvac_system(os_model, 'Residential AC', None, None, None, cooled_zones) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'ResidentialAC_BoilerBaseboard': model_add_hvac_system(os_model, 'Residential AC', None, None, None, cooled_zones) model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_zones) elif equip == 'ResidentialAC_ASHPBaseboard': model_add_hvac_system(os_model, 'Residential AC', None, None, None, cooled_zones) model_add_hvac_system(os_model, 'Baseboards', 'AirSourceHeatPump', None, None, heated_zones) elif equip == 'ResidentialAC_DHWBaseboard': model_add_hvac_system(os_model, 'Residential AC', None, None, None, cooled_zones) model_add_hvac_system(os_model, 'Baseboards', 'DistrictHeating', None, None, heated_zones) elif equip == 'ResidentialAC_ResidentialFurnace': model_add_hvac_system(os_model, 'Residential Forced Air Furnace with AC', None, None, None, zones) elif equip == 'ResidentialAC': model_add_hvac_system(os_model, 'Residential AC', None, None, None, cooled_zones) elif equip == 'ResidentialHP': model_add_hvac_system(os_model, 'Residential Air Source Heat Pump', 'Electricity', None, 'Electricity', zones) elif equip == 'ResidentialHPNoCool': model_add_hvac_system(os_model, 'Residential Air Source Heat Pump', 'Electricity', None, None, heated_zones) elif equip == 'ResidentialFurnace': model_add_hvac_system(os_model, 'Residential Forced Air Furnace', 'NaturalGas', None, None, zones) elif isinstance(hvac, VAV): if equip == 'VAV_Chiller_Boiler': air_loop = model_add_hvac_system(os_model, 'VAV Reheat', 'NaturalGas', 'NaturalGas', 'Electricity', zones) elif equip == 'VAV_Chiller_ASHP': air_loop = model_add_hvac_system(os_model, 'VAV Reheat', 'AirSourceHeatPump', 'AirSourceHeatPump', 'Electricity', zones) elif equip == 'VAV_Chiller_DHW': air_loop = model_add_hvac_system(os_model, 'VAV Reheat', 'DistrictHeating', 'DistrictHeating', 'Electricity', zones) elif equip == 'VAV_Chiller_PFP': air_loop = model_add_hvac_system(os_model, 'VAV PFP Boxes', 'NaturalGas', 'NaturalGas', 'Electricity', zones) elif equip == 'VAV_Chiller_GasCoil': air_loop = model_add_hvac_system(os_model, 'VAV Gas Reheat', 'NaturalGas', 'NaturalGas', 'Electricity', zones) elif equip == 'VAV_ACChiller_Boiler': air_loop = model_add_hvac_system(os_model, 'VAV Reheat', 'NaturalGas', 'NaturalGas', 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') elif equip == 'VAV_ACChiller_ASHP': air_loop = model_add_hvac_system(os_model, 'VAV Reheat', 'AirSourceHeatPump', 'AirSourceHeatPump', 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') elif equip == 'VAV_ACChiller_DHW': air_loop = model_add_hvac_system(os_model, 'VAV Reheat', 'DistrictHeating', 'DistrictHeating', 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') elif equip == 'VAV_ACChiller_PFP': air_loop = model_add_hvac_system(os_model, 'VAV PFP Boxes', 'NaturalGas', 'NaturalGas', 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') elif equip == 'VAV_ACChiller_GasCoil': air_loop = model_add_hvac_system(os_model, 'VAV Gas Reheat', 'NaturalGas', 'NaturalGas', 'Electricity', zones, chilled_water_loop_cooling_type='AirCooled') elif equip == 'VAV_DCW_Boiler': air_loop = model_add_hvac_system(os_model, 'VAV Reheat', 'NaturalGas', 'NaturalGas', 'DistrictCooling', zones) elif equip == 'VAV_DCW_ASHP': air_loop = model_add_hvac_system(os_model, 'VAV Reheat', 'AirSourceHeatPump', 'AirSourceHeatPump', 'DistrictCooling', zones) elif equip == 'VAV_DCW_DHW': air_loop = model_add_hvac_system(os_model, 'VAV Reheat', 'DistrictHeating', 'DistrictHeating', 'DistrictCooling', zones) elif equip == 'VAV_DCW_PFP': air_loop = model_add_hvac_system(os_model, 'VAV PFP Boxes', 'NaturalGas', 'NaturalGas', 'DistrictCooling', zones) elif equip == 'VAV_DCW_GasCoil': air_loop = model_add_hvac_system(os_model, 'VAV Gas Reheat', 'NaturalGas', 'NaturalGas', 'DistrictCooling', zones) elif isinstance(hvac, VRF): if equip == 'VRF': model_add_hvac_system(os_model, 'VRF', 'Electricity', None, 'Electricity', zones) elif isinstance(hvac, WSHP): if equip == 'WSHP_FluidCooler_Boiler': model_add_hvac_system(os_model, 'Water Source Heat Pumps', 'NaturalGas', None, 'Electricity', zones, heat_pump_loop_cooling_type='FluidCooler') elif equip == 'WSHP_CoolingTower_Boiler': model_add_hvac_system(os_model, 'Water Source Heat Pumps', 'NaturalGas', None, 'Electricity', zones, heat_pump_loop_cooling_type='CoolingTower') elif equip == 'WSHP_GSHP': model_add_hvac_system(os_model, 'Ground Source Heat Pumps', 'Electricity', None, 'Electricity', zones) elif equip == 'WSHP_DCW_DHW': model_add_hvac_system(os_model, 'Water Source Heat Pumps', 'DistrictHeating', None, 'DistrictCooling', zones) elif isinstance(hvac, WindowAC): if equip == 'WindowAC_ElectricBaseboard': model_add_hvac_system(os_model, 'Window AC', None, None, 'Electricity', cooled_zones) model_add_hvac_system(os_model, 'Baseboards', 'Electricity', None, None, heated_zones) elif equip == 'WindowAC_BoilerBaseboard': model_add_hvac_system(os_model, 'Window AC', None, None, 'Electricity', cooled_zones) model_add_hvac_system(os_model, 'Baseboards', 'NaturalGas', None, None, heated_zones) elif equip == 'WindowAC_ASHPBaseboard': model_add_hvac_system(os_model, 'Window AC', None, None, 'Electricity', cooled_zones) model_add_hvac_system(os_model, 'Baseboards', 'AirSourceHeatPump', None, None, heated_zones) elif equip == 'WindowAC_DHWBaseboard': model_add_hvac_system(os_model, 'Window AC', None, None, 'Electricity', cooled_zones) model_add_hvac_system(os_model, 'Baseboards', 'DistrictHeating', None, None, heated_zones) elif equip == 'WindowAC_Furnace': model_add_hvac_system(os_model, 'Window AC', None, None, 'Electricity', cooled_zones) model_add_hvac_system(os_model, 'Forced Air Furnace', 'NaturalGas', None, None, heated_zones) elif equip == 'WindowAC_GasHeaters': model_add_hvac_system(os_model, 'Window AC', None, None, 'Electricity', cooled_zones) model_add_hvac_system(os_model, 'Unit Heaters', 'NaturalGas', None, None, heated_zones) elif equip == 'WindowAC': model_add_hvac_system(os_model, 'Window AC', None, None, 'Electricity', cooled_zones) else: raise ValueError('HVAC system type "{}" not recognized'.format(equip)) # assign all of the properties associated with the air loop if air_loop is not None: # name the air loop with the name the user specified for the HVAC clean_hvac_name = clean_ep_string(hvac.display_name) if not isinstance(air_loop, list): air_loop.setName(clean_hvac_name) os_air_loops = [air_loop] else: os_air_loops = air_loop for i, loop in enumerate(os_air_loops): loop.setName('{} {}'.format(clean_hvac_name, i)) # have an always available schedule ready to use if there are no user controls always_avail_name = 'Building HVAC Always Available' opt_sch = os_model.getScheduleByName(always_avail_name) if opt_sch.is_initialized(): always_avail = opt_sch.get() else: always_avail = OSScheduleRuleset(os_model) always_avail.setName(always_avail_name) def_day_sch = always_avail.defaultDaySchedule() def_day_sch.addValue(OSTime(0, 24, 0, 0), 1) # assign the properties that are specific to All-Air systems if isinstance(hvac, _AllAirBase): for os_air_loop in os_air_loops: # set the loop to always be available os_air_loop.setAvailabilitySchedule(always_avail) # assign the economizer oasys = os_air_loop.airLoopHVACOutdoorAirSystem() if oasys.is_initialized(): os_oasys = oasys.get() oactrl = os_oasys.getControllerOutdoorAir() oactrl.setEconomizerControlType(hvac.economizer_type) # assign demand controlled ventilation if hvac.demand_controlled_ventilation: vent_ctrl = oactrl.controllerMechanicalVentilation() vent_ctrl.setDemandControlledVentilationNoFail(True) oactrl.resetMinimumFractionofOutdoorAirSchedule() # assign the properties that are specific to DOAS systems if isinstance(hvac, _DOASBase): avail_sch = None if hvac.doas_availability_schedule is not None: sch_id = hvac.doas_availability_schedule.identifier schedule = os_model.getScheduleByName(sch_id) if schedule.is_initialized(): avail_sch = schedule.get() avail_sch = always_avail if avail_sch is None else avail_sch for os_air_loop in os_air_loops: os_air_loop.setAvailabilitySchedule(avail_sch) # set the heat recovery if it is specified if hvac.sensible_heat_recovery != 0 or hvac.latent_heat_recovery != 0: for os_air_loop in os_air_loops: heat_ex = _get_or_add_heat_recovery(os_model, os_air_loop) # ratio of max to standard efficiency from OpenStudio Standards eff_sens = hvac.sensible_heat_recovery heat_ex.setSensibleEffectivenessat100CoolingAirFlow(eff_sens) heat_ex.setSensibleEffectivenessat100HeatingAirFlow(eff_sens) eff_lat = hvac.latent_heat_recovery heat_ex.setLatentEffectivenessat100CoolingAirFlow(eff_lat) heat_ex.setLatentEffectivenessat100HeatingAirFlow(eff_lat) if os_model.version() < openstudio.VersionString('3.8.0'): heat_ex.setSensibleEffectivenessat75CoolingAirFlow(eff_sens) heat_ex.setSensibleEffectivenessat75HeatingAirFlow(eff_sens) heat_ex.setLatentEffectivenessat75CoolingAirFlow(eff_lat) heat_ex.setLatentEffectivenessat75HeatingAirFlow(eff_lat) # assign electric humidifier if there's an air loop and zones have humidistat humidistat_exists = False for zone in zones: h_stat = zone.zoneControlHumidistat() if h_stat.is_initialized(): humidistat_exists = True if isinstance(hvac, _DOASBase): z_sizing = zone.sizingZone() z_sizing.setDedicatedOutdoorAirSystemControlStrategy( 'NeutralDehumidifiedSupplyAir') if humidistat_exists: for os_air_loop in os_air_loops: _add_humidifier(os_model, os_air_loop) # set the outdoor air controller to respect room-level ventilation schedules oa_sch, oa_sch_name, = None, None for i, zone in enumerate(zones): oa_spec = zone.spaces()[0].designSpecificationOutdoorAir() if oa_spec.is_initialized(): oa_spec = oa_spec.get() space_oa_sch = oa_spec.outdoorAirFlowRateFractionSchedule() if space_oa_sch.is_initialized(): space_oa_sch = space_oa_sch.get() space_oa_sch_name = space_oa_sch.nameString() if i == 0 or space_oa_sch_name == oa_sch_name: oa_sch, oa_sch_name = space_oa_sch, space_oa_sch_name else: # different schedules across zones; just use constant max oa_sch = None oa_sch = always_avail if oa_sch is None else oa_sch for os_air_loop in os_air_loops: oasys = os_air_loop.airLoopHVACOutdoorAirSystem() if oasys.is_initialized(): os_oasys = oasys.get() oactrl = os_oasys.getControllerOutdoorAir() oactrl.resetMinimumFractionofOutdoorAirSchedule() oactrl.setMinimumOutdoorAirSchedule(oa_sch) # if the systems are PTAC and there is ventilation, ensure the system includes it if isinstance(hvac, PTAC): always_on = os_model.alwaysOnDiscreteSchedule() for zone in zones: # check if the space type has ventilation assigned to it out_air = zone.spaces()[0].designSpecificationOutdoorAir() if out_air.is_initialized(): # get any ventilation schedules vent_sched = always_on out_air = out_air.get() air_sch = out_air.outdoorAirFlowRateFractionSchedule() if air_sch.is_initialized(): vent_sched = air_sch.get() # get the PTAC object ptac = None for equip in zone.equipment(): e_name = equip.nameString() if 'PTAC' in e_name: ptac = os_model.getZoneHVACPackagedTerminalAirConditioner( equip.handle()) elif 'PTHP' in e_name: ptac = os_model.getZoneHVACPackagedTerminalHeatPump( equip.handle()) # assign the schedule to the PTAC object if ptac is not None and ptac.is_initialized(): ptac = ptac.get() ptac.setSupplyAirFanOperatingModeSchedule(vent_sched)
def _get_or_add_heat_recovery(os_model, os_air_loop): """Get an existing heat exchanger in an air loop or add one if it does not exist.""" # get an existing heat energy recovery unit from an air loop for supply_comp in os_air_loop.oaComponents(): if supply_comp.to_HeatExchangerAirToAirSensibleAndLatent().is_initialized(): return supply_comp.to_HeatExchangerAirToAirSensibleAndLatent().get() # create a heat recovery unit with default zero efficiencies heat_ex = openstudio_model.HeatExchangerAirToAirSensibleAndLatent(os_model) heat_ex.setEconomizerLockout(False) heat_ex.setName('{}_Heat Recovery Unit'.format(os_air_loop.nameString())) # add the heat exchanger to the air loop outdoor_node = os_air_loop.reliefAirNode() if outdoor_node.is_initialized(): os_outdoor_node = outdoor_node.get() heat_ex.addToNode(os_outdoor_node) return heat_ex def _add_humidifier(os_model, os_air_loop): """Add a humidifier to an air loop so it can meet humidification setpoints.""" # create an electric humidifier humidifier = openstudio_model.HumidifierSteamElectric(os_model) humidifier.setName('{}_Humidifier Unit'.format(os_air_loop.nameString())) humid_control = openstudio_model.SetpointManagerMultiZoneHumidityMinimum(os_model) humid_control.setName('{}_Humidifier Controller'.format(os_air_loop.nameString())) # add the humidifier to the air loop supply_node = os_air_loop.supplyOutletNode() humidifier.addToNode(supply_node) humid_control.addToNode(supply_node) return humidifier