Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapper.cs =================================================================== diff -u -r1984 -r2107 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapper.cs (.../WtiPipingSellmeijerRevisedKernelWrapper.cs) (revision 1984) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapper.cs (.../WtiPipingSellmeijerRevisedKernelWrapper.cs) (revision 2107) @@ -46,6 +46,7 @@ public class WtiPipingSellmeijerRevisedKernelWrapper: IKernelWrapper { private const double defaultMaxReturnValue = 90.0; + private const double defaultFailedValue = 0.0; private const double defaultFluidisationGradient = 0.3; /// @@ -137,27 +138,61 @@ /// The kernel data input. /// The kernel data output. /// The messages. - public void Execute(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, out List messages) + public void Execute(IKernelDataInput kernelDataInput, IKernelDataOutput kernelDataOutput, + out List messages) { var wtiPipingSellmeijerRevisedInput = kernelDataInput as WtiPipingSellmeijerRevisedInput; - var wtiPipingSellmeijerRevisedOutput = (WtiPipingSellmeijerRevisedOutput)kernelDataOutput; + var wtiPipingSellmeijerRevisedOutput = (WtiPipingSellmeijerRevisedOutput) kernelDataOutput; ThrowWhenKernelInputNull(wtiPipingSellmeijerRevisedInput); ThrowWhenKernelOutputNull(wtiPipingSellmeijerRevisedOutput); // Initialize result as no run. wtiPipingSellmeijerRevisedOutput.CalculationResult = CalculationResult.NoRun; messages = new List(); - + List upliftMessages; - PerformSingleCalculationWtiUplift(out upliftMessages, wtiPipingSellmeijerRevisedOutput, wtiPipingSellmeijerRevisedInput); + PerformSingleCalculationWtiUplift(out upliftMessages, wtiPipingSellmeijerRevisedOutput, + wtiPipingSellmeijerRevisedInput); messages.AddRange(upliftMessages); + if (wtiPipingSellmeijerRevisedOutput.CalculationResult == CalculationResult.Succeeded) + { + List heaveMessages; + PerformSingleCalculationWtiHeave(out heaveMessages, wtiPipingSellmeijerRevisedOutput, + wtiPipingSellmeijerRevisedInput); + messages.AddRange(heaveMessages); + if (wtiPipingSellmeijerRevisedOutput.CalculationResult == CalculationResult.Succeeded) + { + List pipingMessages; + PerformSingleCalculationWtiSellmeijerRevised(out pipingMessages, wtiPipingSellmeijerRevisedOutput, + wtiPipingSellmeijerRevisedInput); + messages.AddRange(pipingMessages); + } + else + { + AssignFailedValuesWtiSellmeijerRevised(wtiPipingSellmeijerRevisedOutput); + } + } + else + { + AssignFailedValuesWtiHeave(wtiPipingSellmeijerRevisedOutput); + AssignFailedValuesWtiSellmeijerRevised(wtiPipingSellmeijerRevisedOutput); + } - List heaveMessages; - PerformSingleCalculationWtiHeave(out heaveMessages, wtiPipingSellmeijerRevisedOutput, wtiPipingSellmeijerRevisedInput); - messages.AddRange(heaveMessages); + if (wtiPipingSellmeijerRevisedOutput.CalculationResult != CalculationResult.Succeeded) + { + if (wtiPipingSellmeijerRevisedOutput.CalculationResult == CalculationResult.InvalidInputStructure || + wtiPipingSellmeijerRevisedOutput.CalculationResult == CalculationResult.InvalidInputData || + wtiPipingSellmeijerRevisedOutput.CalculationResult == CalculationResult.UnexpectedError) + { + wtiPipingSellmeijerRevisedOutput.CalculationResult = CalculationResult.RunFailed; + } - List pipingMessages; - PerformSingleCalculationWtiSellmeijerRevised(out pipingMessages, wtiPipingSellmeijerRevisedOutput, wtiPipingSellmeijerRevisedInput); - messages.AddRange(pipingMessages); + var totalMessage = ""; + for (int i = 0; i < messages.Count; i++) + { + totalMessage = totalMessage + messages[i].Message + Environment.NewLine; + } + throw new WtiPipingSellmeijerRevisedException(totalMessage); + } } /// @@ -640,6 +675,7 @@ } catch (Exception e) { + AssignFailedValuesWtiSellmeijerRevised(wtiPipingOutput); wtiPipingOutput.CalculationResult = CalculationResult.UnexpectedError; messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); } @@ -667,6 +703,7 @@ } catch (Exception e) { + AssignFailedValuesWtiUplift(wtiPipingOutput); wtiPipingOutput.CalculationResult = CalculationResult.UnexpectedError; messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); } @@ -688,11 +725,33 @@ } catch (Exception e) { + AssignFailedValuesWtiHeave(wtiPipingOutput); wtiPipingOutput.CalculationResult = CalculationResult.UnexpectedError; messages.Add(new LogMessage(LogMessageType.Error, null, e.Message)); } } + internal static void AssignFailedValuesWtiUplift(WtiPipingSellmeijerRevisedOutput wtiPipingOutput) + { + wtiPipingOutput.FoSu = defaultFailedValue; + wtiPipingOutput.Hcu = defaultFailedValue; + wtiPipingOutput.DeltaPhiCu = defaultFailedValue; + } + + internal static void AssignFailedValuesWtiHeave(WtiPipingSellmeijerRevisedOutput wtiPipingOutput) + { + wtiPipingOutput.FoSh = defaultFailedValue; + wtiPipingOutput.Hch = defaultFailedValue; + wtiPipingOutput.Gradient = defaultFailedValue; + } + + internal static void AssignFailedValuesWtiSellmeijerRevised(WtiPipingSellmeijerRevisedOutput wtiPipingOutput) + { + wtiPipingOutput.FoSbe = defaultFailedValue; + wtiPipingOutput.Hcbe = defaultFailedValue; + wtiPipingOutput.DeltaPhiCbe = defaultFailedValue; + } + private static void ThrowWhenKernelInputNull(WtiPipingSellmeijerRevisedInput wtiPipingInput) { if (wtiPipingInput == null) Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/WtiPipingSellmeijerRevisedTests.cs =================================================================== diff -u -r2097 -r2107 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/WtiPipingSellmeijerRevisedTests.cs (.../WtiPipingSellmeijerRevisedTests.cs) (revision 2097) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/WtiPipingSellmeijerRevisedTests.cs (.../WtiPipingSellmeijerRevisedTests.cs) (revision 2107) @@ -8,6 +8,7 @@ using Deltares.DamEngine.Io.XmlOutput; using Deltares.DamEngine.TestHelpers; using NUnit.Framework; +using Deltares.DamEngine.Data.Standard.Calculation; namespace Deltares.DamEngine.IntegrationTests.IntegrationTests { @@ -227,8 +228,7 @@ Assert.AreEqual(2, output.Results.CalculationResults.DesignResults.Length); // Expected an english message, but this can not be fixed with version 16.2 of the kernel, see MWDAM-1395 Assert.AreEqual("De effectieve spanning mag niet negatief zijn.\r\n", output.Results.CalculationResults.DesignResults[1].PipingDesignResults.ResultMessage); - //ToDo MWDAM-1394 expected RunFailed but is succeeded - //Assert.AreEqual(CalculationResult.RunFailed, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults.DesignResults[1].CalculationResult)); + Assert.AreEqual(CalculationResult.RunFailed, ConversionHelper.ConvertToCalculationResult(output.Results.CalculationResults.DesignResults[1].CalculationResult)); //ToDo MWDAM-1396 expected location etc included in message, but is only last part of message //Assert.AreEqual("Location '100', subsoil scenario 'segment1_1D2', design scenario '1': " + //"The calculation failed with error message " + Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/Deltares.DamEngine.Calculators.csproj =================================================================== diff -u -r2050 -r2107 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/Deltares.DamEngine.Calculators.csproj (.../Deltares.DamEngine.Calculators.csproj) (revision 2050) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/Deltares.DamEngine.Calculators.csproj (.../Deltares.DamEngine.Calculators.csproj) (revision 2107) @@ -111,6 +111,7 @@ + Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapperTests.cs =================================================================== diff -u -r1970 -r2107 --- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapperTests.cs (.../WtiPipingSellmeijerRevisedKernelWrapperTests.cs) (revision 1970) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedKernelWrapperTests.cs (.../WtiPipingSellmeijerRevisedKernelWrapperTests.cs) (revision 2107) @@ -448,5 +448,99 @@ Assert.AreEqual(-10, profilePiping.BottomLevel, diff); } + + [Test] + public void TestAssignFailedValuesWtiUplift() + { + var output = new WtiPipingSellmeijerRevisedOutput(); + // Uplift + output.FoSu = 1; + output.Hcu = 1; + output.DeltaPhiCu = 1; + // Heave + output.FoSh = 1; + output.Hch = 1; + output.Gradient = 1; + // Sellmeijer revised + output.FoSbe = 1; + output.Hcbe = 1; + output.DeltaPhiCbe = 1; + WtiPipingSellmeijerRevisedKernelWrapper.AssignFailedValuesWtiUplift(output); + // Uplift + Assert.AreEqual(0, output.FoSu); + Assert.AreEqual(0, output.Hcu); + Assert.AreEqual(0, output.DeltaPhiCu); + // Heave + Assert.AreEqual(1, output.FoSh); + Assert.AreEqual(1, output.Hch); + Assert.AreEqual(1, output.Gradient); + // Sellmeijer revised + Assert.AreEqual(1, output.FoSbe); + Assert.AreEqual(1, output.Hcbe); + Assert.AreEqual(1, output.DeltaPhiCbe); + } + + [Test] + public void TestAssignFailedValuesWtiHeave() + { + var output = new WtiPipingSellmeijerRevisedOutput(); + // Uplift + output.FoSu = 1; + output.Hcu = 1; + output.DeltaPhiCu = 1; + // Heave + output.FoSh = 1; + output.Hch = 1; + output.Gradient = 1; + // Sellmeijer revised + output.FoSbe = 1; + output.Hcbe = 1; + output.DeltaPhiCbe = 1; + WtiPipingSellmeijerRevisedKernelWrapper.AssignFailedValuesWtiHeave(output); + // Uplift + Assert.AreEqual(1, output.FoSu); + Assert.AreEqual(1, output.Hcu); + Assert.AreEqual(1, output.DeltaPhiCu); + // Heave + Assert.AreEqual(0, output.FoSh); + Assert.AreEqual(0, output.Hch); + Assert.AreEqual(0, output.Gradient); + // Sellmeijer revised + Assert.AreEqual(1, output.FoSbe); + Assert.AreEqual(1, output.Hcbe); + Assert.AreEqual(1, output.DeltaPhiCbe); + } + + [Test] + public void TestAssignFailedValuesWtiSellmeijerRevised() + { + var output = new WtiPipingSellmeijerRevisedOutput(); + // Uplift + output.FoSu = 1; + output.Hcu = 1; + output.DeltaPhiCu = 1; + // Heave + output.FoSh = 1; + output.Hch = 1; + output.Gradient = 1; + // Sellmeijer revised + output.FoSbe = 1; + output.Hcbe = 1; + output.DeltaPhiCbe = 1; + WtiPipingSellmeijerRevisedKernelWrapper.AssignFailedValuesWtiSellmeijerRevised(output); + // Uplift + Assert.AreEqual(1, output.FoSu); + Assert.AreEqual(1, output.Hcu); + Assert.AreEqual(1, output.DeltaPhiCu); + // Heave + Assert.AreEqual(1, output.FoSh); + Assert.AreEqual(1, output.Hch); + Assert.AreEqual(1, output.Gradient); + // Sellmeijer revised + Assert.AreEqual(0, output.FoSbe); + Assert.AreEqual(0, output.Hcbe); + Assert.AreEqual(0, output.DeltaPhiCbe); + } + } } Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedException.cs =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedException.cs (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/WtiPipingSellmeijerRevised/WtiPipingSellmeijerRevisedException.cs (revision 2107) @@ -0,0 +1,42 @@ +// Copyright (C) Stichting Deltares 2019. All rights reserved. +// +// This file is part of the Dam Engine. +// +// The Dam Engine is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Runtime.Serialization; + +namespace Deltares.DamEngine.Calculators.KernelWrappers.WtiPipingSellmeijerRevised +{ + class WtiPipingSellmeijerRevisedException: Exception + { + public WtiPipingSellmeijerRevisedException() { } + + public WtiPipingSellmeijerRevisedException(string message) + : base(message) { } + + public WtiPipingSellmeijerRevisedException(string message, Exception inner) + : base(message, inner) { } + + protected WtiPipingSellmeijerRevisedException( + SerializationInfo info, + StreamingContext context) + : base(info, context) { } + } +}