//-----------------------------------------------------------------------
//
// Copyright (c) 2010 Deltares. All rights reserved.
//
// B.S.T.I.M. The
// tom.the@deltares.nl
// 18-05-2010
// Contains tests for xml file creator for DGSMStabDam.dll
//-----------------------------------------------------------------------
using Deltares.Geometry;
using Deltares.Geotechnics.GeotechnicalGeometry;
using Deltares.Standard.IO.DtoAssembler;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using Deltares.Dam.Data;
using Deltares.Dam.Data.Assemblers;
using NUnit.Framework;
using Deltares.Geotechnics;
using Deltares.Geotechnics.Soils;
using Deltares.Geotechnics.SurfaceLines;
namespace Deltares.Dam.Tests
{
[TestFixture]
public class DamMStabAssemblerTest
{
#region Setup/Teardown
[SetUp]
public void TestSetup()
{
this.assembler = new DamMStabAssembler();
// Dike
this.dike = new Dike();
this.dike.Name = "Dike";
// Segments
this.segment1 = new Dam.Data.Segment();
this.segment1.Name = "Segment1";
//this.dike.Segments.Add(this.segment1);
// Locations
this.location1 = new Location();
this.location1.Name = "Location1";
this.location1.Segment = segment1;
this.dike.Locations.Add(this.location1);
// Surface lines
surfaceLine1 = new SurfaceLine2
{
Name = "SurfaceLine1",
CharacteristicPoints = { GeometryMustContainPoint = true },
Geometry = new LocalizedGeometryPointString()
};
this.dike.SurfaceLines2.Add(this.surfaceLine1);
surfaceLine2 = new SurfaceLine2
{
Name = "SurfaceLine2",
CharacteristicPoints = { GeometryMustContainPoint = true },
Geometry = new LocalizedGeometryPointString()
};
this.dike.SurfaceLines2.Add(this.surfaceLine2);
// Soil profiles
this.soilProfile1 = new SoilProfile1D();
this.soilProfile1.Name = "SoilProfile1";
this.soilProfile1.X = 34534.34;
this.soilProfile1.Y = 49453.68;
this.soilProfile1.BottomLevel = -25.3;
this.soilProfile1.HasPhreaticLevel = true;
this.soilProfile1.PhreaticLevel = -3.54;
Soil soilClay = new Soil("Clay", 20.0, 20.0);
Soil soilPeat = new Soil("Peat", 20.0, 20.0);
Soil soilSand = new Soil("Sand", 20.0, 20.0);
SoilLayer1D layer = new SoilLayer1D();
layer.Id = "L1";
layer.Name = "Layer 1";
layer.TopLevel = -1.52;
layer.Soil = soilClay;
layer.IsAquifer = false;
this.soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Id = "L2";
layer.Name = "Layer 2";
layer.TopLevel = -3.18;
layer.Soil = soilPeat;
layer.IsAquifer = false;
this.soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Id = "L3";
layer.Name = "Layer 3";
layer.TopLevel = -7.37;
layer.Soil = soilSand;
layer.IsAquifer = true;
this.soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Id = "L4";
layer.Name = "Layer 4";
layer.TopLevel = -12.28;
layer.Soil = soilPeat;
layer.IsAquifer = false;
this.soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Id = "L5";
layer.Name = "Layer 5";
layer.TopLevel = -15.62;
layer.Soil = soilClay;
layer.IsAquifer = false;
this.soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Id = "L6";
layer.Name = "Layer 6";
layer.TopLevel = -18.39;
layer.Soil = soilSand;
layer.IsAquifer = true;
this.soilProfile1.Layers.Add(layer);
this.dike.SoilProfiles.Add(this.soilProfile1);
// Locations' Segments
this.location1.Segment = this.segment1;
// Locations' surface lines
this.location1.SurfaceLine2 = this.surfaceLine1;
// Segments' Soil profile probabilities
this.segment1.AddSoilProfileProbability(this.soilProfile1, 100.0, FailureMechanismSystemType.StabilityInside);
// Surface lines' points
this.surfaceLine1.EnsurePointOfType(15.3, -3.52, CharacteristicPointType.SurfaceLevelOutside);
this.surfaceLine1.EnsurePointOfType(19.4, -1.46, CharacteristicPointType.DikeToeAtRiver);
this.surfaceLine1.EnsurePointOfType(27.4, 8.56, CharacteristicPointType.DikeTopAtRiver);
this.surfaceLine1.EnsurePointOfType(35.2, 8.62, CharacteristicPointType.DikeTopAtPolder);
this.surfaceLine1.EnsurePointOfType(41.5, -3.76, CharacteristicPointType.DikeToeAtPolder);
this.surfaceLine1.EnsurePointOfType(85.4, -3.61, CharacteristicPointType.SurfaceLevelInside);
this.surfaceLine2.EnsurePointOfType(0.0, -1.46, CharacteristicPointType.SurfaceLevelOutside);
this.surfaceLine2.EnsurePointOfType(19.4, -1.46, CharacteristicPointType.DikeToeAtRiver);
this.surfaceLine2.EnsurePointOfType(27.4, 8.56, CharacteristicPointType.DikeTopAtRiver);
this.surfaceLine2.EnsurePointOfType(35.2, 8.62, CharacteristicPointType.DikeTopAtPolder);
this.surfaceLine2.EnsurePointOfType(41.5, -3.76, CharacteristicPointType.DikeToeAtPolder);
this.surfaceLine2.EnsurePoint(46.7, -3.82);
this.surfaceLine2.EnsurePoint(47.5, -4.78);
this.surfaceLine2.EnsurePoint(51.2, -4.82);
this.surfaceLine2.EnsurePoint(53.1, -3.78);
surfaceLine2.EnsurePointOfType(85.4, -3.61, CharacteristicPointType.SurfaceLevelInside);
// PL Lines
this.peelLines = new PLLines();
this.peelLine1 = new PLLine();
this.peelLine1.Name = "PLLine1";
this.peelLine1.IsPhreatic = false;
this.peelLine1.BoundaryLayer = 2;
this.peelLine1.Points.Add(new PLLinePoint(35.2, -7.56));
this.peelLine1.Points.Add(new PLLinePoint(42.5, -6.12));
this.peelLine1.Points.Add(new PLLinePoint(45.3, -8.73));
this.peelLines.Lines[PLLineType.PL1] = this.peelLine1;
this.peelLine2 = new PLLine();
this.peelLine2.Name = "PLLine2";
this.peelLine2.IsPhreatic = true;
this.peelLine2.BoundaryLayer = 5;
this.peelLine2.Points.Add(new PLLinePoint(16.2, 3.23));
this.peelLine2.Points.Add(new PLLinePoint(18.4, 1.19));
this.peelLine2.Points.Add(new PLLinePoint(21.8, -0.45));
this.peelLine2.Points.Add(new PLLinePoint(22.5, -1.73));
this.peelLines.Lines[PLLineType.PL1] = peelLine2;
// Calculation options
this.calculationOptions = new MStabCalculationOptions();
this.calculationOptions.MinimalCircleDepth = 1.1;
// Zone areas
this.zoneAreas = new MStabZoneAreas();
this.zoneAreas.DikeTableHeight = 12.0;
this.zoneAreas.DikeTableWidth = 1.5;
this.zoneAreas.XCoordinateDikeTopAtRiver = 10.0;
this.zoneAreas.XCoordinateDikeTopAtPolder = 18.0;
this.zoneAreas.XCoordinateStartRestProfile = 20.0;
this.zoneAreas.SafetyFactorZone1A = 1.2;
this.zoneAreas.SafetyFactorZone1B = 1.3;
// Geometry creation options
this.geometryCreationOptions = new MStabGeometryCreationOptions();
this.geometryCreationOptions.SoilGeometryType = SoilGeometryType.SoilGeometry2D;
this.geometryCreationOptions.SoilGeometry2DFilename = "geometry2D filename";
this.geometryCreationOptions.XOffsetSoilGeometry2DOrigin = 12.0;
this.geometryCreationOptions.MaterialForDike = "clay dike";
this.geometryCreationOptions.MaterialForShoulder = "sand shoulder";
this.geometryCreationOptions.IsUseOriginalPLLineAssignments = true;
this.geometryCreationOptions.IsUseOriginalCalculationOptions = true;
this.geometryCreationOptions.IsDrySituation = true;
this.geometryCreationOptions.IsDesign = true;
// MStabDesignEmbankment design
this.design = new MStabDesignEmbankment();
this.design.EmbankmentMaterialname = "soiltest";
this.design.PreviousGeometry2DFilename = "soilname/Path/testFileNameWithPLLines.sti";
// Sheetpiling
this.sheetPiling = new Deltares.Dam.Data.SheetPiling();
this.sheetPiling.XCoordinate = 11.11;
this.sheetPiling.YCoordinate = 22.22;
this.sheetPiling.ZCoordinate = 33.33;
this.sheetPiling.Length = 20.0;
// Horizontal Balance Area
this.horizontalBalanceArea = new HorizontalBalanceArea();
this.horizontalBalanceArea.XLeft = 13.11;
this.horizontalBalanceArea.XRight = 14.11;
this.horizontalBalanceArea.YTop = 15.11;
this.horizontalBalanceArea.YBottom = 16.11;
this.horizontalBalanceArea.PlaneCount = 17;
// Slip Circle Definition
this.slipCircleDefinition = new SlipCircleDefinition();
this.slipCircleDefinition.XCoordinateLastUpliftPoint = 18.11;
this.slipCircleDefinition.UpliftVanTangentLinesDefinition = TangentLinesDefinition.Specified;
this.slipCircleDefinition.GridSizeDetermination = GridSizeDetermination.Specified;
this.slipCircleDefinition.UpliftVanLeftGridVerticalPointCount = 19;
this.slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance = 20.11;
this.slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount = 21;
this.slipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance = 22.11;
this.slipCircleDefinition.UpliftVanRightGridVerticalPointCount = 23;
this.slipCircleDefinition.UpliftVanRightGridVerticalPointDistance = 24.11;
this.slipCircleDefinition.UpliftVanRightGridHorizontalPointCount = 25;
this.slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance = 26.11;
this.slipCircleDefinition.BishopGridVerticalPointCount = 27;
this.slipCircleDefinition.BishopGridVerticalPointDistance = 28.11;
this.slipCircleDefinition.BishopGridHorizontalPointCount = 29;
this.slipCircleDefinition.BishopGridHorizontalPointDistance = 30.11;
// DAMMStab (class containing all)
this.damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification
{
FailureMechanismeParamatersMStab = new FailureMechanismeParamatersMStab()
{
Location = this.location1,
SurfaceLine = this.location1.SurfaceLine2,
PLLines = this.peelLines,
SoilProfile = this.soilProfile1,
Design = this.design,
MStabParameters = new MStabParameters()
{
SoilDatabaseName = @"X:\GeoData\Soils\TestDatabase.mdb",
Model = MStabModelType.UpliftVan,
ShearStrength = MStabShearStrength.CPhi,
ProjectFileName = @"X:\MStab\Demo.sti",
ZoneAreas = this.zoneAreas,
GeometryCreationOptions = this.geometryCreationOptions,
SheetPiling = this.sheetPiling,
HorizontalBalanceArea = this.horizontalBalanceArea,
SlipCircleDefinition = this.slipCircleDefinition,
CalculationOptions = this.calculationOptions
}
}
};
}
[TearDown]
public void TearDown()
{
dike.Dispose();
}
#endregion
private const string testDirectory = "TestResults";
private const string testFileName = "DikeMStabAssemblerTest.xml";
private const string testFileNameWithNullLayerIDs = "DikeMStabAssemblerTestWithNullLayerIDs.xml";
private const string testFileNameWithPLLines = "DikeMStabAssemblerTestWithPLLines.xml";
private const double Precision = 1e-8;
private DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification;
private DamMStabAssembler assembler;
private Dike dike;
private Dam.Data.Segment segment1;
private Location location1;
private SurfaceLine2 surfaceLine1;
private SurfaceLine2 surfaceLine2;
private SoilProfile1D soilProfile1;
private PLLines peelLines;
private PLLine peelLine1;
private PLLine peelLine2;
private MStabZoneAreas zoneAreas;
private MStabCalculationOptions calculationOptions;
private MStabGeometryCreationOptions geometryCreationOptions;
private Deltares.Dam.Data.SheetPiling sheetPiling;
private HorizontalBalanceArea horizontalBalanceArea;
private MStabDesignEmbankment design;
private SlipCircleDefinition slipCircleDefinition;
[TestFixtureSetUp]
public void TestFixtureSetup()
{
}
[Test]
public void CanCreateAndValidateMStabInputXML()
{
// Do the thing: create XML element from SoilProfile
this.geometryCreationOptions.IntrusionVerticalWaterPressureType = IntrusionVerticalWaterPressureType.HydroStatic;
this.geometryCreationOptions.PenetrationLength = 1.4;
XDocument doc = this.assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
Directory.CreateDirectory(testDirectory);
doc.Save(Path.Combine(testDirectory, testFileName));
// Validate against schema
string message;
if (!this.assembler.ValidateSchema(doc, out message))
{
Assert.Fail("SCHEMA VALIDATION: " + message);
}
// Compare resulting XML to original object
// Input
XElement inputElement = (from element in doc.Root.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementNameInput
select element).Single();
// Database
Assert.AreEqual(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ProjectFileName, inputElement.AttributeAs(DamMStabAssembler.XmlAttributeMStabFileName), "SoilDB Name");
Assert.AreEqual(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.SoilDatabaseName, inputElement.AttributeAs(DamMStabAssembler.XmlAttributeSoilDBName), "SoilDB Name");
// Surface lines
XElement surfaceLineElement = (from element in inputElement.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementSurfaceLine
select element).Single();
// Surface points
IEnumerable surfacePointElements = from element in surfaceLineElement.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementSurfacePoint
select element;
Assert.AreEqual(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.Location.SurfaceLine2.Geometry.Count, surfacePointElements.Count(), "Number of surface line points");
IEnumerator surfacePointElementEnumerator = surfacePointElements.GetEnumerator();
foreach (GeometryPoint point in this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.Location.SurfaceLine2.Geometry.Points)
{
surfacePointElementEnumerator.MoveNext();
XElement surfaceLinePointElement = surfacePointElementEnumerator.Current;
Assert.AreEqual(point.X, surfaceLinePointElement.AttributeAs(DamMStabAssembler.XmlAttributeXCoord), Precision, String.Format("X of GeometryPoint #{0}",
this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.Location.SurfaceLine2.Geometry.Points.IndexOf(point)));
Assert.AreEqual(point.Z, surfaceLinePointElement.AttributeAs(DamMStabAssembler.XmlAttributeYCoord), Precision, String.Format("Z of GeometryPoint #{0}",
this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.Location.SurfaceLine2.Geometry.Points.IndexOf(point)));
}
// External PL lines
IEnumerable externalPLLineCollectionElements = from element in inputElement.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementExternalPLLines
select element;
Assert.AreEqual(1, externalPLLineCollectionElements.Count(), String.Format("There should be exactly one {0} tag", DamMStabAssembler.XmlElementExternalPLLines));
XElement externalPLLineCollectionElement = externalPLLineCollectionElements.Single();
IEnumerable peelLineCollectionElements = from element in externalPLLineCollectionElement.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementPLLine
select element;
Assert.AreEqual(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.PLLines.PLLineCount, peelLineCollectionElements.Count(), "Number of PL lines");
IEnumerator peelLineElementEnumerator = peelLineCollectionElements.GetEnumerator();
foreach (PLLineType plLineType in Enum.GetValues(typeof(PLLineType)))
{
PLLine line = damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.PLLines.Lines[plLineType];
peelLineElementEnumerator.MoveNext();
XElement peelLineElement = peelLineElementEnumerator.Current;
Assert.AreEqual(line.IsPhreatic, peelLineElement.AttributeAs(DamMStabAssembler.XmlAttributeIsPhreatic), String.Format("{0}", DamMStabAssembler.XmlAttributeIsPhreatic));
Assert.AreEqual(line.BoundaryLayer, peelLineElement.AttributeAs(DamMStabAssembler.XmlAttributeBoundaryLayer), String.Format("{0}", DamMStabAssembler.XmlAttributeBoundaryLayer));
IEnumerable peelPointCollectionElements = from element in peelLineElement.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementPLPoint
select element;
Assert.AreEqual(line.Points.Count, peelPointCollectionElements.Count(), "Number of PL line Points");
IEnumerator peelPointElementEnumerator = peelPointCollectionElements.GetEnumerator();
foreach (PLLinePoint point in line.Points)
{
peelPointElementEnumerator.MoveNext();
XElement peelPointElement = peelPointElementEnumerator.Current;
Assert.AreEqual(point.X, peelPointElement.AttributeAs(DamMStabAssembler.XmlAttributeXCoord), Precision, String.Format("X of GeometryPoint #{0}", line.Points.IndexOf(point)));
Assert.AreEqual(point.Z, peelPointElement.AttributeAs(DamMStabAssembler.XmlAttributeYCoord), Precision, String.Format("Z of GeometryPoint #{0}", line.Points.IndexOf(point)));
}
}
// Model
XElement modelElement = (from element in doc.Root.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementModel
select element).Single();
Assert.AreEqual(MStabModelType.UpliftVan.ToString(), modelElement.AttributeAs(DamMStabAssembler.XmlAttributeCalculationModel), DamMStabAssembler.XmlAttributeCalculationModel);
Assert.AreEqual(MStabShearStrength.CPhi.ToString(), modelElement.AttributeAs(DamMStabAssembler.XmlAttributeShearStrength), DamMStabAssembler.XmlAttributeShearStrength);
Assert.AreEqual(false, modelElement.AttributeAs(DamMStabAssembler.XmlAttributeProbabilistic), DamMStabAssembler.XmlAttributeProbabilistic);
// Zone Areas
XElement zoneAreasElement = (from element in doc.Root.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementZoneAreas
select element).Single();
Assert.AreEqual(this.zoneAreas.DikeTableHeight, zoneAreasElement.AttributeAs("DikeTableHeight"), "DikeTableHeight");
Assert.AreEqual(this.zoneAreas.DikeTableWidth, zoneAreasElement.AttributeAs("DikeTableWidth"), "DikeTableWidth");
Assert.AreEqual(this.zoneAreas.XCoordinateDikeTopAtRiver, zoneAreasElement.AttributeAs("XCoordinateDikeTopAtRiver"), "XCoordinateDikeTopAtRiver");
Assert.AreEqual(this.zoneAreas.XCoordinateDikeTopAtPolder, zoneAreasElement.AttributeAs("XCoordinateDikeTopAtPolder"), "XCoordinateDikeTopAtPolder");
Assert.AreEqual(this.zoneAreas.XCoordinateStartRestProfile, zoneAreasElement.AttributeAs("XCoordinateStartRestProfile"), "XCoordinateStartRestProfile");
Assert.AreEqual(this.zoneAreas.SafetyFactorZone1A, zoneAreasElement.AttributeAs("SafetyFactorZone1A"), "SafetyFactorZone1A");
Assert.AreEqual(this.zoneAreas.SafetyFactorZone1B, zoneAreasElement.AttributeAs("SafetyFactorZone1B"), "SafetyFactorZone1B");
// Calculation options
XElement calculationOptionsElement = (from element in doc.Root.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementCalculationOptions
select element).Single();
Assert.AreEqual(this.calculationOptions.MinimalCircleDepth, calculationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeMinimalCircleDepth), DamMStabAssembler.XmlAttributeMinimalCircleDepth);
// GeometryCreationOptions
XElement geometryCreationOptionsElement = (from element in doc.Root.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementGeometryCreationOptions
select element).Single();
Assert.AreEqual(this.geometryCreationOptions.SoilGeometryType.ToString(), geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeSoilGeometryType), DamMStabAssembler.XmlAttributeSoilGeometryType);
Assert.AreEqual(this.geometryCreationOptions.SoilGeometry2DFilename,
geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeSoilGeometry2DFilename), DamMStabAssembler.XmlAttributeSoilGeometry2DFilename);
Assert.AreEqual(this.geometryCreationOptions.MaterialForDike, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeMaterialForDike), DamMStabAssembler.XmlAttributeMaterialForDike);
Assert.AreEqual(this.geometryCreationOptions.MaterialForShoulder, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeMaterialForShoulder), DamMStabAssembler.XmlAttributeMaterialForShoulder);
Assert.AreEqual(this.geometryCreationOptions.IsUseOriginalPLLineAssignments, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIsUseOriginalPLLineAssignments), DamMStabAssembler.XmlAttributeIsUseOriginalPLLineAssignments);
Assert.AreEqual(this.geometryCreationOptions.IsUseOriginalCalculationOptions, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIsUseOriginalCalculationOptions), DamMStabAssembler.XmlAttributeIsUseOriginalCalculationOptions);
Assert.AreEqual(this.geometryCreationOptions.IsDrySituation, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIsDrySituation), DamMStabAssembler.XmlAttributeIsDrySituation);
Assert.AreEqual(this.geometryCreationOptions.IsDesign, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIsDesign), DamMStabAssembler.XmlAttributeIsDesign);
Assert.AreEqual(this.geometryCreationOptions.PLLineAssignment, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributePLLineAssignment), DamMStabAssembler.XmlAttributePLLineAssignment);
Assert.AreEqual(this.geometryCreationOptions.IntrusionVerticalWaterPressureType, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIntrusionVerticalWaterPressure), DamMStabAssembler.XmlAttributeIntrusionVerticalWaterPressure);
Assert.AreEqual(this.geometryCreationOptions.PenetrationLength, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributePenetrationLength), DamMStabAssembler.XmlAttributePenetrationLength);
XElement designElement = (from element in doc.Root.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementDesign
select element).Single();
Assert.AreEqual(this.design.EmbankmentMaterialname.ToString(),
designElement.AttributeAs(DamMStabAssembler.XmlAttributeEmbankmentMaterialName),
DamMStabAssembler.XmlAttributeEmbankmentMaterialName);
Assert.AreEqual(this.design.PreviousGeometry2DFilename.ToString(),
designElement.AttributeAs(
DamMStabAssembler.XmlAttributePreviousGeometry2DFilename),
DamMStabAssembler.XmlAttributePreviousGeometry2DFilename);
// Profile
IEnumerable soilProfileCollectionElements = from element in doc.Root.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementProfile
select element;
Assert.AreEqual(1, soilProfileCollectionElements.Count(), "Number of profiles");
XElement soilProfileElement = soilProfileCollectionElements.Single();
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeName), String.Format("{0}", DamMStabAssembler.XmlAttributeName));
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Name, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeName), String.Format("{0}", DamMStabAssembler.XmlAttributeName));
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeXCoordinate), String.Format("{0}", DamMStabAssembler.XmlAttributeXCoordinate));
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.X, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeXCoordinate), Precision, String.Format("{0}", DamMStabAssembler.XmlAttributeXCoordinate));
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeYCoordinate), String.Format("{0}", DamMStabAssembler.XmlAttributeYCoordinate));
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Y, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeYCoordinate), Precision, String.Format("{0}", DamMStabAssembler.XmlAttributeYCoordinate));
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributePhreaticLevel), String.Format("{0}", DamMStabAssembler.XmlAttributePhreaticLevel));
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.PhreaticLevel, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributePhreaticLevel), Precision, String.Format("{0}", DamMStabAssembler.XmlAttributePhreaticLevel));
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeHasPhreaticLevel), String.Format("{0}", DamMStabAssembler.XmlAttributeHasPhreaticLevel));
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.HasPhreaticLevel, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeHasPhreaticLevel), String.Format("{0}", DamMStabAssembler.XmlAttributeHasPhreaticLevel));
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeBottomLevel), String.Format("{0}", DamMStabAssembler.XmlAttributeBottomLevel));
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.BottomLevel, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeBottomLevel), Precision, String.Format("{0}", DamMStabAssembler.XmlAttributeBottomLevel));
// Created no PL line so characteristic layers are unassigned
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeBottomSandLayerID), DamMStabAssembler.XmlAttributeBottomSandLayerID);
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeInBetweenSandLayerID), DamMStabAssembler.XmlAttributeInBetweenSandLayerID);
Assert.IsNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeInfiltrationLayerID), DamMStabAssembler.XmlAttributeInfiltrationLayerID);
// Profile layers
IEnumerable layersCollectionElements = from element in soilProfileElement.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementLayers
select element;
Assert.AreEqual(1, layersCollectionElements.Count(), "profile layer collection tag");
IEnumerable layerCollectionElements = from element in layersCollectionElements.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementLayer
select element;
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Layers.Count, layerCollectionElements.Count(), "Number of profile layers");
IEnumerator layerElementEnumerator = layerCollectionElements.GetEnumerator();
foreach (SoilLayer1D layer in damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Layers)
{
layerElementEnumerator.MoveNext();
XElement layerElement = layerElementEnumerator.Current;
Assert.IsNotNull(layerElement.Attribute(DamMStabAssembler.XmlAttributeID), String.Format("{0}", String.Format("ID of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Layers.IndexOf(layer))));
Assert.AreEqual(layer.Id, layerElement.AttributeAs(DamMStabAssembler.XmlAttributeID), String.Format("ID of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Layers.IndexOf(layer)));
Assert.IsNotNull(layerElement.Attribute(DamMStabAssembler.XmlAttributeSoilID), String.Format("{0}", String.Format("SoilID of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Layers.IndexOf(layer))));
Assert.AreEqual(layer.Soil.Name, layerElement.AttributeAs(DamMStabAssembler.XmlAttributeSoilID), String.Format("SoilID of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Layers.IndexOf(layer)));
Assert.IsNotNull(layerElement.Attribute(DamMStabAssembler.XmlAttributeTopLevel), String.Format("{0}", String.Format("TopLevel of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Layers.IndexOf(layer))));
Assert.AreEqual(layer.TopLevel, layerElement.AttributeAs(DamMStabAssembler.XmlAttributeTopLevel), String.Format("TopLevel of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.Layers.IndexOf(layer)));
}
}
[Test]
public void CanCreateAndValidateMStabInputXMLWithNullLayerIDs()
{
foreach (SoilLayer1D layer in this.soilProfile1.Layers)
{
layer.Id = null;
}
// Do the thing: create XML element from SoilProfile
var doc = this.assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
Directory.CreateDirectory(testDirectory);
doc.Save(Path.Combine(testDirectory, testFileNameWithNullLayerIDs));
// Validate against schema
string message;
if (!this.assembler.ValidateSchema(doc, out message))
{
Assert.Fail("SCHEMA VALIDATION: " + message);
}
}
[Test]
public void CanCreateAndValidateMStabInputXMLWithPLLines()
{
// Create PL lines
using (var location = new Location { DamType = DamType.Regional })
{
PLLinesCreator plLineCreator = new PLLinesCreator();
plLineCreator.SoilProfile = this.soilProfile1;
plLineCreator.SurfaceLine = this.surfaceLine1;
plLineCreator.WaterLevelRiverHigh = 4.0;
plLineCreator.WaterLevelPolder = -4.5;
plLineCreator.ModelParametersForPLLines.DampingFactorPL3 = 0.3;
plLineCreator.ModelParametersForPLLines.DampingFactorPL4 = 0.4;
plLineCreator.ModelParametersForPLLines.PenetrationLength = 1.5;
plLineCreator.HeadInPLLine2 = 0.0;
plLineCreator.CreateAllPLLines(location);
var doc = this.assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
Directory.CreateDirectory(testDirectory);
doc.Save(Path.Combine(testDirectory, testFileNameWithPLLines));
// Validate against schema
string message;
if (!this.assembler.ValidateSchema(doc, out message))
{
Assert.Fail("SCHEMA VALIDATION: " + message);
}
var soilProfileCollectionElements = from element in doc.Root.Descendants()
where element.Name.LocalName == DamMStabAssembler.XmlElementProfile
select element;
Assert.AreEqual(1, soilProfileCollectionElements.Count(), "Number of profiles");
var soilProfileElement = soilProfileCollectionElements.Single();
// Created PL lines so characteristic layers should be assigned
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeBottomSandLayerID), DamMStabAssembler.XmlAttributeBottomSandLayerID);
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.BottomAquiferLayer.Id, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeBottomSandLayerID),
DamMStabAssembler.XmlAttributeBottomSandLayerID);
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeInBetweenSandLayerID), DamMStabAssembler.XmlAttributeInBetweenSandLayerID);
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.InBetweenAquiferLayer.Id, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeInBetweenSandLayerID),
DamMStabAssembler.XmlAttributeInBetweenSandLayerID);
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeInfiltrationLayerID), DamMStabAssembler.XmlAttributeInfiltrationLayerID);
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.SoilProfile.InfiltrationLayer.Id, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeInfiltrationLayerID),
DamMStabAssembler.XmlAttributeInfiltrationLayerID);
}
}
///
/// SearchMethod test
/// The default key value pair for the attribute: SearchMethod="Grid"
///
[Test]
public void VerifyThatTheDefaultKeyValuePairSearchMethodIsWritten()
{
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementModel);
Assert.IsNotNull(modelElement);
const string expectedValue = "Grid";
Assert.AreEqual(expectedValue, modelElement.AttributeAs(DamMStabAssembler.XmlAttributeSearchMethod));
}
///
/// SearchMethod test
/// The key value pair for the attribute should be: SearchMethod="GeneticAlgorithm"
///
[Test]
public void VerifyThatTheAssemblerCorrectlyWritesTheSearchMethodAttributeValueWhenSetToGrid()
{
assembler = new DamMStabAssembler();
this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.SearchMethod = MStabSearchMethod.Grid;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementModel);
Assert.IsNotNull(modelElement);
const string expectedValue = "Grid";
Assert.AreEqual(expectedValue, modelElement.AttributeAs(DamMStabAssembler.XmlAttributeSearchMethod));
}
///
/// UseZones
///
[Test]
public void VerifyThatTheAttributeZonesTypeIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.CalculationOptions.ZonesType = MStabZonesType.ZoneAreas;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementCalculationOptions);
Assert.IsNotNull(element);
Assert.AreEqual(MStabZonesType.ZoneAreas, element.AttributeAs(DamMStabAssembler.XmlAttributeZonesType));
}
///
/// ZoneAreas
///
[Test]
public void VerifyThatElementZoneAreasIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZoneAreas = new MStabZoneAreas { };
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementZoneAreas);
Assert.IsNotNull(element);
const int expectedValue = 1;
Assert.AreEqual(expectedValue, element.Attributes("DikeTableHeight").Count());
Assert.AreEqual(expectedValue, element.Attributes("DikeTableWidth").Count());
Assert.AreEqual(expectedValue, element.Attributes("XCoordinateDikeTopAtRiver").Count());
Assert.AreEqual(expectedValue, element.Attributes("XCoordinateStartRestProfile").Count());
Assert.AreEqual(7, element.Attributes().Count());
}
///
/// ZoneAreas test
///
[Test]
public void VerifyThatElementZoneAreasIsNotWrittenByDefault()
{
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZoneAreas = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementZoneAreas);
Assert.IsNull(modelElement);
}
///
/// ZoneAreas
///
[Test]
public void VerifyThatElementForbiddenZoneIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ForbiddenZone = new MStabForbiddenZone() { };
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementForbiddenZone);
Assert.IsNotNull(element);
const int expectedValue = 1;
Assert.AreEqual(expectedValue, element.Attributes("IsXEntryMinUsed").Count());
Assert.AreEqual(expectedValue, element.Attributes("IsXEntryMaxUsed").Count());
Assert.AreEqual(expectedValue, element.Attributes("XEntryMin").Count());
Assert.AreEqual(expectedValue, element.Attributes("XEntryMax").Count());
Assert.AreEqual(4, element.Attributes().Count());
}
///
/// ZoneAreas test
///
[Test]
public void VerifyThatElementForbiddenZoneIsNotWrittenByDefault()
{
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.ZoneAreas = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementForbiddenZone);
Assert.IsNull(modelElement);
}
///
/// Traffic Load
///
[Test]
public void VerifyThatElementTrafficLoadIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
this.surfaceLine1.EnsurePointOfType(30.1, 8.56, CharacteristicPointType.TrafficLoadOutside);
this.surfaceLine1.EnsurePointOfType(31.2, 8.62, CharacteristicPointType.TrafficLoadInside);
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementTrafficLoad);
Assert.IsNotNull(element);
Assert.AreEqual(1, element.Attributes("XCoordinateAtRiver").Count());
Assert.AreEqual(1, element.Attributes("XCoordinateAtPolder").Count());
Assert.AreEqual(1, element.Attributes("Load").Count());
}
///
/// Traffic load
///
[Test]
public void VerifyThatElementTrafficLoadIsNotWrittenByDefault()
{
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var trafficLoadElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementTrafficLoad);
Assert.IsNull(trafficLoadElement);
}
///
/// Calculation options
///
[Test]
public void VerifyThatElementCalculationOptionsIsWrittenWhenSet()
{
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.CalculationOptions = new MStabCalculationOptions();
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementCalculationOptions);
Assert.IsNotNull(element);
Assert.AreEqual(1, element.Attributes("MinimalCircleDepth").Count());
Assert.AreEqual(1, element.Attributes("ZonesType").Count());
}
///
/// Calculation options
///
[Test]
public void VerifyThatElementCalculationOptionsIsNotWrittenByDefault()
{
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.CalculationOptions = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var calculationOptionsElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementCalculationOptions);
Assert.IsNull(calculationOptionsElement);
}
///
/// Geometry Creation Options
///
[Test]
public void VerifyThatElementGeometryCreationOptionsIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions = this.geometryCreationOptions;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementGeometryCreationOptions);
Assert.IsNotNull(element);
Assert.AreEqual(1, element.Attributes(DamMStabAssembler.XmlAttributeSoilGeometryType).Count());
Assert.AreEqual(1, element.Attributes(DamMStabAssembler.XmlAttributeXOffsetSoilGeometry2DOrigin).Count());
Assert.AreEqual(1, element.Attributes(DamMStabAssembler.XmlAttributeMaterialForDike).Count());
Assert.AreEqual(1, element.Attributes(DamMStabAssembler.XmlAttributeMaterialForShoulder).Count());
Assert.AreEqual(1, element.Attributes(DamMStabAssembler.XmlAttributeIsUseOriginalPLLineAssignments).Count());
Assert.AreEqual(1, element.Attributes(DamMStabAssembler.XmlAttributeIsUseOriginalCalculationOptions).Count());
Assert.AreEqual(1, element.Attributes(DamMStabAssembler.XmlAttributeIsDrySituation).Count());
Assert.AreEqual(1, element.Attributes(DamMStabAssembler.XmlAttributeIsDesign).Count());
}
///
/// Geometry Creation Options
///
[Test]
public void VerifyThatElementGeometryCreationOptionsIsNotWrittenByDefault()
{
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var geometryCreationOptionsElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementGeometryCreationOptions);
Assert.IsNull(geometryCreationOptionsElement);
}
///
/// IsUseOriginalPLLineAssignments test
/// The key value pair for the attribute should be: IsUseOriginalPLLineAssignments="true"
///
[Test]
public void VerifyThatTheAssemblerCorrectlyWritesTheIsUseOriginalPLLineAssignmentsAttributeValueWhenSetToTrue()
{
assembler = new DamMStabAssembler();
this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.IsUseOriginalPLLineAssignments = true;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementGeometryCreationOptions);
Assert.IsNotNull(modelElement);
const string expectedValue = "true";
Assert.AreEqual(expectedValue, modelElement.AttributeAs(DamMStabAssembler.XmlAttributeIsUseOriginalPLLineAssignments));
}
///
/// IsUseOriginalCalculationOptions test
/// The key value pair for the attribute should be: IsUseOriginalCalculationOptions="true"
///
[Test]
public void VerifyThatTheAssemblerCorrectlyWritesTheIsUseOriginalCalculationOptionsAttributeValueWhenSetToTrue()
{
assembler = new DamMStabAssembler();
this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.IsUseOriginalCalculationOptions = true;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementGeometryCreationOptions);
Assert.IsNotNull(modelElement);
const string expectedValue = "true";
Assert.AreEqual(expectedValue, modelElement.AttributeAs(DamMStabAssembler.XmlAttributeIsUseOriginalCalculationOptions));
}
///
/// IsDrySituation test
/// The key value pair for the attribute should be: IsDrySituation="true"
///
[Test]
public void VerifyThatTheAssemblerCorrectlyWritesTheIsDrySituationAttributeValueWhenSetToTrue()
{
assembler = new DamMStabAssembler();
this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.IsDrySituation = true;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementGeometryCreationOptions);
Assert.IsNotNull(modelElement);
const string expectedValue = "true";
Assert.AreEqual(expectedValue, modelElement.AttributeAs(DamMStabAssembler.XmlAttributeIsDrySituation));
}
///
/// IsDesign test
/// The key value pair for the attribute should be: IsDesign="true"
///
[Test]
public void VerifyThatTheAssemblerCorrectlyWritesTheIsDesignAttributeValueWhenSetToTrue()
{
assembler = new DamMStabAssembler();
this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.GeometryCreationOptions.IsDesign = true;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementGeometryCreationOptions);
Assert.IsNotNull(modelElement);
const string expectedValue = "true";
Assert.AreEqual(expectedValue, modelElement.AttributeAs(DamMStabAssembler.XmlAttributeIsDesign));
}
///
/// Sheetpiling
///
[Test]
public void VerifyThatElementSheetPilingIsNotWrittenByDefault()
{
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.SheetPiling = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var sheetPilingElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementSheetPiling);
Assert.IsNull(sheetPilingElement);
}
///
/// Sheetpiling
///
[Test]
public void VerifyThatElementSheetPilingIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.SheetPiling = this.sheetPiling;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementSheetPiling);
Assert.IsNotNull(element);
Assert.AreEqual(1, element.Attributes("XCoordinate").Count());
Assert.AreEqual(1, element.Attributes("YCoordinate").Count());
Assert.AreEqual(1, element.Attributes("ZCoordinate").Count());
Assert.AreEqual(1, element.Attributes("Length").Count());
}
///
/// Horizontal Balance Area
///
[Test]
public void VerifyThatElementHorizontalBalanceAreaIsNotWrittenByDefault()
{
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.HorizontalBalanceArea = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var horizontalBalanceAreaElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementHorizontalBalanceArea);
Assert.IsNull(horizontalBalanceAreaElement);
}
///
/// Horizontal Balance Area
///
[Test]
public void VerifyThatElementHorizontalBalanceAreaIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.HorizontalBalanceArea = this.horizontalBalanceArea;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementHorizontalBalanceArea);
Assert.IsNotNull(element);
Assert.AreEqual(1, element.Attributes("XLeft").Count());
Assert.AreEqual(1, element.Attributes("XRight").Count());
Assert.AreEqual(1, element.Attributes("YTop").Count());
Assert.AreEqual(1, element.Attributes("YBottom").Count());
Assert.AreEqual(1, element.Attributes("PlaneCount").Count());
}
///
/// SlipCircleDefinition
///
[Test]
public void VerifyThatElementSlipCircleDefinitionIsNotWrittenByDefault()
{
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var slipCircledefinitionElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementSlipCircleDefinition);
Assert.IsNull(slipCircledefinitionElement);
}
///
/// SlipCircleDefinition
///
[Test]
public void VerifyThatElementSlipCircleDefinitionIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab.MStabParameters.SlipCircleDefinition = this.slipCircleDefinition;
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementSlipCircleDefinition);
Assert.IsNotNull(element);
Assert.AreEqual(1, element.Attributes("XCoordinateLastUpliftPoint").Count());
Assert.AreEqual(1, element.Attributes("UpliftVanTangentLinesDefinition").Count());
Assert.AreEqual(1, element.Attributes("GridSizeDetermination").Count());
Assert.AreEqual(1, element.Attributes("UpliftVanLeftGridVerticalPointCount").Count());
Assert.AreEqual(1, element.Attributes("UpliftVanLeftGridVerticalPointDistance").Count());
Assert.AreEqual(1, element.Attributes("UpliftVanLeftGridHorizontalPointCount").Count());
Assert.AreEqual(1, element.Attributes("UpliftVanLeftGridHorizontalPointDistance").Count());
Assert.AreEqual(1, element.Attributes("UpliftVanRightGridVerticalPointCount").Count());
Assert.AreEqual(1, element.Attributes("UpliftVanRightGridVerticalPointDistance").Count());
Assert.AreEqual(1, element.Attributes("UpliftVanRightGridHorizontalPointCount").Count());
Assert.AreEqual(1, element.Attributes("UpliftVanRightGridHorizontalPointDistance").Count());
Assert.AreEqual(1, element.Attributes("BishopGridVerticalPointCount").Count());
Assert.AreEqual(1, element.Attributes("BishopGridVerticalPointDistance").Count());
Assert.AreEqual(1, element.Attributes("BishopGridHorizontalPointCount").Count());
Assert.AreEqual(1, element.Attributes("BishopGridHorizontalPointDistance").Count());
}
///
/// Characteristic points
///
[Test]
public void VerifyThatCharacteristicPointsAreWritten()
{
assembler = new DamMStabAssembler();
this.surfaceLine1.EnsurePointOfType(30, 1.0, CharacteristicPointType.DikeToeAtRiver);
this.surfaceLine1.EnsurePointOfType(35, 11.0, CharacteristicPointType.DikeTopAtRiver);
this.surfaceLine1.EnsurePointOfType(40, 12.0, CharacteristicPointType.DikeTopAtPolder);
this.surfaceLine1.EnsurePointOfType(45, 2.0, CharacteristicPointType.DikeToeAtPolder);
var doc = assembler.CreateDataTransferObject(this.damFailureMechanismeCalculationSpecification.FailureMechanismeParamatersMStab);
var element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementCharacteristicPoints);
Assert.IsNotNull(element);
element = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementCharacteristicPoint);
Assert.IsNotNull(element);
Assert.AreEqual(1, element.Attributes("XCoord").Count());
Assert.AreEqual(1, element.Attributes("YCoord").Count());
Assert.AreEqual(1, element.Attributes("CharacteristicPointType").Count());
}
}
}