//----------------------------------------------------------------------- // // Copyright (c) 2010 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 15-06-2010 // Toplevel Calculator object //----------------------------------------------------------------------- using Deltares.Geotechnics.Soils; using Deltares.Geotechnics.SurfaceLines; using Deltares.Geotechnics.TestUtils; namespace Deltares.Dam.Tests { using System; using Deltares.Dam.Data; using NUnit.Framework; using Deltares.Geotechnics; using Deltares.Soilbase; [TestFixture] public class Geometry2DTo1DConverterTest { const double cTolerance = 0.00001; string soilGeometry2DName = @"TestData\1D1.sti"; string soilDatabaseName = @"TestData\soilmaterials.mdb"; string cDikeMaterial = "OA"; SurfaceLine2 surfaceLine; Soil dikeEmbankmentMaterial; [TestFixtureSetUp] public void FixtureSetup() { surfaceLine = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1(); dikeEmbankmentMaterial = new Soil(); dikeEmbankmentMaterial.Name = cDikeMaterial; } [SetUp] public void Setup() { } [TestFixtureTearDown] public void FixtureTearDown() { surfaceLine.Dispose(); } [Test] public void CanCreateSoilProfileIfSurfaceLinePointBelowGeometrySurface() { var soilBaseDB = SoilbaseDB.Create(soilDatabaseName); var geometry2DTo1DConverter = new Geometry2DTo1DConverter(soilGeometry2DName, surfaceLine, dikeEmbankmentMaterial, soilBaseDB.CreateSoilList()); SoilProfile1D soilProfile = geometry2DTo1DConverter.Convert(64.0); Assert.AreEqual(6, soilProfile.Layers.Count); Assert.AreEqual("DKN5", soilProfile.Layers[0].Name); Assert.AreEqual("DKN5", soilProfile.Layers[0].Soil.Name); Assert.AreEqual(1.31640522876, soilProfile.Layers[0].TopLevel, cTolerance); Assert.AreEqual(17.50, soilProfile.Layers[0].Soil.AbovePhreaticLevel, cTolerance); Assert.AreEqual(17.50, soilProfile.Layers[0].Soil.BelowPhreaticLevel, cTolerance); } [Test] public void CanCreateSoilProfileWithOriginOffsetIfSurfaceLinePointBelowGeometrySurface() { const double offset = 10.0; var soilBaseDB = SoilbaseDB.Create(soilDatabaseName); SoilList soilList = soilBaseDB.CreateSoilList(); var geometry2DTo1DConverter = new Geometry2DTo1DConverter(soilGeometry2DName, surfaceLine, dikeEmbankmentMaterial, soilBaseDB, soilList, offset); SoilProfile1D soilProfile = geometry2DTo1DConverter.Convert(64.0 - offset); Assert.AreEqual(6, soilProfile.Layers.Count); Assert.AreEqual("DKN5", soilProfile.Layers[0].Name); Assert.AreEqual("DKN5", soilProfile.Layers[0].Soil.Name); Assert.AreEqual(1.31640522876, soilProfile.Layers[0].TopLevel, cTolerance); Assert.AreEqual(17.50, soilProfile.Layers[0].Soil.AbovePhreaticLevel, cTolerance); Assert.AreEqual(17.50, soilProfile.Layers[0].Soil.BelowPhreaticLevel, cTolerance); } [Test] public void CanCreateSoilProfileIfSurfaceLinePointAboveGeometrySurface() { var soilBaseDB = SoilbaseDB.Create(soilDatabaseName); var geometry2DTo1DConverter = new Geometry2DTo1DConverter(soilGeometry2DName, surfaceLine, dikeEmbankmentMaterial, soilBaseDB.CreateSoilList()); SoilProfile1D soilProfile = geometry2DTo1DConverter.Convert(73.0); Assert.AreEqual(6, soilProfile.Layers.Count); Assert.AreEqual(cDikeMaterial, soilProfile.Layers[0].Name); Assert.AreEqual(cDikeMaterial, soilProfile.Layers[0].Soil.Name); Assert.AreEqual(18.00, soilProfile.Layers[0].Soil.AbovePhreaticLevel, cTolerance); Assert.AreEqual(20.00, soilProfile.Layers[0].Soil.BelowPhreaticLevel, cTolerance); Assert.AreEqual("DKN4", soilProfile.Layers[1].Name); Assert.AreEqual("DKN4", soilProfile.Layers[1].Soil.Name); Assert.AreEqual(17.16, soilProfile.Layers[1].Soil.AbovePhreaticLevel, cTolerance); Assert.AreEqual(17.16, soilProfile.Layers[1].Soil.BelowPhreaticLevel, cTolerance); } [Test] public void SpecialFailingCase() { var soilBaseDB = SoilbaseDB.Create(soilDatabaseName); string geometry2DName = @"TestData\1D1.sti"; var geometry2DTo1DConverter = new Geometry2DTo1DConverter(geometry2DName, surfaceLine, dikeEmbankmentMaterial, soilBaseDB.CreateSoilList()); SoilProfile1D soilProfile = geometry2DTo1DConverter.Convert(73.0); } /// /// This test fails sometimes and random (see MWDAM-303) /// You may need to run it a couple of times before it fails /// [Test] public void RandomFailingCase() { var soilBaseDB = SoilbaseDB.Create(@"TestData\Soilmaterials - 18_4_94.mdb"); string geometry2DName = @"TestData\\18_4_94.sti"; var geometry2DTo1DConverter = new Geometry2DTo1DConverter(geometry2DName, surfaceLine, dikeEmbankmentMaterial, soilBaseDB.CreateSoilList()); for (int i = 0; i < 10; i++) { Console.WriteLine(String.Format("Index = {0}", i)); SoilProfile1D soilProfile = geometry2DTo1DConverter.Convert(110.0); Assert.AreEqual(-16.43, soilProfile.BottomLevel, String.Format("Random fail on index = {0}", i)); } } } }