Index: dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.BlighCalculatorTests/PipingCalculatorBlighTests.cs =================================================================== diff -u -r269 -r270 --- dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.BlighCalculatorTests/PipingCalculatorBlighTests.cs (.../PipingCalculatorBlighTests.cs) (revision 269) +++ dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.BlighCalculatorTests/PipingCalculatorBlighTests.cs (.../PipingCalculatorBlighTests.cs) (revision 270) @@ -12,9 +12,8 @@ { [Test] - public void TestCalculation() + public void TestCalculationDefault() { - const double diff = 0.0001; var bc = new PipingCalculatorBligh { HRiver = 1 @@ -24,74 +23,81 @@ Assert.AreEqual(0, bc.FoSp); Assert.AreEqual(0, bc.Hcp); Assert.AreEqual(0, bc.Hc); - + } + [Test] + public void TestCalculation() + { + const double diff = 0.0001; + var bc = new PipingCalculatorBligh(); bc.HRiver = 7; bc.ModelFactorPiping = 0.5; bc.HExit = 2; bc.Rc = 0.8; bc.DTotal = 3; bc.SeepageLength = 18; - bc.D50 = 2.5e-3; + bc.D50 = 2.5e-3; // WTI Test succeeds with CreepFactorWTI + bc.D70 = 3086; // Dam: set D70 instead of D50 bc.Calculate(); Assert.AreEqual(-1.6, bc.Zp, diff); Assert.AreEqual(1 / 2.6, bc.FoSp, diff); Assert.AreEqual(5.4, bc.Hcp, diff); Assert.AreEqual(2, bc.Hc, diff); } -// [Test] -// public void CanCalculateThePipingFactorUsingBlighNoUplift() -// { -// var calculator = new PipingCalculatorBligh(); -// const double upliftCriterion = 1.0; -// var actual = calculator.CalculatePipingFactor(upliftCriterion); -// -// // Phreatic level in profile -// // Mass of soil volume above -// // dry 6 m x 12 kN/m3 = 72 -// // wet 9 m x 16 kN/m3 = 144 -// // Total: 72 + 144 = 216 -// // Phreatic pressure -// // 20 m x 10 kN/m3 = 200 -// // UpliftFactor = 216/200 = 1.08 -// // UpliftFactor > 1.0, so no piping, so returns cDefaultMaxReturnValue -// var expected = PipingCalculatorBligh.cDefaultMaxReturnValue; -// -// Assert.AreEqual(expected, actual); -// } -// -// [Test] -// public void CanCalculateThePipingFactorUsingBlighNoUplift() -// { -// using (var surfaceLine = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) -// using (var dike = new Dike()) -// { -// var soilProfile = FactoryForSoilProfileTests.CreateClaySandClaySandProfile(); -// -// var calculator = new PipingCalculatorBligh(new ModelParametersForPLLines(), -// 1.0, dike.GaugePLLines, dike.Gauges, 1.0); -// using (var location = new Location()) -// { -// var actual = calculator.CalculatePipingFactor(location, surfaceLine, soilProfile, 0.0); -// -// -// // Phreatic level in profile -// // Mass of soil volume above -// // dry 6 m x 12 kN/m3 = 72 -// // wet 9 m x 16 kN/m3 = 144 -// // Total: 72 + 144 = 216 -// // Phreatic pressure -// // 20 m x 10 kN/m3 = 200 -// // UpliftFactor = 216/200 = 1.08 -// // UpliftFactor > 1.0, so no piping, so returns cDefaultMaxReturnValue -// var expected = PipingCalculatorBligh.cDefaultMaxReturnValue; -// -// Assert.AreEqual(expected, actual); -// } -// } -// } // [Test] + // public void CanCalculateThePipingFactorUsingBlighNoUplift() + // { + // var calculator = new PipingCalculatorBligh(); + // const double upliftCriterion = 1.0; + // var actual = calculator.CalculatePipingFactor(upliftCriterion); + // + // // Phreatic level in profile + // // Mass of soil volume above + // // dry 6 m x 12 kN/m3 = 72 + // // wet 9 m x 16 kN/m3 = 144 + // // Total: 72 + 144 = 216 + // // Phreatic pressure + // // 20 m x 10 kN/m3 = 200 + // // UpliftFactor = 216/200 = 1.08 + // // UpliftFactor > 1.0, so no piping, so returns cDefaultMaxReturnValue + // var expected = PipingCalculatorBligh.cDefaultMaxReturnValue; + // + // Assert.AreEqual(expected, actual); + // } + // + // [Test] + // public void CanCalculateThePipingFactorUsingBlighNoUplift() + // { + // using (var surfaceLine = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) + // using (var dike = new Dike()) + // { + // var soilProfile = FactoryForSoilProfileTests.CreateClaySandClaySandProfile(); + // + // var calculator = new PipingCalculatorBligh(new ModelParametersForPLLines(), + // 1.0, dike.GaugePLLines, dike.Gauges, 1.0); + // using (var location = new Location()) + // { + // var actual = calculator.CalculatePipingFactor(location, surfaceLine, soilProfile, 0.0); + // + // + // // Phreatic level in profile + // // Mass of soil volume above + // // dry 6 m x 12 kN/m3 = 72 + // // wet 9 m x 16 kN/m3 = 144 + // // Total: 72 + 144 = 216 + // // Phreatic pressure + // // 20 m x 10 kN/m3 = 200 + // // UpliftFactor = 216/200 = 1.08 + // // UpliftFactor > 1.0, so no piping, so returns cDefaultMaxReturnValue + // var expected = PipingCalculatorBligh.cDefaultMaxReturnValue; + // + // Assert.AreEqual(expected, actual); + // } + // } + // } + + // [Test] // public void CanCalculateThePipingFactorUsingBligh() // { // using (var surfaceLine = FactoryForSurfaceLineTests.CreateSurfaceLineTutorial1()) Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.BlighCalculator/PipingCalculatorBligh.cs =================================================================== diff -u -r269 -r270 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.BlighCalculator/PipingCalculatorBligh.cs (.../PipingCalculatorBligh.cs) (revision 269) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.BlighCalculator/PipingCalculatorBligh.cs (.../PipingCalculatorBligh.cs) (revision 270) @@ -12,6 +12,7 @@ { public const double RcDefault = 0.3; public const double Epsilon = 1e-8; + public const double D50DividedByD70 = 0.81; private double foSp; private double hc; @@ -68,6 +69,11 @@ public double D50 { get; set; } /// + /// Median grainsize D70 as input + /// + public double? D70 { get; set; } + + /// /// Limit state function as result /// public double Zp @@ -164,14 +170,15 @@ /// the proper value of Hc according to Bligh private double GetHc() { - return SeepageLength/CCreep(); +// return SeepageLength/CreepFactorWTI(); + return SeepageLength / CreepFactor(); } /// - /// Determine creep factor for Bligh + /// Determine creep factor for Bligh according to WTI /// /// creep factor - private double CCreep() + private double CreepFactorWTI() { // d50 is in meters; the table for Bligh is in micro meters so convert locally var ld50 = D50*1e6; @@ -199,6 +206,41 @@ return 4.0; } + /// + /// Determine creep factor for Bligh + /// + private double CreepFactor() + { + const double cBligh = 18.0; + if (D70 != null) + { + + double d50 = D50DividedByD70 * D70.Value; + if (d50 < 150.0) + { + // according to specs: d50 < 150 + return 18.0; + } + else + { + if (d50 < 300.0) + { + // according to specs: 150 < d50 < 300 + return 15.0; + } + else + { + // according to specs: 300 < d50 < 2000 + return 12.0; + } + } + } + else + { + return cBligh; + } + } + private double GetReducedFall() { return HRiver - HExit - (Rc*DTotal);