// Copyright (C) Stichting Deltares 2023. All rights reserved. // // This file is part of the application DAM - Live. // // DAM - Live 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.Collections.Generic; using System.Linq; using Deltares.Dam.Application.Live; using Deltares.Dam.Data; using Deltares.DamLive.TestHelper; using NUnit.Framework; namespace Deltares.DamLive.Tests; [TestFixture] [Category("Integration")] public class StabilityInsideUpliftVanGridTest { const string projectIntegrationFilename = @"DAMLive.damx"; const string input1AFilename = @"live.InputTimeSeriesMHW.xml"; const string output1AFilename = @"live.OutputTimeSeriesMHW.xml"; const string calculationParametersIntegrationFilename = @"live.ParametersFile.xml"; const string testWorkingFolder = @".\damLiveUpliftVanGridWork"; private const string testIntegrationDataFolder = @"..\..\..\data\IntegerationTests\StabilityInsideUpliftVanGrid"; private List locations; private DamEngineRunner runner; [SetUp] public void SetupFixture() { IoHelper.RemoveTestWorkingDirectory(testWorkingFolder + GeneralHelper.CMinCores); // to be sure no test directory exist from previous tests IoHelper.RemoveTestWorkingDirectory(testWorkingFolder + GeneralHelper.CMaxCores); } [TearDown] public void TearDownFixture() { IoHelper.RemoveTestWorkingDirectory(testWorkingFolder + GeneralHelper.CMinCores); IoHelper.RemoveTestWorkingDirectory(testWorkingFolder + GeneralHelper.CMaxCores); } [SetUp] public void SetupTest() {} [Test] [Category("Integration")] [TestCase(GeneralHelper.CMinCores)] [TestCase(GeneralHelper.CMaxCores)] public void CalculateStabilityInsideUpliftVanGridUsingTestFilesHasExpectedResultsInOutputFile(int maxCores) { const double cTolerance = 0.0005; var generalHelper = new GeneralHelper(); string testFileName = "CalculateStabilityInsideUpliftVanGrid"+ maxCores; generalHelper.SetupIntegrationProject(maxCores, testWorkingFolder, testIntegrationDataFolder, input1AFilename, output1AFilename, testFileName, calculationParametersIntegrationFilename, projectIntegrationFilename, out runner, out locations); runner.Initialize(); runner.MaxCalculationCores = maxCores; Assert.IsNotNull(runner); Assert.IsNotNull(runner.DamProjectData); Assert.IsNotNull(runner.CalculationParameters); Assert.IsNotNull(runner.CalculationParameters.CalculationModules); Assert.IsNotNull(runner.CalculationParameters.MStabParameters); runner.Run(); runner.OutputTimeSeriesCollection.Save("UpliftVanOutputFile" + maxCores); generalHelper.AssertNoErrors(runner); // Assertions List series = runner.OutputTimeSeriesCollection.Series; var seriesCount = 0; var resultsCount = 0; string[] validParameterIDs = Enum.GetNames(typeof(TimeSerieParameters)); foreach (TimeSerie timeSeries in series) { Assert.IsTrue(validParameterIDs.Any(n => n == timeSeries.ParameterId)); Assert.IsTrue(locations.Any(l => l.Name == timeSeries.LocationId)); // StabilityInside check if (timeSeries.ParameterId == TimeSerieParameters.StabilityInsideFactor.ToString()) { if (timeSeries.LocationId == "Purmer_PU0042+00_K") { TimeSerieEntry firstEntry = timeSeries.Entries.First(); Assert.AreEqual(1.456, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; TimeSerieEntry lastEntry = timeSeries.Entries.Last(); Assert.AreEqual(1.583, lastEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; } if (timeSeries.LocationId == "Purmer_PU0042+00_K_V") { TimeSerieEntry firstEntry = timeSeries.Entries.First(); Assert.AreEqual(1.366, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; TimeSerieEntry lastEntry = timeSeries.Entries.Last(); Assert.AreEqual(1.480, lastEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; } if (timeSeries.LocationId == "Purmer_PU0042+00_R") { TimeSerieEntry firstEntry = timeSeries.Entries.First(); Assert.AreEqual(1.248, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; TimeSerieEntry lastEntry = timeSeries.Entries.Last(); Assert.AreEqual(1.359, lastEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; } if (timeSeries.LocationId == "Purmer_PU0042+00_R_V") { TimeSerieEntry firstEntry = timeSeries.Entries.First(); Assert.AreEqual(1.172, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; TimeSerieEntry lastEntry = timeSeries.Entries.Last(); Assert.AreEqual(1.271, lastEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; } if (timeSeries.LocationId == "Purmer_PU0110+20_K") { TimeSerieEntry firstEntry = timeSeries.Entries.First(); Assert.AreEqual(Double.NaN, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; TimeSerieEntry lastEntry = timeSeries.Entries.Last(); Assert.AreEqual(Double.NaN, lastEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; } if (timeSeries.LocationId == "Purmer_PU0110+20_K_V") { TimeSerieEntry firstEntry = timeSeries.Entries.First(); Assert.AreEqual(Double.NaN, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; TimeSerieEntry lastEntry = timeSeries.Entries.Last(); Assert.AreEqual(Double.NaN, lastEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; } if (timeSeries.LocationId == "Purmer_PU0110+20_R") { TimeSerieEntry firstEntry = timeSeries.Entries.First(); Assert.AreEqual(Double.NaN, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; TimeSerieEntry lastEntry = timeSeries.Entries.Last(); Assert.AreEqual(Double.NaN, lastEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; } if (timeSeries.LocationId == "Purmer_PU0110+20_R_V") { TimeSerieEntry firstEntry = timeSeries.Entries.First(); Assert.AreEqual(Double.NaN, firstEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; TimeSerieEntry lastEntry = timeSeries.Entries.Last(); Assert.AreEqual(Double.NaN, lastEntry.Value, cTolerance, "The computed safety factory is not correct"); resultsCount++; } } seriesCount++; } Assert.IsTrue(seriesCount > 0, "No output time series"); Assert.AreEqual(16, resultsCount, "Incorrect number of results"); } }