//-----------------------------------------------------------------------
//
// Copyright (c) 2010 Deltares. All rights reserved.
//
// B.S.T.I.M. The
// tom.the@deltares.nl
// 13-7-2010
// Calculates the piping factor according to Sellmeijer 2 forces.
//-----------------------------------------------------------------------
using Deltares.Geotechnics.TestUtils;
using Deltares.Standard;
namespace Deltares.Dam.Tests
{
using Deltares.Dam.Data;
using NUnit.Framework;
[TestFixture]
public class PipingCalculatorSellmeijer4ForcesTest
{
[Test]
public void CanCalculateThePipingFactorUsingSellmeijer4ForcesNoUplift()
{
using (var surfaceLine = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1())
using(var dike = new Dike())
using (var location = new Location())
{
var soilProfile = FactoryForSoilProfileTests.CreatePipingSellmeijerProfileWithOneSandlayer();
soilProfile.Layers[0].Soil.AbovePhreaticLevel = 20.0;
soilProfile.Layers[0].Soil.BelowPhreaticLevel = 22.0;
var modelParametersForPLLines = new ModelParametersForPLLines();//are the values initialized correctly?
var calculator = new PipingCalculatorSellmeijer4Forces(modelParametersForPLLines, 1.0, dike.GaugePLLines, dike.Gauges, 1.0);
location.HeadPl3 = -1.0;
location.PolderLevel = -1.0;
var actual = calculator.CalculatePipingFactor(location, surfaceLine, soilProfile, 1.0);
// Calculation at toe of dike
// Phreatic level in profile = 0
// PL3 = waterlevel = -1 m
// Mass of soil volume above
// wet 1 m x 22 kN/m3 = 22
// wet 1 m x 20 kN/m3 = 20
// Total: 22 + 20 = 42
// Phreatic pressure
// 1 m x 9.81 kN/m3 = 9.81
// UpliftFactor = 42/9.81 = 4.281
// UpliftFactor > 1.0, so no piping, so returns cDefaultMaxReturnValue
var expected = PipingCalculatorSellmeijer4Forces.cDefaultMaxReturnValue;
Assert.AreEqual(expected, actual);
}
}
///
/// These results are documented in the document
/// ".\documents\DAM\Evaluation Piping\Nieuwe rekenregel bligh Sellmeijeruli.xls"
///
[Test]
public void CanCalculateThePipingFactorUsingSellmeijer4Forces()
{
using (var surfaceLine = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1())
using(var dike = new Dike())
using (var location = new Location())
{
var soilProfile = FactoryForSoilProfileTests.CreatePipingSellmeijerProfileWithOneSandlayer();
var modelParametersForPLLines = new ModelParametersForPLLines();
modelParametersForPLLines.DampingFactorPL4 = 0.0;
var calculator = new PipingCalculatorSellmeijer4Forces(modelParametersForPLLines,
1.0, dike.GaugePLLines, dike.Gauges, 1.0);
var actual = calculator.CalculatePipingFactor(location, surfaceLine, soilProfile, 1.0);
// Phreatic level in profile
// Mass of soil volume above
// material above bottom sandlayer: 0 to -5 m
// dry/wet 5 m x 1 kN/m3 = 5
// Phreatic pressure (Head PLLine 4 is ca. 1.0
// 6.0 m x 10 kN/m3 = 60,0
// UpliftFactor = 5/60.0 = 0.0833
// UpliftFactor < 1.0, so piping will occur in toe of dike
//
const double cTolerance = 0.000001;
const double expected = 11.899117458988471; // Value is taken from the actual calculation itself and not manual calculated
Assert.IsNotNull(actual);
Assert.AreEqual(expected, actual.Value, cTolerance);
}
}
[Test]
public void CanCalculateHCritical()
{
const double cTolerance = 0.000001;
const double cwhitesConstant = 0.25;
const double cbeddingAngle = 41.0;
double hCritical = PipingCalculatorSellmeijer4Forces.CalculateHCritical(cwhitesConstant, cbeddingAngle, 180, 15.00, 7.00e-05, 3, Physics.WaterViscosity);
Assert.AreEqual(2.757966400, hCritical, cTolerance);
hCritical = PipingCalculatorSellmeijer4Forces.CalculateHCritical(cwhitesConstant, cbeddingAngle, 260, 15.00, 1.30e-04, 3, Physics.WaterViscosity);
Assert.AreEqual(3.184432652, hCritical, cTolerance);
hCritical = PipingCalculatorSellmeijer4Forces.CalculateHCritical(cwhitesConstant, cbeddingAngle, 180, 20.00, 7.00e-05, 3, Physics.WaterViscosity);
Assert.AreEqual(3.650076587, hCritical, cTolerance);
hCritical = PipingCalculatorSellmeijer4Forces.CalculateHCritical(cwhitesConstant, cbeddingAngle, 260, 20.00, 1.30e-04, 3, Physics.WaterViscosity);
Assert.AreEqual(4.215258070, hCritical, cTolerance);
hCritical = PipingCalculatorSellmeijer4Forces.CalculateHCritical(cwhitesConstant, cbeddingAngle, 180, 60.00, 7.00e-05, 3, Physics.WaterViscosity);
Assert.AreEqual(10.705479854, hCritical, cTolerance);
}
}
}