//----------------------------------------------------------------------- // // Copyright (c) 2010 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 9-9-2010 // Test for MPipingCalc2 calculation //----------------------------------------------------------------------- using Deltares.Probabilistic; namespace Deltares.Piping.Test { using System; using System.Collections.Generic; using System.Text; using NUnit.Framework; using Deltares.Mathematics; using Deltares.Piping.Data; using Deltares.Standard; [TestFixture] public class TestPipingModel2Calculation { private const double cToleranceHeadDrop = 0.005; private const double cToleranceReliabilityIndex = 0.001; [Test] public void IsHeadDropCalculatedCorrectly() { PipingModel2Calculation pipingModel2Calculation = new PipingModel2Calculation(); pipingModel2Calculation.Height1 = 10.0; pipingModel2Calculation.CalculateHeadDropPC2(); Assert.AreEqual(3.46, pipingModel2Calculation.HeadDrop, cToleranceHeadDrop); pipingModel2Calculation.Height1 = 11.0; pipingModel2Calculation.CalculateHeadDropPC2(); Assert.AreEqual(3.42, pipingModel2Calculation.HeadDrop, cToleranceHeadDrop); pipingModel2Calculation.Height1 = 11.0; pipingModel2Calculation.Permeability3 = 0.002; pipingModel2Calculation.CalculateHeadDropPC2(); Assert.AreEqual(3.06, pipingModel2Calculation.HeadDrop, cToleranceHeadDrop); } [Test] public void IsSeepageLengthCalculatedCorrectly() { PipingModel2Calculation pipingModel2Calculation = new PipingModel2Calculation(); pipingModel2Calculation.PipingCommonData.BeddingAngle = 20.0; pipingModel2Calculation.PipingCommonData.FluidisationGradient = 0.3; pipingModel2Calculation.PipingCommonData.ParticleUnitWeight = 26.5; pipingModel2Calculation.PipingCommonData.SafetyFactor = 1.2; pipingModel2Calculation.PipingCommonData.IsAdjustHeadDrop = false; pipingModel2Calculation.PipingCommonData.WaterUnitWeight = Physics.UnitWeightOfwater; pipingModel2Calculation.PipingCommonData.WaterViscosity = 1.33E-06; pipingModel2Calculation.PipingCommonData.WhitesConstant = 0.4; pipingModel2Calculation.Height1 = 4.0; pipingModel2Calculation.Height2 = 42.0; pipingModel2Calculation.Permeability1 = 0.0005; pipingModel2Calculation.Permeability2 = 0.0005; pipingModel2Calculation.Permeability3 = 0.0005; pipingModel2Calculation.ParticleDiameter = 350.0; pipingModel2Calculation.CrackLength = 1.1; pipingModel2Calculation.HeadDrop = 18.757; pipingModel2Calculation.HeadDrop = 5.0; pipingModel2Calculation.SeepageLength = 50.0; pipingModel2Calculation.IsHeadDropCalculation = false; pipingModel2Calculation.CalculateHeadDropPC2(); Assert.AreEqual(101.5, pipingModel2Calculation.SeepageLength, cToleranceHeadDrop); } [Test] [ExpectedException(typeof(PipingCalculationException))] public void IsExceptionFromDllHandledCorrectly() { PipingModel2Calculation pipingModel2Calculation = new PipingModel2Calculation(); pipingModel2Calculation.PipingCommonData.BeddingAngle = 20.0; pipingModel2Calculation.PipingCommonData.FluidisationGradient = 0.3; pipingModel2Calculation.PipingCommonData.ParticleUnitWeight = 26.5; pipingModel2Calculation.PipingCommonData.SafetyFactor = 1.2; pipingModel2Calculation.PipingCommonData.IsAdjustHeadDrop = false; pipingModel2Calculation.PipingCommonData.WaterUnitWeight = Physics.UnitWeightOfwater; pipingModel2Calculation.PipingCommonData.WaterViscosity = 1.33E-06; pipingModel2Calculation.PipingCommonData.WhitesConstant = 0.4; pipingModel2Calculation.Height1 = 4.0; pipingModel2Calculation.Height2 = 42.0; pipingModel2Calculation.Permeability1 = 0.0005; pipingModel2Calculation.Permeability2 = 0.0005; pipingModel2Calculation.Permeability3 = 0.0005; pipingModel2Calculation.ParticleDiameter = 350.0; pipingModel2Calculation.CrackLength = 1.1; pipingModel2Calculation.HeadDrop = 18.757; pipingModel2Calculation.SeepageLength = -50.0; pipingModel2Calculation.IsHeadDropCalculation = true; // negative seepagelength will throw an ecxeption pipingModel2Calculation.CalculateHeadDropPC2(); } private PipingModel2Calculation CreateAndFillPipingModel2CalculationForTestcase01() { var pipingModel2Calculation = new PipingModel2Calculation(); pipingModel2Calculation.HeadDrop = 0.0;// Not used, to be calculated pipingModel2Calculation.PipingCommonData.BeddingAngle = 20.0; pipingModel2Calculation.PipingCommonData.FluidisationGradient = 0.3; pipingModel2Calculation.PipingCommonData.WaterUnitWeight = Physics.UnitWeightOfwater; pipingModel2Calculation.PipingCommonData.WaterViscosity = 1.33000E-06; pipingModel2Calculation.PipingCommonData.WhitesConstant = 0.4; pipingModel2Calculation.PipingCommonData.SafetyFactor = 1.20; pipingModel2Calculation.PipingCommonData.IsAdjustHeadDrop = false; // Soil parameters pipingModel2Calculation.PipingCommonData.ParticleUnitWeight = 26.50; pipingModel2Calculation.Permeability1 = 0.0001; pipingModel2Calculation.Permeability2 = 0.0005; pipingModel2Calculation.Permeability3 = 0.0001; pipingModel2Calculation.ParticleDiameter = 250.0; // Geometry parameters pipingModel2Calculation.Height1 = 5.5; pipingModel2Calculation.Height2 = 45.0; return pipingModel2Calculation; } [Test] public void CanCalculateTestCase01() { // MPipingCalc2.dll 1.2.3.1 fails on this var pipingModel2Calculation = CreateAndFillPipingModel2CalculationForTestcase01(); pipingModel2Calculation.IsHeadDropCalculation = false; // Constant pipingModel2Calculation.HeadDrop = 1.773; // L will be Calculated pipingModel2Calculation.CrackLength = 0.1; // Distance upper sandlayer to surfaceline, "Do" in DGSWebPiping pipingModel2Calculation.CalculateHeadDropPC2(); Assert.AreEqual(23.304, pipingModel2Calculation.SeepageLength, cToleranceHeadDrop); } private PipingModel2Calculation CreateAndFillPipingModel2CalculationForTestCase02Probabilistic() { const double cVariationCoefSeePagelength = 0.05; const double cVariationCoefParticleUnitWeight = 0.0; const double cVariationCoefBeddingAngle = 0.1; const double cVariationCoefWhiteConstant = 0.10; const double cVariationCoefParticleD70 = 0.10; const double cVariationExternalWaterlevel = 0.15; const double cVariationLayer1Thickness = 0.05; const double cVariationLayer2Thickness = 0.05; const double cVariationSoil1Permeability = 1; const double cVariationSoil2Permeability = 1; const double cVariationSoil3Permeability = 1; var pipingModel2Calculation = new PipingModel2Calculation(); pipingModel2Calculation.HeadDrop = 0.0;// Not used pipingModel2Calculation.PipingCommonData.FluidisationGradient = 0.3; pipingModel2Calculation.PipingCommonData.WaterUnitWeight = Physics.UnitWeightOfwater; pipingModel2Calculation.PipingCommonData.WaterViscosity = 1.33000E-06; pipingModel2Calculation.PipingCommonData.SafetyFactor = 1.20; pipingModel2Calculation.PipingCommonData.IsAdjustHeadDrop = false; pipingModel2Calculation.CrackLength = 0.1; pipingModel2Calculation.IsHeadDropCalculation = true; // Soil parameters ProbabilisticStruct probabilisticParameter = new ProbabilisticStruct(20.0, 20.0 * cVariationCoefBeddingAngle, (int)DistributionType.LogNormal, true); pipingModel2Calculation.PipingCommonData.ProbBeddingAngle = probabilisticParameter; probabilisticParameter = new ProbabilisticStruct(250.0, 250.0 * cVariationCoefParticleD70, (int)DistributionType.LogNormal, true); pipingModel2Calculation.PipingCommonData.ProbParticleD70 = probabilisticParameter; probabilisticParameter = new ProbabilisticStruct(26.50, 26.50 * cVariationCoefParticleUnitWeight, (int)DistributionType.Deterministic, false); pipingModel2Calculation.PipingCommonData.ProbParticleUnitWeight = probabilisticParameter; probabilisticParameter = new ProbabilisticStruct(0.4, 0.4 * cVariationCoefWhiteConstant, (int)DistributionType.LogNormal, true); pipingModel2Calculation.PipingCommonData.ProbWhitesConstant = probabilisticParameter; // Geometry parameters probabilisticParameter = new ProbabilisticStruct(2.0, 2.0 * cVariationExternalWaterlevel, (int)DistributionType.Exponential, true); pipingModel2Calculation.ProbExternalWaterlevel = probabilisticParameter; probabilisticParameter = new ProbabilisticStruct(5.5, 5.5 * cVariationLayer1Thickness, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbLayer1Thickness = probabilisticParameter; probabilisticParameter = new ProbabilisticStruct(45.0, 45.0 * cVariationLayer2Thickness, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbLayer2Thickness = probabilisticParameter; probabilisticParameter = new ProbabilisticStruct(50.0, 50.0 * cVariationCoefSeePagelength, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbSeepageLength = probabilisticParameter; probabilisticParameter = new ProbabilisticStruct(0.0001, 0.0001 * cVariationSoil1Permeability, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbSoil1Permeability = probabilisticParameter; probabilisticParameter = new ProbabilisticStruct(0.0005, 0.0005 * cVariationSoil2Permeability, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbSoil2Permeability = probabilisticParameter; probabilisticParameter = new ProbabilisticStruct(0.0001, 0.0001 * cVariationSoil3Permeability, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbSoil3Permeability = probabilisticParameter; return pipingModel2Calculation; } [Test] public void CanCalculateTestCase02Probabilistic() { PipingModel2Calculation pipingModel2Calculation = CreateAndFillPipingModel2CalculationForTestCase02Probabilistic(); double reliabilityIndex = pipingModel2Calculation.CalculateReliabilityIndex(); Assert.AreEqual(1.518631066, reliabilityIndex, cToleranceReliabilityIndex); } private PipingModel2Calculation CreateAndFillPipingModel2CalculationForDeltaDijkCase01Probabilistic() { var pipingModel2Calculation = new PipingModel2Calculation(); pipingModel2Calculation.HeadDrop = 0.0;// Not used pipingModel2Calculation.PipingCommonData.FluidisationGradient = 0.3; pipingModel2Calculation.PipingCommonData.WaterUnitWeight = Physics.UnitWeightOfwater; pipingModel2Calculation.PipingCommonData.WaterViscosity = 1.33000E-06; pipingModel2Calculation.PipingCommonData.SafetyFactor = 1.20; pipingModel2Calculation.PipingCommonData.IsAdjustHeadDrop = false; pipingModel2Calculation.CrackLength = 0.1; pipingModel2Calculation.IsHeadDropCalculation = true; // Soil parameters pipingModel2Calculation.PipingCommonData.ProbBeddingAngle = new ProbabilisticStruct(38.0, 3.0, (int)DistributionType.LogNormal, true); pipingModel2Calculation.PipingCommonData.ProbParticleD70 = new ProbabilisticStruct(192.0, 30.0, (int)DistributionType.LogNormal, true); pipingModel2Calculation.PipingCommonData.ProbParticleUnitWeight = new ProbabilisticStruct(26.5, 0.0, (int)DistributionType.Deterministic, false); pipingModel2Calculation.PipingCommonData.ProbWhitesConstant = new ProbabilisticStruct(0.25, 0.03, (int)DistributionType.LogNormal, true); // Geometry parameters pipingModel2Calculation.ProbExternalWaterlevel = new ProbabilisticStruct(2.0, 0.1, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbLayer1Thickness = new ProbabilisticStruct(3.8, 0.4, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbLayer2Thickness = new ProbabilisticStruct(36.5, 0.4, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbSeepageLength = new ProbabilisticStruct(12.91, 0.0, (int)DistributionType.Deterministic, false); pipingModel2Calculation.ProbSoil1Permeability = new ProbabilisticStruct(0.000193805, 1.0e-13, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbSoil2Permeability = new ProbabilisticStruct(0.000193805, 1.0e-13, (int)DistributionType.LogNormal, true); pipingModel2Calculation.ProbSoil3Permeability = new ProbabilisticStruct(0.000193805, 1.0e-13, (int)DistributionType.LogNormal, true); return pipingModel2Calculation; } [Test] public void CanCalculateDeltaDijkCase01Probabilistic() { PipingModel2Calculation pipingModel2Calculation = CreateAndFillPipingModel2CalculationForDeltaDijkCase01Probabilistic(); double reliabilityIndex = pipingModel2Calculation.CalculateReliabilityIndex(); Assert.AreEqual(-0.669325644566883, reliabilityIndex, cToleranceReliabilityIndex); double failureProbablitity = Probabilistic.Probabilistic.NormalDistribution(-reliabilityIndex); Assert.AreEqual(0.748356114235231, failureProbablitity, cToleranceReliabilityIndex); } [Test] [ExpectedException(typeof(PipingCalculationException))] public void ThrowsIfProbabilisticInputInComplete() { var pipingModel2Calculation = new PipingModel2Calculation(); double reliabilityIndex = pipingModel2Calculation.CalculateReliabilityIndex(); } } }