//-----------------------------------------------------------------------
//
// Copyright (c) 2010 Deltares. All rights reserved.
//
// B.S.T. The
// tom.the@deltares.nl
// 8-9-2010
//
//-----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using Deltares.Geotechnics;
using Deltares.Probabilistic;
using Deltares.Soilbase.CSVImporter;
using NUnit.Framework;
namespace Deltares.Soilbase.Tests
{
[TestFixture]
public class SoilbaseTest
{
[SetUp]
public void TestSetup()
{
soilbaseDB = new SoilbaseDB();
}
[Test]
public void CanGetSoilList()
{
soilbaseDB = new SoilbaseDB();
soilbaseDB.Read(TestDatabaseName);
SoilList soilList = soilbaseDB.GetSoils();
Assert.AreEqual(37, soilList.Soils.Count);
}
[Test]
public void CanImportAllParamtersSoilsFromCsv()
{
var mi = new CsvSoilsImporter();
const string fileName = @"..\..\..\data\D-Soil Model\Import\Materials\FullExample.csv";
var soilList = mi.ImportFromFile(fileName);
Assert.AreEqual(1, soilList.Soils.Count);
Assert.AreEqual("Leem", soilList.Soils[0].Name);
Assert.AreEqual(Color.FromArgb(Convert.ToInt32(-5952982)), soilList.Soils[0].Color);
Assert.AreEqual(SoilType.Loam, soilList.Soils[0].SoilType);
Assert.AreEqual(1, soilList.Soils[0].DiameterD70);
Assert.AreEqual(2, soilList.Soils[0].WhitesConstant);
Assert.AreEqual(3, soilList.Soils[0].BeddingAngle);
Assert.AreEqual(4, soilList.Soils[0].PermeabKx);
Assert.AreEqual(5*1e-6, soilList.Soils[0].DiameterD70Stochast.Deviation);
Assert.AreEqual(DistributionType.Normal, soilList.Soils[0].DiameterD70Stochast.DistributionType);
Assert.AreEqual(6, soilList.Soils[0].PermeabKxStochast.Deviation);
Assert.AreEqual(DistributionType.Weibull, soilList.Soils[0].PermeabKxStochast.DistributionType);
Assert.AreEqual(7, soilList.Soils[0].WhitesConstantStochast.Deviation);
Assert.AreEqual(DistributionType.Uniform, soilList.Soils[0].WhitesConstantStochast.DistributionType);
Assert.AreEqual(9, soilList.Soils[0].BeddingAngleStochast.Deviation);
Assert.AreEqual(DistributionType.LogNormal, soilList.Soils[0].BeddingAngleStochast.DistributionType);
Assert.AreEqual(10, soilList.Soils[0].AbovePhreaticLevel);
Assert.AreEqual(11, soilList.Soils[0].BelowPhreaticLevel);
Assert.AreEqual(12, soilList.Soils[0].DryUnitWeight);
Assert.AreEqual(13, soilList.Soils[0].ExcessPorePressure);
Assert.AreEqual(14, soilList.Soils[0].PorePressureFactor);
Assert.AreEqual(15, soilList.Soils[0].Cohesion);
Assert.AreEqual(16, soilList.Soils[0].FrictionAngle);
Assert.AreEqual(17, soilList.Soils[0].RatioCuPc);
Assert.AreEqual(18, soilList.Soils[0].RatioCuPcPassive);
Assert.AreEqual(19, soilList.Soils[0].RatioCuPcActive);
Assert.AreEqual(ShearStrengthModel.CPhi, soilList.Soils[0].ShearStrengthModel);
Assert.AreEqual(false, soilList.Soils[0].UseDefaultProbabilisticValues);
Assert.AreEqual(21, soilList.Soils[0].CohesionStochast.Deviation);
Assert.AreEqual(22, soilList.Soils[0].FrictionAngleStochast.Deviation);
Assert.AreEqual(23, soilList.Soils[0].PnStochast.Deviation);
Assert.AreEqual(24, soilList.Soils[0].POPStochast.Deviation);
Assert.AreEqual(DistributionType.Exponential, soilList.Soils[0].CohesionStochast.DistributionType);
Assert.AreEqual(DistributionType.Gamma, soilList.Soils[0].FrictionAngleStochast.DistributionType);
Assert.AreEqual(DistributionType.Beta, soilList.Soils[0].StressTableStochast.DistributionType);
Assert.AreEqual(DistributionType.Frechet, soilList.Soils[0].PnStochast.DistributionType);
Assert.AreEqual(DistributionType.TruncatedNormal, soilList.Soils[0].POPStochast.DistributionType);
Assert.AreEqual(25, soilList.Soils[0].CorrelationCPhi);
Assert.AreEqual(26, soilList.Soils[0].POP);
Assert.AreEqual(27, soilList.Soils[0].CohesionStochast.DesignFactor);
Assert.AreEqual(28, soilList.Soils[0].CohesionStochast.DesignDeviation);
Assert.AreEqual(29, soilList.Soils[0].FrictionAngleStochast.DesignFactor);
Assert.AreEqual(30, soilList.Soils[0].FrictionAngleStochast.DesignDeviation);
Assert.AreEqual(31, soilList.Soils[0].StressTableStochast.DesignFactor);
Assert.AreEqual(32, soilList.Soils[0].StressTableStochast.DesignDeviation);
Assert.AreEqual(33, soilList.Soils[0].POPStochast.DesignFactor);
Assert.AreEqual(34, soilList.Soils[0].POPStochast.DesignDeviation);
Assert.AreEqual(35, soilList.Soils[0].RRatioStochast.DesignFactor);
Assert.AreEqual(36, soilList.Soils[0].RRatioStochast.DesignDeviation);
Assert.AreEqual(37, soilList.Soils[0].SoilGroup);
Assert.AreEqual(true, soilList.Soils[0].UseSoilType);
Assert.AreEqual(38, soilList.Soils[0].RRatio);
Assert.AreEqual(39, soilList.Soils[0].RRatioStochast.Deviation);
Assert.AreEqual(DistributionType.Deterministic, soilList.Soils[0].RRatioStochast.DistributionType);
Assert.AreEqual(40, soilList.Soils[0].EMod);
}
[Test]
public void CanImportSoilsFromCsv()
{
var mi = new CsvSoilsImporter();
const string fileName = @"..\..\..\data\D-Soil Model\Import\Materials\Example.csv";
var soilList = mi.ImportFromFile(fileName);
Assert.AreEqual(2, soilList.Soils.Count);
Assert.AreEqual("Klei", soilList.Soils[0].Name);
Assert.AreEqual(SoilType.Clay, soilList.Soils[0].SoilType);
Assert.AreEqual(false, soilList.AquiferDictionary[soilList.Soils[0]]);
Assert.AreEqual(Color.FromArgb(Convert.ToInt32(-16776961)), soilList.Soils[0].Color);
Assert.AreEqual(0.2, soilList.Soils[0].DiameterD70);
Assert.AreEqual(DistributionType.Uniform, soilList.Soils[0].BeddingAngleStochast.DistributionType);
Assert.AreEqual("Zand", soilList.Soils[1].Name);
Assert.AreEqual(Color.FromArgb(Convert.ToInt32(-65536)), soilList.Soils[1].Color);
Assert.AreEqual(0.2, soilList.Soils[1].DiameterD70);
Assert.AreEqual(true, soilList.AquiferDictionary[soilList.Soils[1]]);
Assert.AreEqual(DistributionType.Uniform, soilList.Soils[1].BeddingAngleStochast.DistributionType);
}
[Test]
public void CanReadPipingParameters()
{
soilbaseDB = new SoilbaseDB();
soilbaseDB.Read(PipingTestDatabaseName);
Assert.AreEqual(18, soilbaseDB.MaterialCount);
Soil soil = soilbaseDB.GetSoil("KM1");
Assert.AreEqual(0.0002, soil.DiameterD70, 0.0000000001);
Assert.AreEqual(0.250, soil.WhitesConstant);
Assert.AreEqual(37.0, soil.BeddingAngle);
Assert.AreEqual(1.0e-8, soil.PermeabKx);
soil = soilbaseDB.GetSoil("zand");
Assert.AreEqual(0.0002, soil.DiameterD70, 0.0000000001);
Assert.AreEqual(0.250, soil.WhitesConstant);
Assert.AreEqual(37.0, soil.BeddingAngle);
Assert.AreEqual(1.0e-4, soil.PermeabKx);
soil = soilbaseDB.GetSoil("DKN4");
Assert.AreEqual(0.000201, soil.DiameterD70, 0.0000000001);
Assert.AreEqual(0.251, soil.WhitesConstant);
Assert.AreEqual(38.0, soil.BeddingAngle);
Assert.AreEqual(2.0e-8, soil.PermeabKx);
}
[Test]
public void CanReadPipingProbabilisticParameters()
{
soilbaseDB = new SoilbaseDB();
soilbaseDB.Read(PipingTestDatabaseName);
Assert.AreEqual(18, soilbaseDB.MaterialCount);
Soil soil = soilbaseDB.GetSoil("KM1");
Assert.AreEqual(0.0002, soil.DiameterD70, 0.0000000001);
Assert.AreEqual(0.250, soil.WhitesConstant);
Assert.AreEqual(37.0, soil.BeddingAngle);
Assert.AreEqual(1.0e-8, soil.PermeabKx);
Assert.AreEqual(DistributionType.Deterministic, soil.DiameterD70Stochast.DistributionType);
Assert.AreEqual(0.011*1e-6, soil.DiameterD70Stochast.Deviation);
Assert.AreEqual(DistributionType.Normal, soil.PermeabKxStochast.DistributionType);
Assert.AreEqual(0.012, soil.PermeabKxStochast.Deviation);
Assert.AreEqual(DistributionType.LogNormal, soil.WhitesConstantStochast.DistributionType);
Assert.AreEqual(0.013, soil.WhitesConstantStochast.Deviation);
Assert.AreEqual(DistributionType.Deterministic, soil.BeddingAngleStochast.DistributionType);
Assert.AreEqual(0.014, soil.BeddingAngleStochast.Deviation);
soil = soilbaseDB.GetSoil("zand");
Assert.AreEqual(0.0002, soil.DiameterD70, 0.0000000001);
Assert.AreEqual(0.250, soil.WhitesConstant);
Assert.AreEqual(37.0, soil.BeddingAngle);
Assert.AreEqual(1.0e-4, soil.PermeabKx);
Assert.AreEqual(DistributionType.Normal, soil.DiameterD70Stochast.DistributionType);
Assert.AreEqual(0.021*1e-6, soil.DiameterD70Stochast.Deviation);
Assert.AreEqual(DistributionType.LogNormal, soil.PermeabKxStochast.DistributionType);
Assert.AreEqual(0.022, soil.PermeabKxStochast.Deviation);
Assert.AreEqual(DistributionType.Deterministic, soil.WhitesConstantStochast.DistributionType);
Assert.AreEqual(0.023, soil.WhitesConstantStochast.Deviation);
Assert.AreEqual(DistributionType.Normal, soil.BeddingAngleStochast.DistributionType);
Assert.AreEqual(0.024, soil.BeddingAngleStochast.Deviation);
}
[Test]
public void CheckNameValuePairGetSet()
{
// this was moved here from SoilTest.cs - MDNLIB-418
var expectedSoil = new Soil
{
Name = "Sand", DiameterD70 = 1
};
Dictionary nameValuePairs = SoilUtils.GetParametersAsNameValuePairs(expectedSoil);
var actualSoil = new Soil();
foreach (var soilDetail in nameValuePairs)
{
SoilUtils.SetParameterFromNameValuePair(actualSoil, soilDetail.Key, soilDetail.Value);
}
Assert.AreEqual(expectedSoil.DiameterD70, actualSoil.DiameterD70);
expectedSoil.DiameterD70 = 20;
nameValuePairs = SoilUtils.GetParametersAsNameValuePairs(expectedSoil);
actualSoil = new Soil();
foreach (var soilDetail in nameValuePairs)
{
SoilUtils.SetParameterFromNameValuePair(actualSoil, soilDetail.Key, soilDetail.Value);
}
Assert.AreEqual(expectedSoil.DiameterD70, actualSoil.DiameterD70);
}
[Test]
public void DesignParametersHaveMovedToStochasts()
{
// as part of implementation of MDNLIB-418 some of the old soil parameters have been moved to the Stochasts
// this test makes sure they are still read properly from an old MDB file (created manually with M-SoilBase)
//
// old property name test value
// DesignPartialCohesion (1.11)
// DesignStdCohesion (0.11)
// DesignPartialPhi (2.22)
// DesignStdPhi (0.22)
// DesignPartialStressTable (9.99)
// DesignStdStressTable (0.99)
// DesignPartialPOP (3.33)
// DesignStdPOP (0.33)
// designPartialRRatio (6.66)
// DesignStdRRatio (0.66)
string testFile = @"TestFiles\DesignParameters.mdb";
Assert.IsTrue(File.Exists(testFile));
soilbaseDB = new SoilbaseDB();
soilbaseDB.Read(testFile);
var soil = soilbaseDB.GetSoils().Soils[0];
Assert.AreEqual("TestSoil", soil.Name);
Assert.AreEqual(1.11, soil.CohesionStochast.DesignFactor);
Assert.AreEqual(0.11, soil.CohesionStochast.DesignDeviation);
Assert.AreEqual(2.22, soil.FrictionAngleStochast.DesignFactor);
Assert.AreEqual(0.22, soil.FrictionAngleStochast.DesignDeviation);
Assert.AreEqual(9.99, soil.StressTableStochast.DesignFactor);
Assert.AreEqual(0.99, soil.StressTableStochast.DesignDeviation);
Assert.AreEqual(3.33, soil.POPStochast.DesignFactor);
Assert.AreEqual(0.33, soil.POPStochast.DesignDeviation);
Assert.AreEqual(6.66, soil.RRatioStochast.DesignFactor);
Assert.AreEqual(0.66, soil.RRatioStochast.DesignDeviation);
}
[Test]
[ExpectedException(typeof(CsvSoilsImporterException))]
public void ErrorForEmptyFileNameOnImportSoilsFromCsv()
{
var mi = new CsvSoilsImporter();
const string fileName = "";
mi.ImportFromFile(fileName);
}
[Test]
[ExpectedException(typeof(CsvSoilsImporterException))]
public void ErrorForNonExistingFileNameOnImportSoilsFromCsv()
{
var mi = new CsvSoilsImporter();
const string fileName = "ghygy";
mi.ImportFromFile(fileName);
}
[Test]
public void TestSoilbase()
{
soilbaseDB = new SoilbaseDB();
soilbaseDB.Read(TestDatabaseName);
Assert.AreEqual(37, soilbaseDB.MaterialCount);
Soil soil = soilbaseDB.GetSoil("Kreftenheye (31)");
Assert.AreEqual(SoilType.Clay, soil.SoilType);
Assert.AreEqual(Color.FromArgb(255, 128, 128, 64), soil.Color);
Assert.AreEqual(18.50, soil.AbovePhreaticLevel);
Assert.AreEqual(18.50, soil.BelowPhreaticLevel);
soil = soilbaseDB.GetSoil("Basisveen (9)");
Assert.AreEqual(SoilType.Peat, soil.SoilType);
Assert.AreEqual(Color.FromArgb(255, 0, 128, 64), soil.Color);
Assert.AreEqual(11.00, soil.AbovePhreaticLevel);
Assert.AreEqual(11.00, soil.BelowPhreaticLevel);
soil = soilbaseDB.GetSoil("Pleistoceen (32)");
Assert.AreEqual(SoilType.Sand, soil.SoilType);
Assert.AreEqual(Color.FromArgb(255, 245, 255, 148), soil.Color);
Assert.AreEqual(17.00, soil.AbovePhreaticLevel);
Assert.AreEqual(20.00, soil.BelowPhreaticLevel);
}
private const string TestDatabaseName = @"TestFiles\Case A15.mdb";
private const string PipingTestDatabaseName = @"TestFiles\soilmaterials.mdb";
private SoilbaseDB soilbaseDB;
}
}