TEST_F(ModelFixture,SimulationControl_TemperatureConvergenceToleranceValue_Quantity) {
  Model model;

  SimulationControl simulationControl = model.getUniqueModelObject<SimulationControl>();

  Unit units = simulationControl.getTemperatureConvergenceToleranceValue(true).units(); // Get IP units.

  double value(0.3);
  Quantity testQ(value,units);
  EXPECT_TRUE(simulationControl.setTemperatureConvergenceToleranceValue(testQ));
  Quantity q = simulationControl.getTemperatureConvergenceToleranceValue(true);
  EXPECT_NEAR(value,q.value(),1.0E-8);
  EXPECT_EQ(units.standardString(),q.units().standardString());
}
Esempio n. 2
0
TEST_F(EnergyPlusFixture,ForwardTranslator_Building3)
{
  Model model;

  Building building = model.getUniqueModelObject<Building>();
  building.setName("Building");
  building.setNorthAxis(20);
  building.setNominalFloortoFloorHeight(5);

  Site site = model.getUniqueModelObject<Site>();
  site.setTerrain("Ocean");

  SimulationControl simulationControl = model.getUniqueModelObject<SimulationControl>();
  simulationControl.setLoadsConvergenceToleranceValue(0.2);
  simulationControl.setTemperatureConvergenceToleranceValue(0.2);
  simulationControl.setSolarDistribution("FullInteriorAndExteriorWithReflections");
  simulationControl.setMaximumNumberofWarmupDays(2);

  ForwardTranslator forwardTranslator;
  Workspace workspace = forwardTranslator.translateModel(model);

  ASSERT_EQ(1u, workspace.getObjectsByType(IddObjectType::Building).size());
  ASSERT_EQ(1u, workspace.getObjectsByType(IddObjectType::Site_Location).size());
  ASSERT_EQ(1u, workspace.getObjectsByType(IddObjectType::SimulationControl).size());

  WorkspaceObject object = workspace.getObjectsByType(IddObjectType::Building)[0];
  ASSERT_TRUE(object.getString(BuildingFields::Name));
  EXPECT_EQ("Building", object.getString(BuildingFields::Name).get());
  ASSERT_TRUE(object.getDouble(BuildingFields::NorthAxis));
  EXPECT_EQ(20, object.getDouble(BuildingFields::NorthAxis).get());
  ASSERT_TRUE(object.getString(BuildingFields::Terrain));
  EXPECT_EQ("Ocean", object.getString(BuildingFields::Terrain).get());
  ASSERT_TRUE(object.getDouble(BuildingFields::LoadsConvergenceToleranceValue));
  EXPECT_EQ(0.2, object.getDouble(BuildingFields::LoadsConvergenceToleranceValue).get());
  ASSERT_TRUE(object.getDouble(BuildingFields::TemperatureConvergenceToleranceValue));
  EXPECT_EQ(0.2, object.getDouble(BuildingFields::TemperatureConvergenceToleranceValue).get());
  ASSERT_TRUE(object.getString(BuildingFields::SolarDistribution));
  EXPECT_EQ("FullInteriorAndExteriorWithReflections", object.getString(BuildingFields::SolarDistribution).get());
  ASSERT_TRUE(object.getInt(BuildingFields::MaximumNumberofWarmupDays));
  EXPECT_EQ(2, object.getInt(BuildingFields::MaximumNumberofWarmupDays).get());
}
boost::optional<IdfObject> ForwardTranslator::translateSimulationControl( SimulationControl& modelObject )
{
  IdfObject simCon( openstudio::IddObjectType::SimulationControl );

  m_idfObjects.push_back(simCon);

  OptionalString s = modelObject.name();
  if( s )
  {
    simCon.setName(*s);
  }

  unsigned numSizingPeriods = modelObject.model().getModelObjects<SizingPeriod>().size();

  if( modelObject.doZoneSizingCalculation() )
  {
    simCon.setString(openstudio::SimulationControlFields::DoZoneSizingCalculation,"Yes");
  }
  else if( (numSizingPeriods > 0) && (modelObject.model().getConcreteModelObjects<ThermalZone>().size() > 0) )
  {
    simCon.setString(openstudio::SimulationControlFields::DoZoneSizingCalculation,"Yes");
  }
  else
  {
    simCon.setString(openstudio::SimulationControlFields::DoZoneSizingCalculation,"No");
  }

  if( modelObject.doSystemSizingCalculation() )
  {
    simCon.setString(openstudio::SimulationControlFields::DoSystemSizingCalculation,"Yes");
  }
  else if( (numSizingPeriods > 0) && (modelObject.model().getConcreteModelObjects<AirLoopHVAC>().size() > 0) )
  {
    simCon.setString(openstudio::SimulationControlFields::DoSystemSizingCalculation,"Yes");
  }
  else
  {
    simCon.setString(openstudio::SimulationControlFields::DoSystemSizingCalculation,"No");
  }

  if( modelObject.doPlantSizingCalculation() )
  {
    simCon.setString(openstudio::SimulationControlFields::DoPlantSizingCalculation,"Yes");
  }
  else if( (numSizingPeriods > 0) && (modelObject.model().getConcreteModelObjects<PlantLoop>().size() > 0) )
  {
    simCon.setString(openstudio::SimulationControlFields::DoPlantSizingCalculation,"Yes");
  }
  else
  {
    simCon.setString(openstudio::SimulationControlFields::DoPlantSizingCalculation,"No");
  }

  if( modelObject.runSimulationforSizingPeriods() )
  {
    simCon.setString(openstudio::SimulationControlFields::RunSimulationforSizingPeriods,"Yes");
  }
  else
  {
    simCon.setString(openstudio::SimulationControlFields::RunSimulationforSizingPeriods,"No");
  }

  // DLM: might want to check for weather file object?
  if( modelObject.runSimulationforWeatherFileRunPeriods() )
  {
    simCon.setString(openstudio::SimulationControlFields::RunSimulationforWeatherFileRunPeriods,"Yes");
  }
  else
  {
    simCon.setString(openstudio::SimulationControlFields::RunSimulationforWeatherFileRunPeriods,"No");
  }

  // other fields mapped to Building

  return boost::optional<IdfObject>(simCon);
}