//-----------------------------------------------------------------------
//
// Copyright (c) 2010 Deltares. All rights reserved.
//
// B.S.T. The
// tom.the@deltares.nl
// 8-9-2010
//
//-----------------------------------------------------------------------
using Deltares.Standard;
namespace Deltares.Piping.Test
{
using System;
using System.Collections.Generic;
using NUnit.Framework;
using Deltares.Piping.Data;
[TestFixture]
public class TestPipingDAM
{
private const double cTolerancePiping = 0.01;
private const double cToleranceCrackFactor = 0.0000001;
private PipingDAMInput fPipingInput;
[SetUp]
public void SetUp()
{
fPipingInput = new PipingDAMInput();
fPipingInput.CommonData.WaterUnitWeight = Physics.UnitWeightOfwater;
fPipingInput.CommonData.WaterViscosity = 1.33E-06;
fPipingInput.CommonData.ParticleUnitWeight = 26.5;
fPipingInput.CommonData.WhitesConstant = 0.3;
fPipingInput.CommonData.BeddingAngle = 47;
fPipingInput.CommonData.IsAdjustHeadDrop = true;
fPipingInput.CommonData.SafetyFactor = 1.0;
fPipingInput.CommonData.FluidisationGradient = 0.3;
fPipingInput.LocationGeometries.Add(new PipingDAMLocationGeometryStruct("dwp 037+197", "1", 132131.07, 443157.59, 6.57, 82, 0.05, 0.67, 109.035, -6.1));
fPipingInput.LocationGeometries.Add(new PipingDAMLocationGeometryStruct("dwp 039+000", "1", 132305.37, 443257.82, 7.9, 66, 0.05, 0.67, 138.7, -7.3));
fPipingInput.LocationGeometries.Add(new PipingDAMLocationGeometryStruct("dwp 039+132", "1", 132424.98, 443316.8, 6.5, 78, 0.05, 0.67, 109.85, -5.8));
fPipingInput.LocationGeometries.Add(new PipingDAMLocationGeometryStruct("dwp 040+014", "1", 132504.59, 443335.44, 7.1, 62, 0.05, 0.67, 116.4, -6.5));
fPipingInput.LocationGeometries.Add(new PipingDAMLocationGeometryStruct("dwp 040+150", "2", 132641.18, 443339.69, 7.1, 83, 0.05, 0.67, 116.75, -6.3));
fPipingInput.LocationGeometries.Add(new PipingDAMLocationGeometryStruct("dwp 041+114", "2", 132781.89, 443386.6, 1.3, 63, 2.19, 0.67, 23.4, 1.5));
fPipingInput.LocationSoils.Add(new PipingDAMLocationSoilStruct("1A", 6, 46, 2.50E-04, 3.78E-04, 2.50E-04, 300));
fPipingInput.LocationSoils.Add(new PipingDAMLocationSoilStruct("1B", 4, 4, 6.81E-04, 6.81E-04, 6.81E-04, 355));
fPipingInput.LocationSoils.Add(new PipingDAMLocationSoilStruct("1C", 13.5, 13.5, 3.77E-04, 3.77E-04, 3.77E-04, 355));
fPipingInput.LocationSoils.Add(new PipingDAMLocationSoilStruct("1D", 23.5, 23.5, 3.85E-04, 3.85E-04, 3.85E-04, 355));
fPipingInput.LocationSoils.Add(new PipingDAMLocationSoilStruct("2A", 6, 46, 2.50E-04, 3.78E-04, 2.50E-04, 300));
fPipingInput.LocationSoils.Add(new PipingDAMLocationSoilStruct("2B", 4, 4, 6.81E-04, 6.81E-04, 6.81E-04, 355));
fPipingInput.LocationSegmentSoilRelations.Add(new PipingDAMSegmentSoilRelationStruct("1", "1A", 0.125));
fPipingInput.LocationSegmentSoilRelations.Add(new PipingDAMSegmentSoilRelationStruct("1", "1B", 0.25));
fPipingInput.LocationSegmentSoilRelations.Add(new PipingDAMSegmentSoilRelationStruct("1", "1C", 0.125));
fPipingInput.LocationSegmentSoilRelations.Add(new PipingDAMSegmentSoilRelationStruct("1", "1D", 0.5));
fPipingInput.LocationSegmentSoilRelations.Add(new PipingDAMSegmentSoilRelationStruct("2", "2A", 0.25));
fPipingInput.LocationSegmentSoilRelations.Add(new PipingDAMSegmentSoilRelationStruct("2", "2B", 0.75));
fPipingInput.PipingDAMWaterLevels.Add(new PipingDAMWaterLevelInfoStruct("dwp 037+197", 6.1, 6.05, 4.3, 2.1, 1.4));
fPipingInput.PipingDAMWaterLevels.Add(new PipingDAMWaterLevelInfoStruct("dwp 039+132", 6.1, 6.05, 4.25, 2.1, 1.4));
fPipingInput.PipingDAMWaterLevels.Add(new PipingDAMWaterLevelInfoStruct("dwp 040+150", 6.1, 6.05, 4.3, 2.1, 1.4));
}
[Test]
public void TestLookup()
{
// Check lookup functions
PipingDAMLocationSoilStruct locationSoil = fPipingInput.GetSoil("1B");
Assert.AreEqual(355, locationSoil.ParticleDiameter, cTolerancePiping);
PipingDAMLocationGeometryStruct locationGeometry = fPipingInput.GetLocationGeometry("dwp 039+132");
Assert.AreEqual(6.5, locationGeometry.thicknessSoftSoils, cTolerancePiping);
List locationSoils = fPipingInput.GetLocationSoils("dwp 039+132");
Assert.AreEqual(4, locationSoils.Count);
PipingDAMWaterLevelInfoStruct locationWaterLevel = fPipingInput.GetLocationWaterLevelInfo("dwp 039+132");
Assert.AreEqual(4.25, locationWaterLevel.H3, cTolerancePiping);
}
[Test]
public void TestCrackFactor()
{
PipingDAMAnalysis pipingDAMAnalysis = new PipingDAMAnalysis();
double aCrackFactor = pipingDAMAnalysis.DetermineCrackFactor(68.4, -2.5, 3.0, 1.98, 3.8, 54.0, 3.0, 2.5e-4, 3.0, 2.5e-4);
Assert.AreEqual(10.37341456, aCrackFactor, cToleranceCrackFactor);
}
[Test, Ignore]
//#Bka goes wrong when trying to get the PC3_GetCalculationMessages with marshalling error (probably due to [return: MarshalAs(UnmanagedType.LPStr)]).
public void TestHeadDrop()
{
// Check headdrop calculation
PipingDAMAnalysis pipingDAMAnalysis = new PipingDAMAnalysis();
pipingDAMAnalysis.PipingDAMInput = fPipingInput;
PipingDAMLocationGeometryStruct locationGeometry = fPipingInput.GetLocationGeometry("dwp 037+197");
PipingDAMLocationSoilStruct locationSoil = fPipingInput.GetSoil("1A");
double headDrop = pipingDAMAnalysis.DetermineHeadDrop(locationSoil, locationGeometry);
Assert.AreEqual(11.49, headDrop, cTolerancePiping);
locationSoil = fPipingInput.GetSoil("1B");
headDrop = pipingDAMAnalysis.DetermineHeadDrop(locationSoil, locationGeometry);
Assert.AreEqual(15.04, headDrop, cTolerancePiping);
locationSoil = fPipingInput.GetSoil("1C");
headDrop = pipingDAMAnalysis.DetermineHeadDrop(locationSoil, locationGeometry);
Assert.AreEqual(13.68, headDrop, cTolerancePiping);
locationSoil = fPipingInput.GetSoil("1D");
headDrop = pipingDAMAnalysis.DetermineHeadDrop(locationSoil, locationGeometry);
Assert.AreEqual(12.53, headDrop, cTolerancePiping);
locationGeometry = fPipingInput.GetLocationGeometry("dwp 040+150");
locationSoil = fPipingInput.GetSoil("2A");
headDrop = pipingDAMAnalysis.DetermineHeadDrop(locationSoil, locationGeometry);
Assert.AreEqual(11.72, headDrop, cTolerancePiping);
locationSoil = fPipingInput.GetSoil("2B");
headDrop = pipingDAMAnalysis.DetermineHeadDrop(locationSoil, locationGeometry);
Assert.AreEqual(15.35, headDrop, cTolerancePiping);
}
[Test, Ignore]
//#Bka goes wrong when trying to get the PC3_GetCalculationMessages with marshalling error (probably due to [return: MarshalAs(UnmanagedType.LPStr)]).
public void TestPipingFactor()
{
// Check risk calculation
PipingDAMAnalysis pipingDAMAnalysis = new PipingDAMAnalysis();
pipingDAMAnalysis.PipingDAMInput = fPipingInput;
double risk = pipingDAMAnalysis.DetermineLocationPipingFactor("dwp 037+197", 18000.0);
Assert.AreEqual(10.62, risk, cTolerancePiping);
risk = pipingDAMAnalysis.DetermineLocationPipingFactor("dwp 040+150", 18000.0);
Assert.AreEqual(12.53, risk, cTolerancePiping);
risk = pipingDAMAnalysis.DetermineLocationPipingFactor("dwp 037+197", 16000.0);
Assert.AreEqual(10.62, risk, cTolerancePiping);
risk = pipingDAMAnalysis.DetermineLocationPipingFactor("dwp 040+150", 16000.0);
Assert.AreEqual(12.53, risk, cTolerancePiping);
risk = pipingDAMAnalysis.DetermineLocationPipingFactor("dwp 037+197", 14000.0);
Assert.AreEqual(11.22, risk, cTolerancePiping);
risk = pipingDAMAnalysis.DetermineLocationPipingFactor("dwp 040+150", 14000.0);
Assert.AreEqual(13.13, risk, cTolerancePiping);
risk = pipingDAMAnalysis.DetermineLocationPipingFactor("dwp 037+197", 3000.0);
Assert.AreEqual(17.12, risk, cTolerancePiping);
risk = pipingDAMAnalysis.DetermineLocationPipingFactor("dwp 040+150", 3000.0);
Assert.AreEqual(19.02, risk, cTolerancePiping);
}
[Test]
public void TestWaterLevelDetermination()
{
double waterLevel;
waterLevel = fPipingInput.DetermineWaterLevel("dwp 037+197", 18000.0);
Assert.AreEqual(6.1, waterLevel, cTolerancePiping);
waterLevel = fPipingInput.DetermineWaterLevel("dwp 037+197", 16000.0);
Assert.AreEqual(6.1, waterLevel, cTolerancePiping);
waterLevel = fPipingInput.DetermineWaterLevel("dwp 037+197", 15000.0);
Assert.AreEqual(6.05, waterLevel, cTolerancePiping);
waterLevel = fPipingInput.DetermineWaterLevel("dwp 037+197", 14000.0);
Assert.AreEqual(5.7, waterLevel, cTolerancePiping);
waterLevel = fPipingInput.DetermineWaterLevel("dwp 037+197", 10000.0);
Assert.AreEqual(4.3, waterLevel, cTolerancePiping);
waterLevel = fPipingInput.DetermineWaterLevel("dwp 037+197", 4000.0);
Assert.AreEqual(2.1, waterLevel, cTolerancePiping);
waterLevel = fPipingInput.DetermineWaterLevel("dwp 037+197", 3000.0);
Assert.AreEqual(1.75, waterLevel, cTolerancePiping);
waterLevel = fPipingInput.DetermineWaterLevel("dwp 037+197", 2000.0);
Assert.AreEqual(1.4, waterLevel, cTolerancePiping);
waterLevel = fPipingInput.DetermineWaterLevel("dwp 037+197", 1000.0);
Assert.AreEqual(1.4, waterLevel, cTolerancePiping);
}
}
}