Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedKernelWrapperTests.cs
===================================================================
diff -u -r1692 -r1897
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedKernelWrapperTests.cs (.../WbiPipingSellmeijerRevisedKernelWrapperTests.cs) (revision 1692)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedKernelWrapperTests.cs (.../WbiPipingSellmeijerRevisedKernelWrapperTests.cs) (revision 1897)
@@ -136,6 +136,11 @@
ModelFactors =
{
UpliftCriterionPiping = 1.0
+ },
+ ModelParametersForPlLines =
+ {
+ DampingFactorPl3 = 0.25,
+ DampingFactorPl4 = 0.10
}
};
@@ -149,6 +154,7 @@
FailureMechanismSystemType = FailureMechanismSystemType.Piping,
PipingModelType = PipingModelType.Wti2017
};
+
var damKernelInput = new DamKernelInput
{
Location = location,
@@ -161,6 +167,7 @@
IKernelDataOutput kernelDataOutput;
kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput);
var damPipingInput = (WbiPipingSellmeijerRevisedInput)kernelDataInput;
+ var damPipingOutput = (WbiPipingSellmeijerRevisedOutput)kernelDataOutput;
Assert.AreEqual(1.0, damPipingInput.HRiver, diff);
Assert.AreEqual(0.0, damPipingInput.HExit, diff);
Assert.AreEqual(0.3, damPipingInput.Rc, diff);
@@ -172,6 +179,16 @@
Assert.AreEqual(37.0, damPipingInput.BeddingAngle, diff);
Assert.AreEqual(1.33E-06, damPipingInput.KinematicViscosityWater, diff);
Assert.AreEqual(0.0001, damPipingInput.DarcyPermeability, diff);
+ Assert.AreEqual(1.000, damPipingInput.ModelFactorUplift, diff);
+ Assert.AreEqual(-17.62, damPipingInput.EffectiveStress, diff);
+ Assert.AreEqual(0.75, damPipingInput.PhiExit, diff);
+ Assert.AreEqual(0.75, damPipingInput.RExit, diff);
+ Assert.AreEqual(0.00, damPipingInput.PhiPolder, diff);
+
+ Assert.AreEqual(-17.62, damPipingOutput.EffectiveStress, diff);
+ Assert.AreEqual(50.50, damPipingOutput.ExitPointX, diff);
+ Assert.AreEqual(0.0741358539523677, damPipingOutput.UpliftFactor, diff);
+ Assert.AreEqual(true, damPipingOutput.UpliftSituation.IsUplift);
}
[Test]
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedOutput.cs
===================================================================
diff -u -r1618 -r1897
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedOutput.cs (.../WbiPipingSellmeijerRevisedOutput.cs) (revision 1618)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedOutput.cs (.../WbiPipingSellmeijerRevisedOutput.cs) (revision 1897)
@@ -32,14 +32,22 @@
public class WbiPipingSellmeijerRevisedOutput: IKernelDataOutput
{
///
- /// Gets or sets the safetyfactor.
+ /// Gets or sets the piping safetyfactor.
///
///
/// The fo sp.
///
public double FoSp { get; set; }
///
+ /// Gets or sets the uplift safetyfactor.
+ ///
+ ///
+ /// The fo sp.
+ ///
+ public double FoSu { get; set; }
+
+ ///
/// Gets or sets the H-critical (critical head difference for piping).
///
///
@@ -48,6 +56,14 @@
public double Hc { get; set; }
///
+ /// Gets or sets the H-critical (critical head difference for uplift).
+ ///
+ ///
+ /// The hc.
+ ///
+ public double Hcu { get; set; }
+
+ ///
/// Gets or sets the calculation result.
///
///
@@ -78,5 +94,13 @@
/// The uplift situation.
///
public UpliftSituation UpliftSituation { get; set; }
+
+ ///
+ /// Gets or sets the effective stress.
+ ///
+ ///
+ /// The effective stress.
+ ///
+ public double EffectiveStress { get; set; }
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedKernelWrapper.cs
===================================================================
diff -u -r1692 -r1897
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedKernelWrapper.cs (.../WbiPipingSellmeijerRevisedKernelWrapper.cs) (revision 1692)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedKernelWrapper.cs (.../WbiPipingSellmeijerRevisedKernelWrapper.cs) (revision 1897)
@@ -263,6 +263,14 @@
return DesignStrategy.ShoulderPerPoint;
}
+ ///
+ /// Evaluates the uplift situation and prepares the input for the wbi-piping and the qbi-uplift calculation.
+ ///
+ /// The dam kernel input.
+ /// The kernel data input.
+ /// The pl lines.
+ /// The water level.
+ /// The dam piping output.
private static void EvaluateUpliftSituation(DamKernelInput damKernelInput, out IKernelDataInput kernelDataInput,
PlLines plLines, double waterLevel,
WbiPipingSellmeijerRevisedOutput damPipingOutput)
@@ -321,6 +329,19 @@
inBetweenAquiferlayerSoil = soilProfile1D.InBetweenAquiferLayer.Soil;
}
+ // Additional parameters for Uplift
+ var phiPolder = referenceLevel;
+ var rExit = 1 - location.ModelParametersForPlLines.DampingFactorPl3;
+ if (soilProfile1D.InBetweenAquiferLayer != null)
+ {
+ rExit = 1 - location.ModelParametersForPlLines.DampingFactorPl4;
+ }
+ var effectiveThicknessCalculator = CreateEffectiveThicknessCalculator(soilProfile1D, surfaceLine, location.PolderLevel,
+ Physics.UnitWeightOfwater, xExit);
+ effectiveThicknessCalculator.Calculate();
+ var effectiveStress = effectiveThicknessCalculator.EffectiveStress;
+
+ // Fill the input for the wbi-uplift calculation as well as the wbi-piping SellmeijerRevised calculation.
kernelDataInput = new WbiPipingSellmeijerRevisedInput()
{
HRiver = waterLevel,
@@ -330,17 +351,29 @@
SeepageLength = seepageLength,
// specific Sellmeijer 4 Forces
KinematicViscosityWater = Physics.WaterViscosity,
+ VolumetricWeightOfWater = Physics.UnitWeightOfwater,
WhitesDragCoefficient = inBetweenAquiferlayerSoil.WhitesConstant,
BeddingAngle = inBetweenAquiferlayerSoil.BeddingAngle,
D70 = d70,
DAquifer = aquiferHeight,
DarcyPermeability = permeabilityKx,
+ ModelFactorUplift = 1.0,
+ EffectiveStress = effectiveStress,
+ PhiExit = phiPolder + rExit * (waterLevel - phiPolder),
+ RExit = rExit,
+ PhiPolder = phiPolder
};
+ damPipingOutput.EffectiveStress = effectiveStress;
damPipingOutput.ExitPointX = xExit;
damPipingOutput.UpliftFactor = upliftFactor;
damPipingOutput.UpliftSituation = upliftSituation;
}
+ ///
+ /// Creates the piping calculator wbi sellmeijer revised.
+ ///
+ /// The kernel data input.
+ /// the Sellmeijer2011Calculator
private static Sellmeijer2011Calculator CreatePipingCalculatorWbiSellmeijerRevised(IKernelDataInput kernelDataInput)
{
var wbiPipingSellmeijerRevisedInput = kernelDataInput as WbiPipingSellmeijerRevisedInput;
@@ -368,6 +401,104 @@
return calculator;
}
+ ///
+ /// Converts the CharacteristicPointType to PipingCharacteristicPointType.
+ ///
+ /// Type of the characteristic point.
+ /// the PipingCharacteristicPointType
+ private static PipingCharacteristicPointType ConvertToPipingPointType(CharacteristicPointType characteristicPointType)
+ {
+ switch (characteristicPointType)
+ {
+ case CharacteristicPointType.BottomDitchDikeSide: return PipingCharacteristicPointType.BottomDitchDikeSide;
+ case CharacteristicPointType.BottomDitchPolderSide: return PipingCharacteristicPointType.BottomDitchPolderSide;
+ case CharacteristicPointType.DikeToeAtPolder: return PipingCharacteristicPointType.DikeToeAtPolder;
+ case CharacteristicPointType.DitchDikeSide: return PipingCharacteristicPointType.DitchDikeSide;
+ case CharacteristicPointType.DitchPolderSide: return PipingCharacteristicPointType.DitchPolderSide;
+ case CharacteristicPointType.ShoulderBaseInside: return PipingCharacteristicPointType.ShoulderBaseInside;
+ default: return PipingCharacteristicPointType.None;
+ }
+ }
+
+ ///
+ /// Converts a SurfaceLine2 to piping surface line.
+ ///
+ /// The surface line.
+ /// the PipingSurfaceLine
+ private static PipingSurfaceLine ConvertToPipingSurfaceLine(SurfaceLine2 surfaceLine)
+ {
+ var pipingSurfaceLine = new PipingSurfaceLine();
+ foreach (var surfaceLineCharacteristicPoint in surfaceLine.CharacteristicPoints)
+ {
+ var pipingPoint = new PipingPoint
+ {
+ X = surfaceLineCharacteristicPoint.X,
+ Y = surfaceLineCharacteristicPoint.Y,
+ Z = surfaceLineCharacteristicPoint.Z,
+ Type = ConvertToPipingPointType(surfaceLineCharacteristicPoint.CharacteristicPointType)
+ };
+ pipingSurfaceLine.Points.Add(pipingPoint);
+ }
+ return pipingSurfaceLine;
+ }
+
+ ///
+ /// Converts a SoilProfile1D to piping profile.
+ ///
+ /// The soil profile1 d.
+ /// the PipingProfile
+ private static PipingProfile ConvertToPipingProfile(SoilProfile1D soilProfile1D)
+ {
+ var pipingProfile = new PipingProfile();
+ foreach (var soilLayer1D in soilProfile1D.Layers)
+ {
+ var pipingLayer = new PipingLayer
+ {
+ AbovePhreaticLevel = soilLayer1D.Soil.AbovePhreaticLevel,
+ BelowPhreaticLevel = soilLayer1D.Soil.BelowPhreaticLevel,
+ DryUnitWeight = soilLayer1D.Soil.DryUnitWeight,
+ IsAquifer = soilLayer1D.IsAquifer,
+ TopLevel = soilLayer1D.TopLevel,
+ Name = soilLayer1D.Name
+ };
+ pipingProfile.Layers.Add(pipingLayer);
+ }
+ if (pipingProfile.Layers.Count > 0)
+ {
+ pipingProfile.BottomLevel = pipingProfile.Layers[pipingProfile.Layers.Count - 1].TopLevel - 10;
+ }
+ return pipingProfile;
+ }
+
+ ///
+ /// Creates the effective thickness calculator.
+ ///
+ /// The soil profile.
+ /// The surface line.
+ /// The phreatic level.
+ /// The volumetric weight of water.
+ /// The x exit.
+ /// the EffectiveThicknessCalculator
+ private static EffectiveThicknessCalculator CreateEffectiveThicknessCalculator(SoilProfile1D soilProfile, SurfaceLine2 surfaceLine,
+ double phreaticLevel, double volumicWeightOfWater, double xExit)
+ {
+ var calculator = new EffectiveThicknessCalculator
+ {
+ SurfaceLine = ConvertToPipingSurfaceLine(surfaceLine),
+ SoilProfile = ConvertToPipingProfile(soilProfile),
+ PhreaticLevel = phreaticLevel,
+ VolumicWeightOfWater = volumicWeightOfWater,
+ ExitPointXCoordinate = xExit
+ };
+ return calculator;
+ }
+
+ ///
+ /// Performs the single calculation wbi sellmeijer revised.
+ ///
+ /// The messages.
+ /// The wbi piping output.
+ /// The wbi piping input.
private static void PerformSingleCalculationWbiSellmeijerRevised(out List messages, WbiPipingSellmeijerRevisedOutput wbiPipingOutput,
WbiPipingSellmeijerRevisedInput wbiPipingInput)
{
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedInput.cs
===================================================================
diff -u -r1586 -r1897
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedInput.cs (.../WbiPipingSellmeijerRevisedInput.cs) (revision 1586)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WbiPipingSellmeijerRevised/WbiPipingSellmeijerRevisedInput.cs (.../WbiPipingSellmeijerRevisedInput.cs) (revision 1897)
@@ -165,5 +165,44 @@
///
public double DAquifer { get; set; }
+ ///
+ /// Gets or sets the model factor uplift.
+ ///
+ ///
+ /// The model factor uplift.
+ ///
+ public double ModelFactorUplift { get; set; }
+
+ ///
+ /// Gets or sets the effective stress.
+ ///
+ ///
+ /// The effective stress.
+ ///
+ public double EffectiveStress { get; set; }
+
+ ///
+ /// Gets or sets the phi exit.
+ ///
+ ///
+ /// The phi exit.
+ ///
+ public double PhiExit { get; set; }
+
+ ///
+ /// Gets or sets the r exit.
+ ///
+ ///
+ /// The r exit.
+ ///
+ public double RExit { get; set; }
+
+ ///
+ /// Gets or sets the phi polder.
+ ///
+ ///
+ /// The phi polder.
+ ///
+ public double PhiPolder { get; set; }
}
}