Index: Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneErosionBoundaryCalculationService.cs =================================================================== diff -u -r52b71daa08d9133ecbb4b516cc585118e7ba505b -rfb58ab4a91a86c0b07665d31beb2334bdbd18413 --- Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneErosionBoundaryCalculationService.cs (.../DuneErosionBoundaryCalculationService.cs) (revision 52b71daa08d9133ecbb4b516cc585118e7ba505b) +++ Ringtoets/DuneErosion/src/Ringtoets.DuneErosion.Service/DuneErosionBoundaryCalculationService.cs (.../DuneErosionBoundaryCalculationService.cs) (revision fb58ab4a91a86c0b07665d31beb2334bdbd18413) @@ -21,8 +21,10 @@ using System; using System.IO; +using Core.Common.Utils; using log4net; using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Service; using Ringtoets.DuneErosion.Data; using Ringtoets.DuneErosion.Service.Properties; @@ -68,17 +70,25 @@ CalculationServiceHelper.LogCalculationBeginTime(calculationName); var exceptionThrown = false; - var inputValid = false; + var inputValid = true; try { - DunesBoundaryConditionsCalculationInput calculationInput = CreateInput(duneLocation, failureMechanism, assessmentSection, hydraulicBoundaryDatabaseFilePath); - inputValid = true; + double mechanismSpecificNorm = failureMechanism.GetMechanismSpecificNorm(assessmentSection); + DunesBoundaryConditionsCalculationInput calculationInput = CreateInput(duneLocation, mechanismSpecificNorm, hydraulicBoundaryDatabaseFilePath); calculator.Calculate(calculationInput); if (string.IsNullOrEmpty(calculator.LastErrorFileContent)) { + duneLocation.Output = CreateDuneLocationOutput(duneLocation.Name, calculationInput.Beta, mechanismSpecificNorm); } } + catch (ArgumentException e) + { + log.Error(e.Message); + exceptionThrown = true; + inputValid = false; + throw; + } catch (HydraRingFileParserException) { if (!canceled) @@ -120,7 +130,6 @@ { throw new HydraRingCalculationException(lastErrorFileContent); } - } } @@ -137,24 +146,30 @@ canceled = true; } - private static DunesBoundaryConditionsCalculationInput CreateInput(DuneLocation duneLocation, - DuneErosionFailureMechanism failureMechanism, - IAssessmentSection assessmentSection, - string hydraulicBoundaryDatabaseFilePath) + private DuneLocationOutput CreateDuneLocationOutput(string duneLocationName, double targetReliability, double targetProbability) { - double mechanismSpecificNorm; + var reliability = calculator.ReliabilityIndex; + var probability = StatisticsConverter.ReliabilityToProbability(reliability); - try + CalculationConvergence converged = RingtoetsCommonDataCalculationService.CalculationConverged( + calculator.ReliabilityIndex, targetProbability); + + if (converged != CalculationConvergence.CalculatedConverged) { - mechanismSpecificNorm = failureMechanism.GetMechanismSpecificNorm(assessmentSection); + log.WarnFormat(Resources.DuneErosionBoundaryCalculationService_CreateDuneLocationOutput_Calculation_for_location_0_not_converged, duneLocationName); } - catch (ArgumentException e) - { - log.Error(e.Message); - throw; - } - var dunesBoundaryConditionsCalculationInput = new DunesBoundaryConditionsCalculationInput(1, duneLocation.Id, mechanismSpecificNorm, duneLocation.Orientation); + return new DuneLocationOutput(calculator.WaterLevel, calculator.WaveHeight, + calculator.WavePeriod, targetProbability, + targetReliability, probability, + reliability, converged); + } + + private static DunesBoundaryConditionsCalculationInput CreateInput(DuneLocation duneLocation, + double norm, + string hydraulicBoundaryDatabaseFilePath) + { + var dunesBoundaryConditionsCalculationInput = new DunesBoundaryConditionsCalculationInput(1, duneLocation.Id, norm, duneLocation.Orientation); HydraRingSettingsDatabaseHelper.AssignSettingsFromDatabase(dunesBoundaryConditionsCalculationInput, hydraulicBoundaryDatabaseFilePath); return dunesBoundaryConditionsCalculationInput; }