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