Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/PipingCalculatorSellmeijer4Forces.cs =================================================================== diff -u --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/PipingCalculatorSellmeijer4Forces.cs (revision 0) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/PipingCalculatorSellmeijer4Forces.cs (revision 351) @@ -0,0 +1,138 @@ +//using Deltares.Geometry; +//using Deltares.Geotechnics; +//using Deltares.Geotechnics.Soils; +//using Deltares.Geotechnics.SurfaceLines; +//using Deltares.Standard; +//using Deltares.Soilbase; +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace Deltares.DamPiping.Sellmeijer4ForcesCalculator +{ + + public class PipingCalculatorSellmeijer4Forces + { + + + /// + /// Start the calculation of all output parameters. + /// +// public void Calculate() +// { +// hc = GetHc(); +// reducedFall = GetReducedFall(); +//// zp = (ModelFactorPiping * hc) - reducedFall; +// DetermineFactorOfSafety(); +//// hcp = (ModelFactorPiping * hc) + HExit + (Rc * DTotal); +// } + + private const double cBligh = 18.0; + +// private double CalculatePipingFactorAtLevel(Location location, double waterLevel, double surfaceLevel) +// { +// PipingCalculatorInput pipingCalculatorInput = DefinePipingInputFromModel(); +// +// var dCoverLayer = DetermineHeightCoverLayer(surfaceLevel); +// var soilProfile1DAquiferLayerCombiner = new SoilProfile1DAquiferLayerCombiner(SoilProfile); +// AquiferLayerWithParameters aquiferLayerWithParameters = soilProfile1DAquiferLayerCombiner.CombineLayers(UpliftLocationAndResult.LayerWhereUpliftOccuresId); +// +// this.HCritical = CalculateHCritical( +// pipingCalculatorInput.WhitesConstant, +// pipingCalculatorInput.BeddingAngle, +// Physics.FactorMeterToMicroMeter * aquiferLayerWithParameters.D70, +// pipingCalculatorInput.Length, +// aquiferLayerWithParameters.PermeabilityKx, +// aquiferLayerWithParameters.Height, +// pipingCalculatorInput.WaterViscosity); +// +// // Reference level is highest value of surfaceLevel or PolderLevel +// // Uit TR Zandmeevoerende wellen (1999): "Het verval dH is gelijk aan het verschil tussen buitenwaterstand (het ontwerppeil(OP)) +// // bij zeedijken en de maatgevende hoogwaterstand (MHW bij rivierdijken) en de waterstand binnendijks ter plaatse van het uittredepunt, +// // rekening houdend met zeespiegelrijzing etc.(zie paragraaf 3.7.2). In dien ter plaatse van het uittreepunt of de opbarstlocatie +// // geen vrije waterstand heerst kan gerekend worden met het maaiveldniveau, rekening houdend met eventuele maaiveld daling (zie paragraaf 3.7.2)." +// double referenceLevel = Math.Max(location.PolderLevel, surfaceLevel); +// +// // After consulting Erik Vastenburg, Jan Blinde, Andre Koelewijn, Alexander van Duinen en Huub de Bruijn +// // it was decided that the fluidisation correction shopuld be applied on the hActual and not the hCritical. +// double hActual = waterLevel - referenceLevel - (CDefaultFluidisationGradient * dCoverLayer); +// double pipingFactor = DeterminePipingFactorWithUpperLimit(hActual, HCritical); +// return pipingFactor; +// } + + + + + + // static public double TermLnC(double whitesConstant, double beddingAngle, double d70, double length, double permeability, double waterViscosity) + // { + // double result = 0.68 - 0.1 * Math.Log(TermC(whitesConstant, beddingAngle, d70, length, permeability, waterViscosity), Math.E); + // return result; + // } + // static public double TermC(double whitesConstant, double beddingAngle, double d70, double length, double permeability, double waterViscosity) + // { + // double kIntrinsic = KIntrinisc(permeability, waterViscosity); + // double term = Math.Pow((1 / (kIntrinsic * length)), (1.0 / 3.0)); + // double result = whitesConstant * (d70 * 1.0e-6) * term; + // return result; + // } + // + // static public double TermAlpha(double length, double dSandlayer) + // { + // double result = Math.Pow((dSandlayer / length), 0.28 / ((Math.Pow(dSandlayer / length, 2.8)) - 1)); + // return result; + // } + // + // static private double HcDividedByLNew(double whitesConstant, double beddingAngle, double d70, double length, double permeability, double dSandlayer, double waterViscosity) + // { + // return TermAlpha(length, dSandlayer) * TermC(whitesConstant, beddingAngle, d70, length, permeability, waterViscosity) * + // CGammaPDividedByGammaW * Math.Tan(cDegreeToRadian * beddingAngle) * + // TermLnC(whitesConstant, beddingAngle, d70, length, permeability, waterViscosity); + // + // } + // + // static public double CalculateHCritical(double whitesConstant, double beddingAngle, double d70, double length, double permeability, double dSandlayer, double waterViscosity) + // { + // double result = HcDividedByLNew(whitesConstant, beddingAngle, d70, length, permeability, dSandlayer, + // waterViscosity) * length; + // return result; + // } + // + // + // + // + // /// + // /// Determines the required shoulder (height and length as seen from the original dike toe) + // /// + // /// + // /// + // /// + // /// + // /// + // /// The required dimensions when needed else null + // public override PipingDesign CalculateDesignAtPoint(Location location, SurfaceLine2 surfaceLine, SoilProfile1D soilProfile, double waterLevel, GeometryPoint point) + // { + // // call base class for initializations, this will also calculate the uplift + // var pipingDesign = base.CalculateDesignAtPoint(location, surfaceLine, soilProfile, waterLevel, point); + // // if there is nu uplift, then there is no piping so return null + // if (UpliftLocationAndResult != null) + // { + // // Calculate the piping safety factor using the level of the given point + // var sp = CalculatePipingFactorAtLevel(location, waterLevel, point.Z); + // + // // If too low, then determine required height and length (from uplift) + // if (sp < requiredSafetyFactor) + // { + // // Finally, determine the required shoulderheight + // double currentShoulderHeight = UpliftLocationAndResult.Z - + // surfaceLine.CharacteristicPoints.GetGeometryPoint(CharacteristicPointType.DikeToeAtPolder).Z; + // pipingDesign.ShoulderHeightFromToe = currentShoulderHeight + CalculateExtraShoulderHeight(); + // pipingDesign.PipingLengthFromToe = UpliftLocationAndResult.X - surfaceLine.GetDikeToeInward().X; + // return pipingDesign; + // } + // } + // return null; + // } + + } +} \ No newline at end of file Fisheye: Tag 351 refers to a dead (removed) revision in file `dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/Class1.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests/PipingCalculatorSellmeijer4ForcesTest.cs =================================================================== diff -u --- dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests/PipingCalculatorSellmeijer4ForcesTest.cs (revision 0) +++ dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests/PipingCalculatorSellmeijer4ForcesTest.cs (revision 351) @@ -0,0 +1,108 @@ +//using Deltares.Geotechnics.TestUtils; +//using Deltares.Standard; +using NUnit.Framework; + +namespace Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests +{ + + [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); +// } + } +} + + + + + + Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/Deltares.DamPiping.Sellmeijer4ForcesCalculator.csproj =================================================================== diff -u -r336 -r351 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/Deltares.DamPiping.Sellmeijer4ForcesCalculator.csproj (.../Deltares.DamPiping.Sellmeijer4ForcesCalculator.csproj) (revision 336) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/Deltares.DamPiping.Sellmeijer4ForcesCalculator.csproj (.../Deltares.DamPiping.Sellmeijer4ForcesCalculator.csproj) (revision 351) @@ -37,7 +37,7 @@ Properties\GlobalAssemblyInfo.cs - + Index: dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests.csproj =================================================================== diff -u -r336 -r351 --- dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests.csproj (.../Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests.csproj) (revision 336) +++ dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests.csproj (.../Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests.csproj) (revision 351) @@ -37,7 +37,7 @@ - + Fisheye: Tag 351 refers to a dead (removed) revision in file `dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.Sellmeijer4ForcesCalculatorTests/Class1.cs'. Fisheye: No comparison available. Pass `N' to diff?