using System; using System.Diagnostics; using System.Runtime.Serialization; using Deltares.Geotechnics; using Deltares.Stability; namespace Deltares.MStab.IO.Classic { [Serializable] public class CalculationException : Exception { // // For guidelines regarding the creation of new exception types, see // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp // and // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp // public CalculationException() {} public CalculationException(string message) : base(message) {} public CalculationException(string message, Exception inner) : base(message, inner) {} protected CalculationException( SerializationInfo info, StreamingContext context) : base(info, context) {} } internal class Calculation { /// /// Create new Calculation /// public void GetCalculation(int handle, StabilityModel stabilityModel) { try { ClassicMStabFunctionDefinitions.MStabRequestedCircleSlices classicRequestedCircleSlices = null; GetClassicMStab.GetClassicRequestedCircleSlices(handle, ref classicRequestedCircleSlices); ClassicMStabFunctionDefinitions.MStabRequestedLiftSlices classicRequestedLiftSlices = null; GetClassicMStab.GetClassicRequestedLiftSlices(handle, ref classicRequestedLiftSlices); ClassicMStabFunctionDefinitions.MStabRequestedSpencerSlices classicRequestedSpencerSlices = null; GetClassicMStab.GetClassicRequestedSpencerSlices(handle, ref classicRequestedSpencerSlices); ClassicMStabFunctionDefinitions.MStabMinimalRequiredCircleDepth classicMinimumRequiredCircleDepth = null; GetClassicMStab.GetClassicMinimumRequiredCircleDepth(handle, ref classicMinimumRequiredCircleDepth); ClassicMStabFunctionDefinitions.MStabStartValueSafetyFactor classicStartValueSafetyFactor = null; GetClassicMStab.GetClassicStartSafetyFactor(handle, ref classicStartValueSafetyFactor); ClassicMStabFunctionDefinitions.MStabNewZonePlotData classicPlotData = null; GetClassicMStab.GetClassicPlotData(handle, ref classicPlotData); ClassicMStabFunctionDefinitions.MStabModel classicModel = null; GetClassicMStab.GetClassicModel(handle, ref classicModel); ClassicMStabFunctionDefinitions.MStabCalculationOptions classicCalculationOptions = null; GetClassicMStab.GetClassicCalculationOptions(handle, ref classicCalculationOptions); ClassicMStabFunctionDefinitions.MStabGeneticAlgorithmOptions classicGeneticAlgorithmOptions = null; GetClassicMStab.GetClassicGeneticAlgorithmOptions(handle, ref classicGeneticAlgorithmOptions); //Model stabilityModel.ModelOption = (ModelOptions) classicModel.calcType; // original declaration : TMatStrengthTypeSet = (mstNone, mstCphi, mstStressTab, mstPseudoStressTab, mstMeasuredCu, mstCalculatedCu, mstGradientCu); switch (classicModel.defaulStrength) { case 1: stabilityModel.DefaultShearStrengthModel = ShearStrengthModel.CPhi; break; case 2: stabilityModel.DefaultShearStrengthModel = ShearStrengthModel.StressTable; break; case 3: stabilityModel.DefaultShearStrengthModel = ShearStrengthModel.PseudoValues; break; case 4: stabilityModel.DefaultShearStrengthModel = ShearStrengthModel.CuMeasured; break; case 5: stabilityModel.DefaultShearStrengthModel = ShearStrengthModel.CuCalculated; break; case 6: stabilityModel.DefaultShearStrengthModel = ShearStrengthModel.CuGradient; break; } //project.DefaultShearStrengthModel = (ShearStrengthModel) classicModel.defaulStrength; stabilityModel.HasZonePlot = classicModel.zonePlot; stabilityModel.HasNails = classicModel.nails; stabilityModel.IsReliability = classicModel.probabilistic; stabilityModel.HasGeotextile = classicModel.geoTextile; stabilityModel.DefaultInputModeAnalysisOption = classicModel.defaultInputValues == 2 ? ReliabilityAnalysisOption.Design : ReliabilityAnalysisOption.Mean; stabilityModel.Measurement = classicModel.globalMeasurements ? Measurement.Global : Measurement.Local; if (stabilityModel.ModelOption == ModelOptions.Bishop || stabilityModel.ModelOption == ModelOptions.Fellenius || stabilityModel.ModelOption == ModelOptions.BishopProbabilityRandomField) { stabilityModel.RequestedNumberOfSlices = classicRequestedCircleSlices.StriveCircle; } else if (stabilityModel.ModelOption == ModelOptions.Spencer) { stabilityModel.RequestedNumberOfSlices = classicRequestedSpencerSlices.striveSpencer; } else { stabilityModel.RequestedNumberOfSlices = classicRequestedLiftSlices.striveLift; } stabilityModel.MoveGrid = classicCalculationOptions.moveCalcGridOn; stabilityModel.SearchAlgorithm = (SearchAlgorithm) classicCalculationOptions.searchAlgorithm; stabilityModel.ProbabilisticCalculationType = (ProbabilisticCalculationType) classicCalculationOptions.probCalculationType; stabilityModel.SlipPlaneConstraints.SlipPlaneMinDepth = classicMinimumRequiredCircleDepth.minimalRequiredDepth; stabilityModel.StartValueSafetyFactor = classicStartValueSafetyFactor.startValueSafetyFactor; stabilityModel.ZoneAreas.RemoldingFactor = classicPlotData.remoldingFactor; stabilityModel.ZoneAreas.SchematizationFactor = classicPlotData.schematizationFactor; stabilityModel.IsEndSectionFrictionUsed = false; //Not a feature in old MStab stabilityModel.GeneticAlgorithmOptions.PopulationCount = classicGeneticAlgorithmOptions.populationCount; stabilityModel.GeneticAlgorithmOptions.EliteCount = classicGeneticAlgorithmOptions.eliteCount; stabilityModel.GeneticAlgorithmOptions.GenerationCount = classicGeneticAlgorithmOptions.generationCount; stabilityModel.GeneticAlgorithmOptions.CrossOverScatterFraction = classicGeneticAlgorithmOptions.crossOverScatterFraction; stabilityModel.GeneticAlgorithmOptions.CrossOverSinglePointFraction = classicGeneticAlgorithmOptions.crossOverSinglePointFraction; stabilityModel.GeneticAlgorithmOptions.CrossOverDoublePointFraction = classicGeneticAlgorithmOptions.crossOverDoublePointFraction; stabilityModel.GeneticAlgorithmOptions.MutationJumpFraction = classicGeneticAlgorithmOptions.mutationJumpFraction; stabilityModel.GeneticAlgorithmOptions.MutationCreepFraction = classicGeneticAlgorithmOptions.mutationCreepFraction; stabilityModel.GeneticAlgorithmOptions.MutationInverseFraction = classicGeneticAlgorithmOptions.mutationInverseFraction; stabilityModel.GeneticAlgorithmOptions.MutationRate = classicGeneticAlgorithmOptions.mutationRate; stabilityModel.GeneticAlgorithmOptions.MutationCreepReduction = classicGeneticAlgorithmOptions.mutationCreepReduction; stabilityModel.GeneticAlgorithmOptions.Seed = 1; // To reproduce results } catch (CalculationException e) { Debug.Assert(false, e.ToString()); } } } }