// 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");
}
}