Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs =================================================================== diff -u -r1985 -r2001 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 1985) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/MacroStabilityInwards/MacroStabilityInwardsKernelWrapper.cs (.../MacroStabilityInwardsKernelWrapper.cs) (revision 2001) @@ -32,11 +32,12 @@ using Deltares.DamEngine.Data.Design; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.General.Results; -using Deltares.DamEngine.Data.Geometry; using Deltares.DamEngine.Data.Geotechnics; using Deltares.DamEngine.Data.Standard.Calculation; +using Deltares.MacroStability.Geometry; using Deltares.MacroStability.Standard; using Deltares.WTIStability.Calculation.Wrapper; +using GeometryPoint = Deltares.DamEngine.Data.Geometry.GeometryPoint; using LogMessage = Deltares.DamEngine.Data.Standard.Logging.LogMessage; using LogMessageType = Deltares.DamEngine.Data.Standard.Logging.LogMessageType; @@ -57,7 +58,7 @@ public bool tmpPresumePrepareSucceeds; //ToDo MWDAM-1356 public bool tmpPresumeInputValid; //ToDo MWDAM-1356 - public bool tmpPresumeRunSucceeds; //ToDo MWDAM-1356, MWDAM-1357 + public bool tmpPresumeRunSucceeds; //ToDo MWDAM-1356 /// /// Prepares the specified dam kernel input. @@ -178,12 +179,12 @@ messages.Add(new LogMessage { Message = result.Text, - MessageType = ConvertValidationResultTypeToLogMessageType(result.MessageType) + MessageType = ConvertKernelValidationResultTypeToLogMessageType(result.MessageType) }); } } - internal static LogMessageType ConvertValidationResultTypeToLogMessageType(ValidationResultType messageType) + internal static LogMessageType ConvertKernelValidationResultTypeToLogMessageType(ValidationResultType messageType) { var translationTable = new Dictionary() { @@ -216,35 +217,36 @@ ThrowWhenMacroStabilityCalculatorNull(stabilityCalculator); macroStabilityOutput.CalculationResult = CalculationResult.NoRun; macroStabilityOutput.StabilityOutputItems = new List(); + messages = new List(); //this must be code when prepare is done -// try -// { -// string kernelMessage = macroStabilityCalculator.Run(); -// ParseRunResult(kernelMessage, macroStabilityOutput, messages); -// macroStabilityOutput.CalculationResult = CalculationResult.Succeeded; -// } -// catch (Exception e) -// { -// macroStabilityOutput.CalculationResult = CalculationResult.UnexpectedError; -// messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); -// } + // try + // { + // string kernelMessage = macroStabilityCalculator.Run(); + // ParseRunResult(kernelMessage, macroStabilityOutput, messages); + // macroStabilityOutput.CalculationResult = CalculationResult.Succeeded; + // } + // catch (Exception e) + // { + // macroStabilityOutput.CalculationResult = CalculationResult.UnexpectedError; + // messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); + // } // ToDo MWDAM-1356: setting input is not done yet. Temporary test code added. // start of temporary test code if (tmpPresumeRunSucceeds) { //presume run succeeded - MacroStabilityOutputItem macroStabilityOutputItem; - ParseRunResult("", out macroStabilityOutputItem, out messages); + MacroStabilityOutputItem macroStabilityOutputItem = new MacroStabilityOutputItem(); + macroStabilityOutputItem.CalculationResult = CalculationResult.Succeeded; + macroStabilityOutputItem.SafetyFactor = 1.357; macroStabilityOutput.CalculationResult = macroStabilityOutputItem.CalculationResult; macroStabilityOutput.StabilityOutputItems.Add(macroStabilityOutputItem); } else { //presume run failed - macroStabilityOutput.CalculationResult = CalculationResult.UnexpectedError; - messages = new List(); + macroStabilityOutput.CalculationResult = CalculationResult.RunFailed; messages.Add(new LogMessage(LogMessageType.Error, null, "run failed")); } // end of temporary test code @@ -255,31 +257,61 @@ internal void ParseRunResult(string xmlRunResult, out MacroStabilityOutputItem macroStabilityOutputItem, out List messages) { messages = new List(); - // ToDo MWDAM-1357: Parse the xml from the kernel, fill results and add message with type Error, Info or Warning macroStabilityOutputItem = new MacroStabilityOutputItem(); - // start of temporary test code - if (tmpPresumeRunSucceeds) + var calculationResults = WtiDeserializer.DeserializeResult(xmlRunResult); + var slicesCount = calculationResults.Curve.Slices.Count; + if (slicesCount > 0) { - //presume run succeeded - macroStabilityOutputItem.StabilityModelType = MStabModelType.UpliftVan; - macroStabilityOutputItem.SafetyFactor = 1.357; // presume SafetyFactor in xml output is 1.357 - macroStabilityOutputItem.CalculationResult = CalculationResult.Succeeded; // presume Succeeded in xml output is true - //presume there are no messages in xml output, but there might be info or warning messages + calculationResults.XMinEntry = calculationResults.Curve.Slices[0].TopLeftX; + calculationResults.XMaxEntry = calculationResults.Curve.Slices[slicesCount - 1].TopRightX; } else { - // ToDo MWDAM-1357: get an example of output that has a failed run with error messages - //presume run failed - macroStabilityOutputItem.StabilityModelType = MStabModelType.UpliftVan; - macroStabilityOutputItem.SafetyFactor = -1; // presume SafetyFactor in xml output is NaN. Set to -1? - macroStabilityOutputItem.CalculationResult = CalculationResult.RunFailed; // presume Succeeded in xml output is false - //when run failed there are probably also error messages in the xml output - messages.Add(new LogMessage(LogMessageType.Error, null, "Index was out of range. Must be non-negative and less than the size of the collection.\r\nParameter name: index")); - messages.Add(new LogMessage(LogMessageType.Error, null, "Fatale fout in Uplift-Van berekening")); + macroStabilityOutputItem.CalculationResult = CalculationResult.UnexpectedError; } - // end of temporary test code + + macroStabilityOutputItem.CalculationResult = calculationResults.Calculated ? + CalculationResult.Succeeded : CalculationResult.RunFailed; + macroStabilityOutputItem.SafetyFactor = calculationResults.FactorOfSafety; + macroStabilityOutputItem.CircleSurfacePointLeftXCoordinate = calculationResults.XMinEntry; + macroStabilityOutputItem.CircleSurfacePointRightXCoordinate = calculationResults.XMaxEntry; + macroStabilityOutputItem.StabilityModelType = ConvertKernelModelOptionsTypeToMStabModelType(calculationResults.ModelOption); + foreach (var message in calculationResults.Messages) + { + messages.Add(new LogMessage + { + Message = message.Message, + MessageType = ConvertKernelLogMessageTypeToLogMessageType(message.MessageType) + }); + } } + internal static MStabModelType ConvertKernelModelOptionsTypeToMStabModelType(ModelOptions modelOption) + { + var translationTable = new Dictionary() + { + {ModelOptions.Bishop, MStabModelType.Bishop}, + {ModelOptions.UpliftVan, MStabModelType.UpliftVan}, + {ModelOptions.UpliftSpencer, MStabModelType.UpliftSpencer}, + {ModelOptions.Spencer, MStabModelType.Spencer}, + {ModelOptions.Fellenius, MStabModelType.Fellenius}, + {ModelOptions.BishopProbabilityRandomField, MStabModelType.BishopRandomField}, + {ModelOptions.HorizontalBalance, MStabModelType.HorizontalBalance}, + }; + return translationTable[modelOption]; + } + + internal static LogMessageType ConvertKernelLogMessageTypeToLogMessageType(MacroStability.Standard.LogMessageType messageType) + { + var translationTable = new Dictionary() + { + {MacroStability.Standard.LogMessageType.Info, LogMessageType.Info}, + {MacroStability.Standard.LogMessageType.Warning, LogMessageType.Warning}, + {MacroStability.Standard.LogMessageType.Error, LogMessageType.Error} + }; + return translationTable[messageType]; + } + /// /// Creates the calculator for stability based on kernel input. /// @@ -438,9 +470,7 @@ double fosRequired = damKernelInput.Location.ModelFactors.RequiredSafetyFactorStabilityInnerSlope.Value; double fosAchieved = macroStabilityOutput.StabilityOutputItems[0].SafetyFactor; - //ToDo MWDAM-1357: not clear where the exitPointXCoordinate must come from - //double exitPointXCoordinate = macroStabilityOutput.StabilityOutputItems[0].CircleSurfacePointRightXCoordinate; - double exitPointXCoordinate = 1.123; // ToDo replace by value above. set a value for test. + double exitPointXCoordinate = macroStabilityOutput.StabilityOutputItems[0].CircleSurfacePointRightXCoordinate; GeometryPoint limitPointForShoulderDesign = damKernelInput.Location.SurfaceLine.GetLimitPointForShoulderDesign(); evaluationMessage = String.Format(Resources.FactorAchievedVsFactorRequired, fosAchieved, fosRequired); if (exitPointXCoordinate > limitPointForShoulderDesign.X)