boost::optional<ZoneHVACComponent> FanOnOff_Impl::containingZoneHVACComponent() const { std::vector<ZoneHVACComponent> zoneHVACComponent = this->model().getModelObjects<ZoneHVACComponent>(); for( std::vector<ZoneHVACComponent>::iterator it = zoneHVACComponent.begin(); it < zoneHVACComponent.end(); ++it ) { switch(it->iddObject().type().value()) { case openstudio::IddObjectType::OS_ZoneHVAC_FourPipeFanCoil : { ZoneHVACFourPipeFanCoil component = it->cast<ZoneHVACFourPipeFanCoil>(); if (component.supplyAirFan().handle() == this->handle()) return *it; break; } case openstudio::IddObjectType::OS_ZoneHVAC_PackagedTerminalHeatPump : { ZoneHVACPackagedTerminalHeatPump component = it->cast<ZoneHVACPackagedTerminalHeatPump>(); if (component.supplyAirFan().handle() == this->handle()) return *it; break; } case openstudio::IddObjectType::OS_ZoneHVAC_PackagedTerminalAirConditioner : { ZoneHVACPackagedTerminalAirConditioner component = it->cast<ZoneHVACPackagedTerminalAirConditioner>(); if (component.supplyAirFan().handle() == this->handle()) return *it; break; } case openstudio::IddObjectType::OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlow : { ZoneHVACTerminalUnitVariableRefrigerantFlow component = it->cast<ZoneHVACTerminalUnitVariableRefrigerantFlow>(); if (component.supplyAirFan().handle() == this->handle()) return *it; break; } case openstudio::IddObjectType::OS_ZoneHVAC_WaterToAirHeatPump : { ZoneHVACWaterToAirHeatPump component = it->cast<ZoneHVACWaterToAirHeatPump>(); if (component.supplyAirFan().handle() == this->handle()) return *it; break; } default: { break; } } } return boost::none; }
boost::optional<IdfObject> ForwardTranslator::translateZoneHVACTerminalUnitVariableRefrigerantFlow( ZoneHVACTerminalUnitVariableRefrigerantFlow & modelObject ) { boost::optional<std::string> s; boost::optional<double> value; IdfObject idfObject(IddObjectType::ZoneHVAC_TerminalUnit_VariableRefrigerantFlow); m_idfObjects.push_back(idfObject); // Name s = modelObject.name(); if( s ) { idfObject.setName(*s); } // TerminalUnitAvailabilityschedule if( boost::optional<model::Schedule> schedule = modelObject.terminalUnitAvailabilityschedule() ) { if( boost::optional<IdfObject> _schedule = translateAndMapModelObject(schedule.get()) ) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::TerminalUnitAvailabilitySchedule,_schedule->name().get()); } } // SupplyAirFlowRateDuringCoolingOperation if( modelObject.isSupplyAirFlowRateDuringCoolingOperationAutosized() ) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::CoolingSupplyAirFlowRate,"Autosize"); } else if( (value = modelObject.supplyAirFlowRateDuringCoolingOperation()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::CoolingSupplyAirFlowRate,value.get()); } // SupplyAirFlowRateWhenNoCoolingisNeeded if( modelObject.isSupplyAirFlowRateWhenNoCoolingisNeededAutosized() ) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::NoCoolingSupplyAirFlowRate,"Autosize"); } else if( (value = modelObject.supplyAirFlowRateWhenNoCoolingisNeeded()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::NoCoolingSupplyAirFlowRate,value.get()); } // SupplyAirFlowRateDuringHeatingOperation if( modelObject.isSupplyAirFlowRateDuringHeatingOperationAutosized() ) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::HeatingSupplyAirFlowRate,"Autosize"); } else if( (value = modelObject.supplyAirFlowRateDuringHeatingOperation()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::HeatingSupplyAirFlowRate,value.get()); } // SupplyAirFlowRateWhenNoHeatingisNeeded if( modelObject.isSupplyAirFlowRateWhenNoHeatingisNeededAutosized() ) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::NoHeatingSupplyAirFlowRate,"Autosize"); } else if( (value = modelObject.supplyAirFlowRateWhenNoHeatingisNeeded()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::NoHeatingSupplyAirFlowRate,value.get()); } // OutdoorAirFlowRateDuringCoolingOperation if( modelObject.isOutdoorAirFlowRateDuringCoolingOperationAutosized() ) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::CoolingOutdoorAirFlowRate,"Autosize"); } else if( (value = modelObject.outdoorAirFlowRateDuringCoolingOperation()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::CoolingOutdoorAirFlowRate,value.get()); } // OutdoorAirFlowRateDuringHeatingOperation if( modelObject.isOutdoorAirFlowRateDuringHeatingOperationAutosized() ) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::HeatingOutdoorAirFlowRate,"Autosize"); } else if( (value = modelObject.outdoorAirFlowRateDuringHeatingOperation()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::HeatingOutdoorAirFlowRate,value.get()); } // OutdoorAirFlowRateWhenNoCoolingorHeatingisNeeded if( modelObject.isOutdoorAirFlowRateWhenNoCoolingorHeatingisNeededAutosized() ) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::NoLoadOutdoorAirFlowRate,"Autosize"); } else if( (value = modelObject.outdoorAirFlowRateWhenNoCoolingorHeatingisNeeded()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::NoLoadOutdoorAirFlowRate,value.get()); } // SupplyAirFanOperatingModeScheduleName if( boost::optional<model::Schedule> schedule = modelObject.supplyAirFanOperatingModeSchedule() ) { if( boost::optional<IdfObject> _schedule = translateAndMapModelObject(schedule.get()) ) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::SupplyAirFanOperatingModeScheduleName,_schedule->name().get()); } } // SupplyAirFanplacement idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::SupplyAirFanPlacement,"DrawThrough"); model::ModelObject fan = modelObject.supplyAirFan(); // Node Names std::string inletNodeName; std::string outletNodeName; std::string mixerOutletNodeName; std::string coolOutletNodeName; std::string heatOutletNodeName; std::string oaNodeName; if( boost::optional<model::Node> node = modelObject.inletNode() ) { inletNodeName = node->name().get(); } if( boost::optional<model::Node> node = modelObject.outletNode() ) { outletNodeName = node->name().get(); } mixerOutletNodeName = modelObject.name().get() + " Mixer Outlet Node"; coolOutletNodeName = modelObject.name().get() + " Cooling Coil Outlet Node"; heatOutletNodeName = modelObject.name().get() + " Heating Coil Outlet Node"; oaNodeName = modelObject.name().get() + " Outdoor Air Node"; // TerminalUnitAirInletNodeName idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::TerminalUnitAirInletNodeName,inletNodeName); // TerminalUnitAirOutletNodeName idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::TerminalUnitAirOutletNodeName,outletNodeName); if( boost::optional<IdfObject> _fan = translateAndMapModelObject(fan) ) { // SupplyAirFanObjectType idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::SupplyAirFanObjectType,_fan->iddObject().name()); // SupplyAirFanObjectName idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::SupplyAirFanObjectName,_fan->name().get()); if( fan.iddObject().type() == model::FanOnOff::iddObjectType() ) { _fan->setString(Fan_OnOffFields::AirInletNodeName,heatOutletNodeName); _fan->setString(Fan_OnOffFields::AirOutletNodeName,outletNodeName); } else if( fan.iddObject().type() == model::FanConstantVolume::iddObjectType() ) { _fan->setString(Fan_ConstantVolumeFields::AirInletNodeName,heatOutletNodeName); _fan->setString(Fan_ConstantVolumeFields::AirOutletNodeName,outletNodeName); } else { LOG(Error, "VRF named " << modelObject.name().get() << " uses an unsupported fan type."); } } // OutdoorAirMixer IdfObject _outdoorAirMixer(IddObjectType::OutdoorAir_Mixer); _outdoorAirMixer.setName(modelObject.name().get() + " OA Mixer"); m_idfObjects.push_back(_outdoorAirMixer); _outdoorAirMixer.setString(OutdoorAir_MixerFields::MixedAirNodeName,mixerOutletNodeName); _outdoorAirMixer.setString(OutdoorAir_MixerFields::ReturnAirStreamNodeName,inletNodeName); IdfObject _oaNodeList(openstudio::IddObjectType::OutdoorAir_NodeList); _oaNodeList.setString(0,oaNodeName); m_idfObjects.push_back(_oaNodeList); _outdoorAirMixer.setString(OutdoorAir_MixerFields::ReliefAirStreamNodeName,modelObject.name().get() + " Relief Node Name"); _outdoorAirMixer.setString(OutdoorAir_MixerFields::OutdoorAirStreamNodeName,oaNodeName); // OutsideAirMixerObjectType idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::OutsideAirMixerObjectType,_outdoorAirMixer.iddObject().name()); // OutsideAirMixerObjectName idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::OutsideAirMixerObjectName,_outdoorAirMixer.name().get()); model::ModelObject coolingCoil = modelObject.coolingCoil(); if( boost::optional<IdfObject> _coolingCoil = translateAndMapModelObject(coolingCoil) ) { // CoolingCoilObjectType idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::CoolingCoilObjectType,_coolingCoil->iddObject().name()); // CoolingCoilObjectName idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::CoolingCoilObjectName,_coolingCoil->name().get()); _coolingCoil->setString(Coil_Cooling_DX_VariableRefrigerantFlowFields::CoilAirInletNode,mixerOutletNodeName); _coolingCoil->setString(Coil_Cooling_DX_VariableRefrigerantFlowFields::CoilAirOutletNode,coolOutletNodeName); } model::ModelObject heatingCoil = modelObject.heatingCoil(); if( boost::optional<IdfObject> _heatingCoil = translateAndMapModelObject(heatingCoil) ) { // HeatingCoilObjectType idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::HeatingCoilObjectType,_heatingCoil->iddObject().name()); // HeatingCoilObjectName idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::HeatingCoilObjectName,_heatingCoil->name().get()); _heatingCoil->setString(Coil_Heating_DX_VariableRefrigerantFlowFields::CoilAirInletNode,coolOutletNodeName); _heatingCoil->setString(Coil_Heating_DX_VariableRefrigerantFlowFields::CoilAirOutletNode,heatOutletNodeName); } // ZoneTerminalUnitOnParasiticElectricEnergyUse if( (value = modelObject.zoneTerminalUnitOnParasiticElectricEnergyUse()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::ZoneTerminalUnitOnParasiticElectricEnergyUse,value.get()); } // ZoneTerminalUnitOffParasiticElectricEnergyUse if( (value = modelObject.zoneTerminalUnitOffParasiticElectricEnergyUse()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::ZoneTerminalUnitOffParasiticElectricEnergyUse,value.get()); } // RatedTotalHeatingCapacitySizingRatio if( (value = modelObject.ratedTotalHeatingCapacitySizingRatio()) ) { idfObject.setDouble(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::RatedTotalHeatingCapacitySizingRatio,value.get()); } return idfObject; }