//-----------------------------------------------------------------------
//
// 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));
}
}
}
}