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);
}
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::translateThermalStorageChilledWaterStratified( ThermalStorageChilledWaterStratified & modelObject )
{
  boost::optional<std::string> s;
  boost::optional<double> value;
  boost::optional<Schedule> schedule;

  // Name
  IdfObject idfObject = createRegisterAndNameIdfObject(openstudio::IddObjectType::ThermalStorage_ChilledWater_Stratified, modelObject);

  // Tank Volume
  value = modelObject.tankVolume();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::TankVolume, value.get());
  }

  // Tank Height
  value = modelObject.tankHeight();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::TankHeight, value.get());
  }

  // Tank Shape
  s = modelObject.tankShape();
  if( s )
  {
    idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::TankShape, s.get());
  }

  // Tank Perimeter
  value = modelObject.tankPerimeter();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::TankPerimeter, value.get());
  }

  // SetpointTemperatureScheduleName
  schedule = modelObject.setpointTemperatureSchedule();
  if( schedule )
  {
    auto _schedule = translateAndMapModelObject(schedule.get());

    if( _schedule )
    {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::SetpointTemperatureScheduleName,_schedule->name().get());
    }
  }

  // DeadbandTemperatureDifference
  value = modelObject.deadbandTemperatureDifference();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::DeadbandTemperatureDifference, value.get());
  }

  // TemperatureSensorHeight
  value = modelObject.temperatureSensorHeight();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::TemperatureSensorHeight, value.get());
  }

  // Minimum Temperature Limit
  value = modelObject.minimumTemperatureLimit();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::MinimumTemperatureLimit, value.get());
  }

  // NominalCoolingCapacity
  value = modelObject.nominalCoolingCapacity();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::NominalCoolingCapacity, value.get());
  }

  // Ambient Temperature Indicator
  s = modelObject.ambientTemperatureIndicator();
  if( s )
  {
    if( istringEqual(s.get(),"ThermalZone") )
    {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::AmbientTemperatureIndicator,"Zone");
    }
    else
    {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::AmbientTemperatureIndicator,s.get());
    }
  }

  // Ambient Temperature Schedule Name
  schedule = modelObject.ambientTemperatureSchedule();
  if( schedule )
  {
    auto _schedule = translateAndMapModelObject(schedule.get());

    if( _schedule )
    {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::AmbientTemperatureScheduleName,_schedule->name().get());
    }
  }

  // Ambient Temperature Zone Name
  if( auto zone = modelObject.ambientTemperatureThermalZone() )
  {
    auto _zone = translateAndMapModelObject(zone.get());

    if( _zone )
    {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::AmbientTemperatureZoneName,_zone->name().get());
    }
  }

  // Ambient Temperature Outdoor Air Node Name
  s = modelObject.ambientTemperatureOutdoorAirNodeName();
  if( s && (! s->empty()) )
  {
    idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::AmbientTemperatureOutdoorAirNodeName,s.get());
  } else if( istringEqual(modelObject.ambientTemperatureIndicator(),"Outdoors") ) {
    auto name = modelObject.name().get() + " OA Node";
    IdfObject oaNodeListIdf(openstudio::IddObjectType::OutdoorAir_NodeList);
    oaNodeListIdf.setString(0,name);
    m_idfObjects.push_back(oaNodeListIdf);

    idfObject.setString(openstudio::ThermalStorage_ChilledWater_StratifiedFields::AmbientTemperatureOutdoorAirNodeName, name);
  }

  // Uniform Skin Loss Coefficient per Unit Area to Ambient Temperature
  value = modelObject.uniformSkinLossCoefficientperUnitAreatoAmbientTemperature();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::UniformSkinLossCoefficientperUnitAreatoAmbientTemperature, value.get());
  }

  // Use Side Inlet Node Name
  if( auto mo = modelObject.supplyInletModelObject() )
  {
    if( auto node = mo->optionalCast<Node>() )
    {
      translateAndMapModelObject(node.get());

      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::UseSideInletNodeName,node->name().get());
    }
  }

  // Use Side Outlet Node Name
  if( auto mo = modelObject.supplyOutletModelObject() )
  {
    if( auto node = mo->optionalCast<Node>() )
    {
      translateAndMapModelObject(node.get());

      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::UseSideOutletNodeName,node->name().get());
    }
  }

  // UseSideHeatTransferEffectiveness
  value = modelObject.useSideHeatTransferEffectiveness();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::UseSideHeatTransferEffectiveness,value.get());
  }

  // UseSideAvailabilityScheduleName
  if( (schedule = modelObject.useSideAvailabilitySchedule()) )
  {
    auto _schedule = translateAndMapModelObject(schedule.get());

    if( _schedule )
    {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::UseSideAvailabilityScheduleName, _schedule->name().get());
    }
  }

  // Use Side Outlet Height
  value = modelObject.useSideOutletHeight();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::UseSideOutletHeight,value.get());
  }

  // Use Side Inlet Height
  if( modelObject.isUseSideInletHeightAutocalculated() )
  {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::UseSideInletHeight, "Autocalculate");
  }
  else
  {
    value = modelObject.useSideInletHeight();

    if( value )
    {
      idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::UseSideInletHeight, value.get());
    }
  }

  // Use Side Design Flow Rate
  if( modelObject.isUseSideDesignFlowRateAutosized() )
  {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::UseSideDesignFlowRate,"Autosize");
  }
  else
  {
    value = modelObject.useSideDesignFlowRate();

    if( value )
    {
      idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::UseSideDesignFlowRate,value.get());
    }
  }

  // Source Side Inlet Node Name
  if( auto mo = modelObject.demandInletModelObject() )
  {
    if( auto node = mo->optionalCast<Node>() )
    {
      translateAndMapModelObject(node.get());

      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::SourceSideInletNodeName,node->name().get());
    }
  }

  // Source Side Outlet Node Name
  if( auto mo = modelObject.demandOutletModelObject() )
  {
    if( auto node = mo->optionalCast<Node>() )
    {
      translateAndMapModelObject(node.get());

      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::SourceSideOutletNodeName,node->name().get());
    }
  }

  // SourceSideHeatTransferEffectiveness
  value = modelObject.sourceSideHeatTransferEffectiveness();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::SourceSideHeatTransferEffectiveness,value.get());
  }

  // SourceSideAvailabilityScheduleName
  if( (schedule = modelObject.sourceSideAvailabilitySchedule()) )
  {
    auto _schedule = translateAndMapModelObject(schedule.get());

    if( _schedule )
    {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::SourceSideAvailabilityScheduleName, _schedule->name().get());
    }
  }

  // Source Side Outlet Height
  if( modelObject.isSourceSideOutletHeightAutocalculated() )
  {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::SourceSideOutletHeight, "Autocalculate");
  }
  else
  {
    value = modelObject.sourceSideOutletHeight();

    if( value )
    {
      idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::SourceSideOutletHeight, value.get());
    }
  }

  // Source Side Inlet Height
  value = modelObject.sourceSideInletHeight();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::SourceSideInletHeight,value.get());
  }

  // Source Side Design Flow Rate
  if( modelObject.isSourceSideDesignFlowRateAutosized() )
  {
      idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::SourceSideDesignFlowRate,"Autosize");
  }
  else
  {
    value = modelObject.sourceSideDesignFlowRate();

    if( value )
    {
      idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::SourceSideDesignFlowRate,value.get());
    }
  }

  // TankRecoveryTime
  value = modelObject.tankRecoveryTime();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::TankRecoveryTime,value.get());
  }

  // Inlet Mode
  s = modelObject.inletMode();
  if( s )
  {
    idfObject.setString(ThermalStorage_ChilledWater_StratifiedFields::InletMode, s.get());
  }

  // Number of Nodes
  auto num_nodes = modelObject.numberofNodes();
  if( num_nodes )
  {
    idfObject.setInt(ThermalStorage_ChilledWater_StratifiedFields::NumberofNodes,value.get());
  }

  // Additional Destratification Conductivity
  value = modelObject.additionalDestratificationConductivity();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::AdditionalDestratificationConductivity,value.get());
  }

  // Node 1 Additional Loss Coefficient
  value = modelObject.node1AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node1AdditionalLossCoefficient,value.get());
  }

  // Node 2 Additional Loss Coefficient
  value = modelObject.node2AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node2AdditionalLossCoefficient,value.get());
  }

  // Node 3 Additional Loss Coefficient
  value = modelObject.node3AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node3AdditionalLossCoefficient,value.get());
  }

  // Node 4 Additional Loss Coefficient
  value = modelObject.node4AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node4AdditionalLossCoefficient,value.get());
  }

  // Node 5 Additional Loss Coefficient
  value = modelObject.node5AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node5AdditionalLossCoefficient,value.get());
  }

  // Node 6 Additional Loss Coefficient
  value = modelObject.node6AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node6AdditionalLossCoefficient,value.get());
  }

  // Node 7 Additional Loss Coefficient
  value = modelObject.node7AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node7AdditionalLossCoefficient,value.get());
  }

  // Node 8 Additional Loss Coefficient
  value = modelObject.node8AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node8AdditionalLossCoefficient,value.get());
  }

  // Node 9 Additional Loss Coefficient
  value = modelObject.node9AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node9AdditionalLossCoefficient,value.get());
  }

  // Node 10 Additional Loss Coefficient
  value = modelObject.node10AdditionalLossCoefficient();
  if( value )
  {
    idfObject.setDouble(ThermalStorage_ChilledWater_StratifiedFields::Node10AdditionalLossCoefficient,value.get());
  }

  return idfObject;
}