//-----------------------------------------------------------------------
//
// Copyright (c) 2011 Deltares. All rights reserved.
//
// B.S.T.I.M. The
// tom.the@deltares.nl
// 03-02-2011
// n.a.
//-----------------------------------------------------------------------
using Deltares.Dam.TestHelper;
using Deltares.Geotechnics.TestUtils;
using Deltares.Standard.TestUtils;
namespace Deltares.Dam.Tests
{
using System.IO;
using System.Collections.Generic;
using Deltares.Dam.Data;
using NUnit.Framework;
[TestFixture]
public class DamProjectCalculatorTest
{
[Test]
//[Ignore("Hangs on Teamcity")]
[Category(Categories.Slow)]
public void SingleDamCalculationWithStablityReturnsCorrectSafetyFactor()
{
// Define dike data
using (DamProjectData damProjectData = CreateDamProjectData())
{
DamProjectCalculator damProjectCalculator = CreateDamProjectCalculator(damProjectData);
DamProjectCalculationSpecification.SelectedAnalysisType = AnalysisType.NoAdaption;
var calculationScenarios = new List();
// Define scenarios
using (var location = new Location())
using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1())
{
Scenario calculationScenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line);
calculationScenario.DikeTableHeight = 5;
calculationScenario.RiverLevel = 3;
calculationScenario.WaterHeightDecimeringsHoogte = 0.75;
calculationScenario.MaxWaterLevel = 10;
calculationScenario.Location = damProjectData.WaterBoard.Dikes[0].Locations[0];
calculationScenario.Location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope = 1.0;
calculationScenario.Location.ModelFactors.UpliftCriterionStability = 1.0;
calculationScenarios.Add(calculationScenario);
List> allCalculationresults = damProjectCalculator.Calculate(damProjectData,
calculationScenarios);
// The expected value is read from the dumpfile itself
double expectedValue = 1.461;
Assert.AreEqual(expectedValue, allCalculationresults[0][0].StabilitySafetyFactor.Value, 0.001);
}
}
}
[Test]
[Ignore("Design to be finalized")]
public void SingleDesign()
{
// Define dike data
using (DamProjectData damProjectData = CreateDamProjectData())
{
DamProjectCalculator damProjectCalculator = CreateDamProjectCalculator(damProjectData);
DamProjectCalculationSpecification.SelectedAnalysisType = AnalysisType.AdaptGeometry;
var calculationScenarios = new List();
// Define scenarios
using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1())
using (var location = new Location())
{
Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location, line);
scenario.DikeTableHeight = 5.5;
scenario.RiverLevel = 3;
scenario.WaterHeightDecimeringsHoogte = 0.75;
scenario.MaxWaterLevel = 10;
scenario.Location = damProjectData.WaterBoard.Dikes[0].Locations[0];
scenario.Location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope = 1.5;
scenario.Location.ModelFactors.UpliftCriterionStability = 1.0;
calculationScenarios.Add(scenario);
List> allCalculationresults = damProjectCalculator.Calculate(damProjectData, calculationScenarios);
// The expected value is read from the dumpfile itself
double expectedValue = 1.575;
Assert.AreEqual(expectedValue, allCalculationresults[0][0].StabilitySafetyFactor.Value, 0.001);
}
}
}
[Test]
[Ignore("Design to be finalized")]
public void MultipleDesign()
{
// Define dike data
using (DamProjectData damProjectData = CreateDamProjectData())
{
DamProjectCalculator damProjectCalculator = CreateDamProjectCalculator(damProjectData);
DamProjectCalculationSpecification.SelectedAnalysisType = AnalysisType.AdaptGeometry;
var calculationScenarios = new List();
// Define scenarios
using (var line = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1())
using (var line2 = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1())
using (var location1 = new Location())
using (var location2 = new Location())
{
Scenario scenario = FactoryForStabilityTests.CreateScenarioForLocation(location1, line);
scenario.DikeTableHeight = 5;
scenario.RiverLevel = 3;
scenario.WaterHeightDecimeringsHoogte = 0.75;
scenario.MaxWaterLevel = 10;
scenario.Location = damProjectData.WaterBoard.Dikes[0].Locations[0];
scenario.Location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope = 1.5;
scenario.Location.ModelFactors.UpliftCriterionStability = 1.0;
calculationScenarios.Add(scenario);
// Define scenarios
Scenario scenario2 = FactoryForStabilityTests.CreateScenarioForLocation(location2, line2);
scenario2.DikeTableHeight = 6;
scenario2.RiverLevel = 4;
scenario2.WaterHeightDecimeringsHoogte = 0.65;
scenario2.MaxWaterLevel = 13;
scenario2.Location = damProjectData.WaterBoard.Dikes[0].Locations[0];
scenario2.Location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope = 1.5;
scenario2.Location.ModelFactors.UpliftCriterionStability = 1.0;
calculationScenarios.Add(scenario2);
List> allCalculationresults = damProjectCalculator.Calculate(damProjectData, calculationScenarios);
// The expected value is read from the dumpfile itself
double expectedValueScenario1 = 1.630;
Assert.AreEqual(expectedValueScenario1, allCalculationresults[0][0].StabilitySafetyFactor.Value, 0.001);
double expectedValueScenario2 = 1.554;
Assert.AreEqual(expectedValueScenario2, allCalculationresults[1][0].StabilitySafetyFactor.Value, 0.001);
}
}
}
private DamProjectData CreateDamProjectData()
{
var damProjectData = new DamProjectData();
damProjectData.WaterBoard.Dikes.Add(FactoryForStabilityTests.CreateDike());
MStabParameters mstabParameters = FactoryForStabilityTests.CreateMStabParameters();
DamProject.ProjectWorkingPathLocation = ProjectPathLocation.InUserMap;
DamProject.UserWorkingPath = Path.GetFullPath("DamCalculation");
var damCalculationSpecification = new DamFailureMechanismeCalculationSpecification()
{
FailureMechanismSystemType = FailureMechanismSystemType.StabilityInside,
FailureMechanismeParamatersMStab = new FailureMechanismeParamatersMStab()
{
MStabParameters = mstabParameters
}
};
DamProjectCalculationSpecification.SelectedAnalysisType = AnalysisType.NoAdaption;
damProjectData.DamProjectCalculationSpecification.SelectedProbabilisticType = ProbabilisticType.Deterministic;
damProjectData.DamProjectCalculationSpecification.DamCalculationSpecifications.Add(damCalculationSpecification);
return damProjectData;
}
private DamProjectCalculator CreateDamProjectCalculator(DamProjectData damProjectData)
{
const string cmstabProgramPath = ".\\DGeoStability.exe";
var damProjectCalculator = new DamProjectCalculator(damProjectData);
damProjectCalculator.MStabProgramPath = cmstabProgramPath;
damProjectCalculator.CalculationBaseDirectory = Path.GetTempFileName();
if (File.Exists(damProjectCalculator.CalculationBaseDirectory))
File.Delete(damProjectCalculator.CalculationBaseDirectory);
return damProjectCalculator;
}
}
}