Ejemplo n.º 1
0
 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;
}