// Copyright (C) Stichting Deltares 2019. All rights reserved.
//
// This file is part of the Dam Engine.
//
// The Dam Engine is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System.IO;
using System.Text.RegularExpressions;
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Geotechnics;
using Deltares.DamEngine.Data.Standard.Calculation;
using Deltares.DamEngine.Interface;
using Deltares.DamEngine.Io;
using Deltares.DamEngine.Io.XmlInput;
using Deltares.DamEngine.Io.XmlOutput;
using Deltares.DamEngine.TestHelpers;
using NUnit.Framework;
using ConversionHelper = Deltares.DamEngine.Interface.ConversionHelper;
namespace Deltares.DamEngine.IntegrationTests.IntegrationTests
{
[TestFixture]
public class MacroStabilityInwardsTests
{
private const double Tolerance = 0.0005;
[TearDown]
public void TearDown()
{
// Ensure clearing directories at end.
RemoveUsedDirectoryAfterTests("TestStabInwardsBishop");
RemoveUsedDirectoryAfterTests("TestStabInwardsUpliftVan");
RemoveUsedDirectoryAfterTests("TestStabInwardsBishopUpliftVan_UpliftVanLowest");
RemoveUsedDirectoryAfterTests("TestStabInwardsBishopUpliftVan_BishopLowest");
RemoveUsedDirectoryAfterTests("TestStabInwardsBishopUpliftVan_NoUplift");
RemoveUsedDirectoryAfterTests("TestStabInwardsZoneBishop");
RemoveUsedDirectoryAfterTests("TestStabInwardsZone2Bishop");
RemoveUsedDirectoryAfterTests("TestStabInwardsZoneUpliftVan");
RemoveUsedDirectoryAfterTests("TestStabInwardsForbiddenZoneBishop");
RemoveUsedDirectoryAfterTests("TestStabInwardsWithErrorUpliftVan");
RemoveUsedDirectoryAfterTests("TestStabInwardsWithErrorBishopUpliftVan");
RemoveUsedDirectoryAfterTests("TestRunFailedExpectCalculationMessageInOptimizedSlopeAndShoulderAdaption");
RemoveUsedDirectoryAfterTests("TestRunFailedExpectCalculationMessageInSlopeAdaptionBeforeShoulderAdaption");
RemoveUsedDirectoryAfterTests("TestGiveFeedBackWhenNoProfilesAreAvailable");
}
private void RemoveUsedDirectoryAfterTests(string directory)
{
if (Directory.Exists(directory))
{
Directory.Delete(directory, true);
}
}
/// Test for different segmentFailureMechanismType
/// The soilprobabilities are set tot the specified segmentFailureMechanismType
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
[TestCase(ConversionHelper.InputSegmentFailureMechanismStability)]
[TestCase(ConversionHelper.InputSegmentFailureMechanismAll)]
public void TestRunMacroStabilityTutorialDesignBishop(int segmentFailureMechanismType)
{
// Based on ".data\DamEngineTestProjects\DAM Tutorial Design\DAM Tutorial Design.damx"
// with Dam Classic rev.1059
// Set Analysis type to "No adaption"
// Select 1st location (DWP_1)
// Set Calculation Options: Stability Inside - Bishop
// Expected results are determined by running dam\dam clients\DamUI\trunk\data\DamEngineTestProjects\DAM Tutorial Design
// with Dam Classic rev.833
const string calcDir = "TestStabInwardsBishop";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\MacroStabilityTutorialDesignInputFile.xml";
string inputString = File.ReadAllText(fileName);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SegmentFailureMechanismType", segmentFailureMechanismType.ToString());
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.IsNotNull(output.Results.CalculationResults, "No results available");
Assert.AreEqual(1.282, output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Tolerance);
// NumberOfIterations=0
Assert.AreEqual(0, output.Results.CalculationResults[0].StabilityDesignResults.NumberOfIterations);
// ResultMessage ""
Assert.AreEqual("", output.Results.CalculationResults[0].StabilityDesignResults.ResultMessage);
// Check that a line is specified
Assert.IsNotNull(output.Results.CalculationResults[0].StabilityDesignResults.RedesignedSurfaceLine);
// Profile name = DWP_1.sti
Assert.AreEqual("DWP_1.sti", output.Results.CalculationResults[0].ProfileName);
// Uplift
var upliftSituation = output.Results.CalculationResults[0].StabilityDesignResults.UpliftSituation;
Assert.IsNotNull(upliftSituation);
Assert.AreEqual(true, upliftSituation.IsUplift);
Assert.AreEqual(1.141, upliftSituation.Pl3MinUplift, Tolerance);
Assert.AreEqual(4.4, upliftSituation.Pl3HeadAdjusted, Tolerance);
Assert.AreEqual(60.64, upliftSituation.Pl3LocationXMinUplift, Tolerance);
Assert.AreEqual(0.0, upliftSituation.Pl4MinUplift, Tolerance);
Assert.AreEqual(0.0, upliftSituation.Pl4HeadAdjusted, Tolerance);
Assert.AreEqual(0.0, upliftSituation.Pl4LocationXMinUplift, Tolerance);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[0].CalculationResult));
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunMacroStabilityTutorialDesignUpliftVan()
{
// Based on ".data\DamEngineTestProjects\DAM Tutorial Design\DAM Tutorial Design.damx"
// with Dam Classic rev.1059
// Select 1st location (DWP_1)
// with Dam Classic rev.833
const string calcDir = "TestStabInwardsUpliftVan";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
const string fileName = @"TestFiles\MacroStabilityTutorialDesignInputFile.xml";
string inputString = File.ReadAllText(fileName);
inputString = ChangeInputModel(inputString, InputStabilityModelType.UpliftVan);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.AreEqual(1.115, output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Tolerance);
// NumberOfIterations=0
Assert.AreEqual(0, output.Results.CalculationResults[0].StabilityDesignResults.NumberOfIterations);
// ResultMessage ""
Assert.AreEqual("", output.Results.CalculationResults[0].StabilityDesignResults.ResultMessage);
// Check that a line is specified
Assert.IsNotNull(output.Results.CalculationResults[0].StabilityDesignResults.RedesignedSurfaceLine);
// Profile name = DWP_1.sti
Assert.AreEqual("DWP_1.sti", output.Results.CalculationResults[0].ProfileName);
// Uplift
var upliftSituation = output.Results.CalculationResults[0].StabilityDesignResults.UpliftSituation;
Assert.IsNotNull(upliftSituation);
Assert.AreEqual(true, upliftSituation.IsUplift);
Assert.AreEqual(1.141, upliftSituation.Pl3MinUplift, Tolerance);
Assert.AreEqual(4.4, upliftSituation.Pl3HeadAdjusted, Tolerance);
Assert.AreEqual(60.64, upliftSituation.Pl3LocationXMinUplift, Tolerance);
Assert.AreEqual(0.0, upliftSituation.Pl4MinUplift, Tolerance);
Assert.AreEqual(0.0, upliftSituation.Pl4HeadAdjusted, Tolerance);
Assert.AreEqual(0.0, upliftSituation.Pl4LocationXMinUplift, Tolerance);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[0].CalculationResult));
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunMacroStabilityTutorialDesignBishopUpliftVan_UpliftVanLowest()
{
// Based on ".data\DamEngineTestProjects\DAM Tutorial Design\DAM Tutorial Design.damx"
// with Dam Classic rev.1059
// Select 1st location (DWP_1)
// with Dam Classic rev.833
const string calcDir = "TestStabInwardsBishopUpliftVan_UpliftVanLowest";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
const string fileName = @"TestFiles\MacroStabilityTutorialDesignInputFile.xml";
string inputString = File.ReadAllText(fileName);
inputString = ChangeInputModel(inputString, InputStabilityModelType.BishopUpliftVan);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
// Bishop
var result = output.Results.CalculationResults[0];
Assert.AreEqual(1.282, result.StabilityDesignResults.SafetyFactor, Tolerance);
Assert.IsNotNull(result.StabilityDesignResults.UpliftSituation);
Assert.IsTrue(result.StabilityDesignResults.UpliftSituation.IsUplift);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.Bishop, result.StabilityDesignResults.StabilityModelType);
Assert.AreEqual("Loc(DWP_1)_Sce(1)_Pro(DWP_1)", result.BaseFileName);
// Uplift Van
result = output.Results.CalculationResults[1];
Assert.AreEqual(1.115, result.StabilityDesignResults.SafetyFactor, Tolerance);
Assert.IsNotNull(result.StabilityDesignResults.UpliftSituation);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.UpliftVan, result.StabilityDesignResults.StabilityModelType);
Assert.AreEqual("Loc(DWP_1)_Sce(1)_Pro(DWP_1)", result.BaseFileName);
// Worst of Bishop and Uplift Van
result = output.Results.CalculationResults[2];
Assert.AreEqual(1.115, result.StabilityDesignResults.SafetyFactor, Tolerance);
Assert.IsNotNull(result.StabilityDesignResults.UpliftSituation);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.BishopUpliftVan, result.StabilityDesignResults.StabilityModelType);
Assert.AreEqual("Loc(DWP_1)_Sce(1)_Pro(DWP_1)", result.BaseFileName);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[0].CalculationResult));
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[1].CalculationResult));
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[2].CalculationResult));
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunMacroStabilityTutorialDesignBishopUpliftVan_BishopLowest()
{
// Based on ".data\DamEngineTestProjects\DAM Tutorial Design\DAM Tutorial Design.damx"
// with Dam Classic rev.1059
// Select 5th location (DWP_13)
// with Dam Classic rev.833
const string calcDir = "TestStabInwardsBishopUpliftVan_BishopLowest";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
const string fileName = @"TestFiles\MacroStabilityTutorialDesignInputFile13.xml";
string inputString = File.ReadAllText(fileName);
inputString = ChangeInputModel(inputString, InputStabilityModelType.BishopUpliftVan);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
// Bishop
var result = output.Results.CalculationResults[0].StabilityDesignResults;
Assert.AreEqual(0.452, result.SafetyFactor, Tolerance);
Assert.IsNotNull(result.UpliftSituation);
Assert.IsTrue(result.UpliftSituation.IsUplift);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.Bishop, result.StabilityModelType);
// Uplift Van
result = output.Results.CalculationResults[1].StabilityDesignResults;
Assert.AreEqual(0.574, result.SafetyFactor, Tolerance);
Assert.IsNotNull(result.UpliftSituation);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.UpliftVan, result.StabilityModelType);
// Worst of Bishop and Uplift Van
result = output.Results.CalculationResults[2].StabilityDesignResults;
Assert.AreEqual(0.452, result.SafetyFactor, Tolerance);
Assert.IsNotNull(result.UpliftSituation);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.BishopUpliftVan, result.StabilityModelType);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[0].CalculationResult));
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[1].CalculationResult));
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[2].CalculationResult));
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunMacroStabilityTutorialDesignBishopUpliftVan_NoUplift()
{
// Based on ".data\DamEngineTestProjects\DAM Tutorial Design\DAM Tutorial Design.damx"
// with Dam Classic rev.1059
// Select 10th location (DWP_18)
// with Dam Classic rev.833
const string calcDir = "TestStabInwardsBishopUpliftVan_NoUplift";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
const string fileName = @"TestFiles\MacroStabilityTutorialDesignInputFile18.xml";
string inputString = File.ReadAllText(fileName);
inputString = ChangeInputModel(inputString, InputStabilityModelType.BishopUpliftVan);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
// Bishop
var result = output.Results.CalculationResults[0].StabilityDesignResults;
Assert.IsTrue(result.SafetyFactorSpecified);
Assert.AreEqual(1.458, result.SafetyFactor, Tolerance);
Assert.IsNotNull(result.UpliftSituation);
Assert.IsFalse(result.UpliftSituation.IsUplift);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.Bishop, result.StabilityModelType);
// Uplift Van
result = output.Results.CalculationResults[1].StabilityDesignResults;
Assert.IsFalse(result.SafetyFactorSpecified);
Assert.IsNotNull(result.UpliftSituation);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.UpliftVan, result.StabilityModelType);
// Worst of Bishop and Uplift Van
result = output.Results.CalculationResults[2].StabilityDesignResults;
Assert.IsTrue(result.SafetyFactorSpecified);
Assert.AreEqual(1.458, result.SafetyFactor, Tolerance);
Assert.IsNotNull(result.UpliftSituation);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.BishopUpliftVan, result.StabilityModelType);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[0].CalculationResult));
Assert.AreEqual(CalculationResult.NoRun, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[1].CalculationResult));
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults[2].CalculationResult));
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunMacroStabilityDeltaDijkZoneAreasBishopWith1D()
{
// Expected results are determined by running dam\dam clients\DamUI\trunk\data\DamEngineTestProjects\DeltaDijk_zonering_BI\DeltaDijk normal.damx
// with Dam Classic rev.1059
// This tests both zone areas and use of 1D profiles
// Select first location (6-4-1-A-1-F)
// Analysis type "No adaption"
// Calculation options: Stability Inside - Bishop
const string calcDir = "TestStabInwardsZoneBishop";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\DeltaDijkZoneringInwards.xml";
string inputString = File.ReadAllText(fileName);
inputString = ChangeInputModel(inputString, InputStabilityModelType.Bishop);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DeltaDijk normal.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DeltaDijk normal0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
// one location is calculated with 3 1D profiles
Assert.AreEqual(3, output.Results.CalculationResults.Length);
Assert.AreEqual("6-4-1-A-1-F", output.Results.CalculationResults[0].LocationName);
Assert.AreEqual("6-4-1-A-1-F_1_s", output.Results.CalculationResults[0].ProfileName);
Assert.AreEqual("6-4-1-A-1-F", output.Results.CalculationResults[1].LocationName);
Assert.AreEqual("6-4-1-A-1-F_2_s", output.Results.CalculationResults[1].ProfileName);
Assert.AreEqual("6-4-1-A-1-F", output.Results.CalculationResults[2].LocationName);
Assert.AreEqual("6-4-1-A-1-F_3_s", output.Results.CalculationResults[2].ProfileName);
var result = output.Results.CalculationResults[0];
// SafetyFactor=1.621
Assert.AreEqual(1.621, result.StabilityDesignResults.SafetyFactor, Tolerance);
// skip testing some of the results like uplift etc.
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
// test safety factor for other profiles
result = output.Results.CalculationResults[1];
// SafetyFactor=1.620
Assert.AreEqual(1.620, result.StabilityDesignResults.SafetyFactor, Tolerance);
result = output.Results.CalculationResults[2];
// SafetyFactor=1.621
Assert.AreEqual(1.621, result.StabilityDesignResults.SafetyFactor, Tolerance);
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunMacroStabilityDeltaDijkZoneAreasBishopWith1DAnd2Profiles()
{
// Expected results are determined by running dam\dam clients\DamUI\trunk\data\DamEngineTestProjects\DeltaDijk_zonering_BI\DeltaDijk normal.damx
// with Dam Classic rev.1059
// Select last location (6-4-5-A-1-B)
// Analysis type "No adaption"
// Calculation options: Stability Inside - Bishop
//
// In this test the location is calculated with 2 profiles.
// For one case safety factor of zone 1 is lower than for zone 2
// For the other one safety factor of zone 1 is higher than for zone 2
// But the overall safety factor should always be the one of zone 1
const string calcDir = "TestStabInwardsZone2Bishop";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\DeltaDijkZoneringInwardsZone2.xml";
string inputString = File.ReadAllText(fileName);
inputString = ChangeInputModel(inputString, InputStabilityModelType.Bishop);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DeltaDijk normal.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DeltaDijk normal0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.AreEqual(2, output.Results.CalculationResults.Length);
Assert.AreEqual("6-4-5-A-1-B", output.Results.CalculationResults[0].LocationName);
Assert.AreEqual("6-4-5-A-1-B_1_s", output.Results.CalculationResults[0].ProfileName);
Assert.AreEqual("6-4-5-A-1-B", output.Results.CalculationResults[1].LocationName);
Assert.AreEqual("6-4-5-A-1-B_2_s", output.Results.CalculationResults[1].ProfileName);
// SafetyFactor=2.138
DesignResult result = output.Results.CalculationResults[0];
Assert.AreEqual(2.138, result.StabilityDesignResults.SafetyFactor, Tolerance);
// SafetyFactor=2.009
result = output.Results.CalculationResults[1];
Assert.AreEqual(2.009, result.StabilityDesignResults.SafetyFactor, Tolerance);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
}
[Test, Category("Slow")]
public void TestRunMacroStabilityDeltaDijkZoneAreasUpliftVanWith1D()
{
// Expected results are determined by running dam\dam clients\DamUI\trunk\data\DamEngineTestProjects\DeltaDijk_zonering_BI
// with Dam Classic rev.1059
// Select first location (6-4-1-A-1-F)
// Analysis type "No adaption"
// Calculation options: Stability Inside - Bishop
// This tests both zone areas and use of 1D profiles
const string calcDir = "TestStabInwardsZoneUpliftVan";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\DeltaDijkZoneringInwards.xml";
string inputString = File.ReadAllText(fileName);
inputString = ChangeInputModel(inputString, InputStabilityModelType.UpliftVan);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DeltaDijk normal.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DeltaDijk normal0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
// one location is calculated with 3 1D profiles
// However, profile 6-4-1-A-1-F_3_s has no UpliftVan occuring and thus has no result
Assert.AreEqual(2, output.Results.CalculationResults.Length);
Assert.AreEqual("6-4-1-A-1-F", output.Results.CalculationResults[0].LocationName);
Assert.AreEqual("6-4-1-A-1-F_1_s", output.Results.CalculationResults[0].ProfileName);
Assert.AreEqual("6-4-1-A-1-F", output.Results.CalculationResults[1].LocationName);
Assert.AreEqual("6-4-1-A-1-F_2_s", output.Results.CalculationResults[1].ProfileName);
var result = output.Results.CalculationResults[0];
// SafetyFactor=1.575
Assert.AreEqual(1.575, result.StabilityDesignResults.SafetyFactor, Tolerance);
// skip testing some of the results like uplift etc.
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
// test safety factor for other profiles
result = output.Results.CalculationResults[1];
// SafetyFactor=1.449
Assert.AreEqual(1.449, result.StabilityDesignResults.SafetyFactor, Tolerance);
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunMacroStabilityInvoer10ForbiddenZoneBishop()
{
// Expected results are determined by running dam\dam clients\DamUI\trunk\data\DamEngineTestProjects\Invoer10\ZoneType.damx
// with Dam Classic rev.1059
// Select locations DWP_10_2 and DWP_10_6
// Analysis type "No adaption"
// Calculation options: Stability Inside - Bishop
// This tests two locations with same profile
// But first location with Zone Areas and second location with Forbidden Zone
const string calcDir = "TestStabInwardsForbiddenZoneBishop";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\Invoer10.xml";
string inputString = File.ReadAllText(fileName);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\ZoneType.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\ZoneType0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.AreEqual(2, output.Results.CalculationResults.Length);
var result = output.Results.CalculationResults[0];
// SafetyFactor=1.972 (Zone Areas)
Assert.AreEqual(1.972, result.StabilityDesignResults.SafetyFactor, Tolerance);
Assert.AreEqual("DWP_10_2", result.LocationName);
Assert.AreEqual("DWP_10.sti", result.ProfileName);
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
result = output.Results.CalculationResults[1];
// SafetyFactor=2.034 (Forbidden Zone)
Assert.AreEqual(2.034, result.StabilityDesignResults.SafetyFactor, Tolerance);
Assert.AreEqual("DWP_10_6", result.LocationName);
Assert.AreEqual("DWP_10.sti", result.ProfileName);
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
}
[Test, Category("Slow")]
public void TestRunMacroStabilityWithErrorUpliftVan()
{
// Expected results are determined by running .\data\DamEngineTestProjects\DeltaDijk_zonering_BI\DeltaDijk normal.damx
// with Dam Classic rev.1059
// Select 5th and 6th location (6-4-3-A-1-C and 6-4-3-A-1-D)
// This project has 2 locations with each 2 profiles
// In one the combinations location-profile (1st location, 2nd profile) DGeoStability stops during the calculation.
// Then the kernel tries to read the safety factor, but fails because the dumpfile is not complete.
// In Release+Classic this returned a result Unexpected Error but the calculation continued with the next combination.
const string calcDir = "TestStabInwardsWithErrorUpliftVan";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\ErrorInDGeoStabilityCalculation.xml";
string inputString = File.ReadAllText(fileName);
inputString = ChangeInputModel(inputString, InputStabilityModelType.UpliftVan);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DeltaDijk normal.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DeltaDijk normal0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.AreEqual(4, output.Results.CalculationResults.Length);
var result = output.Results.CalculationResults[0];
Assert.AreEqual("6-4-3-A-1-C", result.LocationName);
Assert.AreEqual("6-4-3-A-1-C_1_s", result.ProfileName);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
// SafetyFactor=1.814
Assert.AreEqual(1.814, result.StabilityDesignResults.SafetyFactor, Tolerance);
result = output.Results.CalculationResults[1];
Assert.AreEqual("6-4-3-A-1-C", result.LocationName);
Assert.AreEqual("6-4-3-A-1-C_2_s", result.ProfileName);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
// SafetyFactor=2.472
Assert.AreEqual(2.472, result.StabilityDesignResults.SafetyFactor, Tolerance);
result = output.Results.CalculationResults[2];
Assert.AreEqual("6-4-3-B-1-D", result.LocationName);
Assert.AreEqual("6-4-3-B-1-D_1_s", result.ProfileName);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
// SafetyFactor=2.085
Assert.AreEqual(2.085, result.StabilityDesignResults.SafetyFactor, Tolerance);
result = output.Results.CalculationResults[3];
Assert.AreEqual("6-4-3-B-1-D", result.LocationName);
Assert.AreEqual("6-4-3-B-1-D_2_s", result.ProfileName);
// Calculation Result
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
// SafetyFactor=2.300
Assert.AreEqual(2.300, result.StabilityDesignResults.SafetyFactor, Tolerance);
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunMacroStabilityWithErrorBishopUpliftVan()
{
// Expected results are determined by running .\data\DamEngineTestProjects\DeltaDijk_zonering_BI\DeltaDijk normal.damx
// with Dam Classic rev.1059
// Select 5th and 6th location (6-4-3-A-1-C and 6-4-3-A-1-D)
// This project has 2 locations with each 2 profiles
// In one the combinations location-profile (1st location, 2nd profile) DGeoStability stops during the calculation.
// Then the kernel tries to read the safety factor, but fails because the dumpfile is not complete.
// In Release+Classic this returned a result Unexpected Error but the calculation continued with the next combination.
const string calcDir = "TestStabInwardsWithErrorBishopUpliftVan";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\ErrorInDGeoStabilityCalculation.xml";
string inputString = File.ReadAllText(fileName);
inputString = ChangeInputModel(inputString, InputStabilityModelType.BishopUpliftVan);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DeltaDijk normal.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DeltaDijk normal0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.AreEqual(12, output.Results.CalculationResults.Length);
var result = output.Results.CalculationResults[3];
Assert.AreEqual("6-4-3-A-1-C", result.LocationName);
Assert.AreEqual("6-4-3-A-1-C_2_s", result.ProfileName);
// Bishop
Assert.AreEqual(CalculationResult.Succeeded, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
// SafetyFactor=2.219
Assert.AreEqual(2.219, result.StabilityDesignResults.SafetyFactor, Tolerance);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.Bishop, result.StabilityDesignResults.StabilityModelType);
result = output.Results.CalculationResults[4];
Assert.AreEqual("6-4-3-A-1-C", result.LocationName);
Assert.AreEqual("6-4-3-A-1-C_2_s", result.ProfileName);
// Uplift Van
Assert.AreEqual(CalculationResult.UnexpectedError, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
// SafetyFactor not specified
Assert.IsFalse(result.StabilityDesignResults.SafetyFactorSpecified);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.UpliftVan, result.StabilityDesignResults.StabilityModelType);
result = output.Results.CalculationResults[5];
Assert.AreEqual("6-4-3-A-1-C", result.LocationName);
Assert.AreEqual("6-4-3-A-1-C_2_s", result.ProfileName);
// Bishop/Uplift Van
Assert.AreEqual(CalculationResult.UnexpectedError, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
// SafetyFactor not specified
Assert.IsFalse(result.StabilityDesignResults.SafetyFactorSpecified);
Assert.AreEqual(DesignResultStabilityDesignResultsStabilityModelType.BishopUpliftVan, result.StabilityDesignResults.StabilityModelType);
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunFailedExpectCalculationMessageInOptimizedSlopeAndShoulderAdaption()
{
// Inputfile was created with .\data\DamEngineTestProjects\Invoer2\DAM Tutorial Design\DAM Tutorial Design.damx
// Select dwp 13
// Expected: RunFailed
const string calcDir = "TestRunFailedExpectCalculationMessageInOptimizedSlopeAndShoulderAdaption";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\MacroStabilityRunFailedExpectCalculationMessage.xml";
string inputString = File.ReadAllText(fileName);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.AreEqual(1, output.Results.CalculationResults.Length);
var result = output.Results.CalculationResults[0];
Assert.AreEqual(CalculationResult.RunFailed, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
Assert.AreEqual("The new shoulder height with topslope exceeds the allowed maximum height.",
output.Results.CalculationResults[0].StabilityDesignResults.ResultMessage);
Assert.AreEqual("Location 'DWP_13', subsoil scenario 'DWP_13.sti', design scenario '1': " +
"The calculation failed with error message " +
"'The design was not successful. " +
"The new shoulder height with topslope exceeds the allowed maximum height.'",
output.Results.CalculationMessages[0].Message1);
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestRunFailedExpectCalculationMessageInSlopeAdaptionBeforeShoulderAdaption()
{
// Inputfile was created with .\data\Dam\Benchmarks\Validatie SlopeAdaption\SlopeAdaption.damx
// Expected: RunFailed
const string calcDir = "TestRunFailedExpectCalculationMessageInSlopeAdaptionBeforeShoulderAdaption";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\ValidatieSlopeAdaption.xml";
string inputString = File.ReadAllText(fileName);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\SlopeAdaption0.soilmaterials.mdb");
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.AreEqual(1, output.Results.CalculationResults.Length);
var result = output.Results.CalculationResults[0];
Assert.AreEqual(CalculationResult.RunFailed, ConversionHelper.ConvertToCalculationResult(result.CalculationResult));
Assert.AreEqual("After height adaption ditch does not fit inside surfaceline anymore.",
output.Results.CalculationResults[0].StabilityDesignResults.ResultMessage);
Assert.AreEqual("Location 'Test1', subsoil scenario 'segment1_Test1', design scenario '1': " +
"The calculation failed with error message " +
"'The design was not successful. " +
"After height adaption ditch does not fit inside surfaceline anymore.'",
output.Results.CalculationMessages[0].Message1);
}
[Test, Category("Slow")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
// Expected results are determined by running .\DamUI\trunk\data\DamEngineTestProjects\DAM Tutorial Design\DAM Tutorial Design.damx
// with Dam Classic rev.1059
// Select 1st location (DWP_1)
// Set designscenario Safetyfactor Inwards to 1.4
// Design strategy: OptimizedSlopeAndShoulderAdaption
// Set NewMinDistanceDikeToeStartDitch = 3.0, UseNewMinDistanceDikeToeStartDitch = true (to force value to be written to XML)
//
// Parameters: CalcDir - StabilityModel - DesignStrategy - CalculationResult - FoS - EntryPointX - ExitPointX - DikeLength - ShoulderHeight - Iterations - ResultMessage
[TestCase("TestStabInwardsBishopDesignSequential", "Bishop", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.444, 39.081, 67.577, 45.387, 2.799, 5, "")]
[TestCase("TestStabInwardsBishopDesignOptimized", "Bishop", "OptimizedSlopeAndShoulderAdaption", CalculationResult.Succeeded, 1.412, 50.236, 67.077, 43.760, 3.889, 4, "")]
[TestCase("TestStabInwardsUpliftVanDesignSequential", "UpliftVan", "SlopeAdaptionBeforeShoulderAdaption", CalculationResult.Succeeded, 1.4847, 39.243, 73.587, 50.285, 3.465, 7, "")]
[TestCase("TestStabInwardsUpliftVanDesignOptimized", "UpliftVan", "OptimizedSlopeAndShoulderAdaption", CalculationResult.RunFailed, 1.214, 39.514, 66.926, 36.150, 0.0, 4, "The new shoulder height with topslope exceeds the allowed maximum height.")]
public void CanPerformStabilityInwardsDesignTutorialDesignOptimizedSlopeAndShoulderAdaption_OneLocation(
string calcDir, string stabilityModel, string designStrategy,
CalculationResult calculationResult, double expectedSafetyFactor,
double expectedZone1EntryPointX, double expectedZone1ExitPointX,
double expectedDikeLength, double expectedShoulderHeight,
int expectedNumberOfIterations, string expectedResultMessage)
{
const string fileName = @"TestFiles\MacroStabilityTutorialDesignInputFile1LocationWithAdaption.xml";
string inputString = File.ReadAllText(fileName);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb");
inputString = XmlAdapter.ChangeValueInXml(inputString, "StabilityModelType", stabilityModel);
inputString = XmlAdapter.ChangeValueInXml(inputString, "StabilityDesignMethod", designStrategy);
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
DamProjectData actualDamProjectData = FillDamFromXmlOutput.CreateDamProjectData(null, output);
Assert.AreEqual(calculationResult, ConversionHelper.ConvertToCalculationResult(
output.Results.CalculationResults[0].CalculationResult));
var stabilityDesignResults = output.Results.CalculationResults[0].StabilityDesignResults;
Assert.AreEqual(expectedSafetyFactor, stabilityDesignResults.SafetyFactor, Tolerance);
Assert.AreEqual(expectedNumberOfIterations, stabilityDesignResults.NumberOfIterations);
Assert.AreEqual(expectedResultMessage, stabilityDesignResults.ResultMessage);
SurfaceLine2 redesignedSurfaceLine = actualDamProjectData.DesignCalculations[0].StabilityDesignResults.RedesignedSurfaceLine;
if (redesignedSurfaceLine != null)
{
Assert.AreEqual(expectedDikeLength, redesignedSurfaceLine.GetDikeLength(), Tolerance);
GeometryPoint pointShoulderBaseInside = redesignedSurfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.ShoulderTopInside);
if (pointShoulderBaseInside != null)
{
Assert.AreEqual(expectedShoulderHeight, pointShoulderBaseInside.Z, Tolerance);
}
}
}
[Test]
[SetUICulture("nl-NL")]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestGiveFeedBackWhenNoProfilesAreAvailable()
{
// Based on "dam/IssueRelatedData/MWDAM-1341/HHNK Leggerstudie\DAM Leggerstudie.defx"
// Import as Design -Primary dike: "DAM Leggerstudie.defx"
// Select first location and start calculation
// xml file is created with rev.2039
const string calcDir = "TestGiveFeedBackWhenNoProfilesAreAvailable";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\MacroStabilityNoProfilesInputFile.xml";
string inputString = File.ReadAllText(fileName);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.AreEqual(null, output.Results.CalculationResults);
Assert.AreEqual(2, output.Results.CalculationMessages.Length);
Assert.AreEqual(MessageMessageType.Warning, output.Results.CalculationMessages[0].MessageType);
Assert.AreEqual("Geen ondergrond profielen beschikbaar voor locatie '12-2_027'", output.Results.CalculationMessages[0].Message1);
}
[Test]
[Ignore("Test disabled due to removal of the old MacroStability kernel wrapper implementation")]
public void TestDesignWithRiverLevelAboveDikeTopButBelowDthCanCalculate()
{
var analysisType = "AdaptGeometry";
// Test just to see if calculation works in this case as it should do, result itself is irrelevant so just taken as is.
var outputString = GetOutputStringForProject(analysisType);
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.IsNotNull(output.Results.CalculationResults, "No results available");
Assert.AreEqual(1.255, output.Results.CalculationResults[0].StabilityDesignResults.SafetyFactor, Tolerance);
}
[Test]
public void TestNoDesignWithRiverLevelAboveDikeTopButBelowDthCanNotCalculate()
{
var analysisType = "NoAdaption";
// Test to see if calculation does NOT work in this case as it must fail with water level above dike top.
var outputString = GetOutputStringForProject(analysisType);
Assert.IsNotNull(outputString);
var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
Assert.IsNull(output.Results.CalculationResults, "Should have results available");
Assert.AreEqual(1, output.Results.CalculationMessages.Length, Tolerance);
}
private static string GetOutputStringForProject(string analysisType)
{
const string calcDir = "TestStabInwardsBishop";
if (Directory.Exists(calcDir))
{
Directory.Delete(calcDir, true); // delete previous results
}
Directory.CreateDirectory(calcDir);
const string fileName = @"TestFiles\DesignInputFileWithRiverLevelAboveDikeTopButBelowDTH.xml";
string inputString = File.ReadAllText(fileName);
inputString = XmlAdapter.ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
inputString =
XmlAdapter.ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
inputString = XmlAdapter.ChangeValueInXml(inputString, "MapForSoilgeometries2D",
@"TestFiles\DAM Tutorial Design.geometries2D.0\");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SoilDatabaseName",
@"TestFiles\DAM Tutorial Design0.soilmaterials.mdb");
inputString = XmlAdapter.ChangeValueInXml(inputString, "SegmentFailureMechanismType",
ConversionHelper.InputSegmentFailureMechanismStability.ToString());
inputString = XmlAdapter.ChangeValueInXml(inputString, "AnalysisType",
analysisType);
EngineInterface engineInterface = new EngineInterface(inputString);
Assert.IsNotNull(engineInterface.DamProjectData);
string outputString = engineInterface.Run();
return outputString;
}
private string ChangeInputModel(string input, InputStabilityModelType modelType)
{
string pattern = "StabilityModelType=\"Bishop\"";
string replacement = pattern;
switch (modelType)
{
case InputStabilityModelType.Bishop:
break;
case InputStabilityModelType.UpliftVan:
replacement = "StabilityModelType=\"UpliftVan\"";
break;
case InputStabilityModelType.BishopUpliftVan:
replacement = "StabilityModelType=\"BishopUpliftVan\"";
break;
}
string result = Regex.Replace(input, pattern, replacement);
return result;
}
}
}