bool SteamEquipment_Impl::isAbsolute() const {
    SteamEquipmentDefinition definition = steamEquipmentDefinition();
    if (definition.designLevel()) {
        return true;
    }
    return false;
}
bool SteamEquipment_Impl::hardSize() {
    OptionalSpace space = this->space();
    if (!space) {
        return false;
    }

    makeUnique();

    SteamEquipmentDefinition definition = steamEquipmentDefinition();
    for (LifeCycleCost cost : definition.lifeCycleCosts()) {
        cost.convertToCostPerEach();
    }

    if (definition.designLevel()) {
        return true;
    }
    if (OptionalDouble areaDensity = definition.wattsperSpaceFloorArea()) {
        return definition.setDesignLevel(*areaDensity * space->floorArea());
    }
    if (OptionalDouble peopleDensity = definition.wattsperPerson()) {
        return definition.setDesignLevel(*peopleDensity * space->numberOfPeople());
    }

    OS_ASSERT(false);
    return false;
}
boost::optional<IdfObject> ForwardTranslator::translateSteamEquipment(
    SteamEquipment& modelObject)
{
  IdfObject idfObject(openstudio::IddObjectType::SteamEquipment);
  m_idfObjects.push_back(idfObject);

  for (LifeCycleCost lifeCycleCost : modelObject.lifeCycleCosts()){
    translateAndMapModelObject(lifeCycleCost);
  }

  SteamEquipmentDefinition definition = modelObject.steamEquipmentDefinition();

  idfObject.setString(SteamEquipmentFields::Name, modelObject.name().get());

  boost::optional<Space> space = modelObject.space();
  boost::optional<SpaceType> spaceType = modelObject.spaceType();
  if (space){
    boost::optional<ThermalZone> thermalZone = space->thermalZone();
    if (thermalZone){
      idfObject.setString(SteamEquipmentFields::ZoneorZoneListName, thermalZone->name().get());
    }
  }else if(spaceType){
    idfObject.setString(SteamEquipmentFields::ZoneorZoneListName, spaceType->name().get());
  }

  boost::optional<Schedule> schedule = modelObject.schedule();
  if (schedule){
    idfObject.setString(SteamEquipmentFields::ScheduleName, schedule->name().get());
  }

  idfObject.setString(SteamEquipmentFields::DesignLevelCalculationMethod, definition.designLevelCalculationMethod());

  double multiplier = modelObject.multiplier();

  OptionalDouble d = definition.designLevel();
  if (d){
    idfObject.setDouble(SteamEquipmentFields::DesignLevel, (*d)*multiplier);
  }

  d = definition.wattsperSpaceFloorArea();
  if (d){
    idfObject.setDouble(SteamEquipmentFields::PowerperZoneFloorArea, (*d)*multiplier);
  }

  d = definition.wattsperPerson();
  if (d){
    idfObject.setDouble(SteamEquipmentFields::PowerperPerson, (*d)*multiplier);
  }

  if (!definition.isFractionLatentDefaulted()){
    idfObject.setDouble(SteamEquipmentFields::FractionLatent, definition.fractionLatent());
  }

  if (!definition.isFractionRadiantDefaulted()){
    idfObject.setDouble(SteamEquipmentFields::FractionRadiant, definition.fractionRadiant());
  }

  if (!definition.isFractionLostDefaulted()){
    idfObject.setDouble(SteamEquipmentFields::FractionLost, definition.fractionLost());
  }

  if (!modelObject.isEndUseSubcategoryDefaulted()){
    idfObject.setString(SteamEquipmentFields::EndUseSubcategory, modelObject.endUseSubcategory());
  }

  return idfObject;
}