using System; using System.Diagnostics; namespace Deltares.Stability.Calculation.Inner { public class SoilParametersCalculate { // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double getDefaultNormalDesignFromMean(double ADesignPartial, double AMean, double ADesignStdDev, double AVariationCoef) { double result; try { result = (1/ADesignPartial)*AMean*(1 + (ADesignStdDev*AVariationCoef)); } catch { result = 0; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double getDefaultLogNormalDesignFromMean(double ADesignPartial, double AMean, double ADesignStdDev, double AVariationCoef) { double result; double YMean; double LSigmaY; try { LSigmaY = Math.Sqrt(Math.Log(1 + AVariationCoef*AVariationCoef)); YMean = 0.5*Math.Log(AMean*AMean/(AVariationCoef*AVariationCoef + 1)); result = (1/ADesignPartial)*Math.Exp(YMean + ADesignStdDev*LSigmaY); } catch { result = 0; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double GetDefaultDesignFromMean(TDistributionTypeSet ADistribution, double ADesignPartial, double AMean, double ADesignStdDev, double AVariationCoef) { double result; result = 0; if ((ADistribution == TDistributionTypeSet.dsNormal)) { result = getDefaultNormalDesignFromMean(ADesignPartial, AMean, ADesignStdDev, AVariationCoef); } if ((ADistribution == TDistributionTypeSet.dsLogNormal)) { result = getDefaultLogNormalDesignFromMean(ADesignPartial, AMean, ADesignStdDev, AVariationCoef); } if ((ADistribution == TDistributionTypeSet.dsNone)) { result = AMean/ADesignPartial; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double getNormalDesignFromMean(double ADesignPartial, double AMean, double ADesignStdDev, double AStdDev) { double result; try { result = (1/ADesignPartial)*(AMean + (ADesignStdDev*AStdDev)); } catch { result = 0; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // 2004-01-14 Best Error in getLogNormalDesignFromMean solved // ======================================================================================================================= public static double getLogNormalDesignFromMean(double ADesignPartial, double AMean, double ADesignStdDev, double AStdDev) { double result; double YMean; double LVx; double LPartial; double LSigmaY; try { LPartial = 1/ADesignPartial; LVx = AStdDev/AMean; LSigmaY = Math.Sqrt(Math.Log(1 + LVx*LVx)); YMean = 0.5*Math.Log(AMean*AMean/(LVx*LVx + 1)); result = LPartial*Math.Exp(YMean + ADesignStdDev*LSigmaY); } catch { result = 0; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double GetUserDesignFromMean(TDistributionTypeSet ADistribution, double ADesignPartial, double AMean, double ADesignStdDev, double AStdDev) { double result; result = 0; if ((ADistribution == TDistributionTypeSet.dsNormal)) { result = getNormalDesignFromMean(ADesignPartial, AMean, ADesignStdDev, AStdDev); } if ((ADistribution == TDistributionTypeSet.dsLogNormal)) { result = getLogNormalDesignFromMean(ADesignPartial, AMean, ADesignStdDev, AStdDev); } if ((ADistribution == TDistributionTypeSet.dsNone)) { result = AMean/ADesignPartial; } return result; } // ======================================================================================================================= // Decription GetDesignFromMean. // The assumption is that the input parameters (ASoil.Cohesion) etc // are the mean values. From these values (and defaults or known std) the design // values are calculated // // Date ID Modification // 2003-09-10 Best Created. // 2006-03-03 Zant Parameters for CuGradient added. // 2007-02-12 Zant POP added. Dist and StdDev RatioCuPc Passive and Active added. // 2007-02-22 Zant CompressionRatio added to probabilistic defaults. // ======================================================================================================================= public static double GetDesignFromMean(TConvertTypeSet AConvert, TStabSoilData ASoil, TProbabilisticDefaults ADefault) { double result; result = 0; if (((ASoil != null))) { if (ASoil.UseProbDefaults) { switch (AConvert) { case TConvertTypeSet.ctCohesion: result = GetDefaultDesignFromMean(ASoil.DistCohesion, ADefault.CohesionDesignPartial, ASoil.Cohesion, ADefault.CohesionDesignStdDev, ADefault.CohesionVariationTotal); break; case TConvertTypeSet.ctPhi: result = GetDefaultDesignFromMean(ASoil.DistPhi, ADefault.PhiDesignPartial, ASoil.Phi, ADefault.PhiDesignStdDev, ADefault.PhiVariationTotal); break; case TConvertTypeSet.ctRatioCuPc: result = GetDefaultDesignFromMean(ASoil.DistRatioCuPc, ADefault.RatioCuPcDesignPartial, ASoil.RatioCuPc, ADefault.RatioCuPcDesignStdDev, ADefault.RatioCuPcVariationTotal); break; case TConvertTypeSet.ctCuTop: result = GetDefaultDesignFromMean(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuTop, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuBottom: result = GetDefaultDesignFromMean(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuBottom, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuGradientTop: result = GetDefaultDesignFromMean(ASoil.DistCuTop, ADefault.CuDesignPartial, ASoil.CuTop, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuGradient: result = GetDefaultDesignFromMean(ASoil.DistCuGradient, ADefault.CuDesignPartial, ASoil.CuGradient, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctRatioCuPcPassive: result = GetDefaultDesignFromMean(ASoil.DistRatioCuPc, ADefault.RatioCuPcDesignPartial, ASoil.RatioCuPcPassive, ADefault.RatioCuPcDesignStdDev, ADefault.RatioCuPcVariationTotal); break; case TConvertTypeSet.ctRatioCuPcActive: result = GetDefaultDesignFromMean(ASoil.DistRatioCuPc, ADefault.RatioCuPcDesignPartial, ASoil.RatioCuPcActive, ADefault.RatioCuPcDesignStdDev, ADefault.RatioCuPcVariationTotal); break; case TConvertTypeSet.ctCuPassiveTop: result = GetDefaultDesignFromMean(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuPassiveTop, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuPassiveBottom: result = GetDefaultDesignFromMean(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuPassiveBottom, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuActiveTop: result = GetDefaultDesignFromMean(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuActiveTop, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuActiveBottom: result = GetDefaultDesignFromMean(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuActiveBottom, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctStressTabFactor: result = GetDefaultDesignFromMean(ASoil.DistStressTable, ADefault.StressTableDesignPartial, Constants.CNormValue, ADefault.StressTableDesignStdDev, ADefault.StressTableVariationTotal); break; case TConvertTypeSet.ctPop: result = GetDefaultDesignFromMean(ASoil.DistPOP, ADefault.POPDesignPartial, ASoil.POP, ADefault.POPDesignStdDev, ADefault.POPVariationTotal); break; } } else { switch (AConvert) { case TConvertTypeSet.ctCohesion: // if not use prob defaults result = GetUserDesignFromMean(ASoil.DistCohesion, ASoil.DesignPartialCohesion, ASoil.Cohesion, ASoil.DesignStdCohesion, ASoil.StdCohesion); break; case TConvertTypeSet.ctPhi: result = GetUserDesignFromMean(ASoil.DistPhi, ASoil.DesignPartialPhi, ASoil.Phi, ASoil.DesignStdPhi, ASoil.StdPhi); break; case TConvertTypeSet.ctRatioCuPc: result = GetUserDesignFromMean(ASoil.DistRatioCuPc, ASoil.DesignPartialRatioCuPc, ASoil.RatioCuPc, ASoil.DesignStdRatioCuPc, ASoil.StdRatioCuPc); break; case TConvertTypeSet.ctCuTop: result = GetUserDesignFromMean(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuTop, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuBottom: result = GetUserDesignFromMean(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuBottom, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuGradientTop: result = GetUserDesignFromMean(ASoil.DistCuTop, ASoil.DesignPartialCu, ASoil.CuTop, ASoil.DesignStdCu, ASoil.StdCuTop); break; case TConvertTypeSet.ctCuGradient: result = GetUserDesignFromMean(ASoil.DistCuGradient, ASoil.DesignPartialCu, ASoil.CuGradient, ASoil.DesignStdCu, ASoil.StdCuGradient); break; case TConvertTypeSet.ctRatioCuPcPassive: result = GetUserDesignFromMean(ASoil.DistRatioCuPcPassive, ASoil.DesignPartialRatioCuPc, ASoil.RatioCuPcPassive, ASoil.DesignStdRatioCuPc, ASoil.StdRatioCuPcPassive); break; case TConvertTypeSet.ctRatioCuPcActive: result = GetUserDesignFromMean(ASoil.DistRatioCuPcActive, ASoil.DesignPartialRatioCuPc, ASoil.RatioCuPcActive, ASoil.DesignStdRatioCuPc, ASoil.StdRatioCuPcActive); break; case TConvertTypeSet.ctCuPassiveTop: result = GetUserDesignFromMean(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuPassiveTop, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuPassiveBottom: result = GetUserDesignFromMean(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuPassiveBottom, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuActiveTop: result = GetUserDesignFromMean(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuActiveTop, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuActiveBottom: result = GetUserDesignFromMean(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuActiveBottom, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctStressTabFactor: // if no defaults are given the values must be in the table result = -1; break; case TConvertTypeSet.ctPop: result = GetUserDesignFromMean(ASoil.DistPOP, ASoil.DesignPartialPOP, ASoil.POP, ASoil.DesignStdPOP, ASoil.StdPOP); break; } } } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double getDefaultLogNormalMeanFromDesign(double ADesignPartial, double ADesignValue, double ADesignStdDev, double AVariationCoef) { double result; double LPartial; double YMean; double LSigmaY; try { LPartial = 1/ADesignPartial; LSigmaY = Math.Sqrt(Math.Log(1 + AVariationCoef*AVariationCoef)); YMean = Math.Log(ADesignValue/LPartial) - ADesignStdDev*LSigmaY; result = Math.Exp(YMean + 0.5*LSigmaY*LSigmaY); } catch { result = 0; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double getDefaultNormalMeanFromDesign(double ADesignPartial, double ADesignValue, double ADesignStdDev, double AVariationCoef) { double result; double LPartial; try { LPartial = 1/ADesignPartial; result = ADesignValue/(LPartial*(1 + ADesignStdDev*AVariationCoef)); } catch { result = 0; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double GetDefaultMeanFromDesign(TDistributionTypeSet ADistribution, double ADesignPartial, double ADesignValue, double ADesignStdDev, double AVariationCoef) { double result; result = 0; if ((ADistribution == TDistributionTypeSet.dsNormal)) { result = getDefaultNormalMeanFromDesign(ADesignPartial, ADesignValue, ADesignStdDev, AVariationCoef); } if ((ADistribution == TDistributionTypeSet.dsLogNormal)) { result = getDefaultLogNormalMeanFromDesign(ADesignPartial, ADesignValue, ADesignStdDev, AVariationCoef); } if ((ADistribution == TDistributionTypeSet.dsNone)) { result = ADesignValue*ADesignPartial; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double getNormalMeanFromDesign(double ADesignPartial, double ADesignValue, double ADesignStdDev, double AStdDev) { double result; double LPartial; try { LPartial = 1/ADesignPartial; result = (ADesignValue - (LPartial*ADesignStdDev*AStdDev))/LPartial; } catch { result = 0; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double getLogNormalMeanFromDesign(double ADesignPartial, double ADesignValue, double ADesignStdDev, double AStdDev) { double result; double LPartial; double LVx; double XMeanOld; double XMeanNew; double LSigmaY; double YMean; int LoopCount; bool LReady; try { LPartial = 1/ADesignPartial; XMeanOld = ADesignValue - LPartial*ADesignStdDev*AStdDev; LoopCount = 0; do { LVx = AStdDev/XMeanOld; LSigmaY = Math.Sqrt(Math.Log(1 + LVx*LVx)); YMean = Math.Log(ADesignValue/LPartial) - ADesignStdDev*LSigmaY; XMeanNew = Math.Exp(YMean + 0.5*LSigmaY*LSigmaY); LReady = (Math.Abs(XMeanOld - XMeanNew) < 0.001*ADesignValue); XMeanOld = XMeanNew; LoopCount++; } while (!(LReady || (LoopCount > 20))); Debug.Assert(LReady); result = XMeanNew; } catch { result = 0; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-11-5 Best Created. // ======================================================================================================================= public static double GetUserMeanFromDesign(TDistributionTypeSet ADistribution, double ADesignPartial, double ADesignValue, double ADesignStdDev, double AStdDev) { double result; result = 0; if ((ADistribution == TDistributionTypeSet.dsNormal)) { result = getNormalMeanFromDesign(ADesignPartial, ADesignValue, ADesignStdDev, AStdDev); } if ((ADistribution == TDistributionTypeSet.dsLogNormal)) { result = getLogNormalMeanFromDesign(ADesignPartial, ADesignValue, ADesignStdDev, AStdDev); } if ((ADistribution == TDistributionTypeSet.dsNone)) { result = ADesignValue*ADesignPartial; } return result; } // ======================================================================================================================= // Date ID Modification // 2003-09-10 Best Created. // 2006-03-03 Zant Parameters for CuGradient added. // 2007-02-12 Zant POP added. Dist and StdDev RatioCuPc Passive and Active added. // 2007-02-22 Zant CompressionRatio added to probabilistic defaults. // ======================================================================================================================= public static double GetMeanFromDesign(TConvertTypeSet AConvert, TStabSoilData ASoil, TProbabilisticDefaults ADefault) { double result; result = 0; if (((ASoil != null))) { if (ASoil.UseProbDefaults) { switch (AConvert) { case TConvertTypeSet.ctCohesion: result = GetDefaultMeanFromDesign(ASoil.DistCohesion, ADefault.CohesionDesignPartial, ASoil.Cohesion, ADefault.CohesionDesignStdDev, ADefault.CohesionVariationTotal); break; case TConvertTypeSet.ctPhi: result = GetDefaultMeanFromDesign(ASoil.DistPhi, ADefault.PhiDesignPartial, ASoil.Phi, ADefault.PhiDesignStdDev, ADefault.PhiVariationTotal); break; case TConvertTypeSet.ctRatioCuPc: result = GetDefaultMeanFromDesign(ASoil.DistRatioCuPc, ADefault.RatioCuPcDesignPartial, ASoil.RatioCuPc, ADefault.RatioCuPcDesignStdDev, ADefault.RatioCuPcVariationTotal); break; case TConvertTypeSet.ctCuTop: result = GetDefaultMeanFromDesign(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuTop, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuBottom: result = GetDefaultMeanFromDesign(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuBottom, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuGradientTop: result = GetDefaultMeanFromDesign(ASoil.DistCuTop, ADefault.CuDesignPartial, ASoil.CuTop, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuGradient: result = GetDefaultMeanFromDesign(ASoil.DistCuGradient, ADefault.CuDesignPartial, ASoil.CuGradient, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctRatioCuPcPassive: result = GetDefaultMeanFromDesign(ASoil.DistRatioCuPc, ADefault.RatioCuPcDesignPartial, ASoil.RatioCuPcPassive, ADefault.RatioCuPcDesignStdDev, ADefault.RatioCuPcVariationTotal); break; case TConvertTypeSet.ctRatioCuPcActive: result = GetDefaultMeanFromDesign(ASoil.DistRatioCuPc, ADefault.RatioCuPcDesignPartial, ASoil.RatioCuPcActive, ADefault.RatioCuPcDesignStdDev, ADefault.RatioCuPcVariationTotal); break; case TConvertTypeSet.ctCuPassiveTop: result = GetDefaultMeanFromDesign(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuPassiveTop, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuPassiveBottom: result = GetDefaultMeanFromDesign(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuPassiveBottom, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuActiveTop: result = GetDefaultMeanFromDesign(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuActiveTop, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctCuActiveBottom: result = GetDefaultMeanFromDesign(ASoil.DistCu, ADefault.CuDesignPartial, ASoil.CuActiveBottom, ADefault.CuDesignStdDev, ADefault.CuVariationTotal); break; case TConvertTypeSet.ctStressTabFactor: result = GetDefaultMeanFromDesign(ASoil.DistStressTable, ADefault.StressTableDesignPartial, Constants.CNormValue, ADefault.StressTableDesignStdDev, ADefault.StressTableVariationTotal); break; case TConvertTypeSet.ctPop: result = GetDefaultMeanFromDesign(ASoil.DistPOP, ADefault.POPDesignPartial, ASoil.POP, ADefault.POPDesignStdDev, ADefault.POPVariationTotal); break; } } else { switch (AConvert) { case TConvertTypeSet.ctCohesion: // if not use prob defaults result = GetUserMeanFromDesign(ASoil.DistCohesion, ASoil.DesignPartialCohesion, ASoil.Cohesion, ASoil.DesignStdCohesion, ASoil.StdCohesion); break; case TConvertTypeSet.ctPhi: result = GetUserMeanFromDesign(ASoil.DistPhi, ASoil.DesignPartialPhi, ASoil.Phi, ASoil.DesignStdPhi, ASoil.StdPhi); break; case TConvertTypeSet.ctRatioCuPc: result = GetUserMeanFromDesign(ASoil.DistRatioCuPc, ASoil.DesignPartialRatioCuPc, ASoil.RatioCuPc, ASoil.DesignStdRatioCuPc, ASoil.StdRatioCuPc); break; case TConvertTypeSet.ctCuTop: result = GetUserMeanFromDesign(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuTop, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuBottom: result = GetUserMeanFromDesign(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuBottom, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuGradientTop: result = GetUserMeanFromDesign(ASoil.DistCuTop, ASoil.DesignPartialCu, ASoil.CuTop, ASoil.DesignStdCu, ASoil.StdCuTop); break; case TConvertTypeSet.ctCuGradient: result = GetUserMeanFromDesign(ASoil.DistCuGradient, ASoil.DesignPartialCu, ASoil.CuGradient, ASoil.DesignStdCu, ASoil.StdCuGradient); break; case TConvertTypeSet.ctRatioCuPcPassive: result = GetUserMeanFromDesign(ASoil.DistRatioCuPcPassive, ASoil.DesignPartialRatioCuPc, ASoil.RatioCuPcPassive, ASoil.DesignStdRatioCuPc, ASoil.StdRatioCuPcPassive); break; case TConvertTypeSet.ctRatioCuPcActive: result = GetUserMeanFromDesign(ASoil.DistRatioCuPcActive, ASoil.DesignPartialRatioCuPc, ASoil.RatioCuPcActive, ASoil.DesignStdRatioCuPc, ASoil.StdRatioCuPcActive); break; case TConvertTypeSet.ctCuPassiveTop: result = GetUserMeanFromDesign(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuPassiveTop, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuPassiveBottom: result = GetUserMeanFromDesign(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuPassiveBottom, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuActiveTop: result = GetUserMeanFromDesign(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuActiveTop, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctCuActiveBottom: result = GetUserMeanFromDesign(ASoil.DistCu, ASoil.DesignPartialCu, ASoil.CuActiveBottom, ASoil.DesignStdCu, ASoil.StdCu); break; case TConvertTypeSet.ctStressTabFactor: // if no defaults are given the values must be in the table result = -1; break; case TConvertTypeSet.ctPop: result = GetUserMeanFromDesign(ASoil.DistPOP, ASoil.DesignPartialPOP, ASoil.POP, ASoil.DesignStdPOP, ASoil.StdPOP); break; } } } return result; } // ======================================================================================================================= // Decription GetInputVariables. // The assumption is that the input parameters (ASoil.Cohesion) etc // are the values needed // // Date ID Modification // 2003-09-10 Best Created. // 2006-03-03 Zant Parameters for CuGradient added. // 2007-02-12 Zant POP added. // 2007-02-22 Zant CompressionRatio added to probabilistic defaults. // ======================================================================================================================= public static double GetInputVariables(TConvertTypeSet AConvert, TStabSoilData ASoil) { double result; result = 0; switch (AConvert) { case TConvertTypeSet.ctCohesion: result = ASoil.Cohesion; break; case TConvertTypeSet.ctPhi: result = ASoil.Phi; break; case TConvertTypeSet.ctRatioCuPc: result = ASoil.RatioCuPc; break; case TConvertTypeSet.ctCuTop: result = ASoil.CuTop; break; case TConvertTypeSet.ctCuBottom: result = ASoil.CuBottom; break; case TConvertTypeSet.ctCuGradientTop: result = ASoil.CuTop; break; case TConvertTypeSet.ctCuGradient: result = ASoil.CuGradient; break; case TConvertTypeSet.ctRatioCuPcPassive: result = ASoil.RatioCuPcPassive; break; case TConvertTypeSet.ctRatioCuPcActive: result = ASoil.RatioCuPcActive; break; case TConvertTypeSet.ctCuPassiveTop: result = ASoil.CuPassiveTop; break; case TConvertTypeSet.ctCuPassiveBottom: result = ASoil.CuPassiveBottom; break; case TConvertTypeSet.ctCuActiveTop: result = ASoil.CuActiveTop; break; case TConvertTypeSet.ctCuActiveBottom: result = ASoil.CuActiveBottom; break; case TConvertTypeSet.ctStressTabFactor: result = Constants.CNormValue; break; case TConvertTypeSet.ctPop: result = ASoil.POP; break; case TConvertTypeSet.ctRRatio: result = ASoil.RRatio; break; } return result; } // ======================================================================================================================= // Decription GetSoilParameterValue // Find or calculate the requested parameters // // Date ID Modification // 2003-09-10 Best Created. // ======================================================================================================================= public static double GetSoilParameterValue(TConvertTypeSet AConvert, TStabSoilData ASoil, bool IsProbabilisticModel, TProbabilisticDefaults ADefault, TProbInputValuesSet ADefaultProbInput, TProbCalculationType AProbCalculationType) { double result; TProbInputValuesSet LProbMethod; // the prob input values are mostly not filled if ((ASoil.ProbInputValues == TProbInputValuesSet.pivNone)) { LProbMethod = ADefaultProbInput; } else { LProbMethod = ASoil.ProbInputValues; } result = 0; if (IsProbabilisticModel) { if ((AProbCalculationType == TProbCalculationType.pctDeterministicMean) || (AProbCalculationType == TProbCalculationType.pctProbabilistic)) { if ((LProbMethod == TProbInputValuesSet.pivMean)) { result = GetInputVariables(AConvert, ASoil); } else { if ((GetInputVariables(AConvert, ASoil) > 0.001)) { result = GetMeanFromDesign(AConvert, ASoil, ADefault); } } } if ((AProbCalculationType == TProbCalculationType.pctDeterministicDesign)) { if ((LProbMethod == TProbInputValuesSet.pivMean)) { if ((GetInputVariables(AConvert, ASoil) > 0.001)) { result = GetDesignFromMean(AConvert, ASoil, ADefault); } } else { result = GetInputVariables(AConvert, ASoil); } } } else { result = GetInputVariables(AConvert, ASoil); } return result; } // ======================================================================================================================= // Date ID Modification // 2004-02-20 Zant Created // 2006-03-03 Zant Parameters for CuGradient added. // 2007-02-12 Zant POP added. Dist and StdDev RatioCuPc Passive and Active added. // 2007-02-22 Zant CompressionRatio added to probabilistic defaults. // ======================================================================================================================= public static void UpdateSoilWithDefaults(TProbabilisticDefaults AProbabilisticDefaults, TProbInputValuesSet ADefaultInputValues, ref TStabSoilData ASoil) { if ((ASoil.UseProbDefaults)) { ASoil.DistCohesion = AProbabilisticDefaults.CohesionDistribution; ASoil.DistPhi = AProbabilisticDefaults.PhiDistribution; ASoil.DistStressTable = AProbabilisticDefaults.StressTableDistribution; ASoil.DistRatioCuPc = AProbabilisticDefaults.RatioCuPcDistribution; ASoil.DistCu = AProbabilisticDefaults.CuDistribution; ASoil.DistCuTop = AProbabilisticDefaults.CuDistribution; ASoil.DistCuGradient = AProbabilisticDefaults.CuDistribution; ASoil.DistPOP = AProbabilisticDefaults.POPDistribution; ASoil.DistRatioCuPcPassive = AProbabilisticDefaults.RatioCuPcDistribution; ASoil.DistRatioCuPcActive = AProbabilisticDefaults.RatioCuPcDistribution; ASoil.StdPn = AProbabilisticDefaults.HydraulicPressureTotalStdDev; ASoil.DistPn = AProbabilisticDefaults.HydraulicPressureDistribution; ASoil.DesignPartialCohesion = AProbabilisticDefaults.CohesionDesignPartial; ASoil.DesignPartialPhi = AProbabilisticDefaults.PhiDesignPartial; ASoil.DesignPartialStressTable = AProbabilisticDefaults.StressTableDesignPartial; ASoil.DesignPartialRatioCuPc = AProbabilisticDefaults.RatioCuPcDesignPartial; ASoil.DesignPartialCu = AProbabilisticDefaults.CuDesignPartial; ASoil.DesignPartialPOP = AProbabilisticDefaults.POPDesignPartial; ASoil.DesignPartialRRatio = AProbabilisticDefaults.CompressionRatioDesignPartial; ASoil.DesignStdCohesion = AProbabilisticDefaults.CohesionDesignStdDev; ASoil.DesignStdPhi = AProbabilisticDefaults.PhiDesignStdDev; ASoil.DesignStdStressTable = AProbabilisticDefaults.StressTableDesignStdDev; ASoil.DesignStdRatioCuPc = AProbabilisticDefaults.RatioCuPcDesignStdDev; ASoil.DesignStdCu = AProbabilisticDefaults.CuDesignStdDev; ASoil.DesignStdPOP = AProbabilisticDefaults.POPDesignStdDev; ASoil.DesignStdRRatio = AProbabilisticDefaults.CompressionRatioDesignStdDev; if ((ProbInputValuesType(ASoil, ADefaultInputValues) == TProbInputValuesSet.pivMean)) { // Use probabilistic defaults. Input values mean ASoil.StdCohesion = ASoil.Cohesion*AProbabilisticDefaults.CohesionVariationTotal; ASoil.StdPhi = ASoil.Phi*AProbabilisticDefaults.PhiVariationTotal; ASoil.StdRatioCuPc = ASoil.RatioCuPc*AProbabilisticDefaults.RatioCuPcVariationTotal; ASoil.StdCu = ((ASoil.CuTop + ASoil.CuBottom)/2)*AProbabilisticDefaults.CuVariationTotal; ASoil.StdCuTop = ASoil.CuTop*AProbabilisticDefaults.CuVariationTotal; ASoil.StdCuGradient = ASoil.CuGradient*AProbabilisticDefaults.CuVariationTotal; ASoil.StdPOP = ASoil.POP*AProbabilisticDefaults.POPVariationTotal; ASoil.StdRatioCuPcPassive = ASoil.RatioCuPcPassive*AProbabilisticDefaults.RatioCuPcVariationTotal; ASoil.StdRatioCuPcActive = ASoil.RatioCuPcActive*AProbabilisticDefaults.RatioCuPcVariationTotal; } else { // Use probabilistic defaults. Input values design ASoil.StdCohesion = GetMeanFromDesign(TConvertTypeSet.ctCohesion, ASoil, AProbabilisticDefaults)*AProbabilisticDefaults.CohesionVariationTotal; ASoil.StdPhi = GetMeanFromDesign(TConvertTypeSet.ctPhi, ASoil, AProbabilisticDefaults)*AProbabilisticDefaults.PhiVariationTotal; ASoil.StdRatioCuPc = GetMeanFromDesign(TConvertTypeSet.ctRatioCuPc, ASoil, AProbabilisticDefaults)*AProbabilisticDefaults.RatioCuPcVariationTotal; ASoil.StdCu = ((GetMeanFromDesign(TConvertTypeSet.ctCuTop, ASoil, AProbabilisticDefaults) + GetMeanFromDesign(TConvertTypeSet.ctCuBottom, ASoil, AProbabilisticDefaults))/2)*AProbabilisticDefaults.CuVariationTotal; ASoil.StdCuTop = GetMeanFromDesign(TConvertTypeSet.ctCuGradientTop, ASoil, AProbabilisticDefaults)*AProbabilisticDefaults.CuVariationTotal; ASoil.StdCuGradient = GetMeanFromDesign(TConvertTypeSet.ctCuGradient, ASoil, AProbabilisticDefaults)*AProbabilisticDefaults.CuVariationTotal; ASoil.StdPOP = GetMeanFromDesign(TConvertTypeSet.ctPop, ASoil, AProbabilisticDefaults)*AProbabilisticDefaults.POPVariationTotal; ASoil.StdRatioCuPcPassive = GetMeanFromDesign(TConvertTypeSet.ctRatioCuPcPassive, ASoil, AProbabilisticDefaults)*AProbabilisticDefaults.RatioCuPcVariationTotal; ASoil.StdRatioCuPcActive = GetMeanFromDesign(TConvertTypeSet.ctRatioCuPcActive, ASoil, AProbabilisticDefaults)*AProbabilisticDefaults.RatioCuPcVariationTotal; } } } // ======================================================================================================================= // Date ID Modification // 2004-02-20 Zant Created // ======================================================================================================================= public static TProbInputValuesSet ProbInputValuesType(TStabSoilData ASoil, TProbInputValuesSet ADefaultInputValues) { TProbInputValuesSet result; if ((ASoil.ProbInputValues == TProbInputValuesSet.pivNone)) { result = ADefaultInputValues; } else { result = ASoil.ProbInputValues; } return result; } } // end SoilParametersCalculate }