boost::optional<IdfObject> ForwardTranslator::translateAirLoopHVACOutdoorAirSystem( AirLoopHVACOutdoorAirSystem & modelObject ) { OptionalString s; IdfObject idfObject(IddObjectType::AirLoopHVAC_OutdoorAirSystem); m_idfObjects.push_back(idfObject); // Name std::string name = modelObject.name().get(); idfObject.setString(openstudio::AirLoopHVAC_OutdoorAirSystemFields::Name,name); // Controller List IdfObject _controllerList(IddObjectType::AirLoopHVAC_ControllerList); _controllerList.setName(name + " Controller List"); _controllerList.clearExtensibleGroups(); m_idfObjects.push_back(_controllerList); ControllerOutdoorAir controllerOutdoorAir = modelObject.getControllerOutdoorAir(); boost::optional<IdfObject> _controllerOutdoorAir = translateAndMapModelObject(controllerOutdoorAir); OS_ASSERT(_controllerOutdoorAir); idfObject.setString(openstudio::AirLoopHVAC_OutdoorAirSystemFields::ControllerListName,_controllerList.name().get()); IdfExtensibleGroup eg = _controllerList.pushExtensibleGroup(); eg.setString(AirLoopHVAC_ControllerListExtensibleFields::ControllerObjectType,_controllerOutdoorAir->iddObject().name()); eg.setString(AirLoopHVAC_ControllerListExtensibleFields::ControllerName,_controllerOutdoorAir->name().get()); std::vector<ModelObject> controllers; auto components = modelObject.components(); for( const auto & component : components ) { boost::optional<ControllerWaterCoil> controller; if( auto coil = component.optionalCast<CoilCoolingWater>() ) { controller = coil->controllerWaterCoil(); } else if ( auto coil = component.optionalCast<CoilHeatingWater>() ) { controller = coil->controllerWaterCoil(); } if( controller ) { controllers.push_back(controller.get()); } } for( auto & controller: controllers ) { auto _controller = translateAndMapModelObject(controller); if( _controller ) { IdfExtensibleGroup eg = _controllerList.pushExtensibleGroup(); eg.setString(AirLoopHVAC_ControllerListExtensibleFields::ControllerObjectType,_controller->iddObject().name()); eg.setString(AirLoopHVAC_ControllerListExtensibleFields::ControllerName,_controller->name().get()); } } // Field: Availability Manager List Name ////////////////////////////////// IdfObject availabilityManagerListIdf(IddObjectType::AvailabilityManagerAssignmentList); availabilityManagerListIdf.setName(name + " Availability Manager List"); m_idfObjects.push_back(availabilityManagerListIdf); IdfObject availabilityManagerScheduledIdf = IdfObject(openstudio::IddObjectType::AvailabilityManager_Scheduled); availabilityManagerScheduledIdf.setName(name + " Availability Manager"); m_idfObjects.push_back(availabilityManagerScheduledIdf); Schedule alwaysOn = modelObject.model().alwaysOnDiscreteSchedule(); IdfObject alwaysOnIdf = translateAndMapModelObject(alwaysOn).get(); s = availabilityManagerListIdf.getString(openstudio::AvailabilityManagerAssignmentListFields::Name); if(s) { idfObject.setString(openstudio::AirLoopHVAC_OutdoorAirSystemFields::AvailabilityManagerListName,*s); } availabilityManagerListIdf.setString(1 + openstudio::AvailabilityManagerAssignmentListExtensibleFields::AvailabilityManagerObjectType, availabilityManagerScheduledIdf.iddObject().name()); availabilityManagerListIdf.setString(1 + openstudio::AvailabilityManagerAssignmentListExtensibleFields::AvailabilityManagerName, availabilityManagerScheduledIdf.name().get()); availabilityManagerScheduledIdf.setString(openstudio::AvailabilityManager_ScheduledFields::ScheduleName,alwaysOnIdf.name().get()); // OA Node List s = modelObject.outboardOANode()->name(); IdfObject oaNodeListIdf(openstudio::IddObjectType::OutdoorAir_NodeList); if(s) { oaNodeListIdf.setString(0,*s); } m_idfObjects.push_back(oaNodeListIdf); /////////////////////////////////////////////////////////////////////////// // Field: Outdoor Air Equipment List Name ///////////////////////////////// IdfObject equipmentListIdf(IddObjectType::AirLoopHVAC_OutdoorAirSystem_EquipmentList); equipmentListIdf.setName(name + " Equipment List"); m_idfObjects.push_back(equipmentListIdf); IdfObject outdoorAirMixerIdf(IddObjectType::OutdoorAir_Mixer); outdoorAirMixerIdf.setName(name + " Outdoor Air Mixer"); m_idfObjects.push_back(outdoorAirMixerIdf); s = modelObject.mixedAirModelObject()->name(); if(s) { outdoorAirMixerIdf.setString(OutdoorAir_MixerFields::MixedAirNodeName,*s); } s = modelObject.outdoorAirModelObject()->name(); if(s) { outdoorAirMixerIdf.setString(OutdoorAir_MixerFields::OutdoorAirStreamNodeName,*s); } s = modelObject.reliefAirModelObject()->name(); if(s) { outdoorAirMixerIdf.setString(OutdoorAir_MixerFields::ReliefAirStreamNodeName,*s); } s = modelObject.returnAirModelObject()->name(); if(s) { outdoorAirMixerIdf.setString(OutdoorAir_MixerFields::ReturnAirStreamNodeName,*s); } s = outdoorAirMixerIdf.iddObject().name(); equipmentListIdf.setString(1,*s); s = outdoorAirMixerIdf.name(); equipmentListIdf.setString(2,*s); unsigned i = 3; ModelObjectVector oaModelObjects = modelObject.oaComponents(); for( ModelObjectVector::iterator oaIt = oaModelObjects.begin(); oaIt != oaModelObjects.end(); ++oaIt ) { if( ! oaIt->optionalCast<Node>() ) { if( boost::optional<IdfObject> idfObject = translateAndMapModelObject(*oaIt) ) { equipmentListIdf.setString(i,idfObject->iddObject().name()); i++; equipmentListIdf.setString(i,idfObject->name().get()); i++; } } } ModelObjectVector reliefModelObjects = modelObject.reliefComponents(); for( ModelObjectVector::iterator reliefIt = reliefModelObjects.begin(); reliefIt != reliefModelObjects.end(); ++reliefIt ) { if( (! reliefIt->optionalCast<Node>()) && (! reliefIt->optionalCast<AirToAirComponent>()) ) { if( boost::optional<IdfObject> idfObject = translateAndMapModelObject(*reliefIt) ) { equipmentListIdf.setString(i,idfObject->iddObject().name()); i++; equipmentListIdf.setString(i,idfObject->name().get()); i++; } } } s = equipmentListIdf.name(); if(s) { idfObject.setString(openstudio::AirLoopHVAC_OutdoorAirSystemFields::OutdoorAirEquipmentListName,*s); } return boost::optional<IdfObject>(idfObject); }
boost::optional<IdfObject> ForwardTranslator::translateAirLoopHVACOutdoorAirSystem( AirLoopHVACOutdoorAirSystem & modelObject ) { OptionalString s; IdfObject idfObject(IddObjectType::AirLoopHVAC_OutdoorAirSystem); m_idfObjects.push_back(idfObject); // Name std::string name = modelObject.name().get(); idfObject.setString(openstudio::AirLoopHVAC_OutdoorAirSystemFields::Name,name); // Controller List IdfObject controllerListIdf(IddObjectType::AirLoopHVAC_ControllerList); controllerListIdf.setName(name + " Controller List"); controllerListIdf.clearExtensibleGroups(); m_idfObjects.push_back(controllerListIdf); ControllerOutdoorAir controllerOutdoorAir = modelObject.getControllerOutdoorAir(); boost::optional<IdfObject> temp = translateAndMapModelObject(controllerOutdoorAir); s = controllerListIdf.name(); if(s) { idfObject.setString(openstudio::AirLoopHVAC_OutdoorAirSystemFields::ControllerListName,*s); } s = temp->iddObject().name(); StringVector groupFields(2u); bool addGroup(false); if(s) { groupFields[0] = *s; addGroup = true; } s = temp->name(); if(s) { groupFields[1] = *s; addGroup = true; } if (addGroup) { IdfExtensibleGroup eg = controllerListIdf.pushExtensibleGroup(groupFields); OS_ASSERT(!eg.empty()); } // Field: Availability Manager List Name ////////////////////////////////// IdfObject availabilityManagerListIdf(IddObjectType::AvailabilityManagerAssignmentList); availabilityManagerListIdf.setName(name + " Availability Manager"); m_idfObjects.push_back(availabilityManagerListIdf); IdfObject availabilityManagerScheduledIdf = IdfObject(openstudio::IddObjectType::AvailabilityManager_Scheduled); availabilityManagerScheduledIdf.createName(); m_idfObjects.push_back(availabilityManagerScheduledIdf); Schedule alwaysOn = modelObject.model().alwaysOnDiscreteSchedule(); IdfObject alwaysOnIdf = translateAndMapModelObject(alwaysOn).get(); s = availabilityManagerListIdf.getString(openstudio::AvailabilityManagerAssignmentListFields::Name); if(s) { idfObject.setString(openstudio::AirLoopHVAC_OutdoorAirSystemFields::AvailabilityManagerListName,*s); } availabilityManagerListIdf.setString(1 + openstudio::AvailabilityManagerAssignmentListExtensibleFields::AvailabilityManagerObjectType, availabilityManagerScheduledIdf.iddObject().name()); availabilityManagerListIdf.setString(1 + openstudio::AvailabilityManagerAssignmentListExtensibleFields::AvailabilityManagerName, availabilityManagerScheduledIdf.name().get()); availabilityManagerScheduledIdf.setString(openstudio::AvailabilityManager_ScheduledFields::ScheduleName,alwaysOnIdf.name().get()); // OA Node List s = modelObject.outboardOANode()->name(); IdfObject oaNodeListIdf(openstudio::IddObjectType::OutdoorAir_NodeList); if(s) { oaNodeListIdf.setString(0,*s); } m_idfObjects.push_back(oaNodeListIdf); /////////////////////////////////////////////////////////////////////////// // Field: Outdoor Air Equipment List Name ///////////////////////////////// IdfObject equipmentListIdf(IddObjectType::AirLoopHVAC_OutdoorAirSystem_EquipmentList); equipmentListIdf.setName(name + " Equipment List"); m_idfObjects.push_back(equipmentListIdf); IdfObject outdoorAirMixerIdf(IddObjectType::OutdoorAir_Mixer); outdoorAirMixerIdf.setName(name + " Outdoor Air Mixer"); m_idfObjects.push_back(outdoorAirMixerIdf); s = modelObject.mixedAirModelObject()->name(); if(s) { outdoorAirMixerIdf.setString(OutdoorAir_MixerFields::MixedAirNodeName,*s); } s = modelObject.outdoorAirModelObject()->name(); if(s) { outdoorAirMixerIdf.setString(OutdoorAir_MixerFields::OutdoorAirStreamNodeName,*s); } s = modelObject.reliefAirModelObject()->name(); if(s) { outdoorAirMixerIdf.setString(OutdoorAir_MixerFields::ReliefAirStreamNodeName,*s); } s = modelObject.returnAirModelObject()->name(); if(s) { outdoorAirMixerIdf.setString(OutdoorAir_MixerFields::ReturnAirStreamNodeName,*s); } s = outdoorAirMixerIdf.iddObject().name(); equipmentListIdf.setString(1,*s); s = outdoorAirMixerIdf.name(); equipmentListIdf.setString(2,*s); ModelObjectVector oaModelObjects = modelObject.oaComponents(); ModelObjectVector::iterator oaIt; unsigned i = 3; for( oaIt = oaModelObjects.begin(); oaIt != oaModelObjects.end(); ++oaIt ) { if( ! oaIt->optionalCast<Node>() ) { s = stripOS2(oaIt->iddObject().name()); if(s) equipmentListIdf.setString(i,*s); i++; s = oaIt->name(); if(s) equipmentListIdf.setString(i,*s); i++; } } s = equipmentListIdf.name(); if(s) { idfObject.setString(openstudio::AirLoopHVAC_OutdoorAirSystemFields::OutdoorAirEquipmentListName,*s); } for( oaIt = oaModelObjects.begin(); oaIt != oaModelObjects.end(); ++oaIt ) { translateAndMapModelObject(*oaIt); } return boost::optional<IdfObject>(idfObject); }