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