// Copyright (C) Stichting Deltares 2018. 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;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using Deltares.DamEngine.Calculators.KernelWrappers.DamMacroStabilityCommon.Assemblers;
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Data.General.PlLines;
using Deltares.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Geotechnics;
using NUnit.Framework;
namespace Deltares.DamEngine.Calculators.Tests.KernelWrappers.DamMacroStabilityCommon
{
[TestFixture]
public class DamMStabAssemblerTest
{
#region Setup/Teardown
[SetUp]
public void TestSetup()
{
assembler = new DamMStabAssembler();
// Dike
dike = new Dike();
dike.Name = "Dike";
// Segments
segment1 = new Segment();
segment1.Name = "Segment1";
// Locations
location1 = new Location();
location1.Name = "Location1";
location1.Segment = segment1;
dike.Locations.Add(location1);
// Surface lines
surfaceLine1 = new SurfaceLine2
{
Name = "SurfaceLine1",
CharacteristicPoints = { GeometryMustContainPoint = true },
Geometry = new GeometryPointString()
};
dike.SurfaceLines2.Add(surfaceLine1);
surfaceLine2 = new SurfaceLine2
{
Name = "SurfaceLine2",
CharacteristicPoints = { GeometryMustContainPoint = true },
Geometry = new GeometryPointString()
};
dike.SurfaceLines2.Add(surfaceLine2);
// Soil profiles
soilProfile1 = new SoilProfile1D();
soilProfile1.Name = "SoilProfile1";
soilProfile1.BottomLevel = -25.3;
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.Name = "L1";
layer.TopLevel = -1.52;
layer.Soil = soilClay;
layer.IsAquifer = false;
soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Name = "L2";
layer.TopLevel = -3.18;
layer.Soil = soilPeat;
layer.IsAquifer = false;
soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Name = "L3";
layer.TopLevel = -7.37;
layer.Soil = soilSand;
layer.IsAquifer = true;
soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Name = "L4";
layer.TopLevel = -12.28;
layer.Soil = soilPeat;
layer.IsAquifer = false;
soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Name = "L5";
layer.TopLevel = -15.62;
layer.Soil = soilClay;
layer.IsAquifer = false;
soilProfile1.Layers.Add(layer);
layer = new SoilLayer1D();
layer.Name = "L6";
layer.TopLevel = -18.39;
layer.Soil = soilSand;
layer.IsAquifer = true;
soilProfile1.Layers.Add(layer);
dike.SoilProfiles.Add(soilProfile1);
// Locations' Segments
location1.Segment = segment1;
// Locations' surface lines
location1.SurfaceLine = surfaceLine1;
// Segments' Soil profile probabilities
// segment1.AddSoilProfileProbability(soilProfile1, 100.0, FailureMechanismSystemType.StabilityInside);
// Surface lines' points
surfaceLine1.EnsurePointOfType(15.3, -3.52, CharacteristicPointType.SurfaceLevelOutside);
surfaceLine1.EnsurePointOfType(19.4, -1.46, CharacteristicPointType.DikeToeAtRiver);
surfaceLine1.EnsurePointOfType(27.4, 8.56, CharacteristicPointType.DikeTopAtRiver);
surfaceLine1.EnsurePointOfType(35.2, 8.62, CharacteristicPointType.DikeTopAtPolder);
surfaceLine1.EnsurePointOfType(41.5, -3.76, CharacteristicPointType.DikeToeAtPolder);
surfaceLine1.EnsurePointOfType(85.4, -3.61, CharacteristicPointType.SurfaceLevelInside);
surfaceLine2.EnsurePointOfType(0.0, -1.46, CharacteristicPointType.SurfaceLevelOutside);
surfaceLine2.EnsurePointOfType(19.4, -1.46, CharacteristicPointType.DikeToeAtRiver);
surfaceLine2.EnsurePointOfType(27.4, 8.56, CharacteristicPointType.DikeTopAtRiver);
surfaceLine2.EnsurePointOfType(35.2, 8.62, CharacteristicPointType.DikeTopAtPolder);
surfaceLine2.EnsurePointOfType(41.5, -3.76, CharacteristicPointType.DikeToeAtPolder);
surfaceLine2.EnsurePoint(46.7, -3.82);
surfaceLine2.EnsurePoint(47.5, -4.78);
surfaceLine2.EnsurePoint(51.2, -4.82);
surfaceLine2.EnsurePoint(53.1, -3.78);
surfaceLine2.EnsurePointOfType(85.4, -3.61, CharacteristicPointType.SurfaceLevelInside);
// PL Lines
peelLines = new PlLines();
peelLine1 = new PlLine();
peelLine1.Name = "PLLine1";
peelLine1.IsPhreatic = false;
peelLine1.BoundaryLayer = 2;
peelLine1.Points.Add(new PlLinePoint(35.2, -7.56));
peelLine1.Points.Add(new PlLinePoint(42.5, -6.12));
peelLine1.Points.Add(new PlLinePoint(45.3, -8.73));
peelLines.Lines[PlLineType.Pl1] = peelLine1;
peelLine2 = new PlLine();
peelLine2.Name = "PLLine2";
peelLine2.IsPhreatic = true;
peelLine2.BoundaryLayer = 5;
peelLine2.Points.Add(new PlLinePoint(16.2, 3.23));
peelLine2.Points.Add(new PlLinePoint(18.4, 1.19));
peelLine2.Points.Add(new PlLinePoint(21.8, -0.45));
peelLine2.Points.Add(new PlLinePoint(22.5, -1.73));
peelLines.Lines[PlLineType.Pl1] = peelLine2;
// Calculation options
calculationOptions = new MStabCalculationOptions();
calculationOptions.MinimalCircleDepth = 1.1;
// Zone areas
zoneAreas = new MStabZoneAreas();
zoneAreas.DikeTableHeight = 12.0;
zoneAreas.DikeTableWidth = 1.5;
zoneAreas.XCoordinateDikeTopAtRiver = 10.0;
zoneAreas.XCoordinateDikeTopAtPolder = 18.0;
zoneAreas.XCoordinateStartRestProfile = 20.0;
zoneAreas.SafetyFactorZone1A = 1.2;
zoneAreas.SafetyFactorZone1B = 1.3;
// Geometry creation options
geometryCreationOptions = new MStabGeometryCreationOptions();
geometryCreationOptions.SoilProfileType = SoilProfileType.ProfileType2D;
geometryCreationOptions.SoilGeometry2DFilename = "geometry2D filename";
geometryCreationOptions.XOffsetSoilGeometry2DOrigin = 12.0;
geometryCreationOptions.MaterialForDike = "clay dike";
geometryCreationOptions.MaterialForShoulder = "sand shoulder";
geometryCreationOptions.IsUseOriginalPlLineAssignments = true;
geometryCreationOptions.IsUseOriginalCalculationOptions = true;
geometryCreationOptions.IsDrySituation = true;
geometryCreationOptions.IsDesign = true;
// MStabDesignEmbankment design
design = new EmbankmentDesignParameters();
design.EmbankmentMaterialname = "soiltest";
design.PreviousGeometry2DFilename = "soilname/Path/testFileNameWithPLLines.sti";
// Sheetpiling
sheetPiling = new SheetPiling();
sheetPiling.XCoordinate = 11.11;
sheetPiling.YCoordinate = 22.22;
sheetPiling.ZCoordinate = 33.33;
sheetPiling.Length = 20.0;
// Horizontal Balance Area
horizontalBalanceArea = new HorizontalBalanceArea();
horizontalBalanceArea.XLeft = 13.11;
horizontalBalanceArea.XRight = 14.11;
horizontalBalanceArea.YTop = 15.11;
horizontalBalanceArea.YBottom = 16.11;
horizontalBalanceArea.PlaneCount = 17;
// Slip Circle Definition
slipCircleDefinition = new SlipCircleDefinition();
slipCircleDefinition.XCoordinateLastUpliftPoint = 18.11;
slipCircleDefinition.UpliftVanTangentLinesDefinition = TangentLinesDefinition.Specified;
slipCircleDefinition.GridSizeDetermination = GridSizeDetermination.Specified;
slipCircleDefinition.UpliftVanLeftGridVerticalPointCount = 19;
slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance = 20.11;
slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount = 21;
slipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance = 22.11;
slipCircleDefinition.UpliftVanRightGridVerticalPointCount = 23;
slipCircleDefinition.UpliftVanRightGridVerticalPointDistance = 24.11;
slipCircleDefinition.UpliftVanRightGridHorizontalPointCount = 25;
slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance = 26.11;
slipCircleDefinition.BishopGridVerticalPointCount = 27;
slipCircleDefinition.BishopGridVerticalPointDistance = 28.11;
slipCircleDefinition.BishopGridHorizontalPointCount = 29;
slipCircleDefinition.BishopGridHorizontalPointDistance = 30.11;
// DAMMStab (class containing all)
damFailureMechanismeCalculationSpecification = new DamFailureMechanismeCalculationSpecification
{
FailureMechanismParametersMStab = new FailureMechanismParametersMStab()
{
Location = location1,
SurfaceLine = location1.SurfaceLine,
PlLines = peelLines,
SoilProfile = soilProfile1,
EmbankmentDesignParameters = design,
MStabParameters = new MStabParameters()
{
SoilDatabaseName = @"X:\GeoData\Soils\TestDatabase.mdb",
Model = MStabModelType.UpliftVan,
ShearStrength = MStabShearStrength.CPhi,
ProjectFileName = @"X:\MStab\Demo.sti",
ZoneAreas = zoneAreas,
GeometryCreationOptions = geometryCreationOptions,
SheetPiling = sheetPiling,
HorizontalBalanceArea = horizontalBalanceArea,
SlipCircleDefinition = slipCircleDefinition,
CalculationOptions = calculationOptions
}
}
};
}
[TearDown]
public void TearDown()
{
}
#endregion
private const string TestDirectory = "TestResults";
private const string TestFileName = "DikeMStabAssemblerTest.xml";
private const string TestFileNameWithPlLines = "DikeMStabAssemblerTestWithPLLines.xml";
private const double Precision = 1e-8;
private DamFailureMechanismeCalculationSpecification damFailureMechanismeCalculationSpecification;
private DamMStabAssembler assembler;
private Dike dike;
private 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 SheetPiling sheetPiling;
private HorizontalBalanceArea horizontalBalanceArea;
private EmbankmentDesignParameters design;
private SlipCircleDefinition slipCircleDefinition;
[TestFixtureSetUp]
public void TestFixtureSetup()
{
}
[Test]
public void CanCreateAndValidateMStabInputXML()
{
// Do the thing: create XML element from SoilProfile
geometryCreationOptions.IntrusionVerticalWaterPressureType = IntrusionVerticalWaterPressureType.HydroStatic;
geometryCreationOptions.PenetrationLength = 1.4;
XDocument doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
Directory.CreateDirectory(TestDirectory);
doc.Save(Path.Combine(TestDirectory, TestFileName));
// Validate against schema
string message;
if (!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(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.ProjectFileName, inputElement.AttributeAs(DamMStabAssembler.XmlAttributeMStabFileName), "SoilDB Name");
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.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(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.Location.SurfaceLine.Geometry.Count, surfacePointElements.Count(), "Number of surface line points");
IEnumerator surfacePointElementEnumerator = surfacePointElements.GetEnumerator();
foreach (GeometryPoint point in damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.Location.SurfaceLine.Geometry.Points)
{
surfacePointElementEnumerator.MoveNext();
XElement surfaceLinePointElement = surfacePointElementEnumerator.Current;
Assert.AreEqual(point.X, surfaceLinePointElement.AttributeAs(DamMStabAssembler.XmlAttributeXCoord), Precision, String.Format("X of GeometryPoint #{0}",
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.Location.SurfaceLine.Geometry.Points.IndexOf(point)));
Assert.AreEqual(point.Z, surfaceLinePointElement.AttributeAs(DamMStabAssembler.XmlAttributeYCoord), Precision, String.Format("Z of GeometryPoint #{0}",
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.Location.SurfaceLine.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(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.PlLines.PlLineCount, peelLineCollectionElements.Count(), "Number of PL lines");
IEnumerator peelLineElementEnumerator = peelLineCollectionElements.GetEnumerator();
foreach (PlLineType plLineType in Enum.GetValues(typeof(PlLineType)))
{
PlLine line = damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.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(zoneAreas.DikeTableHeight, zoneAreasElement.AttributeAs("DikeTableHeight"), "DikeTableHeight");
Assert.AreEqual(zoneAreas.DikeTableWidth, zoneAreasElement.AttributeAs("DikeTableWidth"), "DikeTableWidth");
Assert.AreEqual(zoneAreas.XCoordinateDikeTopAtRiver, zoneAreasElement.AttributeAs("XCoordinateDikeTopAtRiver"), "XCoordinateDikeTopAtRiver");
Assert.AreEqual(zoneAreas.XCoordinateDikeTopAtPolder, zoneAreasElement.AttributeAs("XCoordinateDikeTopAtPolder"), "XCoordinateDikeTopAtPolder");
Assert.AreEqual(zoneAreas.XCoordinateStartRestProfile, zoneAreasElement.AttributeAs("XCoordinateStartRestProfile"), "XCoordinateStartRestProfile");
Assert.AreEqual(zoneAreas.SafetyFactorZone1A, zoneAreasElement.AttributeAs("SafetyFactorZone1A"), "SafetyFactorZone1A");
Assert.AreEqual(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(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("SoilGeometry2D", geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeSoilGeometryType), DamMStabAssembler.XmlAttributeSoilGeometryType);
Assert.AreEqual(geometryCreationOptions.SoilGeometry2DFilename,
geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeSoilGeometry2DFilename), DamMStabAssembler.XmlAttributeSoilGeometry2DFilename);
Assert.AreEqual(geometryCreationOptions.MaterialForDike, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeMaterialForDike), DamMStabAssembler.XmlAttributeMaterialForDike);
Assert.AreEqual(geometryCreationOptions.MaterialForShoulder, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeMaterialForShoulder), DamMStabAssembler.XmlAttributeMaterialForShoulder);
Assert.AreEqual(geometryCreationOptions.IsUseOriginalPlLineAssignments, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIsUseOriginalPLLineAssignments), DamMStabAssembler.XmlAttributeIsUseOriginalPLLineAssignments);
Assert.AreEqual(geometryCreationOptions.IsUseOriginalCalculationOptions, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIsUseOriginalCalculationOptions), DamMStabAssembler.XmlAttributeIsUseOriginalCalculationOptions);
Assert.AreEqual(geometryCreationOptions.IsDrySituation, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIsDrySituation), DamMStabAssembler.XmlAttributeIsDrySituation);
Assert.AreEqual(geometryCreationOptions.IsDesign, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIsDesign), DamMStabAssembler.XmlAttributeIsDesign);
Assert.AreEqual(geometryCreationOptions.PlLineAssignment, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributePLLineAssignment), DamMStabAssembler.XmlAttributePLLineAssignment);
Assert.AreEqual(geometryCreationOptions.IntrusionVerticalWaterPressureType, geometryCreationOptionsElement.AttributeAs(DamMStabAssembler.XmlAttributeIntrusionVerticalWaterPressure), DamMStabAssembler.XmlAttributeIntrusionVerticalWaterPressure);
Assert.AreEqual(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(design.EmbankmentMaterialname.ToString(),
designElement.AttributeAs(DamMStabAssembler.XmlAttributeEmbankmentMaterialName),
DamMStabAssembler.XmlAttributeEmbankmentMaterialName);
Assert.AreEqual(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.FailureMechanismParametersMStab.SoilProfile.Name, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeName), String.Format("{0}", DamMStabAssembler.XmlAttributeName));
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeBottomLevel), String.Format("{0}", DamMStabAssembler.XmlAttributeBottomLevel));
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.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.FailureMechanismParametersMStab.SoilProfile.Layers.Count, layerCollectionElements.Count(), "Number of profile layers");
IEnumerator layerElementEnumerator = layerCollectionElements.GetEnumerator();
foreach (SoilLayer1D layer in damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.Layers)
{
layerElementEnumerator.MoveNext();
XElement layerElement = layerElementEnumerator.Current;
Assert.IsNotNull(layerElement.Attribute(DamMStabAssembler.XmlAttributeID), String.Format("{0}", String.Format("ID of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.Layers.IndexOf(layer))));
Assert.AreEqual(layer.Name, layerElement.AttributeAs(DamMStabAssembler.XmlAttributeID), String.Format("ID of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.Layers.IndexOf(layer)));
Assert.IsNotNull(layerElement.Attribute(DamMStabAssembler.XmlAttributeSoilID), String.Format("{0}", String.Format("SoilID of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.Layers.IndexOf(layer))));
Assert.AreEqual(layer.Soil.Name, layerElement.AttributeAs(DamMStabAssembler.XmlAttributeSoilID), String.Format("SoilID of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.Layers.IndexOf(layer)));
Assert.IsNotNull(layerElement.Attribute(DamMStabAssembler.XmlAttributeTopLevel), String.Format("{0}", String.Format("TopLevel of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.Layers.IndexOf(layer))));
Assert.AreEqual(layer.TopLevel, layerElement.AttributeAs(DamMStabAssembler.XmlAttributeTopLevel), String.Format("TopLevel of layer #{0}", damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.Layers.IndexOf(layer)));
}
}
[Test]
public void CanCreateAndValidateMStabInputXMLWithPLLines()
{
// Create PL lines
var location = new Location {DamType = DamType.Regional};
Calculators.PlLinesCreator.PlLinesCreator plLineCreator = new Calculators.PlLinesCreator.PlLinesCreator();
plLineCreator.SoilProfile = soilProfile1;
plLineCreator.SurfaceLine = 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 = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
Directory.CreateDirectory(TestDirectory);
doc.Save(Path.Combine(TestDirectory, TestFileNameWithPlLines));
string message;
if (!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();
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeBottomSandLayerID), DamMStabAssembler.XmlAttributeBottomSandLayerID);
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.BottomAquiferLayer.Name, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeBottomSandLayerID),
DamMStabAssembler.XmlAttributeBottomSandLayerID);
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeInBetweenSandLayerID), DamMStabAssembler.XmlAttributeInBetweenSandLayerID);
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.InBetweenAquiferLayer.Name, soilProfileElement.AttributeAs(DamMStabAssembler.XmlAttributeInBetweenSandLayerID),
DamMStabAssembler.XmlAttributeInBetweenSandLayerID);
Assert.IsNotNull(soilProfileElement.Attribute(DamMStabAssembler.XmlAttributeInfiltrationLayerID), DamMStabAssembler.XmlAttributeInfiltrationLayerID);
Assert.AreEqual(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.SoilProfile.InfiltrationLayer.Name, 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(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.SearchMethod = MStabSearchMethod.Grid;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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.FailureMechanismParametersMStab.MStabParameters.CalculationOptions.ZonesType = MStabZonesType.ZoneAreas;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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.FailureMechanismParametersMStab.MStabParameters.ZoneAreas = new MStabZoneAreas { };
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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.FailureMechanismParametersMStab.MStabParameters.ZoneAreas = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementZoneAreas);
Assert.IsNull(modelElement);
}
///
/// ZoneAreas
///
[Test]
public void VerifyThatElementForbiddenZoneIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.ForbiddenZone = new MStabForbiddenZone() { };
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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.FailureMechanismParametersMStab.MStabParameters.ZoneAreas = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
var modelElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementForbiddenZone);
Assert.IsNull(modelElement);
}
///
/// Traffic Load
///
[Test]
public void VerifyThatElementTrafficLoadIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
surfaceLine1.EnsurePointOfType(30.1, 8.56, CharacteristicPointType.TrafficLoadOutside);
surfaceLine1.EnsurePointOfType(31.2, 8.62, CharacteristicPointType.TrafficLoadInside);
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
var trafficLoadElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementTrafficLoad);
Assert.IsNull(trafficLoadElement);
}
///
/// Calculation options
///
[Test]
public void VerifyThatElementCalculationOptionsIsWrittenWhenSet()
{
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.CalculationOptions = new MStabCalculationOptions();
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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.FailureMechanismParametersMStab.MStabParameters.CalculationOptions = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
var calculationOptionsElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementCalculationOptions);
Assert.IsNull(calculationOptionsElement);
}
///
/// Geometry Creation Options
///
[Test]
public void VerifyThatElementGeometryCreationOptionsIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.GeometryCreationOptions = geometryCreationOptions;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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.FailureMechanismParametersMStab.MStabParameters.GeometryCreationOptions = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.GeometryCreationOptions.IsUseOriginalPlLineAssignments = true;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.GeometryCreationOptions.IsUseOriginalCalculationOptions = true;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.GeometryCreationOptions.IsDrySituation = true;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.GeometryCreationOptions.IsDesign = true;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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.FailureMechanismParametersMStab.MStabParameters.SheetPiling = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
var sheetPilingElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementSheetPiling);
Assert.IsNull(sheetPilingElement);
}
///
/// Sheetpiling
///
[Test]
public void VerifyThatElementSheetPilingIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.SheetPiling = sheetPiling;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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.FailureMechanismParametersMStab.MStabParameters.HorizontalBalanceArea = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
var horizontalBalanceAreaElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementHorizontalBalanceArea);
Assert.IsNull(horizontalBalanceAreaElement);
}
///
/// Horizontal Balance Area
///
[Test]
public void VerifyThatElementHorizontalBalanceAreaIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.HorizontalBalanceArea = horizontalBalanceArea;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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.FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition = null;
assembler = new DamMStabAssembler();
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
var slipCircledefinitionElement = doc.GetFirstOrDefaultElementByLocalName(DamMStabAssembler.XmlElementSlipCircleDefinition);
Assert.IsNull(slipCircledefinitionElement);
}
///
/// SlipCircleDefinition
///
[Test]
public void VerifyThatElementSlipCircleDefinitionIsWrittenWhenSet()
{
assembler = new DamMStabAssembler();
damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab.MStabParameters.SlipCircleDefinition = slipCircleDefinition;
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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();
surfaceLine1.EnsurePointOfType(30, 1.0, CharacteristicPointType.DikeToeAtRiver);
surfaceLine1.EnsurePointOfType(35, 11.0, CharacteristicPointType.DikeTopAtRiver);
surfaceLine1.EnsurePointOfType(40, 12.0, CharacteristicPointType.DikeTopAtPolder);
surfaceLine1.EnsurePointOfType(45, 2.0, CharacteristicPointType.DikeToeAtPolder);
var doc = assembler.CreateDataTransferObject(damFailureMechanismeCalculationSpecification.FailureMechanismParametersMStab);
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());
}
}
}