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()); }
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); }