Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCalc2Dll.cs =================================================================== diff -u -r371 -r375 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCalc2Dll.cs (.../PipingCalc2Dll.cs) (revision 371) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCalc2Dll.cs (.../PipingCalc2Dll.cs) (revision 375) @@ -19,6 +19,9 @@ public delegate string PC2_Model2GetCalculationMessages(IntPtr CalcHandle); public delegate void PC2_Model2DestroyHandle(IntPtr CalcHandle); + /// + /// Wrapper for MPipingCalc2.dll + /// public class PipingCalc2Dll { Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingModel2Data.cs =================================================================== diff -u -r371 -r375 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingModel2Data.cs (.../PipingModel2Data.cs) (revision 371) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingModel2Data.cs (.../PipingModel2Data.cs) (revision 375) @@ -2,6 +2,9 @@ { using System.Collections.Generic; + /// + /// Data for Piping calculation with PipingCalc2Dll + /// public class PipingModelModel2Data { private double fHeight1 = 0.0; @@ -27,6 +30,9 @@ private bool fIsHeadDropCalculation = true; + /// + /// Initializes a new instance of the class. + /// public PipingModelModel2Data() { fPipingCommonData = new PipingCommonData(); @@ -60,12 +66,20 @@ fRowHeaderTextList.Add("Calculate"); // moved to end } + /// + /// Initializes a new instance of the class. + /// + /// a piping common data. public PipingModelModel2Data(ref PipingCommonData aPipingCommonData) { InitializeDefaults(); fPipingCommonData = aPipingCommonData; } + /// + /// Initializes a new instance of the class. + /// + /// a model2 calculation data. public PipingModelModel2Data(PipingModelModel2Data aModel2CalculationData) { fSeepageLength = aModel2CalculationData.SeepageLength; @@ -90,6 +104,9 @@ fPipingCommonData = new PipingCommonData(aModel2CalculationData.PipingCommonData); } + /// + /// Initializes the defaults. + /// public void InitializeDefaults() { @@ -121,29 +138,118 @@ fIsHeadDropCalculation = true; } + /// + /// Gets or sets the piping common data. + /// + /// + /// The piping common data. + /// public PipingCommonData PipingCommonData { set { fPipingCommonData = value; } get { return fPipingCommonData; } } // Model2 data as properties (VNK) + + /// + /// Gets or sets the length of the seepage. + /// + /// + /// The length of the seepage. + /// public double SeepageLength { set { fSeepageLength = value; } get { return fSeepageLength; } } + /// + /// Gets or sets the length of the crack. + /// + /// + /// The length of the crack. + /// public double CrackLength { set { fCrackLength = value; } get { return fCrackLength; } } + /// + /// Gets or sets the particle diameter. + /// + /// + /// The particle diameter. + /// public double ParticleDiameter { set { fParticleDiameter = value; } get { return fParticleDiameter; } } + /// + /// Gets or sets the height1. + /// + /// + /// The height1. + /// public double Height1 { set { fHeight1 = value; } get { return fHeight1; } } + + /// + /// Gets or sets the height2. + /// + /// + /// The height2. + /// public double Height2 { set { fHeight2 = value; } get { return fHeight2; } } + /// + /// Gets or sets the permeability1. + /// + /// + /// The permeability1. + /// public double Permeability1 { set { fPermeability1 = value; } get { return fPermeability1; } } + + /// + /// Gets or sets the permeability2. + /// + /// + /// The permeability2. + /// public double Permeability2 { set { fPermeability2 = value; } get { return fPermeability2; } } + + /// + /// Gets or sets the permeability3. + /// + /// + /// The permeability3. + /// public double Permeability3 { set { fPermeability3 = value; } get { return fPermeability3; } } + /// + /// Gets or sets the head drop. + /// + /// + /// The head drop. + /// public double HeadDrop { get { return fHeadDrop; } set { fHeadDrop = value; } } + /// + /// Gets or sets a value indicating whether this instance is head drop calculation. + /// + /// + /// true if this instance is head drop calculation; otherwise, false. + /// public bool IsHeadDropCalculation { get { return fIsHeadDropCalculation; } set { fIsHeadDropCalculation = value; } } + /// + /// Gets or sets the messages. + /// + /// + /// The messages. + /// public string Messages { get { return fMessages; } set { fMessages = value; } } + + /// + /// Gets or sets the warning message. + /// + /// + /// The warning message. + /// public string WarningMessage { get { return fWarningMessage; } set { fWarningMessage = value; } } + /// + /// Gets the row header text list. + /// + /// + /// The row header text list. + /// public static List RowHeaderTextList { get { return fRowHeaderTextList; } } } Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCommonData.cs =================================================================== diff -u -r371 -r375 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCommonData.cs (.../PipingCommonData.cs) (revision 371) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCommonData.cs (.../PipingCommonData.cs) (revision 375) @@ -2,18 +2,24 @@ namespace Deltares.DamPiping.SellmeijerVNKCalculator { + /// + /// Common Data for Piping calculation with PipingCalc2Dll + /// public class PipingCommonData { - // soil properties - - // calc params - + /// + /// Initializes a new instance of the class. + /// public PipingCommonData() { IsAdjustHeadDrop = true; InitializeDefaults(); } + /// + /// Initializes a new instance of the class. + /// + /// The piping common data. public PipingCommonData(PipingCommonData pipingCommonData) { WaterViscosity = pipingCommonData.WaterViscosity; @@ -28,15 +34,73 @@ FluidisationGradient = pipingCommonData.FluidisationGradient; } + /// + /// Gets or sets the water viscosity. + /// + /// + /// The water viscosity. + /// public double WaterViscosity { get; set; } + + /// + /// Gets or sets the water unit weight. + /// + /// + /// The water unit weight. + /// public double WaterUnitWeight { get; set; } + + /// + /// Gets or sets the particle unit weight. + /// + /// + /// The particle unit weight. + /// public double ParticleUnitWeight { get; set; } + + /// + /// Gets or sets the whites constant. + /// + /// + /// The whites constant. + /// public double WhitesConstant { get; set; } + + /// + /// Gets or sets the bedding angle. + /// + /// + /// The bedding angle. + /// public double BeddingAngle { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is adjust head drop. + /// + /// + /// true if this instance is adjust head drop; otherwise, false. + /// public bool IsAdjustHeadDrop { get; set; } + + /// + /// Gets or sets the safety factor. + /// + /// + /// The safety factor. + /// public double SafetyFactor { get; set; } + + /// + /// Gets or sets the fluidisation gradient. + /// + /// + /// The fluidisation gradient. + /// public double FluidisationGradient { get; set; } + /// + /// Initializes the defaults. + /// public void InitializeDefaults() { WaterViscosity = Physics.WaterViscosity; Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingModel2Calculation.cs =================================================================== diff -u -r371 -r375 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingModel2Calculation.cs (.../PipingModel2Calculation.cs) (revision 371) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingModel2Calculation.cs (.../PipingModel2Calculation.cs) (revision 375) @@ -1,32 +1,13 @@ namespace Deltares.DamPiping.SellmeijerVNKCalculator { using System; - using System.Text; - using System.IO; using System.Runtime.InteropServices; - using System.Globalization; - using System.Collections.Generic; - [StructLayout(LayoutKind.Sequential)] - public struct RingDataStruct - { - public double WaterUnitWeight; //1 - public double WaterViscosity; //2 - public double ParticleUnitWeight; //3 - public double ParticleDiameter; //4 - public double Model2Layer1Thickness; //5 - public double Model2Layer2Thickness; //6 - public double Model2Soil1Permeability; //7 - public double Model2Soil2Permeability; //8 - public double Model2Soil3Permeability; //9 - public double VerticalSeepageLength; //10 - public double SeepageLength; //11 - public double BeddingAngle; //12 - public double WhitesConstant; //13 - public double SafetyFactor; //14 - public double FluidisationGradient; //15 - } ; + #region Structs + /// + /// Struct for Soil Poperties + /// [StructLayout(LayoutKind.Sequential)] public struct SoilPropertiesStruct { @@ -36,13 +17,19 @@ public double WhitesConstant; //4 } ; + /// + /// Struct for Water Poperties + /// [StructLayout(LayoutKind.Sequential)] public struct WaterPropertiesStruct { public double UnitWeight; public double Viscosity; } ; + /// + /// Struct for Calculation Parameters + /// [StructLayout(LayoutKind.Sequential)] public struct CalculationParametersStruct { @@ -53,114 +40,206 @@ public double FluidisationGradient; //4 } + #endregion Strucs + + /// + /// Runs the PipingCalc2Dll + /// public class PipingModel2Calculation { - private const string sPipingParametersSectionId = "[PipingParameters]"; - private const int cTotalParameterCount = 15; - private const string sDebugFile = "VNK-Debug.log"; - private const int cMaxPath = 256; - private PipingModelModel2Data fCurrentCalculationData = null; private string fHomeDir = ""; private string fSessionId = ""; + /// + /// Initializes a new instance of the class. + /// public PipingModel2Calculation() { fCurrentCalculationData = new PipingModelModel2Data(); } + /// + /// Initializes a new instance of the class. + /// + /// a piping common data. public PipingModel2Calculation(ref PipingCommonData aPipingCommonData) { fCurrentCalculationData = new PipingModelModel2Data(ref aPipingCommonData); } - // wrap the Model2 data as properties here again (VNK) + /// + /// Gets or sets the piping common data. + /// wrap the Model2 data as properties here again (VNK) + /// public PipingCommonData PipingCommonData { set { fCurrentCalculationData.PipingCommonData = value; } get { return fCurrentCalculationData.PipingCommonData; } } + /// + /// Gets or sets a value indicating whether this instance is head drop calculation. + /// + /// + /// true if this instance is head drop calculation; otherwise, false. + /// public bool IsHeadDropCalculation { set { fCurrentCalculationData.IsHeadDropCalculation = value; } get { return fCurrentCalculationData.IsHeadDropCalculation; } } + /// + /// Gets or sets the length of the seepage. + /// + /// + /// The length of the seepage. + /// public double SeepageLength { set { fCurrentCalculationData.SeepageLength = value; } get { return fCurrentCalculationData.SeepageLength; } } + /// + /// Gets or sets the length of the crack. + /// + /// + /// The length of the crack. + /// public double CrackLength { set { fCurrentCalculationData.CrackLength = value; } get { return fCurrentCalculationData.CrackLength; } } + /// + /// Gets or sets the particle diameter. + /// + /// + /// The particle diameter. + /// public double ParticleDiameter { set { fCurrentCalculationData.ParticleDiameter = value; } get { return fCurrentCalculationData.ParticleDiameter; } } + /// + /// Gets or sets the height1. + /// + /// + /// The height1. + /// public double Height1 { set { fCurrentCalculationData.Height1 = value; } get { return fCurrentCalculationData.Height1; } } + /// + /// Gets or sets the height2. + /// + /// + /// The height2. + /// public double Height2 { set { fCurrentCalculationData.Height2 = value; } get { return fCurrentCalculationData.Height2; } } + /// + /// Gets or sets the permeability1. + /// + /// + /// The permeability1. + /// public double Permeability1 { set { fCurrentCalculationData.Permeability1 = value; } get { return fCurrentCalculationData.Permeability1; } } + /// + /// Gets or sets the permeability2. + /// + /// + /// The permeability2. + /// public double Permeability2 { set { fCurrentCalculationData.Permeability2 = value; } get { return fCurrentCalculationData.Permeability2; } } + /// + /// Gets or sets the permeability3. + /// + /// + /// The permeability3. + /// public double Permeability3 { set { fCurrentCalculationData.Permeability3 = value; } get { return fCurrentCalculationData.Permeability3; } } + /// + /// Gets or sets the head drop. + /// + /// + /// The head drop. + /// public double HeadDrop { get { return fCurrentCalculationData.HeadDrop; } set { fCurrentCalculationData.HeadDrop = value; } } + /// + /// Gets or sets the messages. + /// + /// + /// The messages. + /// public string Messages { get { return fCurrentCalculationData.Messages; } set { fCurrentCalculationData.Messages = value; } } + /// + /// Gets or sets the home dir. + /// + /// + /// The home dir. + /// public string HomeDir { get { return fHomeDir; } set { fHomeDir = value; } } + /// + /// Gets or sets the session identifier. + /// + /// + /// The session identifier. + /// public string SessionId { get { return fSessionId; } set { fSessionId = value; } } + /// + /// Calculates the head drop pc2. + /// + /// Error in Piping DLL public void CalculateHeadDropPC2() { const string cMessageError = "Error"; @@ -248,275 +327,5 @@ } } -// /// -// /// Throw helper -// /// -// /// -// public void ThrowIfNotAssigned(Object currentObject, string objectName) -// { -// if (currentObject == null) -// { -// throw new PipingCalculationException(string.Format("Missing input {0}", objectName)); -// } -// } -// -// -// -// /// -// /// Read debug log from file -// /// -// /// -// /// -// private string ReadDebugLog(string APath) -// { -// try -// { -// StreamReader stream = File.OpenText(APath); -// stream.ReadLine(); // first line -// -// string LLine2 = stream.ReadToEnd(); -// stream.Close(); -// File.Delete(APath); -// -// return LLine2; -// } -// catch -// { -// return null; -// } -// } -// -// // TEMP... this has to be done more generically -// private void SetCurrentValueFromString(string aField, string aValue) -// { -// double doubleValue = 0.0; -// bool boolValue = true; -// -// switch (aField) -// { -// case "gamma_w": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.PipingCommonData.WaterUnitWeight = doubleValue; -// break; -// } -// case "mu": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CMinWaterViscosity, -// PipingConstants.CMaxWaterViscosity, ref doubleValue)) -// fCurrentCalculationData.PipingCommonData.WaterViscosity = doubleValue; -// break; -// } -// case "gamma_p": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.PipingCommonData.ParticleUnitWeight = doubleValue; -// break; -// } -// case "eta": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CMinWhitesConstant, -// PipingConstants.CMaxWhitesConstant, ref doubleValue)) -// fCurrentCalculationData.PipingCommonData.WhitesConstant = doubleValue; -// break; -// } -// case "theta": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CMinBeddingAngle, -// PipingConstants.CMaxBeddingAngle, ref doubleValue)) -// fCurrentCalculationData.PipingCommonData.BeddingAngle = doubleValue; -// break; -// } -// case "Adapt": -// { -// if (GetBoolValueFromString(aValue, ref boolValue)) -// fCurrentCalculationData.PipingCommonData.IsAdjustHeadDrop = boolValue; -// break; -// } -// case "F": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CMinSafetyFactor, -// PipingConstants.CMaxSafetyFactor, ref doubleValue)) -// fCurrentCalculationData.PipingCommonData.SafetyFactor = doubleValue; -// break; -// } -// case "i": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CMinFluidisationGradient, -// PipingConstants.CMaxFluidisationGradient, ref doubleValue)) -// fCurrentCalculationData.PipingCommonData.FluidisationGradient = doubleValue; -// break; -// } -// case "D1": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.Height1 = doubleValue; -// break; -// } -// case "D2": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.Height2 = doubleValue; -// break; -// } -// case "K1": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.Permeability1 = doubleValue; -// break; -// } -// case "K2": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.Permeability2 = doubleValue; -// break; -// } -// case "K3": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.Permeability3 = doubleValue; -// break; -// } -// case "Do": -// { -// if (ValidateDoubleToRangeFromString(aValue, 0.0, PipingConstants.CDelphiMaxDouble, -// ref doubleValue)) -// fCurrentCalculationData.CrackLength = doubleValue; -// break; -// } -// case "d70": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.ParticleDiameter = doubleValue; -// break; -// } -// case "L": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.SeepageLength = doubleValue; -// break; -// } -// case "dH": -// { -// if (ValidateDoubleToRangeFromString(aValue, PipingConstants.CNoiseTolerance, -// PipingConstants.CDelphiMaxDouble, ref doubleValue)) -// fCurrentCalculationData.HeadDrop = doubleValue; -// break; -// } -// case "Calculate": -// { -// if (aValue == PipingModelModel2Data.RowHeaderTextList[15]) -// fCurrentCalculationData.IsHeadDropCalculation = false; -// else -// fCurrentCalculationData.IsHeadDropCalculation = true; -// break; -// } -// default: -// break; -// } -// } -// -// // TEMP... this has to be done more generically -// private bool ValidateDoubleToRangeFromString(string aStringValue, double aMin, double aMax, ref double aValue) -// { -// double doubleValue = 0.0; -// -// // the CSV read would have changed all decimal separators to '.' -// // specify this to the double parsing, else we'd get wrong values -// // if the current thread has a diff decimal separator -// NumberFormatInfo ni = new NumberFormatInfo(); -// ni.CurrencyDecimalSeparator = "."; -// ni.NumberDecimalSeparator = "."; -// -// try -// { -// doubleValue = Double.Parse(aStringValue, ni); -// } -// catch -// { -// return false; -// } -// -// if (doubleValue < aMin) -// doubleValue = aMin; -// else if (doubleValue > aMax) -// doubleValue = aMax; -// -// aValue = doubleValue; -// return true; -// } -// -// private bool GetBoolValueFromString(string aStringValue, ref bool aValue) -// { -// bool boolValue = true; -// -// try -// { -// boolValue = bool.Parse(aStringValue); -// } -// catch -// { -// return false; -// } -// -// aValue = boolValue; -// return true; -// } -// - /// - /// - /// - /// - public List ParametersToStrings() - { - List parameterStrings = new List(); - - // soil properties - parameterStrings.Add(sPipingParametersSectionId); - parameterStrings.Add(String.Format("BeddingAngle={0}", fCurrentCalculationData.PipingCommonData.BeddingAngle)); - parameterStrings.Add(String.Format("ParticleDiameter={0}", fCurrentCalculationData.ParticleDiameter)); - parameterStrings.Add(String.Format("ParticleUnitWeight={0:0.00}", - fCurrentCalculationData.PipingCommonData.ParticleUnitWeight)); - parameterStrings.Add(String.Format("WhitesConstant={0}", - fCurrentCalculationData.PipingCommonData.WhitesConstant)); - //// water properties - parameterStrings.Add(String.Format("WaterUnitWeight={0:0.00}", - fCurrentCalculationData.PipingCommonData.WaterUnitWeight)); - parameterStrings.Add(String.Format("WaterViscosity={0:E4}", - fCurrentCalculationData.PipingCommonData.WaterViscosity)); - - parameterStrings.Add(String.Format("CrackLength={0:0.00}", fCurrentCalculationData.CrackLength)); - parameterStrings.Add(String.Format("HeadDrop={0:0.00}", fCurrentCalculationData.HeadDrop)); - parameterStrings.Add(String.Format("SeepageLength={0:0.00}", fCurrentCalculationData.SeepageLength)); - - //// heights - parameterStrings.Add(String.Format("Height1={0:0.00}", fCurrentCalculationData.Height1)); - parameterStrings.Add(String.Format("Height2={0:0.00}", fCurrentCalculationData.Height2)); - //// permeabilities - parameterStrings.Add(String.Format("Permeability1={0:E5}", fCurrentCalculationData.Permeability1)); - parameterStrings.Add(String.Format("Permeability2={0:E5}", fCurrentCalculationData.Permeability2)); - parameterStrings.Add(String.Format("Permeability3={0:E5}", fCurrentCalculationData.Permeability3)); - - parameterStrings.Add(String.Format("IsHeadDropCalculation={0}", - fCurrentCalculationData.IsHeadDropCalculation)); - parameterStrings.Add(String.Format("IsAdjustHeadDrop={0}", - fCurrentCalculationData.PipingCommonData.IsAdjustHeadDrop)); - parameterStrings.Add(String.Format("SafetyFactor={0:0.00}", - fCurrentCalculationData.PipingCommonData.SafetyFactor)); - parameterStrings.Add(String.Format("FluidisationGradient={0:0.00}", - fCurrentCalculationData.PipingCommonData.FluidisationGradient)); - - return parameterStrings; - } - } } \ No newline at end of file Index: dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.SellmeijerVNKCalculatorTests/PipingModel2CalculationTest.cs =================================================================== diff -u --- dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.SellmeijerVNKCalculatorTests/PipingModel2CalculationTest.cs (revision 0) +++ dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.SellmeijerVNKCalculatorTests/PipingModel2CalculationTest.cs (revision 375) @@ -0,0 +1,124 @@ +using Deltares.DamPiping.SellmeijerVNKCalculator; +using Deltares.DamPiping.SellmeijerVNKCalculator.Geo; + +namespace Deltares.DamPiping.SellmeijerVNKCalculatorTests +{ + using NUnit.Framework; + + [TestFixture] + public class TestPipingModel2Calculation + { + private const double cToleranceHeadDrop = 0.005; + + [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); + } + + } +} Index: dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.SellmeijerVNKCalculatorTests/Deltares.DamPiping.SellmeijerVNKCalculatorTests.csproj =================================================================== diff -u -r366 -r375 --- dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.SellmeijerVNKCalculatorTests/Deltares.DamPiping.SellmeijerVNKCalculatorTests.csproj (.../Deltares.DamPiping.SellmeijerVNKCalculatorTests.csproj) (revision 366) +++ dam failuremechanisms/damPiping/trunk/src/Tests/Deltares.DamPiping.SellmeijerVNKCalculatorTests/Deltares.DamPiping.SellmeijerVNKCalculatorTests.csproj (.../Deltares.DamPiping.SellmeijerVNKCalculatorTests.csproj) (revision 375) @@ -46,6 +46,7 @@ + Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/PipingCalculatorSellmeijer4Forces.cs =================================================================== diff -u -r374 -r375 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/PipingCalculatorSellmeijer4Forces.cs (.../PipingCalculatorSellmeijer4Forces.cs) (revision 374) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.Sellmeijer4ForcesCalculator/PipingCalculatorSellmeijer4Forces.cs (.../PipingCalculatorSellmeijer4Forces.cs) (revision 375) @@ -5,7 +5,9 @@ namespace Deltares.DamPiping.Sellmeijer4ForcesCalculator { - + /// + /// Calculates piping according to Sellmeijer 4 Forces + /// public class PipingCalculatorSellmeijer4Forces { Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCalculationException.cs =================================================================== diff -u -r371 -r375 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCalculationException.cs (.../PipingCalculationException.cs) (revision 371) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCalculationException.cs (.../PipingCalculationException.cs) (revision 375) @@ -3,23 +3,44 @@ using System; using System.Runtime.Serialization; + /// + /// Exception class for Piping Calculation + /// + /// [Serializable] public class PipingCalculationException : Exception { + /// + /// Initializes a new instance of the class. + /// public PipingCalculationException() { } + /// + /// Initializes a new instance of the class. + /// + /// The message that describes the error. public PipingCalculationException(string message) : base(message) { } + /// + /// Initializes a new instance of the class. + /// + /// The message. + /// The inner. public PipingCalculationException(string message, Exception inner) : base(message, inner) { } + /// + /// Initializes a new instance of the class. + /// + /// The that holds the serialized object data about the exception being thrown. + /// The that contains contextual information about the source or destination. protected PipingCalculationException(SerializationInfo info, StreamingContext context) : base(info, context) { Index: dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCalculatorSellmeijerVNK.cs =================================================================== diff -u -r374 -r375 --- dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCalculatorSellmeijerVNK.cs (.../PipingCalculatorSellmeijerVNK.cs) (revision 374) +++ dam failuremechanisms/damPiping/trunk/src/Deltares.DamPiping.SellmeijerVNKCalculator/PipingCalculatorSellmeijerVNK.cs (.../PipingCalculatorSellmeijerVNK.cs) (revision 375) @@ -5,6 +5,9 @@ namespace Deltares.DamPiping.SellmeijerVNKCalculator { + /// + /// Calculates piping according to Sellmeijer VNK + /// public class PipingCalculatorSellmeijerVNK { @@ -123,18 +126,9 @@ foSp = DetermineFactorOfSafety(hc, reducedFall); } - private PipingModel2Calculation SetData() - { - var pipingModel2Calculation = CreateAndFillPipingModel2Calculation(); - pipingModel2Calculation.IsHeadDropCalculation = true; // Constant - pipingModel2Calculation.SeepageLength = SeepageLength; - pipingModel2Calculation.CrackLength = DTotal; - return pipingModel2Calculation; - } - internal double CalculateHCritical() { - PipingModel2Calculation pipingModel2Calculation = SetData(); + PipingModel2Calculation pipingModel2Calculation = CreateAndFillPipingModel2Calculation(); // 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, @@ -180,6 +174,10 @@ { var pipingModel2Calculation = new PipingModel2Calculation(); + pipingModel2Calculation.IsHeadDropCalculation = true; // Constant + pipingModel2Calculation.SeepageLength = SeepageLength; + pipingModel2Calculation.CrackLength = DTotal; + pipingModel2Calculation.HeadDrop = 0.0;// Not used, to be calculated pipingModel2Calculation.PipingCommonData.BeddingAngle = BeddingAngle; // From soilmaterials of upper sandlayer pipingModel2Calculation.PipingCommonData.FluidisationGradient = Rc; //Constant